@kat-ai/cli 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.20.6_typescript@5.9.3_yaml@2.8.1/node_modules/tsup/assets/esm_shims.js","../src/utils/config.ts","../src/utils/colors.ts","../src/lib/ingest.ts","../src/lib/compose.ts","../src/lib/introspect.ts","../src/lib/validate.ts","../src/lib/topics.ts","../src/lib/sync.ts","../src/lib/generate.ts","../src/index.ts","../src/utils/prompts.ts","../src/commands/ingest.ts","../src/commands/compose.ts","../src/commands/introspect.ts","../src/commands/validate.ts","../src/commands/topics.ts","../src/commands/sync.ts","../src/commands/generate.ts","../src/commands/eval.ts"],"names":["__dirname","path","path2","fs","fs2","path3","path5","fs4","parse","Pinecone","saveManifestLocally","saveManifestToPinecone","fs5","path6","fs6","path7","path8","fs7","openai","resolveDefaultOpenAiChatModelId","fs8","path9","generateObject","config","z","input","output","fs3","path4","Command","runInteractive","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAIM,aACA,UAAA,EAEOA,WAAA;AAPb,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2IAAA,GAAA;AAIA,IAAM,WAAA,GAAc,MAAM,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACvD,IAAM,UAAA,GAAa,MAAMC,eAAA,CAAK,OAAA,CAAQ,aAAa,CAAA;AAE5C,IAAMD,8BAA4B,UAAA,EAAW;AAAA,EAAA;AAAA,CAAA,CAAA;ACkB7C,SAAS,OAAA,CAAQ,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAkB;AAElE,EAAA,KAAA,MAAW,WAAW,gBAAA,EAAkB;AACtC,IAAA,MAAM,QAAA,GAAgBE,MAAA,CAAA,IAAA,CAAK,GAAA,EAAK,OAAO,CAAA;AACvC,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,MAAA,CAAO,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AACzB,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,GAAU,GAAA;AACd,EAAA,OAAO,OAAA,KAAiBD,MAAA,CAAA,OAAA,CAAQ,OAAO,CAAA,EAAG;AACxC,IAAA,KAAA,MAAW,OAAA,IAAW,CAAC,YAAA,EAAc,MAAM,CAAA,EAAG;AAC5C,MAAA,MAAM,OAAA,GAAeA,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAC1C,MAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,QAAA,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AACxB,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAA,GAAeD,eAAQ,OAAO,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,IAAA;AACT;AAmBO,SAAS,WAAA,CAAY,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAkB;AAEtE,EAAA,MAAM,UAAA,GAAa;AAAA,IACZA,MAAA,CAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,IAChBA,MAAA,CAAA,IAAA,CAAK,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,MAAM;AAAA,GAC1C;AAEA,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,gBAAA,CAAiB,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAkB;AAC3E,EAAA,MAAM,UAAA,GAAa;AAAA,IACZD,MAAA,CAAA,IAAA,CAAK,GAAA,EAAK,aAAA,EAAe,WAAW,CAAA;AAAA,IACpCA,MAAA,CAAA,IAAA,CAAK,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,eAAe,WAAW;AAAA,GAC9D;AAEA,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AA+BO,SAAS,WAAW,IAAA,EAA0D;AACnF,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAC5B;AAKO,SAAS,UAAA,GAAqB;AACnC,EAAA,IAAI;AAGF,IAAA,MAAM,UAAeD,MAAA,CAAA,IAAA,CAAK,MAAA,CAAA,IAAA,CAAY,WAAWF,WAAA,EAAW,IAAA,EAAM,MAAM,cAAc,CAAA;AACtF,IAAA,IAAOG,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACxD,MAAA,OAAO,IAAI,OAAA,IAAW,OAAA;AAAA,IACxB;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA;AACT;AAhKA,IAcM,gBAAA;AAdN,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAcA,IAAM,gBAAA,GAAmB;AAAA,MACvB,YAAA;AAAA,MACA,MAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACyLO,SAAS,UAAU,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAC3C;AAKO,SAAS,OAAA,CACd,OAAA,EACA,OAAA,GAKI,EAAC,EACG;AACR,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,GAAU,OAAA,CAAQ,MAAM,IAAI,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,WAAA,IAAe,MAAA,CAAO,IAAA;AAGlD,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,YAAA,GAAe,OAAA,GAAU,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,KAAA;AAEnB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,CAAA,CAAA,CAAA;AACnC,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAA,CAAO,UAAA,GAAa,SAAA,CAAU,UAAU,CAAC,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,UAAA,GAAa,OAAA,GAAU,SAAA,CAAU,MAAA;AAClD,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GACrB,WAAA,CAAY,IAAI,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,CAAA,GAC1C,MAAA,CAAO,UAAU,SAAS,CAAA,GAC1B,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAC,CAAA,GAC3C,WAAA,CAAY,GAAA,CAAI,QAAQ;AAAA,KAC5B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GACrB,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,UAAU,CAAC,CAAA,GAC7C,WAAA,CAAY,IAAI,QAAQ;AAAA,KAC5B;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA;AACrC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,IAAI,CAAA,CAAE,MAAA;AACpC,IAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,GAAa,WAAA,GAAc,UAAU,CAAC,CAAA;AACvE,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA,GACtB,UAAA,GACA,IAAA,GACA,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA,GACvB,UAAA,GACA,WAAA,CAAY,IAAI,QAAQ;AAAA,KAC5B;AAAA,EACF;AAGA,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA,GACxB,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,UAAU,CAAC,CAAA,GAC7C,WAAA,CAAY,IAAI,WAAW;AAAA,GAC/B;AAEA,EAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AACzB;AAKO,SAAS,WAAA,CAAY,OAAe,IAAA,EAAqB;AAC9D,EAAA,MAAM,MAAA,GAAS,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AACnC,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,QAAA,CAAS,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,EAAE,CAAC,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,WAAW,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,CAAE,MAAA,IAAU,IAAA,GAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAC1F;AAKO,SAAS,aAAa,OAAA,EAAuB;AAClD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,MAAA,CAAO,KAAA,CAAM,MAAM,OAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AACzD;AAKO,SAAS,WAAW,OAAA,EAAuB;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AACrD;AAKO,SAAS,aAAa,OAAA,EAAuB;AAClD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,MAAA,CAAO,MAAA,CAAO,MAAM,OAAO,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAC1D;AAKO,SAAS,UAAU,OAAA,EAAuB;AAC/C,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,MAAA,CAAO,IAAA,CAAK,MAAM,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AACrD;AAKO,SAAS,SAAA,CAAU,KAAA,EAAiB,KAAA,GAAkC,MAAA,CAAO,IAAA,EAAY;AAC9F,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,EAChD;AACF;AAKO,SAAS,SAAA,CAAU,OAAA,EAAiB,KAAA,EAAe,OAAA,EAAuB;AAC/E,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAClC;AAwBO,SAAS,UAAA,CAAW,GAAA,EAAa,KAAA,EAAe,WAAA,EAA8B;AACnF,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACpC,EAAA,MAAM,WAAW,WAAA,GAAc,MAAA,CAAO,KAAK,CAAA,GAAA,EAAM,WAAW,EAAE,CAAA,GAAI,EAAA;AAClE,EAAA,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,SAAS,GAAG,QAAQ,CAAA,CAAA;AAC7C;AAKO,SAAS,WAAA,GAAoB;AAClC,EAAA,MAAM,MAAA,GAAS;AAAA,EACf,MAAA,CAAO,QAAA,CAAS,gUAAuD,CAAC;AAAA,EACxE,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,6OAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,iQAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,oNAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,oNAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,8NAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC,CAAA,EAAG,MAAA,CAAO,aAAA,CAAc,+MAAoD,CAAC,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACxH,MAAA,CAAO,SAAS,QAAG,CAAC,sDAAsD,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EAC9F,OAAO,QAAA,CAAS,QAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,KAAK,sBAAsB,CAAC,CAAA,IAAA,EAAO,MAAA,CAAO,IAAI,QAAQ,CAAC,qBAAqB,MAAA,CAAO,QAAA,CAAS,QAAG,CAAC;AAAA,EACjI,MAAA,CAAO,QAAA,CAAS,gUAAuD,CAAC;AAAA,CAAA;AAExE,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB;AAKO,SAAS,OAAA,CAAQ,QAAgB,EAAA,EAAU;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAA,CAAK,GAAA,CAAI,WAAW,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AACvD;AAhYA,IAQM,KAAA,EACA,IAAA,EACA,GAAA,EACA,MAAA,EACA,SAAA,EAGA,IAqBA,EAAA,EAYO,MAAA,EAkDA,KAAA,EA6BA,GAAA,EAeA,aAAA,EAKA,OAAA;AAnJb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAQA,IAAM,KAAA,GAAQ,SAAA;AACd,IAAM,IAAA,GAAO,SAAA;AACb,IAAM,GAAA,GAAM,SAAA;AACZ,IAAM,MAAA,GAAS,SAAA;AACf,IAAM,SAAA,GAAY,SAAA;AAGlB,IAAM,EAAA,GAAK;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,UAAA;AAAA;AAAA,MAEP,WAAA,EAAa,UAAA;AAAA,MACb,SAAA,EAAW,UAAA;AAAA,MACX,WAAA,EAAa,UAAA;AAAA,MACb,YAAA,EAAc,UAAA;AAAA,MACd,UAAA,EAAY,UAAA;AAAA,MACZ,aAAA,EAAe,UAAA;AAAA,MACf,UAAA,EAAY,UAAA;AAAA,MACZ,WAAA,EAAa;AAAA,KACf;AAGA,IAAM,EAAA,GAAK;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAGO,IAAM,MAAA,GAAS;AAAA;AAAA,MAEpB,GAAA,EAAK,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC/C,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACnD,MAAA,EAAQ,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACrD,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACjD,OAAA,EAAS,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACvD,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACjD,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACnD,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,WAAW,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA;AAAA,MAGxD,SAAA,EAAW,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,SAAS,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC3D,WAAA,EAAa,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,WAAW,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC/D,YAAA,EAAc,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,YAAY,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACjE,UAAA,EAAY,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,UAAU,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC7D,aAAA,EAAe,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,aAAa,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACnE,UAAA,EAAY,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,UAAU,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA;AAAA,MAG7D,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,GAAG,KAAK,CAAA,CAAA;AAAA,MAC9C,GAAA,EAAK,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,GAAG,KAAK,CAAA,CAAA;AAAA,MAC5C,MAAA,EAAQ,CAAC,IAAA,KAAiB,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,GAAG,KAAK,CAAA,CAAA;AAAA,MAClD,SAAA,EAAW,CAAC,IAAA,KAAiB,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,MAGxD,OAAA,EAAS,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC1D,SAAA,EAAW,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC9D,UAAA,EAAY,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAChE,QAAA,EAAU,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC5D,WAAA,EAAa,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAClE,QAAA,EAAU,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MAC5D,SAAA,EAAW,CAAC,IAAA,KAAiB,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA;AAAA,MAG9D,OAAA,EAAS,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACrD,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACjD,OAAA,EAAS,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACtD,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACjD,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,EAAG,GAAG,WAAW,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA;AAAA,MAGzD,SAAA,EAAW,CAAC,IAAA,KAAiB,CAAA,EAAG,EAAA,CAAG,MAAM,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,MACnE,KAAA,EAAO,CAAC,IAAA,EAAc,KAAA,KAAoE;AACxF,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,KAAK,CAAA,IAAK,EAAA,CAAG,IAAA;AAC3B,QAAA,OAAO,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,CAAG,KAAK,GAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,MACjD;AAAA,KACF;AAGO,IAAM,KAAA,GAAQ;AAAA,MACnB,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,OAAA,EAAS,QAAA;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,GAAA;AAAA,MACV,OAAA,EAAS,QAAA;AAAA,MACT,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,QAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,QAAA,EAAU,WAAA;AAAA,MACV,MAAA,EAAQ,WAAA;AAAA,MACR,SAAA,EAAW,QAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX;AAGO,IAAM,GAAA,GAAM;AAAA,MACjB,OAAA,EAAS,QAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,QAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACV;AAGO,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA;AAKvE,IAAM,UAAN,MAAc;AAAA,MACX,UAAA,GAAa,CAAA;AAAA,MACb,QAAA,GAAkD,IAAA;AAAA,MAClD,IAAA;AAAA,MACA,KAAA;AAAA,MAER,WAAA,CAAY,IAAA,EAAc,KAAA,GAAkC,MAAA,CAAO,IAAA,EAAM;AACvE,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,MACf;AAAA,MAEA,KAAA,GAAc;AACZ,QAAA,IAAI,KAAK,QAAA,EAAU;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAChC,QAAA,IAAA,CAAK,QAAA,GAAW,YAAY,MAAM;AAChC,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,UAAU,CAAA;AAC3C,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAC1D,UAAA,IAAA,CAAK,UAAA,GAAA,CAAc,IAAA,CAAK,UAAA,GAAa,CAAA,IAAK,aAAA,CAAc,MAAA;AAAA,QAC1D,GAAG,EAAE,CAAA;AAAA,MACP;AAAA,MAEA,OAAO,IAAA,EAAoB;AACzB,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MACd;AAAA,MAEA,KAAK,YAAA,EAA6B;AAChC,QAAA,IAAI,KAAK,QAAA,EAAU;AACjB,UAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAC3B,UAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,QAClB;AACA,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAU,CAAA;AAC/B,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAChC,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,QAAQ,IAAA,EAAqB;AAC3B,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAI,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MACjE;AAAA,MAEA,KAAK,IAAA,EAAqB;AACxB,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,IAAA,EAAqB;AACxB,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAI,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MAClE;AAAA,MAEA,KAAK,IAAA,EAAqB;AACxB,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MAC7D;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACvMA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA2CA,eAAsB,WAAW,OAAA,EAA2C;AAC1E,EAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAgB,MAAA,EAAQ,OAAA,EAAS,SAAQ,GAAI,OAAA;AAGjE,EAAA,MAAM,QAAA,GAAcC,GAAA,CAAA,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAEzE,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,YAAA,CAAa,qBAAqB,CAAA;AAClC,IAAA;AAAA,EACF;AAEA,EAAA,SAAA,CAAU,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA,wBAAA,CAA0B,CAAA;AAE5D,EAAA,IAAI,QAAA,GAA4B,IAAA;AAChC,EAAA,IAAA,CAAK,UAAA,KAAe,UAAA,IAAc,UAAA,KAAe,MAAA,KAAW,CAAC,MAAA,EAAQ;AACnE,IAAA,QAAA,GAAW,IAAI,QAAA,CAAS;AAAA,MACtB,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,KACrB,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,MAAM,OAAA,GAAeC,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAE1C,IAAA,SAAA,CAAU,IAAI,CAAA,EAAG,QAAA,CAAS,MAAA,EAAQ,CAAA,WAAA,EAAc,OAAO,CAAA,GAAA,CAAK,CAAA;AAE5D,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAO,CAAA;AAExC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,CAAU,CAAA,YAAA,EAAe,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AAAA,IACnD;AAGA,IAAA,IAAI,UAAA,KAAe,OAAA,IAAW,UAAA,KAAe,MAAA,EAAQ;AACnD,MAAA,MAAM,SAAA,GAAY,cAAA,IAAuBA,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AACjE,MAAA,MAAM,MAAA,GAAcA,gBAAS,OAAA,EAAS,MAAM,EAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAE/E,MAAA,MAAM,eAAA,CAAgB,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAAA,IAC1D;AAGA,IAAA,IAAA,CAAK,eAAe,UAAA,IAAc,UAAA,KAAe,MAAA,KAAW,QAAA,IAAY,CAAC,MAAA,EAAQ;AAC/E,MAAA,MAAM,aAAA,GAAgB,oBAAoB,OAAO,CAAA;AACjD,MAAA,MAAM,gBAAA,CAAiB,QAAA,EAAU,OAAA,EAAS,aAAa,CAAA;AAAA,IACzD;AAAA,EACF;AACF;AAKA,eAAe,WAAW,OAAA,EAA6C;AACrE,EAAA,MAAM,OAAA,GAAaD,GAAA,CAAA,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAChD,EAAA,MAAM,IAAA,GAAiB,MAAM,OAAA,EAAS;AAAA,IACpC,OAAA,EAAS,IAAA;AAAA,IACT,gBAAA,EAAkB;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,UAA6B,EAAC;AAEpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,GAAA,EAAK,CAAA,GAAI,CAAC,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,CAAA,GAAI,CAAC,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA;AAEtD,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAA,EAAU,QAAA,EAAU,UAAU,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,aAAA,CAAc,KAAa,MAAA,EAAwB;AAC1D,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,IAAY,GAAA,CAAI,SAAS,GAAA,CAAI,IAAA,IAAQ,UAAU,MAAM,CAAA,CAAA;AACvE,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,KAAK;AAAA,CAAI,CAAA;AAGzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI,SAAS,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,OAAA,IAAW,QAAQ,MAAA,EAAQ;AACpE,MAAA,KAAA,CAAM,IAAA,CAAK,MAAM,GAAG;AAAA,CAAI,CAAA;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,KAAK;AAAA,CAAI,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKA,SAAS,eAAA,CAAgB,KAAa,MAAA,EAAyC;AAC7E,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,GAAG;AAAA,GACL;AACF;AAKA,eAAe,eAAA,CACb,OAAA,EACA,SAAA,EACA,MAAA,EACA,MAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAaC,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,MAAA,EAAQ,WAAW,CAAA;AACtD,EAAA,MAAM,OAAA,GAAeA,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,MAAA,EAAQ,UAAU,CAAA;AAEvD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAGD,GAAA,CAAA,SAAA,CAAU,KAAA,EAAO,EAAE,SAAA,EAAW,MAAM,CAAA;AACvC,IAAGA,GAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EAC3C;AAEA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAGA,kBAAmBC,MAAA,CAAA,IAAA,CAAK,KAAA,EAAO,OAAO,QAAQ,CAAA,EAAG,OAAO,QAAQ,CAAA;AACnE,MAAGD,GAAA,CAAA,aAAA;AAAA,QACIC,YAAK,OAAA,EAAS,MAAA,CAAO,SAAS,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,QAC1D,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAA,EAAU,MAAM,CAAC;AAAA,OACzC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,SAAA,GAAiBA,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA;AAC3D,IAAGD,GAAA,CAAA,aAAA;AAAA,MACD,SAAA;AAAA,MACA,IAAA,CAAK,SAAA;AAAA,QACH;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,aAAa,OAAA,CAAQ,MAAA;AAAA,UACrB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,SACpC;AAAA,QACA,IAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AAEA,EAAA,YAAA,CAAa,CAAA,UAAA,EAAa,OAAA,CAAQ,MAAM,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAC9D;AAKA,eAAe,gBAAA,CACb,QAAA,EACA,OAAA,EACA,aAAA,EACe;AACf,EAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,sCAAsC,aAAa,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA;AAC9F,EAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,EAAA,IAAI;AAEF,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,QAAA,CAAS,UAAU,aAAa,CAAA;AAAA,IAC9C,CAAA,CAAA,MAAQ;AAEN,MAAA,SAAA,GAAY,MAAM,SAAS,eAAA,CAAgB;AAAA,QACzC,IAAA,EAAM,aAAA;AAAA,QACN,YAAA,EAAc,mCAAmC,aAAa,CAAA,CAAA;AAAA,OAC/D,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAG,EAAE,IAAA,EAAM,eAAA,EAAiB,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,IAAI,CAAA,EAAG,MAAA,CAAO,QAAA,EAAU,EAAE,IAAA,EAAM,eAAA,EAAiB,CAAA;AAExE,MAAA,MAAM,SAAA,CAAU,WAAW,IAAA,EAAM;AAAA,QAC/B,UAAU,MAAA,CAAO;AAAA,OAClB,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,QAAQ,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,UAAA,EAAa,aAAa,CAAA,CAAE,CAAA;AAAA,EAC1E,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,sBAAA,EAAyB,aAAa,CAAA,CAAE,CAAA;AACrD,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAKA,SAAS,oBAAoB,OAAA,EAAyB;AACpD,EAAA,OACGC,MAAA,CAAA,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA,CACxB,WAAA,EAAY,CACZ,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAC9B;AAnPA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAWA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACXA,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA2EA,eAAsB,iBAAiB,OAAA,EAAmE;AACxG,EAAA,MAAM,EAAE,MAAM,MAAA,EAAQ,WAAA,EAAa,eAAe,UAAA,EAAY,WAAA,EAAa,QAAO,GAAI,OAAA;AAGtF,EAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,YAAA,GAAe,kBAAkB,UAAU,CAAA;AACjD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,gBAAA,GAAmB,MAAM,kBAAkB,YAAY,CAAA;AACvD,MAAA,SAAA,CAAU,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAE,CAAA;AAAA,IACnD;AAAA,EACF;AAEA,EAAA,SAAA,CAAU,CAAA,EAAG,GAAG,gCAAgC,CAAA;AAGhD,EAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB;AAAA,IACtC,IAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,SAAA,CAAU,CAAA,EAAG,GAAG,oBAAoB,CAAA;AAGpC,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,qBAAqB,CAAC,CAAA;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAE1D,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,KAAA,EAAM;AAAA,EAClC;AAEA,EAAA,SAAA,CAAU,CAAA,EAAG,GAAG,oBAAoB,CAAA;AAGpC,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,WAAA,KAAgB,OAAA,IAAW,WAAA,KAAgB,MAAA,EAAQ;AACrD,IAAA,UAAA,GAAa,MAAM,oBAAoB,QAAQ,CAAA;AAC/C,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB;AAEA,EAAA,IAAI,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA,EAAQ;AACxD,IAAA,MAAM,uBAAuB,QAAQ,CAAA;AACrC,IAAA,eAAA,GAAkB,IAAA;AAAA,EACpB;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,IACP,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAe,iBAAiB,MAAA,EAMR;AACtB,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,aAAA,EAAe,kBAAiB,GAAI,MAAA;AAEvE,EAAA,MAAM,MAAA,GAAS,CAAA;;AAAA,OAAA,EAER,IAAI;AAAA,QAAA,EACH,UAAU,SAAS;AAAA,aAAA,EACd,eAAe,kBAAkB;AAAA,gBAAA,EAC9B,aAAa;;AAAA,EAE7B,gBAAA,GAAmB,CAAA;AAAA,EAAiC,gBAAgB;AAAA,CAAA,GAAO,EAAE;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,yFAAA,CAAA;AAW7E,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,cAAA,CAAe;AAAA,IACtC,KAAA,EAAO,MAAA,CAAO,+BAAA,EAAiC,CAAA;AAAA,IAC/C,MAAA,EAAQ,gBAAA;AAAA,IACR;AAAA,GACD,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,kBAAkB,UAAA,EAAmC;AAC5D,EAAA,IAASC,MAAA,CAAA,UAAA,CAAW,UAAU,CAAA,IAAQC,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC5D,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,QAAA,GAAgBD,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAC9C,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAeD,MAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,UAAU,CAAA;AACnD,EAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAe,kBAAkB,UAAA,EAAqC;AACpE,EAAA,MAAM,OAAA,GAAaA,GAAA,CAAA,YAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAEnD,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAA,GAAOC,MAAM,OAAA,EAAS;AAAA,MAC1B,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAGD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACvC;AAGA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAI,CAAA;AAC9B;AAKA,eAAe,oBAAoB,QAAA,EAAuC;AACxE,EAAA,MAAM,YAAA,GAAe,kBAAiB,IAAUF,MAAA,CAAA,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,eAAe,WAAW,CAAA;AAE9F,EAAGC,GAAA,CAAA,SAAA,CAAU,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAE9C,EAAA,MAAM,aAAkBD,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAChE,EAAGC,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AAE9D,EAAA,OAAO,UAAA;AACT;AAKA,eAAe,uBAAuB,QAAA,EAAqC;AACzE,EAAA,MAAM,EAAE,QAAA,EAAAE,SAAAA,EAAS,GAAI,MAAM,OAAO,6BAA6B,CAAA;AAE/D,EAAA,MAAM,QAAA,GAAW,IAAIA,SAAAA,CAAS;AAAA,IAC5B,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,GACrB,CAAA;AAGD,EAAA,MAAM,QAAA,CAAS,kBAAA,CAAmB,QAAA,CAAS,aAAA,EAAe;AAAA,IACxD,QAAA,EAAU;AAAA,MACR,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA;AACrC,GACD,CAAA;AACH;AAzPA,IAqCM,oBAAA,EASA,gBAAA;AA9CN,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,oBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAaA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAuBA,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,MACpC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,MAC1C,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,MACtB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC5B,UAAU,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MACvC,YAAY,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,KAC1C,CAAA;AAED,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,MAChC,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,MACb,aAAA,EAAe,EAAE,MAAA,EAAO;AAAA,MACxB,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,MACjB,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,MACtB,YAAA,EAAc,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,MAChC,QAAQ,CAAA,CAAE,KAAA;AAAA,QACR,EAAE,MAAA,CAAO;AAAA,UACP,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,UACf,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,UAC/B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,SAClC;AAAA,OACH;AAAA,MACA,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA;AAAA,MACnC,SAAA,EAAW,EACR,MAAA,CAAO;AAAA,QACN,cAAc,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,QAC3C,cAAc,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,QAC3C,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,OACvC,EACA,QAAA;AAAS,KACb,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpED,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,mBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAyDA,eAAsB,oBAAoB,OAAA,EAAuD;AAC/F,EAAA,MAAM,EAAE,aAAA,EAAe,IAAA,EAAM,QAAQ,WAAA,EAAa,MAAA,EAAQ,SAAQ,GAAI,OAAA;AAEtE,EAAA,WAAA,CAAY,2BAAA,EAA6B,MAAM,MAAM,CAAA;AACrD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,CAAA;AACpF,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,QAAA,EAAW,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACvE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,SAAA,EAAY,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EAC5E;AACA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAGd,EAAA,MAAM,SAAA,GAAY,kBAAkB,OAAO,CAAA;AAG3C,EAAA,MAAM,kBAA8D,EAAC;AACrE,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAW,eAAA,CAAgB,WAAW,OAAA,CAAQ,QAAA;AACvE,EAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,MAAA,EAAW,eAAA,CAAgB,oBAAoB,OAAA,CAAQ,YAAA;AACpF,EAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW,eAAA,CAAgB,kBAAkB,OAAA,CAAQ,SAAA;AAC/E,EAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAW,eAAA,CAAgB,aAAa,OAAA,CAAQ,UAAA;AAC3E,EAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,QAAQ,QAAA,CAAS,IAAA,OAAW,EAAA,EAAI;AACpE,IAAA,eAAA,CAAgB,QAAA,GAAW,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAK;AAAA,EACnD;AAGA,EAAA,MAAM,MAAA,GAAS,MAAM,qBAAA,CAAsB;AAAA,IACzC,aAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR;AAAA,GACD,CAAA;AAGD,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,WAAA,CAAY,uBAAA,EAAyB,MAAM,KAAK,CAAA;AAChD,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAA,CAAM,OAAO,MAAA,CAAO,KAAA,CAAM,cAAc,CAAC,CAAC,CAAA,CAAE,CAAA;AAChH,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,wBAAA,EAA2B,MAAA,CAAO,KAAA,CAAM,OAAO,MAAA,CAAO,KAAA,CAAM,oBAAoB,CAAC,CAAC,CAAA,CAAE,CAAA;AAC5H,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,sBAAA,EAAyB,MAAA,CAAO,KAAA,CAAM,OAAO,MAAA,CAAO,KAAA,CAAM,kBAAkB,CAAC,CAAC,CAAA,CAAE,CAAA;AACxH,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,qBAAA,EAAwB,MAAA,CAAO,KAAA,CAAM,OAAO,MAAA,CAAO,KAAA,CAAM,gBAAgB,CAAC,CAAC,CAAA,CAAE,CAAA;AAGrH,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,IAAA,GAAO,CAAA,EAAG;AACrC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,sBAAsB,CAAC,CAAA;AACnD,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,WAAA,EAAa;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACrE;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,MAAM,KAAA,EAAO;AACtB,IAAA,iBAAA,CAAkB,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,EACtC;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,WAAA,CAAY,oBAAA,EAAsB,MAAM,IAAI,CAAA;AAC5C,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAEjE,EAAA,MAAM,cAAc,MAAA,CAAO,QAAA;AAC3B,EAAA,MAAM,eAAA,GACJ,gBAAgB,OAAA,IAAW,WAAA,KAAgB,SACvC,0BAAA,CAA2B,WAAA,CAAY,EAAE,CAAA,GACzC,MAAA;AAEN,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO;AAAA,MACL,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,KAAA,EAAO,KAAA;AAAA,MACP,gBAAA,EAAkB,WAAA,KAAgB,OAAA,IAAW,WAAA,KAAgB,MAAA;AAAA,MAC7D,mBAAA,EAAqB,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA;AAAA,MACnE,UAAA,EAAY,eAAA;AAAA,MACZ,OAAO,MAAA,CAAO;AAAA,KAChB;AAAA,EACF;AAGA,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,UAAA,GAAiC,eAAA;AAErC,EAAA,IAAI,WAAA,KAAgB,OAAA,IAAW,WAAA,KAAgB,MAAA,EAAQ;AACrD,IAAA,UAAA,GAAa,MAAMC,oBAAAA,CAAoB,MAAA,CAAO,QAAQ,CAAA;AACtD,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB;AAEA,EAAA,IAAI,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA,EAAQ;AACxD,IAAA,MAAMC,uBAAAA,CAAuB,OAAO,QAAQ,CAAA;AAC5C,IAAA,eAAA,GAAkB,IAAA;AAAA,EACpB;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,KAAA,EAAO,IAAA;AAAA,IACP,YAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAO,MAAA,CAAO;AAAA,GAChB;AACF;AAKA,SAAS,kBAAkB,OAAA,EAA2C;AACpE,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,IAAI,YAAA,GAA+B,IAAA;AAEnC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,KAAA,EAAO,aAAA,KAAkB;AACtC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAG,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,MACjD;AAEA,MAAA,MAAM,WAAA,GAAsC;AAAA,QAC1C,cAAA,EAAgB,yBAAA;AAAA,QAChB,gBAAA,EAAkB,2BAAA;AAAA,QAClB,sBAAA,EAAwB,iCAAA;AAAA,QACxB,sBAAA,EAAwB,6BAAA;AAAA,QACxB,eAAA,EAAiB,0BAAA;AAAA,QACjB,mBAAA,EAAqB;AAAA,OACvB;AAEA,MAAA,YAAA,GAAe,WAAA,CAAY,KAAK,CAAA,IAAK,KAAA;AACrC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,WAAA,CAAY,YAAA,EAAc,MAAM,QAAQ,CAAA;AAExC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,YAAA,GAAe,IAAI,OAAA,CAAQ,CAAA,EAAG,YAAY,CAAA,GAAA,CAAA,EAAO,OAAO,IAAI,CAAA;AAC5D,QAAA,YAAA,CAAa,KAAA,EAAM;AAAA,MACrB;AAAA,IACF,CAAA;AAAA,IAEA,eAAA,EAAiB,CAAC,KAAA,EAAO,OAAA,KAAY;AACnC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MAC7D,WAAW,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,OAAO,OAAO,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AAAA,IAEA,UAAA,EAAY,CAAC,WAAA,EAAa,WAAA,EAAa,UAAU,SAAA,KAAc;AAC7D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,MAAM,cAAA,GAAiB,SAAA,CACpB,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CACjB,OAAA,CAAQ,OAAA,EAAS,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAA,EAAa,CAAA;AAC9C,QAAA,SAAA,CAAU,WAAA,EAAa,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,cAAc,CAAC,CAAA;AAC/D,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,SAAA,CAAU,WAAW,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC5E,WAAW,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,OAAO,CAAA,EAAG,YAAY,MAAM,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,IAAA,CAAM,CAAA;AAAA,MAC3E;AAAA,IACF,CAAA;AAAA,IAEA,QAAA,EAAU,CAAC,WAAA,EAAa,MAAA,KAAW;AACjC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,SAAA,CAAU,iBAAiB,CAAC,CAAA,CAAE,CAAA;AACnF,QAAA,KAAA,MAAW,IAAA,IAAQ,mBAAA,CAAoB,MAAM,CAAA,EAAG;AAC9C,UAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QACzC;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,MAAA,CAAO,MAAM,CAAA,aAAA,CAAe,CAAC,CAAA,CAAE,CAAA;AAAA,MACpE;AAAA,IACF,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,WAAA,EAAa,UAAA,KAAe;AACzC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,QAAQ,MAAA,CAAO,MAAA;AAC9D,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,aAAa,CAAC,IAAI,UAAA,CAAW,UAAA,CAAW,cAAc,CAAC,MAAM,UAAA,CAAW,UAAA,GAAa,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,aAAA,CAAe,CAAA;AAChJ,QAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,UAAA,CAAW,sBAAA,EAAwB;AAC5D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,sBAAsB,CAAC,CAAA,CAAE,CAAA;AAAA,QACtG;AACA,QAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,QAC/F;AACA,QAAA,IAAI,UAAA,CAAW,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAC7C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,WAAW,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,QAC1G;AACA,QAAA,IAAI,UAAA,CAAW,iBAAA,CAAkB,MAAA,GAAS,CAAA,EAAG;AAC3C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,iBAAA,CAAkB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,EAAG,UAAA,CAAW,iBAAA,CAAkB,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,QACzK;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,WAAA,EAAa,CAAC,UAAA,EAAY,QAAA,EAAU,WAAA,KAAgB;AAClD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,YAAY,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,aAAA,EAAgB,QAAQ,CAAA,WAAA,EAAc,WAAW,eAAe,CAAC,CAAA;AAAA,SAC/H;AAAA,MACF,WAAW,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,OAAO,CAAA,EAAG,YAAY,KAAK,UAAU,CAAA,aAAA,EAAgB,QAAQ,CAAA,aAAA,CAAe,CAAA;AAAA,MAC3F;AAAA,IACF,CAAA;AAAA,IAEA,cAAA,EAAgB,CAAC,IAAA,EAAM,UAAA,EAAY,WAAA,KAAgB;AACjD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,SAAA,CAAU,IAAA,EAAM,YAAY,WAAW,CAAA;AAAA,MACzC,WAAW,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,MAAA,CAAO,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,IAAA,CAAM,CAAA;AAAA,MACtE;AAAA,IACF,CAAA;AAAA,IAEA,OAAA,EAAS,CAAC,aAAA,EAAe,KAAA,KAAU;AACjC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AACnC,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AACA,MAAA,YAAA,CAAa,CAAA,UAAA,EAAa,aAAa,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,UAAA,EAAY,CAAC,aAAA,EAAe,QAAA,KAAa;AACvC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,QAAQ,8BAA8B,CAAA;AACnD,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAAA,IACF;AAAA,GACF;AACF;AAKA,SAAS,mBAAA,CAAoB,MAAA,EAAgB,QAAA,GAAmB,CAAA,EAAG,WAAmB,IAAA,EAAgB;AACpG,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,CAAC,kBAAkB,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CACX,KAAA,CAAM,OAAO,CAAA,CACb,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,CACvB,MAAA,CAAO,OAAO,CAAA;AAEjB,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,YAAA,CAAa,MAAA,IAAU,QAAA,IAAY,QAAA,IAAY,QAAA,EAAU;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,QAAA,GAAW,QAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AACtB,MAAA,QAAA,IAAY,IAAA,CAAK,MAAA;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,GAAY,CAAC,CAAC,CAAA,CAAE,SAAS,CAAA,MAAA,CAAA;AACtE,IAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AACzB,IAAA,QAAA,GAAW,QAAA;AACX,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,IAAU,OAAA,CAAQ,SAAS,QAAA,EAAU;AACnE,IAAA,YAAA,CAAa,KAAK,QAAG,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,YAAA;AACT;AAKA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC5B;AAKA,SAAS,aAAa,KAAA,EAAuB;AAC3C,EAAA,OAAO,MAAM,cAAA,EAAe;AAC9B;AAKA,SAAS,kBAAkB,KAAA,EAA2B;AACpD,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,WAAA,CAAY,mBAAA,EAAqB,MAAM,QAAQ,CAAA;AAE/C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,MAAM,MAAM,CAAC,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAM,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AACnG,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,WAAA,CAAY,WAAW,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,KAAA,CAAM,WAAA,CAAY,YAAY,CAAC,CAAA,MAAA,EAAS,YAAA,CAAa,KAAA,CAAM,WAAA,CAAY,gBAAgB,CAAC,CAAA,KAAA,CAAO,CAAA;AACpO,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAA,CAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAGzG,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AACjD,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,gBAAgB,CAAC,CAAA;AAC7C,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,CAAA,IAAK,SAAA,EAAW;AACxC,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,GAAO,CAAA,GAAI,KAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAChE,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,WAAW,GAAG,CAAC,IAAI,MAAA,CAAO,KAAA,CAAM,aAAa,IAAA,CAAK,MAAA,CAAO,WAAW,CAAC,CAAC,UAAU,OAAO,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,IAChJ;AAAA,EACF;AAGA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAC3C,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,MAAM,WAAA,GAAsC;AAAA,MAC1C,cAAA,EAAgB,gBAAA;AAAA,MAChB,gBAAA,EAAkB,kBAAA;AAAA,MAClB,sBAAA,EAAwB,wBAAA;AAAA,MACxB,kBAAA,EAAoB,oBAAA;AAAA,MACpB,mBAAA,EAAqB;AAAA,KACvB;AAEA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA;AAC1C,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,MAAA,EAAQ;AAClC,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,IAAK,KAAA;AACpC,MAAA,MAAM,UAAU,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,OAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,GAAG,CAAC,IAAI,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,QAAA,EAAW,aAAa,IAAA,CAAK,MAAA,CAAO,WAAW,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,IAC/I;AAAA,EACF;AACF;AAKA,eAAeD,qBAAoB,QAAA,EAAoC;AACrE,EAAA,MAAM,WAAA,GAAc,QAAA;AACpB,EAAA,MAAM,UAAA,GAAa,0BAAA,CAA2B,WAAA,CAAY,EAAE,CAAA;AAE5D,EAAGE,cAAeC,MAAA,CAAA,OAAA,CAAQ,UAAU,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1D,EAAGD,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AAE9D,EAAA,OAAO,UAAA;AACT;AAKA,SAAS,2BAA2B,UAAA,EAA4B;AAC9D,EAAA,MAAM,YAAA,GAAe,kBAAiB,IAAUC,MAAA,CAAA,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,eAAe,WAAW,CAAA;AAC9F,EAAA,OAAYA,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,CAAA,EAAG,UAAU,CAAA,KAAA,CAAO,CAAA;AACrD;AAKA,eAAeF,wBAAuB,QAAA,EAAkC;AACtE,EAAA,MAAM,QAAA,GAAW,IAAIF,QAAAA,CAAS;AAAA,IAC5B,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,GACrB,CAAA;AAED,EAAA,MAAM,WAAA,GAAc,QAAA;AACpB,EAAA,MAAM,QAAA,CAAS,kBAAA,CAAmB,WAAA,CAAY,aAAA,EAAe;AAAA,IAC3D,QAAA,EAAU;AAAA,MACR,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA;AACrC,GACD,CAAA;AACH;AA7ZA,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAiBA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClBA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,YAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAkCA,eAAsB,YAAA,CAAa,OAAA,GAA2B,EAAC,EAA+B;AAC5F,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,IAAQ,WAAA,EAAY;AAC5C,EAAA,MAAM,UAA8B,EAAC;AAErC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAIK,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AACvC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,gBAAA;AAAA,UACN,KAAA,EAAO,KAAA;AAAA,UACP,OAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAQ,CAAC,CAAA,0BAAA,EAA6B,OAAA,IAAW,SAAS,CAAA,CAAE;AAAA;AAC9D,OACF;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAcA,GAAA,CAAA,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAEzE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,OAAA,GAAeC,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,OAAA,EAAS,OAAO,CAAA;AAC3C,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,EACrB;AAEA,EAAA,MAAM,WAAW,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAE7C,EAAA,OAAO,EAAE,SAAS,QAAA,EAAS;AAC7B;AAKA,SAAS,WAAA,CAAY,SAAiB,QAAA,EAAoC;AACxE,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAaD,GAAA,CAAA,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAChD,IAAA,MAAM,IAAA,GAAiBN,MAAM,OAAA,EAAS;AAAA,MACpC,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAED,IAAA,OAAA,GAAU,IAAA,CAAK,MAAA;AAEf,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,MAAA,CAAO,KAAK,mBAAmB,CAAA;AAAA,IACjC;AAGA,IAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA,IAAK,EAAE,CAAA;AAEzC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,KAAK,yBAAyB,CAAA;AAAA,IACvC;AAGA,IAAA,MAAM,qBAAqB,CAAC,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,SAAS,aAAa,CAAA;AACpF,IAAA,MAAM,iBAAiB,kBAAA,CAAmB,IAAA;AAAA,MAAK,CAAC,GAAA,KAC9C,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,GAAA,CAAI,WAAA,EAAa;AAAA,KAC3D;AAEA,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,CAAA,oCAAA,EAAuC,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,mBAAA,EACnC,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACrD;AAAA,IACF;AAGA,IAAA,MAAM,aAAqC,EAAC;AAC5C,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,QAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACjC,UAAA,UAAA,CAAW,GAAG,CAAA,GAAA,CAAK,UAAA,CAAW,GAAG,KAAK,CAAA,IAAK,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,MAAA,IAAI,KAAA,GAAQ,UAAU,GAAA,EAAK;AAEzB,QAAA,MAAA,CAAO,KAAK,CAAA,QAAA,EAAW,GAAG,SAAS,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,aAAA,CAAe,CAAA;AAAA,MACpE;AAAA,IACF;AAGA,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,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,GAAA,EAAO;AACjC,UAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,GAAI,CAAC,aAAa,GAAG,CAAA,yBAAA,EAA4B,KAAA,CAAM,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,QAC3F;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,IAAA,CAAK,wBAAwB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9F;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAO,MAAA,KAAW,CAAA;AAAA,IACzB,OAAA;AAAA,IACA;AAAA,GACF;AACF;AA9IA,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AASA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACTA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAoCA,eAAsB,WAAW,OAAA,EAA2C;AAC1E,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,GAAO,WAAW,IAAA,EAAM,OAAA,EAAS,MAAK,GAAI,OAAA;AAEzD,EAAA,MAAM,UAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,YAAA,GAAoBQ,eAAQ,SAAS,CAAA;AAE3C,IAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,MAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,GAAA,CAAI,CAAA,gBAAA,EAAmB,YAAY,EAAE,CAAC,CAAA;AACzD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAUA,aAAS,YAAY,CAAA;AAErC,IAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AAEtB,MAAA,MAAM,KAAA,GAAWA,gBAAY,YAAY,CAAA;AACzC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,QAAA,GAAgBD,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,IAAI,CAAA;AAC7C,QAAA,IAAOC,GAAA,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,MAAA,EAAO,EAAG;AAClC,UAAA,MAAM,SAAS,MAAM,WAAA,CAAY,QAAA,EAAU,IAAA,EAAM,MAAM,OAAO,CAAA;AAC9D,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,SAAS,MAAM,WAAA,CAAY,YAAA,EAAc,IAAA,EAAM,MAAM,OAAO,CAAA;AAClE,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC9C,CAAA,MAAO;AACL,IAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAAA,EAC/B;AACF;AAKA,eAAe,WAAA,CACb,QAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EACsB;AACtB,EAAA,MAAM,OAAA,GAAaA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,EAAA,MAAM,UAAU,OAAA,GAAU,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAG,IAAI,KAAA,GAAQ,MAAA;AAE1D,EAAA,IAAI,MAAA;AAEJ,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,MAAA,GAAS,oBAAA,CAAqB,SAAS,IAAI,CAAA;AAC3C,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAC7C,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,OAAA,EAAS,IAAI,CAAA;AACxD,MAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAEtD,MAAA,MAAA,GAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,aAAA,EAAe,GAAG,SAAS,CAAC,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,IAAI,CAAA;AACrE,MAAA;AAAA,IACF;AACE,MAAA,MAAA,GAAS,oBAAA,CAAqB,SAAS,IAAI,CAAA;AAAA;AAG/C,EAAA,OAAO;AAAA,IACL,IAAA,EAAWD,gBAAS,QAAQ,CAAA;AAAA,IAC5B,MAAA;AAAA,IACA,MAAA,EAAQ,IAAA;AAAA,IACR;AAAA,GACF;AACF;AAKA,SAAS,oBAAA,CAAqB,SAAiB,IAAA,EAAwB;AACrE,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AAGxB,EAAA,KAAA,CAAM,YAAY,OAAO,CAAA;AAGzB,EAAA,MAAM,QAA2C,EAAC;AAElD,EAAA,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAA0C;AAEpE,IAAA,IAAI,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA,IAAK,CAAC,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AAClD,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,IACnD;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAEtC,EAAA,OAAO,KAAA,CAAM,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AAC/C;AAKA,eAAe,gBAAA,CAAiB,SAAiB,IAAA,EAAiC;AAChF,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAI,CAAA;AAE9C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,YAAA,CAAa;AAAA,IAClC,KAAA,EAAOE,MAAAA,CAAOC,+BAAAA,EAAiC,CAAA;AAAA,IAC/C,MAAA,EAAQ,mBAAmB,IAAI,CAAA;AAAA;;AAAA;AAAA,EAIjC,gBAAgB,CAAA;AAAA,GACf,CAAA;AAED,EAAA,OAAO,KACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,EACnB,MAAA,CAAO,OAAO,CAAA,CACd,KAAA,CAAM,GAAG,IAAI,CAAA;AAClB;AAKA,SAAS,WAAW,IAAA,EAAuB;AACzC,EAAA,MAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,IACxB,KAAA;AAAA,IAAO,GAAA;AAAA,IAAK,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAC9D,IAAA;AAAA,IAAM,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAM,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAM,MAAA;AAAA,IAC9D,OAAA;AAAA,IAAS,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,OAAA;AAAA,IAC5D,OAAA;AAAA,IAAS,QAAA;AAAA,IAAU,KAAA;AAAA,IAAO,OAAA;AAAA,IAAS,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,KAAA;AAAA,IAAO,MAAA;AAAA,IAC3D,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,OAAA;AAAA,IAAS,GAAA;AAAA,IAAK,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,MAAA;AAAA,IAC/D,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,MAAA;AAAA,IAC9D,OAAA;AAAA,IAAS,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,OAAA;AAAA,IAAS,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,IAAA;AAAA,IACjE,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAM,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ;AAAA,GACnE,CAAA;AACD,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA;AACzC;AAKA,SAAS,YAAA,CAAa,SAAwB,OAAA,EAAyB;AACrE,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,OAAA,EAAQ;AACR,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AACzC,IAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,WAAW,MAAA,CAAO,MAAM,EAAE,CAAC,CAAA;AAEnD,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,EAAS;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAC,CAAA;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IACxC;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,CAAA;AACpC,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAA,EAAQ;AACV;AAvMA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAWA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACXA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,aAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAqCA,eAAsB,aAAA,GAA8C;AAClE,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,MAAM,WAA2B,EAAC;AAGlC,EAAA,MAAM,eAAe,gBAAA,EAAiB;AACtC,EAAA,IAAI,YAAA,IAAmBC,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/C,IAAA,MAAM,KAAA,GAAWA,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAE5E,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,UAAaA,GAAA,CAAA,YAAA,CAAkBC,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,IAAI,GAAG,OAAO,CAAA;AACtE,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACnC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,EAAA,EAAI,QAAA,CAAS,EAAA,IAAWA,MAAA,CAAA,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,UAC9C,aAAA,EAAe,SAAS,aAAA,IAAiB,EAAA;AAAA,UACzC,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAK,IAAIZ,QAAAA,CAAS;AAAA,MACtB,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,KACrB,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,MAAM,EAAA,CAAG,cAAA,EAAe;AAE3C,IAAA,KAAA,MAAW,SAAA,IAAa,UAAA,CAAW,UAAA,IAAc,EAAC,EAAG;AAEnD,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,iBAAA,CAAkB,UAAU,IAAI,CAAA;AACzD,QAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,UAAoB,CAAA;AACjE,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,YACZ,EAAA,EAAI,QAAA,CAAS,EAAA,IAAM,SAAA,CAAU,IAAA;AAAA,YAC7B,eAAe,SAAA,CAAU,IAAA;AAAA,YACzB,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AAEd,IAAA,SAAA,CAAU,oCAAoC,CAAA;AAAA,EAChD;AAEA,EAAA,OAAO,EAAE,OAAO,QAAA,EAAS;AAC3B;AAKA,eAAsB,aAAA,CACpB,SAAA,EACA,OAAA,GAAuB,EAAC,EACH;AACrB,EAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AACnB,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,MAAM,EAAA,GAAK,IAAIA,QAAAA,CAAS;AAAA,IACtB,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,GACrB,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,kBAAiB,IAAUY,MAAA,CAAA,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,eAAe,WAAW,CAAA;AAE9F,EAAA,IAAI,SAAA,KAAc,SAAA,IAAa,SAAA,KAAc,MAAA,EAAQ;AAEnD,IAAA,SAAA,CAAU,CAAA,EAAG,GAAG,wCAAwC,CAAA;AAExD,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,EAAA,CAAG,cAAA,EAAe;AAE3C,MAAA,KAAA,MAAW,SAAA,IAAa,UAAA,CAAW,UAAA,IAAc,EAAC,EAAG;AACnD,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,iBAAA,CAAkB,UAAU,IAAI,CAAA;AACzD,UAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,UAAoB,CAAA;AAEjE,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAGD,GAAA,CAAA,SAAA,CAAU,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,cAAA,MAAM,UAAA,GAAkBC,YAAK,YAAA,EAAc,CAAA,EAAG,SAAS,EAAA,IAAM,SAAA,CAAU,IAAI,CAAA,KAAA,CAAO,CAAA;AAClF,cAAGD,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,YAChE;AAEA,YAAA,MAAA,EAAA;AACA,YAAA,SAAA,CAAU,KAAK,MAAA,GAAS,YAAA,GAAe,QAAQ,CAAA,EAAA,EAAK,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,UACtE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,KAAK,CAAA,eAAA,EAAkB,SAAA,CAAU,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,KAAc,YAAA,IAAgB,SAAA,KAAc,MAAA,EAAQ;AAEtD,IAAA,SAAA,CAAU,SAAA,KAAc,SAAS,CAAA,GAAI,CAAA,EAAG,cAAc,MAAA,GAAS,CAAA,GAAI,GAAG,oCAAoC,CAAA;AAE1G,IAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAA,MAAM,KAAA,GAAWA,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAE5E,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,UAAaA,GAAA,CAAA,YAAA,CAAkBC,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,IAAI,GAAG,OAAO,CAAA;AACtE,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAEnC,UAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAA,MAAM,EAAA,CAAG,kBAAA,CAAmB,QAAA,CAAS,aAAA,EAAe;AAAA,gBAClD,QAAA,EAAU;AAAA,kBACR,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA;AACrC,eACD,CAAA;AAAA,YACH;AAEA,YAAA,MAAA,EAAA;AACA,YAAA,SAAA,CAAU,KAAK,MAAA,GAAS,YAAA,GAAe,QAAQ,CAAA,EAAA,EAAK,QAAA,CAAS,EAAE,CAAA,CAAE,CAAA;AAAA,UACnE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AA7KA,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AASA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACVA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA+FA,SAAS,gBAAgB,QAAA,EAA+B;AACtD,EAAA,MAAM,YAAA,GAAe,QAAA,KAAa,WAAA,GAAc,eAAA,GAAkB,KAAA;AAGlE,EAAA,MAAM,aAAA,GAAgB;AAAA;AAAA,IAEf,MAAA,CAAA,OAAA,CAAQ,YAAY,OAAA,IAAWrB,UAAAA,EAAW,MAAM,IAAA,EAAM,IAAA,EAAM,YAAY,YAAY,CAAA;AAAA;AAAA,IAEpF,MAAA,CAAA,OAAA,CAAQ,YAAY,OAAA,IAAWA,UAAAA,EAAW,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,YAAY,CAAA;AAAA;AAAA,IAE1F,MAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,YAAY,YAAY,CAAA;AAAA;AAAA,IAE/C,eAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAA,EAAM,YAAY,YAAY,CAAA;AAAA,IACrD,eAAQ,OAAA,CAAQ,GAAA,IAAO,IAAA,EAAM,IAAA,EAAM,YAAY,YAAY;AAAA,GAClE;AAEA,EAAA,KAAA,MAAW,gBAAgB,aAAA,EAAe;AACxC,IAAA,IAAO,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,OAAO,cAAc,CAAC,CAAA;AACxB;AAKA,eAAe,oBAAoB,OAAA,EAAmD;AACpF,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAO,GAAI,OAAA;AAEtC,EAAA,MAAM,MAAA,GAAS,CAAA;;AAAA,UAAA,EAEL,IAAI;AAAA,aAAA,EACD,WAAW,CAAA;AAAA,QAAA,EAChB,MAAM;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,qGAAA,EAUuF,MAAM,CAAA,QAAA,CAAA;AAE3G,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAMsB,cAAAA,CAAe;AAAA,MACtC,KAAA,EAAOJ,MAAAA,CAAOC,+BAAAA,EAAiC,CAAA;AAAA,MAC/C,MAAA,EAAQ,iBAAA;AAAA,MACR;AAAA,KACD,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAEd,IAAA,OAAA,CAAQ,MAAM,wCAAA,EAA0C,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AACtG,IAAA,OAAO,mBAAA,CAAoB,IAAA,EAAM,WAAA,EAAa,MAAM,CAAA;AAAA,EACtD;AACF;AAKA,SAAS,mBAAA,CAAoB,IAAA,EAAc,WAAA,EAAqB,MAAA,EAA6B;AAC3F,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAC5D,EAAA,MAAM,eAAeA,+BAAAA,EAAgC;AAErD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA,EAAK;AAAA,MACH,QAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,YAAA;AAAA,QACZ,SAAA,EAAW,YAAA;AAAA,QACX,kBAAA,EAAoB;AAAA;AACtB,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,iBAAA,EAAmB,aAAa,MAAM,CAAA,UAAA,CAAA;AAAA,MACtC,mBAAA,EAAqB,mBAAmB,MAAM,CAAA,8CAAA,CAAA;AAAA,MAC9C,oBAAA,EAAsB,oCAAoC,MAAM,CAAA,oDAAA,CAAA;AAAA,MAChE,qBAAA,EAAuB,CAAA,4EAAA,CAAA;AAAA,MACvB,sBAAA,EAAwB,CAAA,mFAAA;AAAA,KAC1B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,mCAAA,EAAoC;AAAA,MAC5E,EAAE,IAAA,EAAM,eAAA,EAAiB,WAAA,EAAa,0CAAA,EAA2C;AAAA,MACjF,EAAE,IAAA,EAAM,eAAA,EAAiB,WAAA,EAAa,sDAAA,EAAuD;AAAA,MAC7F,EAAE,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,uDAAA;AAAwD,KAClG;AAAA,IACA,QAAA,EAAU;AAAA,MACR,YAAA,EAAc,CAAA,6IAAA,CAAA;AAAA,MACd,cAAA,EAAgB,CAAA,gJAAA,CAAA;AAAA,MAChB,cAAA,EAAgB,CAAA,yFAAA;AAAA,KAClB;AAAA,IACA,KAAA,EAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,WAAA,EAAa,6BAAA;AAAA,QACb,MAAA,EAAQ,kCAAA;AAAA,QACR,QAAA,EAAU,CAAC,iBAAA,EAAmB,gBAAA,EAAkB,iBAAiB;AAAA,OACnE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,KAAA;AAAA,QACV,WAAA,EAAa,kCAAA;AAAA,QACb,MAAA,EAAQ,+BAAA;AAAA,QACR,QAAA,EAAU,CAAC,iBAAA,EAAmB,iBAAiB;AAAA;AACjD,KACF;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,IACjC,WAAA,EAAa,IAAA;AAAA,IACb,SAAA,EAAW;AAAA,MACT,MAAA,EAAQ,UAAA;AAAA,MACR,WAAA,EAAa;AAAA,KACf;AAAA,IACA,QAAA,EAAU;AAAA,MACR,yBAAA,EAA2B,CAAA;AAAA,MAC3B,gBAAA,EAAkB,WAAA;AAAA,MAClB,sBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,gCAAgC,MAAM,CAAA,CAAA,CAAA;AAAA,MACtC,CAAA,qBAAA,CAAA;AAAA,MACA,CAAA,2BAAA,CAAA;AAAA,MACA,CAAA,mCAAA,CAAA;AAAA,MACA,CAAA,kCAAA;AAAA;AACF,GACF;AACF;AAmBA,SAAS,YAAA,CAAa,KAAa,IAAA,EAAoB;AACrD,EAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAE,CAAA;AAAA,EACxD;AAEA,EAAG,GAAA,CAAA,SAAA,CAAU,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAEtC,EAAA,MAAM,UAAa,GAAA,CAAA,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,OAAA,GAAe,MAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AACzC,IAAA,MAAM,QAAA,GAAgB,MAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AAG3C,IAAA,IAAI,cAAA,CAAe,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAG,GAAA,CAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AACF;AAKA,SAAS,iBAAA,CAAkB,WAAmB,IAAA,EAAoB;AAChE,EAAA,MAAM,eAAA,GAAuB,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,cAAc,CAAA;AAE3D,EAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,eAAe,CAAA,EAAG;AACnC,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAS,GAAA,CAAA,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAC,CAAA;AAGxE,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA,CAAE,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAErF,EAAA,WAAA,CAAY,IAAA,GAAO,QAAQ,WAAW,CAAA,CAAA;AACtC,EAAA,WAAA,CAAY,WAAA,GAAc,GAAG,IAAI,CAAA,0BAAA,CAAA;AAEjC,EAAG,GAAA,CAAA,aAAA,CAAc,iBAAiB,IAAA,CAAK,SAAA,CAAU,aAAa,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAC/E;AAKA,SAAS,YAAA,CAAa,SAAA,EAAmB,IAAA,EAAc,WAAA,EAA2B;AAChF,EAAA,MAAM,UAAA,GAAkB,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,YAAY,CAAA;AAE3D,EAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,GAAa,GAAA,CAAA,YAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAGjD,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,IAChB,yBAAA;AAAA,IACA,WAAW,IAAI,CAAA,CAAA;AAAA,GACjB;AACA,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,IAChB,+BAAA;AAAA,IACA,iBAAiB,WAAW,CAAA,CAAA;AAAA,GAC9B;AAEA,EAAG,GAAA,CAAA,aAAA,CAAc,YAAY,OAAO,CAAA;AACtC;AAKA,SAAS,iBAAiB,SAAA,EAAyB;AACjD,EAAA,MAAM,UAAA,GAAa,CAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAUnB,EAAG,GAAA,CAAA,aAAA,CAAmB,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,cAAc,GAAG,UAAU,CAAA;AACnE;AAKA,SAAS,oBAAA,CAAqB,WAAmB,MAAA,EAAsB;AACrE,EAAA,MAAM,YAAA,GAAoB,MAAA,CAAA,IAAA,CAAK,SAAA,EAAW,aAAA,EAAe,WAAW,CAAA;AACpE,EAAG,GAAA,CAAA,SAAA,CAAU,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAE9C,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAE5D,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,IAAA;AAAA,IACJ,aAAA,EAAe,IAAA;AAAA,IACf,MAAA;AAAA,IACA,WAAA,EAAa,sBAAsB,MAAM,CAAA,CAAA;AAAA,IACzC,YAAA,EAAc;AAAA,MACZ,0BAA0B,MAAM,CAAA,CAAA;AAAA,MAChC,2CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,aAAa,sCAAA,EAAuC;AAAA,MACrF,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,aAAa,kCAAA;AAAmC,KACtF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,iCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAA,EAAc,CAAC,OAAO,CAAA;AAAA,MACtB,OAAA,EAAS,CAAC,MAAM;AAAA;AAClB,GACF;AAEA,EAAG,GAAA,CAAA,aAAA;AAAA,IACI,MAAA,CAAA,IAAA,CAAK,YAAA,EAAc,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAA;AAAA,IACtC,IAAA,CAAK,SAAA,CAAU,cAAA,EAAgB,IAAA,EAAM,CAAC,CAAA,GAAI;AAAA,GAC5C;AACF;AAKA,eAAsB,YAAY,OAAA,EAAyD;AACzF,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,QAAA,EAAU,WAAU,GAAI,OAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,CAAA;AAGnB,EAAA,MAAM,UAAA,GAAkB,MAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,SAAS,CAAA;AAGxD,EAAA,SAAA,CAAU,CAAA,EAAG,YAAY,2CAA2C,CAAA;AACpE,EAAA,MAAMI,OAAAA,GAAS,MAAM,mBAAA,CAAoB,OAAO,CAAA;AAGhD,EAAA,SAAA,CAAU,CAAA,EAAG,UAAA,EAAY,CAAA,QAAA,EAAW,QAAQ,CAAA,YAAA,CAAc,CAAA;AAC1D,EAAA,MAAM,YAAA,GAAe,gBAAgB,QAAQ,CAAA;AAC7C,EAAA,YAAA,CAAa,cAAc,UAAU,CAAA;AAGrC,EAAA,SAAA,CAAU,CAAA,EAAG,YAAY,8BAA8B,CAAA;AACvD,EAAA,MAAM,UAAA,GAAkB,MAAA,CAAA,IAAA,CAAK,UAAA,EAAY,mBAAmB,CAAA;AAC5D,EAAG,GAAA,CAAA,aAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAUA,SAAQ,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAGnE,EAAA,SAAA,CAAU,CAAA,EAAG,YAAY,0BAA0B,CAAA;AACnD,EAAA,iBAAA,CAAkB,YAAY,IAAI,CAAA;AAClC,EAAA,YAAA,CAAa,UAAA,EAAY,MAAM,WAAW,CAAA;AAC1C,EAAA,gBAAA,CAAiB,UAAU,CAAA;AAG3B,EAAA,SAAA,CAAU,CAAA,EAAG,YAAY,gCAAgC,CAAA;AACzD,EAAA,oBAAA,CAAqB,YAAY,MAAM,CAAA;AAEvC,EAAA,SAAA,CAAU,CAAA,UAAA,EAAa,QAAA,KAAa,WAAA,GAAc,eAAA,GAAkB,gBAAgB,CAAA,CAAE,CAAA;AAEtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,UAAA;AAAA,IACA;AAAA,GACF;AACF;AA3aA,IAeMvB,UAAAA,EAmBA,UAAA,EAKA,UAAA,EAUA,iBAAA,EA4LA,cAAA;AA7ON,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAYA,IAAA,WAAA,EAAA;AAGA,IAAMA,UAAAA,GAAY,YAAY,OAAA,IAAgB,MAAA,CAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE,QAAQ,CAAA;AAmBvF,IAAM,UAAA,GAAawB,EAAE,MAAA,CAAO;AAAA,MAC1B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oCAAoC,CAAA;AAAA,MAC9D,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mDAAmD;AAAA,KACrF,CAAA;AAED,IAAM,UAAA,GAAaA,EAAE,MAAA,CAAO;AAAA,MAC1B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oCAAoC,CAAA;AAAA,MAC9D,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mDAAmD,CAAA;AAAA,MAC7E,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,+BAA+B,CAAA;AAAA,MAC9D,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,MAC5D,QAAQA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4CAA4C,CAAA;AAAA,MACnF,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,MAChF,eAAeA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,wBAAwB;AAAA,KACvE,CAAA;AAED,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,MACjC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB,CAAA;AAAA,MACnD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uCAAuC,CAAA;AAAA,MACxE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB,CAAA;AAAA,MAC7C,GAAA,EAAKA,EAAE,MAAA,CAAO;AAAA,QACZ,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,QAAQ,CAAA;AAAA,QACrC,MAAA,EAAQA,EAAE,MAAA,CAAO;AAAA,UACf,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,aAAa,CAAA;AAAA,UAC1C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,aAAa,CAAA;AAAA,UAC5C,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,aAAa,CAAA;AAAA,UAC3C,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,aAAa;AAAA,SACrD;AAAA,OACF,CAAA;AAAA,MACD,OAAA,EAASA,EAAE,MAAA,CAAO;AAAA,QAChB,iBAAA,EAAmBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC,CAAA;AAAA,QACzE,mBAAA,EAAqBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,QACzE,oBAAA,EAAsBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,QACrE,qBAAA,EAAuBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,QAC9E,sBAAA,EAAwBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,OAC/E,CAAA;AAAA,MACD,OAAOA,CAAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,MACjE,QAAA,EAAUA,EAAE,MAAA,CAAO;AAAA,QACjB,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B,CAAA;AAAA,QAChE,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qCAAqC,CAAA;AAAA,QACzE,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B;AAAA,OACnE,CAAA;AAAA,MACD,OAAOA,CAAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACvE,YAAA,EAAcA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA,MAC5E,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mBAAmB,CAAA;AAAA,MACpD,SAAA,EAAWA,EAAE,MAAA,CAAO;AAAA,QAClB,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,QAAQ,UAAU,CAAA,CAAE,SAAS,iDAAiD,CAAA;AAAA,QACjG,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,GAAG;AAAA,OACpC,CAAA;AAAA,MACD,QAAA,EAAUA,EAAE,MAAA,CAAO;AAAA,QACjB,yBAAA,EAA2BA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA;AAAA,QAC/C,gBAAA,EAAkBA,EAAE,MAAA,EAAO,CAAE,QAAQ,WAAW,CAAA,CAAE,SAAS,iDAAiD,CAAA;AAAA,QAC5G,sBAAA,EAAwBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI;AAAA,OACjD,CAAA;AAAA,MACD,cAAA,EAAgBA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,8BAA8B;AAAA,KAC5E,CAAA;AAqJD,IAAM,cAAA,GAAiB;AAAA,MACrB,cAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtPA,cAAA,EAAA;AAwBA,WAAA,EAAA;AACA,WAAA,EAAA;;;ACzBA,cAAA,EAAA;AAQA,WAAA,EAAA;AAOO,SAAS,cAAA,GAAoC;AAClD,EAAA,OAAgB,QAAA,CAAA,eAAA,CAAgB,SAAEC,KAAA,UAAOC,MAAA,EAAQ,CAAA;AACnD;AAKA,eAAsB,WAAA,CACpB,EAAA,EACA,QAAA,EACA,YAAA,EACiB;AACjB,EAAA,MAAM,cAAc,YAAA,GAAe,MAAA,CAAO,KAAK,CAAA,EAAA,EAAK,YAAY,GAAG,CAAA,GAAI,EAAA;AACvE,EAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAG,WAAW,CAAA,EAAA,CAAI,CAAA;AAC5F,EAAA,OAAO,MAAA,CAAO,IAAA,EAAK,IAAK,YAAA,IAAgB,EAAA;AAC1C;AAKA,eAAsB,UAAA,CACpB,EAAA,EACA,QAAA,EACA,YAAA,GAAwB,KAAA,EACN;AAClB,EAAA,MAAM,IAAA,GAAO,eAAe,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA,CAAO,KAAK,QAAQ,CAAA;AACxE,EAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,QAAA,CAAS,GAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,CAAA;AACrF,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG,OAAO,YAAA;AAC3B,EAAA,OAAO,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACvC;AAKA,eAAsB,SAAA,CACpB,EAAA,EACA,QAAA,EACA,OAAA,EACiB;AACjB,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AACzD,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,GAAA,CAAI,GAAA,EAAK,IAAI,KAAA,EAAO,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,EAC7D;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,QAAA,CAAS;AAAA,EAAK,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,eAAA,CAAiB,CAAA;AACjF,EAAA,OAAO,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC;;;AC5DA,cAAA,EAAA;AASA,WAAA,EAAA;AAaA,WAAA,EAAA;AAYO,IAAM,aAAA,GAAgB,IAAI,OAAA,CAAQ,QAAQ,EAC9C,WAAA,CAAY,0CAA0C,CAAA,CACtD,MAAA,CAAO,uBAAuB,uCAAA,EAAyC,UAAU,CAAA,CACjF,MAAA,CAAO,oBAAoB,2CAA2C,CAAA,CACtE,MAAA,CAAO,WAAA,EAAa,qCAAA,EAAuC,KAAK,CAAA,CAChE,MAAA,CAAO,qBAAqB,yBAAA,EAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,aAAa,sBAAA,EAAwB,KAAK,CAAA,CACjD,MAAA,CAAO,OAAO,OAAA,KAA2B;AACxC,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,MAAM,cAAA,EAAe;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,MAAM,UAAU,OAAO,CAAA;AAAA,EACzB;AACF,CAAC,CAAA;AAEH,eAAe,cAAA,GAAgC;AAC7C,EAAA,WAAA,CAAY,gBAAA,EAAkB,MAAM,QAAQ,CAAA;AAC5C,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,mEAAmE,CAAC,CAAA;AAE5F,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,WAAA,EAAY;AAE5B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,UAAA,CAAW,2BAA2B,CAAA;AACtC,MAAA,SAAA,CAAU,oDAAoD,CAAA;AAC9D,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAcC,GAAA,CAAA,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACzE,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,YAAA,CAAa,uCAAuC,CAAA;AACpD,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAChD,IAAA,SAAA,CAAU,SAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,EAASC,YAAK,OAAA,EAAS,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,EAAE,CAAC,CAAA;AAGlF,IAAA,MAAM,gBAAA,GAAmB,MAAM,SAAA,CAAU,EAAA,EAAI,mCAAA,EAAqC;AAAA,MAChF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,UAAA,EAAY,aAAa,uCAAA,EAAwC;AAAA,MACpF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,aAAa,8BAAA,EAA+B;AAAA,MACxE,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,aAAa,wBAAA;AAAyB,KAClE,CAAA;AAED,IAAA,MAAM,aAAA,GAA4C;AAAA,MAChD,GAAA,EAAK,UAAA;AAAA,MACL,GAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AACA,IAAA,MAAMF,OAAAA,GAAS,aAAA,CAAc,gBAAgB,CAAA,IAAK,UAAA;AAGlD,IAAA,IAAI,GAAA;AACJ,IAAA,IAAIA,OAAAA,KAAW,OAAA,IAAWA,OAAAA,KAAW,MAAA,EAAQ;AAC3C,MAAA,MAAM,UAAA,GAAkBE,MAAA,CAAA,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAChD,MAAA,GAAA,GAAM,MAAM,WAAA,CAAY,EAAA,EAAI,wBAAA,EAA0B,UAAU,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,EAAA,EAAI,6CAA6C,KAAK,CAAA;AACtF,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,2BAA2B,IAAI,CAAA;AAEpE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,SAAA,CAAU,sBAAsB,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,CAAU,EAAE,MAAA,EAAAF,OAAAA,EAAQ,GAAA,EAAK,QAAQ,WAAA,EAAa,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EAC5E,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,UAAU,OAAA,EAAuC;AAC9D,EAAA,MAAM,EAAE,MAAA,EAAAA,OAAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,SAAQ,GAAI,OAAA;AAGzC,EAAA,IAAIA,OAAAA,KAAW,UAAA,IAAcA,OAAAA,KAAW,MAAA,EAAQ;AAC9C,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,CAAW,CAAC,kBAAkB,CAAC,CAAA;AACnD,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,UAAA,CAAW,CAAA,wCAAA,EAA2C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1E,MAAA,SAAA,CAAU,mDAAmD,CAAA;AAC7D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,UAAA,CAAW,2BAA2B,CAAA;AACtC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,wBAAA,EAA0B,OAAO,IAAI,CAAA;AACjE,EAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,EAAA,IAAI;AAGF,IAAA,MAAM,eAAe,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,WAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAE3B,IAAA,OAAA,CAAQ,IAAA,EAAK;AAEb,IAAA,MAAM,aAAa,UAAA,CAAW;AAAA,MAC5B,UAAA,EAAYA,OAAAA;AAAA,MACZ,cAAA,EAAgB,GAAA;AAAA,MAChB,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,YAAA,CAAa,wCAAwC,CAAA;AAAA,IACvD,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,0CAA0C,CAAA;AAAA,IACtD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAK,kBAAkB,CAAA;AAC/B,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AC5JA,cAAA,EAAA;AAOA,WAAA,EAAA;AAWA,WAAA,EAAA;AAeO,IAAM,cAAA,GAAiB,IAAIG,OAAAA,CAAQ,SAAS,EAChD,WAAA,CAAY,0CAA0C,EACtD,MAAA,CAAO,cAAA,EAAgB,mCAAmC,CAAA,CAC1D,MAAA,CAAO,qBAAqB,uCAAuC,CAAA,CACnE,OAAO,sBAAA,EAAwB,6BAA6B,EAC5D,MAAA,CAAO,oBAAA,EAAsB,yBAAyB,CAAA,CACtD,MAAA,CAAO,mBAAmB,oCAAoC,CAAA,CAC9D,OAAO,sBAAA,EAAwB,wCAAA,EAA0C,OAAO,CAAA,CAChF,MAAA,CAAO,aAAa,iCAAA,EAAmC,KAAK,EAC5D,MAAA,CAAO,mBAAA,EAAqB,2BAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,OAAO,OAAA,KAA4B;AACzC,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,CAAC,OAAA,CAAQ,IAAA,EAAM;AACxC,IAAA,MAAMC,gBAAe,OAAO,CAAA;AAAA,EAC9B,CAAA,MAAO;AACL,IAAA,MAAM,WAAW,OAAO,CAAA;AAAA,EAC1B;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,CAAe,cAAA,GAA0C,EAAC,EAAkB;AACzF,EAAA,WAAA,CAAY,qBAAA,EAAuB,MAAM,KAAK,CAAA;AAC9C,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,gDAAgD,CAAC,CAAA;AAEzE,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,cAAA,CAAe,IAAA,IAAQ,MAAM,WAAA,CAAY,IAAI,2BAA2B,CAAA;AACrF,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,YAAA,CAAa,oBAAoB,CAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,cAAA,CAAe,MAAA,IAAU,MAAM,WAAA,CAAY,IAAI,kCAAkC,CAAA;AAChG,IAAA,MAAM,cAAc,cAAA,CAAe,WAAA,IAAe,MAAM,WAAA,CAAY,IAAI,mBAAmB,CAAA;AAC3F,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,SAAA,IAAa,MAAM,WAAA,CAAY,EAAA,EAAI,gBAAA,EAAkB,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAG7G,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,IAAU,MAAM,WAAA;AAAA,MAC5C,EAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,iBAAA,GAAoB,MAAM,SAAA,CAAU,EAAA,EAAI,qCAAA,EAAuC;AAAA,MACnF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,aAAa,6CAAA,EAA8C;AAAA,MACvF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,UAAA,EAAY,aAAa,qCAAA,EAAsC;AAAA,MAClF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,aAAa,8BAAA;AAA+B,KACxE,CAAA;AAED,IAAA,MAAM,cAAA,GAA8C;AAAA,MAClD,GAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK,UAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AACA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,iBAAiB,CAAA,IAAK,OAAA;AAErD,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,EAAA,EAAI,qCAAqC,KAAK,CAAA;AAE9E,IAAA,MAAM,UAAA,CAAW;AAAA,MACf,IAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAQ,MAAA,IAAU,KAAA,CAAA;AAAA,MAClB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,WAAW,OAAA,EAAwC;AAChE,EAAA,MAAM,EAAE,MAAM,MAAA,EAAQ,WAAA,EAAa,WAAW,MAAA,EAAQ,OAAA,EAAS,QAAO,GAAI,OAAA;AAE1E,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,UAAA,CAAW,4DAA4D,CAAA;AACvE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,CAAW,CAAC,gBAAgB,CAAC,CAAA;AACjD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,YAAA,CAAa,CAAA,+BAAA,EAAkC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnE,IAAA,SAAA,CAAU,qDAAqD,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,MAAA,EAAQ;AAChD,IAAA,MAAM,EAAE,OAAA,EAAS,eAAA,KAAoB,UAAA,CAAW,CAAC,kBAAkB,CAAC,CAAA;AACpE,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,UAAA,CAAW,oDAAoD,CAAA;AAC/D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,gCAAA,EAAkC,OAAO,OAAO,CAAA;AAC5E,EAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,EAAA,IAAI;AACF,IAAA,MAAM,gBAAgB,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,YAAA,EAAA,EAAA,eAAA,CAAA,CAAA;AAC5B,IAAA,OAAA,CAAQ,IAAA,EAAK;AAEb,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,gBAAA,CAAiB;AAAA,MAClD,IAAA;AAAA,MACA,QAAQ,MAAA,IAAU,EAAA;AAAA,MAClB,aAAa,WAAA,IAAe,EAAA;AAAA,MAC5B,aAAA,EAAe,SAAA,IAAa,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MAClD,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AAED,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,CAAA,0BAAA,EAA6B,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,QAAA,YAAA,CAAa,sCAAsC,CAAA;AAAA,MACrD;AAAA,IACF,WAAW,MAAA,EAAQ;AACjB,MAAA,SAAA,CAAU,yCAAyC,CAAA;AAAA,IACrD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAK,4BAA4B,CAAA;AACzC,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AChKA,cAAA,EAAA;AAOA,WAAA,EAAA;AAWA,WAAA,EAAA;AAmBA,SAAS,iBAAiB,KAAA,EAA4B;AACpD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,EAAK;AAC5C,EAAA,IAAI,UAAA,KAAe,OAAA,IAAW,UAAA,KAAe,UAAA,IAAc,eAAe,MAAA,EAAQ;AAChF,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,oBAAA;AAAA,IACR,yBAAyB,KAAK,CAAA,qCAAA;AAAA,GAChC;AACF;AAEA,SAAS,gBAAA,CAAiB,OAAe,UAAA,EAA4B;AACnE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AACxC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,IAAK,UAAU,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,EAAG,UAAU,CAAA,4BAAA,CAA8B,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,oBAAoB,IAAID,OAAAA,CAAQ,YAAY,CAAA,CACtD,YAAY,oDAAoD,CAAA,CAChE,MAAA,CAAO,wBAAA,EAA0B,yBAAyB,CAAA,CAC1D,MAAA,CAAO,gBAAgB,4CAA4C,CAAA,CACnE,OAAO,mBAAA,EAAqB,gDAAgD,CAAA,CAC5E,MAAA,CAAO,wBAAwB,wCAAA,EAA0C,gBAAA,EAAkB,OAAO,CAAA,CAClG,MAAA,CAAO,aAAa,iCAAA,EAAmC,KAAK,CAAA,CAC5D,MAAA,CAAO,aAAa,wCAAA,EAA0C,KAAK,EACnE,MAAA,CAAO,mBAAA,EAAqB,2BAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,iBAAA,EAAmB,2BAA2B,CAAA,CAAA,KAAK,gBAAA,CAAiB,GAAG,aAAa,CAAC,EAC5F,MAAA,CAAO,qBAAA,EAAuB,uBAAA,EAAyB,CAAA,CAAA,KAAK,iBAAiB,CAAA,EAAG,iBAAiB,CAAC,CAAA,CAClG,MAAA,CAAO,oBAAoB,oCAAA,EAAsC,CAAA,CAAA,KAAK,gBAAA,CAAiB,CAAA,EAAG,cAAc,CAAC,CAAA,CACzG,OAAO,mBAAA,EAAqB,+BAAA,EAAiC,OAAK,gBAAA,CAAiB,CAAA,EAAG,eAAe,CAAC,EACtG,MAAA,CAAO,kBAAA,EAAoB,oEAAoE,CAAA,CAC/F,MAAA,CAAO,OAAO,OAAA,KAA+B;AAC5C,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,CAAC,OAAA,CAAQ,SAAA,EAAW;AAC7C,IAAA,MAAMC,gBAAe,OAAO,CAAA;AAAA,EAC9B,CAAA,MAAO;AACL,IAAA,MAAM,cAAc,OAAO,CAAA;AAAA,EAC7B;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,CAAe,cAAA,GAA6C,EAAC,EAAkB;AAC5F,EAAA,WAAA,CAAY,uBAAA,EAAyB,MAAM,MAAM,CAAA;AACjD,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,4DAA4D,CAAC,CAAA;AAErF,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,cAAA,CAAe,SAAA,IAAa,MAAM,WAAA,CAAY,IAAI,yBAAyB,CAAA;AAC7F,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,YAAA,CAAa,6BAA6B,CAAA;AAC1C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,cAAA,CAAe,IAAA,IAAQ,MAAM,WAAA,CAAY,EAAA,EAAI,SAAS,SAAS,CAAA;AAC5E,IAAA,MAAM,SAAS,cAAA,CAAe,MAAA,IAAU,MAAM,WAAA,CAAY,IAAI,+BAA+B,CAAA;AAG7F,IAAA,MAAM,iBAAA,GAAoB,MAAM,SAAA,CAAU,EAAA,EAAI,qCAAA,EAAuC;AAAA,MACnF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,aAAa,6CAAA,EAA8C;AAAA,MACvF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,UAAA,EAAY,aAAa,qCAAA,EAAsC;AAAA,MAClF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,aAAa,8BAAA;AAA+B,KACxE,CAAA;AAED,IAAA,MAAM,cAAA,GAA8C;AAAA,MAClD,GAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK,UAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AACA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,iBAAiB,CAAA,IAAK,OAAA;AAErD,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,EAAA,EAAI,qCAAqC,KAAK,CAAA;AAC9E,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,8BAA8B,KAAK,CAAA;AAExE,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,SAAA,CAAU,wDAAwD,CAAA;AAElE,IAAA,MAAM,aAAA,CAAc;AAAA,MAClB,SAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAQ,MAAA,IAAU,KAAA,CAAA;AAAA,MAClB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,cAAc,OAAA,EAA2C;AACtE,EAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,UAAA,EAAY,QAAA,EAAS,GAAI,OAAA;AAEvH,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,UAAA,CAAW,yEAAyE,CAAA;AACpF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,WAAW,CAAC,kBAAA,EAAoB,gBAAgB,CAAC,CAAA;AACrE,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,UAAA,CAAW,CAAA,wCAAA,EAA2C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,SAAA,CAAU,kGAAkG,CAAA;AAAA,EAC9G,CAAA,MAAO;AACL,IAAA,MAAM,cACJ,OAAA,KAAY,MAAA,GACR,qDAAA,GACA,OAAA,KAAY,UACV,uBAAA,GACA,6BAAA;AACR,IAAA,SAAA,CAAU,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,4BAAA,EAA8B,OAAO,IAAI,CAAA;AACrE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAChB;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,mBAAmB,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAE/B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACf;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,mBAAA,CAAoB;AAAA,MACxD,aAAA,EAAe,SAAA;AAAA,MACf,MAAM,IAAA,IAAQ,SAAA;AAAA,MACd,MAAA;AAAA,MACA,WAAA,EAAa,OAAA;AAAA,MACb,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,YAAA,CAAa,CAAA,0BAAA,EAA6B,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,QAAA,YAAA,CAAa,sCAAsC,CAAA;AAAA,MACrD;AAAA,IACF,WAAW,MAAA,EAAQ;AACjB,MAAA,SAAA,CAAU,8CAA8C,CAAA;AACxD,MAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,MAAA,CAAO,UAAA,EAAY;AAChD,QAAA,SAAA,CAAU,CAAA,6BAAA,EAAgC,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,OAAO,mBAAA,EAAqB;AAC9B,QAAA,SAAA,CAAU,oDAAoD,CAAA;AAAA,MAChE;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,KAAK,sBAAsB,CAAA;AAAA,IACrC;AACA,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AC5MA,cAAA,EAAA;AAOA,WAAA,EAAA;AAUA,WAAA,EAAA;AAQO,IAAM,eAAA,GAAkB,IAAID,OAAAA,CAAQ,UAAU,CAAA,CAClD,YAAY,0CAA0C,CAAA,CACtD,MAAA,CAAO,mBAAA,EAAqB,wCAAwC,CAAA,CACpE,OAAO,QAAA,EAAU,wBAAA,EAA0B,KAAK,CAAA,CAChD,MAAA,CAAO,mBAAA,EAAqB,2BAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,OAAO,OAAA,KAA6B;AAC1C,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,MAAMC,eAAAA,EAAe;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,OAAO,CAAA;AAAA,EAC3B;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,GAAgC;AAC7C,EAAA,WAAA,CAAY,gBAAA,EAAkB,MAAM,KAAK,CAAA;AACzC,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,sDAAsD,CAAC,CAAA;AAE/E,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,CAAA,sBAAA,EAAyB,OAAO;AAAA,CAAI,CAAC,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,mBAAmB,IAAI,CAAA;AAC5D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,EAAE,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AAAA,EACtD,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,YAAY,OAAA,EAAyC;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK,GAAI,OAAA;AAEjC,EAAA,IAAI;AACF,IAAA,MAAM,iBAAiB,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAC7B,IAAA,MAAM,SAAS,MAAM,cAAA,CAAe,aAAa,EAAE,IAAA,EAAM,UAAU,CAAA;AAEnE,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,EAAQ;AACR,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,oBAAoB,CAAC,CAAA;AAClD,IAAA,OAAA,EAAQ;AAER,IAAA,KAAA,MAAW,EAAA,IAAM,OAAO,OAAA,EAAS;AAC/B,MAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAClF,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,IAAI,CAAC,CAAA,EAAA,EAAK,EAAA,CAAG,OAAO,CAAA,QAAA,CAAU,CAAA;AAC3E,MAAA,IAAI,EAAA,CAAG,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACxB,QAAA,KAAA,MAAW,KAAA,IAAS,GAAG,MAAA,EAAQ;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,MAAA,CAAO,MAAA,CAAO,MAAM,OAAO,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,YAAA,CAAa,kCAAkC,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,oDAAoD,CAAA;AACjE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;ACnGA,cAAA,EAAA;AAOA,WAAA,EAAA;AAoBO,IAAM,gBAAgB,IAAID,OAAAA,CAAQ,QAAQ,CAAA,CAC9C,YAAY,gCAAgC,CAAA,CAC5C,QAAA,CAAS,YAAA,EAAc,iCAAiC,CAAA,CACxD,MAAA,CAAO,qBAAqB,0CAA0C,CAAA,CACtE,OAAO,iBAAA,EAAmB,+BAAA,EAAiC,GAAG,CAAA,CAC9D,OAAO,WAAA,EAAa,wBAAA,EAA0B,KAAK,CAAA,CACnD,MAAA,CAAO,UAAU,wBAAA,EAA0B,KAAK,CAAA,CAChD,MAAA,CAAO,qBAAqB,yBAAA,EAA2B,KAAK,EAC5D,MAAA,CAAO,OAAO,OAAiB,OAAA,KAA0C;AACxE,EAAA,MAAM,WAAA,GAA6B,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAa,EAAE,CAAA,IAAK,CAAA,EAAE;AAErG,EAAA,IAAI,WAAA,CAAY,WAAA,IAAe,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACjD,IAAA,MAAMC,gBAAe,WAAW,CAAA;AAAA,EAClC,CAAA,MAAO;AACL,IAAA,MAAM,UAAU,WAAW,CAAA;AAAA,EAC7B;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,CAAe,cAAA,GAAyC,EAAC,EAAkB;AACxF,EAAA,WAAA,CAAY,yBAAA,EAA2B,MAAM,QAAQ,CAAA;AACrD,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,0DAA0D,CAAC,CAAA;AAEnF,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,EAAA,EAAI,wBAAwB,CAAA;AAChE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,YAAA,CAAa,mBAAmB,CAAA;AAChC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,EAAA,EAAI,yBAAA,EAA2B;AAAA,MAChE,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,kBAAA,EAAoB,aAAa,gCAAA,EAAiC;AAAA,MACrF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,WAAA,EAAa,aAAa,gCAAA,EAAiC;AAAA,MAC9E,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,QAAA,EAAU,aAAa,uBAAA,EAAwB;AAAA,MAClE,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,aAAa,qBAAA;AAAsB,KAClE,CAAA;AAED,IAAA,MAAM,OAAA,GAAiD;AAAA,MACrD,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK,QAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,KACP;AACA,IAAA,MAAM,IAAA,GAAO,QAAQ,UAAU,CAAA;AAE/B,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,EAAA,EAAI,iCAAiC,GAAG,CAAA;AAC1E,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA,IAAK,CAAA;AAEtC,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,2BAA2B,KAAK,CAAA;AACrE,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAE1D,IAAA,MAAM,SAAA,CAAU;AAAA,MACd,KAAA,EAAO,CAAC,SAAS,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,UAAU,OAAA,EAAuC;AAC9D,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,MAAK,GAAI,OAAA;AAE7C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,UAAA,CAAW,gCAAgC,CAAA;AAC3C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,eAAe,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,WAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAE3B,IAAA,MAAM,aAAa,UAAA,CAAW;AAAA,MAC5B,KAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;ACnHA,cAAA,EAAA;AAOA,WAAA,EAAA;AASA,WAAA,EAAA;AAUO,IAAM,WAAA,GAAc,IAAID,OAAAA,CAAQ,MAAM,CAAA,CAC1C,YAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,uBAAA,EAAyB,8CAA8C,CAAA,CAC9E,OAAO,WAAA,EAAa,qCAAA,EAAuC,KAAK,CAAA,CAChE,MAAA,CAAO,mBAAA,EAAqB,2BAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,OAAO,OAAA,KAAyB;AACtC,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,CAAC,OAAA,CAAQ,SAAA,EAAW;AAC7C,IAAA,MAAMC,gBAAe,OAAO,CAAA;AAAA,EAC9B,CAAA,MAAO;AACL,IAAA,MAAM,QAAQ,OAAO,CAAA;AAAA,EACvB;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,CAAe,cAAA,GAAuC,EAAC,EAAkB;AACtF,EAAA,WAAA,CAAY,eAAA,EAAiB,MAAM,IAAI,CAAA;AACvC,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,uEAAuE,CAAC,CAAA;AAGhG,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,CAAW,CAAC,kBAAkB,CAAC,CAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,UAAA,CAAW,CAAA,wCAAA,EAA2C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1E,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AAGzB,IAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,aAAA,EAAc;AAEjD,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,oBAAoB,CAAC,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,IACxB,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,KAAW,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,CACtG,CAAA;AAAA,KACF;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,IAC3B,SAAA,CAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GACxB,SAAA,CAAU,QAAA,CAAS,IAAI,CAAC,CAAA,KAAW,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAClD,MAAA,CAAO,IAAA,CAAK,QAAQ,CAC1B,CAAA;AAAA,KACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,EAAA,EAAI,4BAAA,EAA8B;AAAA,MACnE,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,wBAAA,EAA0B,aAAa,iCAAA,EAAkC;AAAA,MAC5F,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,oBAAA,EAAsB,aAAa,kCAAA,EAAmC;AAAA,MACzF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,gBAAA,EAAkB,aAAa,uCAAA,EAAwC;AAAA,MAC1F,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,QAAA,EAAU,aAAa,SAAA;AAAU,KACrD,CAAA;AAED,IAAA,IAAI,eAAe,GAAA,EAAK;AACtB,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAA8C;AAAA,MAClD,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,YAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AACA,IAAA,MAAM,SAAA,GAAY,aAAa,UAAU,CAAA;AAEzC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,cAAA,CAAe,MAAA,IAAU,MAAM,UAAA,CAAW,EAAA,EAAI,sCAAsC,KAAK,CAAA;AACxG,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,sBAAsB,IAAI,CAAA;AAE/D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,EAAE,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,MAAM,CAAA;AAAA,EACxD,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,QAAQ,OAAA,EAAqC;AAC1D,EAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAO,GAAI,OAAA;AAE9B,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,UAAA,CAAW,yEAAyE,CAAA;AACpF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,CAAW,CAAC,kBAAkB,CAAC,CAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,UAAA,CAAW,CAAA,wCAAA,EAA2C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AACzB,IAAA,MAAM,SAAS,MAAM,UAAA,CAAW,cAAc,SAAA,EAAW,EAAE,QAAQ,CAAA;AAEnE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,CAAU,CAAA,WAAA,EAAc,MAAA,CAAO,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,YAAA,CAAa,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,uBAAuB,CAAA;AAAA,IACnC;AAEA,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AClJA,cAAA,EAAA;AAOA,WAAA,EAAA;AAWA,WAAA,EAAA;AAaO,IAAM,kBAAkB,IAAID,OAAAA,CAAQ,UAAU,CAAA,CAClD,YAAY,8CAA8C,CAAA,CAC1D,MAAA,CAAO,mBAAA,EAAqB,UAAU,CAAA,CACtC,MAAA,CAAO,0BAAA,EAA4B,iBAAiB,EACpD,MAAA,CAAO,mBAAA,EAAqB,+CAA+C,CAAA,CAC3E,OAAO,2BAAA,EAA6B,mCAAA,EAAqC,QAAQ,CAAA,CACjF,OAAO,qBAAA,EAAuB,kBAAA,EAAoB,GAAG,CAAA,CACrD,OAAO,mBAAA,EAAqB,yBAAA,EAA2B,KAAK,CAAA,CAC5D,MAAA,CAAO,OAAO,OAAA,KAA6B;AAC1C,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,CAAC,OAAA,CAAQ,IAAA,EAAM;AACxC,IAAA,MAAMC,gBAAe,OAAO,CAAA;AAAA,EAC9B,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,OAAO,CAAA;AAAA,EAC3B;AACF,CAAC,CAAA;AAEH,eAAeA,eAAAA,CAAe,cAAA,GAA2C,EAAC,EAAkB;AAC1F,EAAA,WAAA,CAAY,eAAA,EAAiB,MAAM,MAAM,CAAA;AACzC,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,2DAA2D,CAAC,CAAA;AAEpF,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AAEF,IAAA,MAAM,cAAA,GAAiB,MAAM,SAAA,CAAU,EAAA,EAAI,2CAAA,EAA6C;AAAA,MACtF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,gBAAA,EAAkB,aAAa,qCAAA,EAAsC;AAAA,MACxF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,eAAA,EAAiB,aAAa,4CAAA;AAA6C,KAC/F,CAAA;AACD,IAAA,MAAM,QAAA,GAAwB,cAAA,KAAmB,GAAA,GAAM,WAAA,GAAc,QAAA;AAGrE,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,mBAAmB,CAAC,CAAA;AACxD,IAAA,MAAM,OAAO,cAAA,CAAe,IAAA,IAAQ,MAAM,WAAA,CAAY,IAAI,UAAU,CAAA;AACpE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,YAAA,CAAa,uBAAuB,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,WAAA,IAAe,MAAM,WAAA;AAAA,MACtD,EAAA;AAAA,MACA,iBAAA;AAAA,MACA,KAAK,IAAI,CAAA,yBAAA;AAAA,KACX;AAEA,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,IAAU,MAAM,WAAA;AAAA,MAC5C,EAAA;AAAA,MACA,+CAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAMJ,OAAAA,GAAS,cAAA,CAAe,MAAA,IAAU,MAAM,WAAA;AAAA,MAC5C,EAAA;AAAA,MACA,kBAAA;AAAA,MACA,KAAK,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,KAC9C;AAGA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,UAAU,CAAC,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,EAAI,QAAA,KAAa,WAAA,GAAc,eAAA,GAAkB,gBAAgB,CAAA,CAAE,CAAA;AAC5G,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACnD,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA,EAAIA,OAAM,CAAA,CAAE,CAAA;AAEnD,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,EAAA,EAAI,8BAA8B,IAAI,CAAA;AACvE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,SAAA,CAAU,uBAAuB,CAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,CAAY;AAAA,MAChB,IAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAAA,OAAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAe,YAAY,OAAA,EAAyC;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAQ,QAAA,EAAU,MAAA,EAAAA,SAAO,GAAI,OAAA;AAExD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,UAAA,CAAW,8DAA8D,CAAA;AACzE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,CAAW,CAAC,gBAAgB,CAAC,CAAA;AACjD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,YAAA,CAAa,CAAA,+BAAA,EAAkC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnE,IAAA,SAAA,CAAU,qDAAqD,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAC/D,EAAA,OAAA,CAAQ,KAAA,EAAM;AAEd,EAAA,IAAI;AACF,IAAA,MAAM,iBAAiB,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,aAAA,EAAA,EAAA,gBAAA,CAAA,CAAA;AAC7B,IAAA,OAAA,CAAQ,IAAA,EAAK;AAEb,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,WAAA,CAAY;AAAA,MAC9C,IAAA;AAAA,MACA,WAAA,EAAa,WAAA,IAAe,CAAA,EAAA,EAAK,IAAI,CAAA,UAAA,CAAA;AAAA,MACrC,QAAQ,MAAA,IAAU,SAAA;AAAA,MAClB,UAAU,QAAA,IAAY,QAAA;AAAA,MACtB,WAAWA,OAAAA,IAAU;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,YAAA,CAAa,iCAAiC,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,aAAa,CAAC,CAAA;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,EAAO,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAC5D,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,YAAA,CAAc,CAAA;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,6BAAA,EAAgC,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAC,CAAA,CAAE,CAAA;AACtG,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,YAAA,CAAc,CAAA;AAChD,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,SAAA,CAAU,wDAAwD,CAAA;AAAA,IACpE;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AACpC,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AClKA,cAAA,EAAA;AA8BA,WAAA,EAAA;AAGA,eAAe,cAAA,GAAiB;AAC9B,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAO,WAAW,CAAA;AAAA,EACjC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACF;AAIA,IAAM,+BAAA,GAAkC,uCAAA;AAmBjC,IAAM,WAAA,GAAc,IAAIG,OAAAA,EAAQ,CACpC,KAAK,MAAM,CAAA,CACX,WAAA,CAAY,+EAA+E,CAAA,CAC3F,MAAA,CAAO,uBAAuB,kDAAA,EAAoD,KAAK,EACvF,MAAA,CAAO,wBAAA,EAA0B,gEAAgE,CAAA,CACjG,MAAA,CAAO,wBAAA,EAA0B,6BAA6B,CAAA,CAC9D,MAAA,CAAO,kBAAkB,CAAA,wCAAA,EAA2C,+BAA+B,EAAE,CAAA,CACrG,MAAA,CAAO,wBAAwB,+CAA+C,CAAA,CAC9E,MAAA,CAAO,uBAAA,EAAyB,8BAAA,EAAgC,SAAS,EACzE,MAAA,CAAO,eAAA,EAAiB,sBAAsB,CAAA,CAC9C,MAAA,CAAO,qBAAqB,yBAAyB,CAAA,CACrD,MAAA,CAAO,OAAO,OAAA,KAAyB;AACtC,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,OAAO,CAAA;AAAA,EACvB,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;AAEH,eAAe,QAAQ,OAAA,EAAqC;AAC1D,EAAA,MAAM,EAAE,OAAO,SAAA,EAAW,SAAA,EAAW,UAAU,QAAA,EAAU,MAAA,EAAAH,OAAAA,EAAQ,OAAA,EAAQ,GAAI,OAAA;AAG7E,EAAA,IAAA,CAAK,UAAU,eAAA,IAAmB,KAAA,KAAU,eAAe,KAAA,KAAU,KAAA,KAAU,CAAC,SAAA,EAAW;AACzF,IAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,EAChF;AAEA,EAAA,IAAI,YAAY,SAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AAGA,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,EAAe;AAGxC,EAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,EAAE,SAAA,EAAW,UAAU,CAAA;AAChE,EAAA,IAAI,YAAA,GAAsC,IAAA;AAC1C,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,YAAA,GAAe,MAAM,mBAAmB,YAAY,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,QAAA,IAAYA,OAAAA,KAAW,SAAA,IAAa,YAAA,EAAc;AACpD,IAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,CAAA,yBAAA,EAA4B,YAAY,EAAE,CAAC,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,YAAA,EAAc,SAAS,CAAA,IAAK,YAAA,CAAa,UAAU,MAAA,GAAS,CAAA;AACpG,EAAA,IAAI,KAAA,KAAU,OAAA,IAAW,CAAC,QAAA,EAAU;AAClC,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,iBAAA,IAAqB,CAAC,QAAA,EAAU;AACrD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAqD,EAAC;AAG5D,EAAA,IAAI,KAAA,KAAU,eAAA,IAAmB,KAAA,KAAU,KAAA,EAAO;AAChD,IAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,6BAA6B,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,eAAeK,OAAAA,CAAQ,OAAA,CAAQ,KAAI,EAAG,CAAA,sBAAA,EAAyB,SAAS,CAAA,KAAA,CAAO,CAAA;AACrF,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,YAAA,EAAc,OAAO,CAAA;AACpD,MAAA,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA,IAAIL,YAAW,SAAA,EAAW;AACxB,QAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,MAAA,CAAO,CAAA,4BAAA,EAA0B,YAAY,EAAE,CAAC,CAAA;AACnE,QAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,oCAAA,GAAuC,SAAA,GAAY,SAAS,CAAC,CAAA;AAAA,MACvF;AACA,MAAA,QAAA,GAAW,EAAE,EAAA,EAAI,SAAA,EAAW,aAAA,EAAe,SAAA,EAAU;AAAA,IACvD;AAEA,IAAA,MAAMH,OAAAA,GAAS;AAAA,MACb,aAAA,EAAe,SAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAA,EAAa,YAAA,EAAc,WAAA,IAAe,EAAC;AAAA,MAC3C;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,qBAAA,CAAsBA,OAAM,CAAA;AAC5D,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,EAAiB,QAAQ,CAAA;AAE/C,IAAA,IAAIG,YAAW,SAAA,EAAW;AACxB,MAAA,eAAA,CAAgB,iBAAiB,MAAM,CAAA;AAAA,IACzC;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,KAAA,EAAO;AAC5C,IAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,OAAA,GAAU,cAAc,OAAA,IAAW;AAAA,MACvC,EAAE,KAAA,EAAO,gCAAA,EAAkC,cAAA,EAAgB,EAAC;AAAE,KAChE;AAEA,IAAA,MAAMH,OAAAA,GAAS;AAAA,MACb,aAAA,EAAe,SAAA;AAAA,MACf,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,iBAAA,CAAkBA,OAAM,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,WAAA,EAAa,QAAQ,CAAA;AAE3C,IAAA,IAAIG,YAAW,SAAA,EAAW;AACxB,MAAA,eAAA,CAAgB,aAAa,MAAM,CAAA;AAAA,IACrC;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,KAAA,EAAO;AACxC,IAAA,MAAM,cAAA,GAAiB,cAAc,SAAA,GAAY,CAAC,GAAG,YAAA,CAAa,SAAS,IAAI,EAAC;AAEhF,IAAA,IAAI,KAAA,KAAU,OAAA,IAAW,QAAA,IAAY,cAAA,CAAe,SAAS,CAAA,EAAG;AAC9D,MAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,IAAK,QAAA,EAAU;AAE3C,QAAA,cAAA,CAAe,IAAA,CAAK;AAAA,UAClB,IAAA,EAAM,YAAA;AAAA,UACN,YAAA,EAAc,yBAAA;AAAA,UACd,eAAA,EAAiB,QAAA;AAAA,UACjB,UAAA,EAAY,EAAE,MAAA,EAAQ,0CAAA;AAA2C,SAClE,CAAA;AAAA,MACH;AAEA,MAAA,MAAMH,OAAAA,GAAS;AAAA,QACb,aAAA,EAAe,QAAA;AAAA,QACf,SAAA,EAAW,cAAA;AAAA,QACX;AAAA,OACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,aAAA,CAAcA,OAAM,CAAA;AACpD,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,QAAQ,CAAA;AAEvC,MAAA,IAAIG,YAAW,SAAA,EAAW;AACxB,QAAA,eAAA,CAAgB,SAAS,MAAM,CAAA;AAAA,MACjC;AAAA,IACF,CAAA,MAAA,IAAWA,YAAW,SAAA,EAAW;AAC/B,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,kEAA6D,CAAC,CAAA;AAAA,IAC1F;AAAA,EACF;AAGA,EAAA,IAAIA,YAAW,MAAA,EAAQ;AACrB,IAAA,MAAM,aAAa,OAAA,CAAQ,MAAA,KAAW,IAAI,OAAA,CAAQ,CAAC,EAAE,MAAA,GAAS,OAAA;AAC9D,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EACjD;AAGA,EAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,IAAA,YAAA,CAAa,OAAO,CAAA;AAAA,EACtB;AACF;AAEA,SAAS,eAAA,CAAgB,WAAmB,MAAA,EAAmB;AAC7D,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,MAAA,CAAO,MAAM,eAAU,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,eAAU,CAAA;AAC/E,EAAA,MAAM,QAAQ,MAAA,CAAO,YAAA;AAErB,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,MAAM,CAAA,kBAAA,EAAqB,WAAA,CAAY,KAAK,CAAC,CAAA,IAAA,CAAM,CAAA;AACpE,EAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,MAAA,CAAO,QAAQ,IAAI,CAAC,CAAA;AAGzD,EAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvB,EAAA,KAAA,MAAW,CAAC,MAAM,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACzD,IAAA,MAAM,aAAA,GAAgB,IAAA,CACnB,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,EACpC,IAAA,EAAK;AACR,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,KAAA,EAAiB,EAAE,CAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,aAAA,CAAc,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,WAAA,CAAY,KAAe,CAAC,CAAA,IAAA,CAAM,CAAA;AAAA,EACxF;AAGA,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AACjD,IAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAC7B,IAAA,KAAA,MAAW,YAAY,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAClD,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,IAAS,EAAA,GAAK,MAAA,CAAO,MAAM,QAAG,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,QAAG,CAAA;AACzE,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,SAAS,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF;AACF;AAEA,SAAS,aAAa,OAAA,EAAsD;AAC1E,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAC9C,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,cAAc,CAAC,CAAA;AACvC,EAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAEvC,EAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,YAAA,EAAc,CAAC,CAAA,GAAI,OAAA,CAAQ,MAAA;AAEtF,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,OAAA,CAAQ;AAAA,IACzB,CAAA,SAAA,EAAY,YAAY,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAA;AAAA,IACrE,CAAA,eAAA,EAAkB,WAAA,CAAY,QAAQ,CAAC,CAAA,IAAA,CAAA;AAAA,IACvC,EAAA;AAAA,IACA,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,QAAA,GAAM,QAAA;AACrC,MAAA,MAAM,QAAQ,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,GAAA;AACtD,MAAA,OAAO,CAAA,EAAG,MAAM,IAAI,CAAC,IAAI,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,CAAA,CAAE,MAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,YAAY,CAAA,IAAA,CAAA;AAAA,IACvG,CAAC;AAAA,GACH,EAAG,EAAE,WAAA,EAAa,SAAA,GAAY,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAEtE,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAChB;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,IAAI,KAAA,IAAS,EAAA,EAAI,OAAO,MAAA,CAAO,KAAA,CAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAC9D,EAAA,IAAI,KAAA,IAAS,EAAA,EAAI,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAC/D,EAAA,OAAO,OAAO,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAC7C;AAEA,SAAS,iBAAA,CAAkB,OAAe,KAAA,EAAuB;AAC/D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,MAAO,KAAK,CAAA;AAC/C,EAAA,MAAM,QAAQ,KAAA,GAAQ,MAAA;AACtB,EAAA,MAAM,UAAA,GAAa,KAAA,IAAS,EAAA,GAAK,MAAA,CAAO,MAAM,QAAG,CAAA,GAAI,KAAA,IAAS,EAAA,GAAK,OAAO,MAAA,CAAO,QAAG,CAAA,GAAI,MAAA,CAAO,IAAI,QAAG,CAAA;AACtG,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,QAAG,CAAA;AACjC,EAAA,OAAO,GAAA,GAAM,WAAW,MAAA,CAAO,MAAM,IAAI,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA,GAAI,GAAA;AACrE;AAEA,SAAS,oBAAoB,OAAA,EAAqE;AAChG,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,OAAOK,OAAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,QAAQ,SAAS,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,OAAOA,OAAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,+BAA+B,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,mBAAmB,YAAA,EAA+C;AAC/E,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,YAAA,EAAc,OAAO,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAEjC,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,YAAY,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3E;AACF;;;AT7RA,OAAA,EAAQ;AAER,IAAM,OAAA,GAAU,IAAIF,OAAAA,EAAQ;AAE5B,OAAA,CACG,IAAA,CAAK,KAAK,CAAA,CACV,WAAA,CAAY,4DAA4D,CAAA,CACxE,OAAA,CAAQ,UAAA,EAAW,EAAG,eAAA,EAAiB,wBAAwB,EAC/D,MAAA,CAAO,YAAA,EAAc,wBAAwB,CAAA,CAC7C,MAAA,CAAO,WAAA,EAAa,uBAAuB,CAAA,CAC3C,IAAA,CAAK,WAAA,EAAa,CAAC,WAAA,KAAgB;AAElC,EAAA,IAAI,WAAA,CAAY,IAAA,EAAK,CAAE,OAAA,EAAS;AAC9B,IAAA,OAAA,CAAQ,IAAI,QAAA,GAAW,GAAA;AAAA,EACzB;AACA,EAAA,IAAI,WAAA,CAAY,IAAA,EAAK,CAAE,OAAA,EAAS;AAC9B,IAAA,OAAA,CAAQ,IAAI,WAAA,GAAc,GAAA;AAAA,EAC5B;AACF,CAAC,CAAA;AAGH,OAAA,CAAQ,WAAW,aAAa,CAAA;AAChC,OAAA,CAAQ,WAAW,cAAc,CAAA;AACjC,OAAA,CAAQ,WAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,WAAW,eAAe,CAAA;AAClC,OAAA,CAAQ,WAAW,aAAa,CAAA;AAChC,OAAA,CAAQ,WAAW,WAAW,CAAA;AAC9B,OAAA,CAAQ,WAAW,eAAe,CAAA;AAClC,OAAA,CAAQ,WAAW,WAAW,CAAA;AAG9B,OAAA,CAAQ,OAAO,YAAY;AACzB,EAAA,MAAM,kBAAA,EAAmB;AAC3B,CAAC,CAAA;AAKD,eAAe,kBAAA,GAAoC;AACjD,EAAA,WAAA,EAAY;AAEZ,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,OAAA;AAAA,MACE;AAAA,QACE,MAAA,CAAO,MAAM,8BAA8B,CAAA;AAAA,QAC3C,EAAA;AAAA,QACA,MAAA,CAAO,KAAK,kDAAkD,CAAA;AAAA,QAC9D,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,QAAG,CAAC,CAAA,0BAAA,CAAA;AAAA,QACrB,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,QAAG,CAAC,CAAA,+BAAA,CAAA;AAAA,QACrB,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,QAAG,CAAC,CAAA,8BAAA;AAAA,OACvB;AAAA,MACA,EAAE,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,SAAS,CAAA;AAAE;AACzC,GACF;AAEA,EAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,EAAE,CAAA;AAAA,EACvB,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAUA,IAAM,aAAA,GAA+B;AAAA,EACnC,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,cAAA,EAAgB,aAAa,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAM,OAAA,EAAS,UAAA,EAAW;AAAA,EACzG,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,aAAA,EAAe,aAAa,+BAAA,EAAiC,IAAA,EAAM,WAAA,EAAM,OAAA,EAAS,QAAA,EAAS;AAAA,EAC7G,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,kBAAA,EAAoB,aAAa,4BAAA,EAA8B,IAAA,EAAM,WAAA,EAAM,OAAA,EAAS,SAAA,EAAU;AAAA,EAChH,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,sBAAA,EAAwB,aAAa,iCAAA,EAAmC,IAAA,EAAM,WAAA,EAAM,OAAA,EAAS,YAAA,EAAa;AAAA,EAC5H,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,cAAA,EAAgB,aAAa,6BAAA,EAA+B,IAAA,EAAM,WAAA,EAAM,OAAA,EAAS,MAAA,EAAO;AAAA,EAC1G,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,eAAA,EAAiB,aAAa,kCAAA,EAAoC,IAAA,EAAM,QAAA,EAAK,OAAA,EAAS,UAAA,EAAW;AAAA,EACnH,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,aAAA,EAAe,aAAa,uBAAA,EAAyB,IAAA,EAAM,QAAA,EAAK,OAAA,EAAS,QAAA,EAAS;AAAA,EACpG,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,gBAAA,EAAkB,aAAa,sCAAA,EAAmC,IAAA,EAAM,QAAA,EAAK,OAAA,EAAS,MAAA;AAC1G,CAAA;AAEA,eAAe,aAAa,EAAA,EAAsD;AAChF,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAG,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC7B,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,CAAA,CAAA;AAAA,MAC9B,aAAa,GAAA,CAAI;AAAA,KACnB,CAAE,CAAA;AAAA,IACF,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,QAAA,EAAU,aAAa,uBAAA,EAAwB;AAAA,IAClE,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,aAAA,EAAU,aAAa,cAAA;AAAe,GAC3D;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,EAAA,EAAI,8BAA8B,OAAO,CAAA;AACxE,EAAA,MAAM,gBAAA,CAAiB,QAAQ,EAAE,CAAA;AACnC;AAEA,eAAe,gBAAA,CAAiB,QAAgB,EAAA,EAAsD;AAEpG,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,GAAA,EAAK,UAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,YAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,UAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA;AAAA,IAEL,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,MAAA,CAAO,WAAA,EAAa,CAAA,IAAK,MAAA;AAEtD,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAA,CAAQ,IAAI,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,oBAAa,IAAI,IAAI,CAAA;AACpD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAA,CAAQ,UAAA,EAAW;AACnB,IAAA,OAAO,aAAa,EAAE,CAAA;AAAA,EACxB;AAGA,EAAA,MAAM,UAAU,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,OAAO,CAAA;AAC/D,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAGd,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,CAAC,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,OAAA,CAAQ,OAAA,EAAS,eAAe,CAAC,CAAA;AAAA,IAC/F,SAAS,KAAA,EAAO;AACd,MAAA,UAAA,CAAW,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACnE;AAGA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAM,cAAA,GAAiB,MAAM,UAAA,CAAW,EAAA,EAAI,wBAAwB,IAAI,CAAA;AACxE,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,OAAO,aAAa,EAAE,CAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,oBAAa,IAAI,IAAI,CAAA;AACpD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,UAAA,CAAW,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AACtC,IAAA,OAAO,aAAa,EAAE,CAAA;AAAA,EACxB;AACF;AAGA,OAAA,CAAQ,KAAA,EAAM","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * CLI Configuration Utilities\n *\n * Handles configuration discovery and environment setup.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { config } from 'dotenv';\nimport { printInfo } from './colors.js';\n\n/**\n * Standard locations to search for .env files\n */\nconst ENV_SEARCH_PATHS = [\n '.env.local',\n '.env',\n 'examples/app/.env.local',\n 'examples/app/.env',\n];\n\n/**\n * Load environment variables from the first .env file found\n * Searches current directory, then up the directory tree to find project root\n */\nexport function loadEnv(cwd: string = process.cwd()): string | null {\n // First, try standard paths from cwd\n for (const envPath of ENV_SEARCH_PATHS) {\n const fullPath = path.join(cwd, envPath);\n if (fs.existsSync(fullPath)) {\n config({ path: fullPath });\n return fullPath;\n }\n }\n\n // Then, search up the directory tree for .env.local or .env\n let current = cwd;\n while (current !== path.dirname(current)) {\n for (const envFile of ['.env.local', '.env']) {\n const envPath = path.join(current, envFile);\n if (fs.existsSync(envPath)) {\n config({ path: envPath });\n return envPath;\n }\n }\n current = path.dirname(current);\n }\n\n return null;\n}\n\n/**\n * Find the project root by looking for package.json\n */\nexport function findProjectRoot(startDir: string = process.cwd()): string | null {\n let current = startDir;\n while (current !== path.dirname(current)) {\n if (fs.existsSync(path.join(current, 'package.json'))) {\n return current;\n }\n current = path.dirname(current);\n }\n return null;\n}\n\n/**\n * Find the data directory for KB operations\n */\nexport function findDataDir(cwd: string = process.cwd()): string | null {\n // Check common locations\n const candidates = [\n path.join(cwd, 'data'),\n path.join(cwd, 'examples', 'app', 'data'),\n ];\n\n for (const dir of candidates) {\n if (fs.existsSync(dir)) {\n return dir;\n }\n }\n return null;\n}\n\n/**\n * Find the composition manifests directory\n */\nexport function findManifestsDir(cwd: string = process.cwd()): string | null {\n const candidates = [\n path.join(cwd, 'composition', 'manifests'),\n path.join(cwd, 'examples', 'app', 'composition', 'manifests'),\n ];\n\n for (const dir of candidates) {\n if (fs.existsSync(dir)) {\n return dir;\n }\n }\n return null;\n}\n\n/**\n * Resolve a path relative to project root or data directory\n */\nexport function resolvePath(inputPath: string, basePaths: string[]): string | null {\n // If absolute, return as-is\n if (path.isAbsolute(inputPath)) {\n return fs.existsSync(inputPath) ? inputPath : null;\n }\n\n // Try relative to each base path\n for (const base of basePaths) {\n const fullPath = path.join(base, inputPath);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n // Try relative to cwd\n const cwdPath = path.join(process.cwd(), inputPath);\n if (fs.existsSync(cwdPath)) {\n return cwdPath;\n }\n\n return null;\n}\n\n/**\n * Ensure required environment variables are set\n */\nexport function requireEnv(vars: string[]): { missing: string[]; present: string[] } {\n const missing: string[] = [];\n const present: string[] = [];\n\n for (const v of vars) {\n if (process.env[v]) {\n present.push(v);\n } else {\n missing.push(v);\n }\n }\n\n return { missing, present };\n}\n\n/**\n * Get CLI version from package.json\n */\nexport function getVersion(): string {\n try {\n // In bundled form, we'll embed version at build time\n // For development, read from package.json\n const pkgPath = path.join(import.meta.dirname || __dirname, '..', '..', 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.1.0';\n }\n } catch {\n // Ignore errors\n }\n return '0.1.0';\n}\n\n\n","/**\n * CLI Color and Formatting Utilities\n *\n * Provides colorful terminal output without external dependencies.\n * Uses ANSI escape codes for cross-platform color support.\n */\n\n// ANSI escape codes for colors and styles\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst ITALIC = '\\x1b[3m';\nconst UNDERLINE = '\\x1b[4m';\n\n// Foreground colors\nconst FG = {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n // Bright colors\n brightBlack: '\\x1b[90m',\n brightRed: '\\x1b[91m',\n brightGreen: '\\x1b[92m',\n brightYellow: '\\x1b[93m',\n brightBlue: '\\x1b[94m',\n brightMagenta: '\\x1b[95m',\n brightCyan: '\\x1b[96m',\n brightWhite: '\\x1b[97m',\n};\n\n// Background colors\nconst BG = {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m',\n};\n\n// Color helper functions\nexport const colors = {\n // Basic colors\n red: (text: string) => `${FG.red}${text}${RESET}`,\n green: (text: string) => `${FG.green}${text}${RESET}`,\n yellow: (text: string) => `${FG.yellow}${text}${RESET}`,\n blue: (text: string) => `${FG.blue}${text}${RESET}`,\n magenta: (text: string) => `${FG.magenta}${text}${RESET}`,\n cyan: (text: string) => `${FG.cyan}${text}${RESET}`,\n white: (text: string) => `${FG.white}${text}${RESET}`,\n gray: (text: string) => `${FG.brightBlack}${text}${RESET}`,\n\n // Bright colors\n brightRed: (text: string) => `${FG.brightRed}${text}${RESET}`,\n brightGreen: (text: string) => `${FG.brightGreen}${text}${RESET}`,\n brightYellow: (text: string) => `${FG.brightYellow}${text}${RESET}`,\n brightBlue: (text: string) => `${FG.brightBlue}${text}${RESET}`,\n brightMagenta: (text: string) => `${FG.brightMagenta}${text}${RESET}`,\n brightCyan: (text: string) => `${FG.brightCyan}${text}${RESET}`,\n\n // Styles\n bold: (text: string) => `${BOLD}${text}${RESET}`,\n dim: (text: string) => `${DIM}${text}${RESET}`,\n italic: (text: string) => `${ITALIC}${text}${RESET}`,\n underline: (text: string) => `${UNDERLINE}${text}${RESET}`,\n\n // Combined styles\n boldRed: (text: string) => `${BOLD}${FG.red}${text}${RESET}`,\n boldGreen: (text: string) => `${BOLD}${FG.green}${text}${RESET}`,\n boldYellow: (text: string) => `${BOLD}${FG.yellow}${text}${RESET}`,\n boldBlue: (text: string) => `${BOLD}${FG.blue}${text}${RESET}`,\n boldMagenta: (text: string) => `${BOLD}${FG.magenta}${text}${RESET}`,\n boldCyan: (text: string) => `${BOLD}${FG.cyan}${text}${RESET}`,\n boldWhite: (text: string) => `${BOLD}${FG.white}${text}${RESET}`,\n\n // Semantic colors\n success: (text: string) => `${FG.green}${text}${RESET}`,\n error: (text: string) => `${FG.red}${text}${RESET}`,\n warning: (text: string) => `${FG.yellow}${text}${RESET}`,\n info: (text: string) => `${FG.cyan}${text}${RESET}`,\n muted: (text: string) => `${FG.brightBlack}${text}${RESET}`,\n\n // Highlight with background\n highlight: (text: string) => `${BG.yellow}${FG.black}${text}${RESET}`,\n badge: (text: string, color: 'red' | 'green' | 'blue' | 'yellow' | 'magenta' | 'cyan') => {\n const bg = BG[color] || BG.blue;\n return `${bg}${FG.white}${BOLD} ${text} ${RESET}`;\n },\n};\n\n// Icons/Emojis for visual feedback\nexport const icons = {\n success: 'āœ”',\n error: 'āœ–',\n warning: '⚠',\n info: 'ℹ',\n question: '?',\n pointer: 'āÆ',\n bullet: 'ā—',\n star: 'ā˜…',\n arrow: '→',\n arrowRight: '→',\n arrowDown: '↓',\n check: 'āœ“',\n cross: 'āœ—',\n dot: 'Ā·',\n ellipsis: '…',\n folder: 'šŸ“',\n file: 'šŸ“„',\n gear: 'āš™',\n rocket: 'šŸš€',\n sparkles: '✨',\n tools: 'šŸ”§',\n database: 'šŸ—ƒ',\n search: 'šŸ”',\n lightning: '⚔',\n package: 'šŸ“¦',\n};\n\n// Box drawing characters for fancy output\nexport const box = {\n topLeft: 'ā•­',\n topRight: 'ā•®',\n bottomLeft: 'ā•°',\n bottomRight: '╯',\n horizontal: '─',\n vertical: '│',\n tee: 'ā”œ',\n teeRight: '┤',\n cross: '┼',\n top: '┬',\n bottom: '┓',\n};\n\n// Spinner frames for loading animations\nexport const spinnerFrames = ['ā ‹', 'ā ™', 'ā ¹', 'ā ø', 'ā ¼', 'ā “', 'ā ¦', 'ā §', 'ā ‡', 'ā '];\n\n/**\n * Create a spinner for async operations\n */\nexport class Spinner {\n private frameIndex = 0;\n private interval: ReturnType<typeof setInterval> | null = null;\n private text: string;\n private color: (text: string) => string;\n\n constructor(text: string, color: (text: string) => string = colors.cyan) {\n this.text = text;\n this.color = color;\n }\n\n start(): void {\n if (this.interval) return;\n process.stdout.write('\\x1b[?25l'); // Hide cursor\n this.interval = setInterval(() => {\n const frame = spinnerFrames[this.frameIndex];\n process.stdout.write(`\\r${this.color(frame)} ${this.text}`);\n this.frameIndex = (this.frameIndex + 1) % spinnerFrames.length;\n }, 80);\n }\n\n update(text: string): void {\n this.text = text;\n }\n\n stop(finalMessage?: string): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n process.stdout.write('\\r\\x1b[K'); // Clear line\n process.stdout.write('\\x1b[?25h'); // Show cursor\n if (finalMessage) {\n console.log(finalMessage);\n }\n }\n\n succeed(text?: string): void {\n this.stop(`${colors.green(icons.success)} ${text || this.text}`);\n }\n\n fail(text?: string): void {\n this.stop(`${colors.red(icons.error)} ${text || this.text}`);\n }\n\n warn(text?: string): void {\n this.stop(`${colors.yellow(icons.warning)} ${text || this.text}`);\n }\n\n info(text?: string): void {\n this.stop(`${colors.blue(icons.info)} ${text || this.text}`);\n }\n}\n\n/**\n * Strip ANSI escape codes from string (for length calculation)\n */\nexport function stripAnsi(text: string): string {\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\n/**\n * Create a fancy box around text\n */\nexport function drawBox(\n content: string | string[],\n options: {\n title?: string;\n padding?: number;\n borderColor?: (text: string) => string;\n width?: number;\n } = {}\n): string {\n const lines = Array.isArray(content) ? content : content.split('\\n');\n const padding = options.padding ?? 1;\n const borderColor = options.borderColor ?? colors.cyan;\n\n // Calculate width\n const contentWidth = Math.max(...lines.map((l) => stripAnsi(l).length));\n const width = options.width ?? contentWidth + padding * 2;\n const innerWidth = width;\n\n const result: string[] = [];\n\n // Top border with optional title\n if (options.title) {\n const titleText = ` ${options.title} `;\n const leftPad = Math.floor((innerWidth - titleText.length) / 2);\n const rightPad = innerWidth - leftPad - titleText.length;\n result.push(\n borderColor(box.topLeft) +\n borderColor(box.horizontal.repeat(leftPad)) +\n colors.boldWhite(titleText) +\n borderColor(box.horizontal.repeat(rightPad)) +\n borderColor(box.topRight)\n );\n } else {\n result.push(\n borderColor(box.topLeft) +\n borderColor(box.horizontal.repeat(innerWidth)) +\n borderColor(box.topRight)\n );\n }\n\n // Content lines with padding\n const paddingStr = ' '.repeat(padding);\n for (const line of lines) {\n const strippedLen = stripAnsi(line).length;\n const rightPadding = Math.max(0, innerWidth - strippedLen - padding * 2);\n result.push(\n borderColor(box.vertical) +\n paddingStr +\n line +\n ' '.repeat(rightPadding) +\n paddingStr +\n borderColor(box.vertical)\n );\n }\n\n // Bottom border\n result.push(\n borderColor(box.bottomLeft) +\n borderColor(box.horizontal.repeat(innerWidth)) +\n borderColor(box.bottomRight)\n );\n\n return result.join('\\n');\n}\n\n/**\n * Print a section header\n */\nexport function printHeader(title: string, icon?: string): void {\n const prefix = icon ? `${icon} ` : '';\n console.log('');\n console.log(colors.boldCyan(`${prefix}${title}`));\n console.log(colors.cyan(box.horizontal.repeat(stripAnsi(title).length + (icon ? 2 : 0))));\n}\n\n/**\n * Print a success message\n */\nexport function printSuccess(message: string): void {\n console.log(`${colors.green(icons.success)} ${message}`);\n}\n\n/**\n * Print an error message\n */\nexport function printError(message: string): void {\n console.log(`${colors.red(icons.error)} ${message}`);\n}\n\n/**\n * Print a warning message\n */\nexport function printWarning(message: string): void {\n console.log(`${colors.yellow(icons.warning)} ${message}`);\n}\n\n/**\n * Print an info message\n */\nexport function printInfo(message: string): void {\n console.log(`${colors.blue(icons.info)} ${message}`);\n}\n\n/**\n * Print a list with bullets\n */\nexport function printList(items: string[], color: (text: string) => string = colors.cyan): void {\n for (const item of items) {\n console.log(` ${color(icons.bullet)} ${item}`);\n }\n}\n\n/**\n * Print a step indicator (e.g., \"[1/5] Processing...\")\n */\nexport function printStep(current: number, total: number, message: string): void {\n const step = colors.gray(`[${current}/${total}]`);\n console.log(`${step} ${message}`);\n}\n\n/**\n * Print a progress bar\n */\nexport function printProgressBar(\n current: number,\n total: number,\n width: number = 30,\n showPercent: boolean = true\n): void {\n const percent = Math.round((current / total) * 100);\n const filled = Math.round((current / total) * width);\n const empty = width - filled;\n\n const bar = colors.green('ā–ˆ'.repeat(filled)) + colors.gray('ā–‘'.repeat(empty));\n const percentStr = showPercent ? ` ${percent}%` : '';\n\n process.stdout.write(`\\r[${bar}]${percentStr}`);\n}\n\n/**\n * Create a menu option string\n */\nexport function menuOption(key: string, label: string, description?: string): string {\n const keyPart = colors.boldCyan(`[${key}]`);\n const labelPart = colors.white(label);\n const descPart = description ? colors.gray(` - ${description}`) : '';\n return ` ${keyPart} ${labelPart}${descPart}`;\n}\n\n/**\n * Print the CLI banner\n */\nexport function printBanner(): void {\n const banner = `\n${colors.boldCyan('╭───────────────────────────────────────────────────╮')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā•ā•ā• ā•šā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā–ˆā–ˆā•— ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā–ˆā–ˆā•”ā•ā–ˆā–ˆā•— ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā•šā•ā•ā•ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā–ˆā–ˆā•‘ ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā• ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')}${colors.brightMagenta(' ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•ā•ā•ā• ā•šā•ā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā•ā•ā•ā•ā• ')}${colors.boldCyan('│')}\n${colors.boldCyan('│')} ${colors.boldCyan('│')}\n${colors.boldCyan('│')} ${colors.gray('Knowledge Base Tools')} ${colors.dim('v0.1.0')} ${colors.boldCyan('│')}\n${colors.boldCyan('╰───────────────────────────────────────────────────╯')}\n`;\n console.log(banner);\n}\n\n/**\n * Divider line\n */\nexport function divider(width: number = 50): void {\n console.log(colors.gray(box.horizontal.repeat(width)));\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Ingest Library Adapter\n *\n * Provides the core ingestion logic for the CLI.\n * This can import from workspace dependencies or include standalone logic.\n */\n\nimport { Pinecone } from '@pinecone-database/pinecone';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { parse } from 'csv-parse/sync';\nimport {\n printStep,\n printSuccess,\n printWarning,\n printInfo,\n Spinner,\n colors,\n} from '../utils/colors.js';\n\nexport type OutputMode = 'pinecone' | 'local' | 'both';\n\nexport interface IngestDataOptions {\n outputMode: OutputMode;\n localOutputDir?: string;\n dryRun?: boolean;\n verbose?: boolean;\n dataDir: string;\n}\n\ninterface CSVRow {\n [key: string]: string;\n}\n\ninterface ProcessedRecord {\n filename: string;\n markdown: string;\n metadata: Record<string, unknown>;\n}\n\n/**\n * Main data ingestion function\n */\nexport async function ingestData(options: IngestDataOptions): Promise<void> {\n const { outputMode, localOutputDir, dryRun, verbose, dataDir } = options;\n\n // Find CSV files\n const csvFiles = fs.readdirSync(dataDir).filter((f) => f.endsWith('.csv'));\n\n if (csvFiles.length === 0) {\n printWarning('No CSV files found.');\n return;\n }\n\n printInfo(`Found ${csvFiles.length} CSV file(s) to process.`);\n\n let pinecone: Pinecone | null = null;\n if ((outputMode === 'pinecone' || outputMode === 'both') && !dryRun) {\n pinecone = new Pinecone({\n apiKey: process.env.PINECONE_API_KEY!,\n });\n }\n\n for (let i = 0; i < csvFiles.length; i++) {\n const csvFile = csvFiles[i];\n const csvPath = path.join(dataDir, csvFile);\n \n printStep(i + 1, csvFiles.length, `Processing ${csvFile}...`);\n\n const records = await processCSV(csvPath);\n \n if (verbose) {\n printInfo(` Processed ${records.length} records`);\n }\n\n // Write to local if needed\n if (outputMode === 'local' || outputMode === 'both') {\n const outputDir = localOutputDir || path.join(dataDir, 'ingested');\n const kbName = path.basename(csvFile, '.csv').toLowerCase().replace(/\\s+/g, '_');\n \n await writeLocalFiles(records, outputDir, kbName, dryRun);\n }\n\n // Upload to Pinecone if needed\n if ((outputMode === 'pinecone' || outputMode === 'both') && pinecone && !dryRun) {\n const assistantName = deriveAssistantName(csvFile);\n await uploadToPinecone(pinecone, records, assistantName);\n }\n }\n}\n\n/**\n * Process a CSV file into records\n */\nasync function processCSV(csvPath: string): Promise<ProcessedRecord[]> {\n const content = fs.readFileSync(csvPath, 'utf-8');\n const rows: CSVRow[] = parse(content, {\n columns: true,\n skip_empty_lines: true,\n });\n\n const records: ProcessedRecord[] = [];\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const markdown = rowToMarkdown(row, i + 1);\n const metadata = extractMetadata(row, i + 1);\n const filename = `row_${String(i + 1).padStart(4, '0')}.md`;\n\n records.push({ filename, markdown, metadata });\n }\n\n return records;\n}\n\n/**\n * Convert a CSV row to markdown format\n */\nfunction rowToMarkdown(row: CSVRow, rowNum: number): string {\n const lines: string[] = [];\n \n // Add a title if there's a question or title field\n const title = row.Question || row.Title || row.Name || `Record ${rowNum}`;\n lines.push(`# ${title}\\n`);\n\n // Add all fields as sections\n for (const [key, value] of Object.entries(row)) {\n if (value && key !== 'Question' && key !== 'Title' && key !== 'Name') {\n lines.push(`## ${key}\\n`);\n lines.push(`${value}\\n`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Extract metadata from a CSV row\n */\nfunction extractMetadata(row: CSVRow, rowNum: number): Record<string, unknown> {\n return {\n row_id: rowNum,\n ...row,\n };\n}\n\n/**\n * Write records to local markdown files\n */\nasync function writeLocalFiles(\n records: ProcessedRecord[],\n outputDir: string,\n kbName: string,\n dryRun?: boolean\n): Promise<void> {\n const kbDir = path.join(outputDir, kbName, 'documents');\n const metaDir = path.join(outputDir, kbName, 'metadata');\n\n if (!dryRun) {\n fs.mkdirSync(kbDir, { recursive: true });\n fs.mkdirSync(metaDir, { recursive: true });\n }\n\n for (const record of records) {\n if (!dryRun) {\n fs.writeFileSync(path.join(kbDir, record.filename), record.markdown);\n fs.writeFileSync(\n path.join(metaDir, record.filename.replace('.md', '.json')),\n JSON.stringify(record.metadata, null, 2)\n );\n }\n }\n\n // Write index file\n if (!dryRun) {\n const indexPath = path.join(outputDir, kbName, 'index.json');\n fs.writeFileSync(\n indexPath,\n JSON.stringify(\n {\n name: kbName,\n recordCount: records.length,\n createdAt: new Date().toISOString(),\n },\n null,\n 2\n )\n );\n }\n\n printSuccess(` Written ${records.length} files to ${kbDir}`);\n}\n\n/**\n * Upload records to Pinecone assistant\n */\nasync function uploadToPinecone(\n pinecone: Pinecone,\n records: ProcessedRecord[],\n assistantName: string\n): Promise<void> {\n const spinner = new Spinner(` Uploading to Pinecone assistant: ${assistantName}`, colors.blue);\n spinner.start();\n\n try {\n // Get or create assistant\n let assistant;\n try {\n assistant = pinecone.assistant(assistantName);\n } catch {\n // Assistant doesn't exist, create it\n assistant = await pinecone.createAssistant({\n name: assistantName,\n instructions: `You are a helpful assistant for ${assistantName}.`,\n });\n }\n\n // Upload files\n for (const record of records) {\n const blob = new Blob([record.markdown], { type: 'text/markdown' });\n const file = new File([blob], record.filename, { type: 'text/markdown' });\n \n await assistant.uploadFile(file, {\n metadata: record.metadata,\n });\n }\n\n spinner.succeed(` Uploaded ${records.length} files to ${assistantName}`);\n } catch (error) {\n spinner.fail(` Failed to upload to ${assistantName}`);\n throw error;\n }\n}\n\n/**\n * Derive assistant name from CSV filename\n */\nfunction deriveAssistantName(csvFile: string): string {\n return path\n .basename(csvFile, '.csv')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '');\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Compose Library Adapter\n *\n * Builds KB manifests with AI assistance.\n */\n\nimport { generateObject } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { z } from 'zod';\nimport { resolveDefaultOpenAiChatModelId } from '@kat/core';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { parse } from 'csv-parse/sync';\nimport { printInfo, printStep, colors } from '../utils/colors.js';\nimport { findManifestsDir, findDataDir } from '../utils/config.js';\n\nexport type StorageMode = 'local' | 'pinecone' | 'both';\n\nexport interface BuildCompositionOptions {\n kbId: string;\n domain: string;\n description: string;\n assistantName: string;\n sourcePath?: string;\n storageMode: StorageMode;\n dryRun?: boolean;\n}\n\nexport interface BuildCompositionResult {\n manifest: KBManifest;\n saved: boolean;\n savedToLocal?: boolean;\n savedToPinecone?: boolean;\n outputPath?: string;\n}\n\n// Manifest schema\nconst SlotDefinitionSchema = z.object({\n name: z.string(),\n type: z.enum(['string', 'boolean', 'enum']),\n description: z.string(),\n prompt: z.string().optional(),\n examples: z.array(z.string()).optional(),\n enumValues: z.array(z.string()).optional(),\n});\n\nconst KBManifestSchema = z.object({\n id: z.string(),\n assistantName: z.string(),\n domain: z.string(),\n description: z.string(),\n capabilities: z.array(z.string()),\n inputs: z.array(\n z.object({\n slot: z.string(),\n required: z.boolean().optional(),\n description: z.string().optional(),\n })\n ),\n outputs: z.array(z.string()),\n slots: z.array(SlotDefinitionSchema),\n relevance: z\n .object({\n goalKeywords: z.array(z.string()).optional(),\n slotTriggers: z.array(z.string()).optional(),\n domains: z.array(z.string()).optional(),\n })\n .optional(),\n});\n\ntype KBManifest = z.infer<typeof KBManifestSchema>;\n\n/**\n * Build a KB composition manifest\n */\nexport async function buildComposition(options: BuildCompositionOptions): Promise<BuildCompositionResult> {\n const { kbId, domain, description, assistantName, sourcePath, storageMode, dryRun } = options;\n\n // Read source data if provided\n let sourceDataSample = '';\n if (sourcePath) {\n const resolvedPath = resolveSourcePath(sourcePath);\n if (resolvedPath) {\n sourceDataSample = await extractDataSample(resolvedPath);\n printInfo(`Extracted sample from ${resolvedPath}`);\n }\n }\n\n printStep(1, 3, 'Generating manifest with AI...');\n\n // Generate manifest using AI\n const manifest = await generateManifest({\n kbId,\n domain,\n description,\n assistantName,\n sourceDataSample,\n });\n\n printStep(2, 3, 'Manifest generated');\n\n // Display preview\n console.log('\\n' + colors.boldWhite('Generated Manifest:'));\n console.log(colors.gray(JSON.stringify(manifest, null, 2)));\n\n if (dryRun) {\n return { manifest, saved: false };\n }\n\n printStep(3, 3, 'Saving manifest...');\n\n // Save manifest\n let savedToLocal = false;\n let savedToPinecone = false;\n let outputPath: string | undefined;\n\n if (storageMode === 'local' || storageMode === 'both') {\n outputPath = await saveManifestLocally(manifest);\n savedToLocal = true;\n }\n\n if (storageMode === 'pinecone' || storageMode === 'both') {\n await saveManifestToPinecone(manifest);\n savedToPinecone = true;\n }\n\n return {\n manifest,\n saved: true,\n savedToLocal,\n savedToPinecone,\n outputPath,\n };\n}\n\n/**\n * Generate manifest using AI\n */\nasync function generateManifest(params: {\n kbId: string;\n domain: string;\n description: string;\n assistantName: string;\n sourceDataSample: string;\n}): Promise<KBManifest> {\n const { kbId, domain, description, assistantName, sourceDataSample } = params;\n\n const prompt = `Generate a KB manifest for a knowledge base with the following details:\n\nKB ID: ${kbId}\nDomain: ${domain || 'general'}\nDescription: ${description || 'A knowledge base'}\nAssistant Name: ${assistantName}\n\n${sourceDataSample ? `Sample data from the source:\\n${sourceDataSample}\\n` : ''}\n\nCreate a comprehensive manifest that defines:\n1. What capabilities this KB provides\n2. What input slots it needs (variables like product_type, issue_description, etc.)\n3. What outputs it provides\n4. Slot definitions with descriptions, types, and example values\n5. Relevance hints (keywords that indicate this KB should be used)\n\nThe manifest should be practical and help route user queries to this KB when appropriate.`;\n\n const { object } = await generateObject({\n model: openai(resolveDefaultOpenAiChatModelId()),\n schema: KBManifestSchema,\n prompt,\n });\n\n return object;\n}\n\n/**\n * Resolve source path\n */\nfunction resolveSourcePath(sourcePath: string): string | null {\n if (path.isAbsolute(sourcePath) && fs.existsSync(sourcePath)) {\n return sourcePath;\n }\n\n const dataDir = findDataDir();\n if (dataDir) {\n const fullPath = path.join(dataDir, sourcePath);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n const cwdPath = path.join(process.cwd(), sourcePath);\n if (fs.existsSync(cwdPath)) {\n return cwdPath;\n }\n\n return null;\n}\n\n/**\n * Extract a sample from source data\n */\nasync function extractDataSample(sourcePath: string): Promise<string> {\n const content = fs.readFileSync(sourcePath, 'utf-8');\n\n if (sourcePath.endsWith('.csv')) {\n const rows = parse(content, {\n columns: true,\n skip_empty_lines: true,\n });\n\n // Take first 5 rows as sample\n const sample = rows.slice(0, 5);\n return JSON.stringify(sample, null, 2);\n }\n\n // For other formats, take first 2000 characters\n return content.slice(0, 2000);\n}\n\n/**\n * Save manifest to local file\n */\nasync function saveManifestLocally(manifest: KBManifest): Promise<string> {\n const manifestsDir = findManifestsDir() || path.join(process.cwd(), 'composition', 'manifests');\n \n fs.mkdirSync(manifestsDir, { recursive: true });\n \n const outputPath = path.join(manifestsDir, `${manifest.id}.json`);\n fs.writeFileSync(outputPath, JSON.stringify(manifest, null, 2));\n \n return outputPath;\n}\n\n/**\n * Save manifest to Pinecone assistant metadata\n */\nasync function saveManifestToPinecone(manifest: KBManifest): Promise<void> {\n const { Pinecone } = await import('@pinecone-database/pinecone');\n \n const pinecone = new Pinecone({\n apiKey: process.env.PINECONE_API_KEY!,\n });\n\n // Update assistant metadata with manifest\n await pinecone.configureAssistant(manifest.assistantName, {\n metadata: {\n kbManifest: JSON.stringify(manifest),\n },\n });\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Introspect Library\n *\n * Uses the core progressive introspection engine to generate manifests\n * from Pinecone assistants.\n */\n\nimport { Pinecone } from '@pinecone-database/pinecone';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n progressiveIntrospect,\n DEFAULT_PROGRESSIVE_CONFIG,\n type IntrospectionCallbacks,\n type UsageSummary,\n type PhaseUsage,\n} from '@kat/core';\nimport { printStep, printWarning, printHeader, colors, icons, Spinner } from '../utils/colors.js';\nimport { findManifestsDir } from '../utils/config.js';\n\nexport type StorageMode = 'local' | 'pinecone' | 'both';\n\nexport interface IntrospectOptions {\n assistantName: string;\n kbId: string;\n domain?: string;\n storageMode: StorageMode;\n dryRun?: boolean;\n verbose?: boolean;\n /** Progressive introspection config overrides */\n maxDepth?: number;\n maxQuestions?: number;\n maxBranch?: number;\n maxRetries?: number;\n /** OpenAI model id (see env KBS_INTROSPECTION_MODEL) */\n llmModel?: string;\n}\n\nexport interface IntrospectResult {\n manifest: unknown;\n saved: boolean;\n savedToLocal?: boolean;\n savedToPinecone?: boolean;\n wouldSaveToLocal?: boolean;\n wouldSaveToPinecone?: boolean;\n outputPath?: string;\n stats?: {\n questionsAsked: number;\n categoriesDiscovered: number;\n entitiesDiscovered: number;\n sourceFilesFound: number;\n };\n}\n\n/**\n * Introspect a Pinecone assistant using progressive introspection\n */\nexport async function introspectAssistant(options: IntrospectOptions): Promise<IntrospectResult> {\n const { assistantName, kbId, domain, storageMode, dryRun, verbose } = options;\n\n printHeader('Progressive Introspection', icons.search);\n console.log(`${colors.cyan(icons.bullet)} Assistant: ${colors.white(assistantName)}`);\n console.log(`${colors.cyan(icons.bullet)} KB ID: ${colors.white(kbId)}`);\n if (domain) {\n console.log(`${colors.cyan(icons.bullet)} Domain: ${colors.white(domain)}`);\n }\n console.log('');\n\n // Build callbacks for CLI output\n const callbacks = buildCLICallbacks(verbose);\n\n // Build config overrides\n const configOverrides: Partial<typeof DEFAULT_PROGRESSIVE_CONFIG> = {};\n if (options.maxDepth !== undefined) configOverrides.maxDepth = options.maxDepth;\n if (options.maxQuestions !== undefined) configOverrides.maxTotalQuestions = options.maxQuestions;\n if (options.maxBranch !== undefined) configOverrides.maxBranchFactor = options.maxBranch;\n if (options.maxRetries !== undefined) configOverrides.maxRetries = options.maxRetries;\n if (options.llmModel !== undefined && options.llmModel.trim() !== '') {\n configOverrides.llmModel = options.llmModel.trim();\n }\n\n // Run progressive introspection\n const result = await progressiveIntrospect({\n assistantName,\n kbId,\n domain,\n config: configOverrides,\n callbacks,\n });\n\n // Print summary\n console.log('');\n printHeader('Introspection Summary', icons.check);\n console.log(`${colors.cyan(icons.bullet)} Questions asked: ${colors.white(String(result.stats.questionsAsked))}`);\n console.log(`${colors.cyan(icons.bullet)} Categories discovered: ${colors.white(String(result.stats.categoriesDiscovered))}`);\n console.log(`${colors.cyan(icons.bullet)} Entities discovered: ${colors.white(String(result.stats.entitiesDiscovered))}`);\n console.log(`${colors.cyan(icons.bullet)} Source files found: ${colors.white(String(result.stats.sourceFilesFound))}`);\n\n // Show source files\n if (result.state.sourceFiles.size > 0) {\n console.log('');\n console.log(colors.boldCyan(' Indexed Documents:'));\n for (const file of result.state.sourceFiles) {\n console.log(` ${colors.green(icons.file)} ${colors.white(file)}`);\n }\n }\n\n // Show LLM usage and cost\n if (result.stats.usage) {\n printUsageSummary(result.stats.usage);\n }\n\n // Display manifest\n console.log('');\n printHeader('Generated Manifest', icons.file);\n console.log(colors.gray(JSON.stringify(result.manifest, null, 2)));\n\n const manifestObj = result.manifest as { id: string };\n const localOutputPath =\n storageMode === 'local' || storageMode === 'both'\n ? getLocalManifestOutputPath(manifestObj.id)\n : undefined;\n\n if (dryRun) {\n return {\n manifest: result.manifest,\n saved: false,\n wouldSaveToLocal: storageMode === 'local' || storageMode === 'both',\n wouldSaveToPinecone: storageMode === 'pinecone' || storageMode === 'both',\n outputPath: localOutputPath,\n stats: result.stats,\n };\n }\n\n // Save manifest\n let savedToLocal = false;\n let savedToPinecone = false;\n let outputPath: string | undefined = localOutputPath;\n\n if (storageMode === 'local' || storageMode === 'both') {\n outputPath = await saveManifestLocally(result.manifest);\n savedToLocal = true;\n }\n\n if (storageMode === 'pinecone' || storageMode === 'both') {\n await saveManifestToPinecone(result.manifest);\n savedToPinecone = true;\n }\n\n return {\n manifest: result.manifest,\n saved: true,\n savedToLocal,\n savedToPinecone,\n outputPath,\n stats: result.stats,\n };\n}\n\n/**\n * Build CLI callbacks for progress reporting\n */\nfunction buildCLICallbacks(verbose?: boolean): IntrospectionCallbacks {\n let currentPhase = '';\n let phaseSpinner: Spinner | null = null;\n\n return {\n onPhaseStart: (phase, assistantName) => {\n if (phaseSpinner) {\n phaseSpinner.succeed(`${currentPhase} complete`);\n }\n\n const phaseLabels: Record<string, string> = {\n seed_discovery: 'Phase 1: Seed Discovery',\n entity_expansion: 'Phase 2: Entity Expansion',\n relationship_discovery: 'Phase 3: Relationship Discovery',\n abstraction_refinement: 'Phase 4: Manifest Inference',\n enum_extraction: 'Phase 5: Enum Extraction',\n manifest_generation: 'Phase 6: Manifest Synthesis',\n };\n\n currentPhase = phaseLabels[phase] || phase;\n console.log('');\n printHeader(currentPhase, icons.sparkles);\n \n if (!verbose) {\n phaseSpinner = new Spinner(`${currentPhase}...`, colors.blue);\n phaseSpinner.start();\n }\n },\n\n onPhaseProgress: (phase, message) => {\n if (verbose) {\n console.log(` ${colors.gray('↳')} ${colors.gray(message)}`);\n } else if (phaseSpinner) {\n phaseSpinner.update(message);\n }\n },\n\n onQuestion: (questionNum, totalBudget, question, objective) => {\n if (verbose) {\n console.log('');\n const objectiveLabel = objective\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase());\n printStep(questionNum, totalBudget, colors.cyan(objectiveLabel));\n console.log(` ${colors.boldWhite('Question:')} ${colors.white(question)}`);\n } else if (phaseSpinner) {\n phaseSpinner.update(`${currentPhase} (Q${questionNum}/${totalBudget})...`);\n }\n },\n\n onAnswer: (questionNum, answer) => {\n if (verbose) {\n console.log(` ${colors.green(icons.check)} ${colors.boldWhite('Answer Preview:')}`);\n for (const line of formatAnswerPreview(answer)) {\n console.log(` ${colors.white(line)}`);\n }\n console.log(` ${colors.gray(`(${answer.length} chars total)`)}`);\n }\n },\n\n onValidation: (questionNum, validation) => {\n if (verbose) {\n const classColor = validation.isValid ? colors.green : colors.yellow;\n console.log(` ${colors.gray('Validation:')} ${classColor(validation.classification)} (${(validation.confidence * 100).toFixed(0)}% confidence)`);\n if (!validation.isValid && validation.suggestedRetryStrategy) {\n console.log(` ${colors.gray('Retry strategy:')} ${colors.white(validation.suggestedRetryStrategy)}`);\n }\n if (validation.newInformation) {\n console.log(` ${colors.gray('New information:')} ${colors.white(validation.newInformation)}`);\n }\n if (validation.extractedCategories.length > 0) {\n console.log(` ${colors.gray('Categories:')} ${colors.white(validation.extractedCategories.join(', '))}`);\n }\n if (validation.extractedEntities.length > 0) {\n console.log(` ${colors.gray('Entities:')} ${colors.white(validation.extractedEntities.slice(0, 5).join(', '))}${validation.extractedEntities.length > 5 ? '...' : ''}`);\n }\n }\n },\n\n onDiscovery: (categories, entities, sourceFiles) => {\n if (verbose) {\n console.log(\n ` ${colors.gray('Discovery:')} ${colors.white(`${categories} categories, ${entities} entities, ${sourceFiles} source files`)}`\n );\n } else if (phaseSpinner) {\n phaseSpinner.update(`${currentPhase} (${categories} categories, ${entities} entities)...`);\n }\n },\n\n onManifestStep: (step, totalSteps, description) => {\n if (verbose) {\n printStep(step, totalSteps, description);\n } else if (phaseSpinner) {\n phaseSpinner.update(`Generating manifest (${step}/${totalSteps})...`);\n }\n },\n\n onError: (assistantName, error) => {\n if (phaseSpinner) {\n phaseSpinner.fail(`Error: ${error}`);\n phaseSpinner = null;\n }\n printWarning(`Error for ${assistantName}: ${error}`);\n },\n\n onComplete: (assistantName, manifest) => {\n if (phaseSpinner) {\n phaseSpinner.succeed('Manifest generation complete');\n phaseSpinner = null;\n }\n },\n };\n}\n\n/**\n * Produce a readable multiline answer preview for verbose mode.\n */\nfunction formatAnswerPreview(answer: string, maxLines: number = 8, maxChars: number = 1200): string[] {\n const cleaned = answer.trim();\n if (!cleaned) {\n return ['(empty response)'];\n }\n\n const lines = cleaned\n .split(/\\r?\\n/)\n .map(line => line.trim())\n .filter(Boolean);\n\n const previewLines: string[] = [];\n let consumed = 0;\n\n for (const line of lines) {\n if (previewLines.length >= maxLines || consumed >= maxChars) {\n break;\n }\n\n const remaining = maxChars - consumed;\n if (line.length <= remaining) {\n previewLines.push(line);\n consumed += line.length;\n continue;\n }\n\n const clipped = `${line.slice(0, Math.max(0, remaining - 1)).trimEnd()}…`;\n previewLines.push(clipped);\n consumed = maxChars;\n break;\n }\n\n if (lines.length > previewLines.length || cleaned.length > maxChars) {\n previewLines.push('…');\n }\n\n return previewLines;\n}\n\n/**\n * Format a dollar amount for display\n */\nfunction formatCost(cost: number): string {\n if (cost < 0.01) {\n return `$${cost.toFixed(4)}`;\n }\n return `$${cost.toFixed(2)}`;\n}\n\n/**\n * Format a token count with commas\n */\nfunction formatTokens(count: number): string {\n return count.toLocaleString();\n}\n\n/**\n * Display a formatted LLM usage and cost summary\n */\nfunction printUsageSummary(usage: UsageSummary): void {\n console.log('');\n printHeader('LLM Usage Summary', icons.sparkles);\n\n console.log(`${colors.cyan(icons.bullet)} Total cost: ${colors.white(formatCost(usage.totalCost))}`);\n console.log(`${colors.cyan(icons.bullet)} Total tokens: ${colors.white(formatTokens(usage.totalTokens.totalTokens))} (${formatTokens(usage.totalTokens.promptTokens)} in / ${formatTokens(usage.totalTokens.completionTokens)} out)`);\n console.log(`${colors.cyan(icons.bullet)} Total LLM calls: ${colors.white(String(usage.entries.length))}`);\n\n // By provider\n const providers = Object.entries(usage.byProvider) as [string, PhaseUsage][];\n if (providers.length > 0) {\n console.log('');\n console.log(colors.boldCyan(' By Provider:'));\n for (const [provider, data] of providers) {\n const costStr = data.cost > 0 ? ` (${formatCost(data.cost)})` : '';\n console.log(` ${colors.gray(provider + ':')} ${colors.white(formatTokens(data.tokens.totalTokens))} tokens${costStr} [${data.calls} calls]`);\n }\n }\n\n // By phase\n const phases = Object.entries(usage.byPhase) as [string, PhaseUsage][];\n if (phases.length > 0) {\n const phaseLabels: Record<string, string> = {\n seed_discovery: 'Seed Discovery',\n entity_expansion: 'Entity Expansion',\n relationship_discovery: 'Relationship Discovery',\n manifest_inference: 'Manifest Inference',\n manifest_generation: 'Manifest Generation',\n };\n\n console.log('');\n console.log(colors.boldCyan(' By Phase:'));\n for (const [phase, data] of phases) {\n const label = phaseLabels[phase] || phase;\n const costStr = data.cost > 0 ? formatCost(data.cost) : '$0.00';\n console.log(` ${colors.gray(label + ':')} ${colors.white(costStr)} (${data.calls} calls, ${formatTokens(data.tokens.totalTokens)} tokens)`);\n }\n }\n}\n\n/**\n * Save manifest to local file\n */\nasync function saveManifestLocally(manifest: unknown): Promise<string> {\n const manifestObj = manifest as { id: string };\n const outputPath = getLocalManifestOutputPath(manifestObj.id);\n\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, JSON.stringify(manifest, null, 2));\n \n return outputPath;\n}\n\n/**\n * Resolve the canonical local manifest output path.\n */\nfunction getLocalManifestOutputPath(manifestId: string): string {\n const manifestsDir = findManifestsDir() || path.join(process.cwd(), 'composition', 'manifests');\n return path.join(manifestsDir, `${manifestId}.json`);\n}\n\n/**\n * Save manifest to Pinecone assistant metadata\n */\nasync function saveManifestToPinecone(manifest: unknown): Promise<void> {\n const pinecone = new Pinecone({\n apiKey: process.env.PINECONE_API_KEY!,\n });\n\n const manifestObj = manifest as { assistantName: string };\n await pinecone.configureAssistant(manifestObj.assistantName, {\n metadata: {\n kbManifest: JSON.stringify(manifest),\n },\n });\n}\n","/**\n * Validate Library Adapter\n *\n * Validates CSV data against KB definitions.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { parse } from 'csv-parse/sync';\nimport { findDataDir } from '../utils/config.js';\n\nexport interface ValidationResult {\n name: string;\n valid: boolean;\n records: number;\n issues: string[];\n}\n\nexport interface ValidationSummary {\n results: ValidationResult[];\n allValid: boolean;\n}\n\nexport interface ValidateOptions {\n path?: string;\n}\n\ninterface CSVRow {\n [key: string]: string;\n}\n\n/**\n * Main validation function\n */\nexport async function validateData(options: ValidateOptions = {}): Promise<ValidationSummary> {\n const dataDir = options.path || findDataDir();\n const results: ValidationResult[] = [];\n\n if (!dataDir || !fs.existsSync(dataDir)) {\n return {\n results: [\n {\n name: 'Data Directory',\n valid: false,\n records: 0,\n issues: [`Data directory not found: ${dataDir || 'unknown'}`],\n },\n ],\n allValid: false,\n };\n }\n\n // Find CSV files\n const csvFiles = fs.readdirSync(dataDir).filter((f) => f.endsWith('.csv'));\n\n for (const csvFile of csvFiles) {\n const csvPath = path.join(dataDir, csvFile);\n const result = validateCSV(csvPath, csvFile);\n results.push(result);\n }\n\n const allValid = results.every((r) => r.valid);\n\n return { results, allValid };\n}\n\n/**\n * Validate a single CSV file\n */\nfunction validateCSV(csvPath: string, filename: string): ValidationResult {\n const issues: string[] = [];\n let records = 0;\n\n try {\n const content = fs.readFileSync(csvPath, 'utf-8');\n const rows: CSVRow[] = parse(content, {\n columns: true,\n skip_empty_lines: true,\n });\n\n records = rows.length;\n\n if (records === 0) {\n issues.push('CSV file is empty');\n }\n\n // Get headers\n const headers = Object.keys(rows[0] || {});\n\n if (headers.length === 0) {\n issues.push('CSV file has no columns');\n }\n\n // Check for common required columns\n const recommendedColumns = ['Question', 'Answer', 'Category', 'Title', 'Description'];\n const hasRecommended = recommendedColumns.some((col) =>\n headers.some((h) => h.toLowerCase() === col.toLowerCase())\n );\n\n if (!hasRecommended) {\n issues.push(\n `CSV has no standard columns. Found: ${headers.join(', ')}. ` +\n `Consider adding: ${recommendedColumns.join(', ')}`\n );\n }\n\n // Check for empty values in important columns\n const emptyCheck: Record<string, number> = {};\n for (const row of rows) {\n for (const [key, value] of Object.entries(row)) {\n if (!value || value.trim() === '') {\n emptyCheck[key] = (emptyCheck[key] || 0) + 1;\n }\n }\n }\n\n for (const [col, count] of Object.entries(emptyCheck)) {\n if (count > records * 0.1) {\n // More than 10% empty\n issues.push(`Column \"${col}\" has ${count}/${records} empty values`);\n }\n }\n\n // Check for very long content that might cause issues\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n for (const [key, value] of Object.entries(row)) {\n if (value && value.length > 50000) {\n issues.push(`Row ${i + 1}, column \"${key}\" has very long content (${value.length} chars)`);\n }\n }\n }\n } catch (error) {\n issues.push(`Failed to parse CSV: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return {\n name: filename,\n valid: issues.length === 0,\n records,\n issues,\n };\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Topics Library Adapter\n *\n * Tests topic extraction on files.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { generateText } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { resolveDefaultOpenAiChatModelId } from '@kat/core';\nimport { colors, divider } from '../utils/colors.js';\n\n// Classic TF-IDF implementation using natural\nimport natural from 'natural';\n\nexport type TopicMode = 'classic' | 'slm' | 'hybrid';\n\nexport interface TestTopicsOptions {\n paths: string[];\n mode?: TopicMode;\n topN: number;\n verbose?: boolean;\n json?: boolean;\n}\n\ninterface TopicResult {\n file: string;\n topics: string[];\n method: TopicMode;\n preview?: string;\n}\n\n/**\n * Test topic extraction on files\n */\nexport async function testTopics(options: TestTopicsOptions): Promise<void> {\n const { paths, mode = 'classic', topN, verbose, json } = options;\n\n const results: TopicResult[] = [];\n\n for (const inputPath of paths) {\n const resolvedPath = path.resolve(inputPath);\n \n if (!fs.existsSync(resolvedPath)) {\n console.log(colors.red(`Path not found: ${resolvedPath}`));\n continue;\n }\n\n const stat = fs.statSync(resolvedPath);\n \n if (stat.isDirectory()) {\n // Process all files in directory\n const files = fs.readdirSync(resolvedPath);\n for (const file of files) {\n const filePath = path.join(resolvedPath, file);\n if (fs.statSync(filePath).isFile()) {\n const result = await processFile(filePath, mode, topN, verbose);\n results.push(result);\n }\n }\n } else {\n const result = await processFile(resolvedPath, mode, topN, verbose);\n results.push(result);\n }\n }\n\n // Output results\n if (json) {\n console.log(JSON.stringify(results, null, 2));\n } else {\n printResults(results, verbose);\n }\n}\n\n/**\n * Process a single file for topic extraction\n */\nasync function processFile(\n filePath: string,\n mode: TopicMode,\n topN: number,\n verbose?: boolean\n): Promise<TopicResult> {\n const content = fs.readFileSync(filePath, 'utf-8');\n const preview = verbose ? content.slice(0, 200) + '...' : undefined;\n\n let topics: string[];\n\n switch (mode) {\n case 'classic':\n topics = extractTopicsClassic(content, topN);\n break;\n case 'slm':\n topics = await extractTopicsSLM(content, topN);\n break;\n case 'hybrid':\n const classicTopics = extractTopicsClassic(content, topN);\n const slmTopics = await extractTopicsSLM(content, topN);\n // Combine and deduplicate\n topics = [...new Set([...classicTopics, ...slmTopics])].slice(0, topN);\n break;\n default:\n topics = extractTopicsClassic(content, topN);\n }\n\n return {\n file: path.basename(filePath),\n topics,\n method: mode,\n preview,\n };\n}\n\n/**\n * Extract topics using TF-IDF (classic method)\n */\nfunction extractTopicsClassic(content: string, topN: number): string[] {\n const TfIdf = natural.TfIdf;\n const tfidf = new TfIdf();\n\n // Add document\n tfidf.addDocument(content);\n\n // Get terms with scores\n const terms: { term: string; score: number }[] = [];\n \n tfidf.listTerms(0).forEach((item: { term: string; tfidf: number }) => {\n // Filter out very short words and common stopwords\n if (item.term.length > 2 && !isStopword(item.term)) {\n terms.push({ term: item.term, score: item.tfidf });\n }\n });\n\n // Sort by score and take top N\n terms.sort((a, b) => b.score - a.score);\n \n return terms.slice(0, topN).map((t) => t.term);\n}\n\n/**\n * Extract topics using LLM (SLM method)\n */\nasync function extractTopicsSLM(content: string, topN: number): Promise<string[]> {\n const truncatedContent = content.slice(0, 4000);\n\n const { text } = await generateText({\n model: openai(resolveDefaultOpenAiChatModelId()),\n prompt: `Extract the top ${topN} most important topics from the following document. \nReturn only the topics as a comma-separated list, without any additional text or explanation.\n\nDocument:\n${truncatedContent}`,\n });\n\n return text\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n .slice(0, topN);\n}\n\n/**\n * Check if a word is a common stopword\n */\nfunction isStopword(word: string): boolean {\n const stopwords = new Set([\n 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',\n 'of', 'with', 'by', 'from', 'is', 'are', 'was', 'were', 'be', 'been',\n 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would',\n 'could', 'should', 'may', 'might', 'must', 'shall', 'can', 'this',\n 'that', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they',\n 'what', 'which', 'who', 'when', 'where', 'why', 'how', 'all', 'each',\n 'every', 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'no',\n 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just',\n ]);\n return stopwords.has(word.toLowerCase());\n}\n\n/**\n * Print results in a formatted way\n */\nfunction printResults(results: TopicResult[], verbose?: boolean): void {\n for (const result of results) {\n divider();\n console.log(colors.boldWhite(result.file));\n console.log(colors.gray(`Method: ${result.method}`));\n \n if (verbose && result.preview) {\n console.log(colors.gray('\\nPreview:'));\n console.log(colors.dim(result.preview));\n }\n \n console.log(colors.cyan('\\nTopics:'));\n for (const topic of result.topics) {\n console.log(` ${colors.green('•')} ${topic}`);\n }\n }\n divider();\n}\n\n","/**\n * Sync Library Adapter\n *\n * Syncs manifests between local files and Pinecone.\n */\n\nimport { Pinecone } from '@pinecone-database/pinecone';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { findManifestsDir } from '../utils/config.js';\nimport { printInfo, printStep } from '../utils/colors.js';\n\nexport type SyncDirection = 'toLocal' | 'toPinecone' | 'both';\n\nexport interface ManifestInfo {\n id: string;\n assistantName: string;\n source: 'local' | 'pinecone';\n}\n\nexport interface ListManifestsResult {\n local: ManifestInfo[];\n pinecone: ManifestInfo[];\n}\n\nexport interface SyncResult {\n synced: number;\n errors: string[];\n}\n\nexport interface SyncOptions {\n dryRun?: boolean;\n}\n\n/**\n * List all available manifests from local and Pinecone\n */\nexport async function listManifests(): Promise<ListManifestsResult> {\n const local: ManifestInfo[] = [];\n const pinecone: ManifestInfo[] = [];\n\n // List local manifests\n const manifestsDir = findManifestsDir();\n if (manifestsDir && fs.existsSync(manifestsDir)) {\n const files = fs.readdirSync(manifestsDir).filter((f) => f.endsWith('.json'));\n \n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(manifestsDir, file), 'utf-8');\n const manifest = JSON.parse(content);\n local.push({\n id: manifest.id || path.basename(file, '.json'),\n assistantName: manifest.assistantName || '',\n source: 'local',\n });\n } catch {\n // Skip invalid files\n }\n }\n }\n\n // List Pinecone assistants with manifests\n try {\n const pc = new Pinecone({\n apiKey: process.env.PINECONE_API_KEY!,\n });\n\n const assistants = await pc.listAssistants();\n \n for (const assistant of assistants.assistants || []) {\n // Check if assistant has manifest in metadata\n try {\n const details = await pc.describeAssistant(assistant.name);\n if (details.metadata?.kbManifest) {\n const manifest = JSON.parse(details.metadata.kbManifest as string);\n pinecone.push({\n id: manifest.id || assistant.name,\n assistantName: assistant.name,\n source: 'pinecone',\n });\n }\n } catch {\n // Skip assistants without manifest metadata\n }\n }\n } catch (error) {\n // Pinecone might not be configured\n printInfo('Could not list Pinecone assistants');\n }\n\n return { local, pinecone };\n}\n\n/**\n * Sync manifests in the specified direction\n */\nexport async function syncManifests(\n direction: SyncDirection,\n options: SyncOptions = {}\n): Promise<SyncResult> {\n const { dryRun } = options;\n const errors: string[] = [];\n let synced = 0;\n\n const pc = new Pinecone({\n apiKey: process.env.PINECONE_API_KEY!,\n });\n\n const manifestsDir = findManifestsDir() || path.join(process.cwd(), 'composition', 'manifests');\n\n if (direction === 'toLocal' || direction === 'both') {\n // Download manifests from Pinecone to local\n printStep(1, 2, 'Downloading manifests from Pinecone...');\n \n try {\n const assistants = await pc.listAssistants();\n \n for (const assistant of assistants.assistants || []) {\n try {\n const details = await pc.describeAssistant(assistant.name);\n if (details.metadata?.kbManifest) {\n const manifest = JSON.parse(details.metadata.kbManifest as string);\n \n if (!dryRun) {\n fs.mkdirSync(manifestsDir, { recursive: true });\n const outputPath = path.join(manifestsDir, `${manifest.id || assistant.name}.json`);\n fs.writeFileSync(outputPath, JSON.stringify(manifest, null, 2));\n }\n \n synced++;\n printInfo(` ${dryRun ? 'Would sync' : 'Synced'}: ${assistant.name}`);\n }\n } catch (error) {\n errors.push(`Failed to sync ${assistant.name}: ${error}`);\n }\n }\n } catch (error) {\n errors.push(`Failed to list assistants: ${error}`);\n }\n }\n\n if (direction === 'toPinecone' || direction === 'both') {\n // Upload local manifests to Pinecone\n printStep(direction === 'both' ? 2 : 1, direction === 'both' ? 2 : 1, 'Uploading manifests to Pinecone...');\n \n if (fs.existsSync(manifestsDir)) {\n const files = fs.readdirSync(manifestsDir).filter((f) => f.endsWith('.json'));\n \n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(manifestsDir, file), 'utf-8');\n const manifest = JSON.parse(content);\n \n if (manifest.assistantName) {\n if (!dryRun) {\n await pc.configureAssistant(manifest.assistantName, {\n metadata: {\n kbManifest: JSON.stringify(manifest),\n },\n });\n }\n \n synced++;\n printInfo(` ${dryRun ? 'Would sync' : 'Synced'}: ${manifest.id}`);\n }\n } catch (error) {\n errors.push(`Failed to sync ${file}: ${error}`);\n }\n }\n }\n }\n\n return { synced, errors };\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Generate Library\n *\n * Scaffolds KAT apps with LLM-assisted configuration generation.\n */\n\nimport { generateObject } from 'ai';\nimport { openai } from '@ai-sdk/openai';\nimport { z } from 'zod';\nimport { resolveDefaultOpenAiChatModelId } from '@kat/core';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { printStep, printInfo } from '../utils/colors.js';\n\n// For ESM compatibility\nconst __dirname = import.meta.dirname || path.dirname(new URL(import.meta.url).pathname);\n\nexport type AppTemplate = 'native' | 'vercel-ai';\n\nexport interface GenerateAppOptions {\n name: string;\n description: string;\n domain: string;\n template: AppTemplate;\n outputDir: string;\n}\n\nexport interface GenerateAppResult {\n success: boolean;\n outputPath: string;\n configPath: string;\n}\n\n// Schema for agent.config.json generation\nconst GoalSchema = z.object({\n name: z.string().describe('Snake_case identifier for the goal'),\n description: z.string().describe('Human-readable description of what the user wants'),\n});\n\nconst SlotSchema = z.object({\n name: z.string().describe('Snake_case identifier for the slot'),\n type: z.string().describe('Data type of the slot: string, boolean, or number'),\n required: z.boolean().describe('Whether this slot is required'),\n description: z.string().describe('What this slot represents'),\n prompt: z.string().optional().describe('Question to ask the user to fill this slot'),\n examples: z.array(z.string()).optional().describe('Example values for this slot'),\n normalization: z.string().optional().describe('Normalization strategy'),\n});\n\nconst AgentConfigSchema = z.object({\n name: z.string().describe('Display name of the app'),\n description: z.string().describe('Full description of what the app does'),\n domain: z.string().describe('Domain category'),\n llm: z.object({\n provider: z.string().default('openai'),\n models: z.object({\n planning: z.string().default('gpt-4o-mini'),\n extraction: z.string().default('gpt-4o-mini'),\n synthesis: z.string().default('gpt-4o-mini'),\n questionGeneration: z.string().default('gpt-4o-mini'),\n }),\n }),\n prompts: z.object({\n plannerSystemRole: z.string().describe('Role description for the planner'),\n synthesisSystemRole: z.string().describe('Role description for synthesis'),\n planningInstructions: z.string().describe('Instructions for planning'),\n synthesisInstructions: z.string().describe('Instructions for answer synthesis'),\n extractionInstructions: z.string().describe('Instructions for slot extraction'),\n }),\n goals: z.array(GoalSchema).describe('Possible user intents/goals'),\n messages: z.object({\n allKBsFailed: z.string().describe('Message when KB access fails'),\n noRelevantInfo: z.string().describe('Message when no relevant info found'),\n synthesisError: z.string().describe('Message when synthesis fails'),\n }),\n slots: z.array(SlotSchema).describe('Extraction slots for user queries'),\n slotPriority: z.array(z.string()).describe('Priority order for slot filling'),\n defaultKbId: z.string().describe('Default KB to use'),\n citations: z.object({\n format: z.string().default('brackets').describe('Citation format: brackets, footnotes, or inline'),\n labelPrefix: z.string().default('S'),\n }),\n behavior: z.object({\n maxDisambiguationAttempts: z.number().default(3),\n fallbackStrategy: z.string().default('use_first').describe('Fallback strategy: use_first, ask_user, or none'),\n enablePlanModification: z.boolean().default(true),\n }),\n quickQuestions: z.array(z.string()).describe('Example questions for the UI'),\n});\n\ntype AgentConfig = z.infer<typeof AgentConfigSchema>;\n\n/**\n * Get the path to the template directory\n */\nfunction getTemplatePath(template: AppTemplate): string {\n const templateName = template === 'vercel-ai' ? 'app-vercel-ai' : 'app';\n \n // Try multiple possible locations for the template\n const possiblePaths = [\n // From packages/cli/dist (bundled)\n path.resolve(import.meta.dirname || __dirname, '..', '..', '..', 'examples', templateName),\n // From packages/cli/src/lib (source) \n path.resolve(import.meta.dirname || __dirname, '..', '..', '..', '..', 'examples', templateName),\n // From project root (when cwd is project root)\n path.resolve(process.cwd(), 'examples', templateName),\n // Up from cwd\n path.resolve(process.cwd(), '..', 'examples', templateName),\n path.resolve(process.cwd(), '..', '..', 'examples', templateName),\n ];\n \n for (const templatePath of possiblePaths) {\n if (fs.existsSync(templatePath)) {\n return templatePath;\n }\n }\n \n // Return the first path for error message\n return possiblePaths[0];\n}\n\n/**\n * Generate the agent config using LLM\n */\nasync function generateAgentConfig(options: GenerateAppOptions): Promise<AgentConfig> {\n const { name, description, domain } = options;\n\n const prompt = `Generate a complete agent configuration for a knowledge-base powered assistant app.\n\nApp Name: ${name}\nDescription: ${description} \nDomain: ${domain}\n\nCreate a JSON configuration that includes:\n1. Appropriate system prompts for the domain\n2. 4-6 realistic user goals/intents (with name and description)\n3. 5-8 extraction slots relevant to the domain\n4. Error messages appropriate for the domain\n5. 5-7 example questions users might ask\n6. Sensible default behaviors\n\nThe configuration should be practical and help the app understand and respond to user queries in the ${domain} domain.`;\n\n try {\n const { object } = await generateObject({\n model: openai(resolveDefaultOpenAiChatModelId()),\n schema: AgentConfigSchema,\n prompt,\n });\n return object;\n } catch (error) {\n // If generateObject fails, create a sensible default config\n console.error('LLM generation failed, using defaults:', error instanceof Error ? error.message : error);\n return createDefaultConfig(name, description, domain);\n }\n}\n\n/**\n * Create a default config when LLM generation fails\n */\nfunction createDefaultConfig(name: string, description: string, domain: string): AgentConfig {\n const kbId = `kb-${domain.toLowerCase().replace(/\\s+/g, '-')}`;\n const defaultModel = resolveDefaultOpenAiChatModelId();\n\n return {\n name,\n description,\n domain,\n llm: {\n provider: 'openai',\n models: {\n planning: defaultModel,\n extraction: defaultModel,\n synthesis: defaultModel,\n questionGeneration: defaultModel,\n },\n },\n prompts: {\n plannerSystemRole: `an expert ${domain} assistant`,\n synthesisSystemRole: `a knowledgeable ${domain} specialist helping users with their questions`,\n planningInstructions: `Consider the user's needs in the ${domain} domain. Look for relevant information and examples.`,\n synthesisInstructions: `Provide clear, helpful responses. Reference specific sources when available.`,\n extractionInstructions: `Identify the topic, specific issue, and any relevant context from the user's query.`,\n },\n goals: [\n { name: 'get_information', description: 'User wants to learn about a topic' },\n { name: 'solve_problem', description: 'User needs help solving a specific issue' },\n { name: 'find_resource', description: 'User is looking for a specific resource or reference' },\n { name: 'compare_options', description: 'User wants to compare different options or approaches' },\n ],\n messages: {\n allKBsFailed: `I apologize, but I encountered an issue accessing the information needed to answer your question. Please try again or rephrase your question.`,\n noRelevantInfo: `I couldn't find specific information about that topic in the available knowledge base. Could you rephrase your question or provide more context?`,\n synthesisError: `I encountered an error while preparing the answer. Please try asking your question again.`,\n },\n slots: [\n {\n name: 'topic',\n type: 'string',\n required: true,\n description: 'The main topic of the query',\n prompt: 'What topic are you asking about?',\n examples: ['general inquiry', 'specific issue', 'how-to question'],\n },\n {\n name: 'context',\n type: 'string',\n required: false,\n description: 'Additional context for the query',\n prompt: 'Can you provide more context?',\n examples: ['background info', 'related details'],\n },\n ],\n slotPriority: ['topic', 'context'],\n defaultKbId: kbId,\n citations: {\n format: 'brackets',\n labelPrefix: 'S',\n },\n behavior: {\n maxDisambiguationAttempts: 3,\n fallbackStrategy: 'use_first',\n enablePlanModification: true,\n },\n quickQuestions: [\n `What can you help me with in ${domain}?`,\n `How do I get started?`,\n `Can you explain the basics?`,\n `What are common issues people face?`,\n `Where can I find more information?`,\n ],\n };\n}\n\n/**\n * Files and directories to exclude when copying template\n */\nconst EXCLUDED_PATHS = [\n 'node_modules',\n '.next',\n '.git',\n 'data',\n '.env.local',\n '.DS_Store',\n 'pnpm-lock.yaml',\n 'package-lock.json',\n];\n\n/**\n * Copy template directory recursively\n */\nfunction copyTemplate(src: string, dest: string): void {\n if (!fs.existsSync(src)) {\n throw new Error(`Template directory not found: ${src}`);\n }\n\n fs.mkdirSync(dest, { recursive: true });\n\n const entries = fs.readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n // Skip excluded paths\n if (EXCLUDED_PATHS.includes(entry.name)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n copyTemplate(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Update package.json with new app name\n */\nfunction updatePackageJson(outputDir: string, name: string): void {\n const packageJsonPath = path.join(outputDir, 'package.json');\n \n if (!fs.existsSync(packageJsonPath)) {\n return;\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n \n // Create a URL-safe package name\n const packageName = name.toLowerCase().replace(/\\s+/g, '-').replace(/[^a-z0-9-]/g, '');\n \n packageJson.name = `@kat/${packageName}`;\n packageJson.description = `${name} - A KAT-powered assistant`;\n \n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n');\n}\n\n/**\n * Update layout.tsx with new metadata\n */\nfunction updateLayout(outputDir: string, name: string, description: string): void {\n const layoutPath = path.join(outputDir, 'app', 'layout.tsx');\n \n if (!fs.existsSync(layoutPath)) {\n return;\n }\n\n let content = fs.readFileSync(layoutPath, 'utf-8');\n \n // Replace metadata title and description\n content = content.replace(\n /title:\\s*['\"][^'\"]*['\"]/,\n `title: '${name}'`\n );\n content = content.replace(\n /description:\\s*['\"][^'\"]*['\"]/,\n `description: '${description}'`\n );\n \n fs.writeFileSync(layoutPath, content);\n}\n\n/**\n * Create .env.example file\n */\nfunction createEnvExample(outputDir: string): void {\n const envContent = `# OpenAI API Key (required)\nOPENAI_API_KEY=your-openai-api-key\n\n# Pinecone API Key (required for KB access)\nPINECONE_API_KEY=your-pinecone-api-key\n\n# Optional: Pinecone Environment\n# PINECONE_ENVIRONMENT=us-east-1\n`;\n \n fs.writeFileSync(path.join(outputDir, '.env.example'), envContent);\n}\n\n/**\n * Create a sample KB manifest\n */\nfunction createSampleManifest(outputDir: string, domain: string): void {\n const manifestsDir = path.join(outputDir, 'composition', 'manifests');\n fs.mkdirSync(manifestsDir, { recursive: true });\n\n const kbId = `kb-${domain.toLowerCase().replace(/\\s+/g, '-')}`;\n \n const sampleManifest = {\n id: kbId,\n assistantName: kbId,\n domain: domain,\n description: `Knowledge base for ${domain}`,\n capabilities: [\n `Answer questions about ${domain}`,\n 'Provide relevant information and guidance',\n 'Reference source documents',\n ],\n inputs: [\n { slot: 'topic', required: true, description: 'The specific topic being asked about' },\n { slot: 'context', required: false, description: 'Additional context for the query' },\n ],\n outputs: [\n 'Detailed answers with citations',\n 'Relevant document references',\n ],\n slots: [\n {\n name: 'topic',\n type: 'string',\n description: 'The main topic of the query',\n },\n ],\n relevance: {\n slotTriggers: ['topic'],\n domains: [domain],\n },\n };\n\n fs.writeFileSync(\n path.join(manifestsDir, `${kbId}.json`),\n JSON.stringify(sampleManifest, null, 2) + '\\n'\n );\n}\n\n/**\n * Main function to generate the app\n */\nexport async function generateApp(options: GenerateAppOptions): Promise<GenerateAppResult> {\n const { name, description, domain, template, outputDir } = options;\n const totalSteps = 5;\n\n // Resolve output path\n const outputPath = path.resolve(process.cwd(), outputDir);\n\n // Step 1: Generate agent config with LLM\n printStep(1, totalSteps, 'Generating agent configuration with AI...');\n const config = await generateAgentConfig(options);\n \n // Step 2: Copy template\n printStep(2, totalSteps, `Copying ${template} template...`);\n const templatePath = getTemplatePath(template);\n copyTemplate(templatePath, outputPath);\n\n // Step 3: Write agent.config.json\n printStep(3, totalSteps, 'Writing agent.config.json...');\n const configPath = path.join(outputPath, 'agent.config.json');\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n');\n\n // Step 4: Update package.json and layout\n printStep(4, totalSteps, 'Customizing app files...');\n updatePackageJson(outputPath, name);\n updateLayout(outputPath, name, description);\n createEnvExample(outputPath);\n\n // Step 5: Create sample manifest\n printStep(5, totalSteps, 'Creating sample KB manifest...');\n createSampleManifest(outputPath, domain);\n\n printInfo(`Template: ${template === 'vercel-ai' ? 'Vercel AI SDK' : 'Native Next.js'}`);\n \n return {\n success: true,\n outputPath,\n configPath,\n };\n}\n\n","#!/usr/bin/env node\n/**\n * KAT CLI - Knowledge Applicability Toolkit\n *\n * A unified CLI for managing Pinecone knowledge bases with AI-powered features.\n *\n * @example\n * ```bash\n * # Install globally\n * npm install -g @kat/cli\n *\n * # Run interactive mode\n * kat\n *\n * # Run specific commands\n * kat ingest --output pinecone\n * kat compose --kb-id my_kb --domain support\n * kat introspect --assistant my-assistant\n * kat validate\n * kat topics ./data --mode hybrid\n * ```\n */\n\nimport { Command } from 'commander';\nimport { loadEnv, getVersion } from './utils/config.js';\nimport { printBanner, printError, drawBox, colors } from './utils/colors.js';\nimport { createReadline, askSelect, askConfirm } from './utils/prompts.js';\n\n// Import commands\nimport { ingestCommand } from './commands/ingest.js';\nimport { composeCommand } from './commands/compose.js';\nimport { introspectCommand } from './commands/introspect.js';\nimport { validateCommand } from './commands/validate.js';\nimport { topicsCommand } from './commands/topics.js';\nimport { syncCommand } from './commands/sync.js';\nimport { generateCommand } from './commands/generate.js';\nimport { evalCommand } from './commands/eval.js';\n\n// Load environment variables\nloadEnv();\n\nconst program = new Command();\n\nprogram\n .name('kat')\n .description('Knowledge Base Tools CLI - Manage Pinecone knowledge bases')\n .version(getVersion(), '-v, --version', 'Display version number')\n .option('--no-color', 'Disable colored output')\n .option('--verbose', 'Enable verbose output')\n .hook('preAction', (thisCommand) => {\n // Handle global options\n if (thisCommand.opts().noColor) {\n process.env.NO_COLOR = '1';\n }\n if (thisCommand.opts().verbose) {\n process.env.KAT_VERBOSE = '1';\n }\n });\n\n// Register subcommands\nprogram.addCommand(ingestCommand);\nprogram.addCommand(composeCommand);\nprogram.addCommand(introspectCommand);\nprogram.addCommand(validateCommand);\nprogram.addCommand(topicsCommand);\nprogram.addCommand(syncCommand);\nprogram.addCommand(generateCommand);\nprogram.addCommand(evalCommand);\n\n// Default action: interactive mode\nprogram.action(async () => {\n await runInteractiveMode();\n});\n\n/**\n * Run the CLI in interactive mode\n */\nasync function runInteractiveMode(): Promise<void> {\n printBanner();\n\n console.log(\n drawBox(\n [\n colors.white('Welcome to the KB Tools CLI!'),\n '',\n colors.gray('This tool helps you manage your knowledge bases:'),\n ` ${colors.cyan('•')} Ingest data into Pinecone`,\n ` ${colors.cyan('•')} Build and introspect manifests`,\n ` ${colors.cyan('•')} Validate data and test topics`,\n ],\n { borderColor: colors.cyan, padding: 2 }\n )\n );\n\n const rl = createReadline();\n\n try {\n await showMainMenu(rl);\n } finally {\n rl.close();\n }\n}\n\ninterface MenuCommand {\n key: string;\n name: string;\n description: string;\n icon: string;\n command: string;\n}\n\nconst MENU_COMMANDS: MenuCommand[] = [\n { key: '1', name: 'Generate App', description: 'Scaffold a new KAT app', icon: 'šŸš€', command: 'generate' },\n { key: '2', name: 'Ingest Data', description: 'Ingest CSV data into Pinecone', icon: 'šŸ—ƒ', command: 'ingest' },\n { key: '3', name: 'Compose Manifest', description: 'Build KB manifests with AI', icon: 'šŸ”§', command: 'compose' },\n { key: '4', name: 'Introspect Assistant', description: 'Generate manifest from Pinecone', icon: 'šŸ”', command: 'introspect' },\n { key: '5', name: 'Eval Quality', description: 'Evaluate RAG system quality', icon: 'šŸ“Š', command: 'eval' },\n { key: '6', name: 'Validate Data', description: 'Validate CSV against definitions', icon: 'āœ“', command: 'validate' },\n { key: '7', name: 'Test Topics', description: 'Test topic extraction', icon: '✨', command: 'topics' },\n { key: '8', name: 'Sync Manifests', description: 'Sync manifests local ↔ Pinecone', icon: 'āš™', command: 'sync' },\n];\n\nasync function showMainMenu(rl: ReturnType<typeof createReadline>): Promise<void> {\n const options = [\n ...MENU_COMMANDS.map((cmd) => ({\n key: cmd.key,\n label: `${cmd.icon} ${cmd.name}`,\n description: cmd.description,\n })),\n { key: 'h', label: '? Help', description: 'Show help information' },\n { key: 'q', label: 'āœ— Quit', description: 'Exit the CLI' },\n ];\n\n const choice = await askSelect(rl, 'What would you like to do?', options);\n await handleMenuChoice(choice, rl);\n}\n\nasync function handleMenuChoice(choice: string, rl: ReturnType<typeof createReadline>): Promise<void> {\n // Map menu keys to command names\n const keyToCommand: Record<string, string> = {\n '1': 'generate',\n '2': 'ingest',\n '3': 'compose',\n '4': 'introspect',\n '5': 'eval',\n '6': 'validate',\n '7': 'topics',\n '8': 'sync',\n 'h': 'help',\n 'q': 'quit',\n // Also accept command names directly\n generate: 'generate',\n ingest: 'ingest',\n compose: 'compose',\n introspect: 'introspect',\n eval: 'eval',\n validate: 'validate',\n topics: 'topics',\n sync: 'sync',\n help: 'help',\n quit: 'quit',\n exit: 'quit',\n };\n\n const command = keyToCommand[choice.toLowerCase()] || choice;\n\n if (command === 'quit') {\n console.log('\\n' + colors.gray('Goodbye! šŸ‘‹') + '\\n');\n process.exit(0);\n }\n\n if (command === 'help') {\n program.outputHelp();\n return showMainMenu(rl);\n }\n\n // Find and run the command in interactive mode\n const menuCmd = MENU_COMMANDS.find((c) => c.command === command);\n if (menuCmd) {\n console.log('');\n \n // Run command with --interactive flag\n try {\n await program.parseAsync([process.argv[0], process.argv[1], menuCmd.command, '--interactive']);\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n }\n\n // After command, ask if they want to continue\n console.log('');\n const continueChoice = await askConfirm(rl, 'Return to main menu?', true);\n if (continueChoice) {\n return showMainMenu(rl);\n } else {\n console.log('\\n' + colors.gray('Goodbye! šŸ‘‹') + '\\n');\n process.exit(0);\n }\n } else {\n printError(`Unknown option: ${choice}`);\n return showMainMenu(rl);\n }\n}\n\n// Parse CLI arguments\nprogram.parse();\n\n","/**\n * Interactive Prompt Utilities\n *\n * Provides readline-based prompts for interactive CLI mode.\n */\n\nimport * as readline from 'node:readline/promises';\nimport { stdin as input, stdout as output } from 'node:process';\nimport { colors, icons, menuOption } from './colors.js';\n\nexport type ReadlineInterface = readline.Interface;\n\n/**\n * Create a readline interface for interactive prompts\n */\nexport function createReadline(): ReadlineInterface {\n return readline.createInterface({ input, output });\n}\n\n/**\n * Ask a question and return the answer\n */\nexport async function askQuestion(\n rl: ReadlineInterface,\n question: string,\n defaultValue?: string\n): Promise<string> {\n const defaultHint = defaultValue ? colors.gray(` [${defaultValue}]`) : '';\n const answer = await rl.question(`${colors.cyan(icons.pointer)} ${question}${defaultHint}: `);\n return answer.trim() || defaultValue || '';\n}\n\n/**\n * Ask a yes/no confirmation question\n */\nexport async function askConfirm(\n rl: ReadlineInterface,\n question: string,\n defaultValue: boolean = false\n): Promise<boolean> {\n const hint = defaultValue ? colors.gray(' [Y/n]') : colors.gray(' [y/N]');\n const answer = await rl.question(`${colors.cyan(icons.pointer)} ${question}${hint}: `);\n if (!answer.trim()) return defaultValue;\n return /^y(es)?$/i.test(answer.trim());\n}\n\n/**\n * Ask the user to select from a list of options\n */\nexport async function askSelect(\n rl: ReadlineInterface,\n question: string,\n options: { key: string; label: string; description?: string }[]\n): Promise<string> {\n console.log(`\\n${colors.cyan(icons.pointer)} ${question}`);\n for (const opt of options) {\n console.log(menuOption(opt.key, opt.label, opt.description));\n }\n const answer = await rl.question(`\\n${colors.cyan(icons.pointer)} Enter choice: `);\n return answer.trim().toLowerCase();\n}\n\n/**\n * Ask for multiple values (comma-separated)\n */\nexport async function askMultiple(\n rl: ReadlineInterface,\n question: string,\n hint?: string\n): Promise<string[]> {\n const hintText = hint ? colors.gray(` (${hint})`) : '';\n const answer = await rl.question(`${colors.cyan(icons.pointer)} ${question}${hintText}: `);\n return answer\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/**\n * Pause and wait for Enter key\n */\nexport async function pause(rl: ReadlineInterface, message: string = 'Press Enter to continue...'): Promise<void> {\n await rl.question(`${colors.gray(message)}`);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Ingest Command\n *\n * Ingests CSV data into Pinecone assistants with topic extraction.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n printHeader,\n printSuccess,\n printError,\n printWarning,\n printInfo,\n printList,\n printStep,\n Spinner,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askQuestion, askSelect, askConfirm } from '../utils/prompts.js';\nimport { findDataDir, requireEnv } from '../utils/config.js';\n\nexport type OutputMode = 'pinecone' | 'local' | 'both';\n\nexport interface IngestOptions {\n output: OutputMode;\n dir?: string;\n dryRun: boolean;\n interactive: boolean;\n verbose: boolean;\n}\n\nexport const ingestCommand = new Command('ingest')\n .description('Ingest CSV data into Pinecone assistants')\n .option('-o, --output <mode>', 'Output mode: pinecone, local, or both', 'pinecone')\n .option('-d, --dir <path>', 'Local output directory for ingested files')\n .option('--dry-run', 'Preview changes without making them', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .option('--verbose', 'Show detailed output', false)\n .action(async (options: IngestOptions) => {\n if (options.interactive) {\n await runInteractive();\n } else {\n await runIngest(options);\n }\n });\n\nasync function runInteractive(): Promise<void> {\n printHeader('Data Ingestion', icons.database);\n console.log(colors.gray('Ingest CSV data into Pinecone assistants with topic extraction.\\n'));\n\n const rl = createReadline();\n\n try {\n const dataDir = findDataDir();\n \n if (!dataDir) {\n printError('Data directory not found.');\n printInfo('Make sure you have CSV files in a data/ directory.');\n return;\n }\n\n // List available CSV files\n const csvFiles = fs.readdirSync(dataDir).filter((f) => f.endsWith('.csv'));\n if (csvFiles.length === 0) {\n printWarning('No CSV files found in data directory.');\n return;\n }\n\n console.log(colors.white('Available CSV files:'));\n printList(csvFiles.map((f) => `${f} ${colors.gray(`(${path.join(dataDir, f)})`)}`));\n\n // Ask for output mode\n const outputModeChoice = await askSelect(rl, 'Where should the data be written?', [\n { key: '1', label: 'Pinecone', description: 'Upload to Pinecone assistant (remote)' },\n { key: '2', label: 'Local', description: 'Write markdown files to disk' },\n { key: '3', label: 'Both', description: 'Pinecone + local files' },\n ]);\n\n const outputModeMap: Record<string, OutputMode> = {\n '1': 'pinecone',\n '2': 'local',\n '3': 'both',\n };\n const output = outputModeMap[outputModeChoice] || 'pinecone';\n\n // Ask for local output directory if writing locally\n let dir: string | undefined;\n if (output === 'local' || output === 'both') {\n const defaultDir = path.join(dataDir, 'ingested');\n dir = await askQuestion(rl, 'Local output directory', defaultDir);\n }\n\n const dryRun = await askConfirm(rl, 'Dry run (preview without making changes)?', false);\n const confirm = await askConfirm(rl, 'Proceed with ingestion?', true);\n \n if (!confirm) {\n printInfo('Ingestion cancelled.');\n return;\n }\n\n await runIngest({ output, dir, dryRun, interactive: true, verbose: false });\n } finally {\n rl.close();\n }\n}\n\nasync function runIngest(options: IngestOptions): Promise<void> {\n const { output, dir, dryRun, verbose } = options;\n\n // Check required environment variables for Pinecone\n if (output === 'pinecone' || output === 'both') {\n const { missing } = requireEnv(['PINECONE_API_KEY']);\n if (missing.length > 0) {\n printError(`Missing required environment variables: ${missing.join(', ')}`);\n printInfo('Set these in your .env.local file or environment.');\n process.exit(1);\n }\n }\n\n const dataDir = findDataDir();\n if (!dataDir) {\n printError('Data directory not found.');\n process.exit(1);\n }\n\n const spinner = new Spinner('Preparing ingestion...', colors.cyan);\n spinner.start();\n\n try {\n // Dynamic import of the actual ingest logic\n // This will be provided by the workspace dependency or bundled\n const ingestModule = await import('../lib/ingest.js');\n \n spinner.stop();\n \n await ingestModule.ingestData({\n outputMode: output,\n localOutputDir: dir,\n dryRun,\n verbose,\n dataDir,\n });\n\n if (!dryRun) {\n printSuccess('Data ingestion completed successfully!');\n } else {\n printInfo('Dry run completed. No changes were made.');\n }\n } catch (error) {\n spinner.fail('Ingestion failed');\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Compose Command\n *\n * Build KB manifests interactively with AI assistance.\n */\n\nimport { Command } from 'commander';\nimport {\n printHeader,\n printSuccess,\n printError,\n printWarning,\n printInfo,\n Spinner,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askQuestion, askSelect, askConfirm } from '../utils/prompts.js';\nimport { requireEnv } from '../utils/config.js';\n\nexport type StorageMode = 'local' | 'pinecone' | 'both';\n\nexport interface ComposeOptions {\n kbId?: string;\n domain?: string;\n description?: string;\n assistant?: string;\n source?: string;\n storage: StorageMode;\n dryRun: boolean;\n interactive: boolean;\n}\n\nexport const composeCommand = new Command('compose')\n .description('Build KB manifests interactively with AI')\n .option('--kb-id <id>', 'KB identifier (e.g., kb_shipping)')\n .option('--domain <domain>', 'Domain name (e.g., returns, warranty)')\n .option('--description <desc>', 'Short description of the KB')\n .option('--assistant <name>', 'Pinecone assistant name')\n .option('--source <path>', 'Path to source CSV data (optional)')\n .option('-s, --storage <mode>', 'Storage mode: local, pinecone, or both', 'local')\n .option('--dry-run', 'Preview manifest without saving', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .action(async (options: ComposeOptions) => {\n if (options.interactive || !options.kbId) {\n await runInteractive(options);\n } else {\n await runCompose(options);\n }\n });\n\nasync function runInteractive(initialOptions: Partial<ComposeOptions> = {}): Promise<void> {\n printHeader('Composition Builder', icons.tools);\n console.log(colors.gray('Build KB manifests from scratch or CSV data.\\n'));\n\n const rl = createReadline();\n\n try {\n const kbId = initialOptions.kbId || await askQuestion(rl, 'KB ID (e.g., kb_shipping)');\n if (!kbId) {\n printWarning('KB ID is required.');\n return;\n }\n\n const domain = initialOptions.domain || await askQuestion(rl, 'Domain (e.g., returns, warranty)');\n const description = initialOptions.description || await askQuestion(rl, 'Short description');\n const assistant = initialOptions.assistant || await askQuestion(rl, 'Assistant name', kbId.replace(/_/g, '-'));\n\n // Optional source data\n const source = initialOptions.source || await askQuestion(\n rl,\n 'Path to source data CSV (optional, press Enter to skip)'\n );\n\n // Storage mode selection\n const storageModeChoice = await askSelect(rl, 'Where should the manifest be saved?', [\n { key: '1', label: 'Local', description: 'Save as JSON file in composition/manifests/' },\n { key: '2', label: 'Pinecone', description: 'Save to Pinecone assistant metadata' },\n { key: '3', label: 'Both', description: 'Save locally and to Pinecone' },\n ]);\n\n const storageModeMap: Record<string, StorageMode> = {\n '1': 'local',\n '2': 'pinecone',\n '3': 'both',\n };\n const storage = storageModeMap[storageModeChoice] || 'local';\n\n const dryRun = await askConfirm(rl, 'Dry run (preview without saving)?', false);\n\n await runCompose({\n kbId,\n domain,\n description,\n assistant,\n source: source || undefined,\n storage,\n dryRun,\n interactive: true,\n });\n } finally {\n rl.close();\n }\n}\n\nasync function runCompose(options: ComposeOptions): Promise<void> {\n const { kbId, domain, description, assistant, source, storage, dryRun } = options;\n\n if (!kbId) {\n printError('KB ID is required. Use --kb-id or run in interactive mode.');\n process.exit(1);\n }\n\n // Check for API keys if using AI\n const { missing } = requireEnv(['OPENAI_API_KEY']);\n if (missing.length > 0) {\n printWarning(`Missing environment variables: ${missing.join(', ')}`);\n printInfo('AI-assisted composition may not work without these.');\n }\n\n if (storage === 'pinecone' || storage === 'both') {\n const { missing: pineconeMissing } = requireEnv(['PINECONE_API_KEY']);\n if (pineconeMissing.length > 0) {\n printError('PINECONE_API_KEY is required for Pinecone storage.');\n process.exit(1);\n }\n }\n\n const spinner = new Spinner('Generating manifest with AI...', colors.magenta);\n spinner.start();\n\n try {\n const composeModule = await import('../lib/compose.js');\n spinner.stop();\n\n const result = await composeModule.buildComposition({\n kbId,\n domain: domain || '',\n description: description || '',\n assistantName: assistant || kbId.replace(/_/g, '-'),\n sourcePath: source,\n storageMode: storage,\n dryRun,\n });\n\n if (result.saved) {\n if (result.savedToLocal) {\n printSuccess(`Manifest saved locally to ${result.outputPath}`);\n }\n if (result.savedToPinecone) {\n printSuccess('Manifest saved to Pinecone assistant');\n }\n } else if (dryRun) {\n printInfo('Dry run completed. No file was written.');\n }\n } catch (error) {\n spinner.fail('Manifest generation failed');\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Introspect Command\n *\n * Generate manifests by introspecting existing Pinecone assistants.\n */\n\nimport { Command, InvalidArgumentError } from 'commander';\nimport {\n printHeader,\n printSuccess,\n printError,\n printWarning,\n printInfo,\n Spinner,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askQuestion, askSelect, askConfirm } from '../utils/prompts.js';\nimport { requireEnv } from '../utils/config.js';\n\nexport type StorageMode = 'local' | 'pinecone' | 'both';\n\nexport interface IntrospectOptions {\n assistant?: string;\n kbId?: string;\n domain?: string;\n storage: StorageMode;\n dryRun: boolean;\n verbose: boolean;\n interactive: boolean;\n maxDepth?: number;\n maxQuestions?: number;\n maxBranch?: number;\n maxRetries?: number;\n llmModel?: string;\n}\n\nfunction parseStorageMode(value: string): StorageMode {\n const normalized = value.toLowerCase().trim();\n if (normalized === 'local' || normalized === 'pinecone' || normalized === 'both') {\n return normalized;\n }\n\n throw new InvalidArgumentError(\n `Invalid storage mode \"${value}\". Use one of: local, pinecone, both.`\n );\n}\n\nfunction parsePositiveInt(value: string, optionName: string): number {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(`${optionName} must be a positive integer.`);\n }\n return parsed;\n}\n\nexport const introspectCommand = new Command('introspect')\n .description('Generate manifest from existing Pinecone assistant')\n .option('-a, --assistant <name>', 'Pinecone assistant name')\n .option('--kb-id <id>', 'KB identifier (defaults to assistant name)')\n .option('--domain <domain>', 'Domain name (will be inferred if not provided)')\n .option('-s, --storage <mode>', 'Storage mode: local, pinecone, or both', parseStorageMode, 'local')\n .option('--dry-run', 'Preview manifest without saving', false)\n .option('--verbose', 'Show detailed Q&A during introspection', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .option('--max-depth <n>', 'Category drilling depth', v => parsePositiveInt(v, '--max-depth'))\n .option('--max-questions <n>', 'Total question budget', v => parsePositiveInt(v, '--max-questions'))\n .option('--max-branch <n>', 'Max expansions per discovered item', v => parsePositiveInt(v, '--max-branch'))\n .option('--max-retries <n>', 'Retries for generic responses', v => parsePositiveInt(v, '--max-retries'))\n .option('--llm-model <id>', 'OpenAI model for introspection (overrides KBS_INTROSPECTION_MODEL)')\n .action(async (options: IntrospectOptions) => {\n if (options.interactive || !options.assistant) {\n await runInteractive(options);\n } else {\n await runIntrospect(options);\n }\n });\n\nasync function runInteractive(initialOptions: Partial<IntrospectOptions> = {}): Promise<void> {\n printHeader('Manifest Introspector', icons.search);\n console.log(colors.gray('Generate manifests by introspecting Pinecone assistants.\\n'));\n\n const rl = createReadline();\n\n try {\n const assistant = initialOptions.assistant || await askQuestion(rl, 'Pinecone assistant name');\n if (!assistant) {\n printWarning('Assistant name is required.');\n return;\n }\n\n const kbId = initialOptions.kbId || await askQuestion(rl, 'KB ID', assistant);\n const domain = initialOptions.domain || await askQuestion(rl, 'Domain (press Enter to infer)');\n\n // Storage mode selection\n const storageModeChoice = await askSelect(rl, 'Where should the manifest be saved?', [\n { key: '1', label: 'Local', description: 'Save as JSON file in composition/manifests/' },\n { key: '2', label: 'Pinecone', description: 'Save to Pinecone assistant metadata' },\n { key: '3', label: 'Both', description: 'Save locally and to Pinecone' },\n ]);\n\n const storageModeMap: Record<string, StorageMode> = {\n '1': 'local',\n '2': 'pinecone',\n '3': 'both',\n };\n const storage = storageModeMap[storageModeChoice] || 'local';\n\n const dryRun = await askConfirm(rl, 'Dry run (preview without saving)?', false);\n const verbose = await askConfirm(rl, 'Verbose output (show Q&A)?', false);\n\n console.log('');\n printInfo('Starting introspection. This may take a few minutes...');\n\n await runIntrospect({\n assistant,\n kbId,\n domain: domain || undefined,\n storage,\n dryRun,\n verbose,\n interactive: true,\n });\n } finally {\n rl.close();\n }\n}\n\nasync function runIntrospect(options: IntrospectOptions): Promise<void> {\n const { assistant, kbId, domain, storage, dryRun, verbose, maxDepth, maxQuestions, maxBranch, maxRetries, llmModel } = options;\n\n if (!assistant) {\n printError('Assistant name is required. Use --assistant or run in interactive mode.');\n process.exit(1);\n }\n\n // Check required environment variables\n const { missing } = requireEnv(['PINECONE_API_KEY', 'OPENAI_API_KEY']);\n if (missing.length > 0) {\n printError(`Missing required environment variables: ${missing.join(', ')}`);\n process.exit(1);\n }\n\n if (dryRun) {\n printInfo('Dry run enabled: introspection still queries Pinecone and OpenAI, but it does not write outputs.');\n } else {\n const saveTargets =\n storage === 'both'\n ? 'local manifest file and Pinecone assistant metadata'\n : storage === 'local'\n ? 'a local manifest file'\n : 'Pinecone assistant metadata';\n printInfo(`Save target: ${saveTargets}.`);\n }\n\n const spinner = new Spinner('Introspecting assistant...', colors.blue);\n if (!verbose) {\n spinner.start();\n }\n\n try {\n const introspectModule = await import('../lib/introspect.js');\n \n if (!verbose) {\n spinner.stop();\n }\n\n const result = await introspectModule.introspectAssistant({\n assistantName: assistant,\n kbId: kbId || assistant,\n domain,\n storageMode: storage,\n dryRun,\n verbose,\n maxDepth,\n maxQuestions,\n maxBranch,\n maxRetries,\n llmModel,\n });\n\n if (result.saved) {\n if (result.savedToLocal) {\n printSuccess(`Manifest saved locally to ${result.outputPath}`);\n }\n if (result.savedToPinecone) {\n printSuccess('Manifest saved to Pinecone assistant');\n }\n } else if (dryRun) {\n printInfo('Dry run completed. No writes were performed.');\n if (result.wouldSaveToLocal && result.outputPath) {\n printInfo(`Would save local manifest to ${result.outputPath}`);\n }\n if (result.wouldSaveToPinecone) {\n printInfo('Would save manifest to Pinecone assistant metadata');\n }\n }\n } catch (error) {\n if (!verbose) {\n spinner.fail('Introspection failed');\n }\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n","/**\n * Validate Command\n *\n * Validate CSV data against KB manifest definitions.\n */\n\nimport { Command } from 'commander';\nimport {\n printHeader,\n printSuccess,\n printWarning,\n printError,\n colors,\n icons,\n divider,\n} from '../utils/colors.js';\nimport { createReadline, askConfirm } from '../utils/prompts.js';\nimport { findDataDir } from '../utils/config.js';\n\nexport interface ValidateOptions {\n path?: string;\n json: boolean;\n interactive: boolean;\n}\n\nexport const validateCommand = new Command('validate')\n .description('Validate CSV data against KB definitions')\n .option('-p, --path <path>', 'Path to specific CSV file or directory')\n .option('--json', 'Output results as JSON', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .action(async (options: ValidateOptions) => {\n if (options.interactive) {\n await runInteractive();\n } else {\n await runValidate(options);\n }\n });\n\nasync function runInteractive(): Promise<void> {\n printHeader('Data Validator', icons.check);\n console.log(colors.gray('Validate CSV data against KB manifest definitions.\\n'));\n\n const rl = createReadline();\n\n try {\n const dataDir = findDataDir();\n if (dataDir) {\n console.log(colors.gray(`Found data directory: ${dataDir}\\n`));\n }\n\n const confirm = await askConfirm(rl, 'Run validation?', true);\n if (!confirm) {\n return;\n }\n\n await runValidate({ json: false, interactive: true });\n } finally {\n rl.close();\n }\n}\n\nasync function runValidate(options: ValidateOptions): Promise<void> {\n const { path: dataPath, json } = options;\n\n try {\n const validateModule = await import('../lib/validate.js');\n const result = await validateModule.validateData({ path: dataPath });\n\n if (json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log('');\n divider();\n console.log(colors.boldWhite('Validation Summary'));\n divider();\n\n for (const kb of result.results) {\n const statusIcon = kb.valid ? colors.green(icons.success) : colors.red(icons.error);\n console.log(`${statusIcon} ${colors.white(kb.name)}: ${kb.records} records`);\n if (kb.issues.length > 0) {\n for (const issue of kb.issues) {\n console.log(` ${colors.yellow(icons.warning)} ${issue}`);\n }\n }\n }\n\n console.log('');\n if (result.allValid) {\n printSuccess('All data validates successfully!');\n } else {\n printWarning('Some validation issues found. Review output above.');\n process.exit(1);\n }\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Topics Command\n *\n * Test topic extraction on files without full ingestion.\n */\n\nimport { Command } from 'commander';\nimport {\n printHeader,\n printError,\n printWarning,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askQuestion, askSelect, askConfirm } from '../utils/prompts.js';\n\nexport type TopicMode = 'classic' | 'slm' | 'hybrid';\n\nexport interface TopicsOptions {\n mode?: TopicMode;\n topN: number;\n verbose: boolean;\n json: boolean;\n interactive: boolean;\n paths: string[];\n}\n\nexport const topicsCommand = new Command('topics')\n .description('Test topic extraction on files')\n .argument('[paths...]', 'Files or directories to process')\n .option('-m, --mode <mode>', 'Extraction mode: classic, slm, or hybrid')\n .option('-n, --top-n <n>', 'Number of topics per document', '5')\n .option('--verbose', 'Show document previews', false)\n .option('--json', 'Output results as JSON', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .action(async (paths: string[], options: Omit<TopicsOptions, 'paths'>) => {\n const fullOptions: TopicsOptions = { ...options, paths, topN: parseInt(options.topN as any, 10) || 5 };\n \n if (fullOptions.interactive || paths.length === 0) {\n await runInteractive(fullOptions);\n } else {\n await runTopics(fullOptions);\n }\n });\n\nasync function runInteractive(initialOptions: Partial<TopicsOptions> = {}): Promise<void> {\n printHeader('Topic Extraction Tester', icons.sparkles);\n console.log(colors.gray('Test topic extraction on files without full ingestion.\\n'));\n\n const rl = createReadline();\n\n try {\n const inputPath = await askQuestion(rl, 'File or directory path');\n if (!inputPath) {\n printWarning('Path is required.');\n return;\n }\n\n // Select mode\n const modeChoice = await askSelect(rl, 'Select extraction mode:', [\n { key: '1', label: 'Classic (TF-IDF)', description: 'Fast, keyword-based extraction' },\n { key: '2', label: 'SLM (LLM)', description: 'AI-powered semantic extraction' },\n { key: '3', label: 'Hybrid', description: 'Both methods combined' },\n { key: '4', label: 'Default', description: 'Use config settings' },\n ]);\n\n const modeMap: Record<string, TopicMode | undefined> = {\n '1': 'classic',\n '2': 'slm',\n '3': 'hybrid',\n '4': undefined,\n };\n const mode = modeMap[modeChoice];\n\n const topNStr = await askQuestion(rl, 'Number of topics per document', '5');\n const topN = parseInt(topNStr, 10) || 5;\n\n const verbose = await askConfirm(rl, 'Show document previews?', false);\n const json = await askConfirm(rl, 'Output as JSON?', false);\n\n await runTopics({\n paths: [inputPath],\n mode,\n topN,\n verbose,\n json,\n interactive: true,\n });\n } finally {\n rl.close();\n }\n}\n\nasync function runTopics(options: TopicsOptions): Promise<void> {\n const { paths, mode, topN, verbose, json } = options;\n\n if (paths.length === 0) {\n printError('At least one path is required.');\n process.exit(1);\n }\n\n try {\n const topicsModule = await import('../lib/topics.js');\n \n await topicsModule.testTopics({\n paths,\n mode,\n topN,\n verbose,\n json,\n });\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Sync Command\n *\n * Sync manifests between local files and Pinecone assistant metadata.\n */\n\nimport { Command } from 'commander';\nimport {\n printHeader,\n printSuccess,\n printError,\n printInfo,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askSelect, askConfirm } from '../utils/prompts.js';\nimport { requireEnv } from '../utils/config.js';\n\nexport type SyncDirection = 'toLocal' | 'toPinecone' | 'both';\n\nexport interface SyncOptions {\n direction?: SyncDirection;\n dryRun: boolean;\n interactive: boolean;\n}\n\nexport const syncCommand = new Command('sync')\n .description('Sync manifests between local files and Pinecone')\n .option('-d, --direction <dir>', 'Sync direction: toLocal, toPinecone, or both')\n .option('--dry-run', 'Preview changes without making them', false)\n .option('-i, --interactive', 'Run in interactive mode', false)\n .action(async (options: SyncOptions) => {\n if (options.interactive || !options.direction) {\n await runInteractive(options);\n } else {\n await runSync(options);\n }\n });\n\nasync function runInteractive(initialOptions: Partial<SyncOptions> = {}): Promise<void> {\n printHeader('Manifest Sync', icons.gear);\n console.log(colors.gray('Sync manifests between local files and Pinecone assistant metadata.\\n'));\n\n // Check for Pinecone API key first\n const { missing } = requireEnv(['PINECONE_API_KEY']);\n if (missing.length > 0) {\n printError(`Missing required environment variables: ${missing.join(', ')}`);\n return;\n }\n\n const rl = createReadline();\n\n try {\n const syncModule = await import('../lib/sync.js');\n \n // List current manifests\n const manifests = await syncModule.listManifests();\n\n console.log(colors.white('Current manifests:'));\n console.log(\n ` ${colors.cyan('Local:')} ${\n manifests.local.length > 0 ? manifests.local.map((m: any) => m.id).join(', ') : colors.gray('(none)')\n }`\n );\n console.log(\n ` ${colors.blue('Pinecone:')} ${\n manifests.pinecone.length > 0\n ? manifests.pinecone.map((m: any) => m.id).join(', ')\n : colors.gray('(none)')\n }`\n );\n\n const syncChoice = await askSelect(rl, 'What would you like to do?', [\n { key: '1', label: 'Download from Pinecone', description: 'Save Pinecone manifests locally' },\n { key: '2', label: 'Upload to Pinecone', description: 'Save local manifests to Pinecone' },\n { key: '3', label: 'Sync both ways', description: 'Sync all manifests in both directions' },\n { key: '4', label: 'Cancel', description: 'Go back' },\n ]);\n\n if (syncChoice === '4') {\n printInfo('Cancelled.');\n return;\n }\n\n const directionMap: Record<string, SyncDirection> = {\n '1': 'toLocal',\n '2': 'toPinecone',\n '3': 'both',\n };\n const direction = directionMap[syncChoice];\n\n if (!direction) {\n return;\n }\n\n const dryRun = initialOptions.dryRun || await askConfirm(rl, 'Dry run (preview without changes)?', false);\n const confirm = await askConfirm(rl, 'Proceed with sync?', true);\n \n if (!confirm) {\n printInfo('Cancelled.');\n return;\n }\n\n await runSync({ direction, dryRun, interactive: true });\n } finally {\n rl.close();\n }\n}\n\nasync function runSync(options: SyncOptions): Promise<void> {\n const { direction, dryRun } = options;\n\n if (!direction) {\n printError('Sync direction is required. Use --direction or run in interactive mode.');\n process.exit(1);\n }\n\n // Check required environment variables\n const { missing } = requireEnv(['PINECONE_API_KEY']);\n if (missing.length > 0) {\n printError(`Missing required environment variables: ${missing.join(', ')}`);\n process.exit(1);\n }\n\n try {\n const syncModule = await import('../lib/sync.js');\n const result = await syncModule.syncManifests(direction, { dryRun });\n\n if (dryRun) {\n printInfo(`Would sync ${result.synced} manifest(s).`);\n } else if (result.synced > 0) {\n printSuccess(`Synced ${result.synced} manifest(s)`);\n } else {\n printInfo('No manifests to sync.');\n }\n\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n printError(error);\n }\n process.exit(1);\n }\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Generate Command\n *\n * Scaffold a new KAT app with guided questions and LLM assistance.\n */\n\nimport { Command } from 'commander';\nimport {\n printHeader,\n printSuccess,\n printError,\n printWarning,\n printInfo,\n Spinner,\n colors,\n icons,\n} from '../utils/colors.js';\nimport { createReadline, askQuestion, askSelect, askConfirm } from '../utils/prompts.js';\nimport { requireEnv } from '../utils/config.js';\n\nexport type AppTemplate = 'native' | 'vercel-ai';\n\nexport interface GenerateOptions {\n name?: string;\n description?: string;\n domain?: string;\n template?: AppTemplate;\n output?: string;\n interactive: boolean;\n}\n\nexport const generateCommand = new Command('generate')\n .description('Scaffold a new KAT app with guided questions')\n .option('-n, --name <name>', 'App name')\n .option('-d, --description <desc>', 'App description')\n .option('--domain <domain>', 'Domain (e.g., support, education, healthcare)')\n .option('-t, --template <template>', 'App template: native or vercel-ai', 'native')\n .option('-o, --output <path>', 'Output directory', '.')\n .option('-i, --interactive', 'Run in interactive mode', false)\n .action(async (options: GenerateOptions) => {\n if (options.interactive || !options.name) {\n await runInteractive(options);\n } else {\n await runGenerate(options);\n }\n });\n\nasync function runInteractive(initialOptions: Partial<GenerateOptions> = {}): Promise<void> {\n printHeader('App Generator', icons.rocket);\n console.log(colors.gray('Create a new KAT-powered Next.js app with guided setup.\\n'));\n\n const rl = createReadline();\n\n try {\n // Step 1: App Template\n const templateChoice = await askSelect(rl, 'Which app template would you like to use?', [\n { key: '1', label: 'Native Next.js', description: 'Uses runAgent() with JSON responses' },\n { key: '2', label: 'Vercel AI SDK', description: 'Uses runAgentStreaming() with useChat hook' },\n ]);\n const template: AppTemplate = templateChoice === '2' ? 'vercel-ai' : 'native';\n\n // Step 2: Basic Info\n console.log('\\n' + colors.boldWhite('Basic Information'));\n const name = initialOptions.name || await askQuestion(rl, 'App name');\n if (!name) {\n printWarning('App name is required.');\n return;\n }\n\n const description = initialOptions.description || await askQuestion(\n rl,\n 'App description',\n `A ${name} assistant powered by KAT`\n );\n\n const domain = initialOptions.domain || await askQuestion(\n rl,\n 'Domain (e.g., support, education, healthcare)',\n 'general'\n );\n\n // Step 3: Output directory\n const output = initialOptions.output || await askQuestion(\n rl,\n 'Output directory',\n `./${name.toLowerCase().replace(/\\s+/g, '-')}`\n );\n\n // Confirm before proceeding\n console.log('\\n' + colors.boldWhite('Summary:'));\n console.log(` ${colors.cyan('Template:')} ${template === 'vercel-ai' ? 'Vercel AI SDK' : 'Native Next.js'}`);\n console.log(` ${colors.cyan('Name:')} ${name}`);\n console.log(` ${colors.cyan('Description:')} ${description}`);\n console.log(` ${colors.cyan('Domain:')} ${domain}`);\n console.log(` ${colors.cyan('Output:')} ${output}`);\n\n const proceed = await askConfirm(rl, '\\nProceed with generation?', true);\n if (!proceed) {\n printInfo('Generation cancelled.');\n return;\n }\n\n await runGenerate({\n name,\n description,\n domain,\n template,\n output,\n interactive: true,\n });\n } finally {\n rl.close();\n }\n}\n\nasync function runGenerate(options: GenerateOptions): Promise<void> {\n const { name, description, domain, template, output } = options;\n\n if (!name) {\n printError('App name is required. Use --name or run in interactive mode.');\n process.exit(1);\n }\n\n // Check for API keys\n const { missing } = requireEnv(['OPENAI_API_KEY']);\n if (missing.length > 0) {\n printWarning(`Missing environment variables: ${missing.join(', ')}`);\n printInfo('LLM-assisted generation may not work without these.');\n }\n\n const spinner = new Spinner('Generating app...', colors.magenta);\n spinner.start();\n\n try {\n const generateModule = await import('../lib/generate.js');\n spinner.stop();\n\n const result = await generateModule.generateApp({\n name,\n description: description || `A ${name} assistant`,\n domain: domain || 'general',\n template: template || 'native',\n outputDir: output || '.',\n });\n\n if (result.success) {\n console.log('');\n printSuccess(`App generated successfully at ${colors.cyan(result.outputPath)}`);\n console.log('');\n console.log(colors.boldWhite('Next steps:'));\n console.log(` ${colors.gray('1.')} cd ${result.outputPath}`);\n console.log(` ${colors.gray('2.')} npm install`);\n console.log(` ${colors.gray('3.')} cp .env.example .env.local ${colors.gray('# Add your API keys')}`);\n console.log(` ${colors.gray('4.')} npm run dev`);\n console.log('');\n printInfo('Edit agent.config.json to customize your app behavior.');\n }\n } catch (error) {\n spinner.fail('App generation failed');\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n","/**\n * kat eval - Evaluate RAG system quality\n *\n * Runs evaluation scenarios against introspection, retrieval, and agent layers.\n *\n * @example\n * ```bash\n * # Run all eval layers\n * kat eval --assistant my-kb --endpoint http://localhost:3000/api/chat --scenarios ./eval/baseline/naive-rag-baseline.json\n *\n * # Run only introspection eval\n * kat eval --layer introspection --assistant my-kb --scenarios ./eval/baseline/introspection-ground-truth.json\n *\n * # Run retrieval eval\n * kat eval --layer retrieval --assistant my-kb --scenarios ./eval/baseline/retrieval-queries.json\n *\n * # Run agent eval\n * kat eval --layer agent --endpoint http://localhost:3000/api/chat --scenarios ./eval/baseline/agent-scenarios.json\n *\n * # Run the canonical baseline bundle\n * kat eval --assistant my-kb --endpoint http://localhost:3000/api/chat --baseline\n *\n * # Output as JSON\n * kat eval --assistant my-kb --output json > results.json\n * ```\n */\n\nimport { Command } from 'commander';\nimport { readFile } from 'fs/promises';\nimport { resolve } from 'path';\nimport { colors, printError, drawBox } from '../utils/colors.js';\n\n// Dynamic import for @kat/eval to avoid circular dependencies\nasync function loadEvalModule() {\n try {\n return await import('@kat/eval');\n } catch (error) {\n throw new Error(\n 'Failed to load @kat/eval. Make sure it is installed:\\n npm install @kat/eval'\n );\n }\n}\n\ntype EvalLayer = 'introspection' | 'retrieval' | 'agent' | 'all';\ntype OutputFormat = 'console' | 'json';\nconst DEFAULT_BASELINE_SCENARIOS_PATH = 'eval/baseline/naive-rag-baseline.json';\n\ninterface ScenarioBundle {\n groundTruth?: unknown[];\n queries?: unknown[];\n scenarios?: unknown[];\n}\n\ninterface EvalOptions {\n layer: EvalLayer;\n assistant?: string;\n scenarios?: string;\n baseline?: boolean;\n endpoint?: string;\n output: OutputFormat;\n verbose?: boolean;\n interactive?: boolean;\n}\n\nexport const evalCommand = new Command()\n .name('eval')\n .description('Evaluate RAG system quality across introspection, retrieval, and agent layers')\n .option('-l, --layer <layer>', 'Eval layer: introspection, retrieval, agent, all', 'all')\n .option('-a, --assistant <name>', 'Pinecone assistant name (required for introspection/retrieval)')\n .option('-s, --scenarios <path>', 'Path to scenarios JSON file')\n .option('-b, --baseline', `Load canonical baseline fixtures from ./${DEFAULT_BASELINE_SCENARIOS_PATH}`)\n .option('-e, --endpoint <url>', 'Agent API endpoint (required for agent layer)')\n .option('-o, --output <format>', 'Output format: console, json', 'console')\n .option('-v, --verbose', 'Show detailed output')\n .option('-i, --interactive', 'Run in interactive mode')\n .action(async (options: EvalOptions) => {\n try {\n await runEval(options);\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nasync function runEval(options: EvalOptions): Promise<void> {\n const { layer, assistant, scenarios, baseline, endpoint, output, verbose } = options;\n\n // Validate required options\n if ((layer === 'introspection' || layer === 'retrieval' || layer === 'all') && !assistant) {\n throw new Error('--assistant is required for introspection and retrieval eval');\n }\n\n if (baseline && scenarios) {\n throw new Error('--baseline and --scenarios cannot be used together');\n }\n\n // Load eval module\n const evalModule = await loadEvalModule();\n\n // Load scenarios if provided (or canonical baseline bundle)\n const scenarioPath = resolveScenarioPath({ scenarios, baseline });\n let scenarioData: ScenarioBundle | null = null;\n if (scenarioPath) {\n scenarioData = await loadScenarioBundle(scenarioPath);\n }\n\n if (baseline && output === 'console' && scenarioPath) {\n console.log(colors.gray(`Using baseline fixtures: ${scenarioPath}`));\n }\n\n const hasAgentScenarios = Array.isArray(scenarioData?.scenarios) && scenarioData.scenarios.length > 0;\n if (layer === 'agent' && !endpoint) {\n throw new Error('--endpoint is required for agent eval');\n }\n if (layer === 'all' && hasAgentScenarios && !endpoint) {\n throw new Error(\n '--endpoint is required when running all layers with agent scenarios (use --layer introspection or --layer retrieval to skip agent eval)'\n );\n }\n\n const results: Array<{ layer: string; result: unknown }> = [];\n\n // Run introspection eval\n if (layer === 'introspection' || layer === 'all') {\n if (output === 'console') {\n console.log('\\n' + colors.cyan('━'.repeat(60)));\n console.log(colors.bold('Layer 1: Introspection Eval'));\n console.log(colors.cyan('━'.repeat(60)));\n }\n\n // For introspection, we need a manifest. Try to load from composition/manifests/\n const manifestPath = resolve(process.cwd(), `composition/manifests/${assistant}.json`);\n let manifest: unknown;\n try {\n const content = await readFile(manifestPath, 'utf-8');\n manifest = JSON.parse(content);\n } catch {\n if (output === 'console') {\n console.log(colors.yellow(`⚠ No manifest found at ${manifestPath}`));\n console.log(colors.gray(' Run \"kat introspect --assistant ' + assistant + '\" first'));\n }\n manifest = { id: assistant, assistantName: assistant };\n }\n\n const config = {\n assistantName: assistant!,\n manifest: manifest as any,\n groundTruth: scenarioData?.groundTruth || [],\n verbose,\n };\n\n const result = await evalModule.evaluateIntrospection(config);\n results.push({ layer: 'introspection', result });\n\n if (output === 'console') {\n printEvalResult('Introspection', result);\n }\n }\n\n // Run retrieval eval\n if (layer === 'retrieval' || layer === 'all') {\n if (output === 'console') {\n console.log('\\n' + colors.cyan('━'.repeat(60)));\n console.log(colors.bold('Layer 2: Retrieval Eval'));\n console.log(colors.cyan('━'.repeat(60)));\n }\n\n const queries = scenarioData?.queries || [\n { query: 'What topics can you help with?', expectedTopics: [] },\n ];\n\n const config = {\n assistantName: assistant!,\n queries,\n verbose,\n };\n\n const result = await evalModule.evaluateRetrieval(config);\n results.push({ layer: 'retrieval', result });\n\n if (output === 'console') {\n printEvalResult('Retrieval', result);\n }\n }\n\n // Run agent eval\n if (layer === 'agent' || layer === 'all') {\n const agentScenarios = scenarioData?.scenarios ? [...scenarioData.scenarios] : [];\n\n if (layer === 'agent' || endpoint || agentScenarios.length > 0) {\n if (output === 'console') {\n console.log('\\n' + colors.cyan('━'.repeat(60)));\n console.log(colors.bold('Layer 3: Agent Eval'));\n console.log(colors.cyan('━'.repeat(60)));\n }\n\n if (agentScenarios.length === 0 && endpoint) {\n // Create a simple test scenario\n agentScenarios.push({\n name: 'basic-test',\n initialQuery: 'Hello, can you help me?',\n expectedOutcome: 'answer',\n evaluation: { rubric: 'Agent should provide a helpful response.' },\n });\n }\n\n const config = {\n agentEndpoint: endpoint!,\n scenarios: agentScenarios,\n verbose,\n };\n\n const result = await evalModule.evaluateAgent(config);\n results.push({ layer: 'agent', result });\n\n if (output === 'console') {\n printEvalResult('Agent', result);\n }\n } else if (output === 'console') {\n console.log(colors.yellow('\\n⚠ Skipping agent eval (no endpoint or scenarios provided)'));\n }\n }\n\n // Output JSON if requested\n if (output === 'json') {\n const jsonOutput = results.length === 1 ? results[0].result : results;\n console.log(JSON.stringify(jsonOutput, null, 2));\n }\n\n // Print summary\n if (output === 'console') {\n printSummary(results);\n }\n}\n\nfunction printEvalResult(layerName: string, result: any): void {\n const status = result.passed ? colors.green('āœ“ PASSED') : colors.red('āœ— FAILED');\n const score = result.overallScore;\n\n console.log(`\\n${status} - Overall Score: ${formatScore(score)}/100`);\n console.log(colors.gray(`Duration: ${result.duration}ms`));\n\n // Print individual scores\n console.log('\\nScores:');\n for (const [name, value] of Object.entries(result.scores)) {\n const formattedName = name\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (s) => s.toUpperCase())\n .trim();\n const bar = createProgressBar(value as number, 20);\n console.log(` ${formattedName.padEnd(18)} ${bar} ${formatScore(value as number)}/100`);\n }\n\n // Print evidence summary\n if (result.evidence && result.evidence.length > 0) {\n console.log('\\nKey Findings:');\n for (const evidence of result.evidence.slice(0, 4)) {\n const icon = evidence.score >= 70 ? colors.green('āœ“') : colors.yellow('⚠');\n console.log(` ${icon} ${evidence.reasoning}`);\n }\n }\n}\n\nfunction printSummary(results: Array<{ layer: string; result: any }>): void {\n console.log('\\n' + colors.cyan('═'.repeat(60)));\n console.log(colors.bold('EVAL SUMMARY'));\n console.log(colors.cyan('═'.repeat(60)));\n\n const allPassed = results.every((r) => r.result.passed);\n const avgScore = results.reduce((sum, r) => sum + r.result.overallScore, 0) / results.length;\n\n console.log('\\n' + drawBox([\n `Overall: ${allPassed ? colors.green('PASSED') : colors.red('FAILED')}`,\n `Average Score: ${formatScore(avgScore)}/100`,\n '',\n ...results.map((r) => {\n const icon = r.result.passed ? 'āœ“' : 'āœ—';\n const color = r.result.passed ? colors.green : colors.red;\n return `${color(icon)} ${r.layer.charAt(0).toUpperCase() + r.layer.slice(1)}: ${r.result.overallScore}/100`;\n }),\n ], { borderColor: allPassed ? colors.green : colors.red, padding: 1 }));\n\n console.log('');\n}\n\nfunction formatScore(score: number): string {\n if (score >= 80) return colors.green(String(Math.round(score)));\n if (score >= 60) return colors.yellow(String(Math.round(score)));\n return colors.red(String(Math.round(score)));\n}\n\nfunction createProgressBar(value: number, width: number): string {\n const filled = Math.round((value / 100) * width);\n const empty = width - filled;\n const filledChar = value >= 70 ? colors.green('ā–ˆ') : value >= 50 ? colors.yellow('ā–ˆ') : colors.red('ā–ˆ');\n const emptyChar = colors.gray('ā–‘');\n return '[' + filledChar.repeat(filled) + emptyChar.repeat(empty) + ']';\n}\n\nfunction resolveScenarioPath(options: Pick<EvalOptions, 'scenarios' | 'baseline'>): string | null {\n if (options.scenarios) {\n return resolve(process.cwd(), options.scenarios);\n }\n\n if (options.baseline) {\n return resolve(process.cwd(), DEFAULT_BASELINE_SCENARIOS_PATH);\n }\n\n return null;\n}\n\nasync function loadScenarioBundle(scenarioPath: string): Promise<ScenarioBundle> {\n try {\n const content = await readFile(scenarioPath, 'utf-8');\n const parsed = JSON.parse(content) as unknown;\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('Scenario JSON must be an object');\n }\n\n return parsed as ScenarioBundle;\n } catch (error) {\n throw new Error(`Failed to load scenarios from ${scenarioPath}: ${error}`);\n }\n}\n"]}