{"version":3,"sources":["../src/config.ts","../src/providers.ts","../src/sessions.ts","../src/extensibility/telemetry/pricing.ts","../src/slash-commands.ts","../src/resolve.ts","../src/extensibility/permissions/policy.ts","../src/runtime/use-runtime.ts","../src/runtime/use-tool-permissions.ts","../src/runtime/use-session-meta.ts","../src/extensibility/hooks/runner.ts","../src/extensibility/hooks/shell-hooks.ts","../src/app/ChatApp.tsx","../src/commands/shared.ts","../src/extensibility/plugins/loader.ts","../src/extensibility/mcp/client.ts","../src/extensibility/mcp/bridge.ts","../src/commands/chat.ts","../src/run.ts","../src/run-ui.tsx","../src/commands/run.ts","../src/init.ts","../src/init-interactive.ts","../src/commands/init.ts","../src/doctor.ts","../src/commands/doctor.ts","../src/dev.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/tunnel.ts","../src/commands/tunnel.ts","../src/extensibility/rag/embedders.ts","../src/extensibility/rag/runner.ts","../src/commands/rag.ts","../src/ai/scaffold.ts","../src/ai/planner.ts","../src/commands/ai.ts","../src/commands/flow.ts","../src/pii.ts","../src/commands/pii.ts","../src/rules/cursor.ts","../src/rules/windsurf.ts","../src/rules/codex.ts","../src/rules/claude-code.ts","../src/rules.ts","../src/commands/rules.ts","../src/registry.ts","../src/components/scan.ts","../src/components/config.ts","../src/components/install.ts","../src/components/fetch.ts","../src/components/validate.ts","../src/components/marker.ts","../src/components/flow.ts","../src/components/node-fs.ts","../src/commands/add-component.ts","../src/commands/add.ts","../src/commands/registry-maintenance.ts","../src/commands/index.ts"],"names":["path","readFile","join","homedir","resolve","openai","anthropic","gemini","ollama","deepseek","grok","kimi","createHash","existsSync","randomBytes","readFileSync","writeFileSync","readdirSync","statSync","input","id","researcher","coder","planner","critic","summarizer","webSearch","fetchUrl","filesystem","shell","getIntegration","integrationToolsFromEnv","composeSkills","sqliteChatMemory","fileChatMemory","useState","useMemo","useRef","useEffect","spawn","useChat","jsxs","Box","jsx","StatusHeader","ChatContainer","Text","Message","ToolCallView","ToolConfirmation","ThinkingIndicator","InputBar","readdir","stat","isAbsolute","pathToFileURL","render","React","runtime","createRuntime","adapterImport","mkdir","writeFile","kleur","select","checkbox","confirm","providers","pathResolve","chokidar","basename","mkdirSync","fileVectorMemory","createRAG","glob","toolImports","toolList","dirname","validateAgentSchema","resolvePath","parseYaml","url","validateFlow","flowToMermaid","compileFlow","createFileStepLog","validatePIITaxonomy","ensureDir","ConfigError","ErrorCodes","i","j","sep","DEFAULT_REGISTRY","base","getText","rmSync","readme","Command"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEA,eAAe,eAAeA,KAAAA,EAAoD;AAChF,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAMC,iBAAA,CAASD,KAAAA,EAAM,MAAM,CAAA;AACvC,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAe,aAAaA,KAAAA,EAAoD;AAC9E,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAOA,KAAAA,CAAAA;AACzB,IAAA,OAAQ,IAAI,OAAA,IAAW,GAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAe,sBAAsB,GAAA,EAAmD;AACtF,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,MAAMC,iBAAA,CAASC,UAAK,GAAA,EAAK,cAAc,GAAG,MAAM,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,IAAI,GAAA,CAAI,SAAA,IAAa,OAAO,GAAA,CAAI,cAAc,QAAA,EAAU;AACtD,MAAA,OAAO,GAAA,CAAI,SAAA;AAAA,IACb;AACA,IAAA,OAAO,KAAA,CAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAYA,SAAS,YAAA,CACP,MACA,QAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,IAAI,CAAC,MAAM,OAAO,QAAA;AAClB,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,GAAG,SAAS,KAAA,EAAM;AAAA,IAC1C,UAAU,EAAE,GAAG,KAAK,QAAA,EAAU,GAAG,SAAS,QAAA,EAAS;AAAA,IACnD,SAAS,EAAE,GAAG,KAAK,OAAA,EAAS,GAAG,SAAS,OAAA,EAAQ;AAAA,IAChD,eAAe,EAAE,GAAG,KAAK,aAAA,EAAe,GAAG,SAAS,aAAA;AAAc,GACpE;AACF;AAEA,eAAe,gBAAgB,GAAA,EAAmD;AAChF,EAAA,MAAM,WAAW,MAAM,YAAA,CAAaA,SAAA,CAAK,GAAA,EAAK,sBAAsB,CAAC,CAAA;AACrE,EAAA,IAAI,UAAU,OAAO,QAAA;AAErB,EAAA,MAAM,aAAa,MAAM,cAAA,CAAeA,SAAA,CAAK,GAAA,EAAK,wBAAwB,CAAC,CAAA;AAC3E,EAAA,IAAI,YAAY,OAAO,UAAA;AAEvB,EAAA,OAAO,MAAM,sBAAsB,GAAG,CAAA;AACxC;AAEA,eAAe,iBAAiB,IAAA,EAAuE;AACrG,EAAA,IAAI,IAAA,KAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,MAAM,SAAA,GAAYA,SAAA,CAAK,IAAA,IAAQC,UAAA,IAAW,YAAY,CAAA;AACtD,EAAA,MAAM,WAAW,MAAM,YAAA,CAAaD,SAAA,CAAK,SAAA,EAAW,WAAW,CAAC,CAAA;AAChE,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,OAAO,MAAM,cAAA,CAAeA,SAAA,CAAK,SAAA,EAAW,aAAa,CAAC,CAAA;AAC5D;AAaA,eAAsB,WAAW,OAAA,EAAmE;AAClG,EAAA,MAAM,MAAME,YAAA,CAAQ,OAAA,EAAS,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,GAAG,CAAA;AACvC,EAAA,OAAO,YAAA,CAAa,QAAQ,KAAK,CAAA;AACnC;ACnIA,IAAM,SAAA,GAA2C;AAAA,EAC/C,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,IAC1B,YAAA,EAAc,aAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAMC,eAAA,CAAO,CAAC;AAAA,GAC1B;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,CAAC,mBAAmB,CAAA;AAAA,IAC7B,YAAA,EAAc,0BAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAMC,kBAAA,CAAU,CAAC;AAAA,GAC7B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,IAC1B,YAAA,EAAc,kBAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAMC,eAAA,CAAO,CAAC;AAAA,GAC1B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,SAAS,EAAC;AAAA,IACV,YAAA,EAAc,UAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAMC,eAAA,CAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS;AAAA,GAC/D;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,UAAA;AAAA,IACP,OAAA,EAAS,CAAC,kBAAkB,CAAA;AAAA,IAC5B,YAAA,EAAc,eAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAMC,iBAAA,CAAS,CAAC;AAAA,GAC5B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,UAAA;AAAA,IACP,OAAA,EAAS,CAAC,aAAa,CAAA;AAAA,IACvB,aAAA,EAAe,IAAA;AAAA,IACf,OAAA,EAAS,CAAC,CAAA,KAAMC,aAAA,CAAK,CAAC;AAAA,GACxB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,CAAC,cAAA,EAAgB,kBAAkB,CAAA;AAAA,IAC5C,aAAA,EAAe,IAAA;AAAA,IACf,OAAA,EAAS,CAAC,CAAA,KAAMC,aAAA,CAAK,CAAC;AAAA;AAE1B,CAAA;AAEA,SAAS,iBAAA,CAAkB,UAAkB,KAAA,EAAgC;AAC3E,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,EAAE,QAAA,EAAS,KAAM;AAC9B,MAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAmB;AACzB,UAAA,MAAM,eAAe,QAAA,CAAS,MAAA,CAAO,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,MAAM,CAAA;AACvE,UAAA,MAAM,WAAA,GAAc,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AACxD,UAAA,MAAM,KAAA,GAAQ;AAAA,YACZ,aAAa,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,KAAK,MAAM,EAAE,CAAA,CAAA,CAAA;AAAA,YAClD,yCAAA;AAAA,YACA,CAAA,UAAA,EAAa,WAAA,EAAa,OAAA,IAAW,EAAE,CAAA;AAAA,WACzC,CAAE,KAAK,GAAG,CAAA;AAEV,UAAA,KAAA,MAAW,SAAS,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA,IAAK,EAAC,EAAG;AACjD,YAAA,IAAI,SAAA,EAAW;AACf,YAAA,MAAM,IAAI,OAAA,CAAQ,CAAAP,aAAW,UAAA,CAAWA,QAAAA,EAAS,EAAE,CAAC,CAAA;AACpD,YAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAiB,OAAA,EAAS,KAAA,EAAM;AAAA,UAChD;AAEA,UAAA,MAAM,EAAE,MAAM,MAAA,EAAgB;AAAA,QAChC,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,SAAA,GAAY,IAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,SAAS,oBAAoB,OAAA,EAAoD;AACtF,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,CAAS,WAAA,EAAY;AAE1C,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,iBAAA,CAAkB,IAAA,EAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC9C,QAAA,EAAU,IAAA;AAAA,MACV,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,SAAA,GAAY,CAAC,MAAA,EAAQ,GAAG,MAAA,CAAO,KAAK,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC/D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,QAAQ,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACjF;AAGA,EAAA,IAAI,SAAS,OAAA,CAAQ,MAAA;AACrB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,OAAA,EAAS;AAC/B,MAAA,MAAA,GAAS,OAAA,CAAQ,IAAI,GAAG,CAAA;AACxB,MAAA,IAAI,MAAA,EAAQ;AAAA,IACd;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,IAAU,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AACzC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,MAAM,KAAK,CAAA,4CAAA,EAA+C,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACzF;AAGA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,KAAA,CAAM,YAAA;AACrC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,6CAAA,CAA+C,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,MAAA,EAAQ,MAAA,IAAU,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,IAChF,QAAA,EAAU,IAAA;AAAA,IACV,KAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,aAAA;AAAA,GACzB;AACF;AC3HA,IAAM,IAAA,GAAOF,SAAAA,CAAKC,UAAAA,EAAQ,EAAG,cAAc,UAAU,CAAA;AACrD,IAAM,WAAA,GAAc,YAAA;AAEpB,SAAS,OAAA,CAAQ,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAW;AACpD,EAAA,OAAOS,iBAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnE;AAEA,SAAS,MAAA,CAAO,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAW;AACnD,EAAA,OAAOV,SAAAA,CAAK,IAAA,EAAM,OAAA,CAAQ,GAAG,CAAC,CAAA;AAChC;AAEA,SAAS,UAAU,GAAA,EAAmB;AACpC,EAAA,IAAI,CAACW,cAAW,GAAG,CAAA,eAAa,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC1D;AAGO,SAAS,iBAAA,GAA4B;AAC1C,EAAA,MAAM,EAAA,GAAA,iBAAK,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACrE,EAAA,MAAM,MAAA,GAASC,kBAAA,CAAY,CAAC,CAAA,CAAE,SAAS,KAAK,CAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AACxB;AAEO,SAAS,eAAA,CAAgB,EAAA,EAAY,GAAA,GAAc,OAAA,CAAQ,KAAI,EAAW;AAC/E,EAAA,SAAA,CAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACrB,EAAA,OAAOZ,UAAK,MAAA,CAAO,GAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,KAAA,CAAO,CAAA;AACvC;AAEA,SAAS,QAAA,CAAS,EAAA,EAAY,GAAA,GAAc,OAAA,CAAQ,KAAI,EAAW;AACjE,EAAA,OAAOA,SAAAA,CAAK,OAAO,GAAG,CAAA,EAAG,GAAG,EAAE,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAChD;AAEA,SAAS,QAAA,CAAS,EAAA,EAAY,GAAA,GAAc,OAAA,CAAQ,KAAI,EAA2B;AACjF,EAAA,MAAMF,KAAAA,GAAO,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,CAACa,aAAA,CAAWb,KAAI,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAMe,eAAA,CAAaf,KAAAA,EAAM,MAAM,CAAC,CAAA;AAAA,EAC9C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,gBAAA,CAAiB,IAAA,EAAuB,GAAA,GAAc,OAAA,CAAQ,KAAI,EAAS;AACzF,EAAA,SAAA,CAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACrB,EAAAgB,gBAAA,CAAc,QAAA,CAAS,IAAA,CAAK,EAAA,EAAI,GAAG,CAAA,EAAG,KAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACrE;AAGO,SAAS,cAAc,QAAA,EAA4D;AACxF,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,MAAA,IAAU,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC1E,EAAA,IAAI,CAAC,WAAW,OAAO,SAAA;AACvB,EAAA,MAAM,SAAS,SAAA,CAAU,OAAA,CAAQ,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAC3D,EAAA,OAAO,MAAA,CAAO,SAAS,EAAA,GAAK,CAAA,EAAG,OAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAA,GAAM,MAAA;AAC1D;AAEO,SAAS,YAAA,CAAa,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAoB;AACzE,EAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,EAAA,IAAI,CAACH,aAAA,CAAW,GAAG,CAAA,SAAU,EAAC;AAE9B,EAAA,MAAM,OAAA,GAAUI,eAAY,GAAG,CAAA;AAC/B,EAAA,MAAM,UAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,MAAM,QAAA,CAAS,OAAO,KAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7D,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AACtC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAOf,SAAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAC5B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,CAAA;AAAA,IACvC,CAAA,MAAO;AAEL,MAAA,MAAM,KAAA,GAAQgB,YAAS,IAAI,CAAA;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,QAAA,EAAU;AAAA,UACR,EAAA;AAAA,UACA,GAAA;AAAA,UACA,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,WAAA,EAAY;AAAA,UACvC,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY;AAAA,UACnC,YAAA,EAAc,CAAA;AAAA,UACd,OAAA,EAAS;AAAA,SACX;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,QAAA,CAAS,SAAS,CAAC,CAAA;AAC/E,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,iBAAA,CAAkB,GAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,EAAyB;AACnF,EAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAC5B,EAAA,OAAO,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA;AACnB;AAEO,SAAS,WAAA,CAAY,EAAA,EAAY,GAAA,GAAc,OAAA,CAAQ,KAAI,EAAyB;AACzF,EAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,CAAS,EAAA,KAAO,EAAA,IAAM,CAAA,CAAE,QAAA,CAAS,KAAA,KAAU,EAAE,CAAA;AAC3E,EAAA,IAAI,OAAO,OAAO,KAAA;AAElB,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,QAAA,CAAS,EAAA,CAAG,UAAA,CAAW,EAAE,CAAC,CAAA;AACzD,EAAA,OAAO,MAAA,IAAU,IAAA;AACnB;AAGO,SAAS,cACd,EAAA,EACA,KAAA,EACA,GAAA,GAAc,OAAA,CAAQ,KAAI,EACT;AACjB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,EAAA,EAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,EAAE,CAAA,EAAA,CAAI,CAAA;AAC3D,EAAA,MAAM,IAAA,GAAwB,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,KAAA,EAAO,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAE;AAC/F,EAAA,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAC1B,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,WAAA,CACd,EAAA,EACA,GAAA,GAAc,OAAA,CAAQ,KAAI,EACT;AACjB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,EAAA,EAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,EAAE,CAAA,EAAA,CAAI,CAAA;AAE3D,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,EAAO,GAAG,CAAA;AAE1C,EAAA,IAAIL,aAAA,CAAW,MAAA,CAAO,IAAI,CAAA,EAAG;AAC3B,IAAAG,gBAAA,CAAc,OAAA,EAASD,eAAA,CAAa,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,EAAA,gBAAA;AAAA,IACE;AAAA,MACE,GAAG,MAAA,CAAO,QAAA;AAAA,MACV,EAAA,EAAI,KAAA;AAAA,MACJ,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY,OAAO,QAAA,CAAS,EAAA;AAAA,MAC5B,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,OAAO,IAAA,EAAK;AACjD;AAwBO,SAAS,eAAeI,MAAAA,EAA6C;AAC1E,EAAA,MAAM,GAAA,GAAMA,MAAAA,CAAM,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAErC,EAAA,IAAIA,OAAM,YAAA,EAAc;AACtB,IAAA,OAAO,EAAE,EAAA,EAAI,QAAA,EAAU,IAAA,EAAMA,MAAAA,CAAM,YAAA,EAAc,KAAA,EAAO,CAACN,aAAA,CAAWM,MAAAA,CAAM,YAAY,CAAA,EAAE;AAAA,EAC1F;AAEA,EAAA,IAAIA,OAAM,QAAA,EAAU;AAClB,IAAA,MAAMC,MAAK,iBAAA,EAAkB;AAC7B,IAAA,OAAO,EAAE,IAAAA,GAAAA,EAAI,IAAA,EAAM,gBAAgBA,GAAAA,EAAI,GAAG,CAAA,EAAG,KAAA,EAAO,IAAA,EAAK;AAAA,EAC3D;AAEA,EAAA,IAAID,OAAM,QAAA,EAAU;AAClB,IAAA,MAAM,MAAA,GAASA,MAAAA,CAAM,QAAA,KAAa,IAAA,GAC9B,iBAAA,CAAkB,GAAG,CAAA,GACrB,WAAA,CAAYA,MAAAA,CAAM,QAAA,EAAU,GAAG,CAAA;AACnC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,EAAE,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM;AAAA,IACnE;AAGA,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,qBAAA,EAAwB,MAAA,CAAOA,MAAAA,CAAM,QAAQ,CAAC,CAAA;AAAA;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,kBAAkB,GAAG,CAAA;AACpC,EAAA,IAAI,MAAA,EAAQ,OAAO,EAAE,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,EAAA,EAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM;AAE7E,EAAA,MAAM,KAAK,iBAAA,EAAkB;AAC7B,EAAA,OAAO,EAAE,IAAI,IAAA,EAAM,eAAA,CAAgB,IAAI,GAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAC3D;;;ACjOA,IAAM,cAAA,GAA+C;AAAA,EACnD,QAAA,EAAU,EAAE,SAAA,EAAW,GAAA,EAAK,YAAY,EAAA,EAAG;AAAA,EAC3C,aAAA,EAAe,EAAE,SAAA,EAAW,IAAA,EAAM,YAAY,GAAA,EAAI;AAAA,EAClD,SAAA,EAAW,EAAE,SAAA,EAAW,CAAA,EAAG,YAAY,CAAA,EAAE;AAAA,EACzC,cAAA,EAAgB,EAAE,SAAA,EAAW,GAAA,EAAK,YAAY,GAAA,EAAI;AAAA,EAClD,eAAA,EAAiB,EAAE,SAAA,EAAW,EAAA,EAAI,YAAY,EAAA,EAAG;AAAA,EACjD,iBAAA,EAAmB,EAAE,SAAA,EAAW,CAAA,EAAG,YAAY,EAAA,EAAG;AAAA,EAClD,gBAAA,EAAkB,EAAE,SAAA,EAAW,GAAA,EAAK,YAAY,CAAA,EAAE;AAAA,EAClD,gBAAA,EAAkB,EAAE,SAAA,EAAW,IAAA,EAAM,YAAY,EAAA,EAAG;AAAA,EACpD,kBAAA,EAAoB,EAAE,SAAA,EAAW,GAAA,EAAK,YAAY,GAAA;AACpD,CAAA;AAEA,IAAM,gBAA8C,EAAC;AAE9C,SAAS,eAAA,CAAgB,OAAe,OAAA,EAA6B;AAC1E,EAAA,aAAA,CAAc,KAAK,CAAA,GAAI,OAAA;AACzB;AAEO,SAAS,WAAW,KAAA,EAAqD;AAC9E,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG,OAAO,cAAc,KAAK,CAAA;AACpD,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,eAAe,KAAK,CAAA;AAEtD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,GAAK,KAAA;AAC9D,EAAA,OAAO,aAAA,CAAc,KAAK,CAAA,IAAK,cAAA,CAAe,KAAK,CAAA;AACrD;AAeO,SAAS,WAAA,CACd,OACA,KAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,OAAA,GAAU,WAAW,KAAK,CAAA;AAChC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,MAAM,QAAA,GAAY,KAAA,CAAM,YAAA,GAAe,GAAA,GAAa,OAAA,CAAQ,SAAA;AAC5D,EAAA,MAAM,SAAA,GAAa,KAAA,CAAM,gBAAA,GAAmB,GAAA,GAAa,OAAA,CAAQ,UAAA;AACjE,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAU,QAAA,GAAW;AAAA,GACvB;AACF;;;ACvBO,SAAS,kBAAkBA,MAAAA,EAAsD;AACtF,EAAA,IAAI,CAACA,MAAAA,CAAM,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AACnC,EAAA,MAAM,QAAQA,MAAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,qBAAqB,CAAA;AACxD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,MAAM,KAAA,CAAM,CAAC,GAAG,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAG;AAChD;AAEO,SAAS,oBAAoB,QAAA,EAAqD;AACvF,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAC1C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACrB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAI,OAAA,IAAW,IAAI,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,GAAA;AACT;AAOO,IAAM,oBAAA,GAAuC;AAAA,EAClD;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAC,GAAG,CAAA;AAAA,IACb,WAAA,EAAa,gCAAA;AAAA,IACb,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,KAAA,MAAW,GAAA,IAAO,IAAI,QAAA,EAAU;AAC9B,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA;AACjB,QAAA,MAAM,SAAS,GAAA,CAAI,KAAA,GAAQ,CAAA,GAAA,EAAM,GAAA,CAAI,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AAChD,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,WAAW,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,MACpE;AACA,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA;AAAA,EAAoB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,IAAI,MAAM,CAAA;AAAA,IAC7D;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,0BAAA;AAAA,IACb,KAAA,EAAO,eAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,GAAA,CAAI,QAAA;AAAA,UACF,CAAA,eAAA,EAAkB,GAAA,CAAI,OAAA,CAAQ,KAAA,IAAS,OAAO,CAAA,sBAAA,CAAA;AAAA,UAC9C;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,SAAS,KAAK,CAAA;AAClB,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA,aAAA,EAAW,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,IAC5C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,KAAA,EAAO,kEAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,GAAA,CAAI,QAAA;AAAA,UACF,CAAA,kBAAA,EAAqB,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,yBAAA,CAAA;AAAA,UACzC;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,YAAY,KAAK,CAAA;AACrB,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA,gBAAA,EAAc,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,IAC/C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,CAAC,SAAS,CAAA;AAAA,IACnB,WAAA,EAAa,6BAAA;AAAA,IACb,KAAA,EAAO,uBAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,OAAA,EAAS;AAC/B,QAAA,GAAA,CAAI,WAAW,MAAS,CAAA;AACxB,QAAA,GAAA,CAAI,QAAA,CAAS,qBAAqB,SAAS,CAAA;AAC3C,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,WAAW,KAAK,CAAA;AACpB,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA,gBAAA,EAAc,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,IAC/C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,mDAAA;AAAA,IACb,KAAA,EAAO,4CAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,OAAA,EAAS;AAC/B,QAAA,GAAA,CAAI,SAAS,MAAS,CAAA;AACtB,QAAA,GAAA,CAAI,QAAA,CAAS,4BAA4B,SAAS,CAAA;AAClD,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,SAAS,KAAK,CAAA;AAClB,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA,aAAA,EAAW,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,IAC5C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,sDAAA;AAAA,IACb,KAAA,EAAO,wCAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,OAAA,EAAS;AAC/B,QAAA,GAAA,CAAI,SAAS,MAAS,CAAA;AACtB,QAAA,GAAA,CAAI,QAAA,CAAS,mBAAmB,SAAS,CAAA;AACzC,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,SAAS,KAAK,CAAA;AAClB,MAAA,GAAA,CAAI,QAAA,CAAS,CAAA,cAAA,EAAY,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,IAC7C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,CAAC,OAAO,CAAA;AAAA,IACjB,WAAA,EAAa,iDAAA;AAAA,IACb,MAAM,IAAI,GAAA,EAAK;AACb,MAAA,MAAM,GAAA,CAAI,KAAK,KAAA,EAAM;AACrB,MAAA,GAAA,CAAI,QAAA,CAAS,oBAAoB,SAAS,CAAA;AAAA,IAC5C;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,mDAAA;AAAA,IACb,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA;AACvB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,WAAA,KAAgB,CAAA,EAAG;AACrC,QAAA,GAAA,CAAI,QAAA,CAAS,2CAA2C,MAAM,CAAA;AAC9D,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,QAAA;AAAA,QACF,CAAA,qBAAA,EAAmB,MAAM,YAAY,CAAA,aAAA,EAAgB,MAAM,gBAAgB,CAAA,QAAA,EAAW,MAAM,WAAW,CAAA,CAAA;AAAA,QACvG;AAAA,OACF;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,iDAAA;AAAA,IACb,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA;AACvB,MAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAQ,KAAA;AAC1B,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,WAAA,KAAgB,CAAA,EAAG;AACrC,QAAA,GAAA,CAAI,QAAA,CAAS,2CAA2C,MAAM,CAAA;AAC9D,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,EAAO,KAAK,CAAA;AACrC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,GAAA,CAAI,QAAA;AAAA,UACF,CAAA,iCAAA,EAAoC,SAAS,OAAO,CAAA,iEAAA,CAAA;AAAA,UACpD;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,QAAA;AAAA,QACF,CAAA,CAAA,EAAI,KAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,YAAA,EAAe,KAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,EAAU,KAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,QAAA,EAAW,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,QAC3H;AAAA,OACF;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,KAAA,EAAO,iBAAA;AAAA,IACP,GAAA,CAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,SAAA;AAC9B,MAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,QAAA,EAAU;AACxC,QAAA,GAAA,CAAI,QAAA,CAAS,kDAAkD,MAAM,CAAA;AACrE,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,GAAA,CAAI,QAAA,CAAS,0BAA0B,MAAM,CAAA;AAC7C,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,aAAA,CAAc,WAAW,KAAK,CAAA;AAC9B,QAAA,GAAA,CAAI,QAAA,CAAS,CAAA,iBAAA,EAAoB,KAAK,CAAA,EAAA,CAAA,EAAM,SAAS,CAAA;AAAA,MACvD,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,CAAA,gBAAA,EAAmB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,UAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,MAC7F;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,8DAAA;AAAA,IACb,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,SAAA;AAC9B,MAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,QAAA,EAAU;AACxC,QAAA,GAAA,CAAI,QAAA,CAAS,gDAAgD,MAAM,CAAA;AACnE,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,YAAY,SAAS,CAAA;AACpC,QAAA,GAAA,CAAI,QAAA;AAAA,UACF,CAAA,YAAA,EAAe,OAAO,EAAE,CAAA;AAAA,0BAAA,EAA6C,OAAO,EAAE,CAAA,CAAA;AAAA,UAC9E;AAAA,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,GAAA,CAAI,QAAA,CAAS,CAAA,cAAA,EAAiB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,UAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,MAC3F;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAC,MAAA,EAAQ,GAAG,CAAA;AAAA,IACrB,WAAA,EAAa,gBAAA;AAAA,IACb,GAAA,GAAM;AACJ,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA;AAEJ,CAAA;AC9PO,IAAM,aAAA,GAAiD;AAAA,cAC5DE,iBAAA;AAAA,SACAC,YAAA;AAAA,WACAC,cAAA;AAAA,UACAC,aAAA;AAAA,cACAC;AACF,CAAA;AAWA,SAAS,YAAY,IAAA,EAAkC;AACrD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAA;AACH,MAAA,OAAO,CAACC,iBAAW,CAAA;AAAA,IACrB,KAAK,WAAA;AACH,MAAA,OAAO,CAACC,gBAAU,CAAA;AAAA,IACpB,KAAK,YAAA;AACH,MAAA,OAAOC,iBAAW,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,IAAO,CAAA;AAAA,IAC/C,KAAK,OAAA;AAIH,MAAA,OAAO,CAACC,YAAM,EAAE,OAAA,EAAS,KAAQ,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AAAA;AAExD;AAEA,SAAS,SAAS,IAAA,EAAsC;AAEtD,EAAA,IAAI,IAAA,CAAK,oBAAA,KAAyB,KAAA,EAAO,OAAO,IAAA;AAChD,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAK;AAC/C;AAYO,SAAS,aAAa,SAAA,EAAiD;AAC5E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,CAAC,GAAG,WAAA,CAAY,YAAY,CAAA,EAAG,GAAG,WAAA,CAAY,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,EAAG;AAC1E,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,YAAA;AAAA,MACL,KAAK,WAAA;AAAA,MACL,KAAK,YAAA;AAAA,MACL,KAAK,OAAA;AACH,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAC/B,QAAA;AAAA,MACF,SAAS;AAGP,QAAA,IAAIC,2BAAA,CAAe,IAAI,CAAA,EAAG;AACxB,UAAA,MAAM,EAAE,OAAO,SAAA,EAAW,eAAA,EAAiB,QAAO,GAAIC,oCAAA,CAAwB,IAAA,EAAM,OAAA,CAAQ,GAAG,CAAA;AAC/F,UAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,YAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,aAAA,EAAgB,IAAI,WAAW,MAAM,CAAA;AAAA,CAA4B,CAAA;AAAA,UACxF;AACA,UAAA,KAAA,CAAM,IAAA,CAAK,GAAG,SAAS,CAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,cAAA,EAAiB,IAAI;AAAA,CAAI,CAAA;AAAA,QAChD;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,aAAa,SAAA,EAA4D;AACvF,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,SAAA,CAAU,IAAA,EAAM,CAAA;AAC5C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,SAAS;AAAA,CAAI,CAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,UAAA,EAA6D;AACzF,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,EAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,cAAc,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAChE,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,0BAAA,EAA6B,UAAU;AAAA,CAAI,CAAA;AAChE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,SAAS,CAAC,CAAA;AAC5C,EAAA,OAAOC,oBAAA,CAAc,GAAG,QAAQ,CAAA;AAClC;AAEO,SAAS,aAAA,CAAc,SAA6B,UAAA,EAAgC;AACzF,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,QAAA;AACH,MAAA,OAAOC,uBAAA,CAAiB,EAAE,IAAA,EAAM,UAAA,CAAW,QAAQ,SAAA,EAAW,KAAK,GAAG,CAAA;AAAA,IACxE,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAOC,sBAAe,UAAU,CAAA;AAAA;AAEtC;;;ACxGO,IAAM,aAAA,GAAkC;AAAA,EAC7C,IAAA,EAAM,SAAA;AAAA,EACN,OAAO;AACT;AAUO,SAAS,cAAA,CAAe,QAA0B,QAAA,EAAoC;AAC3F,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,mBAAA,EAAqB,OAAO,OAAA;AAChD,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAQ,OAAO,KAAA;AAEnC,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,IAAA,IAAI,WAAA,CAAY,IAAA,EAAM,QAAQ,CAAA,SAAU,IAAA,CAAK,MAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,OAAO,IAAA,KAAS,aAAA,IAAiB,6BAAA,CAA8B,IAAA,CAAK,QAAQ,CAAA,EAAG;AACjF,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CAAY,MAAsB,QAAA,EAA2B;AACpE,EAAA,IAAI,KAAK,IAAA,YAAgB,MAAA,SAAe,IAAA,CAAK,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC/D,EAAA,MAAM,MAAM,IAAA,CAAK,IAAA;AACjB,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,IAAI,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,KAAK,QAAQ,CAAA;AACxE,EAAA,OAAO,GAAA,KAAQ,QAAA;AACjB;AAOO,SAAS,iBAAA,CACd,QACA,IAAA,EACuB;AACvB,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAC/C,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,IAAA;AAC9B,EAAA,IAAI,WAAW,OAAA,EAAS,OAAO,EAAE,GAAG,IAAA,EAAM,sBAAsB,KAAA,EAAM;AACtE,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAK;AAC/C;AAGO,SAAS,kBAAA,CACd,QACA,KAAA,EACkB;AAClB,EAAA,MAAM,MAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,EAAQ,IAAI,CAAA;AAC5C,IAAA,IAAI,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,GAAA;AACT;;;AC7DO,SAAS,WAAW,OAAA,EAA4B;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAA,CAAS,QAAQ,QAAQ,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAA,CAAS,QAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAA,CAAS,QAAQ,MAAM,CAAA;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAA,CAAS,QAAQ,OAAO,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAA,CAA6B,QAAQ,KAAK,CAAA;AAC5E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAA,CAA6B,QAAQ,KAAK,CAAA;AAE5E,EAAA,MAAM,OAAA,GAAUC,cAAA;AAAA,IACd,MAAM,mBAAA,CAAoB,EAAE,UAAU,KAAA,EAAO,MAAA,EAAQ,SAAS,CAAA;AAAA,IAC9D,CAAC,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,OAAO;AAAA,GACnC;AAEA,EAAA,MAAM,MAAA,GAASA,cAAA;AAAA,IACb,MAAM,aAAA,CAAc,OAAA,CAAQ,aAAA,EAAe,OAAA,CAAQ,cAAc,yBAAyB,CAAA;AAAA,IAC1F,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,aAAa;AAAA,GAC5C;AAEA,EAAA,MAAM,KAAA,GAAQA,eAAQ,MAAM;AAC1B,IAAA,MAAM,QAAA,GAAW,aAAa,SAAS,CAAA;AACvC,IAAA,IAAI,CAAC,OAAA,CAAQ,gBAAA,EAAkB,OAAO,QAAA;AACtC,IAAA,OAAO,kBAAA,CAAmB,OAAA,CAAQ,gBAAA,EAAkB,QAAQ,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,SAAA,EAAW,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAExC,EAAA,MAAM,MAAA,GAASA,eAAQ,MAAM;AAC3B,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA;AACpD,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,cAAc,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAChE,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAClC,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAO,EAAE,QAAA,EAAU,OAAO,MAAA,EAAQ,OAAA,EAAS,WAAW,SAAA,EAAU;AAAA,IAChE,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AC5DO,SAAS,mBAAmB,IAAA,EAAkB;AACnD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,IAAID,eAAAA,iBAAsB,IAAI,KAAK,CAAA;AAC3E,EAAA,MAAM,eAAA,GAAkBE,aAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAErD,EAAAC,gBAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC/B,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,SAAA,IAAa,EAAC,EAAG;AAC1C,QAAA,IACE,IAAA,CAAK,MAAA,KAAW,uBAAA,IAChB,cAAA,CAAe,IAAI,IAAA,CAAK,IAAI,CAAA,IAC5B,CAAC,eAAA,CAAgB,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EACpC;AACA,UAAA,eAAA,CAAgB,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACnC,UAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,IAAA,CAAK,UAAU,cAAA,EAAgB,IAAA,CAAK,OAAO,CAAC,CAAA;AAEhD,EAAA,MAAM,mBAAA,GAAsB,CAAC,UAAA,EAAoB,QAAA,KAAqB;AACpE,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AACxB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,IAAA;AAC/B,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,IAAI,QAAQ,CAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,eAAA,CAAgB,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtC,IAAA,KAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuBF,cAAAA;AAAA,IAC3B,MACE,KAAK,QAAA,CAAS,IAAA;AAAA,MAAK,CAAA,OAAA,KACjB,QAAQ,SAAA,EAAW,IAAA;AAAA,QACjB,CAAA,IAAA,KAAQ,KAAK,MAAA,KAAW,uBAAA,IAA2B,CAAC,cAAA,CAAe,GAAA,CAAI,KAAK,IAAI;AAAA;AAClF,KACF;AAAA,IACF,CAAC,IAAA,CAAK,QAAA,EAAU,cAAc;AAAA,GAChC;AAEA,EAAA,OAAO,EAAE,cAAA,EAAgB,mBAAA,EAAqB,oBAAA,EAAqB;AACrE;AClCO,SAAS,eAAe,OAAA,EAAgC;AAC7D,EAAA,MAAM,mBAAA,GAAsBC,cAA2B,MAAS,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,QAAQ,QAAA,CAAS,MAAA;AACtC,EAAA,MAAM,gBAAA,GAAmB,QAAQ,QAAA,CAAS,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,EAAG,OAAA,IAAW,EAAA;AAEnF,EAAAC,iBAAU,MAAM;AACd,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,QAAA,EAAU;AAC1C,IAAA,IAAI,CAAC,oBAAoB,OAAA,EAAS;AAChC,MAAA,mBAAA,CAAoB,OAAA,GAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IACvD;AACA,IAAA,IAAI;AACF,MAAA,gBAAA,CAAiB;AAAA,QACf,EAAA,EAAI,SAAA;AAAA,QACJ,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,QACjB,WAAW,mBAAA,CAAoB,OAAA;AAAA,QAC/B,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,YAAA;AAAA,QACA,OAAA,EAAS,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACvC,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ;AAAA,OAChB,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EAEF,CAAA,EAAG,CAAC,OAAA,CAAQ,SAAA,EAAW,YAAA,EAAc,kBAAkB,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzF;;;ACnBO,IAAM,iBAAN,MAAqB;AAAA,EAG1B,WAAA,CACE,WAA0B,EAAC,EACV,UAAwD,CAAC,EAAA,EAAI,GAAA,KAC5E,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IACb,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,GAC7E,EACF;AAJiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAJnB,IAAA,IAAA,CAAiB,QAAA,uBAAe,GAAA,EAA8B;AAS5D,IAAA,KAAA,MAAW,OAAA,IAAW,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAAA,EACvD;AAAA,EAEA,SAAS,OAAA,EAA4B;AACnC,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,IAAI,OAAA,CAAQ,KAAK,KAAK,EAAC;AAClD,IAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AACjB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AAAA,EACvC;AAAA,EAEA,MAAM,QAAA,CAAS,KAAA,EAAkB,OAAA,EAAmD;AAClF,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,KAAK,EAAC;AAC1C,IAAA,IAAI,OAAA,GAAuB,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM;AAE/C,IAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,EAAG;AAErC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAAA,MACpC,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,GAAG,CAAA;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,aAAa,OAAA,EAAS;AAC/B,QAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,SAAS,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,MAClE;AACA,MAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAChC,QAAA,OAAA,GAAU,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,KAAA,EAAM;AAAA,MACvC;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM;AAAA,EAC5C;AAAA,EAEQ,OAAA,CAAQ,SAAsB,OAAA,EAA+B;AACnE,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAS,OAAO,IAAA;AAC7B,IAAA,IAAI,OAAO,OAAA,CAAQ,OAAA,KAAY,YAAY,OAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACzE,IAAA,OAAO,OAAA,CAAQ,QAAQ,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,IAAQ,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAC,CAAA;AAAA,EAC1E;AACF;AC7CO,SAAS,sBAAsB,MAAA,EAAmD;AACvF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAA4C;AAC9F,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,KAAA;AAAA,QACA,SAAS,KAAA,CAAM,OAAA,GAAU,IAAI,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAAA,QACrD,GAAA,EAAK,CAAC,OAAA,KAAY,YAAA,CAAa,OAAO,OAAO;AAAA,OAC9C,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAA,CAAa,OAAwB,OAAA,EAA2C;AACvF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,cAAA,KAAmB;AACrC,IAAA,MAAM,SAAA,GAAY,MAAM,OAAA,IAAW,GAAA;AACnC,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,MAAA,GAAS,CAAC,MAAA,KAAuB;AACrC,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,MAAM,QAAQC,mBAAA,CAAM,IAAA,EAAM,CAAC,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA,EAAG;AAAA,MAC3C,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA;AAAA,MACjC,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjC,MAAA,MAAA,IAAU,MAAM,QAAA,EAAS;AAAA,IAC3B,CAAC,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAG7B,MAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,EAAW;AAC3B,QAAA,IAAI;AAAE,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,CAAM,GAAA,EAAK,SAAS,CAAA;AAAA,QAAE,CAAA,CAAA,MAAQ;AAAA,QAAkC;AAAA,MACtF;AACA,MAAA,IAAI;AAAE,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,MAAE,CAAA,CAAA,MAAQ;AAAA,MAAe;AACnD,MAAA,MAAA,CAAO,EAAE,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAA,2BAAA,EAA8B,SAAS,MAAM,CAAA;AAAA,IACnF,GAAG,SAAS,CAAA;AAEZ,IAAA,KAAA,CAAM,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,MAAM;AAAA,IAAoD,CAAC,CAAA;AAEnF,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,MAAA,CAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,MAAA,EAAQ,+BAA+B,IAAI,CAAA;AAAA,SAC5C,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAA,CAAO,EAAE,QAAA,EAAU,UAAA,EAAY,CAAA;AAC/B,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,MAAA,CAAO,MAAM,CAAA;AAAA,MACf,CAAA,CAAA,MAAQ;AAEN,QAAA,MAAA,CAAO,EAAE,QAAA,EAAU,UAAA,EAAY,CAAA;AAAA,MACjC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AACzB,MAAA,MAAA,CAAO,EAAE,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,GAAA,CAAI,SAAS,CAAA;AAAA,IACnD,CAAC,CAAA;AAED,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AACzC,MAAA,KAAA,CAAM,MAAM,GAAA,EAAI;AAAA,IAClB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAC,CAAA;AACH;AC/CO,SAAS,eAAe,QAAA,EAA0C;AACvE,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,IAAI,UAAyB,EAAC;AAC9B,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,OAAO,CAAA;AAC1C,MAAA,OAAA,GAAU,CAAC,OAAO,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU;AACpC,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,OAAO,CAAA;AAC1C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,OAAO,CAAC,CAAA;AACpB,MAAA,OAAA,GAAU,EAAC;AAAA,IACb,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,OAAO,CAAA;AAC1C,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,QAAQ,OAAA,EAA6B;AACnD,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAAU;AAAA,IACvC,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,OAAO,CAAA;AAEtB,EAAA,MAAM,WAAA,GAAcH,eAAQ,MAAM;AAChC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,UAAA,IAAc,EAAC;AACrC,IAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,KAAK,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,KAAA,EAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AAE9B,EAAA,MAAM,YAAA,GAAeA,eAAQ,MAAM;AACjC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,WAAA,IAAe,EAAC;AACtC,IAAA,IAAI,CAAC,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,MAAA;AAC1C,IAAA,OAAO,CAAC,GAAI,MAAA,IAAU,EAAC,EAAI,GAAG,KAAK,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEhC,EAAA,MAAM,OAAOI,WAAA,CAAQ;AAAA,IACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAA;AAAA,IACA,cAAc,OAAA,CAAQ,MAAA;AAAA,IACtB,KAAA,EAAO,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,WAAA,GAAc,MAAA;AAAA,IAC9C,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,cAAA,EAAgB,mBAAA,EAAqB,oBAAA,EAAqB,GAAI,mBAAmB,IAAI,CAAA;AAE7F,EAAA,cAAA,CAAe;AAAA,IACb,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,OAAO,OAAA,CAAQ;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,KAAA,GAAQJ,cAAAA,CAAQ,MAAM,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,EAAG,CAAC,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAA,GAAY,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA,CAAO,OAAO,IAAI,EAAC;AAEzF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAID,gBAAyD,IAAI,CAAA;AAE7F,EAAA,MAAM,cAAA,GAAiBC,cAAAA;AAAA,IACrB,MAAM,IAAI,cAAA,CAAe,OAAA,CAAQ,YAAA,IAAgB,EAAE,CAAA;AAAA,IACnD,CAAC,QAAQ,YAAY;AAAA,GACvB;AAEA,EAAAE,iBAAU,MAAM;AACd,IAAA,KAAK,cAAA,CAAe,SAAS,cAAA,EAAgB;AAAA,MAC3C,KAAA,EAAO,cAAA;AAAA,MACP,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,KAAK,cAAA,CAAe,SAAS,YAAA,EAAc;AAAA,QACzC,KAAA,EAAO,YAAA;AAAA,QACP,WAAW,OAAA,CAAQ;AAAA,OACpB,CAAA;AAAA,IACH,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,aAAA,GAAgBF,cAAAA;AAAA,IACpB,MAAM,CAAC,GAAG,oBAAA,EAAsB,GAAI,OAAA,CAAQ,aAAA,IAAiB,EAAG,CAAA;AAAA,IAChE,CAAC,QAAQ,aAAa;AAAA,GACxB;AACA,EAAA,MAAM,aAAA,GAAgBA,eAAQ,MAAM,mBAAA,CAAoB,aAAa,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAEvF,EAAA,MAAM,iBAAA,GAAoB,OAAO,GAAA,KAAkC;AACjE,IAAA,MAAM,MAAA,GAAS,kBAAkB,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,QAAA,CAAS,kBAAA,EAAoB;AAAA,QACnE,KAAA,EAAO,kBAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY;AAAA,UACV,OAAA,EAAS,CAAA,gBAAA,EAAmB,UAAA,CAAW,MAAA,IAAU,cAAc,CAAA,CAAA;AAAA,UAC/D,IAAA,EAAM;AAAA,SACP,CAAA;AACD,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AACzC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,WAAA,CAAY;AAAA,QACV,OAAA,EAAS,CAAA,kBAAA,EAAqB,MAAA,CAAO,IAAI,CAAA,0BAAA,CAAA;AAAA,QACzC,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAA2B;AAAA,MAC/B,IAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,OAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO,SAAA;AAAA,QACP,WAAW,OAAA,CAAQ;AAAA,OACrB;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,QAAA,EAAU,YAAA;AAAA,MACV,QAAA,EAAU,CAAC,OAAA,EAAS,IAAA,GAAO,WAAW,WAAA,CAAY,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,MACnE,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,IAAI,CAAA;AAAA,IAChC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,YAAY,OAAO,CAAA,CAAA,EAAI,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,IAC9E;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,uBACEK,eAAA,CAACC,SAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,KAAK,CAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACC,gBAAA;AAAA,MAAA;AAAA,QACC,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,KAAA,EAAO,SAAA;AAAA,QACP,YAAA,EAAc,KAAK,QAAA,CAAS,MAAA;AAAA,QAC5B,WAAW,OAAA,CAAQ;AAAA;AAAA,KACrB;AAAA,mCAECC,iBAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,OAAA,KAAY;AAC5B,MAAA,MAAM,iBAAiB,IAAA,CAAK,MAAA,CAAO,OAAK,CAAA,CAAE,IAAA,KAAS,WAAW,CAAA,CAAE,MAAA;AAChE,MAAA,IAAI,SAAA,GAAY,CAAA;AAChB,MAAA,uBACEF,cAAA,CAACD,aAA4B,aAAA,EAAc,QAAA,EAAS,KAAK,CAAA,EACtD,QAAA,EAAA,IAAA,CAAK,IAAI,CAAA,OAAA,KAAW;AACnB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,cAAA,GAAiB,CAAA;AAClE,QAAA,IAAI,QAAA,EAAU,SAAA,EAAA;AACd,QAAA,uBACED,eAAA,CAACC,SAAA,EAAA,EAAqB,aAAA,EAAc,QAAA,EACjC,QAAA,EAAA;AAAA,UAAA,QAAA,mBACCD,eAAA,CAACK,UAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,YAAA,cAAA;AAAA,YAAQ,SAAA;AAAA,YAAU,GAAA;AAAA,YAAE;AAAA,WAAA,EAAe,CAAA,GAChD,IAAA;AAAA,0BACJH,cAAA,CAACI,eAAQ,OAAA,EAAkB,CAAA;AAAA,UAC1B,OAAA,CAAQ,WAAW,GAAA,CAAI,CAAC,6BACvBN,eAAA,CAACC,SAAA,EAAA,EAAsB,eAAc,QAAA,EACnC,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAACK,gBAAA,EAAA,EAAa,QAAA,EAAoB,QAAA,EAAQ,IAAA,EAAC,CAAA;AAAA,YAC1C,QAAA,CAAS,WAAW,uBAAA,IACrB,CAAC,eAAe,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,mBAC/BL,cAAA;AAAA,cAACM,oBAAA;AAAA,cAAA;AAAA,gBACC,QAAA;AAAA,gBACA,WAAW,IAAA,CAAK,OAAA;AAAA,gBAChB,QAAQ,IAAA,CAAK,IAAA;AAAA,gBACb,eAAA,EAAiB;AAAA;AAAA,aACnB,GACE;AAAA,WAAA,EAAA,EAVI,QAAA,CAAS,EAWnB,CACD;AAAA,SAAA,EAAA,EAlBO,QAAQ,EAmBlB,CAAA;AAAA,MAEJ,CAAC,CAAA,EAAA,EA1BO,CAAA,KAAA,EAAQ,OAAO,CAAA,CA2BzB,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAEAN,cAAA;AAAA,MAACO,qBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,KAAK,MAAA,KAAW,WAAA;AAAA,QACzB,KAAA,EAAO,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,eAAA,GAAkB;AAAA;AAAA,KAClD;AAAA,IAEC,IAAA,CAAK,KAAA,mBACJT,eAAA,CAACC,SAAA,EAAA,EAAI,WAAA,EAAY,OAAA,EAAQ,WAAA,EAAY,KAAA,EAAM,QAAA,EAAU,CAAA,EAAG,aAAA,EAAc,QAAA,EACpE,QAAA,EAAA;AAAA,sBAAAD,eAAA,CAACK,UAAA,EAAA,EAAK,KAAA,EAAM,KAAA,EAAM,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QAAG,IAAA,CAAK,MAAM,IAAA,IAAQ;AAAA,OAAA,EAAQ,CAAA;AAAA,qCACpDA,UAAA,EAAA,EAAK,KAAA,EAAM,KAAA,EAAO,QAAA,EAAA,IAAA,CAAK,MAAM,OAAA,EAAQ;AAAA,KAAA,EACxC,CAAA,GACE,IAAA;AAAA,IAEH,QAAA,kCACEJ,SAAA,EAAA,EAAI,WAAA,EAAY,SAAQ,WAAA,EAAa,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA,EAAG,QAAA,EAAU,GAC7E,QAAA,kBAAAC,cAAA,CAACG,UAAA,EAAA,EAAK,OAAO,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA,EAAI,QAAA,EAAA,QAAA,CAAS,OAAA,EAAQ,CAAA,EAChE,CAAA,GACE,IAAA;AAAA,oBAEJH,cAAA;AAAA,MAACQ,YAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,WAAA,EAAY,sCAAA;AAAA,QACZ,QAAA,EAAU,oBAAA;AAAA,QACV,aAAA,EAAe;AAAA;AAAA;AACjB,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAe,IAAA,EAA4B;AAClD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,iBAAiB,OAAA,EAAqC;AACpE,EAAA,MAAM,OAAA,GAAU,oBAAoB,OAAO,CAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,SAAA,EAAY,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAC7C,EAAA,IAAI,QAAQ,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AACtD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACjC,EAAA,IAAI,QAAQ,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AACtD,EAAA,IAAI,QAAQ,aAAA,EAAe,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,OAAA,CAAQ,aAAa,CAAA,CAAE,CAAA;AACvE,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;;;AC/SO,SAAS,eAAA,CACd,SACA,MAAA,EACyB;AACzB,EAAA,IAAI,CAAC,QAAQ,OAAO,OAAA;AACpB,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,IAAY,EAAC;AAE9B,EAAA,MAAM,cAAA,GACH,OAAA,CAAQ,MAAA,KACR,CAAA,CAAE,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA,GAAI,MAAA,CAAA,IAC1C,CAAA,CAAE,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,QAAA,EAAU,QAAQ,QAAA,KAAa,MAAA,GAAS,QAAQ,QAAA,GAAY,CAAA,CAAE,YAAY,OAAA,CAAQ,QAAA;AAAA,IAClF,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,IAC1B,MAAA,EAAQ,cAAA;AAAA,IACR,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,CAAA,CAAE,OAAA;AAAA,IAC9B,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,IAC1B,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,CAAA,CAAE,KAAA;AAAA,IAC1B,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,CAAA,CAAE,MAAA;AAAA,IAC5B,aAAA,EAAe,OAAA,CAAQ,aAAA,IAAiB,CAAA,CAAE;AAAA,GAC5C;AACF;ACKA,eAAsB,WAAA,CAAY,OAAA,GAA8B,EAAC,EAA0B;AACzF,EAAA,MAAM;AAAA,IACJ,QAAQ,EAAC;AAAA,IACT,aAAa,EAAC;AAAA,IACd,GAAA,GAAM,QAAQ,GAAA,EAAI;AAAA,IAClB,mBAAA,GAAsB,IAAA;AAAA,IACtB,OAAA,GAAU,CAAC,IAAA,EAAM,GAAA,KACf,QAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,oBAAA,EAAuB,IAAI,CAAA,kBAAA,EAAqB,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,KAClG;AAAA,IACF,MAAM,MAAM;AAAA,IAAC;AAAA,GACf,GAAI,OAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,KAAK,CAAA;AAE/B,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,UAAU,CAAA;AACpC,EAAA,IAAI,mBAAA,gBAAmC,IAAA,CAAKjD,SAAAA,CAAKC,YAAQ,EAAG,YAAA,EAAc,SAAS,CAAC,CAAA;AACpF,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,IAAA,MAAM,UAAA,GAAa,MAAM,oBAAA,CAAqB,GAAG,CAAA;AACjD,IAAA,aAAA,CAAc,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB,IAAA,EAAM,KAAK,GAAG,CAAA;AACtD,MAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,uBAAuB,OAAO,CAAA;AACvC;AAEA,eAAe,qBAAqB,GAAA,EAAgC;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMiD,gBAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,MAAM,SAAA,GAAY,OAAA,CACf,MAAA,CAAO,CAAA,IAAA,KAAQ,gBAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CACzC,GAAA,CAAI,CAAA,IAAA,KAAQlD,SAAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAA;AAE9B,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,CAAA,GAAI,MAAMmD,aAAA,CAAK,CAAC,CAAA;AACtB,QAAA,IAAI,CAAA,CAAE,MAAA,EAAO,EAAG,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,eAAe,kBAAA,CACb,IAAA,EACA,GAAA,EACA,GAAA,EAC6B;AAC7B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,IAAK,KAAK,UAAA,CAAW,KAAK,CAAA,IAAKC,eAAA,CAAW,IAAI,CAAA;AACjF,EAAA,MAAM,YAAA,GAAe,SACjBC,iBAAA,CAAcnD,YAAAA,CAAQ,KAAK,IAAI,CAAC,EAAE,IAAA,GAClC,IAAA;AAEJ,EAAA,MAAM,GAAA,GAAM,MAAM,OAAO,YAAA,CAAA;AACzB,EAAA,MAAM,QAAA,GAAoB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,MAAA,IAAU,GAAA;AACvD,EAAA,MAAM,UAAA,GAAa,MAAA,GAASA,YAAAA,CAAQ,GAAA,EAAK,IAAI,CAAA,GAAI,MAAA;AAEjD,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,GAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA,EAAK,CAAC,GAAA,KAAgB,GAAA,CAAI,IAAI,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE;AAAA,GAC9C;AAEA,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,OAAA,GAAU,QAAA;AAChB,IAAA,OAAO,MAAM,QAAQ,GAAG,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,IAAY,UAAW,QAAA,EAAqB;AAC9E,IAAA,MAAM,MAAA,GAAS,QAAA;AACf,IAAA,IAAI,MAAA,CAAO,IAAA,EAAM,MAAM,MAAA,CAAO,KAAK,GAAG,CAAA;AACtC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAOO,SAAS,uBAAuB,OAAA,EAAiC;AACtE,EAAA,MAAM,MAAA,GAAuB;AAAA,IAC3B,OAAA;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,OAAO,EAAC;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,WAAW,EAAC;AAAA,IACZ,OAAO,EAAC;AAAA,IACR,YAAY;AAAC,GACf;AAEA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,OAAO,aAAA,EAAe,MAAA,CAAO,cAAc,IAAA,CAAK,GAAG,OAAO,aAAa,CAAA;AAC3E,IAAA,IAAI,OAAO,KAAA,EAAO,MAAA,CAAO,MAAM,IAAA,CAAK,GAAG,OAAO,KAAK,CAAA;AACnD,IAAA,IAAI,OAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,IAAA,CAAK,GAAG,OAAO,MAAM,CAAA;AACtD,IAAA,IAAI,OAAO,KAAA,EAAO,MAAA,CAAO,MAAM,IAAA,CAAK,GAAG,OAAO,KAAK,CAAA;AACnD,IAAA,IAAI,OAAO,UAAA,EAAY,MAAA,CAAO,WAAW,IAAA,CAAK,GAAG,OAAO,UAAU,CAAA;AAClE,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,KAAA,MAAW,CAAC,MAAM,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAC9D,QAAA,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,GAAI,OAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;ACjIO,IAAM,YAAN,MAAgB;AAAA,EAOrB,YACW,IAAA,EACQ,OAAA,GAAkC,CAAC,GAAA,KAClD,QAAQ,MAAA,CAAO,KAAA;AAAA,IACb,CAAA,gBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA,SAAA,EAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,GAC1F,EACF;AALS,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAPnB,IAAA,IAAA,CAAQ,MAAA,GAAS,EAAA;AACjB,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,IAAA,IAAA,CAAiB,OAAA,uBAAc,GAAA,EAA4C;AAC3E,IAAA,IAAA,CAAQ,QAAA,GAAW,KAAA;AAAA,EAQhB;AAAA,EAEH,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,KAAA,EAAO;AAChB,IAAA,MAAM,KAAA,GAAQmC,oBAAM,IAAA,CAAK,IAAA,CAAK,SAAS,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG;AAAA,MAC3D,GAAA,EAAK,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAK,GAAI,IAAA,CAAK,IAAA,CAAK,GAAA,IAAO,EAAC,EAAG;AAAA,MAChD,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM;AAAA,KAC/B,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAEb,IAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAU,KAAK,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAClE,IAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjC,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACzD,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,GAAG,OAAA,EAAS,CAAC,QAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC5C,IAAA,KAAA,CAAM,EAAA,CAAG,SAAS,MAAM;AACtB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,MAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,EAAG;AAC3C,QAAA,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,EAAE,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,eAAA,EAAgB,EAAG,CAAA;AAAA,MAClF;AACA,MAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,MAAM,IAAA,CAAK,QAAQ,YAAA,EAAc;AAAA,MAC/B,eAAA,EAAiB,YAAA;AAAA,MACjB,cAAc,EAAC;AAAA,MACf,UAAA,EAAY,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,GAAA;AAAI,KAC/C,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,SAAA,GAAgC;AACpC,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAS,GAAA,CAA8B,KAAA,IAAS,EAAC;AACvD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAc,IAAA,EAAiC;AAC5D,IAAA,OAAO,MAAM,KAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,IAAA,EAAM,SAAA,EAAW,MAAM,CAAA;AAAA,EACnE;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,KAAA,EAAO,KAAK,SAAS,CAAA;AAAA,EAC5B;AAAA,EAEQ,OAAA,CAAQ,QAAgB,MAAA,EAAmC;AACjE,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,cAAA,EAAgB,aAAA,KAAkB;AACpD,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU;AAChC,QAAA,aAAA,CAAc,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,KAAK,IAAA,CAAK,IAAI,cAAc,CAAC,CAAA;AACnE,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAK,IAAA,CAAK,MAAA,EAAA;AAChB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,GAAA;AACvC,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtB,QAAA,aAAA,CAAc,IAAI,MAAM,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,UAAA,CAAY,CAAC,CAAA;AAAA,MACtE,GAAG,SAAS,CAAA;AAEZ,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,CAAC,GAAA,KAAQ;AAC5B,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,IAAI,IAAI,KAAA,EAAO;AACb,UAAA,aAAA,CAAc,IAAI,MAAM,CAAA,IAAA,EAAO,MAAM,YAAY,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,CAAE,CAAC,CAAA;AACrE,UAAA;AAAA,QACF;AACA,QAAA,cAAA,CAAe,IAAI,MAAM,CAAA;AAAA,MAC3B,CAAC,CAAA;AAED,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,OAAO,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,IAAA;AACzE,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAAA,IAChC,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,SAAS,KAAA,EAAqB;AACpC,IAAA,IAAA,CAAK,MAAA,IAAU,KAAA;AACf,IAAA,IAAI,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC3C,IAAA,OAAO,iBAAiB,EAAA,EAAI;AAC1B,MAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG,YAAY,EAAE,IAAA,EAAK;AACrD,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,eAAe,CAAC,CAAA;AAChD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,UAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,IAAI,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAA;AAClD,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAA;AACrC,YAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,UAChB;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,QAClB;AAAA,MACF;AACA,MAAA,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,IACzC;AAAA,EACF;AACF;;;ACpHA,eAAsB,iBAAiB,KAAA,EAAkD;AACvF,EAAA,MAAM,UAAuB,EAAC;AAC9B,EAAA,MAAM,QAA0B,EAAC;AAEjC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,IAAI,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,KAAA,EAAM;AACnB,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,SAAA,EAAU;AACxC,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,KAAA,CAAM,KAAK,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,MAC5D;AACA,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,CAAA,wBAAA,EAA2B,IAAA,CAAK,IAAI,CAAA,UAAA,EAAa,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,OACnG;AACA,MAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAC1B;AAEA,SAAS,mBAAA,CACP,UAAA,EACA,MAAA,EACA,IAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,CAAA;AAAA,IACjC,aAAa,IAAA,CAAK,WAAA,IAAe,YAAY,IAAA,CAAK,IAAI,SAAS,UAAU,CAAA,CAAA;AAAA,IACzE,MAAA,EAAS,KAAK,WAAA,IAAe,EAAE,MAAM,QAAA,EAAU,UAAA,EAAY,EAAC,EAAE;AAAA,IAC9D,OAAA,EAAS,OAAO,IAAA,KAAS;AACvB,MAAA,OAAO,MAAM,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC9C;AAAA,GACF;AACF;AAEO,SAAS,kBAAkB,OAAA,EAA4B;AAC5D,EAAA,KAAA,MAAW,MAAA,IAAU,OAAA,EAAS,MAAA,CAAO,OAAA,EAAQ;AAC/C;;;AC3CO,SAAS,oBAAoB,OAAA,EAAwB;AAC1D,EAAA,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,uBAAA,EAAyB,iBAAA,EAAmB,MAAM,CAAA,CACzD,MAAA,CAAO,iBAAA,EAAmB,YAAY,CAAA,CACtC,MAAA,CAAO,iBAAA,EAAmB,mCAAmC,CAAA,CAC7D,MAAA,CAAO,kBAAA,EAAoB,4BAA4B,CAAA,CACvD,MAAA,CAAO,mBAAA,EAAqB,eAAe,CAAA,CAC3C,MAAA,CAAO,iBAAA,EAAmB,0DAA0D,CAAA,CACpF,MAAA,CAAO,iBAAA,EAAmB,8DAA8D,CAAA,CACxF,MAAA,CAAO,kBAAA,EAAoB,oEAAoE,CAAA,CAC/F,MAAA,CAAO,4BAAA,EAA8B,wCAAwC,CAAA,CAC7E,MAAA,CAAO,OAAA,EAAS,8EAA8E,CAAA,CAC9F,MAAA,CAAO,eAAA,EAAiB,4DAA4D,CAAA,CACpF,MAAA,CAAO,iBAAA,EAAmB,iDAAiD,CAAA,CAC3E,MAAA,CAAO,aAAA,EAAe,qCAAqC,CAAA,CAC3D,MAAA;AAAA,IACC,oBAAA;AAAA,IACA,mEAAA;AAAA,IACA,CAAC,OAAe,IAAA,GAAiB,OAAO,CAAC,GAAG,MAAM,KAAK,CAAA;AAAA,IACvD;AAAC,GACH,CACC,MAAA;AAAA,IACC,eAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,MAAM,WAAW,YAAA,EAAa;AAC9B,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,yCAAyC,CAAA;AAC9D,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,QAAA,MAAM,EAAE,IAAI,SAAA,EAAW,YAAA,EAAc,SAAS,KAAA,EAAO,KAAA,EAAO,UAAA,EAAW,GAAI,CAAA,CAAE,QAAA;AAC7E,QAAA,MAAM,UAAU,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,CAAA,GAAM,EAAA;AAC7C,QAAA,MAAM,QAAA,GAAW,UAAA,GAAa,CAAA,cAAA,EAAY,UAAU,CAAA,CAAA,GAAK,EAAA;AACzD,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UACb,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,SAAS,CAAA,OAAA,EAAU,YAAY,CAAA,EAAG,KAAA,GAAQ,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,GAAK,EAAE,GAAG,QAAQ;AAAA,IAAA,EAAS,OAAO;AAAA;AAAA,SAC7G;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,KAAW,KAAA,GAAQ,MAAM,YAAW,GAAI,MAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,EAAS,MAAM,CAAA;AAE9C,IAAA,MAAM,UAAU,cAAA,CAAe;AAAA,MAC7B,cAAc,OAAA,CAAQ,MAAA;AAAA,MACtB,QAAA,EAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAAA,MAC7B,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA;AAED,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,MAAA,EAAQ;AACrC,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,CAAA,iBAAA,EAAoB,QAAQ,EAAE,CAAA;AAAA;AAAA,OAChC;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,WAAA,CAAY;AAAA,MACrC,KAAA,EAAO,MAAA,EAAQ,OAAA,IAAW,EAAC;AAAA,MAC3B,UAAA,EAAa,OAAA,CAAQ,SAAA,IAA0B;AAAC,KACjD,CAAA;AAED,IAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,EAAQ,KAAmC,CAAA;AACrF,IAAA,MAAM,eAAe,CAAC,GAAG,WAAA,EAAa,GAAG,aAAa,KAAK,CAAA;AAE3D,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,KAAK,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,MAAO;AAAA,MACvF,IAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB,CAAE,CAAA;AACF,IAAA,MAAM,cAAc,CAAC,GAAG,cAAA,EAAgB,GAAG,aAAa,UAAU,CAAA;AAClE,IAAA,MAAM,EAAE,SAAS,UAAA,EAAY,KAAA,EAAO,UAAS,GAAI,MAAM,iBAAiB,WAAW,CAAA;AAEnF,IAAA,MAAM,UAAA,GAAc,OAAA,CAAQ,IAAA,IAAQ,MAAA,EAAQ,aAAa,IAAA,IAAQ,SAAA;AACjE,IAAA,MAAM,gBAAA,GAAqC;AAAA,MACzC,IAAA,EAAM,UAAA;AAAA,MACN,QAAQ,MAAA,EAAQ,WAAA,EAAa,SAAS,EAAC,EAAG,IAAI,CAAA,CAAA,MAAM;AAAA,QAClD,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,OAAO,CAAA,CAAE;AAAA,OACX,CAAE;AAAA,KACJ;AAEA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,MAAA,EAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,MAAA;AAAA,MAClC,OAAA,EAAU,MAAA,CAAO,OAAA,IAAW,OAAA,CAAQ,OAAA;AAAA,MACpC,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAA,EAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,MAAA;AAAA,MAClC,YAAY,OAAA,CAAQ,IAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,EAAA;AAAA,MACnB,KAAA,EAAQ,MAAA,CAAO,KAAA,IAAS,OAAA,CAAQ,KAAA;AAAA,MAChC,KAAA,EAAQ,MAAA,CAAO,KAAA,IAAS,OAAA,CAAQ,KAAA;AAAA,MAChC,aAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,OAAA,CAAQ,aAAA;AAAA,MAChD,eAAA,EAAiB,MAAA;AAAA,MACjB,eAAe,YAAA,CAAa,aAAA;AAAA,MAC5B,YAAY,CAAC,GAAG,YAAA,CAAa,KAAA,EAAO,GAAG,QAAQ,CAAA;AAAA,MAC/C,aAAa,YAAA,CAAa,MAAA;AAAA,MAC1B,YAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,gBAAA,CAAiB,WAAW,CAAC;AAAA,CAAI,CAAA;AACzD,IAAA,MAAM,WAAWiB,YAAA,CAAOC,uBAAAA,CAAM,aAAA,CAAc,OAAA,EAAS,WAAW,CAAC,CAAA;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,aAAA,EAAc;AAAA,IAC/B,CAAA,SAAE;AACA,MAAA,iBAAA,CAAkB,UAAU,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb;AAAA,iBAAA,EAAsB,OAAA,CAAQ,IAAI,CAAA,uBAAA,EAA0B,OAAA,CAAQ,IAAI;AAAA;AAAA,OAC1E;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb;AAAA;AAAA,0BAAA,EAA4D,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA,OACxE;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACL;ACnHA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,MAAM,MAAM,CAAA,CAAA;AAAA,IAC7C,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,aAAA,EAAgB,MAAM,YAAY,CAAA,UAAA,CAAA;AAAA,IAC3C,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,OAAA;AACzF,MAAA,OAAO,CAAA,YAAA,EAAe,KAAA,CAAM,UAAU,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA,CAAA;AAAA,IACvD;AAAA,IACA,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,MAAM,IAAI,CAAA,CAAA,EAAI,KAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAAA,IAC3D,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,OAAA,EAAU,MAAM,UAAU,CAAA,GAAA,CAAA;AAAA,IACvD,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,QAAA,EAAW,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,IACvC;AACE,MAAA,OAAO,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA,CAAA;AAAA;AAE3B;AAEA,eAAsB,QAAA,CAAS,MAAc,OAAA,EAA2C;AACtF,EAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAQ;AACnC,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,6EAA6E,CAAA;AAClG,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,mBAAA,CAAoB;AAAA,IACtC,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAClB,aAAA,CAAc,QAAQ,MAAM,CAAA,GAC5B,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,GACnB,aAAA,CAAc,QAAQ,aAAA,EAAe,OAAA,CAAQ,MAAM,CAAA,GACnD,MAAA;AAEJ,EAAA,MAAM,YAAwB,EAAC;AAC/B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,SAAA,CAAU,IAAA,CAAK;AAAA,MACb,IAAA,EAAM,aAAA;AAAA,MACN,GAAG,KAAA,EAAmB;AACpB,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,KAAK,IAAI,IAAI,CAAA;AAAA,MAChD;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAMC,YAAUC,qBAAA,CAAc;AAAA,IAC5B,OAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,UAAU,OAAA,CAAQ,QAAA,GAAW,SAAS,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,GAAI,MAAA;AAAA,IAC9D;AAAA,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,MAAMD,SAAA,CAAQ,GAAA,CAAI,IAAA,EAAM;AAAA,IACrC,OAAO,KAAA,IAAS;AAAA,GACjB,CAAA;AAED,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,OAAA,GAAU,IAAI,CAAA;AAC5C;AC1EO,SAAS,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAQ,EAAiD;AACtF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIvB,gBAAuC,SAAS,CAAA;AAC5E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAS,CAAC,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAAA,CAAyB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,gBAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,gBAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAS,CAAC,CAAA;AAE9C,EAAAG,iBAAU,MAAM;AACd,IAAA,eAAe,OAAA,GAAU;AACvB,MAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAQ;AACnC,QAAA,QAAA,CAAS,8CAA8C,CAAA;AACvD,QAAA,SAAA,CAAU,OAAO,CAAA;AACjB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,mBAAA,CAAoB;AAAA,QACtC,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAS,OAAA,CAAQ;AAAA,OAClB,CAAA;AAED,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAClB,aAAA,CAAc,QAAQ,MAAM,CAAA,GAC5B,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAC9B,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,GACnB,aAAA,CAAc,QAAQ,aAAA,EAAe,OAAA,CAAQ,MAAM,CAAA,GACnD,MAAA;AAEJ,MAAA,MAAM,YAAwB,CAAC;AAAA,QAC7B,IAAA,EAAM,QAAA;AAAA,QACN,GAAG,KAAA,EAAmB;AACpB,UAAA,QAAQ,MAAM,IAAA;AAAM,YAClB,KAAK,YAAA;AACH,cAAA,cAAA,CAAe,MAAM,IAAI,CAAA;AACzB,cAAA;AAAA,YACF,KAAK,YAAA;AACH,cAAA,YAAA,CAAa,CAAA,IAAA,KAAQ,CAAC,GAAG,IAAA,EAAM,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,CAAC,CAAA;AACvE,cAAA;AAAA,YACF,KAAK,UAAA;AACH,cAAA,YAAA,CAAa,UAAQ,IAAA,CAAK,GAAA;AAAA,gBAAI,QAC5B,EAAA,CAAG,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,GAAG,MAAA,KAAW,SAAA,GACpC,EAAE,GAAG,IAAI,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,KAAA,CAAM,YAAW,GACtD;AAAA,eACL,CAAA;AACD,cAAA;AAAA,YACF,KAAK,OAAA;AACH,cAAA,YAAA,CAAa,UAAQ,IAAA,CAAK,GAAA;AAAA,gBAAI,CAAA,EAAA,KAC5B,GAAG,MAAA,KAAW,SAAA,GAAY,EAAE,GAAG,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAQ,GAAI;AAAA,eACxD,CAAA;AACD,cAAA;AAAA;AACJ,QACF;AAAA,OACD,CAAA;AAED,MAAA,MAAMoB,YAAUC,qBAAAA,CAAc;AAAA,QAC5B,OAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,UAAU,OAAA,CAAQ,QAAA,GAAW,SAAS,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,GAAI,MAAA;AAAA,QAC9D;AAAA,OACD,CAAA;AAED,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,MAAMD,SAAA,CAAQ,GAAA,CAAI,MAAM,EAAE,KAAA,EAAO,KAAA,IAAS,KAAA,CAAA,EAAW,CAAA;AACvE,QAAA,SAAA,CAAU,UAAU,OAAO,CAAA;AAC3B,QAAA,aAAA,CAAc,UAAU,UAAU,CAAA;AAClC,QAAA,SAAA,CAAU,MAAM,CAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACzD,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEjB,eAAAA,CAACC,SAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,KAAK,CAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAC,eAACG,UAAAA,EAAA,EAAK,MAAI,IAAA,EAAC,KAAA,EAAM,QAAO,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,oBACrCL,eAAAA,CAACK,UAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MAAO;AAAA,KAAA,EAAK,CAAA;AAAA,IAE1B,MAAA,KAAW,aAAa,WAAA,GAAc,CAAA,oBACrCL,eAAAA,CAACK,UAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAU,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MAAI,QAAA;AAAA,MAAO;AAAA,KAAA,EAAY,CAAA;AAAA,IAG9C,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,qBAClBH,cAAAA,CAACD,SAAAA,EAAA,EAAY,UAAA,EAAY,CAAA,EACvB,QAAA,kBAAAD,gBAACK,UAAAA,EAAA,EAAK,KAAA,EAAO,EAAA,CAAG,MAAA,KAAW,SAAA,GAAY,WAAW,EAAA,CAAG,MAAA,KAAW,MAAA,GAAS,OAAA,GAAU,KAAA,EAChF,QAAA,EAAA;AAAA,MAAA,EAAA,CAAG,WAAW,SAAA,GAAY,QAAA,GAAM,EAAA,CAAG,MAAA,KAAW,SAAS,QAAA,GAAM,QAAA;AAAA,MAAK,GAAA;AAAA,MAClE,EAAA,CAAG,IAAA;AAAA,MACH,GAAG,UAAA,KAAe,MAAA,GAAY,CAAA,EAAA,EAAK,EAAA,CAAG,UAAU,CAAA,GAAA,CAAA,GAAQ;AAAA,KAAA,EAC3D,CAAA,EAAA,EALQ,CAMV,CACD,CAAA;AAAA,IAEA,MAAA,KAAW,6BACVH,cAAAA,CAACG,YAAA,EAAK,KAAA,EAAM,UAAS,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,IAGhC,WAAW,MAAA,oBACVL,gBAACC,SAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,gBAACK,UAAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,MAAI,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAO,UAAA;AAAA,QAAW;AAAA,OAAA,EAAG,CAAA;AAAA,sBAC9CH,cAAAA,CAACG,UAAAA,EAAA,EAAM,QAAA,EAAA,MAAA,EAAO;AAAA,KAAA,EAChB,CAAA;AAAA,IAGD,MAAA,KAAW,2BACVL,eAAAA,CAACK,YAAA,EAAK,KAAA,EAAM,KAAA,EAAM,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAQ;AAAA,KAAA,EAAM;AAAA,GAAA,EAEzC,CAAA;AAEJ;;;ACzHO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,OAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,8CAA8C,CAAA,CAC1D,MAAA,CAAO,eAAA,EAAiB,kDAAkD,CAAA,CAC1E,MAAA,CAAO,uBAAA,EAAyB,iBAAA,EAAmB,MAAM,CAAA,CACzD,MAAA,CAAO,iBAAA,EAAmB,YAAY,CAAA,CACtC,MAAA,CAAO,iBAAA,EAAmB,mCAAmC,EAC7D,MAAA,CAAO,kBAAA,EAAoB,4BAA4B,CAAA,CACvD,OAAO,iBAAA,EAAmB,qBAAqB,CAAA,CAC/C,MAAA,CAAO,qBAAqB,4CAA4C,CAAA,CACxE,MAAA,CAAO,iBAAA,EAAmB,oDAAoD,CAAA,CAC9E,MAAA,CAAO,iBAAA,EAAmB,6BAA6B,CAAA,CACvD,MAAA,CAAO,4BAAA,EAA8B,wCAAwC,EAC7E,MAAA,CAAO,0BAAA,EAA4B,eAAe,CAAA,CAClD,OAAO,qBAAA,EAAuB,qBAAA,EAAuB,IAAI,CAAA,CACzD,MAAA,CAAO,WAAA,EAAa,8BAA8B,CAAA,CAClD,OAAO,UAAA,EAAY,2BAA2B,CAAA,CAC9C,MAAA,CAAO,eAAe,qCAAqC,CAAA,CAC3D,MAAA,CAAO,OAAO,gBAAoC,OAAA,KAAY;AAC7D,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,cAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,4DAA4D,CAAA;AACjF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,KAAW,KAAA,GAAQ,MAAM,YAAW,GAAI,MAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,EAAS,MAAM,CAAA;AAE9C,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAAU,YAAAA,CAAOC,wBAAM,aAAA,CAAc,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AAAA,IACvD,CAAA,MAAO;AACL,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,MACrF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AACnF,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACL;ACTA,IAAM,eAAA,GAA6D;AAAA,EACjE,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,WAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,sBAAA,GAAmD;AAAA,EACvD,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAW,mBAAA;AAAA,EACX,MAAA,EAAQ,kBAAA;AAAA,EACR,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,gBAAA,GAAoD;AAAA,EACxD,MAAA,EAAQ,gBAAA;AAAA,EACR,SAAA,EAAW,mBAAA;AAAA,EACX,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,WAAA,CAAY,QAAA,EAAoB,MAAA,GAAS,aAAA,EAAuB;AACvE,EAAA,MAAM,KAAA,GAAQ,uBAAuB,QAAQ,CAAA;AAC7C,EAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,CAAA,aAAA,CAAA;AAChC,EAAA,IAAI,QAAA,KAAa,QAAA,EAAU,OAAO,CAAA,iBAAA,EAAoB,KAAK,CAAA,IAAA,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,EAAA,OAAO,CAAA,EAAG,gBAAgB,QAAQ,CAAC,cAAc,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,gBAAA,EAAmB,KAAK,CAAA,IAAA,CAAA;AAC3F;AAEA,SAAS,gBAAgB,QAAA,EAA4B;AACnD,EAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,CAAA,aAAA,CAAA;AAChC,EAAA,IAAI,aAAa,QAAA,EAAU,OAAO,CAAA,iBAAA,EAAoB,sBAAA,CAAuB,QAAQ,CAAC,CAAA,IAAA,CAAA;AACtF,EAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,EAAA,OAAO,CAAA,EAAG,gBAAgB,QAAQ,CAAC,mCAAmC,MAAM,CAAA,gBAAA,EAAmB,sBAAA,CAAuB,QAAQ,CAAC,CAAA,IAAA,CAAA;AACjI;AAEA,SAAS,cAAc,QAAA,EAA4B;AACjD,EAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,EAAA;AAChC,EAAA,OAAO,CAAA,SAAA,EAAY,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,CAAA;AAC9C;AAEA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,OAAO,CAAA,SAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,KAAM,YAAA,GAAe,WAAA,GAAc,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,CAAA;AACpF;AAEA,SAAS,SAAS,KAAA,EAA2B;AAC3C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK;AAC3B,IAAA,IAAI,CAAA,KAAM,cAAc,OAAO,aAAA;AAC/B,IAAA,IAAI,CAAA,KAAM,cAAc,OAAO,CAAA,0CAAA,CAAA;AAC/B,IAAA,IAAI,CAAA,KAAM,SAAS,OAAO,CAAA,yCAAA,CAAA;AAC1B,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC7B;AAEA,SAAS,aAAa,MAAA,EAA4B;AAChD,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,CAAA;AAAA,CAAA;AAC9B,EAAA,IAAI,MAAA,KAAW,UAAU,OAAO,CAAA;AAAA,CAAA;AAChC,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,WAAW,MAAA,EAA4B;AAC9C,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,CAAA,2CAAA,CAAA;AAC9B,EAAA,IAAI,MAAA,KAAW,UAAU,OAAO,CAAA,qDAAA,CAAA;AAChC,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,kBAAA,GAA6B;AACpC,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,CAAA;AAYT;AAMA,SAAS,aAAa,GAAA,EAA4C;AAChE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,kBAAA,EAAoB,QAAA;AAAA,IACpB,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AACrD,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,EAAQ,IAAA,CAAK,mBAAmB,CAAA,GAAI,QAAA;AAEvD,EAAA,MAAM,YAAA,GAAe,IAAI,QAAA,KAAa,MAAA;AACtC,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,eAAA,CAAgB,IAAI,QAAQ,CAAA,GAAI,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA;AACtG,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,MAAA,GAAS,CAAA,KAAA,EAAQ,MAAM,CAAA;AAAA,CAAA,GAAQ,gDAAA;AAElD,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,MAAMzD,qBAAA,CAAK,QAAA,CAAS,IAAI,QAAA,KAAa,OAAA,GAAU,wBAAwB,eAAe,CAAA;AAAA,QACtF,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,YAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACX;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,kBAAA,EAAoB,SAAA;AAAA,UACpB,sBAAA,EAAwB,QAAA;AAAA,UACxB,UAAA,EAAY,QAAA;AAAA,UACZ,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAcd,gBAAA,EAAkB,CAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IAMlB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UACR,GAAA,EAAK,CAAC,QAAA,EAAU,KAAK,CAAA;AAAA,UACrB,MAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAkB,SAAA;AAAA,UAClB,GAAA,EAAK,WAAA;AAAA,UACL,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,cAAA,EAAgB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAWhB,aAAA,EAAe,CAAA;AAAA,EACjB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC,CAAA;;AAAA,EAE/E,YAAA,GAAe,kBAAA,EAAmB,GAAI,EAAE,CAAA;AAAA;AAAA,aAAA,EAE3B,OAAO,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,WAAA,EAAgB,QAAA,CAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,GAAA,CAAI,MAAA,KAAW,MAAA,GAAS;AAAA,YAAA,EAAiB,UAAA,CAAW,GAAA,CAAI,MAAM,CAAC,MAAM,EAAE;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAclK,cAAA,EAAgB,UAAA;AAAA,IAEhB,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAOd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,WAAW,GAAA,EAA4C;AAC9D,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,gBAAA,EAAkB,QAAA;AAAA,IAClB,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO;AAAA,GACT;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AACrD,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,EAAQ,IAAA,CAAK,mBAAmB,CAAA,GAAI,QAAA;AAEvD,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,mBAAA;AAAA,UACL,KAAA,EAAO;AAAA,SACT;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,kBAAA,EAAoB,SAAA;AAAA,UACpB,GAAA,EAAK,SAAA;AAAA,UACL,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAkB,SAAA;AAAA,UAClB,GAAA,EAAK,WAAA;AAAA,UACL,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,eAAA,EAAiB,CAAA;AAAA;AAAA;AAAA,EAGnB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC;AAAA,EAC/E,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,kBAAA,KAAuB,EAAE,CAAA;AAAA;AAAA,aAAA,EAEtC,WAAA,CAAY,IAAI,QAAQ,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,WAAA,EAAgB,QAAA,CAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,GAAA,CAAI,MAAA,KAAW,MAAA,GAAS;AAAA,YAAA,EAAiB,UAAA,CAAW,GAAA,CAAI,MAAM,CAAC,MAAM,EAAE;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IAgBpL,cAAA,EAAgB,iBAAiB,GAAA,CAAI,QAAQ,IACzC,CAAA,EAAG,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,CAAA,GACjC,gDAAA;AAAA,IAEJ,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAMd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,eAAe,GAAA,EAA4C;AAClE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,oBAAA,EAAsB;AAAA,GACxB;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AACrD,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,EAAQ,IAAA,CAAK,mBAAmB,CAAA,GAAI,QAAA;AAEvD,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,uBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,kBAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,GAAA,EAAK,SAAA;AAAA,UACL,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAkB,SAAA;AAAA,UAClB,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,cAAA,EAAgB,CAAA;AAAA,EAClB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,YAAA,CAAa,GAAA,CAAI,MAAM,CAAC;AAAA,EAC/E,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,kBAAA,KAAuB,EAAE,CAAA;AAAA,WAAA,EACxC,WAAA,CAAY,IAAI,QAAQ,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,SAAA,EAAc,QAAA,CAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,GAAA,CAAI,MAAA,KAAW,MAAA,GAAS;AAAA,UAAA,EAAe,UAAA,CAAW,GAAA,CAAI,MAAM,CAAC,MAAM,EAAE;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAAA,IAW9K,cAAA,EAAgB,iBAAiB,GAAA,CAAI,QAAQ,IACzC,CAAA,EAAG,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,CAAA,GACjC,gDAAA;AAAA,IAEJ,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAMd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,kBAAkB,GAAA,EAA4C;AACrE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,oBAAA,EAAsB,QAAA;AAAA,IACtB,mBAAA,EAAqB;AAAA,GACvB;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,KAAW,GAAG,GAAA,CAAI,KAAA,GAAQ,CAAC,YAAY,CAAA;AACrD,EAAA,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AAE3B,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,uBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,kBAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,GAAA,EAAK,SAAA;AAAA,UACL,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAkB,SAAA;AAAA,UAClB,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,cAAA,EAAgB,CAAA;AAAA;AAAA,EAElB,aAAA,CAAc,IAAI,QAAQ,CAAC,GAAG,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC;AAAA,EACpD,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,kBAAA,KAAuB,EAAE,CAAA;AAAA,WAAA,EACxC,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAA,EAYvB,QAAA,CAAS,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAAA,IAU9B,cAAA,EAAgB,iBAAiB,GAAA,CAAI,QAAQ,IACzC,CAAA,EAAG,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,CAAA,GACjC,gDAAA;AAAA,IAEJ,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAKd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAMA,SAAS,yBAAyB,QAAA,EAA4B;AAC5D,EAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,EAAA;AAChC,EAAA,OAAO,CAAA,SAAA,EAAY,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,CAAA;AAC9C;AAEA,SAAS,cAAc,QAAA,EAA4B;AACjD,EAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,EAAA,OAAO,MAAA,GAAS,GAAG,MAAM,CAAA;AAAA,CAAA,GAAQ,+CAAA;AACnC;AAEA,SAAS,iBAAiB,GAAA,EAA4C;AACpE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,mBAAA,EAAqB,QAAA;AAAA,IACrB,eAAA,EAAiB,QAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAE3D,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC/C,EAAA,MAAM4D,cAAAA,GAAgB,wBAAA,CAAyB,GAAA,CAAI,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAErE,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,yBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,YAAA;AAAA,UACP,OAAA,EAAS,cAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,wBAAA,EAA0B,QAAA;AAAA,UAC1B,8BAAA,EAAgC,QAAA;AAAA,UAChC,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,QAAA;AAAA,UACZ,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,kBAAA,EAAoB,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IASpB,gBAAA,EAAkB,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAKlB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,OAAA,EAAS,6BAAA;AAAA,QACT,eAAA,EAAiB;AAAA,UACf,OAAA,EAAS,IAAA;AAAA,UAAM,OAAA,EAAS,IAAA;AAAA,UAAM,eAAA,EAAiB,IAAA;AAAA,UAC/C,gCAAA,EAAkC,IAAA;AAAA,UAAM,iBAAA,EAAmB,IAAA;AAAA,UAC3D,YAAA,EAAc,IAAA;AAAA,UAAM,SAAA,EAAW,IAAA;AAAA,UAAM,MAAA,EAAQ,IAAA;AAAA,UAAM,gBAAA,EAAkB;AAAA;AACvE,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,cAAA,EAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAWhB,yBAAA,EAA2B,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAkB3B,gCAAA,EAAkC,CAAA;AAAA,EACpCA,cAAa,GAAG,WAAW,CAAA;AAAA;AAAA,kBAAA,EAET,cAAc;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAmB9B,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,sDAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,YAAY,GAAA,EAA4C;AAC/D,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,gBAAA,EAAkB,QAAA;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,GAAA,EAAK;AAAA,GACP;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAE3D,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC/C,EAAA,MAAMA,cAAAA,GAAgB,wBAAA,CAAyB,GAAA,CAAI,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAErE,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,oBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,YAAA;AAAA,UACP,OAAA,EAAS,cAAA;AAAA,UACT,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB,EAAE,UAAA,EAAY,QAAA;AAAS,OAC1C;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,gBAAA,EAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAOlB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB,EAAE,SAAS,uBAAA,EAAwB;AAAA,MACnC,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,SAAA,EAAW,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAoBX,yBAAA,EAA2B,CAAA,EAAGA,cAAa,CAAA,EAAG,WAAW,CAAA;AAAA;AAAA,kBAAA,EAEzC,cAAc;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAmB9B,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,kDAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,eAAe,GAAA,EAA4C;AAClE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,gBAAA,EAAkB,QAAA;AAAA,IAClB,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO;AAAA,GACT;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AAErD,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,wBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,iCAAA;AAAA,UACL,KAAA,EAAO,yBAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,WAAA,EAAa,QAAA;AAAA,UACb,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,gBAAA,EAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAMlB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UAAU,MAAA,EAAQ,QAAA;AAAA,UAAU,gBAAA,EAAkB,SAAA;AAAA,UACtD,GAAA,EAAK,WAAA;AAAA,UAAa,MAAA,EAAQ,IAAA;AAAA,UAAM,MAAA,EAAQ,IAAA;AAAA,UAAM,YAAA,EAAc;AAAA,SAC9D;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,eAAA,EAAiB,CAAA;AAAA;AAAA;AAAA,EAGnB,aAAA,CAAc,IAAI,QAAQ,CAAC,GAAG,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC;AAAA,EACpD,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,kBAAA,KAAuB,EAAE,CAAA;AAAA;AAAA,aAAA,EAEtC,WAAA,CAAY,IAAI,QAAQ,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,WAAA,EAAgB,QAAA,CAAS,GAAA,CAAI,KAAK,CAAC,MAAM,EAAE;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IAgB1G,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,8DAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,yBAAyB,GAAA,EAA4C;AAC5E,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,aAAA,EAAe;AAAA,GACjB;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAE3D,EAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,QAAA,KAAa,MAAA,GACrC,eAAA,GACA,GAAA,CAAI,QAAA,KAAa,QAAA,GACf,CAAA,iBAAA,EAAoB,sBAAA,CAAuB,GAAA,CAAI,QAAQ,CAAC,CAAA,IAAA,CAAA,GACxD,CAAA,EAAG,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAC,CAAA,eAAA,EAAkB,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAE,CAAA,gBAAA,EAAmB,sBAAA,CAAuB,GAAA,CAAI,QAAQ,CAAC,CAAA,IAAA,CAAA;AAC9I,EAAA,MAAMA,cAAAA,GAAgB,wBAAA,CAAyB,GAAA,CAAI,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AACrE,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,qBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,cAAA;AAAA,UACL,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,2BAAA,EAA6B,QAAA;AAAA,UAC7B,UAAA,EAAY,QAAA;AAAA,UACZ,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,eAAA,EAAiB,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,EAenB,SAAS,CAAA,MAAA,EAAS,MAAM,CAAA,0BAAA,EAA6B,MAAM,MAAM,6CAA6C;AAAA,CAAA;AAAA,IAG5G,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UAAU,MAAA,EAAQ,QAAA;AAAA,UAAU,gBAAA,EAAkB,SAAA;AAAA,UACtD,GAAA,EAAK,CAAC,QAAQ,CAAA;AAAA,UAAG,KAAA,EAAO,CAAC,2BAA2B,CAAA;AAAA,UACpD,MAAA,EAAQ,IAAA;AAAA,UAAM,MAAA,EAAQ,IAAA;AAAA,UAAM,YAAA,EAAc;AAAA,SAC5C;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,eAAA,EAAiB,CAAA;AAAA,EACnBA,cAAa;AAAA,EACb,WAAW,CAAA;AAAA,EAAA,EACT,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,GAAa,mBAAmB;AAAA;;AAAA;;AAAA;AAAA;AAAA,kBAAA,EAOlC,eAAe;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAyB/B,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,wDAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,WAAW,GAAA,EAA4C;AAC9D,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC/C,EAAA,MAAMA,cAAAA,GAAgB,wBAAA,CAAyB,GAAA,CAAI,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAErE,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,yBAAA;AAAA,UACL,KAAA,EAAO;AAAA,SACT;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB,EAAE,UAAA,EAAY,QAAA;AAAS,OAC1C;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UAAU,MAAA,EAAQ,QAAA;AAAA,UAAU,gBAAA,EAAkB,SAAA;AAAA,UACtD,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,UAAG,MAAA,EAAQ,IAAA;AAAA,UAAM,MAAA,EAAQ,IAAA;AAAA,UAAM,YAAA,EAAc;AAAA,SAClE;AAAA,QACA,OAAA,EAAS,CAAC,KAAK;AAAA,OACjB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,CAAA,EAAGA,cAAa,CAAA,EAAG,WAAW,mBAAmB,cAAc;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IAoChF,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,6CAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,cAAc,GAAA,EAA4C;AACjE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,kBAAA,EAAoB,QAAA;AAAA,IACpB,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,IAAI,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAA;AAErD,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AACxC,EAAA,MAAM,gBAAA,GAAmB,IAAI,QAAA,KAAa,MAAA,GACtC,KACA,CAAA,SAAA,EAAY,eAAA,CAAgB,GAAA,CAAI,QAAqC,CAAC,CAAA;AAAA,CAAA;AAC1E,EAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAExE,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,YAAA;AAAA,UACP,KAAA,EAAO,YAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,aAAA,EAAe,SAAA;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,kBAAA,EAAoB,SAAA;AAAA,UACpB,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAA,EAAmB,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAKnB,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UACR,GAAA,EAAK,CAAC,KAAA,EAAO,cAAA,EAAgB,QAAQ,CAAA;AAAA,UACrC,OAAA,EAAS,IAAA;AAAA,UACT,YAAA,EAAc,IAAA;AAAA,UACd,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,eAAA,EAAiB,IAAA;AAAA,UACjB,MAAA,EAAQ,QAAA;AAAA,UACR,gBAAA,EAAkB,SAAA;AAAA,UAClB,iBAAA,EAAmB,IAAA;AAAA,UACnB,eAAA,EAAiB,IAAA;AAAA,UACjB,GAAA,EAAK,UAAA;AAAA,UACL,WAAA,EAAa,IAAA;AAAA,UACb,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,UAC1B,KAAA,EAAO,EAAE,KAAA,EAAO,CAAC,KAAK,CAAA;AAAE,SAC1B;AAAA,QACA,OAAA,EAAS,CAAC,eAAA,EAAiB,SAAA,EAAW,YAAY,qBAAqB,CAAA;AAAA,QACvE,OAAA,EAAS,CAAC,cAAc;AAAA,OAC1B;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,gBAAA,EAAkB,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAclB,cAAA,EAAgB,CAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAqBhB,qBAAA,EAAuB,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAgBvB,uBAAA,EAAyB,CAAA,EAAG,gBAAgB,CAAA,EAAG,cAAc,CAAA;;AAAA;AAAA;;AAAA,kBAAA,EAK7C,OAAO;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IA+BvB,cAAA,EAAgB,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA;AAAA,CAAA,GAAQ,+CAAA;AAAA,IAE1C,YAAA,EAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAQd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,YAAY,GAAA,EAA4C;AAC/D,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,IAAA,EAAM,SAAA;AAAA,IACN,aAAA,EAAe,QAAA;AAAA,IACf,mBAAA,EAAqB,SAAA;AAAA,IACrB,KAAA,EAAO,SAAA;AAAA,IACP,cAAA,EAAgB;AAAA,GAClB;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC/C,EAAA,MAAMA,cAAAA,GAAgB,IAAI,QAAA,KAAa,MAAA,GAAS,KAAK,CAAA,SAAA,EAAY,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,CAAA;AAC9F,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAErE,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,oBAAA;AAAA,QACN,OAAA,EAAS,OAAA;AAAA,QACT,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,YAAA;AAAA,UACP,OAAA,EAAS,sBAAA;AAAA,UACT,GAAA,EAAK,kBAAA;AAAA,UACL,GAAA,EAAK;AAAA,SACP;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,YAAY,IAAA,CAAK,SAAA;AAAA,MACf;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,wBAAA;AAAA,UACN,IAAA,EAAM,gBAAA;AAAA,UACN,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,CAAC,aAAA,EAAe,mBAAmB,CAAA;AAAA,UAC5C,GAAA,EAAK,EAAE,gBAAA,EAAkB,uBAAA,EAAwB;AAAA,UACjD,OAAA,EAAS,EAAE,OAAA,EAAS,uBAAA;AAAwB;AAC9C,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB,EAAE,OAAA,EAAS,oBAAA,EAAsB,iBAAiB,EAAE,MAAA,EAAQ,MAAK,EAAE;AAAA,MACnE,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAA,EAAmB,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAYnB,eAAA,EAAiB,CAAA;AAAA;AAAA;AAAA,EAGnBA,cAAa,GAAG,WAAW,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAmBP,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IA4BhC,cAAA,EAAgB,CAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IA6BhB,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,+CAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,kBAAkB,GAAA,EAA4C;AACrE,EAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,QAAA,KAAa,MAAA,GACrC,eAAA,GACA,GAAA,CAAI,QAAA,KAAa,QAAA,GACf,CAAA,iBAAA,EAAoB,sBAAA,CAAuB,GAAA,CAAI,QAAQ,CAAC,CAAA,IAAA,CAAA,GACxD,CAAA,EAAG,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAC,CAAA,yBAAA,EAA4B,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAE,CAAA,kBAAA,EAAqB,sBAAA,CAAuB,GAAA,CAAI,QAAQ,CAAC,CAAA,IAAA,CAAA;AAC1J,EAAA,MAAMA,cAAAA,GAAgB,IAAI,QAAA,KAAa,MAAA,GACnC,KACA,CAAA,SAAA,EAAY,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,QAAA,KAAa,MAAA,GAAS,oBAAmB,GAAI,EAAA;AAErE,EAAA,OAAO;AAAA,IACL,aAAa,IAAA,CAAK,SAAA;AAAA,MAChB;AAAA,QACE,KAAA,EAAO;AAAA,UACL,GAAA,EAAK,kDAAA;AAAA,UACL,KAAA,EAAO,0CAAA;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAS;AAAA,UACP,qBAAA,EAAuB;AAAA;AACzB,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,WAAW,CAAA,EAAGA,cAAa,CAAA,EAAG,WAAW,mBAAmB,eAAe;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IA4B3E,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,oBAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,eAAe,GAAA,EAA4C;AAClE,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,oBAAA,EAAsB,QAAA;AAAA,IACtB,eAAA,EAAiB,SAAA;AAAA,IACjB,iBAAA,EAAmB,SAAA;AAAA,IACnB,mBAAA,EAAqB,SAAA;AAAA,IACrB,2BAAA,EAA6B,SAAA;AAAA,IAC7B,mCAAA,EAAqC,SAAA;AAAA,IACrC,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ,IAAA,CAAK,qBAAqB,CAAA,GAAI,QAAA;AAE3D,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,IAAA,EAAM,uBAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,UAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,eAAA,EAAiB;AAAA,UACf,cAAA,EAAgB,SAAA;AAAA,UAChB,uBAAA,EAAyB,SAAA;AAAA,UACzB,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACnB;AAAA,QACE,OAAA,EAAS,oDAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU;AAAA,UACR,GAAA,EAAK;AAAA,YACH,WAAA,EAAa,aAAA;AAAA,YACb,IAAA,EAAM,EAAA;AAAA,YACN,UAAA,EAAY,KAAA;AAAA,YACZ,MAAA,EAAQ,IAAA;AAAA,YACR,SAAA,EAAW;AAAA,cACT,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,4BAAA;AAAA,gBACT,SAAS,EAAE,OAAA,EAAS,eAAe,QAAA,EAAU,eAAA,EAAiB,OAAO,gBAAA;AAAiB,eACxF;AAAA,cACA,KAAA,EAAO,EAAE,OAAA,EAAS,2BAAA,EAA6B,SAAS,EAAE,WAAA,EAAa,aAAY;AAAE;AACvF;AACF;AACF,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,iBAAiB,IAAA,CAAK,SAAA;AAAA,MACpB;AAAA,QACE,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,QAAA;AAAA,UAAU,MAAA,EAAQ,UAAA;AAAA,UAAY,gBAAA,EAAkB,SAAA;AAAA,UACxD,MAAA,EAAQ,IAAA;AAAA,UAAM,sBAAA,EAAwB,IAAA;AAAA,UAAM,uBAAA,EAAyB,KAAA;AAAA,UACrE,GAAA,EAAK,CAAC,QAAA,EAAU,KAAK;AAAA,SACvB;AAAA,QACA,OAAA,EAAS,CAAC,aAAa;AAAA,OACzB;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAAA,IAEJ,gBAAA,EAAkB,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAKlB,aAAA,EAAe,CAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,IAOf,YAAA,EAAc,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAsBd,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAc,kDAAA;AAAA,IACd,WAAA,EAAa,UAAU,GAAG;AAAA,GAC5B;AACF;AAEA,SAAS,UAAU,GAAA,EAA4B;AAC7C,EAAA,MAAM,aAAa,GAAA,CAAI,EAAA,KAAO,QAAQ,aAAA,GAAgB,CAAA,EAAG,IAAI,EAAE,CAAA,QAAA,CAAA;AAC/D,EAAA,MAAM,SAAS,GAAA,CAAI,EAAA,KAAO,QAAQ,aAAA,GAAgB,CAAA,EAAG,IAAI,EAAE,CAAA,IAAA,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAE5C,EAAA,OAAO,CAAA,YAAA,EAAe,IAAI,QAAQ,CAAA;;AAAA;;AAAA;;AAAA,kBAAA,EAMhB,IAAI,QAAQ,CAAA;AAAA,kBAAA,EACZ,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,MAAM,MAAA,GAAS;AAAA,aAAA,EAAkB,IAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,EAAG,GAAA,CAAI,WAAW,MAAA,GAAS;AAAA,gBAAA,EAAqB,GAAA,CAAI,MAAM,CAAA,EAAA,CAAA,GAAO,EAAE;;AAAA;;AAAA;AAAA,EAK3L,UAAU;AAAA,EACV,MAAA,GAAS,CAAA;AAAA,MAAA,EAA+B,MAAM,SAAS,uBAAuB;AAAA,EAC9E,MAAM;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;AAaR;AAMA,IAAM,WAAA,GAAmF;AAAA,EACvF,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,cAAA;AAAA,EACT,aAAA,EAAe,iBAAA;AAAA,EACf,SAAA,EAAW,gBAAA;AAAA,EACX,IAAA,EAAM,WAAA;AAAA,EACN,UAAA,EAAY,cAAA;AAAA,EACZ,oBAAA,EAAsB,wBAAA;AAAA,EACtB,GAAA,EAAK,UAAA;AAAA,EACL,IAAA,EAAM,WAAA;AAAA,EACN,aAAA,EAAe,iBAAA;AAAA,EACf,OAAA,EAAS;AACX,CAAA;AAEA,eAAsB,oBAAoB,OAAA,EAA4C;AACpF,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,QAAA,EAAU,QAAQ,QAAA,IAAY,MAAA;AAAA,IAC9B,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,EAAC;AAAA,IACzB,MAAA,EAAQ,QAAQ,MAAA,IAAU,MAAA;AAAA,IAC1B,EAAA,EAAI,QAAQ,cAAA,IAAkB;AAAA,GAChC;AAEA,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,QAAQ,EAAE,GAAG,CAAA;AAC3C,EAAA,MAAMC,eAAM,OAAA,CAAQ,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAElD,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,OAAO,CAAC,YAAA,EAAc,OAAO,CAAA,KAAM;AAC3D,MAAA,MAAM,YAAA,GAAe7D,qBAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,WAAW,YAAY,CAAA;AAC9D,MAAA,MAAM6D,cAAA,CAAM7D,sBAAK,OAAA,CAAQ,YAAY,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC3D,MAAA,MAAM8D,kBAAA,CAAU,YAAA,EAAc,OAAA,EAAS,MAAM,CAAA;AAAA,IAC/C,CAAC;AAAA,GACH;AACF;ACx/CA,eAAsB,kBAAA,CACpB,QAAA,GAAqD,EAAC,EAC1B;AAC5B,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,EAAKC,sBAAA,CAAM,IAAA,EAAK,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAIA,sBAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC;AAAA,CAAI,CAAA;AACrF,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iEAA4D,CAAC,CAAA;AAE5F,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,MAAM5C,aAAA,CAAM;AAAA,MAC5B,OAAA,EAAS,oBAAA;AAAA,MACT,OAAA,EAAS,SAAS,GAAA,IAAO,eAAA;AAAA,MACzB,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,OAAO,+BAAA;AAC1B,QAAA,MAAM,MAAMnB,qBAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,KAAK,CAAA;AAC7C,QAAA,IAAIa,aAAAA,CAAW,GAAG,CAAA,EAAG,OAAO,GAAG,KAAK,CAAA,uCAAA,CAAA;AACpC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACD,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAMmD,cAAA,CAAoB;AAAA,MACzC,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,SAAS,QAAA,IAAY,OAAA;AAAA,MAC9B,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,6BAAA,EAA+B,KAAA,EAAO,OAAA,EAAS,aAAa,oCAAA,EAAqC;AAAA,QACzG,EAAE,IAAA,EAAM,2CAAA,EAA6C,KAAA,EAAO,QAAA,EAAU,aAAa,0CAAA,EAA2C;AAAA,QAC9H,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,WAAA,EAAa,aAAa,mDAAA,EAAoD;AAAA,QAC/G,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,aAAa,0DAAA,EAA2D;AAAA,QAC5G,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,KAAA,EAAO,aAAa,gCAAA,EAAiC;AAAA,QAC9F,EAAE,IAAA,EAAM,mCAAA,EAAqC,KAAA,EAAO,UAAA,EAAY,aAAa,oCAAA,EAAqC;AAAA,QAClH,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,oBAAA,EAAsB,aAAa,2CAAA,EAA4C;AAAA,QAC3H,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,KAAA,EAAO,aAAa,2BAAA,EAA4B;AAAA,QAC7E,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,aAAa,0CAAA,EAA2C;AAAA,QACrG,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,MAAA,EAAQ,aAAa,+CAAA,EAAgD;AAAA,QAC5G,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,SAAA,EAAW,aAAa,yDAAA,EAA0D;AAAA,QACvH,EAAE,IAAA,EAAM,iCAAA,EAAmC,KAAA,EAAO,SAAA,EAAW,aAAa,+BAAA,EAA2B;AAAA,QACrG,EAAE,IAAA,EAAM,mCAAA,EAAqC,KAAA,EAAO,aAAA,EAAe,aAAa,qCAAA;AAAsC;AACxH,KACD,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAMA,cAAA,CAAiB;AAAA,MACtC,OAAA,EAAS,eAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,6CAAA,EAA0C,KAAA,EAAO,MAAA,EAAO;AAAA,QAChE,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,QAAA;AAAS;AACpD,KACD,CAAA;AAED,IAAA,IAAI,QAAoB,EAAC;AACzB,IAAA,IAAI,aAAa,OAAA,EAAS;AAExB,MAAA,KAAA,GAAQ,MAAMC,gBAAA,CAAmB;AAAA,QAC/B,OAAA,EAAS,4CAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,YAAA,EAAa;AAAA,UAC1C,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,YAAA,EAAa;AAAA,UAC1C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA;AAAQ;AAClC,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,MAAMD,cAAA,CAAmB;AAAA,MACtC,OAAA,EAAS,iBAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,qBAAA,EAAuB,KAAA,EAAO,MAAA,EAAO;AAAA,QAC7C,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,QAAA;AAAS;AACrD,KACD,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,MAAMA,cAAA,CAAuB;AAAA,MAClD,OAAA,EAAS,kBAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,QAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA;AAAM;AAC9B,KACD,CAAA;AAED,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,IAAA,GAAOD,sBAAA,CAAM,GAAA,CAAI,cAAc,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iBAAiB,SAAS;AAAA,CAAI,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iBAAiB,QAAQ;AAAA,CAAI,CAAC,CAAA;AAC7D,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iBAAiB,QAAQ;AAAA,CAAI,CAAC,CAAA;AAC7D,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAC,CAAA;AACvF,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iBAAiB,MAAM;AAAA,CAAI,CAAC,CAAA;AAC3D,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,iBAAiB,cAAc;;AAAA,CAAM,CAAC,CAAA;AAErE,IAAA,MAAM,OAAA,GAAU,MAAMG,eAAA,CAAQ,EAAE,SAAS,WAAA,EAAa,OAAA,EAAS,MAAM,CAAA;AACrE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMH,sBAAA,CAAM,MAAA,CAAO,cAAc,CAAC,CAAA;AACjD,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAe,EAAE;AAAA,IACtG;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,KAAA;AAAA,MACX,OAAA,EAAS;AAAA,QACP,WAAW/D,qBAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,SAAS,CAAA;AAAA,QAChD,QAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,SAAS,GAAA,EAAK;AAEZ,IAAA,IAAK,GAAA,CAAc,SAAS,iBAAA,EAAmB;AAC7C,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM+D,sBAAA,CAAM,MAAA,CAAO,gBAAgB,CAAC,CAAA;AACnD,MAAA,OAAO,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,EAAE,SAAA,EAAW,EAAA,EAAI,QAAA,EAAU,OAAA,EAAQ,EAAE;AAAA,IAC1E;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEO,SAAS,eAAe,OAAA,EAAmC;AAChE,EAAA,MAAM,GAAA,GAAM/D,sBAAK,QAAA,CAAS,OAAA,CAAQ,KAAI,EAAG,OAAA,CAAQ,SAAS,CAAA,IAAK,GAAA;AAC/D,EAAA,MAAM,EAAA,GAAK,QAAQ,cAAA,IAAkB,MAAA;AACrC,EAAA,MAAM,UAAA,GAAa,EAAA,KAAO,KAAA,GAAQ,aAAA,GAAgB,GAAG,EAAE,CAAA,QAAA,CAAA;AACvD,EAAA,MAAM,MAAA,GAAS,EAAA,KAAO,KAAA,GAAQ,aAAA,GAAgB,GAAG,EAAE,CAAA,IAAA,CAAA;AAEnD,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,GAAO+D,sBAAA,CAAM,KAAA,CAAM,4BAAuB,CAAA,GAAIA,sBAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAM,CAAA;AAC3F,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AAClD,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAA,EAAKA,sBAAA,CAAM,KAAK,IAAI,CAAC,IAAI,GAAG;AAAA,CAAI,CAAA;AACrD,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAA,EAAKA,sBAAA,CAAM,IAAA,CAAK,UAAU,CAAC;AAAA,CAAI,CAAA;AACpD,EAAA,IAAI,QAAQ,QAAA,IAAY,OAAA,CAAQ,aAAa,MAAA,IAAU,OAAA,CAAQ,aAAa,QAAA,EAAU;AACpF,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,EAAA,EAAKA,uBAAM,IAAA,CAAK,IAAI,CAAC,CAAA,oBAAA,EAAuBA,sBAAA,CAAM,GAAA,CAAI,oBAAoB,CAAC;AAAA;AAAA,KAC7E;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAA,EAAKA,sBAAA,CAAM,IAAA,CAAK,MAAM,CAAC;;AAAA,CAAM,CAAA;AAClD,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,yCAAyC,CAAC,CAAA;AACzE,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IACbA,uBAAM,MAAA,CAAO,yBAAoB,CAAA,GAC/BA,sBAAA,CAAM,IAAI,oFAA+E;AAAA,GAC7F;AACF;;;AC7JO,SAAS,oBAAoB,OAAA,EAAwB;AAC1D,EAAA,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,qEAAqE,EACjF,MAAA,CAAO,uBAAA,EAAyB,iIAAiI,CAAA,CACjK,OAAO,mBAAA,EAAqB,kBAAA,EAAoB,eAAe,CAAA,CAC/D,OAAO,uBAAA,EAAyB,oDAAoD,CAAA,CACpF,MAAA,CAAO,mBAAmB,qDAAqD,CAAA,CAC/E,MAAA,CAAO,oBAAA,EAAsB,mCAAmC,CAAA,CAChE,MAAA,CAAO,uBAAA,EAAyB,qCAAqC,EACrE,MAAA,CAAO,WAAA,EAAa,sDAAsD,CAAA,CAC1E,MAAA,CAAO,OAAO,UAAA,KAAe;AAC5B,IAAA,MAAM,OAAO,CAAC,OAAA,CAAQ,OAAO,KAAA,IAAS,UAAA,CAAW,OAAO,UAAA,CAAW,QAAA;AACnE,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,QAAA,GAAY,WAAW,QAAA,IAAY,OAAA;AACzC,MAAA,QAAA,GAAW;AAAA,QACT,WAAW/D,qBAAAA,CAAK,OAAA,CAAQ,QAAQ,GAAA,EAAI,EAAG,WAAW,GAAG,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,QAAA,EAAW,WAAW,QAAA,IAAY,MAAA;AAAA,QAClC,KAAA,EAAO,UAAA,CAAW,KAAA,GACb,UAAA,CAAW,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAc,CAAA,CAAE,IAAA,EAAM,IACxD,EAAC;AAAA,QACL,MAAA,EAAS,WAAW,MAAA,IAAU,MAAA;AAAA,QAC9B,cAAA,EAAiB,WAAW,EAAA,IAAM;AAAA,OACpC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,QACtC,KAAK,UAAA,CAAW,GAAA;AAAA,QAChB,UAAU,UAAA,CAAW;AAAA,OACtB,CAAA;AACD,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,QAAA,GAAW,MAAA,CAAO,OAAA;AAAA,IACpB;AAEA,IAAA,MAAM,oBAAoB,QAAQ,CAAA;AAElC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,CAAA,QAAA,EAAW,QAAA,CAAS,QAAQ,CAAA,YAAA,EAAeA,qBAAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,EAAG,QAAA,CAAS,SAAS,CAAA,IAAK,GAAG;AAAA;AAAA;AAAA,OAEpG;AAAA,IACF,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF,CAAC,CAAA;AACL;ACjCA,IAAM,iBAAA,GAA4C;AAAA,EAChD,MAAA,EAAQ,gBAAA;AAAA,EACR,SAAA,EAAW,mBAAA;AAAA,EACX,MAAA,EAAQ,gBAAA;AAAA,EACR,QAAA,EAAU,kBAAA;AAAA,EACV,IAAA,EAAM,aAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,mBAAA,GAA8C;AAAA,EAClD,MAAA,EAAQ,kCAAA;AAAA,EACR,SAAA,EAAW,uCAAA;AAAA,EACX,MAAA,EAAQ,yDAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAMA,eAAsB,gBAAA,GAAyC;AAC7D,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,QAAA,CAAS,KAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AACxD,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,QAAQ,uCAAA,EAAwC;AAAA,EACjG;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,WAAA,CAAA;AAAA,MACrC,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,sCAAA,CAAA;AAAA,MACrC,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,QAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,CAAA,EAAG;AACzF;AAEA,eAAsB,SAAA,GAAkC;AAEtD,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,EAAA,MAAM,OAAA,GAAUa,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,gBAAgB,CAAC,CAAA,IAAKW,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,qBAAqB,CAAC,CAAA;AACtG,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAA,EAAmB,QAAQ,0BAAA,EAA2B;AAAA,EACvF;AACA,EAAA,IAAIW,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,mBAAmB,CAAC,CAAA,EAAG;AAC9C,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAA,EAAmB,QAAQ,6DAAA,EAAyD;AAAA,EACrH;AACA,EAAA,IAAIW,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,WAAW,CAAC,CAAA,EAAG;AACtC,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAA,EAAmB,QAAQ,eAAA,EAAgB;AAAA,EAC5E;AACA,EAAA,IAAIW,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,UAAU,CAAC,CAAA,IAAKW,aAAAA,CAAWX,SAAAA,CAAK,GAAA,EAAK,WAAW,CAAC,CAAA,EAAG;AAC3E,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAA,EAAmB,QAAQ,cAAA,EAAe;AAAA,EAC3E;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,eAAsB,gBAAA,GAAyC;AAC7D,EAAA,MAAMF,KAAAA,GAAOE,SAAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,cAAc,CAAA;AAC/C,EAAA,IAAI,CAACW,aAAAA,CAAWb,KAAI,CAAA,EAAG;AACrB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,MAAMC,iBAAAA,CAASD,KAAAA,EAAM,MAAM,CAAC,CAAA;AACnD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAK,GAAA,CAAI,YAAA,IAA2C,EAAC;AAAA,MACrD,GAAK,GAAA,CAAI,eAAA,IAA8C;AAAC,KAC1D;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,IAAI,CAAA,KAAM,IAAA,CAAK,UAAA,CAAW,aAAa,CAAC,CAAA;AACrF,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,oBAAA,EAAsB,QAAQ,4CAAA,EAA6C;AAAA,IAC5G;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oBAAA;AAAA,MACN,QAAQ,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,YAAA,EAAe,MAAA,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,aAAA,EAAe,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACrG;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,CAAA,iBAAA,EAAqB,GAAA,CAAc,OAAO,CAAA;AAAA,KACpD;AAAA,EACF;AACF;AAEA,eAAsB,iBAAiB,QAAA,EAAwC;AAC7E,EAAA,MAAM,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,GAAG,QAAQ,CAAA,QAAA,CAAA,EAAY,QAAQ,0CAAA,EAA2C;AAAA,EAC3G;AACA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAChC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,MACjB,MAAA,EAAQ,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,MACjB,GAAA,EAAK,CAAA,OAAA,EAAU,MAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAA;AAAA,KAC/D;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,EAAA,EAAI;AACrB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,QAAQ,CAAA,QAAA,CAAA;AAAA,MACjB,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,kBAAA,EAAqB,MAAM,MAAM,CAAA,OAAA,CAAA;AAAA,MAClD,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,QAAA,CAAA,EAAY,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,KAAA,CAAM,MAAM,CAAA,OAAA,CAAA,EAAU;AACxG;AAEA,eAAsB,sBAAA,CACpB,QAAA,EACA,SAAA,GAA0B,KAAA,EAC1B,YAAY,GAAA,EACU;AACtB,EAAA,MAAM,GAAA,GAAM,oBAAoB,QAAQ,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,GAAG,QAAQ,CAAA,UAAA,CAAA,EAAc,QAAQ,kCAAA,EAAmC;AAAA,EACrG;AAGA,EAAA,MAAM,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AACzC,EAAA,IAAI,MAAA,IAAU,CAAC,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAClC,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,GAAG,QAAQ,CAAA,UAAA,CAAA,EAAc,QAAQ,sCAAA,EAAkC;AAAA,EACpG;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,SAAS,CAAA;AAC5D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,GAAA,EAAK;AAAA,MAC/B,MAAA,EAAQ,KAAA;AAAA,MACR,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AAGD,IAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,GAAA,CAAI,SAAS,GAAA,EAAK;AACzC,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,UAAA,CAAA,EAAc,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,GAAA,CAAA,EAAM;AAAA,IAC9F;AACA,IAAA,IAAI,GAAA,CAAI,WAAW,GAAA,IAAO,GAAA,CAAI,WAAW,GAAA,IAAO,GAAA,CAAI,WAAW,GAAA,EAAK;AAClE,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,UAAA,CAAA,EAAc,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,iBAAA,CAAA,EAAoB;AAAA,IAC5G;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,QAAQ,CAAA,UAAA,CAAA;AAAA,MACjB,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA,aAAA,EAAW,IAAI,MAAM,CAAA,CAAA;AAAA,MACnC,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAU,GAAA,CAAc,IAAA,KAAS,eAAe,CAAA,cAAA,EAAiB,SAAS,OAAQ,GAAA,CAAc,OAAA;AACtG,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,QAAQ,CAAA,UAAA,CAAA;AAAA,MACjB,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA,QAAA,EAAM,MAAM,CAAA,CAAA;AAAA,MAC1B,GAAA,EACE,QAAA,KAAa,QAAA,GACT,mEAAA,GACA;AAAA,KACR;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;AAEA,eAAsB,WAAA,GAAoC;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,EAAW;AAChC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,kBAAA,EAAoB,QAAQ,sDAAA,EAAuD;AAAA,IACpH;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,2BAAsB,IAAA,CAAK,SAAA,CAAU,OAAO,QAAA,IAAY,EAAE,CAAC,CAAA;AAAA,KACrE;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,CAAA,gBAAA,EAAoB,GAAA,CAAc,OAAO,CAAA;AAAA,KACnD;AAAA,EACF;AACF;AAeA,eAAsB,SAAA,CAAU,OAAA,GAAyB,EAAC,EAA0B;AAClF,EAAA,MAAMmE,aAAY,OAAA,CAAQ,SAAA,IAAa,CAAC,QAAA,EAAU,WAAA,EAAa,UAAU,QAAQ,CAAA;AACjF,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AAEvC,EAAA,MAAM,MAAA,GAAsC;AAAA,IAC1C,gBAAA,EAAiB;AAAA,IACjB,SAAA,EAAU;AAAA,IACV,gBAAA,EAAiB;AAAA,IACjB,WAAA;AAAY,GACd;AAEA,EAAA,KAAA,MAAW,YAAYA,UAAAA,EAAW;AAChC,IAAA,MAAA,CAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,CAAC,CAAA;AACtC,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAExC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IAC/C,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IAC/C,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IAC/C,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE;AAAA,GACjD;AACF;AAMA,IAAM,IAAA,GAAoC;AAAA,EACxC,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,YAAA,CAAa,MAAA,EAAsB,IAAA,GAA4B,EAAC,EAAW;AACzF,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,IAAA;AAC5B,EAAA,MAAM,CAAA,GAAI,CAAC,IAAA,EAAc,IAAA,KAAkB,QAAQ,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAA,GAAY,IAAA;AACnF,EAAA,MAAM,QAAA,GAAuD;AAAA,IAC3D,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAAA;AAAA,IACpB,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAAA;AAAA,IACpB,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAAA;AAAA,IACpB,IAAA,EAAM,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAC;AAAA;AAAA,GACtB;AAEA,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,MAAA,EAAQ,yBAAoB,CAAC,CAAA,CAAE,CAAA;AACjD,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAM,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,MAAA,GAAwC;AAAA,IAC5C,eAAe,EAAC;AAAA,IAChB,aAAa,EAAC;AAAA,IACd,WAAW;AAAC,GACd;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,IAAA,IAAI,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,IAC1B,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AACrC,MAAA,MAAA,CAAO,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,aAAa,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,EAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAC/B,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,IAAA,GAAO,SAAS,CAAA,CAAE,MAAM,EAAE,IAAA,CAAK,CAAA,CAAE,MAAM,CAAC,CAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAC7B,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA,GAAS,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,CAAA,GAAI,EAAA;AAC9C,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAI,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAC3C,MAAA,IAAI,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ;AAChC,QAAA,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,EAAM,YAAO,CAAA,CAAE,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,MAC9C;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAM,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AACzC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,OAAA,CAAS,CAAC,CAAA;AACtE,EAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,SAAA,CAAW,CAAC,CAAA;AACxE,EAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,OAAA,CAAS,CAAC,CAAA;AACtE,EAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,QAAA,CAAU,CAAC,CAAA;AACvE,EAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,UAAO,CAAC,CAAA,CAAE,CAAA;AAGrC,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,EAAM,+BAA0B,CAAC,CAAA,CAAE,CAAA;AAAA,EACvD,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,EAAM,gDAA2C,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACjVO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,OAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA,CAAO,cAAA,EAAgB,mCAAmC,CAAA,CAC1D,MAAA;AAAA,IACC,yBAAA;AAAA,IACA;AAAA,IAED,MAAA,CAAO,QAAA,EAAU,uCAAuC,CAAA,CACxD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,MAAMA,aAAY,OAAA,CAAQ,SAAA,GACtB,OAAA,CAAQ,SAAA,CAAU,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAc,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GACxE,MAAA;AAEJ,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,MAC7B,SAAA,EAAAA,UAAAA;AAAA,MACA,SAAA,EAAW,QAAQ,OAAA,KAAY;AAAA,KAChC,CAAA;AAED,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,YAAA,CAAa,MAAA,EAAQ,EAAE,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,IAC5E;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACrC,CAAC,CAAA;AACL;ACIA,IAAM,aAAA,GAAgB;AAAA,EACpB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,oBAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAkBO,SAAS,SAAS,OAAA,EAAoC;AAC3D,EAAA,MAAM,QAAQC,YAAA,CAAY,OAAA,CAAQ,GAAA,EAAI,EAAG,QAAQ,KAAK,CAAA;AACtD,EAAA,IAAI,CAACvD,aAAAA,CAAW,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAE,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AACzC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AACzC,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AAEzC,EAAA,MAAM,OAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,GAAQ,MAAA;AAC3B,EAAA,MAAM,WAAW,CAAC,KAAA,EAAO,GAAI,OAAA,CAAQ,UAAA,IAAc,EAAG,CAAA;AAEtD,EAAA,MAAM,OAAA,GACJ,QAAQ,KAAA,KACP,CAAC,GAAW,CAAA,KACX0B,mBAAAA,CAAM,GAAG,CAAA,EAAG;AAAA,IACV,KAAA,EAAO,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAAA,IACjC,KAAK,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAK,aAAa,GAAA;AAAI,GACzC,CAAA,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,IAAS,aAAA;AACpC,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,cAAA,EAAgB,GAAI,OAAA,CAAQ,MAAA,IAAU,EAAG,CAAA;AACjE,EAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,OAAA,KACP,CAAC,OAAO,IAAA,KAAS8B,yBAAA,CAAS,KAAA,CAAM,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,aAAA,EAAe,MAAM,CAAA,CAAA;AAExF,EAAA,MAAM,UAAU,cAAA,CAAe,UAAA,EAAY,EAAE,OAAA,EAAS,aAAa,CAAA;AAEnE,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,WAAA;AACJ,EAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAc,CAAA,CAAA,KAAK;AAAE,IAAA,WAAA,GAAc,CAAA;AAAA,EAAE,CAAC,CAAA;AAEvD,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,KAAA,GAA6C,OAAA,KAAY;AACpF,IAAA,MAAM,IAAA,GAAA,qBAAW,IAAA,EAAK,EAAE,cAAa,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AACjD,IAAA,MAAA,CAAO,KAAA,CAAMN,uBAAM,KAAK,CAAA,CAAE,kBAAkB,IAAI,CAAA,EAAA,CAAI,CAAA,GAAI,GAAA,GAAM,IAAI,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,YAAA,EAAA;AACA,IAAA,MAAA,CAAO,CAAA,gBAAA,EAAcA,sBAAAA,CAAM,IAAA,CAAKO,aAAA,CAAS,KAAK,CAAC,CAAC,CAAA,WAAA,EAAc,YAAA,GAAe,CAAC,CAAA,CAAA,CAAA,EAAK,MAAM,CAAA;AAEzF,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AAC/B,IAAA,KAAA,GAAQ,CAAA;AACR,IAAA,CAAA,CAAE,MAAA,EAAQ,GAAG,MAAA,EAAQ,CAAC,MAAc,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACnD,IAAA,CAAA,CAAE,MAAA,EAAQ,GAAG,MAAA,EAAQ,CAAC,MAAc,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACnD,IAAA,CAAA,CAAE,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAA,KAAW;AAC7B,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,IAAI,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,QAAA,EAAU;AACjD,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,MAAA,CAAO,oDAA0C,OAAO,CAAA;AAAA,MAC1D,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,CAAA,wBAAA,EAAsB,IAAI,CAAA,2BAAA,CAAA,EAA0B,KAAK,CAAA;AAAA,MAClE;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAACtE,KAAAA,KAAiB;AAChC,IAAA,IAAI,YAAA,eAA2B,YAAY,CAAA;AAC3C,IAAA,YAAA,GAAe,WAAW,MAAM;AAC9B,MAAA,YAAA,GAAe,MAAA;AACf,MAAA,MAAA,CAAO,CAAA,8BAAA,EAAuBA,KAAI,CAAA,CAAA,EAAI,QAAQ,CAAA;AAC9C,MAAA,IAAI,SAAS,CAAC,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,aAAa,IAAA,EAAM;AACrD,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,MACtB;AAEA,MAAA,UAAA,CAAW,YAAY,EAAE,CAAA;AAAA,IAC3B,GAAG,UAAU,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,OAAO,CAAA;AAC5B,EAAA,OAAA,CAAQ,EAAA,CAAG,OAAO,OAAO,CAAA;AACzB,EAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,OAAO,CAAA;AAE5B,EAAA,UAAA,EAAW;AAEX,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI,OAAA,EAAS;AACb,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,IAAI,YAAA,eAA2B,YAAY,CAAA;AAC3C,IAAA,IAAI,SAAS,CAAC,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,aAAa,IAAA,EAAM;AACrD,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IACtB;AACA,IAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,IAAA,MAAA,CAAO,WAAW,MAAM,CAAA;AACxB,IAAA,WAAA,EAAY;AAAA,EACd,CAAA;AAGA,EAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,KAAA,IAAS,OAAA,CAAQ,MAAM,UAAA,EAAY;AACnD,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAA;AAC7B,IAAA,OAAA,CAAQ,MAAM,MAAA,EAAO;AACrB,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AACzC,MAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAC1B,MAAA,IAAI,GAAA,KAAQ,GAAA,EAAK,OAAA,CAAQ,QAAQ,CAAA;AACjC,MAAA,IAAI,GAAA,KAAQ,GAAA,IAAO,GAAA,KAAQ,GAAA,OAAe,IAAA,EAAK;AAAA,IACjD,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU,MAAM;AAAA,GAClB;AACF;;;AChLO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,OAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,oDAAoD,CAAA,CAChE,MAAA,CAAO,iBAAA,EAAmB,wCAAwC,CAAA,CAClE,MAAA,CAAO,oBAAoB,yCAAyC,CAAA,CACpE,OAAO,iBAAA,EAAmB,gCAAA,EAAkC,KAAK,CAAA,CACjE,MAAA,CAAO,OAAO,UAAA,EAAgC,OAAA,KAAY;AACzD,IAAA,MAAM,QAAQ,UAAA,IAAc,cAAA;AAC5B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,GACjB,OAAA,CAAQ,KAAA,CAAiB,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAc,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAChF,MAAA;AACJ,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,GAClB,OAAA,CAAQ,MAAA,CAAkB,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAc,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GACjF,MAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAM,aAAa,QAAA,CAAS;AAAA,QAC1B,KAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,IAAK;AAAA,OACzC,CAAA;AACD,MAAA,MAAM,UAAA,CAAW,IAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,OAAA,EAAW,GAAA,CAAc,OAAO;AAAA,CAAI,CAAA;AACzD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC1BO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,OAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,wCAAwC,CAAA,CACpD,QAAA;AAAA,IACC,UAAA;AAAA,IACA,yEAAA;AAAA,IACA;AAAA,IAED,MAAA,CAAO,UAAA,EAAY,oEAAoE,CAAA,CACvF,OAAO,SAAA,EAAW,4EAA4E,CAAA,CAC9F,MAAA,CAAO,WAAW,mCAAmC,CAAA,CACrD,MAAA,CAAO,OAAO,QAAgB,OAAA,KAAY;AACzC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,OAAA,GACfA,qBAAAA,CAAK,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,wBAAwB,CAAA,GACjDA,qBAAAA,CAAK,IAAA,CAAKG,UAAAA,EAAQ,EAAG,cAAc,aAAa,CAAA;AAEpD,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,EAAW;AAChC,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAA,IAAU,EAAC,EAAG,IAAA,EAAM,CAAC,CAAA,GAAI,IAAI,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAM,CAAA;AAAA,CAA2B,CAAA;AACzE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,QAAA,EAAU;AAAA,QACR,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,2BAAA;AAAA,QACT,SAAA,EAAW,oBAAA;AAAA,QACX,KAAA,EAAO,0BAAA;AAAA,QACP,KAAA,EAAO;AAAA;AACT,KACF;AAEA,IAAAoE,YAAAA,CAAUvE,sBAAK,OAAA,CAAQ,UAAU,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAGvD,IAAA,IAAI;AACF,MAAAgB,gBAAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAU,UAAU,IAAA,EAAM,CAAC,IAAI,IAAA,EAAM;AAAA,QAClE,IAAA,EAAM,OAAA,CAAQ,KAAA,GAAQ,GAAA,GAAM;AAAA,OAC7B,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAK,GAAA,CAA8B,SAAS,QAAA,EAAU;AACpD,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UACb,4BAA4B,UAAU,CAAA;AAAA;AAAA,SACxC;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,SAAS,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,KAGrB;AAAA,EACF,CAAC,CAAA;AACL;ACzBA,eAAsB,YAAY,OAAA,EAAmD;AACnF,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AACzC,EAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,IAAA,KACP,OAAO,IAAA,KAAS;AACf,IAAA,MAAM,EAAA,GAAA,CAAM,MAAM,OAAO,aAAa,CAAA,EAAG,OAAA;AACzC,IAAA,OAAQ,MAAM,GAAG,IAAI,CAAA;AAAA,EACvB,CAAA,CAAA;AAEF,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,KAAA,GAA6C,OAAA,KAAY;AACpF,IAAA,MAAM,IAAA,GAAA,qBAAW,IAAA,EAAK,EAAE,cAAa,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AACjD,IAAA,MAAA,CAAO,KAAA,CAAM+C,uBAAM,KAAK,CAAA,CAAE,qBAAqB,IAAI,CAAA,EAAA,CAAI,CAAA,GAAI,GAAA,GAAM,IAAI,CAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAA,CAAO,CAAA,kBAAA,EAAqB,QAAQ,IAAA,IAAQ,WAAW,IAAI,OAAA,CAAQ,IAAI,OAAO,MAAM,CAAA;AAEpF,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK;AAAA,IACxB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AAED,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,WAAA;AACJ,EAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAc,CAAA,CAAA,KAAK;AAAE,IAAA,WAAA,GAAc,CAAA;AAAA,EAAE,CAAC,CAAA;AAEvD,EAAA,MAAA,CAAO,EAAA,CAAG,WAAW,MAAM;AACzB,IAAA,QAAA,EAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,EAAA,CAAG,SAAS,MAAM;AACvB,IAAA,IAAI,OAAA,EAAS;AACb,IAAA,MAAA,CAAO,2BAA2B,QAAQ,CAAA;AAC1C,IAAA,WAAA,EAAY;AAAA,EACd,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAA,GAAI,IAAA,KAAoB;AACzC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAA,CAAO,CAAA,OAAA,EAAU,GAAA,EAAK,OAAA,IAAW,SAAS,IAAI,KAAK,CAAA;AAAA,EACrD,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,gBAAW,OAAO,CAAA;AACzB,EAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA,EAAKA,sBAAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA,EAAA,EAAKA,sBAAAA,CAAM,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AAC1E,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA,EAAKA,sBAAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,cAAA,EAAiB,OAAA,CAAQ,IAAA,IAAQ,WAAW,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI;AAAA,CAAI,CAAA;AACtG,EAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,EAAA,MAAA,CAAO,MAAMA,sBAAAA,CAAM,GAAA,CAAI,iCAAiCA,sBAAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;;AAAA,CAAe,CAAC,CAAA;AAE5F,EAAA,OAAA,CAAQ,OAAA,GAAU,OAAO,GAAG,CAAA;AAE5B,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI,OAAA,EAAS;AACb,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,MAAA,CAAO,CAAA,uBAAA,EAAqB,QAAQ,CAAA,QAAA,EAAW,QAAA,KAAa,IAAI,EAAA,GAAK,GAAG,IAAI,MAAM,CAAA;AAClF,IAAA,WAAA,EAAY;AAAA,EACd,CAAA;AAGA,EAAA,IAAI,OAAA,CAAQ,MAAM,KAAA,EAAO;AACvB,IAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,MAAA,KAAK,IAAA,EAAK;AAAA,IACZ,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU,MAAM;AAAA,GAClB;AACF;;;AC/GO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,OAAA,CACG,QAAQ,eAAe,CAAA,CACvB,YAAY,kEAAkE,CAAA,CAC9E,OAAO,oBAAA,EAAsB,oDAAoD,CAAA,CACjF,MAAA,CAAO,iBAAiB,gBAAA,EAAkB,WAAW,EACrD,MAAA,CAAO,OAAO,MAAc,OAAA,KAAY;AACvC,IAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,IAAA,IAAI,OAAO,KAAA,CAAM,OAAO,KAAK,OAAA,GAAU,CAAA,IAAK,UAAU,KAAA,EAAO;AAC3D,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAI;AAAA,CAAI,CAAA;AACrD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY;AAAA,QACnC,IAAA,EAAM,OAAA;AAAA,QACN,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,MAAM,OAAA,CAAQ;AAAA,OACf,CAAA;AACD,MAAA,MAAM,UAAA,CAAW,IAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,OAAA,EAAW,GAAA,CAAc,OAAO;AAAA,CAAI,CAAA;AACzD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;ACbO,SAAS,qBAAqB,MAAA,EAAuC;AAC1E,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,wBAAA;AAC9B,EAAA,MAAM,WAAW,MAAA,CAAO,OAAA,IAAW,wBAAA,EAA0B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAE9E,EAAA,OAAO,OAAO,IAAA,KAAoC;AAKhD,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,MAClD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA;AAAA,OACxC;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,KAC5C,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,MAAM,CAAA,SAAA,EAAY,KAAK,SAAS,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAC7B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,SAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,KAAK,CAAA,oCAAA,CAAsC,CAAA;AACnF,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACF;ACDO,SAAS,gBAAgB,MAAA,EAA4B;AAC1D,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,EAAA,MAAM,QAAA,GAAW,UAAU,QAAA,IAAY,QAAA;AACvC,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,QAAQ,CAAA,4BAAA,CAA8B,CAAA;AAAA,EAC9F;AACA,EAAA,MAAM,SAAS,QAAA,EAAU,MAAA,IAAU,QAAQ,GAAA,CAAI,cAAA,IAAkB,QAAQ,GAAA,CAAI,kBAAA;AAC7E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,mFAAmF,CAAA;AAAA,EACrG;AACA,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,MAAA;AAAA,IACA,OAAO,QAAA,EAAU,KAAA;AAAA,IACjB,SAAS,QAAA,EAAU;AAAA,GACpB,CAAA;AACH;AAMO,SAAS,mBAAmB,OAAA,EAA+B;AAChE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACvC,EAAA,MAAM,MAAM3D,YAAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,OAAO,kBAAkB,CAAA;AACjE,EAAA,MAAM,QAAQoE,uBAAA,CAAiB,EAAE,MAAM,CAAA,EAAG,GAAG,eAAe,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,QAAA,IAAY,eAAA,CAAgB,QAAQ,MAAM,CAAA;AAChE,EAAA,OAAOC,aAAA,CAAU;AAAA,IACf,KAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,QAAQ,MAAA,CAAO,SAAA;AAAA,IAC1B,IAAA,EAAM,QAAQ,MAAA,CAAO;AAAA,GACtB,CAAA;AACH;AAMA,eAAsB,YAAA,CAAa,GAAA,EAAU,MAAA,EAAmB,GAAA,EAAoC;AAClG,EAAA,MAAM,IAAA,GAAO,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAChC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,EAAA,MAAM,gBAA0B,EAAC;AAEjC,EAAA,KAAA,MAAW,WAAW,OAAA,EAAS;AAC7B,IAAA,WAAA,MAAiB,SAASC,aAAA,CAAK,OAAA,EAAS,EAAE,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG;AACtD,MAAA,aAAA,CAAc,IAAA,CAAKtE,YAAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC9B,aAAA,CAAc,GAAA,CAAI,OAAOJ,KAAAA,MAAU;AAAA,MACjC,EAAA,EAAIA,KAAAA;AAAA,MACJ,OAAA,EAAS,MAAMC,iBAAAA,CAASD,KAAAA,EAAM,MAAM,CAAA;AAAA,MACpC,MAAA,EAAQA;AAAA,KACV,CAAE;AAAA,GACJ;AAEA,EAAA,IAAI,UAAU,MAAA,GAAS,CAAA,EAAG,MAAM,GAAA,CAAI,OAAO,SAAS,CAAA;AAEpD,EAAA,OAAO,EAAE,aAAA,EAAe,SAAA,CAAU,MAAA,EAAQ,SAAS,aAAA,EAAc;AACnE;;;AC/FO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,MAAM,MAAM,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAY,2CAA2C,CAAA;AAE1F,EAAA,GAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,qEAAqE,CAAA,CACjF,MAAA;AAAA,IAAO,iBAAA;AAAA,IAAmB,0DAAA;AAAA,IACzB,CAAC,OAAe,IAAA,GAAiB,OAAO,CAAC,GAAG,MAAM,KAAK,CAAA;AAAA,IACvD;AAAC,GAAC,CACH,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,EAAW;AAChC,IAAA,MAAM,YAAa,MAAA,EAA2C,GAAA;AAC9D,IAAA,MAAM,kBAAkB,OAAA,CAAQ,MAAA;AAChC,IAAA,MAAM,SAAA,GAAuB;AAAA,MAC3B,GAAI,aAAa,EAAC;AAAA,MAClB,SAAS,eAAA,CAAgB,MAAA,GAAS,IAAI,eAAA,GAAkB,SAAA,EAAW,WAAW;AAAC,KACjF;AACA,IAAA,IAAI,CAAC,SAAA,CAAU,OAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxD,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,8EAA8E,CAAA;AACnG,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,EAAE,MAAA,EAAQ,WAAW,CAAA;AACzD,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,QAAA,EAAU,SAAS,CAAA;AACrD,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,CAAA,QAAA,EAAW,OAAO,aAAa,CAAA,SAAA,EAAY,OAAO,aAAA,KAAkB,CAAA,GAAI,KAAK,GAAG,CAAA;AAAA;AAAA,OAClF;AACA,MAAA,KAAA,MAAW,MAAA,IAAU,OAAO,OAAA,EAAS;AACnC,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,SAAA,EAAO,MAAM;AAAA,CAAI,CAAA;AAAA,MACxC;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AACnF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;AChCA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,IAAA,CAAK,QAAQ,WAAA,EAAa,CAAC,GAAG,CAAA,KAAc,CAAA,CAAE,aAAa,CAAA;AACpE;AAEA,SAAS,SAAS,IAAA,EAA+B;AAC/C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,GAAS,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,GAAI,oCAAA;AACpE,EAAA,OAAO,CAAA;;AAAA;AAAA,GAAA,EAGJ,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,IAAI;AAAA,GAAA,EAC7B,KAAK,cAAA,GAAiB;AAAA,wBAAA,EAA6B,IAAA,CAAK,cAAc,CAAA,CAAA,GAAK,EAAE;AAAA;AAAA,aAAA,EAEnE,MAAM,CAAA;AAAA,SAAA,EACV,KAAK,IAAI,CAAA;AAAA,eAAA,EACH,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,WAAA,IAAe,EAAE,CAAC,CAAA;AAAA,UAAA,EAC3C,MAAM,CAAA;AAAA,EAAA,EACd,IAAA,CAAK,oBAAA,GAAuB,6BAAA,GAAgC,EAAE;AAAA;AAAA,uBAAA,EAEzC,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA,CAAA;AAKlC;AAEA,SAAS,QAAQ,MAAA,EAA6B;AAC5C,EAAA,MAAM2E,gBAAe,MAAA,CAAO,KAAA,IAAS,EAAC,EACnC,GAAA,CAAI,OAAK,CAAA,SAAA,EAAY,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,iBAAA,EAAoB,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA,CACtE,KAAK,IAAI,CAAA;AACZ,EAAA,MAAMC,SAAAA,GAAAA,CAAY,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAA,CAAA,KAAK,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAC9E,EAAA,OAAO,CAAA;AAAA,EACPD,YAAW;;AAAA;AAAA,SAAA,EAGF,OAAO,IAAI,CAAA;AAAA,gBAAA,EACJ,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,YAAA,IAAgB,EAAE,CAAC,CAAA;AAAA,UAAA,EAC/CC,SAAQ,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWpB;AAEA,SAAS,OAAO,MAAA,EAA6B;AAC3C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC7B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,IAAI,OAAO,WAAA,EAAa,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAa,EAAE,CAAA;AACzD,EAAA,KAAA,CAAM,KAAK,CAAA,QAAA,CAAU,CAAA;AACrB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAI,CAAA;AACrD,EAAA,IAAI,MAAA,CAAO,MAAM,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAA,CAAI,CAAA;AACvE,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,KAAA,EAAO;AAC5B,MAAA,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAE,IAAI,aAAQ,CAAA,CAAE,WAAA,IAAe,EAAE,CAAA,CAAE,CAAA;AAAA,IACvD;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,KAAK,MAAA,CAAO,MAAA,QAAc,IAAA,CAAK,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,oCAAoC,CAAA;AAC/C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAQO,SAAS,cAAc,MAAA,EAAqC;AACjE,EAAA,MAAM,KAAA,GAAwB;AAAA,IAC5B,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,EAAK;AAAA,IACtE,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,EAAE;AAAA,IAC7C,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA;AAAE,GAC/C;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,CAAA,GAAA,CAAA,EAAO,OAAA,EAAS,QAAA,CAAS,IAAI,CAAA,EAAG,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAsB,aAAA,CACpB,KAAA,EACA,MAAA,EACA,IAAA,GAAgC,EAAC,EACd;AACnB,EAAA,MAAM,EAAE,WAAAd,UAAAA,EAAW,KAAA,EAAAD,QAAO,MAAA,EAAO,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpE,EAAA,MAAM,EAAE,SAAAgB,QAAAA,EAAS,IAAA,EAAA3E,QAAK,GAAI,MAAM,OAAO,MAAW,CAAA;AAClD,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,IAAA,GAAOA,MAAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAI,CAAA;AAChC,IAAA,MAAM2D,OAAMgB,QAAAA,CAAQ,IAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,IAAI,CAAA;AACjB,QAAA;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,MAAMf,UAAAA,CAAU,IAAA,EAAM,CAAA,CAAE,OAAA,EAAS,MAAM,CAAA;AACvC,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,OAAA;AACT;AC5HA,IAAM,qBAAA,GAAwB,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,cAAA,CAAA;AAmB9B,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,8BAA8B,CAAA;AACxD,EAAA,MAAM,GAAA,GAAM,MAAA,GAAS,CAAC,CAAA,IAAK,IAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA;AAC/B,EAAA,IAAI,QAAQ,CAAA,IAAK,GAAA,IAAO,OAAO,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAC/F,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAA,GAAM,CAAC,CAAA;AACjC;AAOO,SAAS,qBAAqB,OAAA,EAAuC;AAC1E,EAAA,OAAO,OAAO,WAAA,KAAwB;AACpC,IAAA,MAAM,QAAA,GAAsB;AAAA,MAC1B,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,qBAAA,EAAuB,MAAA,EAAQ,UAAA,EAAY,SAAA,kBAAW,IAAI,IAAA,CAAK,CAAC,CAAA,EAAE;AAAA,MACxG,EAAE,EAAA,EAAI,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,UAAA,EAAY,SAAA,kBAAW,IAAI,IAAA,CAAK,CAAC,CAAA;AAAE,KAC/F;AACA,IAAA,MAAM,UAA0B,EAAE,QAAA,EAAU,SAAS,EAAE,WAAA,EAAa,GAAE,EAAE;AACxE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAC3C,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,WAAA,MAAiB,KAAA,IAAS,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,MAAA,IAAI,MAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,OAAA,UAAiB,KAAA,CAAM,OAAA;AAAA,IAC5D;AACA,IAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,IAAA,OAAOgB,+BAAA,CAAoB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EAC7C,CAAA;AACF;;;ACjDO,SAAS,kBAAkB,OAAA,EAAwB;AACxD,EAAA,OAAA,CACG,QAAQ,qBAAqB,CAAA,CAC7B,YAAY,wFAAwF,CAAA,CACpG,OAAO,iBAAA,EAAmB,kBAAA,EAAoB,YAAY,CAAA,CAC1D,OAAO,uBAAA,EAAyB,6CAAA,EAA+C,WAAW,CAAA,CAC1F,MAAA,CAAO,mBAAmB,kBAAkB,CAAA,CAC5C,MAAA,CAAO,iBAAA,EAAmB,6BAA6B,CAAA,CACvD,MAAA,CAAO,oBAAoB,qDAAqD,CAAA,CAChF,OAAO,aAAA,EAAe,0BAAA,EAA4B,KAAK,CAAA,CACvD,MAAA,CAAO,aAAa,wCAAA,EAA0C,KAAK,EACnE,MAAA,CAAO,OAAO,kBAA4B,OAAA,KAAY;AACrD,IAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,sCAAsC,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,WAAW,mBAAA,CAAoB;AAAA,MACnC,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,MAAMvD,QAAAA,GAAU,oBAAA,CAAqB,QAAA,CAAS,OAAO,CAAA;AAErD,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,EAAwB,WAAW,CAAA;AAAA,CAAK,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAMA,QAAAA,CAAQ,WAAW,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA;AAElC,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA,IAAK,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAC9F,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,KAAA,EAAO,OAAA,CAAQ,KAAK,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAW,CAAA;AACxF,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,MAAA,EAAS,QAAQ,MAAM,CAAA,YAAA,EAAe,QAAQ,GAAG;AAAA,CAAI,CAAA;AAC1E,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC;AAAA,CAAI,CAAA;AAAA,EAC5D,CAAC,CAAA;AACL;ACbA,eAAe,eAAe,IAAA,EAAuC;AACnE,EAAA,MAAM,MAAM,MAAMtB,iBAAAA,CAAS8E,YAAA,CAAY,IAAI,GAAG,MAAM,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,GAAI,KAAK,KAAA,CAAM,GAAG,CAAA,GAAIC,UAAA,CAAU,GAAG,CAAA;AACvE,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,UAAU,MAAM,IAAI,MAAM,6BAA6B,CAAA;AACxF,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,CAAC,IAAI,IAAA,IAAQ,CAAC,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,GAAA;AACT;AAEA,eAAe,aAAa,UAAA,EAA2C;AACrE,EAAA,MAAMC,KAAA,GAAM1B,iBAAAA,CAAcwB,YAAA,CAAY,UAAU,CAAC,CAAA,CAAE,IAAA;AACnD,EAAA,MAAM,GAAA,GAAO,MAAM,OAAOE,KAAA,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,QAAA;AACpC,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC7C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,UAAU,CAAA,oCAAA,CAAsC,CAAA;AAAA,EACtF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAoB,OAAA,EAAwB;AAC1D,EAAA,MAAM,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,YAAY,oDAAoD,CAAA;AAErG,EAAA,IAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,8EAA8E,CAAA,CAC1F,MAAA,CAAO,qBAAA,EAAuB,gDAAgD,CAAA,CAC9E,MAAA,CAAO,OAAO,MAAc,OAAA,KAAmC;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,IAAI,CAAA;AACrC,MAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,GAAW,MAAM,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,GAAI,KAAA,CAAA;AAC3E,MAAA,MAAM,MAAA,GAASC,oBAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,MAAA,EAAS,GAAA,CAAI,IAAI,CAAA,YAAA,EAAU,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,UAAK,CAAC;AAAA,CAAI,CAAA;AACnH,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,UAAA,EAAQ,MAAM,IAAI,CAAA,EAAA,EAAK,MAAM,OAAO;AAAA,CAAI,CAAA;AAAA,MAC/D;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AACnF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,IAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,IAAI,CAAA;AACrC,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMC,qBAAA,CAAc,GAAG,IAAI,IAAI,CAAA;AAAA,IAChD,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AACnF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,IAAA,CACG,QAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,qDAAqD,EACjE,cAAA,CAAe,qBAAA,EAAuB,gDAAgD,CAAA,CACtF,OAAO,gBAAA,EAAkB,6CAA6C,EACtE,MAAA,CAAO,gBAAA,EAAkB,6CAA6C,CAAA,CACtE,MAAA,CAAO,eAAA,EAAiB,yCAAyC,EACjE,MAAA,CAAO,oBAAA,EAAsB,gCAAgC,GAAG,CAAA,CAChE,OAAO,oBAAA,EAAsB,8BAAA,EAAgC,GAAG,CAAA,CAChE,OAAO,WAAA,EAAa,8BAA8B,EAClD,MAAA,CAAO,OAAO,MAAc,OAAA,KAQvB;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,IAAI,CAAA;AACrC,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AACpD,MAAA,MAAM,WAAWC,mBAAA,CAAY,EAAE,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA;AAC1D,MAAA,MAAMjE,SAAQ,OAAA,CAAQ,KAAA,GAAQ,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAkC,QAAQ,KAAA,GAC5C,MAAMkE,0BAAkBN,YAAA,CAAY,OAAA,CAAQ,KAAK,CAAC,CAAA,GAClD,KAAA,CAAA;AACJ,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,GACpB,CAAC,CAAA,KAAoB,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,GAAI,IAAI,CAAA,GAClE,KAAA,CAAA;AACJ,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,GAAA,CAAI5D,MAAAA,EAAO;AAAA,QACxC,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,KAAA;AAAA,QACA,WAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA;AAAA,QACvC,YAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA;AAAA,QACvC;AAAA,OACD,CAAA;AACD,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAAA,IAC9D,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AACnF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC3HO,SAAS,iBAAiB,QAAA,EAA8B;AAC7D,EAAA,MAAM,QAAA,GAAWf,aAAQ,QAAQ,CAAA;AACjC,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAMW,eAAAA,CAAa,UAAU,MAAM,CAAA;AAAA,EACrC,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,CAAA,kBAAA,EAAsB,GAAA,CAAc,OAAO,CAAA,CAAA,EAAI;AAAA;AAC1F,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACzB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,CAAA,cAAA,EAAkB,GAAA,CAAc,OAAO,CAAA,CAAA,EAAI;AAAA;AACtF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAASuE,6BAAoB,MAAM,CAAA;AACzC,EAAA,MAAM,SAAA,GACJ,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,KAAA,CAAM,OAAA,CAAS,MAAA,CAA+B,KAAK,CAAA,GACrF,MAAA,CAAgC,KAAA,CAAM,MAAA,GACxC,CAAA;AACN,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAU;AAC7C;AAEO,SAAS,gBAAA,CAAiB,MAAA,EAAoB,IAAA,GAA4B,EAAC,EAAW;AAC3F,EAAA,MAAM,EAAE,KAAA,GAAQ,KAAA,EAAM,GAAI,IAAA;AAC1B,EAAA,MAAM,MAAM,CAAC,CAAA,KAAe,KAAA,GAAQ,CAAA,QAAA,EAAQ,CAAC,CAAA,OAAA,CAAA,GAAS,CAAA;AACtD,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAe,KAAA,GAAQ,CAAA,QAAA,EAAQ,CAAC,CAAA,OAAA,CAAA,GAAS,CAAA;AACxD,EAAA,MAAM,MAAM,CAAC,CAAA,KAAe,KAAA,GAAQ,CAAA,OAAA,EAAO,CAAC,CAAA,OAAA,CAAA,GAAS,CAAA;AAErD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA;AAC3B,EAAA,IAAI,MAAA,CAAO,OAAO,EAAA,EAAI;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,kBAAA,EAAa,MAAA,CAAO,SAAS,CAAA,KAAA,EAAQ,MAAA,CAAO,SAAA,KAAc,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,CAAE,CAAC,CAAA;AAAA,EAC5F,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,GAAA,CAAI,CAAA,OAAA,EAAK,MAAA,CAAO,MAAA,CAAO,OAAO,MAAM,CAAA,MAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,EAAE,CAAC,CAAA;AACvG,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ;AACxC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,IAAQ,QAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACxE;AAAA,EACF;AACA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AAC5B;;;AC9DO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,KAAK,CAAA,CACb,YAAY,sCAAsC,CAAA;AAErD,EAAA,GAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,MAAA,CAAO,QAAA,EAAU,uCAAuC,CAAA,CACxD,MAAA,CAAO,CAAC,OAAiB,OAAA,KAAgC;AACxD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,gBAAgB,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,MAAA,CAAO,EAAE,CAAA,CAAE,MAAA;AAEjD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,MAAA,EAAQ,EAAE,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,MAChF;AACA,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,EAAK,MAAM,OAAO,OAAA,CAAQ,MAAM,iBAAiB,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA;AAAA,CAAsB,CAAA;AAAA,MAC7H;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,EAChC,CAAC,CAAA;AACL;;;ACvBO,IAAM,WAAA,GAAc,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACFpB,IAAM,aAAA,GAAgB,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACEtB,IAAM,aAAA,GAAgB,CAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACkBtB,IAAM,iBAAA,GAAsC;AAAA,EACjD;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAyBd,CAAA;AAEO,IAAM,0BAAA,GAA+C;AAAA,EAC1D;AAAA,IACE,IAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,GASZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,GAQZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,GASZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAcd,CAAA;;;ACnHA,IAAM,iBAAA,GAAoB,wCAAA;AAC1B,IAAM,eAAA,GAAkB,sCAAA;AAExB,eAAeC,WAAUvF,KAAAA,EAA6B;AACpD,EAAA,MAAM6D,eAAMgB,YAAA,CAAQ7E,KAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD;AAEA,eAAe,cAAA,CACb,OAAA,EACA,QAAA,EACA,KAAA,EAC0C;AAC1C,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAMC,iBAAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,IAAI,QAAA,KAAa,UAAU,OAAO,SAAA;AAClC,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,KAAA,EAAO;AAGpC,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAMsF,WAAU,OAAO,CAAA;AACvB,EAAA,MAAMzB,kBAAAA,CAAU,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AACzC,EAAA,OAAO,QAAA,KAAa,SAAY,OAAA,GAAU,SAAA;AAC5C;AAEA,eAAe,WAAA,CAAY,SAAiB,KAAA,EAAoD;AAC9F,EAAA,MAAM9D,KAAAA,GAAOE,SAAAA,CAAK,OAAA,EAAS,SAAA,EAAW,SAAS,eAAe,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAeF,KAAAA,EAAM,aAAa,KAAK,CAAA;AAC5D,EAAA,OAAO,CAAC,EAAE,IAAA,EAAAA,KAAAA,EAAM,QAAQ,CAAA;AAC1B;AAEA,eAAe,aAAA,CAAc,SAAiB,KAAA,EAAoD;AAChG,EAAA,MAAMA,KAAAA,GAAOE,SAAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAeF,KAAAA,EAAM,eAAe,KAAK,CAAA;AAC9D,EAAA,OAAO,CAAC,EAAE,IAAA,EAAAA,KAAAA,EAAM,QAAQ,CAAA;AAC1B;AAqBA,eAAe,UAAA,CAAW,SAAiB,KAAA,EAAoD;AAC7F,EAAA,MAAMA,KAAAA,GAAOE,SAAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AACtC,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAMD,iBAAAA,CAASD,KAAAA,EAAM,MAAM,CAAA;AAAA,EACxC,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,iBAAiB,CAAA;AACnD,EAAA,MAAM,MAAA,GACJ,YAAY,CAAA,GACR,QAAA,CAAS,YAAY,eAAA,EAAiB,QAAA,CAAS,MAAM,CAAA,GACrD,EAAA;AACN,EAAA,IAAI,QAAA,IAAY,CAAA,IAAK,MAAA,IAAU,QAAA,EAAU;AACvC,IAAA,MAAM,IAAIwF,gBAAA,CAAY;AAAA,MACpB,MAAMC,eAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,GAAGzF,KAAI,CAAA,2HAAA,CAAA;AAAA,MAChB,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,QAAA,IAAY,CAAA,IAAK,MAAA,GAAS,QAAA,EAAU;AACtC,IAAA,IAAA,GACE,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,GAC1B,aAAA,CAAc,OAAA,EAAQ,GACtB,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,eAAA,CAAgB,MAAM,CAAA;AAAA,EAClD,WAAW,QAAA,EAAU;AACnB,IAAA,IAAA,GAAO,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC;;AAAA,EAAO,aAAa,CAAA,CAAA;AAAA,EAC5D,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,aAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,KAAS,UAAU,OAAO,CAAC,EAAE,IAAA,EAAAA,KAAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,CAAA;AAC1D,EAAA,IAAI,QAAA,IAAY,CAAC,KAAA,EAAO;AACtB,IAAA,OAAO,CAAC,EAAE,IAAA,EAAAA,KAAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAAA,EACrC;AACA,EAAA,MAAMuF,WAAUvF,KAAI,CAAA;AACpB,EAAA,MAAM8D,kBAAAA,CAAU9D,KAAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAClC,EAAA,OAAO,CAAC,EAAE,IAAA,EAAAA,KAAAA,EAAM,QAAQ,QAAA,GAAW,SAAA,GAAY,SAAS,CAAA;AAC1D;AAEA,eAAe,eAAA,CAAgB,SAAiB,KAAA,EAAoD;AAClG,EAAA,MAAM,MAAiC,EAAC;AAExC,EAAA,MAAM,SAAA,GAAYE,SAAAA,CAAK,OAAA,EAAS,SAAA,EAAW,UAAU,WAAW,CAAA;AAChE,EAAA,KAAA,MAAW,QAAQ,iBAAA,EAAmB;AACpC,IAAA,MAAM,GAAA,GAAMA,SAAAA,CAAK,SAAA,EAAW,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,MAAM,SAAS,MAAM,cAAA,CAAe,GAAA,EAAK,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7D,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,QAAQ,CAAA;AAAA,EAChC;AAIA,EAAA,MAAM,YAAA,GAAeA,SAAAA,CAAK,OAAA,EAAS,SAAA,EAAW,UAAU,CAAA;AACxD,EAAA,KAAA,MAAW,OAAO,0BAAA,EAA4B;AAC5C,IAAA,MAAM,GAAA,GAAMA,SAAAA,CAAK,YAAA,EAAc,GAAA,CAAI,IAAI,CAAA;AACvC,IAAA,MAAM,SAAS,MAAM,cAAA,CAAe,GAAA,EAAK,GAAA,CAAI,UAAU,KAAK,CAAA;AAC5D,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,QAAQ,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,GAAA;AACT;AAEA,eAAsB,UAAA,CACpB,MAAA,EACA,OAAA,GAAiD,EAAC,EACrB;AAC7B,EAAA,MAAM,OAAOE,YAAAA,CAAQ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,KAAK,CAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,KAAU,IAAA;AAChC,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,OAAO;AAAA,MACL,EAAE,QAAQ,QAAA,EAAU,KAAA,EAAO,MAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,MAC1D,EAAE,QAAQ,UAAA,EAAY,KAAA,EAAO,MAAM,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,MAC9D,EAAE,QAAQ,OAAA,EAAS,KAAA,EAAO,MAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,EAAE;AAAA,MACxD,EAAE,QAAQ,aAAA,EAAe,KAAA,EAAO,MAAM,eAAA,CAAgB,IAAA,EAAM,KAAK,CAAA;AAAE,KACrE;AAAA,EACF;AACA,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA,EAAG,CAAA;AAAA,IAC3D,KAAK,UAAA;AACH,MAAA,OAAO,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA,EAAG,CAAA;AAAA,IAC7D,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,EAAG,CAAA;AAAA,IAC1D,KAAK,aAAA;AACH,MAAA,OAAO,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,eAAA,CAAgB,IAAA,EAAM,KAAK,CAAA,EAAG,CAAA;AAAA;AAEnE;;;AC7JA,IAAM,QAAkB,CAAC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,eAAe,KAAK,CAAA;AAErE,SAAS,qBAAqB,OAAA,EAAwB;AAC3D,EAAA,OAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA;AAAA,IACC;AAAA,GACF,CACC,MAAA,CAAO,aAAA,EAAe,mDAAmD,CAAA,CACzE,MAAA,CAAO,aAAA,EAAe,kFAAkF,CAAA,CACxG,MAAA,CAAO,OAAO,MAAA,EAAgB,OAAA,KAA+C;AAC5E,IAAA,IAAI,CAAE,KAAA,CAAmB,QAAA,CAAS,MAAM,CAAA,EAAG;AACzC,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,gBAAA,EAAmB,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AAC/E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,MAAA,EAAkB;AAAA,QACjD,SAAS,OAAA,CAAQ,GAAA;AAAA,QACjB,KAAA,EAAO,QAAQ,KAAA,KAAU;AAAA,OAC1B,CAAA;AACD,MAAA,MAAM,SAAS,EAAE,KAAA,EAAO,GAAG,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAClD,MAAA,KAAA,MAAW,EAAE,MAAA,EAAQ,EAAA,EAAI,KAAA,MAAW,OAAA,EAAS;AAC3C,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,CAAA,EAAM,EAAE,CAAA;AAAA,CAAK,CAAA;AAClC,QAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,UAAA,MAAA,CAAO,EAAE,MAAM,CAAA,EAAA;AACf,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA,EAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI;AAAA,CAAI,CAAA;AAAA,QAC5D;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb;AAAA,YAAA,EAAY,OAAO,KAAK,CAAA,QAAA,EAAW,OAAO,OAAO,CAAA,UAAA,EAAa,OAAO,OAAO,CAAA;AAAA;AAAA,OAC9E;AACA,MAAA,IAAI,MAAA,CAAO,OAAA,GAAU,CAAA,IAAK,OAAA,CAAQ,UAAU,IAAA,EAAM;AAChD,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;AAAA,CAAoD,CAAA;AAAA,MAC3E;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,cAAA,EAAmB,OAAO;AAAA,CAAI,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;ACjCA,IAAM,QAAA,GAAW,wEAAA;AAGjB,IAAM,WAAA,GAAc,GAAG,QAAQ,CAAA,SAAA,CAAA;AAwC/B,eAAe,OAAA,CAAQ,KAAa,SAAA,EAA2C;AAC7E,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAC9D,EAAA,OAAO,IAAI,IAAA,EAAK;AAClB;AAEA,eAAe,OAAA,CAAQ,KAAa,SAAA,EAA0C;AAC5E,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAC9D,EAAA,OAAO,IAAI,IAAA,EAAK;AAClB;AAGA,eAAsB,UAAA,CAAW,EAAA,EAAY,OAAA,GAAwB,EAAC,EAA2B;AAC/F,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,UAAA,CAAW,KAAA;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAU,MAAM,OAAA,CAAQ,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,EAAE,SAAS,SAAS,CAAA;AACpE,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAO,MAAA;AACpC,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD,CAAA,CAAA,MAAQ;AAEN,IAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAA,UAAA,EAAa,EAAE,cAAc,SAAS,CAAA;AAI7E,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,GAAA,MAAS;AAAA,QAC7B,IAAA,EAAM,GAAA;AAAA,QACN,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAA,EAAG,QAAQ,aAAa,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,SAAS;AAAA,OACvE,CAAE;AAAA,KACJ;AACA,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC5B;AACF;AAOO,SAAS,oBAAoB,KAAA,EAAqC;AACvE,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,YAAA,EAAc,OAAO,MAAM,KAAA,CAAM,YAAA;AAClD,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,EAAG,OAAA;AAC9D,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,qCAAqC,CAAA;AACzD,EAAA,OAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA,GAAI,IAAA;AAClE;AAmBA,eAAe,cAAcJ,KAAAA,EAAgC;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAO,aAAkB,CAAA;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,OAAOA,KAAI,CAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,KAAA,EAA4B;AACrD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,OAAA,IAAW,KAAA,CAAM,gBAAgB,KAAA,EAAO;AAC3D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,mHAAA;AAAA,KAEd;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAA,CAAM,EAAE,CAAA,6DAAA,CAA0D,CAAA;AAAA,EACjG;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,YAAA,EAAc;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,KAAA,CAAM,EAAE,CAAA,4DAAA,CAA8D,CAAA;AAAA,EAC5F;AACF;AAGA,eAAsB,QAAA,CAAS,EAAA,EAAY,OAAA,GAAsB,EAAC,EAAuB;AACvF,EAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,EAAA,EAAI,OAAO,CAAA;AAC1C,EAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,IAAU,QAAA;AAClC,EAAA,MAAM,SAAA,GAAYE,SAAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAClC,EAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,IAAc,aAAA;AACrC,EAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,aAAA,KACP,OAAOF,OAAc,OAAA,KAAoB;AACxC,IAAA,MAAM6D,eAAMgB,YAAAA,CAAQ7E,KAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,MAAM8D,kBAAAA,CAAU9D,KAAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,EACvC,CAAA,CAAA;AAEF,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,OAAA,EAAS;AAChC,IAAA,MAAM,IAAA,GAAOE,SAAAA,CAAK,SAAA,EAAW,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,IAAU,MAAM,MAAA,CAAO,IAAI,CAAA,EAAI;AAC1C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,kDAAA,CAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,KAAA,CAAM,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAC9B,IAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,EAAU;AACrC;AASO,SAAS,QAAA,CAAS,GAAW,CAAA,EAAuB;AACzD,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AACtB,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AACtB,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,EAAA,MAAM,MAAkB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAI,CAAA,EAAE,EAAG,MAAM,IAAI,MAAM,CAAA,GAAI,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AACpF,EAAA,KAAA,IAASwF,EAAAA,GAAI,CAAA,GAAI,CAAA,EAAGA,EAAAA,IAAK,GAAGA,EAAAA,EAAAA,EAAK;AAC/B,IAAA,KAAA,IAASC,EAAAA,GAAI,CAAA,GAAI,CAAA,EAAGA,EAAAA,IAAK,GAAGA,EAAAA,EAAAA,EAAK;AAC/B,MAAA,GAAA,CAAID,EAAC,CAAA,CAAEC,EAAC,CAAA,GAAI,CAAA,CAAED,EAAC,CAAA,KAAM,CAAA,CAAEC,EAAC,CAAA,GAAI,GAAA,CAAID,EAAAA,GAAI,CAAC,CAAA,CAAEC,EAAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAID,KAAI,CAAC,CAAA,CAAEC,EAAC,CAAA,EAAG,GAAA,CAAID,EAAC,CAAA,CAAEC,EAAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IAC3F;AAAA,EACF;AACA,EAAA,MAAM,MAAkB,EAAC;AACzB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG;AACrB,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG;AACjB,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,MAAM,CAAA,CAAE,CAAC,GAAG,CAAA;AAClC,MAAA,CAAA,EAAA;AACA,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,EAAG;AACzC,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,MAAM,CAAA,CAAE,CAAA,EAAG,GAAG,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,MAAM,CAAA,CAAE,CAAA,EAAG,GAAG,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,OAAO,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAA,CAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AAClD,EAAA,OAAO,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAA,CAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACT;AAeA,eAAsB,SAAA,CAAU,EAAA,EAAY,OAAA,GAA4B,EAAC,EAItE;AACD,EAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,EAAA,EAAI,OAAO,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAYzF,SAAAA,CAAK,OAAA,CAAQ,MAAA,IAAU,UAAU,EAAE,CAAA;AACrD,EAAA,MAAM,SAAA,GACJ,OAAA,CAAQ,YAAA,KACP,OAAO,CAAA,KAAc;AACpB,IAAA,MAAM,EAAE,QAAA,EAAAD,SAAAA,EAAS,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,MAAMA,SAAAA,CAAS,CAAA,EAAG,MAAM,CAAA;AAAA,IACjC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAEF,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,EAAS;AAC7B,IAAA,MAAM,QAAQ,MAAM,SAAA,CAAUC,UAAK,SAAA,EAAW,CAAA,CAAE,IAAI,CAAC,CAAA;AACrD,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,eAAA,EAAiB,QAAA,EAAU,CAAA,CAAE,OAAA,EAAS,CAAA;AAAA,IAC3E,CAAA,MAAA,IAAW,KAAA,KAAU,CAAA,CAAE,OAAA,EAAS;AAC9B,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,WAAA,EAAa,QAAA,EAAU,CAAA,CAAE,OAAA,EAAS,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,UAAA,EAAY,IAAA,EAAM,QAAA,CAAS,KAAA,EAAO,EAAE,OAAO,CAAA,EAAG,QAAA,EAAU,CAAA,CAAE,SAAS,CAAA;AAAA,IACxG;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAM;AACnC;ACvNA,SAAS,QAAQ,GAAA,EAAiD;AAChE,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,OAAO,EAAE,GAAG,GAAA,CAAI,gBAAA,EAAkB,GAAG,GAAA,CAAI,eAAA,EAAiB,GAAG,GAAA,CAAI,YAAA,EAAa;AAChF;AAEA,SAAS,QAAA,CAAY,IAAYF,KAAAA,EAAwB;AACvD,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,QAAA,CAASA,KAAI,CAAA;AAC5B,EAAA,IAAI,GAAA,IAAO,MAAM,OAAO,IAAA;AACxB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,oBAAA,CAAqB,IAAY,IAAA,EAA8B;AACtE,EAAA,IAAI,GAAG,MAAA,CAAOE,SAAAA,CAAK,MAAM,gBAAgB,CAAC,GAAG,OAAO,MAAA;AACpD,EAAA,IAAI,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,WAAW,CAAC,CAAA,IAAK,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,UAAU,CAAC,GAAG,OAAO,KAAA;AACpF,EAAA,IAAI,GAAG,MAAA,CAAOA,SAAAA,CAAK,MAAM,WAAW,CAAC,GAAG,OAAO,MAAA;AAC/C,EAAA,OAAO,KAAA;AACT;AAOA,SAAS,gBAAgB,IAAA,EAAqD;AAC5E,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAA0B,IAAA,IAAQ,IAAA;AAC/C,EAAA,IAAI,IAAI,cAAc,CAAA,IAAK,GAAA,CAAI,MAAM,GAAG,OAAO,cAAA;AAC/C,EAAA,IAAI,GAAA,CAAI,eAAe,CAAA,EAAG,OAAO,SAAA;AACjC,EAAA,IAAI,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,QAAA;AAC1B,EAAA,IAAI,IAAI,MAAM,CAAA,IAAK,GAAA,CAAI,KAAK,GAAG,OAAO,KAAA;AACtC,EAAA,IAAI,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,OAAA;AAC5B,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,KAAA;AACvB,EAAA,IAAI,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,OAAA;AACzB,EAAA,OAAO,SAAA;AACT;AAMA,SAAS,mBAAA,CACP,EAAA,EACA,IAAA,EACA,IAAA,EACA,SAAA,EAC2B;AAC3B,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAA0B,IAAA,IAAQ,IAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAA4B,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,MAAM,CAAC,CAAA;AAEjG,EAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG;AAEf,IAAA,IAAI,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,KAAK,CAAC,CAAA,IAAK,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,SAAS,CAAC,GAAG,OAAO,UAAA;AAC7E,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,CAAU,aAAa,CAAA,EAAG,OAAO,OAAA;AACrC,EAAA,IAAI,IAAI,uBAAuB,CAAA,IAAK,GAAA,CAAI,iBAAiB,GAAG,OAAO,gBAAA;AACnE,EAAA,IAAI,GAAA,CAAI,eAAe,CAAA,EAAG,OAAO,WAAA;AACjC,EAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,MAAA;AACxB,EAAA,IAAI,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,OAAA;AACzB,EAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,IAAA,OAAO,IAAI,cAAc,CAAA,IAAK,GAAA,CAAI,0BAA0B,IAAI,aAAA,GAAgB,aAAA;AAAA,EAClF;AACA,EAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,MAAA;AACxB,EAAA,IAAI,GAAA,CAAI,eAAe,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,MAAA;AACxB,EAAA,IAAI,SAAA,KAAc,OAAO,OAAO,MAAA;AAChC,EAAA,IAAI,SAAA,KAAc,WAAW,OAAO,SAAA;AACpC,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,iBAAA,CAAkB,IAAY,IAAA,EAA6B;AAClE,EAAA,MAAM,QAAA,GAAW,QAAA;AAAA,IACf,EAAA;AAAA,IACAA,SAAAA,CAAK,MAAM,eAAe;AAAA,GAC5B;AACA,EAAA,MAAM,KAAA,GAAQ,UAAU,eAAA,EAAiB,KAAA;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAEpC,IAAA,IAAI,GAAA,CAAI,SAAS,IAAI,CAAA,SAAU,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,aAAA,CACP,EAAA,EACA,IAAA,EACA,IAAA,EACwB;AACxB,EAAA,MAAM,QAAA,GACJ,aAAA,IAAiB,IAAA,IACjB,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,oBAAoB,CAAC,CAAA,IAC1C,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,oBAAoB,CAAC,CAAA,IAC1C,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,qBAAqB,CAAC,CAAA,IAC3C,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,qBAAqB,CAAC,CAAA;AAC7C,EAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,EAAA,KAAA,MAAW,aAAa,oBAAA,EAAsB;AAC5C,IAAA,IAAI,GAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,SAAS,CAAC,CAAA,EAAG;AACpC,MAAA,QAAA,GAAW,SAAA;AACX,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,GAAW,iBAAA,GAAoB,mBAAmB,QAAA,EAAS;AAC5E;AAEA,SAAS,cAAA,CAAe,IAAY,IAAA,EAAuC;AACzE,EAAA,IAAI,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,qBAAqB,CAAC,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAC9E,EAAA,IAAI,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,YAAY,CAAC,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AACtE,EAAA,IAAI,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,SAAS,CAAC,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK;AAChE,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,WAAA,CAAY,EAAA,EAAY,IAAA,GAAO,GAAA,EAAkB;AAC/D,EAAA,MAAM,MAAM,QAAA,CAAsB,EAAA,EAAIA,SAAAA,CAAK,IAAA,EAAM,cAAc,CAAC,CAAA;AAChE,EAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AAExB,EAAA,MAAM,SAAA,GAAY,gBAAgB,IAAI,CAAA;AACtC,EAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,EAAA,EAAI,IAAA,EAAM,MAAM,SAAS,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,GAAG,MAAA,CAAOA,SAAAA,CAAK,MAAM,KAAK,CAAC,IAAI,KAAA,GAAQ,IAAA;AAEtD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA,EAAgB,oBAAA,CAAqB,EAAA,EAAI,IAAI,CAAA;AAAA,IAC7C,YAAY,EAAA,CAAG,MAAA,CAAOA,SAAAA,CAAK,IAAA,EAAM,eAAe,CAAC,CAAA;AAAA,IACjD,MAAA;AAAA,IACA,WAAA,EAAa,iBAAA,CAAkB,EAAA,EAAI,IAAI,CAAA;AAAA,IACvC,OAAA,EAAS,aAAA,CAAc,EAAA,EAAI,IAAA,EAAM,IAAI,CAAA;AAAA,IACrC,QAAA,EAAU,cAAA,CAAe,EAAA,EAAI,IAAI;AAAA,GACnC;AACF;AC5KO,IAAM,WAAA,GAAc,4BAAA;AAGpB,IAAM,UAAA,GACX,6FAAA;AAEK,IAAM,gBAAA,GAAmB,+BAAA;AAGhC,IAAM,kBAAA,GAAoD;AAAA,EACxD,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,WAAA;AAAA,EACd,KAAA,EAAO,YAAA;AAAA,EACP,gBAAA,EAAkB,YAAA;AAAA,EAClB,KAAA,EAAO,eAAA;AAAA,EACP,SAAA,EAAW,gBAAA;AAAA,EACX,IAAA,EAAM,YAAA;AAAA,EACN,aAAA,EAAe,YAAA;AAAA,EACf,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,QAAA,CAAS,MAAc,GAAA,EAAqB;AACnD,EAAA,OAAO,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AACnC;AAOO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,KAAc,SAAA,GAAY,UAAU,IAAA,CAAK,SAAA;AAChE,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,KAAkB,SAAA,GAAY,SAAS,IAAA,CAAK,aAAA;AACvE,EAAA,MAAM,OAAA,GAAU,KAAK,MAAA,IAAU,EAAA;AAE/B,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,EAAS,YAAY,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AAEvC,EAAA,MAAM,SAAA,GAAY,mBAAmB,aAAa,CAAA;AAClD,EAAA,MAAM,UAAA,GACJ,OAAA,KAAY,aAAA,KAAkB,UAAA,IAAc,kBAAkB,YAAA,CAAA,IAAiB,CAAC,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,GACvG,QAAA,CAAS,OAAA,EAAS,SAAS,CAAA,GAC3B,SAAA;AAEN,EAAA,MAAM,QAAQ,IAAA,CAAK,WAAA;AAEnB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,SAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,KAAK,OAAA,CAAQ,IAAA;AAAA,MACnB,GAAA,EAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,IAAY,iBAAA;AAAA,MAC9B,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA;AAAA;AAAA,MAGP,YAAY,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,WAAA,CAAA,GAAgB,KAAK,cAAc,CAAA,CAAA;AAAA,MAC/D,KAAK,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,IAAA,CAAA,GAAS,KAAK,OAAO,CAAA,CAAA;AAAA,MAC1C,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,QAAA,EAAU,IAAA,IAAQ,GAAA;AAAA,MAC7B,UAAA,EAAY,cAAA;AAAA,MACZ,GAAA,EAAK,OAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,UAAA,EAAY,EAAE,OAAA,EAAS,gBAAA;AAAiB,GAC1C;AACF;AAGO,SAAS,gBAAgB,MAAA,EAAkC;AAChE,EAAA,OAAO,GAAG,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AAC3C;AAGO,SAAS,YAAY,GAAA,EAAsC;AAChE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,IAAI,OAAO,CAAA,CAAE,aAAA,KAAkB,QAAA,IAAY,CAAC,CAAA,CAAE,SAAA,IAAa,CAAC,CAAA,CAAE,aAAA,IAAiB,CAAC,CAAA,CAAE,UAAA,EAAY;AAC5F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AACT;AASO,SAAS,UAAA,CAAW,EAAA,EAAc,IAAA,GAAO,GAAA,EAA8B;AAC5E,EAAA,MAAM,MAAM,EAAA,CAAG,IAAA,CAAKA,SAAAA,CAAK,IAAA,EAAM,WAAW,CAAC,CAAA;AAC3C,EAAA,OAAO,GAAA,IAAO,IAAA,GAAO,IAAA,GAAO,WAAA,CAAY,GAAG,CAAA;AAC7C;AAGO,SAAS,WAAA,CAAY,EAAA,EAAc,MAAA,EAA0B,IAAA,GAAO,GAAA,EAAa;AACtF,EAAA,MAAMF,KAAAA,GAAOE,SAAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AACnC,EAAA,EAAA,CAAG,KAAA,CAAMF,KAAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,CAAA;AACtC,EAAA,OAAOA,KAAAA;AACT;AAOO,SAAS,aAAA,CACd,EAAA,EACA,IAAA,EACA,IAAA,GAAO,GAAA,EAC0C;AACjD,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,EAAA,EAAI,IAAI,CAAA;AACpC,EAAA,IAAI,UAAU,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAU,IAAA,EAAK;AACxD,EAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,IAAI,CAAA,EAAG,UAAU,KAAA,EAAM;AACtD;AC7HO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF,CAAA;AAOO,SAAS,mBAAmB,GAAA,EAAsB;AACvD,EAAA,IAAI,GAAA,KAAQ,EAAA,IAAMsD,eAAAA,CAAW,GAAG,GAAG,OAAO,KAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAClC,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,MAAM,EAAA,IAAM,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,MAAM,OAAO,KAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,eAAA,CAAgB,WAAmB,GAAA,EAAqB;AACtE,EAAA,IAAI,CAAC,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,+BAAA,EAAkC,KAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,IAAA,GAAOlD,aAAQ,SAAS,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAOA,YAAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC9B,EAAA,IAAI,SAAS,IAAA,IAAQ,CAAC,KAAK,UAAA,CAAW,IAAA,GAAOwF,QAAG,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,mCAAA,EAAsC,KAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACtF;AACA,EAAA,OAAO,IAAA;AACT;AAmCO,SAAS,YACd,EAAA,EACA,SAAA,EACA,KAAA,EACA,OAAA,GAAyB,EAAC,EACZ;AAEd,EAAA,MAAM,UAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAM,eAAA,CAAgB,SAAA,EAAW,CAAA,CAAE,IAAI,GAAG,OAAA,EAAS,CAAA,CAAE,SAAS,GAAA,EAAK,CAAA,CAAE,MAAK,CAAE,CAAA;AAGhH,EAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,EAAA,CAAG,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAC3E,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,yBAAyB,SAAA,CAAU,MAAM,oCAAoC,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACnG;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,EAAA,CAAG,KAAA,CAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAA;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,IACrB;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,OAAA,EAAQ,EAAG;AACpC,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,OAAO,IAAI,CAAA;AAAA,MAChB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,oCAAA,EAAuC,QAAQ,MAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAE,CAAA;AAAA,EAC/G;AAEA,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;;;AC9GO,IAAM,wBAAA,GAA2B,CAAA;AAEjC,IAAMC,iBAAAA,GAAmB,+BAAA;AA6BzB,SAAS,iBAAA,CACd,UAAA,EACA,MAAA,EACA,OAAA,GAA0B,EAAC,EACd;AACb,EAAA,MAAM,UAAA,GAAa,MAAA,EAAQ,UAAA,IAAc,EAAC;AAE1C,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,UAAU,CAAA,EAAG;AAEnC,IAAA,MAAM,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,iCAAiC,CAAA;AAC5D,IAAA,IAAI,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAI,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,EAAG;AAC3C,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,UAAU,CAAA;AAC9B,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAI,EAAG,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,IAAK,UAAA;AACpF,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,MAAM,CAAA,CAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,EAC7C;AAEA,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9B,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AACpC,IAAA,IAAI,QAAQ,CAAA,EAAG,MAAM,IAAI,cAAA,CAAe,CAAA,+BAAA,EAAkC,UAAU,CAAA,CAAE,CAAA;AACtF,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AACvC,IAAA,MAAMC,KAAAA,GAAO,WAAW,GAAG,CAAA;AAC3B,IAAA,IAAI,CAACA,KAAAA,EAAM,MAAM,IAAI,cAAA,CAAe,CAAA,6BAAA,EAAgC,GAAG,CAAA,6CAAA,CAA0C,CAAA;AACjH,IAAA,OAAO,EAAE,IAAA,EAAAA,KAAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,EAC9B;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,YAAA,IAAgB,UAAA,CAAW,OAAA,IAAWD,iBAAAA;AAC3D,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAW;AACpC;AAOO,SAAS,iBAAA,CACd,IAAA,EACA,MAAA,EACA,GAAA,GAA0C,EAAC,EACnB;AACxB,EAAA,MAAM,MAAM,MAAA,EAAQ,YAAA;AACpB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,KAAA,MAAW,CAAC,YAAA,EAAc,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA,EAAG;AACjC,MAAA,MAAM,KAAA,GAAQ,IAAI,MAAM,CAAA;AACxB,MAAA,IAAI,OAAO,OAAO,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAG;AAAA,IACvD;AAAA,EACF;AACA,EAAA,OAAO,EAAC;AACV;AAGO,SAAS,UAAU,OAAA,EAAyB;AACjD,EAAA,OAAOjF,iBAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,SAAS,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAClE;AAGO,SAAS,gBAAgB,KAAA,EAA+E;AAC7G,EAAA,MAAM,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,UAAU,CAAA,CAAE,OAAO,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACpF,EAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,6CAAA,EAA2C,GAAA,CAAI,MAAM,aAAa,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7G;AACF;AAeA,SAAS,YAAY,GAAA,EAA0B;AAC7C,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,GAAA,EAAM,IAAI,MAAM,CAAA,KAAA,CAAA;AACpC;AACA,SAAS,OAAA,CAAQ,KAAkBZ,KAAAA,EAAsB;AACvD,EAAA,OAAO,GAAG,GAAA,CAAI,IAAI,MAAM,GAAA,CAAI,MAAM,IAAIA,KAAI,CAAA,CAAA;AAC5C;AAEA,eAAe+F,QAAAA,CAAQ,SAAA,EAAsB,GAAA,EAAa,OAAA,EAAkD;AAC1G,EAAA,MAAM,MAAM,MAAM,SAAA,CAAU,GAAA,EAAK,EAAE,SAAS,CAAA;AAC5C,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,cAAA,CAAe,CAAA,cAAA,EAAiB,GAAA,CAAI,MAAM,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAC/E,EAAA,OAAO,IAAI,IAAA,EAAK;AAClB;AAGA,eAAsB,aAAA,CAAc,UAAA,EAAoB,OAAA,GAAwB,EAAC,EAG9E;AACD,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAc,UAAA,CAAW,KAAA;AACnD,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,UAAA,EAAY,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACjE,EAAA,MAAM,UAAU,iBAAA,CAAkB,GAAA,CAAI,MAAM,OAAA,CAAQ,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAEvE,EAAA,MAAM,MAAM,MAAMA,QAAAA,CAAQ,WAAW,WAAA,CAAY,GAAG,GAAG,OAAO,CAAA;AAE9D,EAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,IAAA,MAAM,GAAA,GAAM,MAAMA,QAAAA,CAAQ,SAAA,EAAW,GAAG,WAAA,CAAY,GAAG,CAAC,CAAA,QAAA,CAAA,EAAY,OAAO,CAAA;AAC3E,IAAA,MAAM,EAAA,GAAK,MAAM,OAAA,CAAQ,iBAAA,CAAkB,KAAK,GAAG,CAAA;AACnD,IAAA,IAAI,CAAC,IAAI,MAAM,IAAI,eAAe,CAAA,2CAAA,EAA8C,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EAC9F;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,+BAAA,EAAkC,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EACzE;AACA,EAAA,MAAM,SAAA,GAAY,MAAA;AAClB,EAAA,IAAI,SAAA,EAAW,SAAS,WAAA,EAAa;AACnC,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,CAAA,EAAI,GAAA,CAAI,MAAM,8BAA8B,MAAA,CAAQ,SAAA,EAAiC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACxH;AACA,EAAA,IAAI,OAAO,SAAA,CAAU,aAAA,KAAkB,QAAA,IAAY,SAAA,CAAU,gBAAgB,wBAAA,EAA0B;AACrG,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,IAAI,GAAA,CAAI,MAAM,sCAAsC,SAAA,CAAU,aAAa,MAAM,wBAAwB,CAAA,CAAA;AAAA,KAC3G;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAK,SAAA,EAAU;AAC1B;AAOA,eAAsB,cAAA,CACpB,GAAA,EACA,IAAA,EACA,OAAA,GAAwB,EAAC,EACD;AACxB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAc,UAAA,CAAW,KAAA;AACnD,EAAA,MAAM,UAAU,iBAAA,CAAkB,GAAA,CAAI,MAAM,OAAA,CAAQ,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAEvE,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC7B,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,KAAM;AAC1B,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,IAAY,MAAMA,QAAAA,CAAQ,SAAA,EAAW,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,IAAI,CAAA,EAAG,OAAO,CAAA;AACpF,MAAA,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,IACnD,CAAC;AAAA,GACH;AAEA,EAAA,eAAA,CAAgB,QAAQ,CAAA;AACxB,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,CAAA;AACnE;;;AChKA,IAAM,cAAA,uBAAiD,GAAA,CAAI;AAAA,EACzD,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGD,IAAM,kBAAA,uBAAqD,GAAA,CAAI;AAAA,EAC7D,UAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AASD,SAAS,aAAa5E,MAAAA,EAA8B;AAClD,EAAA,MAAM,OAAA,GAAUA,MAAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,MAAM,CAAC,CAAA,KAAM,IAAI,OAAO,IAAA;AAClD,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAC,CAAA;AACpD,EAAA,IAAI,IAAA,CAAK,KAAK,CAAC,CAAA,KAAM,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA;AAC9C,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,CAAK,CAAC,KAAK,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,CAAC,KAAK,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,CAAC,KAAK,CAAA,EAAE;AACzE;AAEA,SAAS,GAAA,CAAI,GAAW,CAAA,EAAmB;AACzC,EAAA,OAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAC/D;AASO,SAAS,cAAA,CAAe,SAAiB,KAAA,EAAwB;AACtE,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,EAAA,IAAI,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,OAAO,CAAA,CAAE,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,IAAA;AAC7E,EAAA,IAAI,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,CAAC,IAAA,KAAS,cAAA,CAAe,OAAA,EAAS,IAAI,CAAC,CAAA;AAEvF,EAAA,MAAM,CAAA,GAAI,aAAa,OAAO,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AAEf,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,8BAA8B,CAAA;AAChD,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA;AACnB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,CAAA,CAAE,CAAC,CAAE,CAAA;AACjC,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AACH,MAAA,OAAO,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA;AAAA,IAC3B,KAAK,GAAA;AACH,MAAA,OAAO,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA;AAAA,IAC1B,KAAK,IAAA;AACH,MAAA,OAAO,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA;AAAA,IAC3B,KAAK,GAAA;AACH,MAAA,OAAO,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA;AAAA,IAC1B,KAAK,GAAA,EAAK;AAER,MAAA,IAAI,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,GAAI,GAAG,OAAO,KAAA;AAC/B,MAAA,IAAI,OAAO,KAAA,GAAQ,CAAA,EAAG,OAAO,CAAA,CAAE,UAAU,MAAA,CAAO,KAAA;AAChD,MAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,EAAE,KAAA,KAAU,CAAA,IAAK,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAA;AACjE,MAAA,OAAO,CAAA,CAAE,UAAU,CAAA,IAAK,CAAA,CAAE,UAAU,CAAA,IAAK,CAAA,CAAE,UAAU,MAAA,CAAO,KAAA;AAAA,IAC9D;AAAA,IACA,KAAK,GAAA;AAEH,MAAA,OAAO,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAA,IAAS,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAA,IAAS,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA;AAAA,IACnF;AACE,MAAA,OAAO,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,KAAM,CAAA;AAAA;AAEhC;AAEO,SAAS,gBAAgBA,MAAAA,EAAwC;AACtE,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,IAAG,GAAIA,MAAAA;AAC5C,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,EAAc,OAAA,KAAoB,MAAA,CAAO,IAAA,CAAK,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AAC/F,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAc,OAAA,KAAoB,MAAA,CAAO,IAAA,CAAK,EAAE,QAAA,EAAU,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,CAAA;AAElG,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAG7C,EAAA,IAAI,IAAA,CAAK,cAAc,SAAA,EAAW;AAChC,IAAA,GAAA,CAAI,mBAAA,EAAqB,sCAAsC,SAAA,CAAU,EAAE,cAAc,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAChH,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B;AACA,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAC3C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,GAAA;AAAA,MACE,qBAAA;AAAA,MACA,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,SAAA,EAAY,IAAA,CAAK,SAAS,CAAA,4BAAA,EAA+B,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,KAC9F;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B;AAEA,EAAA,MAAM,WAAA,GAAc,UAAU,UAAA,CAAW,IAAA;AAAA,IACvC,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,IAAA,CAAK,SAAA,KAAc,IAAA,CAAK,aAAA,KAAkB,SAAA,IAAa,CAAA,CAAE,aAAA,KAAkB,IAAA,CAAK,aAAA;AAAA,GACzG;AACA,EAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,SAAA,IAAa,CAAC,WAAA,EAAa;AACpD,IAAA,GAAA;AAAA,MACE,oBAAA;AAAA,MACA,CAAA,EAAG,UAAU,EAAE,CAAA,iBAAA,EAAoB,KAAK,SAAS,CAAA,MAAA,EAAM,KAAK,aAAa,CAAA,QAAA;AAAA,KAC3E;AAAA,EACF;AAGA,EAAA,MAAM,aAAa,EAAE,GAAG,UAAU,UAAA,EAAY,GAAG,KAAK,UAAA,EAAW;AACjE,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACtD,IAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,IAAI,CAAC,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA,EAAG;AAChC,MAAA,GAAA,CAAI,iBAAiB,CAAA,EAAG,IAAI,IAAI,IAAI,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5E;AAAA,EACF;AAGA,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,aAA8B,CAAA;AACvE,IAAA,IAAI,OAAO,kBAAA,KAAuB,QAAA,IAAY,QAAA,IAAY,MAAA,CAAO,aAAa,SAAA,EAAW;AACvF,MAAA,GAAA;AAAA,QACE,uBAAA;AAAA,QACA,CAAA,EAAG,KAAK,aAAa,CAAA,+FAAA;AAAA,OACvB;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,gBAAA,KAAqB,WAAA,IAAe,QAAA,EAAU;AACvD,MAAA,GAAA;AAAA,QACE,yBAAA;AAAA,QACA,CAAA,6CAAA,EAAgD,KAAK,aAAa,CAAA,6CAAA;AAAA,OACpE;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,IAAY,MAAA,CAAO,QAAA,KAAa,SAAA,EAAW;AAC7C,MAAA,KAAA,MAAW,CAAA,IAAK,SAAA,CAAU,GAAA,IAAO,EAAC,EAAG;AACnC,QAAA,IAAI,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,QAAA,EAAU;AACtC,UAAA,GAAA,CAAI,mBAAmB,CAAA,iBAAA,EAAoB,CAAA,CAAE,IAAI,CAAA,sCAAA,EAAyC,IAAA,CAAK,aAAa,CAAA,QAAA,CAAU,CAAA;AAAA,QACxH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,mBAAmB,GAAA,CAAI,IAAA,CAAK,aAA8B,CAAA,EAAG;AACvG,MAAA,IAAA;AAAA,QACE,kBAAA;AAAA,QACA,CAAA,mEAAA,EAAsE,KAAK,aAAa,CAAA,8EAAA;AAAA,OAC1F;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,IAAQ,CAAC,KAAK,UAAA,EAAY;AAC9C,IAAA,GAAA,CAAI,oBAAoB,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,GAAA,EAAM,IAAA,CAAK,SAAS,CAAA,2DAAA,CAA6D,CAAA;AAAA,EAC1H;AAGA,EAAA,IAAI,KAAK,WAAA,KAAgB,iBAAA,IAAqB,IAAA,CAAK,OAAA,CAAQ,SAAS,iBAAA,EAAmB;AACrF,IAAA,IAAA,CAAK,oBAAoB,CAAA,+HAAA,CAAiI,CAAA;AAAA,EAC5J;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,EAAG,IAAA,EAAM,MAAA,EAAO;AACzE;;;AC5KA,SAAS,kBAAkB,KAAA,EAAyC;AAClE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;AACpB,MAAA,MAAM,IAAI,eAAe,CAAA,uCAAA,EAA0C,IAAA,CAAK,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7F;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,IAAI,CAAA;AAAA,EACjB;AACF;AAKA,SAAS,OAAA,CAAQ,KAAA,EAA2B,EAAA,EAAY,WAAA,EAA8B;AACpF,EAAA,OAAO,KAAA,CAAM,EAAA,KAAO,EAAA,IAAM,KAAA,CAAM,WAAA,KAAgB,WAAA;AAClD;AAOO,SAAS,eAAA,CAAgB,QAA0B,KAAA,EAA6C;AACrG,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,SAAA,IAAa,EAAC;AACrC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,EAAG,KAAA,CAAM,EAAA,EAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAC5E,EAAA,MAAM,YACJ,GAAA,KAAQ,EAAA,GAAK,CAAC,GAAG,SAAS,KAAK,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,KAAM,GAAA,GAAM,QAAQ,CAAE,CAAA;AAClF,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,SAAA,EAAU;AAChC;AA0BO,SAAS,wBAAwB,IAAA,EAQjB;AACrB,EAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC5B,EAAA,MAAM,QAA8D,EAAC;AACrE,EAAA,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,EAAO;AAC1B,IAAA,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,GAAI,EAAE,GAAA,EAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA,EAAG,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI;AAAA,EACrE;AACA,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,IAAA,EAAM,WAAA;AAAA,IACN,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,SAAS,IAAA,CAAK,OAAA;AAAA,IACd;AAAA,GACF;AACF;AASA,SAAS,aAAa,KAAA,EAAyB;AAC7C,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,YAAY,CAAA;AACvD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAgC,CAAA,CAAE,MAAK,EAAG;AACtE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA,CAAc,KAAA,CAAkC,GAAG,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,KAAK,CAAC,CAAA;AAC3C;AAGA,SAAS,UAAU,KAAA,EAA2B;AAC5C,EAAA,OAAO,SAAA,CAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AACvC;AASO,SAAS,WAAA,CACd,aACA,KAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAO,YAAY,MAAA,GAAS,CAAA,GAAI,YAAY,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AAC5E,EAAA,MAAM,aAAA,GAAgB,IAAA,GAAO,SAAA,CAAU,IAAI,CAAA,GAAI,EAAA;AAC/C,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAc;AACnC;AAGO,SAAS,kBAAkB,OAAA,EAA4C;AAC5E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AACjC,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AAC5D;AAOO,SAAS,cAAc,GAAA,EAA2B;AACvD,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAClC,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,YAAY,EAAA,EAAI;AACpB,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,MAAA,GAAA,CAAI,KAAK,MAAoB,CAAA;AAAA,IAC/B;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;AC7JO,IAAM,UAAA,GAAa,8BAAA;AA+C1B,SAAS,iBAAA,CAAkB,QAAgB,IAAA,EAAsC;AAC/E,EAAA,MAAM,MAAM,MAAA,CAAO,QAAA,CAASjB,SAAAA,CAAK,IAAA,EAAM,cAAc,CAAC,CAAA;AACtD,EAAA,IAAI,GAAA,IAAO,IAAA,EAAM,OAAO,EAAC;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAK1B,IAAA,OAAO,EAAE,GAAG,GAAA,CAAI,gBAAA,EAAkB,GAAG,GAAA,CAAI,eAAA,EAAiB,GAAG,GAAA,CAAI,YAAA,EAAa;AAAA,EAChF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAQA,eAAsB,YAAA,CAAa,SAAqB,IAAA,EAAmC;AACzF,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,GAAA;AAG7B,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAC1C,EAAA,MAAM,EAAE,QAAQ,QAAA,EAAS,GAAI,cAAc,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AAG9D,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,KAAc,MAAM,aAAA,CAAc,QAAQ,UAAA,EAAY;AAAA,IACjE,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,MAAA;AAAA,IACA,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,mBAAmB,OAAA,CAAQ;AAAA,GAC5B,CAAA;AAGD,EAAA,MAAM,aAAa,eAAA,CAAgB;AAAA,IACjC,IAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,EAAW,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ,IAAI;AAAA,GAC/C,CAAA;AACD,EAAA,IAAI,CAAC,UAAA,CAAW,EAAA,IAAM,CAAC,WAAW,IAAA,EAAM;AACtC,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAC3F,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,eAAA,EAAkB,SAAA,CAAU,EAAE,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,IAAK,oBAAoB,CAAA,CAAE,CAAA;AAAA,EACzG;AACA,EAAA,MAAM,OAAO,UAAA,CAAW,IAAA;AAGxB,EAAA,MAAM,KAAA,GAAQ,MAAM,cAAA,CAAe,GAAA,EAAK,IAAA,EAAM,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAGlG,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,aAAA;AAC3C,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,WAAA,EAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA;AAG1F,EAAA,MAAM,SAAA,GAA6B;AAAA,IACjC,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,eAAe,IAAA,CAAK,aAAA,KAAkB,SAAA,GAAY,MAAA,CAAO,gBAAgB,IAAA,CAAK;AAAA,GAChF;AACA,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,SAAS,uBAAA,CAAwB;AAAA,IACrC,IAAI,SAAA,CAAU,EAAA;AAAA,IACd,SAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAK,GAAA,CAAI,IAAA;AAAA,IACT,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,WAAA,CAAY,KAAK,EAAA,EAAI,eAAA,CAAgB,MAAA,EAAQ,MAAM,GAAG,IAAI,CAAA;AAG1D,EAAA,MAAM,SAAA,GAAYA,SAAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AACvC,EAAA,MAAM,OAAO,aAAA,CAAc,IAAA,CAAK,GAAG,IAAA,CAAK,SAAS,KAAK,EAAE,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAA,EAAM;AAAA,IAC9B,aAAA,EAAe,CAAA;AAAA,IACf,SAAA,EAAW,SAAA;AAAA,IACX,IAAI,SAAA,CAAU,EAAA;AAAA,IACd,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,KAAK,GAAA,CAAI,IAAA;AAAA,IACT,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,CAAG,KAAI,CAAE,CAAA;AAAA,IAC7E,gBAAgB,OAAA,CAAQ,iBAAA,GAAoB,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,QAAA,CAAA,GAAa,EAAA;AAAA,IACtE,SAAA,EAAW;AAAA,GACZ,CAAA;AACD,EAAA,IAAA,CAAK,EAAA,CAAG,MAAM,SAAA,EAAW,iBAAA,CAAkB,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAE5D,EAAA,OAAO;AAAA,IACL,IAAI,SAAA,CAAU,EAAA;AAAA,IACd,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,WAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,CAAC,GAAG,SAAA,CAAU,UAAU,GAAI,IAAA,CAAK,QAAA,IAAY,EAAG,CAAA;AAAA,IAC1D,GAAA,EAAK,SAAA,CAAU,GAAA,IAAO,EAAC;AAAA,IACvB,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AAAA,IAClE,cAAA,EAAgB;AAAA,GAClB;AACF;ACzJO,SAAS,UAAA,GAAqB;AACnC,EAAA,OAAO;AAAA,IACL,SAASF,KAAAA,EAA6B;AACpC,MAAA,IAAI;AACF,QAAA,OAAOe,eAAAA,CAAaf,OAAM,MAAM,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,OAAOA,KAAAA,EAAuB;AAC5B,MAAA,OAAOa,cAAWb,KAAI,CAAA;AAAA,IACxB;AAAA,GACF;AACF;AAQO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO;AAAA,IACL,OAAOA,KAAAA,EAAuB;AAC5B,MAAA,OAAOa,cAAWb,KAAI,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,KAAA,CAAMA,OAAc,OAAA,EAAuB;AACzC,MAAAuE,aAAUM,YAAAA,CAAQ7E,KAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,MAAAgB,gBAAAA,CAAchB,KAAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,OAAOA,KAAAA,EAAoB;AACzB,MAAAgG,SAAA,CAAOhG,KAAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAC9B;AAAA,GACF;AACF;AAOO,SAAS,YAAA,GAAyB;AACvC,EAAA,OAAO;AAAA,IACL,KAAKA,KAAAA,EAA6B;AAChC,MAAA,IAAI;AACF,QAAA,OAAOe,eAAAA,CAAaf,OAAM,MAAM,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,KAAA,CAAMA,OAAc,OAAA,EAAuB;AACzC,MAAAuE,aAAUM,YAAAA,CAAQ7E,KAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,MAAAgB,gBAAAA,CAAchB,KAAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,IACrC;AAAA,GACF;AACF;AAQO,IAAM,SAAA,GAAuB,OAClC,GAAA,EACA,IAAA,KAC0E;AAC1E,EAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAW,KAAA,CAAM,KAAK,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AAClE,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,IAAA,EAAM,MAAM,GAAA,CAAI,IAAA;AAAK,GACvB;AACF,CAAA;;;ACvEA,SAAS,gBAAgB,GAAA,EAAuB;AAC9C,EAAA,OAAO,GAAA,YAAe,cAAA,IAAkB,kCAAA,CAAmC,IAAA,CAAK,IAAI,OAAO,CAAA;AAC7F;AAEA,SAAS,YAAY,MAAA,EAAyB;AAC5C,EAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAS,WAAA,EAAa,SAAA,EAAW,SAAS,QAAA,EAAU,GAAA,EAAK,QAAA,EAAU,cAAA,EAAe,GAAI,MAAA;AAClG,EAAA,MAAM,MAAM,OAAA,CAAQ,MAAA;AACpB,EAAA,GAAA,CAAI,KAAA,CAAM;AAAA,iBAAA,EAAiB,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,QAAA,EAAM,WAAW,OAAO,SAAA,CAAU,SAAS,CAAA,MAAA,EAAM,SAAA,CAAU,aAAa,CAAA;AAAA,CAAK,CAAA;AACrH,EAAA,GAAA,CAAI,KAAA,CAAM,WAAW,OAAA,CAAQ,MAAM,QAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG;AAAA,CAAI,CAAA;AAE9E,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,GAAA,CAAI,KAAA,CAAM;AAAA;AAAA,cAAA,EAAsD,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC;AAAA,CAAI,CAAA;AAAA,EACxF;AACA,EAAA,MAAM,WAAW,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC7C,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,GAAA,CAAI,KAAA,CAAM;AAAA;AAAA,CAA2B,CAAA;AACrC,IAAA,KAAA,MAAW,CAAA,IAAK,UAAU,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,GAAA,CAAI,KAAA,CAAM;AAAA;AAAA,CAAe,CAAA;AACzB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU,GAAA,CAAI,KAAA,CAAM,CAAA,SAAA,EAAO,EAAE,OAAO;AAAA,CAAI,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,GAAA,CAAI,KAAA,CAAM;AAAA;AAAA,CAAmG,CAAA;AAAA,EAC/G;AACA,EAAA,GAAA,CAAI,MAAM,IAAI,CAAA;AAChB;AAOA,eAAsB,eAAA,CACpB,MACA,OAAA,EAC8B;AAC9B,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,YAAA;AAAA,MACnB,EAAE,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,OAAA,CAAQ,KAAA,KAAU,IAAA,EAAM,YAAA,EAAc,OAAA,CAAQ,QAAA,EAAS;AAAA,MACvG;AAAA,QACE,QAAQ,UAAA,EAAW;AAAA,QACnB,IAAI,YAAA,EAAa;AAAA,QACjB,SAAS,WAAA,EAAY;AAAA,QACrB,SAAA,EAAW,SAAA;AAAA,QACX,GAAA,EAAK,MAAA,iBAAM,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,QAClC,KAAK,OAAA,CAAQ;AAAA;AACf,KACF;AACA,IAAA,WAAA,CAAY,MAAM,CAAA;AAClB,IAAA,OAAO,WAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,OAAO,iBAAA;AACjC,IAAA,MAAM,GAAA;AAAA,EACR;AACF;;;ACzEO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,OAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA;AAAA,IACC;AAAA,GACF,CACC,MAAA,CAAO,aAAA,EAAe,sEAAsE,CAAA,CAC5F,MAAA,CAAO,aAAA,EAAe,0BAA0B,CAAA,CAChD,MAAA,CAAO,kBAAA,EAAoB,gDAAgD,CAAA,CAC3E,MAAA,CAAO,cAAA,EAAgB,kDAAkD,CAAA,CACzE,MAAA,CAAO,uBAAA,EAAyB,8DAAA,EAAgE,MAAM,CAAA,CACtG,MAAA,CAAO,iBAAA,EAAmB,iBAAiB,CAAA,CAC3C,MAAA,CAAO,iBAAA,EAAmB,yDAAyD,CAAA,CACnF,MAAA;AAAA,IACC,OACE,OACA,OAAA,KASG;AACH,MAAA,IAAI;AAGF,QAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,KAAA,EAAO;AAAA,UAC3C,KAAK,OAAA,CAAQ,GAAA;AAAA,UACb,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,UAAU,OAAA,CAAQ;AAAA,SACnB,CAAA;AACD,QAAA,IAAI,YAAY,WAAA,EAAa;AAE7B,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,OAAA,CAAQ,KAAA,KAAU,IAAA,EAAM,CAAA;AAC3F,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,OAAA,EAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,SAAA,EAAO,OAAO,SAAS,CAAA;AAAA,CAAK,CAAA;AAC/E,QAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,UAAiB,MAAA,CAAO,KAAA,CAAM,YAAY,CAAC;AAAA,CAAI,CAAA;AAEtE,QAAA,IAAI,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACpC,UAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA;AAAA,CAAmC,CAAA;AACxD,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,CAAwB,CAAA;AAAA,QAC/F;AACA,QAAA,MAAM,QAAA,GAAA,CAAY,MAAA,CAAO,KAAA,CAAM,GAAA,IAAO,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA;AAClE,QAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,UAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA;AAAA,CAA2B,CAAA;AAChD,UAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,QACnF;AACA,QAAA,MAAMiG,OAAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,WAAW,CAAC,CAAA;AAC/E,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAMA,OAAAA,GAAS;AAAA,IAAA,EAASA,OAAM,CAAA;AAAA,CAAA,GAAkB,IAAI,CAAA;AAEnE,QAAA,IAAI,QAAQ,GAAA,EAAK;AACf,UAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,MAAA,CAAO,KAAK,CAAA;AACrD,UAAA,IAAI,CAAC,YAAA,EAAc;AACjB,YAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,cACb;AAAA,4BAAA,EAAiC,KAAK,CAAA;AAAA;AAAA,aACxC;AACA,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AACA,UAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,SAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,QAAQ,QAAQ,CAAA;;AAAA,CAAO,CAAA;AACrF,UAAA,MAAM,QAAA,CAAS,QAAQ,GAAA,EAAK;AAAA,YAC1B,UAAU,OAAA,CAAQ,QAAA;AAAA,YAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,YAAA;AAAA,YACA,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,YAAA,EAAiB,OAAO;AAAA,CAAI,CAAA;AACjD,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;AAAA,CAAoD,CAAA;AACzE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,GACF;AACJ;AC7EO,SAAS,oBAAoB,OAAA,EAAwB;AAC1D,EAAA,OAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,wFAAwF,CAAA,CACpG,MAAA,CAAO,aAAA,EAAe,wDAAwD,CAAA,CAC9E,MAAA,CAAO,OAAO,OAAe,OAAA,KAA8B;AAC1D,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAM,GAAI,MAAM,SAAA,CAAU,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC3E,MAAA,IAAI,OAAA,GAAU,CAAA;AACd,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,IAAI,CAAA,CAAE,WAAW,WAAA,EAAa;AAC9B,QAAA,OAAA,EAAA;AACA,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,EAAK,CAAA,CAAE,MAAA,KAAW,eAAA,GAAkB,SAAA,GAAY,UAAU,KAAK/F,SAAAA,CAAK,SAAA,EAAW,CAAA,CAAE,IAAI,CAAC;AAAA,CAAI,CAAA;AAC/G,QAAA,IAAI,EAAE,IAAA,EAAM;AACV,UAAA,KAAA,MAAW,IAAA,IAAQ,EAAE,IAAA,EAAM;AACzB,YAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACvB,YAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI;AAAA,CAAI,CAAA;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,YAAY,CAAA,GACR;AAAA,EAAK,KAAK,CAAA;AAAA,CAAA,GACV;AAAA,EAAK,OAAO,2CAA2C,KAAK,CAAA;AAAA;AAAA,OAClE;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,aAAA,EAAkB,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AAC3F,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AAEO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,OAAA,CACG,QAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,4EAA4E,EACxF,MAAA,CAAO,aAAA,EAAe,wDAAwD,CAAA,CAC9E,OAAO,aAAA,EAAe,yCAAyC,EAC/D,MAAA,CAAO,OAAO,OAAe,OAAA,KAA+C;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAM,GAAI,MAAM,SAAA,CAAU,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC3E,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAC5D,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,EAAK,KAAK,CAAA;AAAA,CAAyB,CAAA;AACxD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,eAAA,EAAoB,QAAQ,MAAM,CAAA;AAAA,CAAuC,CAAA;AAC9F,QAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA;AAAA,CAAK,CAAA;AAAA,MAC7E;AACA,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,MAAM,IAAA,GAAOA,SAAAA,CAAK,SAAA,EAAW,CAAA,CAAE,IAAI,CAAA;AACnC,QAAA,MAAM2D,eAAMgB,YAAAA,CAAQ,IAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,QAAA,MAAMf,kBAAAA,CAAU,IAAA,EAAM,CAAA,CAAE,QAAA,EAAU,MAAM,CAAA;AACxC,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,UAAA,EAAa,IAAI;AAAA,CAAI,CAAA;AAAA,MAC5C;AACA,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,QAAA,EAAa,KAAK,CAAA;AAAA,CAAyD,CAAA;AAAA,IAClG,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM;AAAA,eAAA,EAAoB,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA,CAAI,CAAA;AAC7F,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;ACnDO,SAAS,SAAA,GAAqB;AACnC,EAAA,MAAM,OAAA,GAAU,IAAIoC,iBAAA,EAAQ;AAC5B,EAAA,OAAA,CACG,IAAA,CAAK,WAAW,CAAA,CAChB,WAAA,CAAY,yDAAyD,CAAA;AAExE,EAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,EAAA,qBAAA,CAAsB,OAAO,CAAA;AAC7B,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,qBAAA,CAAsB,OAAO,CAAA;AAC7B,EAAA,qBAAA,CAAsB,OAAO,CAAA;AAC7B,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,EAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,oBAAA,CAAqB,OAAO,CAAA;AAC5B,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,EAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,EAAA,qBAAA,CAAsB,OAAO,CAAA;AAE7B,EAAA,OAAO,OAAA;AACT","file":"index.cjs","sourcesContent":["import { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { resolve, join } from 'node:path'\n\nexport interface AgentsKitConfig {\n  tools?: {\n    filesystem?: { basePath?: string }\n    shell?: { allowed?: string[]; timeout?: number; maxOutput?: number }\n    webSearch?: { provider?: string; maxResults?: number }\n  }\n  defaults?: {\n    provider?: string\n    model?: string\n    /** Reserved — prefer `apiKeyEnv` so keys stay out of committed configs. */\n    apiKey?: string\n    /** Name of the env var holding the API key, e.g. `OPENROUTER_API_KEY`. */\n    apiKeyEnv?: string\n    baseUrl?: string\n    tools?: string\n    skill?: string\n    system?: string\n    memoryBackend?: string\n  }\n  runtime?: {\n    maxSteps?: number\n    maxDelegationDepth?: number\n  }\n  observability?: {\n    console?: boolean | { format?: 'human' | 'json' }\n    langsmith?: { projectName?: string }\n  }\n  /**\n   * Plugin specifiers. Each entry is a package name (`@org/plugin`) or\n   * a relative/absolute path to a module exporting a `Plugin`.\n   */\n  plugins?: string[]\n  /**\n   * Shell-based hooks keyed by event name. See `extensibility/hooks`.\n   */\n  hooks?: Record<string, Array<{ run: string; matcher?: string; timeout?: number }>>\n  /**\n   * Retrieval-augmented generation config. Indexes files via\n   * `agentskit rag index`. Chat-side auto-retrieval lands in a later phase.\n   */\n  rag?: {\n    enabled?: boolean\n    backend?: 'memory' | 'file'\n    dir?: string\n    sources?: string[]\n    embedder?: { provider?: string; model?: string; apiKey?: string; baseUrl?: string }\n    chunkSize?: number\n    topK?: number\n  }\n  /**\n   * MCP servers to spawn on chat start. Tools list + call bridge\n   * them into the runtime tool set as `<serverName>__<toolName>`.\n   */\n  mcp?: {\n    servers?: Record<string, { command: string; args?: string[]; env?: Record<string, string>; timeout?: number }>\n  }\n  /**\n   * Tool permission policy. See `extensibility/permissions`.\n   */\n  permissions?: {\n    mode?: 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'\n    rules?: Array<{\n      tool: string\n      action: 'allow' | 'ask' | 'deny'\n      scope?: 'session' | 'project' | 'global'\n    }>\n  }\n}\n\nasync function loadJsonConfig(path: string): Promise<AgentsKitConfig | undefined> {\n  try {\n    const raw = await readFile(path, 'utf8')\n    return JSON.parse(raw) as AgentsKitConfig\n  } catch {\n    return undefined\n  }\n}\n\nasync function loadTsConfig(path: string): Promise<AgentsKitConfig | undefined> {\n  try {\n    const mod = await import(path)\n    return (mod.default ?? mod) as AgentsKitConfig\n  } catch {\n    return undefined\n  }\n}\n\nasync function loadPackageJsonConfig(dir: string): Promise<AgentsKitConfig | undefined> {\n  try {\n    const raw = await readFile(join(dir, 'package.json'), 'utf8')\n    const pkg = JSON.parse(raw) as Record<string, unknown>\n    if (pkg.agentskit && typeof pkg.agentskit === 'object') {\n      return pkg.agentskit as AgentsKitConfig\n    }\n    return undefined\n  } catch {\n    return undefined\n  }\n}\n\nexport interface LoadConfigOptions {\n  cwd?: string\n  /**\n   * Root directory to read the global config from. Defaults to `~`. Tests\n   * pass a tmpdir here so the user's real `~/.agentskit/config.json` can't\n   * contaminate results. Pass `null` to disable global config entirely.\n   */\n  home?: string | null\n}\n\nfunction mergeConfigs(\n  base: AgentsKitConfig | undefined,\n  override: AgentsKitConfig | undefined,\n): AgentsKitConfig | undefined {\n  if (!base && !override) return undefined\n  if (!base) return override\n  if (!override) return base\n  return {\n    ...base,\n    ...override,\n    tools: { ...base.tools, ...override.tools },\n    defaults: { ...base.defaults, ...override.defaults },\n    runtime: { ...base.runtime, ...override.runtime },\n    observability: { ...base.observability, ...override.observability },\n  }\n}\n\nasync function loadLocalConfig(cwd: string): Promise<AgentsKitConfig | undefined> {\n  const tsConfig = await loadTsConfig(join(cwd, '.agentskit.config.ts'))\n  if (tsConfig) return tsConfig\n\n  const jsonConfig = await loadJsonConfig(join(cwd, '.agentskit.config.json'))\n  if (jsonConfig) return jsonConfig\n\n  return await loadPackageJsonConfig(cwd)\n}\n\nasync function loadGlobalConfig(home: string | null | undefined): Promise<AgentsKitConfig | undefined> {\n  if (home === null) return undefined\n  const globalDir = join(home ?? homedir(), '.agentskit')\n  const tsConfig = await loadTsConfig(join(globalDir, 'config.ts'))\n  if (tsConfig) return tsConfig\n  return await loadJsonConfig(join(globalDir, 'config.json'))\n}\n\n/**\n * Load an AgentsKit config file. Node-only — uses fs/promises.\n *\n * Merges in precedence order (later wins):\n *   1. `~/.agentskit/config.(ts|json)` — user-wide defaults\n *   2. `.agentskit.config.ts` in cwd\n *   3. `.agentskit.config.json` in cwd\n *   4. `\"agentskit\"` field in `package.json`\n *\n * Returns `undefined` if nothing is found.\n */\nexport async function loadConfig(options?: LoadConfigOptions): Promise<AgentsKitConfig | undefined> {\n  const cwd = resolve(options?.cwd ?? process.cwd())\n  const global = await loadGlobalConfig(options?.home)\n  const local = await loadLocalConfig(cwd)\n  return mergeConfigs(global, local)\n}\n","import {\n  anthropic,\n  deepseek,\n  gemini,\n  grok,\n  kimi,\n  ollama,\n  openai,\n} from '@agentskit/adapters'\nimport type { AdapterFactory } from '@agentskit/core'\n\nexport interface ChatProviderOptions {\n  provider: string\n  model?: string\n  apiKey?: string\n  baseUrl?: string\n}\n\nexport interface ResolvedChatProvider {\n  adapter: AdapterFactory\n  provider: string\n  model?: string\n  mode: 'demo' | 'live'\n  summary: string\n}\n\ninterface ProviderEntry {\n  label: string\n  envKeys: string[]\n  defaultModel?: string\n  requiresModel?: boolean\n  factory: (config: { apiKey: string; model: string; baseUrl?: string }) => AdapterFactory\n}\n\nconst providers: Record<string, ProviderEntry> = {\n  openai: {\n    label: 'OpenAI',\n    envKeys: ['OPENAI_API_KEY'],\n    defaultModel: 'gpt-4o-mini',\n    factory: (c) => openai(c),\n  },\n  anthropic: {\n    label: 'Anthropic',\n    envKeys: ['ANTHROPIC_API_KEY'],\n    defaultModel: 'claude-3-5-sonnet-latest',\n    factory: (c) => anthropic(c),\n  },\n  gemini: {\n    label: 'Gemini',\n    envKeys: ['GEMINI_API_KEY'],\n    defaultModel: 'gemini-2.5-flash',\n    factory: (c) => gemini(c),\n  },\n  ollama: {\n    label: 'Ollama',\n    envKeys: [],\n    defaultModel: 'llama3.1',\n    factory: (c) => ollama({ model: c.model, baseUrl: c.baseUrl }),\n  },\n  deepseek: {\n    label: 'DeepSeek',\n    envKeys: ['DEEPSEEK_API_KEY'],\n    defaultModel: 'deepseek-chat',\n    factory: (c) => deepseek(c),\n  },\n  grok: {\n    label: 'xAI Grok',\n    envKeys: ['XAI_API_KEY'],\n    requiresModel: true,\n    factory: (c) => grok(c),\n  },\n  kimi: {\n    label: 'Kimi',\n    envKeys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],\n    requiresModel: true,\n    factory: (c) => kimi(c),\n  },\n}\n\nfunction createDemoAdapter(provider: string, model?: string): AdapterFactory {\n  return {\n    createSource: ({ messages }) => {\n      let cancelled = false\n\n      return {\n        stream: async function* () {\n          const userMessages = messages.filter(message => message.role === 'user')\n          const lastMessage = userMessages[userMessages.length - 1]\n          const reply = [\n            `Provider: ${provider}${model ? ` (${model})` : ''}.`,\n            'This is the AgentsKit CLI demo adapter.',\n            `You said: ${lastMessage?.content ?? ''}`,\n          ].join(' ')\n\n          for (const chunk of reply.match(/.{1,18}/g) ?? []) {\n            if (cancelled) return\n            await new Promise(resolve => setTimeout(resolve, 35))\n            yield { type: 'text' as const, content: chunk }\n          }\n\n          yield { type: 'done' as const }\n        },\n        abort: () => {\n          cancelled = true\n        },\n      }\n    },\n  }\n}\n\nexport function resolveChatProvider(options: ChatProviderOptions): ResolvedChatProvider {\n  const name = options.provider.toLowerCase()\n\n  if (name === 'demo') {\n    return {\n      adapter: createDemoAdapter(name, options.model),\n      provider: name,\n      model: options.model,\n      mode: 'demo',\n      summary: 'demo adapter (no network, no API key required)',\n    }\n  }\n\n  const entry = providers[name]\n  if (!entry) {\n    const supported = ['demo', ...Object.keys(providers)].join(', ')\n    throw new Error(`Unsupported provider \"${options.provider}\". Try ${supported}.`)\n  }\n\n  // Resolve API key: try explicit flag first, then each envKey in order\n  let apiKey = options.apiKey\n  if (!apiKey) {\n    for (const key of entry.envKeys) {\n      apiKey = process.env[key]\n      if (apiKey) break\n    }\n  }\n  if (!apiKey && entry.envKeys.length > 0) {\n    const keyList = entry.envKeys.join(' or ')\n    throw new Error(`${entry.label} requires an API key. Pass --api-key or set ${keyList}.`)\n  }\n\n  // Resolve model\n  const model = options.model ?? entry.defaultModel\n  if (!model) {\n    throw new Error(`${entry.label} requires --model in the current CLI version.`)\n  }\n\n  return {\n    adapter: entry.factory({ apiKey: apiKey ?? '', model, baseUrl: options.baseUrl }),\n    provider: name,\n    model,\n    mode: 'live',\n    summary: `${entry.label} live adapter`,\n  }\n}\n","import { createHash, randomBytes } from 'node:crypto'\nimport {\n  existsSync,\n  mkdirSync,\n  readFileSync,\n  readdirSync,\n  statSync,\n  writeFileSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface SessionMetadata {\n  id: string\n  cwd: string\n  createdAt: string\n  updatedAt: string\n  messageCount: number\n  preview: string\n  provider?: string\n  model?: string\n  /** Optional human-readable label. Set via `/rename` or `renameSession`. */\n  label?: string\n  /** Session id this one was forked from, if any. */\n  forkedFrom?: string\n}\n\nexport interface SessionRecord {\n  metadata: SessionMetadata\n  file: string\n}\n\nconst ROOT = join(homedir(), '.agentskit', 'sessions')\nconst META_SUFFIX = '.meta.json'\n\nfunction cwdHash(cwd: string = process.cwd()): string {\n  return createHash('sha256').update(cwd).digest('hex').slice(0, 12)\n}\n\nfunction dirFor(cwd: string = process.cwd()): string {\n  return join(ROOT, cwdHash(cwd))\n}\n\nfunction ensureDir(dir: string): void {\n  if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n}\n\n/** Generate a new session id — ISO-ish timestamp + 6 random hex chars. */\nexport function generateSessionId(): string {\n  const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19)\n  const suffix = randomBytes(3).toString('hex')\n  return `${ts}-${suffix}`\n}\n\nexport function sessionFilePath(id: string, cwd: string = process.cwd()): string {\n  ensureDir(dirFor(cwd))\n  return join(dirFor(cwd), `${id}.json`)\n}\n\nfunction metaPath(id: string, cwd: string = process.cwd()): string {\n  return join(dirFor(cwd), `${id}${META_SUFFIX}`)\n}\n\nfunction readMeta(id: string, cwd: string = process.cwd()): SessionMetadata | null {\n  const path = metaPath(id, cwd)\n  if (!existsSync(path)) return null\n  try {\n    return JSON.parse(readFileSync(path, 'utf8')) as SessionMetadata\n  } catch {\n    return null\n  }\n}\n\nexport function writeSessionMeta(meta: SessionMetadata, cwd: string = process.cwd()): void {\n  ensureDir(dirFor(cwd))\n  writeFileSync(metaPath(meta.id, cwd), JSON.stringify(meta, null, 2))\n}\n\n/** Derive a short preview (first user message, one line, max 80 chars). */\nexport function derivePreview(messages: Array<{ role: string; content: string }>): string {\n  const firstUser = messages.find(m => m.role === 'user' && m.content.trim())\n  if (!firstUser) return '(empty)'\n  const single = firstUser.content.replace(/\\s+/g, ' ').trim()\n  return single.length > 80 ? `${single.slice(0, 80)}…` : single\n}\n\nexport function listSessions(cwd: string = process.cwd()): SessionRecord[] {\n  const dir = dirFor(cwd)\n  if (!existsSync(dir)) return []\n\n  const entries = readdirSync(dir)\n  const records: SessionRecord[] = []\n\n  for (const entry of entries) {\n    if (!entry.endsWith('.json') || entry.endsWith(META_SUFFIX)) continue\n    const id = entry.replace(/\\.json$/, '')\n    const meta = readMeta(id, cwd)\n    const file = join(dir, entry)\n    if (meta) {\n      records.push({ metadata: meta, file })\n    } else {\n      // No meta file — synthesize from file stats so legacy sessions still show.\n      const stats = statSync(file)\n      records.push({\n        metadata: {\n          id,\n          cwd,\n          createdAt: stats.birthtime.toISOString(),\n          updatedAt: stats.mtime.toISOString(),\n          messageCount: 0,\n          preview: '(legacy session)',\n        },\n        file,\n      })\n    }\n  }\n\n  // Most recently updated first\n  records.sort((a, b) => b.metadata.updatedAt.localeCompare(a.metadata.updatedAt))\n  return records\n}\n\nexport function findLatestSession(cwd: string = process.cwd()): SessionRecord | null {\n  const all = listSessions(cwd)\n  return all[0] ?? null\n}\n\nexport function findSession(id: string, cwd: string = process.cwd()): SessionRecord | null {\n  const all = listSessions(cwd)\n  const exact = all.find(s => s.metadata.id === id || s.metadata.label === id)\n  if (exact) return exact\n  // Allow prefix match so users can type the first few chars.\n  const prefix = all.find(s => s.metadata.id.startsWith(id))\n  return prefix ?? null\n}\n\n/** Attach or update a human-readable label on an existing session. */\nexport function renameSession(\n  id: string,\n  label: string,\n  cwd: string = process.cwd(),\n): SessionMetadata {\n  const record = findSession(id, cwd)\n  if (!record) throw new Error(`No session matching \"${id}\".`)\n  const next: SessionMetadata = { ...record.metadata, label, updatedAt: new Date().toISOString() }\n  writeSessionMeta(next, cwd)\n  return next\n}\n\n/**\n * Copy an existing session's message file into a new session so the user\n * can branch a conversation without disturbing the original.\n */\nexport function forkSession(\n  id: string,\n  cwd: string = process.cwd(),\n): ResolvedSession {\n  const record = findSession(id, cwd)\n  if (!record) throw new Error(`No session matching \"${id}\".`)\n\n  const newId = generateSessionId()\n  const newFile = sessionFilePath(newId, cwd)\n\n  if (existsSync(record.file)) {\n    writeFileSync(newFile, readFileSync(record.file, 'utf8'))\n  }\n\n  const now = new Date().toISOString()\n  writeSessionMeta(\n    {\n      ...record.metadata,\n      id: newId,\n      createdAt: now,\n      updatedAt: now,\n      forkedFrom: record.metadata.id,\n      label: undefined,\n    },\n    cwd,\n  )\n\n  return { id: newId, file: newFile, isNew: true }\n}\n\nexport interface ResolveSessionInput {\n  explicitPath?: string\n  resumeId?: string | true\n  forceNew?: boolean\n  cwd?: string\n}\n\nexport interface ResolvedSession {\n  id: string\n  file: string\n  isNew: boolean\n}\n\n/**\n * Decide which session file to read/write:\n * - `explicitPath` wins if given (legacy `--memory-path` flag).\n * - `forceNew` creates a fresh session.\n * - `resumeId === true` → latest in cwd.\n * - `resumeId` string → that id (or prefix).\n * - Otherwise: resume latest if one exists, else create new. Matches\n *   Claude Code's \"pick up where you left off\" default.\n */\nexport function resolveSession(input: ResolveSessionInput): ResolvedSession {\n  const cwd = input.cwd ?? process.cwd()\n\n  if (input.explicitPath) {\n    return { id: 'custom', file: input.explicitPath, isNew: !existsSync(input.explicitPath) }\n  }\n\n  if (input.forceNew) {\n    const id = generateSessionId()\n    return { id, file: sessionFilePath(id, cwd), isNew: true }\n  }\n\n  if (input.resumeId) {\n    const target = input.resumeId === true\n      ? findLatestSession(cwd)\n      : findSession(input.resumeId, cwd)\n    if (target) {\n      return { id: target.metadata.id, file: target.file, isNew: false }\n    }\n    // Explicit resume asked for a session that doesn't exist — fall through\n    // to a new one rather than erroring, and warn.\n    process.stderr.write(\n      `No session matching \"${String(input.resumeId)}\" — starting a new one.\\n`\n    )\n  }\n\n  const latest = findLatestSession(cwd)\n  if (latest) return { id: latest.metadata.id, file: latest.file, isNew: false }\n\n  const id = generateSessionId()\n  return { id, file: sessionFilePath(id, cwd), isNew: true }\n}\n","/**\n * Per-million-token prices in USD. Keeps only a few canonical models —\n * hosts can override at runtime via `registerPricing`. Values are\n * publicly listed prices as of 2026-Q1 and may drift; authoritative\n * cost tracking should come from the provider's invoice.\n */\nexport interface ModelPricing {\n  inputPerM: number\n  outputPerM: number\n}\n\nconst builtinPricing: Record<string, ModelPricing> = {\n  'gpt-4o': { inputPerM: 2.5, outputPerM: 10 },\n  'gpt-4o-mini': { inputPerM: 0.15, outputPerM: 0.6 },\n  'gpt-4.1': { inputPerM: 2, outputPerM: 8 },\n  'gpt-4.1-mini': { inputPerM: 0.4, outputPerM: 1.6 },\n  'claude-opus-4': { inputPerM: 15, outputPerM: 75 },\n  'claude-sonnet-4': { inputPerM: 3, outputPerM: 15 },\n  'claude-haiku-4': { inputPerM: 0.8, outputPerM: 4 },\n  'gemini-2.5-pro': { inputPerM: 1.25, outputPerM: 10 },\n  'gemini-2.5-flash': { inputPerM: 0.3, outputPerM: 2.5 },\n}\n\nconst customPricing: Record<string, ModelPricing> = {}\n\nexport function registerPricing(model: string, pricing: ModelPricing): void {\n  customPricing[model] = pricing\n}\n\nexport function getPricing(model: string | undefined): ModelPricing | undefined {\n  if (!model) return undefined\n  if (customPricing[model]) return customPricing[model]\n  if (builtinPricing[model]) return builtinPricing[model]\n  // Prefix match: `openai/gpt-4o` → `gpt-4o`.\n  const short = model.includes('/') ? model.split('/').pop()! : model\n  return customPricing[short] ?? builtinPricing[short]\n}\n\nexport interface TokenUsageLike {\n  promptTokens: number\n  completionTokens: number\n}\n\nexport interface ComputedCost {\n  model: string\n  inputUsd: number\n  outputUsd: number\n  totalUsd: number\n}\n\n/** Returns computed cost, or `undefined` if no pricing is registered for the model. */\nexport function computeCost(\n  model: string | undefined,\n  usage: TokenUsageLike,\n): ComputedCost | undefined {\n  if (!model) return undefined\n  const pricing = getPricing(model)\n  if (!pricing) return undefined\n  const inputUsd = (usage.promptTokens / 1_000_000) * pricing.inputPerM\n  const outputUsd = (usage.completionTokens / 1_000_000) * pricing.outputPerM\n  return {\n    model,\n    inputUsd,\n    outputUsd,\n    totalUsd: inputUsd + outputUsd,\n  }\n}\n","import type { ChatReturn } from '@agentskit/core'\nimport { forkSession, renameSession } from './sessions'\nimport { computeCost } from './extensibility/telemetry'\n\nexport type FeedbackKind = 'info' | 'warn' | 'error' | 'success'\n\nexport interface SlashCommandContext {\n  chat: ChatReturn\n  /** Short-form snapshot of the live runtime config. */\n  runtime: {\n    provider: string\n    model?: string\n    mode: string\n    baseUrl?: string\n    tools?: string\n    skill?: string\n    sessionId?: string\n  }\n  /** Mutators — each rebuilds the underlying adapter/tool chain. */\n  setProvider: (value: string) => void\n  setModel: (value: string | undefined) => void\n  setApiKey: (value: string | undefined) => void\n  setBaseUrl: (value: string | undefined) => void\n  setTools: (value: string | undefined) => void\n  setSkill: (value: string | undefined) => void\n  /** Print a status line in the chat UI (non-streamed). */\n  feedback: (message: string, kind?: FeedbackKind) => void\n  /** Registered commands — `help` uses this to list them. */\n  commands: SlashCommand[]\n}\n\nexport interface SlashCommand {\n  name: string\n  description: string\n  usage?: string\n  aliases?: string[]\n  run: (ctx: SlashCommandContext, argsText: string) => void | Promise<void>\n}\n\n/**\n * Parse a user-typed line as a slash command. Returns `null` when the\n * input is a regular chat message so callers can fall back to `chat.send`.\n */\nexport function parseSlashCommand(input: string): { name: string; args: string } | null {\n  if (!input.startsWith('/')) return null\n  const match = input.slice(1).match(/^(\\S+)\\s*([\\s\\S]*)$/)\n  if (!match) return null\n  return { name: match[1], args: match[2] ?? '' }\n}\n\nexport function createSlashRegistry(commands: SlashCommand[]): Map<string, SlashCommand> {\n  const map = new Map<string, SlashCommand>()\n  for (const cmd of commands) {\n    map.set(cmd.name, cmd)\n    for (const alias of cmd.aliases ?? []) map.set(alias, cmd)\n  }\n  return map\n}\n\n/**\n * Built-in slash commands. Extend by composing your own array:\n *   `[...builtinSlashCommands, myCommand]`.\n * Commands registered later override earlier ones by name.\n */\nexport const builtinSlashCommands: SlashCommand[] = [\n  {\n    name: 'help',\n    aliases: ['?'],\n    description: 'List available slash commands.',\n    run(ctx) {\n      const seen = new Set<string>()\n      const lines: string[] = []\n      for (const cmd of ctx.commands) {\n        if (seen.has(cmd.name)) continue\n        seen.add(cmd.name)\n        const suffix = cmd.usage ? `  (${cmd.usage})` : ''\n        lines.push(`  /${cmd.name.padEnd(10)} ${cmd.description}${suffix}`)\n      }\n      ctx.feedback(`Slash commands:\\n${lines.join('\\n')}`, 'info')\n    },\n  },\n  {\n    name: 'model',\n    description: 'Switch the active model.',\n    usage: '/model <name>',\n    run(ctx, args) {\n      const value = args.trim()\n      if (!value) {\n        ctx.feedback(\n          `Current model: ${ctx.runtime.model ?? 'unset'}. Usage: /model <name>`,\n          'warn',\n        )\n        return\n      }\n      ctx.setModel(value)\n      ctx.feedback(`Model → ${value}`, 'success')\n    },\n  },\n  {\n    name: 'provider',\n    description: 'Switch the adapter provider.',\n    usage: '/provider openai|anthropic|gemini|ollama|deepseek|grok|kimi|demo',\n    run(ctx, args) {\n      const value = args.trim()\n      if (!value) {\n        ctx.feedback(\n          `Current provider: ${ctx.runtime.provider}. Usage: /provider <name>`,\n          'warn',\n        )\n        return\n      }\n      ctx.setProvider(value)\n      ctx.feedback(`Provider → ${value}`, 'success')\n    },\n  },\n  {\n    name: 'base-url',\n    aliases: ['baseurl'],\n    description: 'Override provider base URL.',\n    usage: '/base-url <url|clear>',\n    run(ctx, args) {\n      const value = args.trim()\n      if (!value || value === 'clear') {\n        ctx.setBaseUrl(undefined)\n        ctx.feedback('Base URL cleared.', 'success')\n        return\n      }\n      ctx.setBaseUrl(value)\n      ctx.feedback(`Base URL → ${value}`, 'success')\n    },\n  },\n  {\n    name: 'tools',\n    description: 'Set active tools (comma-separated) or clear them.',\n    usage: '/tools web_search,fetch_url | /tools clear',\n    run(ctx, args) {\n      const value = args.trim()\n      if (!value || value === 'clear') {\n        ctx.setTools(undefined)\n        ctx.feedback('Tools reset to defaults.', 'success')\n        return\n      }\n      ctx.setTools(value)\n      ctx.feedback(`Tools → ${value}`, 'success')\n    },\n  },\n  {\n    name: 'skill',\n    description: 'Set active skill(s) (comma-separated) or clear them.',\n    usage: '/skill researcher,coder | /skill clear',\n    run(ctx, args) {\n      const value = args.trim()\n      if (!value || value === 'clear') {\n        ctx.setSkill(undefined)\n        ctx.feedback('Skills cleared.', 'success')\n        return\n      }\n      ctx.setSkill(value)\n      ctx.feedback(`Skills → ${value}`, 'success')\n    },\n  },\n  {\n    name: 'clear',\n    aliases: ['reset'],\n    description: 'Clear the conversation history in this session.',\n    async run(ctx) {\n      await ctx.chat.clear()\n      ctx.feedback('History cleared.', 'success')\n    },\n  },\n  {\n    name: 'usage',\n    description: 'Show the cumulative token usage for this session.',\n    run(ctx) {\n      const usage = ctx.chat.usage\n      if (!usage || usage.totalTokens === 0) {\n        ctx.feedback('No usage reported yet for this session.', 'info')\n        return\n      }\n      ctx.feedback(\n        `Tokens — prompt=${usage.promptTokens}  completion=${usage.completionTokens}  total=${usage.totalTokens}`,\n        'info',\n      )\n    },\n  },\n  {\n    name: 'cost',\n    description: 'Estimate the cost so far for the current model.',\n    run(ctx) {\n      const usage = ctx.chat.usage\n      const model = ctx.runtime.model\n      if (!usage || usage.totalTokens === 0) {\n        ctx.feedback('No usage reported yet for this session.', 'info')\n        return\n      }\n      const cost = computeCost(model, usage)\n      if (!cost) {\n        ctx.feedback(\n          `No pricing registered for model \"${model ?? 'unset'}\". Register with registerPricing() or provide a known model name.`,\n          'warn',\n        )\n        return\n      }\n      ctx.feedback(\n        `$${cost.totalUsd.toFixed(4)} total (in=$${cost.inputUsd.toFixed(4)}  out=$${cost.outputUsd.toFixed(4)}  model=${cost.model})`,\n        'info',\n      )\n    },\n  },\n  {\n    name: 'rename',\n    description: 'Attach a human-readable label to the current session.',\n    usage: '/rename <label>',\n    run(ctx, args) {\n      const label = args.trim()\n      const sessionId = ctx.runtime.sessionId\n      if (!sessionId || sessionId === 'custom') {\n        ctx.feedback('Rename is only available for managed sessions.', 'warn')\n        return\n      }\n      if (!label) {\n        ctx.feedback('Usage: /rename <label>', 'warn')\n        return\n      }\n      try {\n        renameSession(sessionId, label)\n        ctx.feedback(`Session labeled \"${label}\".`, 'success')\n      } catch (err) {\n        ctx.feedback(`/rename failed: ${err instanceof Error ? err.message : String(err)}`, 'error')\n      }\n    },\n  },\n  {\n    name: 'fork',\n    description: 'Branch a copy of the current session. Does not switch to it.',\n    run(ctx) {\n      const sessionId = ctx.runtime.sessionId\n      if (!sessionId || sessionId === 'custom') {\n        ctx.feedback('Fork is only available for managed sessions.', 'warn')\n        return\n      }\n      try {\n        const result = forkSession(sessionId)\n        ctx.feedback(\n          `Forked into ${result.id}. Resume with:\\n  agentskit chat --resume ${result.id}`,\n          'success',\n        )\n      } catch (err) {\n        ctx.feedback(`/fork failed: ${err instanceof Error ? err.message : String(err)}`, 'error')\n      }\n    },\n  },\n  {\n    name: 'exit',\n    aliases: ['quit', 'q'],\n    description: 'Exit the chat.',\n    run() {\n      process.exit(0)\n    },\n  },\n]\n","import type { ChatMemory, SkillDefinition, ToolDefinition } from '@agentskit/core'\nimport { webSearch, fetchUrl, filesystem, shell } from '@agentskit/tools'\nimport { researcher, coder, planner, critic, summarizer, composeSkills } from '@agentskit/skills'\nimport { fileChatMemory, sqliteChatMemory } from '@agentskit/memory'\nimport { getIntegration, integrationToolsFromEnv } from '@agentskit/integrations'\n\nexport const skillRegistry: Record<string, SkillDefinition> = {\n  researcher,\n  coder,\n  planner,\n  critic,\n  summarizer,\n}\n\ntype ToolKind = 'web_search' | 'fetch_url' | 'filesystem' | 'shell'\n\nconst BUILTIN_NAMES: Record<ToolKind, readonly string[]> = {\n  web_search: ['web_search'],\n  fetch_url: ['fetch_url'],\n  filesystem: ['fs_read', 'fs_write', 'fs_list'],\n  shell: ['shell'],\n}\n\nfunction instantiate(kind: ToolKind): ToolDefinition[] {\n  switch (kind) {\n    case 'web_search':\n      return [webSearch()]\n    case 'fetch_url':\n      return [fetchUrl()]\n    case 'filesystem':\n      return filesystem({ basePath: process.cwd() })\n    case 'shell':\n      // CLI gates shell behind requiresConfirmation; explicit allowAny\n      // surfaces the dual-use nature without forcing every CLI user to\n      // pick an allowlist up front.\n      return [shell({ timeout: 30_000, allowAny: true })]\n  }\n}\n\nfunction gateTool(tool: ToolDefinition): ToolDefinition {\n  // Preserve an explicit `false` from the tool author, otherwise force on.\n  if (tool.requiresConfirmation === false) return tool\n  return { ...tool, requiresConfirmation: true }\n}\n\n/**\n * Resolves the tool set for `agentskit chat`.\n *\n * - Explicit `--tools web_search,fetch_url`: those tools run without\n *   confirmation (user opted in).\n * - No `--tools` flag: `web_search` and `fetch_url` are registered but\n *   wrapped with `requiresConfirmation: true`. The agent can still call\n *   them; the user just approves each call the first time. Mirrors the\n *   Claude Code \"permission on first use\" pattern.\n */\nexport function resolveTools(toolNames: string | undefined): ToolDefinition[] {\n  if (!toolNames) {\n    return [...instantiate('web_search'), ...instantiate('fetch_url')].map(gateTool)\n  }\n\n  const tools: ToolDefinition[] = []\n  for (const name of toolNames.split(',').map(s => s.trim()).filter(Boolean)) {\n    switch (name) {\n      case 'web_search':\n      case 'fetch_url':\n      case 'filesystem':\n      case 'shell':\n        tools.push(...instantiate(name))\n        break\n      default: {\n        // Catalog integration by slug? Read its credential from the\n        // environment (via the integration's apiKey envHint).\n        if (getIntegration(name)) {\n          const { tools: projected, credentialFound, envVar } = integrationToolsFromEnv(name, process.env)\n          if (!credentialFound) {\n            process.stderr.write(`Integration \"${name}\" needs ${envVar} set in the environment.\\n`)\n          }\n          tools.push(...projected)\n        } else {\n          process.stderr.write(`Unknown tool: ${name}\\n`)\n        }\n      }\n    }\n  }\n  return tools\n}\n\n/** Exposed for UI layers that want to render \"N tools auto-allowed\" hints. */\nexport function getBuiltinToolNames(kind: ToolKind): readonly string[] {\n  return BUILTIN_NAMES[kind]\n}\n\nexport function resolveSkill(skillName: string | undefined): SkillDefinition | undefined {\n  if (!skillName) return undefined\n  const skill = skillRegistry[skillName.trim()]\n  if (!skill) {\n    process.stderr.write(`Unknown skill: ${skillName}\\n`)\n    return undefined\n  }\n  return skill\n}\n\nexport function resolveSkills(skillNames: string | undefined): SkillDefinition | undefined {\n  if (!skillNames) return undefined\n  const names = skillNames.split(',').map(s => s.trim())\n  const resolved = names.map(n => skillRegistry[n]).filter(Boolean)\n  if (resolved.length === 0) {\n    process.stderr.write(`No valid skills found in: ${skillNames}\\n`)\n    return undefined\n  }\n  if (resolved.length === 1) return resolved[0]\n  return composeSkills(...resolved)\n}\n\nexport function resolveMemory(backend: string | undefined, memoryPath: string): ChatMemory {\n  switch (backend) {\n    case 'sqlite':\n      return sqliteChatMemory({ path: memoryPath.replace(/\\.json$/, '.db') })\n    case 'file':\n    default:\n      return fileChatMemory(memoryPath)\n  }\n}\n","import type { ToolDefinition } from '@agentskit/core'\n\nexport type PermissionMode = 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'\n\nexport type PermissionAction = 'allow' | 'ask' | 'deny'\n\nexport interface PermissionRule {\n  /** Exact name, or a `RegExp` / `\"re:pattern\"` string matching the tool name. */\n  tool: string | RegExp\n  action: PermissionAction\n  scope?: 'session' | 'project' | 'global'\n}\n\nexport interface PermissionPolicy {\n  mode: PermissionMode\n  rules: PermissionRule[]\n}\n\nexport const defaultPolicy: PermissionPolicy = {\n  mode: 'default',\n  rules: [],\n}\n\n/**\n * Resolve an action for a tool name. Modes override specific rules:\n *\n *   - `bypassPermissions`: everything → allow\n *   - `plan`:              everything → ask (pretend the agent is planning)\n *   - `acceptEdits`:       fs_write / edit tools → allow, others unchanged\n *   - `default`:           rules drive it; no matching rule → ask\n */\nexport function evaluatePolicy(policy: PermissionPolicy, toolName: string): PermissionAction {\n  if (policy.mode === 'bypassPermissions') return 'allow'\n  if (policy.mode === 'plan') return 'ask'\n\n  for (const rule of policy.rules) {\n    if (matchesRule(rule, toolName)) return rule.action\n  }\n\n  if (policy.mode === 'acceptEdits' && /^(fs_write|edit|write_file)/.test(toolName)) {\n    return 'allow'\n  }\n\n  return 'ask'\n}\n\nfunction matchesRule(rule: PermissionRule, toolName: string): boolean {\n  if (rule.tool instanceof RegExp) return rule.tool.test(toolName)\n  const str = rule.tool\n  if (str.startsWith('re:')) return new RegExp(str.slice(3)).test(toolName)\n  return str === toolName\n}\n\n/**\n * Apply the policy to a tool definition. Returns the tool with\n * `requiresConfirmation` set per the evaluated action, or `null` when the\n * tool is denied (the caller should skip it entirely).\n */\nexport function applyPolicyToTool(\n  policy: PermissionPolicy,\n  tool: ToolDefinition,\n): ToolDefinition | null {\n  const action = evaluatePolicy(policy, tool.name)\n  if (action === 'deny') return null\n  if (action === 'allow') return { ...tool, requiresConfirmation: false }\n  return { ...tool, requiresConfirmation: true }\n}\n\n/** Filter+annotate a tool list under a policy. Denied tools dropped. */\nexport function applyPolicyToTools(\n  policy: PermissionPolicy,\n  tools: ToolDefinition[],\n): ToolDefinition[] {\n  const out: ToolDefinition[] = []\n  for (const tool of tools) {\n    const gated = applyPolicyToTool(policy, tool)\n    if (gated) out.push(gated)\n  }\n  return out\n}\n","import { useMemo, useState } from 'react'\nimport { resolveChatProvider } from '../providers'\nimport { resolveMemory, resolveTools, skillRegistry } from '../resolve'\nimport { applyPolicyToTools, type PermissionPolicy } from '../extensibility/permissions'\n\nexport interface UseRuntimeOptions {\n  provider: string\n  model?: string\n  apiKey?: string\n  baseUrl?: string\n  tools?: string\n  skill?: string\n  memoryBackend?: string\n  memoryPath?: string\n  /** Optional permission policy applied to the resolved tool set. */\n  permissionPolicy?: PermissionPolicy\n}\n\nexport function useRuntime(options: UseRuntimeOptions) {\n  const [provider, setProvider] = useState(options.provider)\n  const [model, setModel] = useState(options.model)\n  const [apiKey, setApiKey] = useState(options.apiKey)\n  const [baseUrl, setBaseUrl] = useState(options.baseUrl)\n  const [toolsFlag, setToolsFlag] = useState<string | undefined>(options.tools)\n  const [skillFlag, setSkillFlag] = useState<string | undefined>(options.skill)\n\n  const runtime = useMemo(\n    () => resolveChatProvider({ provider, model, apiKey, baseUrl }),\n    [provider, model, apiKey, baseUrl],\n  )\n\n  const memory = useMemo(\n    () => resolveMemory(options.memoryBackend, options.memoryPath ?? '.agentskit-history.json'),\n    [options.memoryPath, options.memoryBackend],\n  )\n\n  const tools = useMemo(() => {\n    const resolved = resolveTools(toolsFlag)\n    if (!options.permissionPolicy) return resolved\n    return applyPolicyToTools(options.permissionPolicy, resolved)\n  }, [toolsFlag, options.permissionPolicy])\n\n  const skills = useMemo(() => {\n    if (!skillFlag) return undefined\n    const names = skillFlag.split(',').map(s => s.trim())\n    const resolved = names.map(n => skillRegistry[n]).filter(Boolean)\n    if (resolved.length === 0) return undefined\n    return resolved\n  }, [skillFlag])\n\n  return {\n    runtime,\n    memory,\n    tools,\n    skills,\n    state: { provider, model, apiKey, baseUrl, toolsFlag, skillFlag },\n    setProvider,\n    setModel,\n    setApiKey,\n    setBaseUrl,\n    setToolsFlag,\n    setSkillFlag,\n  }\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport type { ChatReturn } from '@agentskit/core'\n\nexport function useToolPermissions(chat: ChatReturn) {\n  const [sessionAllowed, setSessionAllowed] = useState<Set<string>>(new Set())\n  const autoApprovedRef = useRef<Set<string>>(new Set())\n\n  useEffect(() => {\n    if (sessionAllowed.size === 0) return\n    for (const message of chat.messages) {\n      for (const call of message.toolCalls ?? []) {\n        if (\n          call.status === 'requires_confirmation' &&\n          sessionAllowed.has(call.name) &&\n          !autoApprovedRef.current.has(call.id)\n        ) {\n          autoApprovedRef.current.add(call.id)\n          void chat.approve(call.id)\n        }\n      }\n    }\n  }, [chat.messages, sessionAllowed, chat.approve])\n\n  const handleApproveAlways = (toolCallId: string, toolName: string) => {\n    setSessionAllowed(prev => {\n      if (prev.has(toolName)) return prev\n      const next = new Set(prev)\n      next.add(toolName)\n      return next\n    })\n    autoApprovedRef.current.add(toolCallId)\n    void chat.approve(toolCallId)\n  }\n\n  const awaitingConfirmation = useMemo(\n    () =>\n      chat.messages.some(message =>\n        message.toolCalls?.some(\n          call => call.status === 'requires_confirmation' && !sessionAllowed.has(call.name),\n        ),\n      ),\n    [chat.messages, sessionAllowed],\n  )\n\n  return { sessionAllowed, handleApproveAlways, awaitingConfirmation }\n}\n","import { useEffect, useRef } from 'react'\nimport type { Message as ChatMessage } from '@agentskit/core'\nimport { derivePreview, writeSessionMeta } from '../sessions'\n\nexport interface UseSessionMetaOptions {\n  sessionId?: string\n  messages: ChatMessage[]\n  provider: string\n  model?: string\n}\n\nexport function useSessionMeta(options: UseSessionMetaOptions) {\n  const sessionCreatedAtRef = useRef<string | undefined>(undefined)\n  const messageCount = options.messages.length\n  const firstUserContent = options.messages.find(m => m.role === 'user')?.content ?? ''\n\n  useEffect(() => {\n    const sessionId = options.sessionId\n    if (!sessionId || sessionId === 'custom') return\n    if (!sessionCreatedAtRef.current) {\n      sessionCreatedAtRef.current = new Date().toISOString()\n    }\n    try {\n      writeSessionMeta({\n        id: sessionId,\n        cwd: process.cwd(),\n        createdAt: sessionCreatedAtRef.current,\n        updatedAt: new Date().toISOString(),\n        messageCount,\n        preview: derivePreview(options.messages),\n        provider: options.provider,\n        model: options.model,\n      })\n    } catch {\n      // ignore\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [options.sessionId, messageCount, firstUserContent, options.provider, options.model])\n}\n","import type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nexport interface HookDispatchResult {\n  /** Final payload after any `modify` handlers. */\n  payload: HookPayload\n  /** True when any handler returned `block`. */\n  blocked: boolean\n  /** Block reason from the first blocking handler, if any. */\n  reason?: string\n}\n\n/**\n * Runs every handler registered for an event in order. Handlers can:\n *   - `continue`: do nothing, pass payload through\n *   - `modify`:   replace the payload for subsequent handlers\n *   - `block`:    stop dispatch and surface a reason to the caller\n *\n * Handlers that throw are reported via `onError` and treated as `continue`.\n */\nexport class HookDispatcher {\n  private readonly handlers = new Map<HookEvent, HookHandler[]>()\n\n  constructor(\n    handlers: HookHandler[] = [],\n    private readonly onError: (handler: HookHandler, err: unknown) => void = (_h, err) =>\n      process.stderr.write(\n        `[agentskit] hook error: ${err instanceof Error ? err.message : String(err)}\\n`,\n      ),\n  ) {\n    for (const handler of handlers) this.register(handler)\n  }\n\n  register(handler: HookHandler): void {\n    const list = this.handlers.get(handler.event) ?? []\n    list.push(handler)\n    this.handlers.set(handler.event, list)\n  }\n\n  async dispatch(event: HookEvent, payload: HookPayload): Promise<HookDispatchResult> {\n    const list = this.handlers.get(event) ?? []\n    let current: HookPayload = { ...payload, event }\n\n    for (const handler of list) {\n      if (!this.matches(handler, current)) continue\n\n      let result: HookResult\n      try {\n        result = await handler.run(current)\n      } catch (err) {\n        this.onError(handler, err)\n        continue\n      }\n\n      if (result.decision === 'block') {\n        return { payload: current, blocked: true, reason: result.reason }\n      }\n      if (result.decision === 'modify') {\n        current = { ...result.payload, event }\n      }\n    }\n\n    return { payload: current, blocked: false }\n  }\n\n  private matches(handler: HookHandler, payload: HookPayload): boolean {\n    if (!handler.matcher) return true\n    if (typeof handler.matcher === 'function') return handler.matcher(payload)\n    return handler.matcher.test(String(payload.tool ?? payload.prompt ?? ''))\n  }\n}\n","import { spawn } from 'node:child_process'\nimport type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nexport interface ConfigHookEntry {\n  /** Command to run. Executed through `sh -c`, so shell syntax is allowed. */\n  run: string\n  /** Optional regex string the hook's subject must match to fire. */\n  matcher?: string\n  /** Millisecond budget. Default 5000. */\n  timeout?: number\n}\n\nexport type ConfigHooksMap = Partial<Record<HookEvent, ConfigHookEntry[]>>\n\n/**\n * Normalize `config.hooks` (shell entries) into `HookHandler[]`. The shell\n * command receives the JSON-serialized payload on stdin. It can print a\n * single JSON object on stdout to `modify` the payload, or exit non-zero\n * to `block`.\n *\n *   { \"decision\": \"continue\" }             — default, no output needed\n *   { \"decision\": \"block\", \"reason\": \"…\" }  — also signalled by non-zero exit\n *   { \"decision\": \"modify\", \"payload\": … }  — swaps the payload\n */\nexport function configHooksToHandlers(config: ConfigHooksMap | undefined): HookHandler[] {\n  if (!config) return []\n  const handlers: HookHandler[] = []\n  for (const [event, entries] of Object.entries(config) as Array<[HookEvent, ConfigHookEntry[]]>) {\n    for (const entry of entries) {\n      handlers.push({\n        event,\n        matcher: entry.matcher ? new RegExp(entry.matcher) : undefined,\n        run: (payload) => runShellHook(entry, payload),\n      })\n    }\n  }\n  return handlers\n}\n\nfunction runShellHook(entry: ConfigHookEntry, payload: HookPayload): Promise<HookResult> {\n  return new Promise((resolvePromise) => {\n    const timeoutMs = entry.timeout ?? 5000\n    let settled = false\n    const settle = (result: HookResult) => {\n      if (settled) return\n      settled = true\n      clearTimeout(timer)\n      resolvePromise(result)\n    }\n\n    const child = spawn('sh', ['-c', entry.run], {\n      stdio: ['pipe', 'pipe', 'inherit'],\n      detached: true,\n    })\n\n    let stdout = ''\n    child.stdout.on('data', (chunk) => {\n      stdout += chunk.toString()\n    })\n\n    const timer = setTimeout(() => {\n      // Kill the whole process group so grandchildren (e.g. `sleep` spawned\n      // by `sh -c`) don't keep stdout open and leave us waiting forever.\n      if (child.pid !== undefined) {\n        try { process.kill(-child.pid, 'SIGKILL') } catch { /* group may already be gone */ }\n      }\n      try { child.kill('SIGKILL') } catch { /* ignore */ }\n      settle({ decision: 'block', reason: `shell hook timed out after ${timeoutMs}ms` })\n    }, timeoutMs)\n\n    child.stdin.on('error', () => { /* ignore EPIPE when child is killed mid-write */ })\n\n    child.on('close', (code) => {\n      if (code !== 0) {\n        settle({\n          decision: 'block',\n          reason: `shell hook exited with code ${code}`,\n        })\n        return\n      }\n      const trimmed = stdout.trim()\n      if (!trimmed) {\n        settle({ decision: 'continue' })\n        return\n      }\n      try {\n        const parsed = JSON.parse(trimmed) as HookResult\n        settle(parsed)\n      } catch {\n        // Hook printed non-JSON output; treat as continue.\n        settle({ decision: 'continue' })\n      }\n    })\n\n    child.on('error', (err) => {\n      settle({ decision: 'block', reason: err.message })\n    })\n\n    try {\n      child.stdin.write(JSON.stringify(payload))\n      child.stdin.end()\n    } catch {\n      /* ignore */\n    }\n  })\n}\n","import React, { useMemo, useState } from 'react'\nimport { Box, Text } from 'ink'\nimport {\n  ChatContainer,\n  InputBar,\n  Message,\n  StatusHeader,\n  ThinkingIndicator,\n  ToolCallView,\n  ToolConfirmation,\n  useChat,\n} from '@agentskit/ink'\nimport type { Message as ChatMessage, SkillDefinition, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { resolveChatProvider } from '../providers'\nimport {\n  builtinSlashCommands,\n  createSlashRegistry,\n  parseSlashCommand,\n  type FeedbackKind,\n  type SlashCommand,\n  type SlashCommandContext,\n} from '../slash-commands'\nimport type { AgentsKitConfig } from '../config'\nimport { useRuntime } from '../runtime/use-runtime'\nimport { useToolPermissions } from '../runtime/use-tool-permissions'\nimport { useSessionMeta } from '../runtime/use-session-meta'\nimport { HookDispatcher } from '../extensibility/hooks'\nimport type { HookHandler } from '../extensibility/plugins'\nimport { useEffect } from 'react'\n\nexport interface ChatCommandOptions {\n  provider: string\n  model?: string\n  system?: string\n  memoryPath?: string\n  sessionId?: string\n  apiKey?: string\n  baseUrl?: string\n  tools?: string\n  skill?: string\n  memoryBackend?: string\n  agentsKitConfig?: AgentsKitConfig\n  /**\n   * Extra slash commands appended to the built-ins. Later entries with\n   * the same name override earlier ones, so consumers can replace a\n   * built-in by re-registering its name.\n   */\n  slashCommands?: SlashCommand[]\n  /** Extra tools contributed by plugins — merged into the resolved tool set. */\n  extraTools?: ToolDefinition[]\n  /** Extra skills contributed by plugins — merged into the resolved skill set. */\n  extraSkills?: SkillDefinition[]\n  /** Hook handlers — from plugins + config. Fire on lifecycle events. */\n  hookHandlers?: HookHandler[]\n  /** Permission policy for tool calls. */\n  permissionPolicy?: import('../extensibility/permissions').PermissionPolicy\n}\n\nexport function groupIntoTurns(messages: ChatMessage[]): ChatMessage[][] {\n  const turns: ChatMessage[][] = []\n  let current: ChatMessage[] = []\n  for (const message of messages) {\n    if (message.role === 'user') {\n      if (current.length > 0) turns.push(current)\n      current = [message]\n    } else if (message.role === 'system') {\n      if (current.length > 0) turns.push(current)\n      turns.push([message])\n      current = []\n    } else {\n      current.push(message)\n    }\n  }\n  if (current.length > 0) turns.push(current)\n  return turns\n}\n\nexport function ChatApp(options: ChatCommandOptions) {\n  const {\n    runtime,\n    memory,\n    tools,\n    skills,\n    state: { baseUrl, toolsFlag, skillFlag },\n    setProvider,\n    setModel,\n    setApiKey,\n    setBaseUrl,\n    setToolsFlag,\n    setSkillFlag,\n  } = useRuntime(options)\n\n  const mergedTools = useMemo(() => {\n    const extra = options.extraTools ?? []\n    return [...tools, ...extra]\n  }, [tools, options.extraTools])\n\n  const mergedSkills = useMemo(() => {\n    const extra = options.extraSkills ?? []\n    if (!skills && extra.length === 0) return undefined\n    return [...(skills ?? []), ...extra]\n  }, [skills, options.extraSkills])\n\n  const chat = useChat({\n    adapter: runtime.adapter,\n    memory,\n    systemPrompt: options.system,\n    tools: mergedTools.length > 0 ? mergedTools : undefined,\n    skills: mergedSkills,\n  })\n\n  const { sessionAllowed, handleApproveAlways, awaitingConfirmation } = useToolPermissions(chat)\n\n  useSessionMeta({\n    sessionId: options.sessionId,\n    messages: chat.messages,\n    provider: runtime.provider,\n    model: runtime.model,\n  })\n\n  const turns = useMemo(() => groupIntoTurns(chat.messages), [chat.messages])\n  const toolNames = toolsFlag ? toolsFlag.split(',').map(s => s.trim()).filter(Boolean) : []\n\n  const [feedback, setFeedback] = useState<{ message: string; kind: FeedbackKind } | null>(null)\n\n  const hookDispatcher = useMemo(\n    () => new HookDispatcher(options.hookHandlers ?? []),\n    [options.hookHandlers],\n  )\n\n  useEffect(() => {\n    void hookDispatcher.dispatch('SessionStart', {\n      event: 'SessionStart',\n      sessionId: options.sessionId,\n      provider: runtime.provider,\n      model: runtime.model,\n    })\n    return () => {\n      void hookDispatcher.dispatch('SessionEnd', {\n        event: 'SessionEnd',\n        sessionId: options.sessionId,\n      })\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [hookDispatcher])\n\n  const slashCommands = useMemo<SlashCommand[]>(\n    () => [...builtinSlashCommands, ...(options.slashCommands ?? [])],\n    [options.slashCommands],\n  )\n  const slashRegistry = useMemo(() => createSlashRegistry(slashCommands), [slashCommands])\n\n  const handleSubmitInput = async (raw: string): Promise<boolean> => {\n    const parsed = parseSlashCommand(raw)\n    if (!parsed) {\n      const hookResult = await hookDispatcher.dispatch('UserPromptSubmit', {\n        event: 'UserPromptSubmit',\n        prompt: raw,\n      })\n      if (hookResult.blocked) {\n        setFeedback({\n          message: `Prompt blocked: ${hookResult.reason ?? 'hook refused'}`,\n          kind: 'warn',\n        })\n        return true\n      }\n      setFeedback(null)\n      return false\n    }\n    const cmd = slashRegistry.get(parsed.name)\n    if (!cmd) {\n      setFeedback({\n        message: `Unknown command: /${parsed.name}. Type /help for the list.`,\n        kind: 'error',\n      })\n      return true\n    }\n    const ctx: SlashCommandContext = {\n      chat,\n      runtime: {\n        provider: runtime.provider,\n        model: runtime.model,\n        mode: runtime.mode,\n        baseUrl,\n        tools: toolsFlag,\n        skill: skillFlag,\n        sessionId: options.sessionId,\n      },\n      setProvider,\n      setModel,\n      setApiKey,\n      setBaseUrl,\n      setTools: setToolsFlag,\n      setSkill: setSkillFlag,\n      feedback: (message, kind = 'info') => setFeedback({ message, kind }),\n      commands: slashCommands,\n    }\n    try {\n      await cmd.run(ctx, parsed.args)\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err)\n      setFeedback({ message: `/${parsed.name} failed: ${message}`, kind: 'error' })\n    }\n    return true\n  }\n\n  return (\n    <Box flexDirection=\"column\" gap={1}>\n      <StatusHeader\n        provider={runtime.provider}\n        model={runtime.model}\n        mode={runtime.mode}\n        tools={toolNames}\n        messageCount={chat.messages.length}\n        sessionId={options.sessionId}\n      />\n\n      <ChatContainer>\n        {turns.map((turn, turnIdx) => {\n          const assistantSteps = turn.filter(m => m.role === 'assistant').length\n          let stepIndex = 0\n          return (\n            <Box key={`turn-${turnIdx}`} flexDirection=\"column\" gap={1}>\n              {turn.map(message => {\n                const showStep = message.role === 'assistant' && assistantSteps > 1\n                if (showStep) stepIndex++\n                return (\n                  <Box key={message.id} flexDirection=\"column\">\n                    {showStep ? (\n                      <Text dimColor>↻ step {stepIndex}/{assistantSteps}</Text>\n                    ) : null}\n                    <Message message={message} />\n                    {message.toolCalls?.map((toolCall: ToolCall) => (\n                      <Box key={toolCall.id} flexDirection=\"column\">\n                        <ToolCallView toolCall={toolCall} expanded />\n                        {toolCall.status === 'requires_confirmation' &&\n                        !sessionAllowed.has(toolCall.name) ? (\n                          <ToolConfirmation\n                            toolCall={toolCall}\n                            onApprove={chat.approve}\n                            onDeny={chat.deny}\n                            onApproveAlways={handleApproveAlways}\n                          />\n                        ) : null}\n                      </Box>\n                    ))}\n                  </Box>\n                )\n              })}\n            </Box>\n          )\n        })}\n      </ChatContainer>\n\n      <ThinkingIndicator\n        visible={chat.status === 'streaming'}\n        label={toolNames.length > 0 ? 'agent working' : 'thinking'}\n      />\n\n      {chat.error ? (\n        <Box borderStyle=\"round\" borderColor=\"red\" paddingX={1} flexDirection=\"column\">\n          <Text color=\"red\" bold>✗ {chat.error.name || 'Error'}</Text>\n          <Text color=\"red\">{chat.error.message}</Text>\n        </Box>\n      ) : null}\n\n      {feedback ? (\n        <Box borderStyle=\"round\" borderColor={feedbackBorder(feedback.kind)} paddingX={1}>\n          <Text color={feedbackBorder(feedback.kind)}>{feedback.message}</Text>\n        </Box>\n      ) : null}\n\n      <InputBar\n        chat={chat}\n        placeholder=\"Type a message or /help for commands\"\n        disabled={awaitingConfirmation}\n        onSubmitInput={handleSubmitInput}\n      />\n    </Box>\n  )\n}\n\nfunction feedbackBorder(kind: FeedbackKind): string {\n  switch (kind) {\n    case 'error':\n      return 'red'\n    case 'warn':\n      return 'yellow'\n    case 'success':\n      return 'green'\n    case 'info':\n    default:\n      return 'cyan'\n  }\n}\n\nexport function renderChatHeader(options: ChatCommandOptions): string {\n  const runtime = resolveChatProvider(options)\n  const parts = [`provider=${runtime.provider}`]\n  if (runtime.model) parts.push(`model=${runtime.model}`)\n  parts.push(`mode=${runtime.mode}`)\n  if (options.tools) parts.push(`tools=${options.tools}`)\n  if (options.skill) parts.push(`skill=${options.skill}`)\n  if (options.memoryBackend) parts.push(`memory=${options.memoryBackend}`)\n  return parts.join(' ')\n}\n","import type { AgentsKitConfig } from '../config'\n\nexport function mergeWithConfig(\n  options: Record<string, unknown>,\n  config: AgentsKitConfig | undefined,\n): Record<string, unknown> {\n  if (!config) return options\n  const d = config.defaults ?? {}\n\n  const resolvedApiKey =\n    (options.apiKey as string | undefined) ??\n    (d.apiKeyEnv ? process.env[d.apiKeyEnv] : undefined) ??\n    d.apiKey\n\n  return {\n    ...options,\n    provider: options.provider !== 'demo' ? options.provider : (d.provider ?? options.provider),\n    model: options.model ?? d.model,\n    apiKey: resolvedApiKey,\n    baseUrl: options.baseUrl ?? d.baseUrl,\n    tools: options.tools ?? d.tools,\n    skill: options.skill ?? d.skill,\n    system: options.system ?? d.system,\n    memoryBackend: options.memoryBackend ?? d.memoryBackend,\n  }\n}\n","import { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { isAbsolute, join, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport type { Plugin, PluginBundle, PluginContext, PluginFactory } from './types'\n\nexport interface LoadPluginsOptions {\n  /** Plugin specifiers: absolute paths, relative paths, or package names. */\n  specs?: string[]\n  /** Extra directories to auto-discover plugin modules from. */\n  pluginDirs?: string[]\n  /** Working directory; defaults to process.cwd(). */\n  cwd?: string\n  /**\n   * Auto-discover from `~/.agentskit/plugins`. Defaults to true. Tests pass\n   * false so the user's real home dir can't contaminate runs.\n   */\n  autoDiscoverUserDir?: boolean\n  /** Error logger. Defaults to stderr. */\n  onError?: (spec: string, err: unknown) => void\n  /** Info logger. */\n  log?: (msg: string) => void\n}\n\n/**\n * Load every plugin listed in `specs` + any auto-discovered module in\n * `pluginDirs` (and `~/.agentskit/plugins` by default). Failures on a single\n * plugin are reported but do not abort the rest — a broken third-party\n * plugin should never prevent the CLI from starting.\n */\nexport async function loadPlugins(options: LoadPluginsOptions = {}): Promise<PluginBundle> {\n  const {\n    specs = [],\n    pluginDirs = [],\n    cwd = process.cwd(),\n    autoDiscoverUserDir = true,\n    onError = (spec, err) =>\n      process.stderr.write(\n        `[agentskit] plugin \"${spec}\" failed to load: ${err instanceof Error ? err.message : String(err)}\\n`,\n      ),\n    log = () => {},\n  } = options\n\n  const resolvedSpecs = [...specs]\n\n  const discoveryDirs = [...pluginDirs]\n  if (autoDiscoverUserDir) discoveryDirs.push(join(homedir(), '.agentskit', 'plugins'))\n  for (const dir of discoveryDirs) {\n    const discovered = await discoverPluginsInDir(dir)\n    resolvedSpecs.push(...discovered)\n  }\n\n  const plugins: Plugin[] = []\n  for (const spec of resolvedSpecs) {\n    try {\n      const plugin = await loadPluginFromSpec(spec, cwd, log)\n      if (plugin) plugins.push(plugin)\n    } catch (err) {\n      onError(spec, err)\n    }\n  }\n\n  return mergePluginsIntoBundle(plugins)\n}\n\nasync function discoverPluginsInDir(dir: string): Promise<string[]> {\n  try {\n    const entries = await readdir(dir)\n    const absolutes = entries\n      .filter(name => /\\.(m?js|ts)$/i.test(name))\n      .map(name => join(dir, name))\n    // Validate each is a file; skip subdirs / broken symlinks silently.\n    const validated: string[] = []\n    for (const p of absolutes) {\n      try {\n        const s = await stat(p)\n        if (s.isFile()) validated.push(p)\n      } catch {\n        /* ignore */\n      }\n    }\n    return validated\n  } catch {\n    return []\n  }\n}\n\nasync function loadPluginFromSpec(\n  spec: string,\n  cwd: string,\n  log: (msg: string) => void,\n): Promise<Plugin | undefined> {\n  const isPath = spec.startsWith('./') || spec.startsWith('../') || isAbsolute(spec)\n  const importTarget = isPath\n    ? pathToFileURL(resolve(cwd, spec)).href\n    : spec\n\n  const mod = await import(importTarget)\n  const exported: unknown = mod.default ?? mod.plugin ?? mod\n  const sourcePath = isPath ? resolve(cwd, spec) : undefined\n\n  const ctx: PluginContext = {\n    cwd,\n    sourcePath,\n    log: (msg: string) => log(`[${spec}] ${msg}`),\n  }\n\n  if (typeof exported === 'function') {\n    const factory = exported as PluginFactory\n    return await factory(ctx)\n  }\n\n  if (exported && typeof exported === 'object' && 'name' in (exported as object)) {\n    const plugin = exported as Plugin\n    if (plugin.init) await plugin.init(ctx)\n    return plugin\n  }\n\n  throw new Error(\n    'Module did not export a Plugin — expected default export to be a Plugin object or a PluginFactory function.',\n  )\n}\n\n/**\n * Merge every plugin's records into a single bundle. Later plugins override\n * earlier ones by name (last-write-wins) — users override built-ins without\n * forking.\n */\nexport function mergePluginsIntoBundle(plugins: Plugin[]): PluginBundle {\n  const bundle: PluginBundle = {\n    plugins,\n    slashCommands: [],\n    tools: [],\n    skills: [],\n    providers: {},\n    hooks: [],\n    mcpServers: [],\n  }\n\n  for (const plugin of plugins) {\n    if (plugin.slashCommands) bundle.slashCommands.push(...plugin.slashCommands)\n    if (plugin.tools) bundle.tools.push(...plugin.tools)\n    if (plugin.skills) bundle.skills.push(...plugin.skills)\n    if (plugin.hooks) bundle.hooks.push(...plugin.hooks)\n    if (plugin.mcpServers) bundle.mcpServers.push(...plugin.mcpServers)\n    if (plugin.providers) {\n      for (const [name, factory] of Object.entries(plugin.providers)) {\n        bundle.providers[name] = factory\n      }\n    }\n  }\n\n  return bundle\n}\n","import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport type { McpServerSpec } from '../plugins/types'\n\nexport interface McpTool {\n  name: string\n  description?: string\n  inputSchema?: unknown\n}\n\ninterface JsonRpcResponse {\n  jsonrpc: '2.0'\n  id: number | string\n  result?: unknown\n  error?: { code: number; message: string; data?: unknown }\n}\n\n/**\n * Minimal JSON-RPC-over-stdio client for an MCP server. This is a\n * pragmatic subset of the MCP protocol sufficient for `tools/list` +\n * `tools/call` — full spec support lives in `@modelcontextprotocol/sdk`\n * if/when we depend on it.\n *\n * Transport: newline-delimited JSON (per the MCP stdio transport spec).\n */\nexport class McpClient {\n  private child: ChildProcessWithoutNullStreams | undefined\n  private buffer = ''\n  private nextId = 1\n  private readonly pending = new Map<number, (res: JsonRpcResponse) => void>()\n  private disposed = false\n\n  constructor(\n    readonly spec: McpServerSpec,\n    private readonly onError: (err: unknown) => void = (err) =>\n      process.stderr.write(\n        `[agentskit] mcp[${spec.name}] error: ${err instanceof Error ? err.message : String(err)}\\n`,\n      ),\n  ) {}\n\n  async start(): Promise<void> {\n    if (this.child) return\n    const child = spawn(this.spec.command, this.spec.args ?? [], {\n      env: { ...process.env, ...(this.spec.env ?? {}) },\n      stdio: ['pipe', 'pipe', 'pipe'],\n    }) as ChildProcessWithoutNullStreams\n    this.child = child\n\n    child.stdout.on('data', (chunk) => this.onStdout(chunk.toString()))\n    child.stderr.on('data', (chunk) => {\n      process.stderr.write(`[mcp ${this.spec.name}] ${chunk}`)\n    })\n    child.on('error', (err) => this.onError(err))\n    child.on('close', () => {\n      this.disposed = true\n      for (const pending of this.pending.values()) {\n        pending({ jsonrpc: '2.0', id: 0, error: { code: -1, message: 'server closed' } })\n      }\n      this.pending.clear()\n    })\n\n    await this.request('initialize', {\n      protocolVersion: '2024-11-05',\n      capabilities: {},\n      clientInfo: { name: 'agentskit', version: '0' },\n    })\n  }\n\n  async listTools(): Promise<McpTool[]> {\n    const res = await this.request('tools/list', {})\n    const tools = (res as { tools?: McpTool[] }).tools ?? []\n    return tools\n  }\n\n  async callTool(name: string, args: unknown): Promise<unknown> {\n    return await this.request('tools/call', { name, arguments: args })\n  }\n\n  dispose(): void {\n    if (this.disposed) return\n    this.disposed = true\n    this.child?.kill('SIGTERM')\n  }\n\n  private request(method: string, params: unknown): Promise<unknown> {\n    return new Promise((resolvePromise, rejectPromise) => {\n      if (!this.child || this.disposed) {\n        rejectPromise(new Error(`mcp server ${this.spec.name} not running`))\n        return\n      }\n      const id = this.nextId++\n      const timeoutMs = this.spec.timeout ?? 10_000\n      const timer = setTimeout(() => {\n        this.pending.delete(id)\n        rejectPromise(new Error(`mcp ${this.spec.name}.${method} timed out`))\n      }, timeoutMs)\n\n      this.pending.set(id, (res) => {\n        clearTimeout(timer)\n        if (res.error) {\n          rejectPromise(new Error(`mcp ${method} failed: ${res.error.message}`))\n          return\n        }\n        resolvePromise(res.result)\n      })\n\n      const message = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\\n'\n      this.child.stdin.write(message)\n    })\n  }\n\n  private onStdout(chunk: string): void {\n    this.buffer += chunk\n    let newlineIndex = this.buffer.indexOf('\\n')\n    while (newlineIndex !== -1) {\n      const line = this.buffer.slice(0, newlineIndex).trim()\n      this.buffer = this.buffer.slice(newlineIndex + 1)\n      if (line) {\n        try {\n          const parsed = JSON.parse(line) as JsonRpcResponse\n          const pending = this.pending.get(Number(parsed.id))\n          if (pending) {\n            this.pending.delete(Number(parsed.id))\n            pending(parsed)\n          }\n        } catch (err) {\n          this.onError(err)\n        }\n      }\n      newlineIndex = this.buffer.indexOf('\\n')\n    }\n  }\n}\n","import type { ToolDefinition } from '@agentskit/core'\nimport type { McpServerSpec } from '../plugins/types'\nimport { McpClient, type McpTool } from './client'\n\nexport interface McpBridgeResult {\n  clients: McpClient[]\n  tools: ToolDefinition[]\n}\n\n/**\n * Start every MCP server in `specs`, call `tools/list`, and produce a\n * `ToolDefinition[]` whose `execute` forwards to the server via\n * `tools/call`. Returns the live clients so the caller can dispose them\n * on session end.\n */\nexport async function bridgeMcpServers(specs: McpServerSpec[]): Promise<McpBridgeResult> {\n  const clients: McpClient[] = []\n  const tools: ToolDefinition[] = []\n\n  for (const spec of specs) {\n    const client = new McpClient(spec)\n    try {\n      await client.start()\n      const mcpTools = await client.listTools()\n      for (const mcpTool of mcpTools) {\n        tools.push(mcpToolToDefinition(spec.name, client, mcpTool))\n      }\n      clients.push(client)\n    } catch (err) {\n      process.stderr.write(\n        `[agentskit] mcp server \"${spec.name}\" failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n      )\n      client.dispose()\n    }\n  }\n\n  return { clients, tools }\n}\n\nfunction mcpToolToDefinition(\n  serverName: string,\n  client: McpClient,\n  tool: McpTool,\n): ToolDefinition {\n  return {\n    name: `${serverName}__${tool.name}`,\n    description: tool.description ?? `MCP tool ${tool.name} from ${serverName}`,\n    schema: (tool.inputSchema ?? { type: 'object', properties: {} }) as never,\n    execute: async (args) => {\n      return await client.callTool(tool.name, args)\n    },\n  }\n}\n\nexport function disposeMcpClients(clients: McpClient[]): void {\n  for (const client of clients) client.dispose()\n}\n","import React from 'react'\nimport { render } from 'ink'\nimport type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { ChatApp, renderChatHeader } from '../app/ChatApp'\nimport { listSessions, resolveSession } from '../sessions'\nimport { mergeWithConfig } from './shared'\nimport { loadPlugins } from '../extensibility/plugins'\nimport { bridgeMcpServers, disposeMcpClients } from '../extensibility/mcp'\nimport { configHooksToHandlers } from '../extensibility/hooks'\nimport type { ConfigHooksMap } from '../extensibility/hooks'\nimport type { PermissionMode, PermissionPolicy } from '../extensibility/permissions'\n\nexport function registerChatCommand(program: Command): void {\n  program\n    .command('chat')\n    .description('Start a terminal chat session.')\n    .option('--provider <provider>', 'Provider to use', 'demo')\n    .option('--model <model>', 'Model name')\n    .option('--api-key <key>', 'API key for the selected provider')\n    .option('--base-url <url>', 'Override provider base URL')\n    .option('--system <prompt>', 'System prompt')\n    .option('--memory <path>', 'Explicit memory file path (overrides session management)')\n    .option('--tools <tools>', 'Comma-separated tools: web_search,fetch_url,filesystem,shell')\n    .option('--skill <skills>', 'Comma-separated skills: researcher,coder,planner,critic,summarizer')\n    .option('--memory-backend <backend>', 'Memory backend: file (default), sqlite')\n    .option('--new', 'Start a fresh chat session (ignore previous conversations in this directory)')\n    .option('--resume [id]', 'Resume a prior session by id; omit id to resume the latest')\n    .option('--list-sessions', 'List saved sessions for this directory and exit')\n    .option('--no-config', 'Skip loading .agentskit.config.json')\n    .option(\n      '--plugin-dir <dir>',\n      'Extra directory to auto-discover plugin modules from (repeatable)',\n      (value: string, prev: string[] = []) => [...prev, value],\n      [],\n    )\n    .option(\n      '--mode <mode>',\n      'Permission mode: default | plan | acceptEdits | bypassPermissions',\n    )\n    .action(async (options) => {\n      if (options.listSessions) {\n        const sessions = listSessions()\n        if (sessions.length === 0) {\n          process.stdout.write('No saved sessions for this directory.\\n')\n          return\n        }\n        for (const s of sessions) {\n          const { id, updatedAt, messageCount, preview, model, label, forkedFrom } = s.metadata\n          const display = label ? `${label} (${id})` : id\n          const forkNote = forkedFrom ? `  ← fork ${forkedFrom}` : ''\n          process.stdout.write(\n            `${display}  ${updatedAt}  msgs=${messageCount}${model ? `  model=${model}` : ''}${forkNote}\\n    ${preview}\\n`,\n          )\n        }\n        return\n      }\n\n      const config = options.config !== false ? await loadConfig() : undefined\n      const merged = mergeWithConfig(options, config)\n\n      const session = resolveSession({\n        explicitPath: options.memory as string | undefined,\n        forceNew: Boolean(options.new),\n        resumeId: options.resume,\n      })\n\n      if (!session.isNew && !options.memory) {\n        process.stdout.write(\n          `Resuming session ${session.id}. Start fresh with --new or list with --list-sessions.\\n`,\n        )\n      }\n\n      const pluginBundle = await loadPlugins({\n        specs: config?.plugins ?? [],\n        pluginDirs: (options.pluginDir as string[]) ?? [],\n      })\n\n      const configHooks = configHooksToHandlers(config?.hooks as ConfigHooksMap | undefined)\n      const hookHandlers = [...configHooks, ...pluginBundle.hooks]\n\n      const configMcpSpecs = Object.entries(config?.mcp?.servers ?? {}).map(([name, spec]) => ({\n        name,\n        command: spec.command,\n        args: spec.args,\n        env: spec.env,\n        timeout: spec.timeout,\n      }))\n      const allMcpSpecs = [...configMcpSpecs, ...pluginBundle.mcpServers]\n      const { clients: mcpClients, tools: mcpTools } = await bridgeMcpServers(allMcpSpecs)\n\n      const policyMode = (options.mode ?? config?.permissions?.mode ?? 'default') as PermissionMode\n      const permissionPolicy: PermissionPolicy = {\n        mode: policyMode,\n        rules: (config?.permissions?.rules ?? []).map(r => ({\n          tool: r.tool,\n          action: r.action,\n          scope: r.scope,\n        })),\n      }\n\n      const chatOptions = {\n        apiKey: (merged.apiKey ?? options.apiKey) as string | undefined,\n        baseUrl: (merged.baseUrl ?? options.baseUrl) as string | undefined,\n        provider: merged.provider as string,\n        model: merged.model as string | undefined,\n        system: (merged.system ?? options.system) as string | undefined,\n        memoryPath: session.file,\n        sessionId: session.id,\n        tools: (merged.tools ?? options.tools) as string | undefined,\n        skill: (merged.skill ?? options.skill) as string | undefined,\n        memoryBackend: (merged.memoryBackend ?? options.memoryBackend) as string | undefined,\n        agentsKitConfig: config,\n        slashCommands: pluginBundle.slashCommands,\n        extraTools: [...pluginBundle.tools, ...mcpTools],\n        extraSkills: pluginBundle.skills,\n        hookHandlers,\n        permissionPolicy,\n      }\n      process.stdout.write(`${renderChatHeader(chatOptions)}\\n`)\n      const instance = render(React.createElement(ChatApp, chatOptions))\n      try {\n        await instance.waitUntilExit()\n      } finally {\n        disposeMcpClients(mcpClients)\n      }\n\n      if (options.memory) {\n        process.stdout.write(\n          `\\nSession saved to ${session.file}. Resume with --memory ${session.file}\\n`,\n        )\n      } else {\n        process.stdout.write(\n          `\\nSession saved. Resume with:\\n  agentskit chat --resume ${session.id}\\nOr start fresh with:\\n  agentskit chat --new\\n`,\n        )\n      }\n    })\n}\n","import { createRuntime } from '@agentskit/runtime'\nimport type { AgentEvent, Observer } from '@agentskit/core'\nimport { resolveChatProvider } from './providers'\nimport { resolveTools, resolveSkill, resolveSkills, resolveMemory } from './resolve'\n\nexport interface RunCommandOptions {\n  provider: string\n  model?: string\n  apiKey?: string\n  baseUrl?: string\n  task?: string\n  skill?: string\n  skills?: string\n  tools?: string\n  memory?: string\n  memoryBackend?: string\n  systemPrompt?: string\n  maxSteps?: string\n  verbose?: boolean\n  pretty?: boolean\n}\n\nfunction formatEvent(event: AgentEvent): string {\n  switch (event.type) {\n    case 'agent:step':\n      return `[step ${event.step}] ${event.action}`\n    case 'llm:start':\n      return `[llm] start (${event.messageCount} messages)`\n    case 'llm:end': {\n      const preview = event.content.length > 100 ? event.content.slice(0, 100) + '...' : event.content\n      return `[llm] done (${event.durationMs}ms) \"${preview}\"`\n    }\n    case 'tool:start':\n      return `[tool] ${event.name} ${JSON.stringify(event.args)}`\n    case 'tool:end':\n      return `[tool] ${event.name} done (${event.durationMs}ms)`\n    case 'error':\n      return `[error] ${event.error.message}`\n    default:\n      return `[${event.type}]`\n  }\n}\n\nexport async function runAgent(task: string, options: RunCommandOptions): Promise<void> {\n  if (options.skill && options.skills) {\n    process.stderr.write('Error: --skill and --skills are mutually exclusive. Use one or the other.\\n')\n    process.exit(1)\n  }\n\n  const { adapter } = resolveChatProvider({\n    provider: options.provider,\n    model: options.model,\n    apiKey: options.apiKey,\n    baseUrl: options.baseUrl,\n  })\n\n  const tools = resolveTools(options.tools)\n  const skill = options.skills\n    ? resolveSkills(options.skills)\n    : resolveSkill(options.skill)\n  const memory = options.memory\n    ? resolveMemory(options.memoryBackend, options.memory)\n    : undefined\n\n  const observers: Observer[] = []\n  if (options.verbose) {\n    observers.push({\n      name: 'cli-verbose',\n      on(event: AgentEvent) {\n        process.stderr.write(formatEvent(event) + '\\n')\n      },\n    })\n  }\n\n  const runtime = createRuntime({\n    adapter,\n    tools,\n    memory,\n    systemPrompt: options.systemPrompt,\n    maxSteps: options.maxSteps ? parseInt(options.maxSteps, 10) : undefined,\n    observers,\n  })\n\n  const result = await runtime.run(task, {\n    skill: skill ?? undefined,\n  })\n\n  process.stdout.write(result.content + '\\n')\n}\n","import React, { useEffect, useState } from 'react'\nimport { Box, Text } from 'ink'\nimport { createRuntime } from '@agentskit/runtime'\nimport type { AgentEvent, Observer } from '@agentskit/core'\nimport { resolveChatProvider } from './providers'\nimport { resolveTools, resolveSkill, resolveSkills, resolveMemory } from './resolve'\nimport type { RunCommandOptions } from './run'\n\ninterface ToolCallInfo {\n  name: string\n  status: 'running' | 'done' | 'error'\n  durationMs?: number\n}\n\nexport function RunApp({ task, options }: { task: string; options: RunCommandOptions }) {\n  const [status, setStatus] = useState<'running' | 'done' | 'error'>('running')\n  const [currentStep, setCurrentStep] = useState(0)\n  const [toolCalls, setToolCalls] = useState<ToolCallInfo[]>([])\n  const [result, setResult] = useState('')\n  const [error, setError] = useState('')\n  const [durationMs, setDurationMs] = useState(0)\n\n  useEffect(() => {\n    async function execute() {\n      if (options.skill && options.skills) {\n        setError('--skill and --skills are mutually exclusive.')\n        setStatus('error')\n        return\n      }\n\n      const { adapter } = resolveChatProvider({\n        provider: options.provider,\n        model: options.model,\n        apiKey: options.apiKey,\n        baseUrl: options.baseUrl,\n      })\n\n      const tools = resolveTools(options.tools)\n      const skill = options.skills\n        ? resolveSkills(options.skills)\n        : resolveSkill(options.skill)\n      const memory = options.memory\n        ? resolveMemory(options.memoryBackend, options.memory)\n        : undefined\n\n      const observers: Observer[] = [{\n        name: 'run-ui',\n        on(event: AgentEvent) {\n          switch (event.type) {\n            case 'agent:step':\n              setCurrentStep(event.step)\n              break\n            case 'tool:start':\n              setToolCalls(prev => [...prev, { name: event.name, status: 'running' }])\n              break\n            case 'tool:end':\n              setToolCalls(prev => prev.map(tc =>\n                tc.name === event.name && tc.status === 'running'\n                  ? { ...tc, status: 'done', durationMs: event.durationMs }\n                  : tc\n              ))\n              break\n            case 'error':\n              setToolCalls(prev => prev.map(tc =>\n                tc.status === 'running' ? { ...tc, status: 'error' } : tc\n              ))\n              break\n          }\n        },\n      }]\n\n      const runtime = createRuntime({\n        adapter,\n        tools,\n        memory,\n        systemPrompt: options.systemPrompt,\n        maxSteps: options.maxSteps ? parseInt(options.maxSteps, 10) : undefined,\n        observers,\n      })\n\n      try {\n        const runResult = await runtime.run(task, { skill: skill ?? undefined })\n        setResult(runResult.content)\n        setDurationMs(runResult.durationMs)\n        setStatus('done')\n      } catch (err) {\n        setError(err instanceof Error ? err.message : String(err))\n        setStatus('error')\n      }\n    }\n\n    void execute()\n  }, [])\n\n  return (\n    <Box flexDirection=\"column\" gap={1}>\n      <Text bold color=\"cyan\">agentskit run</Text>\n      <Text dimColor>Task: {task}</Text>\n\n      {status === 'running' && currentStep > 0 && (\n        <Text color=\"yellow\">{'⟳'} Step {currentStep}</Text>\n      )}\n\n      {toolCalls.map((tc, i) => (\n        <Box key={i} marginLeft={2}>\n          <Text color={tc.status === 'running' ? 'yellow' : tc.status === 'done' ? 'green' : 'red'}>\n            {tc.status === 'running' ? '⟳' : tc.status === 'done' ? '✓' : '✗'}{' '}\n            {tc.name}\n            {tc.durationMs !== undefined ? ` (${tc.durationMs}ms)` : ''}\n          </Text>\n        </Box>\n      ))}\n\n      {status === 'running' && (\n        <Text color=\"yellow\">Running...</Text>\n      )}\n\n      {status === 'done' && (\n        <Box flexDirection=\"column\">\n          <Text color=\"green\" bold>Done ({durationMs}ms)</Text>\n          <Text>{result}</Text>\n        </Box>\n      )}\n\n      {status === 'error' && (\n        <Text color=\"red\" bold>Error: {error}</Text>\n      )}\n    </Box>\n  )\n}\n","import React from 'react'\nimport { render } from 'ink'\nimport type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { runAgent } from '../run'\nimport { RunApp } from '../run-ui'\nimport { mergeWithConfig } from './shared'\n\nexport function registerRunCommand(program: Command): void {\n  program\n    .command('run [task]')\n    .description('Execute an agent task and output the result.')\n    .option('--task <task>', 'Task string (alternative to positional argument)')\n    .option('--provider <provider>', 'Provider to use', 'demo')\n    .option('--model <model>', 'Model name')\n    .option('--api-key <key>', 'API key for the selected provider')\n    .option('--base-url <url>', 'Override provider base URL')\n    .option('--skill <skill>', 'Single skill to use')\n    .option('--skills <skills>', 'Comma-separated skills (composed together)')\n    .option('--tools <tools>', 'Comma-separated tools: web_search,filesystem,shell')\n    .option('--memory <path>', 'Path for memory persistence')\n    .option('--memory-backend <backend>', 'Memory backend: file (default), sqlite')\n    .option('--system-prompt <prompt>', 'System prompt')\n    .option('--max-steps <steps>', 'Maximum agent steps', '10')\n    .option('--verbose', 'Stream agent steps to stderr')\n    .option('--pretty', 'Use rich Ink-based output')\n    .option('--no-config', 'Skip loading .agentskit.config.json')\n    .action(async (positionalTask: string | undefined, options) => {\n      const task = options.task ?? positionalTask\n      if (!task) {\n        process.stderr.write('Error: task is required. Pass as argument or use --task.\\n')\n        process.exit(1)\n      }\n\n      const config = options.config !== false ? await loadConfig() : undefined\n      const merged = mergeWithConfig(options, config)\n\n      if (options.pretty) {\n        render(React.createElement(RunApp, { task, options }))\n      } else {\n        try {\n          await runAgent(task, { ...options, provider: merged.provider, model: merged.model })\n        } catch (err) {\n          process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n          process.exit(1)\n        }\n      }\n    })\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nexport type StarterKind =\n  | 'react'\n  | 'nextjs'\n  | 'ink'\n  | 'runtime'\n  | 'multi-agent'\n  | 'sveltekit'\n  | 'nuxt'\n  | 'vite-ink'\n  | 'cloudflare-workers'\n  | 'bun'\n  | 'expo'\n  | 'deno-deploy'\n  | 'angular'\nexport type Provider = 'openai' | 'anthropic' | 'gemini' | 'ollama' | 'demo'\nexport type ToolKind = 'web_search' | 'filesystem' | 'shell'\nexport type MemoryKind = 'none' | 'file' | 'sqlite'\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun'\n\nexport interface InitCommandOptions {\n  targetDir: string\n  template: StarterKind\n  provider?: Provider\n  tools?: ToolKind[]\n  memory?: MemoryKind\n  packageManager?: PackageManager\n}\n\ninterface RenderContext {\n  template: StarterKind\n  provider: Provider\n  tools: ToolKind[]\n  memory: MemoryKind\n  pm: PackageManager\n}\n\nconst PROVIDER_IMPORT: Record<Exclude<Provider, 'demo'>, string> = {\n  openai: 'openai',\n  anthropic: 'anthropic',\n  gemini: 'gemini',\n  ollama: 'ollama',\n}\n\nconst PROVIDER_DEFAULT_MODEL: Record<Provider, string> = {\n  openai: 'gpt-4o-mini',\n  anthropic: 'claude-sonnet-4-6',\n  gemini: 'gemini-2.5-flash',\n  ollama: 'llama3.1',\n  demo: 'demo',\n}\n\nconst PROVIDER_ENV_KEY: Record<Provider, string | null> = {\n  openai: 'OPENAI_API_KEY',\n  anthropic: 'ANTHROPIC_API_KEY',\n  gemini: 'GEMINI_API_KEY',\n  ollama: null,\n  demo: null,\n}\n\nfunction adapterCall(provider: Provider, prefix = 'process.env'): string {\n  const model = PROVIDER_DEFAULT_MODEL[provider]\n  if (provider === 'demo') return `demoAdapter()`\n  if (provider === 'ollama') return `ollama({ model: '${model}' })`\n  const envKey = PROVIDER_ENV_KEY[provider]!\n  return `${PROVIDER_IMPORT[provider]}({ apiKey: ${prefix}.${envKey} ?? '', model: '${model}' })`\n}\n\nfunction viteAdapterCall(provider: Provider): string {\n  if (provider === 'demo') return `demoAdapter()`\n  if (provider === 'ollama') return `ollama({ model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n  const envKey = PROVIDER_ENV_KEY[provider]!\n  return `${PROVIDER_IMPORT[provider]}({ apiKey: import.meta.env.VITE_${envKey} ?? '', model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n}\n\nfunction adapterImport(provider: Provider): string {\n  if (provider === 'demo') return ''\n  return `import { ${PROVIDER_IMPORT[provider]} } from '@agentskit/adapters'\\n`\n}\n\nfunction toolImports(tools: ToolKind[]): string {\n  if (tools.length === 0) return ''\n  return `import { ${tools.map(t => t === 'web_search' ? 'webSearch' : t).join(', ')} } from '@agentskit/tools'\\n`\n}\n\nfunction toolList(tools: ToolKind[]): string {\n  if (tools.length === 0) return '[]'\n  const calls = tools.map(t => {\n    if (t === 'web_search') return 'webSearch()'\n    if (t === 'filesystem') return `...filesystem({ basePath: './workspace' })`\n    if (t === 'shell') return `shell({ allowedCommands: ['ls', 'cat'] })`\n    return ''\n  })\n  return `[${calls.join(', ')}]`\n}\n\nfunction memoryImport(memory: MemoryKind): string {\n  if (memory === 'file') return `import { fileChatMemory } from '@agentskit/memory'\\n`\n  if (memory === 'sqlite') return `import { sqliteChatMemory } from '@agentskit/memory'\\n`\n  return ''\n}\n\nfunction memoryCall(memory: MemoryKind): string {\n  if (memory === 'file') return `fileChatMemory('./.agentskit-history.json')`\n  if (memory === 'sqlite') return `sqliteChatMemory({ path: './.agentskit-history.db' })`\n  return 'undefined'\n}\n\nfunction demoAdapterSnippet(): string {\n  return `function demoAdapter() {\n  return {\n    createSource: () => ({\n      stream: async function* () {\n        yield { type: 'text' as const, content: 'Hello from your AgentsKit starter. ' }\n        yield { type: 'text' as const, content: 'Configure a real adapter to talk to a model.' }\n        yield { type: 'done' as const }\n      },\n      abort: () => {},\n    }),\n  }\n}\\n\\n`\n}\n\n// ============================================================================\n// Templates\n// ============================================================================\n\nfunction reactStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/react': '^0.4.0',\n    react: '^19.0.0',\n    'react-dom': '^19.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n  if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n  const includesDemo = ctx.provider === 'demo'\n  const adapter = ctx.provider === 'demo' ? viteAdapterCall(ctx.provider) : viteAdapterCall(ctx.provider)\n  const envKey = PROVIDER_ENV_KEY[ctx.provider]\n  const envContent = envKey ? `VITE_${envKey}=\\n` : '# No API key required for the local provider\\n'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: path.basename(ctx.template === 'react' ? 'agentskit-react-app' : 'agentskit-app'),\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'vite',\n          build: 'vite build',\n          preview: 'vite preview',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@types/react': '^19.0.0',\n          '@types/react-dom': '^19.0.0',\n          '@vitejs/plugin-react': '^5.0.0',\n          typescript: '^5.5.0',\n          vite: '^7.0.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'index.html': `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>AgentsKit React Starter</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n`,\n\n    'vite.config.ts': `import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\nexport default defineConfig({ plugins: [react()] })\n`,\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022',\n          lib: ['ES2022', 'DOM'],\n          module: 'ESNext',\n          moduleResolution: 'bundler',\n          jsx: 'react-jsx',\n          strict: true,\n          noEmit: true,\n          skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/main.tsx': `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n`,\n\n    'src/App.tsx': `import { ChatContainer, InputBar, Message, useChat } from '@agentskit/react'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}import '@agentskit/react/theme'\n\n${includesDemo ? demoAdapterSnippet() : ''}export default function App() {\n  const chat = useChat({\n    adapter: ${adapter},${ctx.tools.length > 0 ? `\\n    tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n    memory: ${memoryCall(ctx.memory)},` : ''}\n  })\n\n  return (\n    <ChatContainer>\n      {chat.messages.map(message => (\n        <Message key={message.id} message={message} />\n      ))}\n      <InputBar chat={chat} />\n    </ChatContainer>\n  )\n}\n`,\n\n    '.env.example': envContent,\n\n    '.gitignore': `node_modules\ndist\n.env\n.env.local\n.agentskit-history.*\n`,\n\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction inkStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/ink': '^0.4.0',\n    ink: '^7.0.0',\n    react: '^19.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n  if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-ink-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'tsx src/index.tsx',\n          start: 'tsx src/index.tsx',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@types/react': '^19.0.0',\n          '@types/react-dom': '^19.0.0',\n          tsx: '^4.20.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022',\n          module: 'ESNext',\n          moduleResolution: 'bundler',\n          jsx: 'react-jsx',\n          strict: true,\n          noEmit: true,\n          skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/index.tsx': `import React from 'react'\nimport { render } from 'ink'\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/ink'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}function App() {\n  const chat = useChat({\n    adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n    tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n    memory: ${memoryCall(ctx.memory)},` : ''}\n  })\n\n  return (\n    <ChatContainer>\n      {chat.messages.map(message => (\n        <Message key={message.id} message={message} />\n      ))}\n      <InputBar chat={chat} />\n    </ChatContainer>\n  )\n}\n\nrender(<App />)\n`,\n\n    '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n      ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n      : '# No API key required for the local provider\\n',\n\n    '.gitignore': `node_modules\n.env\n.env.local\n.agentskit-history.*\n`,\n\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction runtimeStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/runtime': '^0.4.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n  if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-runtime-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          start: 'tsx src/index.ts',\n          dev: 'tsx src/index.ts',\n        },\n        dependencies: deps,\n        devDependencies: {\n          tsx: '^4.20.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022',\n          module: 'ESNext',\n          moduleResolution: 'bundler',\n          strict: true,\n          noEmit: true,\n          skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/index.ts': `import { createRuntime } from '@agentskit/runtime'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}const runtime = createRuntime({\n  adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n  tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n  memory: ${memoryCall(ctx.memory)},` : ''}\n  maxSteps: 10,\n})\n\nconst task = process.argv.slice(2).join(' ') || 'Say hello and tell me one fact about TypeScript.'\nconst result = await runtime.run(task)\n\nconsole.log(result.content)\nconsole.log(\\`\\\\n— \\${result.steps} steps · \\${result.toolCalls.length} tool calls · \\${result.durationMs}ms\\`)\n`,\n\n    '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n      ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n      : '# No API key required for the local provider\\n',\n\n    '.gitignore': `node_modules\n.env\n.env.local\n.agentskit-history.*\n`,\n\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction multiAgentStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/runtime': '^0.4.0',\n    '@agentskit/skills': '^0.4.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length === 0) ctx.tools = ['web_search']\n  deps['@agentskit/tools'] = '^0.4.0'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-multi-agent',\n        private: true,\n        type: 'module',\n        scripts: {\n          start: 'tsx src/index.ts',\n          dev: 'tsx src/index.ts',\n        },\n        dependencies: deps,\n        devDependencies: {\n          tsx: '^4.20.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022',\n          module: 'ESNext',\n          moduleResolution: 'bundler',\n          strict: true,\n          noEmit: true,\n          skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/index.ts': `import { createRuntime } from '@agentskit/runtime'\nimport { planner, researcher } from '@agentskit/skills'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}const runtime = createRuntime({\n  adapter: ${adapterCall(ctx.provider)},\n  maxSteps: 10,\n  maxDelegationDepth: 2,\n})\n\nconst task = process.argv.slice(2).join(' ') || 'Research the current state of WebGPU and summarize.'\n\nconst result = await runtime.run(task, {\n  skill: planner,\n  delegates: {\n    researcher: {\n      skill: researcher,\n      tools: ${toolList(ctx.tools)},\n      maxSteps: 5,\n    },\n  },\n})\n\nconsole.log(result.content)\nconsole.log(\\`\\\\n— \\${result.steps} steps · \\${result.toolCalls.length} tool calls\\`)\n`,\n\n    '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n      ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n      : '# No API key required for the local provider\\n',\n\n    '.gitignore': `node_modules\n.env\n.env.local\n`,\n\n    'README.md': readmeFor(ctx),\n  }\n}\n\n// ============================================================================\n// Edge / framework-specific templates\n// ============================================================================\n\nfunction buildAdapterServerImport(provider: Provider): string {\n  if (provider === 'demo') return ''\n  return `import { ${PROVIDER_IMPORT[provider]} } from '@agentskit/adapters'\\n`\n}\n\nfunction envExampleFor(provider: Provider): string {\n  const envKey = PROVIDER_ENV_KEY[provider]\n  return envKey ? `${envKey}=\\n` : '# No API key required for the demo provider\\n'\n}\n\nfunction sveltekitStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/svelte': '^0.4.0',\n    '@sveltejs/kit': '^2.0.0',\n    svelte: '^5.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n  const adapterCallStr = adapterCall(ctx.provider)\n  const adapterImport = buildAdapterServerImport(ctx.provider)\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-sveltekit-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'vite dev',\n          build: 'vite build',\n          preview: 'vite preview',\n          check: 'svelte-check --tsconfig ./tsconfig.json',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@sveltejs/adapter-auto': '^4.0.0',\n          '@sveltejs/vite-plugin-svelte': '^6.0.0',\n          'svelte-check': '^4.0.0',\n          typescript: '^5.5.0',\n          vite: '^7.0.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'svelte.config.js': `import adapter from '@sveltejs/adapter-auto'\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\n\nexport default {\n  preprocess: vitePreprocess(),\n  kit: { adapter: adapter() },\n}\n`,\n\n    'vite.config.ts': `import { sveltekit } from '@sveltejs/kit/vite'\nimport { defineConfig } from 'vite'\nexport default defineConfig({ plugins: [sveltekit()] })\n`,\n\n    'tsconfig.json': JSON.stringify(\n      {\n        extends: './.svelte-kit/tsconfig.json',\n        compilerOptions: {\n          allowJs: true, checkJs: true, esModuleInterop: true,\n          forceConsistentCasingInFileNames: true, resolveJsonModule: true,\n          skipLibCheck: true, sourceMap: true, strict: true, moduleResolution: 'bundler',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/app.html': `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    %sveltekit.head%\n  </head>\n  <body>%sveltekit.body%</body>\n</html>\n`,\n\n    'src/routes/+page.svelte': `<script lang=\"ts\">\n  import { useChat } from '@agentskit/svelte'\n  import '@agentskit/svelte/theme'\n\n  const chat = useChat({ endpoint: '/api/chat' })\n</script>\n\n<main>\n  {#each $chat.messages as message (message.id)}\n    <article data-ak-message data-role={message.role}>{message.content}</article>\n  {/each}\n  <form on:submit|preventDefault={() => chat.send($chat.input)}>\n    <input bind:value={$chat.input} />\n    <button>Send</button>\n  </form>\n</main>\n`,\n\n    'src/routes/api/chat/+server.ts': `import type { RequestHandler } from './$types'\n${adapterImport}${demoSnippet}export const POST: RequestHandler = async ({ request }) => {\n  const { messages } = await request.json()\n  const adapter = ${adapterCallStr}\n  const source = adapter.createSource({ messages: messages.map((m: { role: string; content: string }, i: number) => ({\n    id: String(i), role: m.role, content: m.content,\n    status: 'complete' as const, createdAt: new Date(0),\n  })) })\n\n  const stream = new ReadableStream<Uint8Array>({\n    async start(controller) {\n      const encoder = new TextEncoder()\n      for await (const chunk of source.stream()) {\n        if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n      }\n      controller.close()\n    },\n  })\n  return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n}\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\n.svelte-kit\\nbuild\\n.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction nuxtStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/vue': '^0.4.0',\n    nuxt: '^4.0.0',\n    vue: '^3.5.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n  const adapterCallStr = adapterCall(ctx.provider)\n  const adapterImport = buildAdapterServerImport(ctx.provider)\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-nuxt-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'nuxt dev',\n          build: 'nuxt build',\n          preview: 'nuxt preview',\n          generate: 'nuxt generate',\n        },\n        dependencies: deps,\n        devDependencies: { typescript: '^5.5.0' },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'nuxt.config.ts': `export default defineNuxtConfig({\n  compatibilityDate: '2026-04-01',\n  modules: [],\n  typescript: { strict: true },\n})\n`,\n\n    'tsconfig.json': JSON.stringify(\n      { extends: './.nuxt/tsconfig.json' },\n      null,\n      2,\n    ) + '\\n',\n\n    'app.vue': `<script setup lang=\"ts\">\nimport { useChat } from '@agentskit/vue'\nimport '@agentskit/vue/theme'\n\nconst { messages, input, send } = useChat({ endpoint: '/api/chat' })\n</script>\n\n<template>\n  <main>\n    <article v-for=\"message in messages\" :key=\"message.id\" :data-role=\"message.role\">\n      {{ message.content }}\n    </article>\n    <form @submit.prevent=\"send(input)\">\n      <input v-model=\"input\" />\n      <button>Send</button>\n    </form>\n  </main>\n</template>\n`,\n\n    'server/api/chat.post.ts': `${adapterImport}${demoSnippet}export default defineEventHandler(async (event) => {\n  const { messages } = await readBody<{ messages: Array<{ role: string; content: string }> }>(event)\n  const adapter = ${adapterCallStr}\n  const source = adapter.createSource({ messages: messages.map((m, i) => ({\n    id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n    content: m.content, status: 'complete' as const, createdAt: new Date(0),\n  })) })\n\n  setHeader(event, 'content-type', 'text/plain; charset=utf-8')\n  return sendStream(event, new ReadableStream<Uint8Array>({\n    async start(controller) {\n      const encoder = new TextEncoder()\n      for await (const chunk of source.stream()) {\n        if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n      }\n      controller.close()\n    },\n  }))\n})\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\n.nuxt\\n.output\\n.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction viteInkStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/ink': '^0.4.0',\n    ink: '^7.0.0',\n    react: '^19.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-vite-ink-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'vite-node --watch src/index.tsx',\n          start: 'vite-node src/index.tsx',\n          build: 'vite build',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@types/react': '^19.0.0',\n          'vite-node': '^4.0.0',\n          vite: '^7.0.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'vite.config.ts': `import { defineConfig } from 'vite'\nexport default defineConfig({\n  build: { ssr: true, target: 'node22', rollupOptions: { input: 'src/index.tsx' } },\n})\n`,\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n          jsx: 'react-jsx', strict: true, noEmit: true, skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/index.tsx': `import React from 'react'\nimport { render } from 'ink'\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/ink'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}function App() {\n  const chat = useChat({\n    adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n    tools: ${toolList(ctx.tools)},` : ''}\n  })\n\n  return (\n    <ChatContainer>\n      {chat.messages.map(message => (\n        <Message key={message.id} message={message} />\n      ))}\n      <InputBar chat={chat} />\n    </ChatContainer>\n  )\n}\n\nrender(<App />)\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\ndist\\n.env\\n.env.local\\n.agentskit-history.*\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction cloudflareWorkersStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    'itty-router': '^5.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n  const adapterCallEdge = ctx.provider === 'demo'\n    ? 'demoAdapter()'\n    : ctx.provider === 'ollama'\n      ? `ollama({ model: '${PROVIDER_DEFAULT_MODEL[ctx.provider]}' })`\n      : `${PROVIDER_IMPORT[ctx.provider]}({ apiKey: env.${PROVIDER_ENV_KEY[ctx.provider]!} ?? '', model: '${PROVIDER_DEFAULT_MODEL[ctx.provider]}' })`\n  const adapterImport = buildAdapterServerImport(ctx.provider)\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n  const envKey = PROVIDER_ENV_KEY[ctx.provider]\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-cf-worker',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'wrangler dev',\n          deploy: 'wrangler deploy',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@cloudflare/workers-types': '^4.0.0',\n          typescript: '^5.5.0',\n          wrangler: '^3.0.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'wrangler.toml': `name = \"agentskit-cf-worker\"\nmain = \"src/worker.ts\"\ncompatibility_date = \"2026-04-01\"\ncompatibility_flags = [\"nodejs_compat\"]\n\n# Bind D1 + KV when you wire memory:\n# [[d1_databases]]\n# binding = \"DB\"\n# database_name = \"agentskit\"\n#\n# [[kv_namespaces]]\n# binding = \"KV\"\n# id = \"...\"\n\n[vars]\n${envKey ? `# Set ${envKey} via 'wrangler secret put ${envKey}'` : '# No API key required for the demo provider'}\n`,\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n          lib: ['ES2022'], types: ['@cloudflare/workers-types'],\n          strict: true, noEmit: true, skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/worker.ts': `import { Router } from 'itty-router'\n${adapterImport}\n${demoSnippet}interface Env {\n  ${envKey ? `${envKey}: string` : '/* no env vars */'}\n}\n\nconst router = Router()\n\nrouter.post('/chat', async (request: Request, env: Env) => {\n  const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n  const adapter = ${adapterCallEdge}\n  const source = adapter.createSource({ messages: messages.map((m, i) => ({\n    id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n    content: m.content, status: 'complete' as const, createdAt: new Date(0),\n  })) })\n\n  const stream = new ReadableStream<Uint8Array>({\n    async start(controller) {\n      const encoder = new TextEncoder()\n      for await (const chunk of source.stream()) {\n        if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n      }\n      controller.close()\n    },\n  })\n  return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n})\n\nrouter.all('*', () => new Response('not found', { status: 404 }))\n\nexport default {\n  fetch: (req: Request, env: Env, ctx: ExecutionContext) => router.handle(req, env, ctx),\n} satisfies ExportedHandler<Env>\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\n.wrangler\\n.dev.vars\\n.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction bunStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {}\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  const adapterCallStr = adapterCall(ctx.provider)\n  const adapterImport = buildAdapterServerImport(ctx.provider)\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-bun-server',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'bun --hot src/server.ts',\n          start: 'bun src/server.ts',\n        },\n        dependencies: deps,\n        devDependencies: { typescript: '^5.5.0' },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n          types: ['bun-types'], strict: true, noEmit: true, skipLibCheck: true,\n        },\n        include: ['src'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/server.ts': `${adapterImport}${demoSnippet}const adapter = ${adapterCallStr}\n\nconst server = Bun.serve({\n  port: Number(process.env.PORT ?? 3000),\n  async fetch(request) {\n    const url = new URL(request.url)\n    if (request.method === 'POST' && url.pathname === '/chat') {\n      const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n      const source = adapter.createSource({ messages: messages.map((m, i) => ({\n        id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n        content: m.content, status: 'complete' as const, createdAt: new Date(0),\n      })) })\n      const stream = new ReadableStream<Uint8Array>({\n        async start(controller) {\n          const encoder = new TextEncoder()\n          for await (const chunk of source.stream()) {\n            if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n          }\n          controller.close()\n        },\n      })\n      return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n    }\n    if (url.pathname === '/') {\n      return new Response(\\`<!doctype html><title>AgentsKit Bun starter</title>\n<body><pre>POST /chat with { messages: [...] }</pre></body>\\`, {\n        headers: { 'content-type': 'text/html' },\n      })\n    }\n    return new Response('not found', { status: 404 })\n  },\n})\n\nconsole.log(\\`Listening on http://localhost:\\${server.port}\\`)\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\n.env\\n.env.local\\nbun.lockb\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction nextjsStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/react': '^0.4.0',\n    next: '^15.0.0',\n    react: '^19.0.0',\n    'react-dom': '^19.0.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n\n  const envKey = PROVIDER_ENV_KEY[ctx.provider]\n  const adapter = adapterCall(ctx.provider)\n  const apiAdapterImport = ctx.provider === 'demo'\n    ? ''\n    : `import { ${PROVIDER_IMPORT[ctx.provider as Exclude<Provider, 'demo'>]} } from '@agentskit/adapters'\\n`\n  const apiDemoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-nextjs-app',\n        private: true,\n        type: 'module',\n        scripts: {\n          dev: 'next dev',\n          build: 'next build',\n          start: 'next start',\n          lint: 'next lint',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@types/node': '^22.0.0',\n          '@types/react': '^19.0.0',\n          '@types/react-dom': '^19.0.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'next.config.mjs': `/** @type {import('next').NextConfig} */\nconst nextConfig = {}\nexport default nextConfig\n`,\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022',\n          lib: ['dom', 'dom.iterable', 'ES2022'],\n          allowJs: true,\n          skipLibCheck: true,\n          strict: true,\n          noEmit: true,\n          esModuleInterop: true,\n          module: 'ESNext',\n          moduleResolution: 'bundler',\n          resolveJsonModule: true,\n          isolatedModules: true,\n          jsx: 'preserve',\n          incremental: true,\n          plugins: [{ name: 'next' }],\n          paths: { '@/*': ['./*'] },\n        },\n        include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n        exclude: ['node_modules'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'app/layout.tsx': `import type { ReactNode } from 'react'\nimport '@agentskit/react/theme'\n\nexport const metadata = { title: 'AgentsKit · Next.js Starter' }\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n  return (\n    <html lang=\"en\">\n      <body>{children}</body>\n    </html>\n  )\n}\n`,\n\n    'app/page.tsx': `'use client'\n\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/react'\nimport { genericAdapter } from './chat-adapter'\n\nexport default function Page() {\n  const chat = useChat({ adapter: genericAdapter('/api/chat') })\n\n  return (\n    <main style={{ display: 'grid', placeItems: 'center', minHeight: '100dvh' }}>\n      <ChatContainer>\n        {chat.messages.map(message => (\n          <Message key={message.id} message={message} />\n        ))}\n        <InputBar chat={chat} />\n      </ChatContainer>\n    </main>\n  )\n}\n`,\n\n    'app/chat-adapter.ts': `import { generic } from '@agentskit/adapters'\n\nexport const genericAdapter = (route: string) => generic({\n  fetch: async ({ messages, signal }) => {\n    const response = await fetch(route, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ messages }),\n      signal,\n    })\n    if (!response.body) throw new Error('No body returned from /api/chat')\n    return response\n  },\n})\n`,\n\n    'app/api/chat/route.ts': `${apiAdapterImport}${apiDemoSnippet}export const runtime = 'edge'\n\nexport async function POST(request: Request) {\n  const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n\n  const adapter = ${adapter}\n\n  const source = adapter.createSource({ messages: messages.map((message, index) => ({\n    id: String(index),\n    role: message.role as 'user' | 'assistant' | 'system',\n    content: message.content,\n    status: 'complete' as const,\n    createdAt: new Date(0),\n  })) })\n\n  const stream = new ReadableStream<Uint8Array>({\n    async start(controller) {\n      const encoder = new TextEncoder()\n      try {\n        for await (const chunk of source.stream()) {\n          if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n        }\n      } catch (err) {\n        controller.error(err)\n        return\n      }\n      controller.close()\n    },\n  })\n\n  return new Response(stream, {\n    headers: { 'Content-Type': 'text/plain; charset=utf-8', 'Cache-Control': 'no-cache' },\n  })\n}\n`,\n\n    '.env.example': envKey ? `${envKey}=\\n` : '# No API key required for the demo provider\\n',\n\n    '.gitignore': `node_modules\n.next\nout\n.env\n.env.local\n.agentskit-history.*\n`,\n\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction expoStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    expo: '^54.0.0',\n    'expo-router': '^7.0.0',\n    'expo-secure-store': '^15.0.0',\n    react: '^19.0.0',\n    'react-native': '^0.84.0',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n  const adapterCallStr = adapterCall(ctx.provider)\n  const adapterImport = ctx.provider === 'demo' ? '' : `import { ${PROVIDER_IMPORT[ctx.provider]} } from '@agentskit/adapters'\\n`\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-expo-app',\n        version: '1.0.0',\n        main: 'expo-router/entry',\n        scripts: {\n          start: 'expo start',\n          android: 'expo start --android',\n          ios: 'expo start --ios',\n          web: 'expo start --web',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@types/react': '^19.0.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'app.json': JSON.stringify(\n      {\n        expo: {\n          name: 'AgentsKit Expo Starter',\n          slug: 'agentskit-expo',\n          scheme: 'agentskit',\n          plugins: ['expo-router', 'expo-secure-store'],\n          ios: { bundleIdentifier: 'com.example.agentskit' },\n          android: { package: 'com.example.agentskit' },\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      { extends: 'expo/tsconfig.base', compilerOptions: { strict: true } },\n      null,\n      2,\n    ) + '\\n',\n\n    'app/_layout.tsx': `import { Stack } from 'expo-router'\nimport { AuthProvider } from '../lib/auth'\n\nexport default function RootLayout() {\n  return (\n    <AuthProvider>\n      <Stack />\n    </AuthProvider>\n  )\n}\n`,\n\n    'app/index.tsx': `import { useState } from 'react'\nimport { Text, TextInput, View, Pressable, ScrollView } from 'react-native'\nimport { useAuth } from '../lib/auth'\n${adapterImport}${demoSnippet}export default function Chat() {\n  const { token, signIn, signOut } = useAuth()\n  const [messages, setMessages] = useState<{ role: 'user' | 'assistant'; content: string }[]>([])\n  const [input, setInput] = useState('')\n\n  if (!token) {\n    return (\n      <View style={{ flex: 1, justifyContent: 'center', padding: 24 }}>\n        <Text style={{ fontSize: 20, marginBottom: 12 }}>Sign in to chat</Text>\n        <Pressable onPress={() => signIn('demo-token')}><Text>Sign in</Text></Pressable>\n      </View>\n    )\n  }\n\n  async function send() {\n    if (!input.trim()) return\n    const next = [...messages, { role: 'user' as const, content: input }]\n    setMessages(next)\n    setInput('')\n    const adapter = ${adapterCallStr}\n    const source = adapter.createSource({ messages: next.map((m, i) => ({\n      id: String(i), role: m.role, content: m.content,\n      status: 'complete' as const, createdAt: new Date(0),\n    })) })\n    let acc = ''\n    for await (const chunk of source.stream()) {\n      if (chunk.type === 'text') {\n        acc += chunk.content\n        setMessages([...next, { role: 'assistant', content: acc }])\n      }\n    }\n  }\n\n  return (\n    <View style={{ flex: 1, padding: 16 }}>\n      <Pressable onPress={signOut}><Text>Sign out</Text></Pressable>\n      <ScrollView style={{ flex: 1 }}>\n        {messages.map((m, i) => (\n          <Text key={i} style={{ marginVertical: 4 }}>{m.role}: {m.content}</Text>\n        ))}\n      </ScrollView>\n      <TextInput value={input} onChangeText={setInput} onSubmitEditing={send} placeholder=\"Ask anything…\" />\n    </View>\n  )\n}\n`,\n\n    'lib/auth.tsx': `import { createContext, useContext, useEffect, useState, type ReactNode } from 'react'\nimport * as SecureStore from 'expo-secure-store'\n\ninterface AuthValue { token: string | null; signIn: (t: string) => void; signOut: () => void }\nconst AuthCtx = createContext<AuthValue>({ token: null, signIn: () => {}, signOut: () => {} })\n\nexport function AuthProvider({ children }: { children: ReactNode }) {\n  const [token, setToken] = useState<string | null>(null)\n\n  useEffect(() => {\n    SecureStore.getItemAsync('agentskit_token').then(setToken).catch(() => {})\n  }, [])\n\n  return (\n    <AuthCtx.Provider\n      value={{\n        token,\n        signIn: (t) => { SecureStore.setItemAsync('agentskit_token', t); setToken(t) },\n        signOut: () => { SecureStore.deleteItemAsync('agentskit_token'); setToken(null) },\n      }}\n    >\n      {children}\n    </AuthCtx.Provider>\n  )\n}\n\nexport const useAuth = () => useContext(AuthCtx)\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\n.expo\\ndist\\n.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction denoDeployStarter(ctx: RenderContext): Record<string, string> {\n  const adapterCallEdge = ctx.provider === 'demo'\n    ? 'demoAdapter()'\n    : ctx.provider === 'ollama'\n      ? `ollama({ model: '${PROVIDER_DEFAULT_MODEL[ctx.provider]}' })`\n      : `${PROVIDER_IMPORT[ctx.provider]}({ apiKey: Deno.env.get('${PROVIDER_ENV_KEY[ctx.provider]!}') ?? '', model: '${PROVIDER_DEFAULT_MODEL[ctx.provider]}' })`\n  const adapterImport = ctx.provider === 'demo'\n    ? ''\n    : `import { ${PROVIDER_IMPORT[ctx.provider]} } from 'npm:@agentskit/adapters'\\n`\n  const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n  return {\n    'deno.json': JSON.stringify(\n      {\n        tasks: {\n          dev: 'deno run --allow-net --allow-env --watch main.ts',\n          start: 'deno run --allow-net --allow-env main.ts',\n          deploy: 'deployctl deploy --project=agentskit-deno main.ts',\n        },\n        imports: {\n          '@agentskit/adapters': 'npm:@agentskit/adapters@^0.4.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'main.ts': `${adapterImport}${demoSnippet}const adapter = ${adapterCallEdge}\n\nDeno.serve(async (request) => {\n  const url = new URL(request.url)\n  if (request.method === 'POST' && url.pathname === '/chat') {\n    const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n    const source = adapter.createSource({ messages: messages.map((m, i) => ({\n      id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n      content: m.content, status: 'complete' as const, createdAt: new Date(0),\n    })) })\n    const stream = new ReadableStream<Uint8Array>({\n      async start(controller) {\n        const encoder = new TextEncoder()\n        for await (const chunk of source.stream()) {\n          if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n        }\n        controller.close()\n      },\n    })\n    return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n  }\n  return new Response(\\`<!doctype html><title>AgentsKit Deno Deploy starter</title>\n<body><pre>POST /chat with { messages: [...] }</pre></body>\\`, {\n    headers: { 'content-type': 'text/html' },\n  })\n})\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': '.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction angularStarter(ctx: RenderContext): Record<string, string> {\n  const deps: Record<string, string> = {\n    '@agentskit/angular': '^0.4.0',\n    '@angular/core': '^21.0.0',\n    '@angular/common': '^21.0.0',\n    '@angular/compiler': '^21.0.0',\n    '@angular/platform-browser': '^21.0.0',\n    '@angular/platform-browser-dynamic': '^21.0.0',\n    rxjs: '^7.8.0',\n    'zone.js': '^0.16.1',\n  }\n  if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n  return {\n    'package.json': JSON.stringify(\n      {\n        name: 'agentskit-angular-app',\n        private: true,\n        scripts: {\n          dev: 'ng serve',\n          build: 'ng build',\n          start: 'ng serve',\n        },\n        dependencies: deps,\n        devDependencies: {\n          '@angular/cli': '^21.0.0',\n          '@angular/compiler-cli': '^21.0.0',\n          typescript: '^5.5.0',\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'angular.json': JSON.stringify(\n      {\n        $schema: './node_modules/@angular/cli/lib/config/schema.json',\n        version: 1,\n        projects: {\n          app: {\n            projectType: 'application',\n            root: '',\n            sourceRoot: 'src',\n            prefix: 'ak',\n            architect: {\n              build: {\n                builder: '@angular/build:application',\n                options: { browser: 'src/main.ts', tsConfig: 'tsconfig.json', index: 'src/index.html' },\n              },\n              serve: { builder: '@angular/build:dev-server', options: { buildTarget: 'app:build' } },\n            },\n          },\n        },\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'tsconfig.json': JSON.stringify(\n      {\n        compilerOptions: {\n          target: 'ES2022', module: 'preserve', moduleResolution: 'bundler',\n          strict: true, experimentalDecorators: true, useDefineForClassFields: false,\n          lib: ['ES2022', 'DOM'],\n        },\n        include: ['src/**/*.ts'],\n      },\n      null,\n      2,\n    ) + '\\n',\n\n    'src/index.html': `<!doctype html>\n<html><head><title>AgentsKit Angular</title></head>\n<body><ak-root></ak-root></body></html>\n`,\n\n    'src/main.ts': `import { bootstrapApplication } from '@angular/platform-browser'\nimport 'zone.js'\nimport { AppComponent } from './app'\n\nbootstrapApplication(AppComponent)\n`,\n\n    'src/app.ts': `import { Component, signal } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\n@Component({\n  selector: 'ak-root',\n  standalone: true,\n  imports: [CommonModule],\n  template: \\`\n    <main style=\"max-width: 640px; margin: 2rem auto;\">\n      <h1>AgentsKit · Angular standalone</h1>\n      <p>Wire @agentskit/angular here. See the docs for the chat service binding.</p>\n      <p>Counter (sanity): {{ count() }}</p>\n      <button (click)=\"bump()\">+1</button>\n    </main>\n  \\`,\n})\nexport class AppComponent {\n  readonly count = signal(0)\n  bump() { this.count.update(n => n + 1) }\n}\n`,\n\n    '.env.example': envExampleFor(ctx.provider),\n    '.gitignore': 'node_modules\\ndist\\n.angular\\n.env\\n.env.local\\n',\n    'README.md': readmeFor(ctx),\n  }\n}\n\nfunction readmeFor(ctx: RenderContext): string {\n  const installCmd = ctx.pm === 'npm' ? 'npm install' : `${ctx.pm} install`\n  const runCmd = ctx.pm === 'npm' ? 'npm run dev' : `${ctx.pm} dev`\n  const envKey = PROVIDER_ENV_KEY[ctx.provider]\n\n  return `# AgentsKit ${ctx.template} starter\n\nGenerated by \\`agentskit init\\`.\n\n## Stack\n\n- **Template**: \\`${ctx.template}\\`\n- **Provider**: \\`${ctx.provider}\\`${ctx.tools.length ? `\\n- **Tools**: ${ctx.tools.map(t => `\\`${t}\\``).join(', ')}` : ''}${ctx.memory !== 'none' ? `\\n- **Memory**: \\`${ctx.memory}\\`` : ''}\n\n## Run\n\n\\`\\`\\`bash\n${installCmd}\n${envKey ? `cp .env.example .env\\n# add ${envKey}=...` : '# No API key required'}\n${runCmd}\n\\`\\`\\`\n\n## Next steps\n\n- Open the AgentsKit docs at https://www.agentskit.io/docs\n- Add a custom skill: https://www.agentskit.io/docs/concepts/skill\n- Wire up RAG: https://www.agentskit.io/docs/recipes/rag-chat\n\n## License\n\nISC\n`\n}\n\n// ============================================================================\n// Main\n// ============================================================================\n\nconst TEMPLATE_FN: Record<StarterKind, (ctx: RenderContext) => Record<string, string>> = {\n  react: reactStarter,\n  nextjs: nextjsStarter,\n  ink: inkStarter,\n  runtime: runtimeStarter,\n  'multi-agent': multiAgentStarter,\n  sveltekit: sveltekitStarter,\n  nuxt: nuxtStarter,\n  'vite-ink': viteInkStarter,\n  'cloudflare-workers': cloudflareWorkersStarter,\n  bun: bunStarter,\n  expo: expoStarter,\n  'deno-deploy': denoDeployStarter,\n  angular: angularStarter,\n}\n\nexport async function writeStarterProject(options: InitCommandOptions): Promise<void> {\n  const ctx: RenderContext = {\n    template: options.template,\n    provider: options.provider ?? 'demo',\n    tools: options.tools ?? [],\n    memory: options.memory ?? 'none',\n    pm: options.packageManager ?? 'pnpm',\n  }\n\n  const files = TEMPLATE_FN[ctx.template](ctx)\n  await mkdir(options.targetDir, { recursive: true })\n\n  await Promise.all(\n    Object.entries(files).map(async ([relativePath, content]) => {\n      const absolutePath = path.join(options.targetDir, relativePath)\n      await mkdir(path.dirname(absolutePath), { recursive: true })\n      await writeFile(absolutePath, content, 'utf8')\n    }),\n  )\n}\n","import { input, select, checkbox, confirm } from '@inquirer/prompts'\nimport kleur from 'kleur'\nimport path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport type {\n  InitCommandOptions,\n  StarterKind,\n  Provider,\n  ToolKind,\n  MemoryKind,\n  PackageManager,\n} from './init'\n\ninterface InteractiveResult {\n  options: InitCommandOptions\n  cancelled: boolean\n}\n\n/**\n * Run the interactive init flow. Returns the resolved InitCommandOptions\n * to feed into writeStarterProject. If the user cancels (Ctrl+C), returns\n * { cancelled: true }.\n */\nexport async function runInteractiveInit(\n  defaults: { dir?: string; template?: StarterKind } = {},\n): Promise<InteractiveResult> {\n  process.stdout.write(`\\n${kleur.bold().green('▲')} ${kleur.bold('agentskit init')}\\n`)\n  process.stdout.write(kleur.dim('   Generate a starter project — answer five questions.\\n\\n'))\n\n  try {\n    const targetDir = await input({\n      message: 'Project directory:',\n      default: defaults.dir ?? 'agentskit-app',\n      validate: (value) => {\n        if (!value.trim()) return 'A directory name is required.'\n        const abs = path.resolve(process.cwd(), value)\n        if (existsSync(abs)) return `${value} already exists. Pick a different name.`\n        return true\n      },\n    })\n\n    const template = await select<StarterKind>({\n      message: 'Template:',\n      default: defaults.template ?? 'react',\n      choices: [\n        { name: 'React chat (Vite + browser)', value: 'react', description: 'Streaming UI with @agentskit/react' },\n        { name: 'Next.js chat (App Router + Route Handler)', value: 'nextjs', description: 'app/api/chat streams to a useChat client' },\n        { name: 'SvelteKit chat', value: 'sveltekit', description: '@agentskit/svelte client + server route streaming' },\n        { name: 'Nuxt chat', value: 'nuxt', description: '@agentskit/vue composable + Nitro server route streaming' },\n        { name: 'Ink chat (terminal UI)', value: 'ink', description: 'Same chat but in your terminal' },\n        { name: 'Vite + Ink (terminal, hot-reload)', value: 'vite-ink', description: 'Ink chat with vite-node hot reload' },\n        { name: 'Cloudflare Workers (edge)', value: 'cloudflare-workers', description: 'Edge runtime with itty-router + streaming' },\n        { name: 'Bun server', value: 'bun', description: 'Bun.serve with hot reload' },\n        { name: 'Deno Deploy', value: 'deno-deploy', description: 'Deno.serve with deployctl + npm: imports' },\n        { name: 'Expo + auth (mobile)', value: 'expo', description: 'expo-router + expo-secure-store + chat screen' },\n        { name: 'Angular standalone', value: 'angular', description: 'Angular 21 standalone bootstrap with @agentskit/angular' },\n        { name: 'Runtime (headless agent, no UI)', value: 'runtime', description: 'Autonomous task → result' },\n        { name: 'Multi-agent (planner + delegates)', value: 'multi-agent', description: 'Supervisor pattern, ready to extend' },\n      ],\n    })\n\n    const provider = await select<Provider>({\n      message: 'LLM provider:',\n      default: 'demo',\n      choices: [\n        { name: 'Demo (no API key — deterministic stub)', value: 'demo' },\n        { name: 'OpenAI', value: 'openai' },\n        { name: 'Anthropic', value: 'anthropic' },\n        { name: 'Gemini', value: 'gemini' },\n        { name: 'Ollama (local, no key)', value: 'ollama' },\n      ],\n    })\n\n    let tools: ToolKind[] = []\n    if (template !== 'react') {\n      // React template focuses on chat; tools are most useful in runtime / multi-agent / ink\n      tools = await checkbox<ToolKind>({\n        message: 'Tools (space to toggle, enter to confirm):',\n        choices: [\n          { name: 'web_search', value: 'web_search' },\n          { name: 'filesystem', value: 'filesystem' },\n          { name: 'shell', value: 'shell' },\n        ],\n      })\n    }\n\n    const memory = await select<MemoryKind>({\n      message: 'Memory backend:',\n      default: 'none',\n      choices: [\n        { name: 'None (stateless)', value: 'none' },\n        { name: 'File (JSON on disk)', value: 'file' },\n        { name: 'SQLite (better-sqlite3)', value: 'sqlite' },\n      ],\n    })\n\n    const packageManager = await select<PackageManager>({\n      message: 'Package manager:',\n      default: 'pnpm',\n      choices: [\n        { name: 'pnpm', value: 'pnpm' },\n        { name: 'npm', value: 'npm' },\n        { name: 'yarn', value: 'yarn' },\n        { name: 'bun', value: 'bun' },\n      ],\n    })\n\n    process.stdout.write('\\n' + kleur.dim('  Summary:\\n'))\n    process.stdout.write(kleur.dim(`    dir       ${targetDir}\\n`))\n    process.stdout.write(kleur.dim(`    template  ${template}\\n`))\n    process.stdout.write(kleur.dim(`    provider  ${provider}\\n`))\n    if (tools.length) process.stdout.write(kleur.dim(`    tools     ${tools.join(', ')}\\n`))\n    process.stdout.write(kleur.dim(`    memory    ${memory}\\n`))\n    process.stdout.write(kleur.dim(`    pm        ${packageManager}\\n\\n`))\n\n    const proceed = await confirm({ message: 'Generate?', default: true })\n    if (!proceed) {\n      process.stdout.write(kleur.yellow('Cancelled.\\n'))\n      return { cancelled: true, options: { targetDir, template, provider, tools, memory, packageManager } }\n    }\n\n    return {\n      cancelled: false,\n      options: {\n        targetDir: path.resolve(process.cwd(), targetDir),\n        template,\n        provider,\n        tools,\n        memory,\n        packageManager,\n      },\n    }\n  } catch (err) {\n    // ExitPromptError thrown on Ctrl+C\n    if ((err as Error).name === 'ExitPromptError') {\n      process.stdout.write(kleur.yellow('\\nCancelled.\\n'))\n      return { cancelled: true, options: { targetDir: '', template: 'react' } }\n    }\n    throw err\n  }\n}\n\nexport function printNextSteps(options: InitCommandOptions): void {\n  const dir = path.relative(process.cwd(), options.targetDir) || '.'\n  const pm = options.packageManager ?? 'pnpm'\n  const installCmd = pm === 'npm' ? 'npm install' : `${pm} install`\n  const runCmd = pm === 'npm' ? 'npm run dev' : `${pm} dev`\n\n  process.stdout.write('\\n' + kleur.green('✓ Created starter at ') + kleur.bold(dir) + '\\n\\n')\n  process.stdout.write(kleur.bold('Next steps:\\n\\n'))\n  process.stdout.write(`  ${kleur.cyan('cd')} ${dir}\\n`)\n  process.stdout.write(`  ${kleur.cyan(installCmd)}\\n`)\n  if (options.provider && options.provider !== 'demo' && options.provider !== 'ollama') {\n    process.stdout.write(\n      `  ${kleur.cyan('cp')} .env.example .env  ${kleur.dim('# add your API key')}\\n`,\n    )\n  }\n  process.stdout.write(`  ${kleur.cyan(runCmd)}\\n\\n`)\n  process.stdout.write(kleur.dim('  Docs: https://www.agentskit.io/docs\\n'))\n  process.stdout.write(\n    kleur.yellow('  ★ Star AgentsKit') +\n      kleur.dim(' (solo-built — it helps a lot): https://github.com/AgentsKit-io/agentskit\\n\\n'),\n  )\n}\n","import path from 'node:path'\nimport type { Command } from 'commander'\nimport { writeStarterProject } from '../init'\nimport type { StarterKind, Provider, ToolKind, MemoryKind, PackageManager } from '../init'\nimport { runInteractiveInit, printNextSteps } from '../init-interactive'\n\nexport function registerInitCommand(program: Command): void {\n  program\n    .command('init')\n    .description('Generate a starter project. Run with no flags for interactive mode.')\n    .option('--template <template>', 'Starter template (react|nextjs|sveltekit|nuxt|ink|vite-ink|cloudflare-workers|bun|deno-deploy|expo|angular|runtime|multi-agent)')\n    .option('--dir <directory>', 'Target directory', 'agentskit-app')\n    .option('--provider <provider>', 'LLM provider (openai|anthropic|gemini|ollama|demo)')\n    .option('--tools <tools>', 'Comma-separated tools (web_search,filesystem,shell)')\n    .option('--memory <backend>', 'Memory backend (none|file|sqlite)')\n    .option('--pm <packageManager>', 'Package manager (pnpm|npm|yarn|bun)')\n    .option('-y, --yes', 'Skip interactive prompts; use flag values + defaults')\n    .action(async (rawOptions) => {\n      const isCi = !process.stdout.isTTY || rawOptions.yes || rawOptions.template\n      let resolved: Parameters<typeof writeStarterProject>[0]\n\n      if (isCi) {\n        const template = (rawOptions.template ?? 'react') as StarterKind\n        resolved = {\n          targetDir: path.resolve(process.cwd(), rawOptions.dir),\n          template,\n          provider: (rawOptions.provider ?? 'demo') as Provider,\n          tools: rawOptions.tools\n            ? (rawOptions.tools.split(',').map((t: string) => t.trim()) as ToolKind[])\n            : [],\n          memory: (rawOptions.memory ?? 'none') as MemoryKind,\n          packageManager: (rawOptions.pm ?? 'pnpm') as PackageManager,\n        }\n      } else {\n        const result = await runInteractiveInit({\n          dir: rawOptions.dir,\n          template: rawOptions.template as StarterKind | undefined,\n        })\n        if (result.cancelled) {\n          process.exit(0)\n        }\n        resolved = result.options\n      }\n\n      await writeStarterProject(resolved)\n\n      if (isCi) {\n        process.stdout.write(\n          `Created ${resolved.template} starter in ${path.relative(process.cwd(), resolved.targetDir) || '.'}\\n` +\n            `★ Star AgentsKit (solo-built — it helps a lot): https://github.com/AgentsKit-io/agentskit\\n`,\n        )\n      } else {\n        printNextSteps(resolved)\n      }\n    })\n}\n","import { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { loadConfig } from './config'\n\nexport type CheckStatus = 'pass' | 'warn' | 'fail' | 'skip'\n\nexport interface CheckResult {\n  status: CheckStatus\n  name: string\n  detail?: string\n  fix?: string\n}\n\nexport interface DoctorReport {\n  results: CheckResult[]\n  pass: number\n  warn: number\n  fail: number\n  skip: number\n}\n\nconst PROVIDER_ENV_KEYS: Record<string, string> = {\n  openai: 'OPENAI_API_KEY',\n  anthropic: 'ANTHROPIC_API_KEY',\n  gemini: 'GEMINI_API_KEY',\n  deepseek: 'DEEPSEEK_API_KEY',\n  grok: 'XAI_API_KEY',\n  kimi: 'KIMI_API_KEY',\n}\n\nconst PROVIDER_REACH_URLS: Record<string, string> = {\n  openai: 'https://api.openai.com/v1/models',\n  anthropic: 'https://api.anthropic.com/v1/messages',\n  gemini: 'https://generativelanguage.googleapis.com/v1beta/models',\n  ollama: 'http://localhost:11434/api/tags',\n}\n\n// ============================================================================\n// Individual checks\n// ============================================================================\n\nexport async function checkNodeVersion(): Promise<CheckResult> {\n  const major = Number(process.versions.node.split('.')[0])\n  if (Number.isNaN(major)) {\n    return { status: 'fail', name: 'Node version', detail: 'Could not parse process.versions.node' }\n  }\n  if (major < 22) {\n    return {\n      status: 'fail',\n      name: 'Node version',\n      detail: `Node ${process.versions.node} (need 22+)`,\n      fix: 'Install Node 22 LTS or newer (https://nodejs.org)',\n    }\n  }\n  if (major === 25) {\n    return {\n      status: 'warn',\n      name: 'Node version',\n      detail: `Node ${process.versions.node} — Docusaurus apps may break here`,\n      fix: 'Use Node 22 LTS for the legacy docs app, or stay on 25 for everything else',\n    }\n  }\n  return { status: 'pass', name: 'Node version', detail: `Node ${process.versions.node}` }\n}\n\nexport async function checkPnpm(): Promise<CheckResult> {\n  // We can't run binaries directly, but we can detect the lockfile signal\n  const cwd = process.cwd()\n  const hasPnpm = existsSync(join(cwd, 'pnpm-lock.yaml')) || existsSync(join(cwd, 'pnpm-workspace.yaml'))\n  if (hasPnpm) {\n    return { status: 'pass', name: 'Package manager', detail: 'pnpm detected (lockfile)' }\n  }\n  if (existsSync(join(cwd, 'package-lock.json'))) {\n    return { status: 'warn', name: 'Package manager', detail: 'npm detected — pnpm recommended for monorepo workflows' }\n  }\n  if (existsSync(join(cwd, 'yarn.lock'))) {\n    return { status: 'pass', name: 'Package manager', detail: 'yarn detected' }\n  }\n  if (existsSync(join(cwd, 'bun.lock')) || existsSync(join(cwd, 'bun.lockb'))) {\n    return { status: 'pass', name: 'Package manager', detail: 'bun detected' }\n  }\n  return {\n    status: 'skip',\n    name: 'Package manager',\n    detail: 'No lockfile found in cwd',\n  }\n}\n\nexport async function checkPackageJson(): Promise<CheckResult> {\n  const path = join(process.cwd(), 'package.json')\n  if (!existsSync(path)) {\n    return {\n      status: 'warn',\n      name: 'package.json',\n      detail: 'No package.json in cwd',\n      fix: 'Run from a project directory (or use `agentskit init` to create one)',\n    }\n  }\n  try {\n    const pkg = JSON.parse(await readFile(path, 'utf8')) as Record<string, unknown>\n    const deps = {\n      ...((pkg.dependencies as Record<string, string>) ?? {}),\n      ...((pkg.devDependencies as Record<string, string>) ?? {}),\n    }\n    const akDeps = Object.entries(deps).filter(([name]) => name.startsWith('@agentskit/'))\n    if (akDeps.length === 0) {\n      return { status: 'skip', name: 'AgentsKit packages', detail: 'No @agentskit/* deps found in package.json' }\n    }\n    return {\n      status: 'pass',\n      name: 'AgentsKit packages',\n      detail: `${akDeps.length} installed: ${akDeps.map(([n]) => n.replace('@agentskit/', '')).join(', ')}`,\n    }\n  } catch (err) {\n    return {\n      status: 'fail',\n      name: 'package.json',\n      detail: `Could not parse: ${(err as Error).message}`,\n    }\n  }\n}\n\nexport async function checkProviderEnv(provider: string): Promise<CheckResult> {\n  const envKey = PROVIDER_ENV_KEYS[provider]\n  if (!envKey) {\n    return { status: 'skip', name: `${provider} API key`, detail: 'No env-key requirement for this provider' }\n  }\n  const value = process.env[envKey]\n  if (!value) {\n    return {\n      status: 'skip',\n      name: `${provider} API key`,\n      detail: `${envKey} not set`,\n      fix: `export ${envKey}=... (only needed if you use ${provider})`,\n    }\n  }\n  if (value.length < 16) {\n    return {\n      status: 'warn',\n      name: `${provider} API key`,\n      detail: `${envKey} looks too short (${value.length} chars)`,\n      fix: 'Verify the key is complete and not truncated',\n    }\n  }\n  return { status: 'pass', name: `${provider} API key`, detail: `${envKey} set (${value.length} chars)` }\n}\n\nexport async function checkProviderReachable(\n  provider: string,\n  fetchImpl: typeof fetch = fetch,\n  timeoutMs = 4000,\n): Promise<CheckResult> {\n  const url = PROVIDER_REACH_URLS[provider]\n  if (!url) {\n    return { status: 'skip', name: `${provider} reachable`, detail: 'No reachability check configured' }\n  }\n\n  // Skip reachability if no API key is set for keyed providers\n  const envKey = PROVIDER_ENV_KEYS[provider]\n  if (envKey && !process.env[envKey]) {\n    return { status: 'skip', name: `${provider} reachable`, detail: 'Skipped — no API key configured' }\n  }\n\n  const controller = new AbortController()\n  const timer = setTimeout(() => controller.abort(), timeoutMs)\n  try {\n    const res = await fetchImpl(url, {\n      method: 'GET',\n      signal: controller.signal,\n    })\n    // 200-299 = healthy; 401/403 = reachable but auth issue (still pass);\n    // 404+ = reachable but endpoint may have changed (warn)\n    if (res.status >= 200 && res.status < 400) {\n      return { status: 'pass', name: `${provider} reachable`, detail: `${url} → ${res.status} OK` }\n    }\n    if (res.status === 401 || res.status === 403 || res.status === 405) {\n      return { status: 'pass', name: `${provider} reachable`, detail: `${url} → ${res.status} (host reachable)` }\n    }\n    return {\n      status: 'warn',\n      name: `${provider} reachable`,\n      detail: `${url} → HTTP ${res.status}`,\n      fix: 'Host reachable but returned unexpected status — check provider docs',\n    }\n  } catch (err) {\n    const reason = (err as Error).name === 'AbortError' ? `timeout after ${timeoutMs}ms` : (err as Error).message\n    return {\n      status: 'fail',\n      name: `${provider} reachable`,\n      detail: `${url} → ${reason}`,\n      fix:\n        provider === 'ollama'\n          ? 'Start Ollama: `ollama serve` (or install from https://ollama.com)'\n          : 'Check network / firewall / VPN settings',\n    }\n  } finally {\n    clearTimeout(timer)\n  }\n}\n\nexport async function checkConfig(): Promise<CheckResult> {\n  try {\n    const config = await loadConfig()\n    if (!config) {\n      return { status: 'skip', name: 'AgentsKit config', detail: 'No .agentskit.config or package.json#agentskit found' }\n    }\n    return {\n      status: 'pass',\n      name: 'AgentsKit config',\n      detail: `loaded — defaults: ${JSON.stringify(config.defaults ?? {})}`,\n    }\n  } catch (err) {\n    return {\n      status: 'warn',\n      name: 'AgentsKit config',\n      detail: `Could not load: ${(err as Error).message}`,\n    }\n  }\n}\n\n// ============================================================================\n// Orchestration\n// ============================================================================\n\nexport interface DoctorOptions {\n  /** Provider names to check. Defaults to all known providers. */\n  providers?: string[]\n  /** Skip the network reachability checks. */\n  noNetwork?: boolean\n  /** Custom fetch (for tests). */\n  fetchImpl?: typeof fetch\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<DoctorReport> {\n  const providers = options.providers ?? ['openai', 'anthropic', 'gemini', 'ollama']\n  const fetchImpl = options.fetchImpl ?? fetch\n\n  const checks: Array<Promise<CheckResult>> = [\n    checkNodeVersion(),\n    checkPnpm(),\n    checkPackageJson(),\n    checkConfig(),\n  ]\n\n  for (const provider of providers) {\n    checks.push(checkProviderEnv(provider))\n    if (!options.noNetwork) {\n      checks.push(checkProviderReachable(provider, fetchImpl))\n    }\n  }\n\n  const results = await Promise.all(checks)\n\n  return {\n    results,\n    pass: results.filter(r => r.status === 'pass').length,\n    warn: results.filter(r => r.status === 'warn').length,\n    fail: results.filter(r => r.status === 'fail').length,\n    skip: results.filter(r => r.status === 'skip').length,\n  }\n}\n\n// ============================================================================\n// Renderer (TTY-friendly)\n// ============================================================================\n\nconst ICON: Record<CheckStatus, string> = {\n  pass: '✔',\n  warn: '⚠',\n  fail: '✘',\n  skip: '○',\n}\n\nexport function renderReport(report: DoctorReport, opts: { color?: boolean } = {}): string {\n  const color = opts.color ?? true\n  const c = (code: string, text: string) => (color ? `\\x1b[${code}m${text}\\x1b[0m` : text)\n  const colorFor: Record<CheckStatus, (t: string) => string> = {\n    pass: t => c('32', t),   // green\n    warn: t => c('33', t),   // yellow\n    fail: t => c('31', t),   // red\n    skip: t => c('90', t),   // dim\n  }\n\n  const lines: string[] = []\n\n  // Header\n  lines.push('')\n  lines.push(`  ${c('1;36', '⚡ AgentsKit Doctor')}`)\n  lines.push(`  ${c('90', '─'.repeat(50))}`)\n  lines.push('')\n\n  // Group results by category\n  const groups: Record<string, CheckResult[]> = {\n    'Environment': [],\n    'Providers': [],\n    'Network': [],\n  }\n  for (const r of report.results) {\n    if (r.name.includes('reachable')) {\n      groups['Network'].push(r)\n    } else if (r.name.includes('API key')) {\n      groups['Providers'].push(r)\n    } else {\n      groups['Environment'].push(r)\n    }\n  }\n\n  for (const [group, results] of Object.entries(groups)) {\n    if (results.length === 0) continue\n    lines.push(`  ${c('1', group)}`)\n    for (const r of results) {\n      const icon = colorFor[r.status](ICON[r.status])\n      const name = r.name.padEnd(28)\n      const detail = r.detail ? c('90', r.detail) : ''\n      lines.push(`    ${icon}  ${name} ${detail}`)\n      if (r.fix && r.status !== 'pass') {\n        lines.push(`       ${c('90', '↳ ' + r.fix)}`)\n      }\n    }\n    lines.push('')\n  }\n\n  // Summary bar\n  lines.push(`  ${c('90', '─'.repeat(50))}`)\n  const parts: string[] = []\n  if (report.pass > 0) parts.push(colorFor.pass(`${report.pass} passed`))\n  if (report.warn > 0) parts.push(colorFor.warn(`${report.warn} warnings`))\n  if (report.fail > 0) parts.push(colorFor.fail(`${report.fail} failed`))\n  if (report.skip > 0) parts.push(colorFor.skip(`${report.skip} skipped`))\n  lines.push(`  ${parts.join('  ·  ')}`)\n\n  // Verdict\n  if (report.fail === 0) {\n    lines.push(`  ${c('32', '✔ Ready to build agents.')}`)\n  } else {\n    lines.push(`  ${c('31', '✘ Fix the issues above before continuing.')}`)\n  }\n  lines.push('')\n  return lines.join('\\n')\n}\n","import type { Command } from 'commander'\nimport { runDoctor, renderReport } from '../doctor'\n\nexport function registerDoctorCommand(program: Command): void {\n  program\n    .command('doctor')\n    .description('Diagnose your AgentsKit environment.')\n    .option('--no-network', 'Skip provider reachability checks')\n    .option(\n      '--providers <providers>',\n      'Comma-separated providers to check (default: openai,anthropic,gemini,ollama)',\n    )\n    .option('--json', 'Emit JSON instead of formatted output')\n    .action(async (options) => {\n      const providers = options.providers\n        ? options.providers.split(',').map((p: string) => p.trim()).filter(Boolean)\n        : undefined\n\n      const report = await runDoctor({\n        providers,\n        noNetwork: options.network === false,\n      })\n\n      if (options.json) {\n        process.stdout.write(JSON.stringify(report, null, 2) + '\\n')\n      } else {\n        process.stdout.write(renderReport(report, { color: process.stdout.isTTY }))\n      }\n\n      if (report.fail > 0) process.exit(1)\n    })\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport { resolve as pathResolve, basename } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport chokidar from 'chokidar'\nimport kleur from 'kleur'\n\nexport interface DevOptions {\n  /** Entry file to run (relative or absolute). */\n  entry: string\n  /** Globs to watch for changes. Defaults to common project files. */\n  watch?: string[]\n  /** Globs to ignore. */\n  ignore?: string[]\n  /** Args to pass through to the entry script. */\n  scriptArgs?: string[]\n  /** Debounce ms before restart after a change. */\n  debounceMs?: number\n  /**\n   * Spawner override for tests. Defaults to spawning `tsx` (or `node` for\n   * .js entries) as a child process.\n   */\n  spawn?: (cmd: string, args: string[]) => ChildProcess\n  /** Watch override for tests. Defaults to chokidar. */\n  watcher?: (paths: string[], opts: { ignored?: string[] }) => DevWatcher\n  /** Stdout sink for tests. */\n  stdout?: NodeJS.WritableStream\n  /** Stderr sink for tests. */\n  stderr?: NodeJS.WritableStream\n}\n\nexport interface DevWatcher {\n  on(event: 'change' | 'add' | 'unlink', listener: (path: string) => void): this\n  close(): Promise<void>\n}\n\nconst DEFAULT_WATCH = [\n  '**/*.ts',\n  '**/*.tsx',\n  '**/*.mjs',\n  '**/*.json',\n  '.agentskit.config.*',\n]\n\nconst DEFAULT_IGNORE = [\n  '**/node_modules/**',\n  '**/dist/**',\n  '**/build/**',\n  '**/.next/**',\n  '**/.turbo/**',\n  '**/.git/**',\n  '**/coverage/**',\n  '**/*.test.ts',\n  '**/*.spec.ts',\n]\n\n/**\n * Run an entry file via tsx, restart it on relevant file changes.\n * Resolves when stop() is called or the watcher closes.\n *\n * Returns a controller so callers (and tests) can stop the loop and\n * inspect activity counters.\n */\nexport interface DevController {\n  /** Promise that resolves when the dev session ends. */\n  done: Promise<void>\n  /** Stop the dev loop and clean up. */\n  stop: () => Promise<void>\n  /** Number of times the entry has been (re)started. */\n  restarts: () => number\n}\n\nexport function startDev(options: DevOptions): DevController {\n  const entry = pathResolve(process.cwd(), options.entry)\n  if (!existsSync(entry)) {\n    throw new Error(`Entry file not found: ${entry}`)\n  }\n\n  const stdout = options.stdout ?? process.stdout\n  const stderr = options.stderr ?? process.stderr\n  const debounceMs = options.debounceMs ?? 200\n\n  const isTs = entry.endsWith('.ts') || entry.endsWith('.tsx')\n  const cmd = isTs ? 'tsx' : 'node'\n  const baseArgs = [entry, ...(options.scriptArgs ?? [])]\n\n  const spawnFn =\n    options.spawn ??\n    ((c: string, a: string[]) =>\n      spawn(c, a, {\n        stdio: ['inherit', 'pipe', 'pipe'],\n        env: { ...process.env, FORCE_COLOR: '1' },\n      }))\n\n  const watchPaths = options.watch ?? DEFAULT_WATCH\n  const ignorePaths = [...DEFAULT_IGNORE, ...(options.ignore ?? [])]\n  const watcherFactory =\n    options.watcher ??\n    ((paths, opts) => chokidar.watch(paths, { ignored: opts.ignored, ignoreInitial: true }) as unknown as DevWatcher)\n\n  const watcher = watcherFactory(watchPaths, { ignored: ignorePaths })\n\n  let child: ChildProcess | undefined\n  let restartCount = 0\n  let restartTimer: NodeJS.Timeout | undefined\n  let stopped = false\n  let resolveDone: () => void\n  const done = new Promise<void>(r => { resolveDone = r })\n\n  const banner = (msg: string, color: 'green' | 'yellow' | 'red' | 'cyan' = 'green') => {\n    const time = new Date().toTimeString().slice(0, 8)\n    stdout.write(kleur[color](`[agentskit dev ${time}] `) + msg + '\\n')\n  }\n\n  const startChild = () => {\n    restartCount++\n    banner(`▸ starting ${kleur.bold(basename(entry))} (restart #${restartCount - 1})`, 'cyan')\n\n    const c = spawnFn(cmd, baseArgs)\n    child = c\n    c.stdout?.on('data', (d: Buffer) => stdout.write(d))\n    c.stderr?.on('data', (d: Buffer) => stderr.write(d))\n    c.on('exit', (code, signal) => {\n      if (stopped) return\n      if (signal === 'SIGTERM' || signal === 'SIGINT') return\n      if (code === 0) {\n        banner(`✓ exited cleanly — waiting for changes`, 'green')\n      } else {\n        banner(`✗ exited with code ${code} — waiting for changes`, 'red')\n      }\n    })\n  }\n\n  const restart = (path: string) => {\n    if (restartTimer) clearTimeout(restartTimer)\n    restartTimer = setTimeout(() => {\n      restartTimer = undefined\n      banner(`↻ change detected — ${path}`, 'yellow')\n      if (child && !child.killed && child.exitCode === null) {\n        child.kill('SIGTERM')\n      }\n      // Brief pause so the SIGTERM is delivered before we spawn again.\n      setTimeout(startChild, 80)\n    }, debounceMs)\n  }\n\n  watcher.on('change', restart)\n  watcher.on('add', restart)\n  watcher.on('unlink', restart)\n\n  startChild()\n\n  const stop = async () => {\n    if (stopped) return\n    stopped = true\n    if (restartTimer) clearTimeout(restartTimer)\n    if (child && !child.killed && child.exitCode === null) {\n      child.kill('SIGTERM')\n    }\n    await watcher.close()\n    banner(`stopped`, 'cyan')\n    resolveDone()\n  }\n\n  // Keyboard handling: 'r' = restart now, 'q' / Ctrl+C = stop\n  if (process.stdin.isTTY && process.stdin.setRawMode) {\n    process.stdin.setRawMode(true)\n    process.stdin.resume()\n    process.stdin.on('data', (data: Buffer) => {\n      const key = data.toString()\n      if (key === 'r') restart('manual')\n      if (key === 'q' || key === '\\u0003') void stop()\n    })\n  }\n\n  return {\n    done,\n    stop,\n    restarts: () => restartCount,\n  }\n}\n","import type { Command } from 'commander'\nimport { startDev } from '../dev'\n\nexport function registerDevCommand(program: Command): void {\n  program\n    .command('dev [entry]')\n    .description('Run an entry file with hot-reload on file changes.')\n    .option('--watch <globs>', 'Comma-separated glob patterns to watch')\n    .option('--ignore <globs>', 'Comma-separated glob patterns to ignore')\n    .option('--debounce <ms>', 'Debounce window before restart', '200')\n    .action(async (positional: string | undefined, options) => {\n      const entry = positional ?? 'src/index.ts'\n      const watch = options.watch\n        ? (options.watch as string).split(',').map((s: string) => s.trim()).filter(Boolean)\n        : undefined\n      const ignore = options.ignore\n        ? (options.ignore as string).split(',').map((s: string) => s.trim()).filter(Boolean)\n        : undefined\n\n      try {\n        const controller = startDev({\n          entry,\n          watch,\n          ignore,\n          debounceMs: Number(options.debounce) || 200,\n        })\n        await controller.done\n      } catch (err) {\n        process.stderr.write(`Error: ${(err as Error).message}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","import { mkdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { loadConfig } from '../config'\n\nexport function registerConfigCommand(program: Command): void {\n  program\n    .command('config')\n    .description('Show or scaffold the AgentsKit config.')\n    .argument(\n      '[action]',\n      'Action: \"init\" to create a template, \"show\" to print the merged config.',\n      'show',\n    )\n    .option('--global', 'Write/read the global config at ~/.agentskit/config.json (default)')\n    .option('--local', 'Write/read a project-level .agentskit.config.json in the current directory')\n    .option('--force', 'Overwrite an existing config file')\n    .action(async (action: string, options) => {\n      const isLocal = Boolean(options.local)\n      const targetPath = isLocal\n        ? path.join(process.cwd(), '.agentskit.config.json')\n        : path.join(homedir(), '.agentskit', 'config.json')\n\n      if (action === 'show') {\n        const config = await loadConfig()\n        process.stdout.write(JSON.stringify(config ?? {}, null, 2) + '\\n')\n        return\n      }\n\n      if (action !== 'init') {\n        process.stderr.write(`Unknown action: ${action}. Use \"init\" or \"show\".\\n`)\n        process.exit(2)\n      }\n\n      const template = {\n        defaults: {\n          provider: 'openai',\n          baseUrl: 'https://openrouter.ai/api',\n          apiKeyEnv: 'OPENROUTER_API_KEY',\n          model: 'openai/gpt-oss-120b:free',\n          tools: 'web_search,fetch_url',\n        },\n      }\n\n      mkdirSync(path.dirname(targetPath), { recursive: true })\n      // `wx` fails if the file exists — atomic create that closes the\n      // exists-then-write race. `w` overwrites only with --force.\n      try {\n        writeFileSync(targetPath, JSON.stringify(template, null, 2) + '\\n', {\n          flag: options.force ? 'w' : 'wx',\n        })\n      } catch (err) {\n        if ((err as NodeJS.ErrnoException).code === 'EEXIST') {\n          process.stderr.write(\n            `Config already exists at ${targetPath}. Re-run with --force to overwrite.\\n`,\n          )\n          process.exit(1)\n        }\n        throw err\n      }\n      process.stdout.write(\n        `Wrote ${targetPath}\\n` +\n          `Edit it to taste, then run:\\n  agentskit chat\\n` +\n          `(flags on the CLI still win over config values.)\\n`,\n      )\n    })\n}\n","import kleur from 'kleur'\n\nexport interface TunnelOptions {\n  /** Local port to expose. Required. */\n  port: number\n  /** Optional subdomain hint (best-effort — provider may decline). */\n  subdomain?: string\n  /** Local hostname (default: 'localhost'). */\n  host?: string\n  /** Tunnel factory override for tests. Defaults to `localtunnel`. */\n  open?: (opts: { port: number; subdomain?: string; local_host?: string }) => Promise<TunnelLike>\n  /** Stdout/stderr sinks for tests. */\n  stdout?: NodeJS.WritableStream\n  /** Called once the tunnel URL is known. */\n  onReady?: (url: string) => void\n}\n\nexport interface TunnelLike {\n  url: string\n  on(event: 'request' | 'error' | 'close', listener: (...args: unknown[]) => void): unknown\n  close(): void\n}\n\nexport interface TunnelController {\n  /** The public URL once ready. */\n  url: string\n  /** Resolves when the tunnel closes (or stop() is called). */\n  done: Promise<void>\n  /** Stop the tunnel and resolve done. */\n  stop: () => Promise<void>\n  /** Number of requests proxied so far. */\n  requests: () => number\n}\n\n/**\n * Open a public tunnel to a local port.\n *\n * Uses `localtunnel` by default — no account required, free, URL is\n * something like `https://word-word-12345.loca.lt`. First-time visitors\n * may see a `loca.lt` interstitial click-through; that's a known\n * provider quirk, not an AgentsKit issue.\n */\nexport async function startTunnel(options: TunnelOptions): Promise<TunnelController> {\n  const stdout = options.stdout ?? process.stdout\n  const open =\n    options.open ??\n    (async (opts) => {\n      const lt = (await import('localtunnel')).default\n      return (await lt(opts)) as TunnelLike\n    })\n\n  const banner = (msg: string, color: 'green' | 'yellow' | 'red' | 'cyan' = 'green') => {\n    const time = new Date().toTimeString().slice(0, 8)\n    stdout.write(kleur[color](`[agentskit tunnel ${time}] `) + msg + '\\n')\n  }\n\n  banner(`opening tunnel to ${options.host ?? 'localhost'}:${options.port}...`, 'cyan')\n\n  const tunnel = await open({\n    port: options.port,\n    subdomain: options.subdomain,\n    local_host: options.host,\n  })\n\n  let requests = 0\n  let stopped = false\n  let resolveDone: () => void\n  const done = new Promise<void>(r => { resolveDone = r })\n\n  tunnel.on('request', () => {\n    requests++\n  })\n\n  tunnel.on('close', () => {\n    if (stopped) return\n    banner(`tunnel closed by remote`, 'yellow')\n    resolveDone()\n  })\n\n  tunnel.on('error', (...args: unknown[]) => {\n    const err = args[0] as Error | undefined\n    banner(`error: ${err?.message ?? 'unknown'}`, 'red')\n  })\n\n  banner(`✓ ready`, 'green')\n  stdout.write('\\n')\n  stdout.write(`  ${kleur.bold('Public URL:')}  ${kleur.cyan(tunnel.url)}\\n`)\n  stdout.write(`  ${kleur.bold('Local:')}       http://${options.host ?? 'localhost'}:${options.port}\\n`)\n  stdout.write('\\n')\n  stdout.write(kleur.dim(`  Forward webhooks here, then ${kleur.bold('Ctrl+C')} to stop.\\n\\n`))\n\n  options.onReady?.(tunnel.url)\n\n  const stop = async () => {\n    if (stopped) return\n    stopped = true\n    tunnel.close()\n    banner(`stopped — proxied ${requests} request${requests === 1 ? '' : 's'}`, 'cyan')\n    resolveDone()\n  }\n\n  // Hook Ctrl+C — but only if we're attached to a TTY (don't break tests)\n  if (process.stdin.isTTY) {\n    process.on('SIGINT', () => {\n      void stop()\n    })\n  }\n\n  return {\n    url: tunnel.url,\n    done,\n    stop,\n    requests: () => requests,\n  }\n}\n","import type { Command } from 'commander'\nimport { startTunnel } from '../tunnel'\n\nexport function registerTunnelCommand(program: Command): void {\n  program\n    .command('tunnel <port>')\n    .description('Open a public URL pointing to a local port (great for webhooks).')\n    .option('--subdomain <name>', 'Hint for a stable subdomain (provider may decline)')\n    .option('--host <host>', 'Local hostname', 'localhost')\n    .action(async (port: string, options) => {\n      const portNum = Number(port)\n      if (Number.isNaN(portNum) || portNum < 1 || portNum > 65535) {\n        process.stderr.write(`Error: invalid port: ${port}\\n`)\n        process.exit(2)\n      }\n      try {\n        const controller = await startTunnel({\n          port: portNum,\n          subdomain: options.subdomain,\n          host: options.host,\n        })\n        await controller.done\n      } catch (err) {\n        process.stderr.write(`Error: ${(err as Error).message}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAiEmbedderConfig {\n  apiKey: string\n  model?: string\n  baseUrl?: string\n}\n\n/**\n * Minimal OpenAI-compatible embedder. Works with the official OpenAI API\n * or any gateway that speaks the `/v1/embeddings` shape (OpenRouter,\n * Azure OpenAI, local servers, etc.). One embedding per call — batching\n * is a follow-up when demand arrives.\n */\nexport function createOpenAiEmbedder(config: OpenAiEmbedderConfig): EmbedFn {\n  const model = config.model ?? 'text-embedding-3-small'\n  const baseUrl = (config.baseUrl ?? 'https://api.openai.com').replace(/\\/$/, '')\n\n  return async (text: string): Promise<number[]> => {\n    // CodeQL js/file-access-to-http: not fixed by design. Sending `text`\n    // (which may originate from a local document during RAG indexing) to\n    // the embeddings endpoint is the entire purpose of an embedder — the\n    // call goes only to the operator-configured `baseUrl`.\n    const res = await fetch(`${baseUrl}/v1/embeddings`, {\n      method: 'POST',\n      headers: {\n        'content-type': 'application/json',\n        authorization: `Bearer ${config.apiKey}`,\n      },\n      body: JSON.stringify({ model, input: text }),\n    })\n    if (!res.ok) {\n      const body = await res.text().catch(() => '')\n      throw new Error(`embedder ${model} HTTP ${res.status}: ${body}`)\n    }\n    const json = (await res.json()) as { data?: Array<{ embedding: number[] }> }\n    const first = json.data?.[0]?.embedding\n    if (!first) throw new Error(`embedder ${model}: response missing data[0].embedding`)\n    return first\n  }\n}\n","import { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { glob } from 'node:fs/promises'\nimport { fileVectorMemory } from '@agentskit/memory'\nimport { createRAG } from '@agentskit/rag'\nimport type { RAG } from '@agentskit/rag'\nimport type { EmbedFn } from '@agentskit/core'\nimport { createOpenAiEmbedder } from './embedders'\n\nexport interface RagConfig {\n  enabled?: boolean\n  backend?: 'memory' | 'file'\n  dir?: string\n  sources?: string[]\n  embedder?: {\n    provider?: string\n    model?: string\n    apiKey?: string\n    baseUrl?: string\n  }\n  chunkSize?: number\n  topK?: number\n}\n\nexport interface BuildRagOptions {\n  config: RagConfig\n  cwd?: string\n  /** Override the embedder resolution (useful for tests). */\n  embedder?: EmbedFn\n}\n\nexport interface IndexResult {\n  /** Number of input documents ingested. */\n  documentCount: number\n  /** Sources globbed + ingested (absolute paths). */\n  sources: string[]\n}\n\n/** Resolve an `EmbedFn` from config. Currently only OpenAI-compatible. */\nexport function resolveEmbedder(config: RagConfig): EmbedFn {\n  const embedder = config.embedder\n  const provider = embedder?.provider ?? 'openai'\n  if (provider !== 'openai') {\n    throw new Error(`Unsupported RAG embedder provider: ${provider}. Only \"openai\" is built-in.`)\n  }\n  const apiKey = embedder?.apiKey ?? process.env.OPENAI_API_KEY ?? process.env.OPENROUTER_API_KEY\n  if (!apiKey) {\n    throw new Error('RAG embedder needs an API key (config.rag.embedder.apiKey or OPENAI_API_KEY env).')\n  }\n  return createOpenAiEmbedder({\n    apiKey,\n    model: embedder?.model,\n    baseUrl: embedder?.baseUrl,\n  })\n}\n\n/**\n * Build a live `RAG` instance from a config. Wires the embedder + vector\n * store but does not ingest anything — call `indexSources` for that.\n */\nexport function buildRagFromConfig(options: BuildRagOptions): RAG {\n  const cwd = options.cwd ?? process.cwd()\n  const dir = resolve(cwd, options.config.dir ?? './.agentskit-rag')\n  const store = fileVectorMemory({ path: `${dir}/store.json` })\n  const embed = options.embedder ?? resolveEmbedder(options.config)\n  return createRAG({\n    embed,\n    store,\n    chunkSize: options.config.chunkSize,\n    topK: options.config.topK,\n  })\n}\n\n/**\n * Glob `config.sources` from `cwd`, read each file, and ingest through the\n * provided RAG. Returns a summary of what was indexed.\n */\nexport async function indexSources(rag: RAG, config: RagConfig, cwd?: string): Promise<IndexResult> {\n  const root = cwd ?? process.cwd()\n  const sources = config.sources ?? []\n  const absolutePaths: string[] = []\n\n  for (const pattern of sources) {\n    for await (const match of glob(pattern, { cwd: root })) {\n      absolutePaths.push(resolve(root, match))\n    }\n  }\n\n  const documents = await Promise.all(\n    absolutePaths.map(async (path) => ({\n      id: path,\n      content: await readFile(path, 'utf8'),\n      source: path,\n    })),\n  )\n\n  if (documents.length > 0) await rag.ingest(documents)\n\n  return { documentCount: documents.length, sources: absolutePaths }\n}\n","import type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { buildRagFromConfig, indexSources, type RagConfig } from '../extensibility/rag'\n\nexport function registerRagCommand(program: Command): void {\n  const rag = program.command('rag').description('Retrieval-augmented generation utilities.')\n\n  rag\n    .command('index')\n    .description('Index files referenced by config.rag.sources into the vector store.')\n    .option('--source <glob>', 'Glob to index (overrides config.rag.sources; repeatable)',\n      (value: string, prev: string[] = []) => [...prev, value],\n      [])\n    .action(async (options) => {\n      const config = await loadConfig()\n      const rawConfig = (config as unknown as { rag?: RagConfig })?.rag\n      const overrideSources = options.source as string[]\n      const ragConfig: RagConfig = {\n        ...(rawConfig ?? {}),\n        sources: overrideSources.length > 0 ? overrideSources : rawConfig?.sources ?? [],\n      }\n      if (!ragConfig.sources || ragConfig.sources.length === 0) {\n        process.stderr.write('No RAG sources configured. Set config.rag.sources or pass --source <glob>.\\n')\n        process.exit(1)\n      }\n      try {\n        const instance = buildRagFromConfig({ config: ragConfig })\n        const result = await indexSources(instance, ragConfig)\n        process.stdout.write(\n          `Indexed ${result.documentCount} document${result.documentCount === 1 ? '' : 's'}.\\n`,\n        )\n        for (const source of result.sources) {\n          process.stdout.write(`  • ${source}\\n`)\n        }\n      } catch (err) {\n        process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","import type { AgentSchema, AgentSchemaTool } from '@agentskit/core/agent-schema'\n\nexport interface ScaffoldFile {\n  path: string\n  content: string\n}\n\nfunction snakeToCamel(name: string): string {\n  return name.replace(/[-_](\\w)/g, (_, c: string) => c.toUpperCase())\n}\n\nfunction toolStub(tool: AgentSchemaTool): string {\n  const fnName = snakeToCamel(tool.name)\n  const schema = tool.schema ? JSON.stringify(tool.schema, null, 2) : '{ type: \"object\", properties: {} }'\n  return `import { defineTool } from '@agentskit/core'\n\n/**\n * ${tool.description ?? tool.name}\n * ${tool.implementation ? `\\n * Implementation hint: ${tool.implementation}` : ''}\n */\nexport const ${fnName} = defineTool({\n  name: '${tool.name}',\n  description: ${JSON.stringify(tool.description ?? '')},\n  schema: ${schema} as const,\n  ${tool.requiresConfirmation ? 'requiresConfirmation: true,' : ''}\n  async execute(args) {\n    // TODO: implement ${tool.name}\n    return { args }\n  },\n})\n`\n}\n\nfunction indexTs(schema: AgentSchema): string {\n  const toolImports = (schema.tools ?? [])\n    .map(t => `import { ${snakeToCamel(t.name)} } from './tools/${t.name}'`)\n    .join('\\n')\n  const toolList = (schema.tools ?? []).map(t => snakeToCamel(t.name)).join(', ')\n  return `import { createRuntime } from '@agentskit/runtime'\n${toolImports}\n\nexport const agent = {\n  name: '${schema.name}',\n  systemPrompt: ${JSON.stringify(schema.systemPrompt ?? '')},\n  tools: [${toolList}],\n}\n\nexport function createAgent(adapter: Parameters<typeof createRuntime>[0]['adapter']) {\n  return createRuntime({\n    adapter,\n    systemPrompt: agent.systemPrompt,\n    tools: agent.tools,\n  })\n}\n`\n}\n\nfunction readme(schema: AgentSchema): string {\n  const lines: string[] = []\n  lines.push(`# ${schema.name}`)\n  lines.push('')\n  if (schema.description) lines.push(schema.description, '')\n  lines.push(`## Model`)\n  lines.push('')\n  lines.push(`- Provider: \\`${schema.model.provider}\\``)\n  if (schema.model.model) lines.push(`- Model: \\`${schema.model.model}\\``)\n  lines.push('')\n  if (schema.tools && schema.tools.length > 0) {\n    lines.push('## Tools')\n    lines.push('')\n    for (const t of schema.tools) {\n      lines.push(`- \\`${t.name}\\` — ${t.description ?? ''}`)\n    }\n    lines.push('')\n  }\n  if (schema.skills && schema.skills.length > 0) {\n    lines.push('## Skills')\n    lines.push('')\n    for (const s of schema.skills) lines.push(`- ${s}`)\n    lines.push('')\n  }\n  lines.push('## Generated by')\n  lines.push('')\n  lines.push('`npx agentskit ai \"<description>\"`')\n  lines.push('')\n  return lines.join('\\n')\n}\n\n/**\n * Render an `AgentSchema` into the set of files a project needs:\n * `agent.json`, `agent.ts` (runtime wrapper), tool stubs, and a\n * README. Returns the files without touching disk — callers decide\n * where to write.\n */\nexport function scaffoldAgent(schema: AgentSchema): ScaffoldFile[] {\n  const files: ScaffoldFile[] = [\n    { path: 'agent.json', content: JSON.stringify(schema, null, 2) + '\\n' },\n    { path: 'agent.ts', content: indexTs(schema) },\n    { path: 'README.md', content: readme(schema) },\n  ]\n  for (const tool of schema.tools ?? []) {\n    files.push({ path: `tools/${tool.name}.ts`, content: toolStub(tool) })\n  }\n  return files\n}\n\nexport async function writeScaffold(\n  files: ScaffoldFile[],\n  outDir: string,\n  opts: { overwrite?: boolean } = {},\n): Promise<string[]> {\n  const { writeFile, mkdir, access } = await import('node:fs/promises')\n  const { dirname, join } = await import('node:path')\n  const written: string[] = []\n  for (const f of files) {\n    const full = join(outDir, f.path)\n    await mkdir(dirname(full), { recursive: true })\n    if (!opts.overwrite) {\n      try {\n        await access(full)\n        continue // skip existing\n      } catch {\n        // file does not exist — proceed\n      }\n    }\n    await writeFile(full, f.content, 'utf8')\n    written.push(f.path)\n  }\n  return written\n}\n","import type { AdapterFactory, AdapterRequest, Message } from '@agentskit/core'\nimport { validateAgentSchema, type AgentSchema } from '@agentskit/core/agent-schema'\n\nexport type AgentPlanner = (description: string) => Promise<AgentSchema>\n\nconst PLANNER_SYSTEM_PROMPT = `You design AI agents for the AgentsKit framework.\nGiven a user's plain-language description, return a single JSON object\nmatching the AgentsKit AgentSchema type. Do not include commentary or\nmarkdown fences — emit raw JSON only.\n\nSchema:\n{\n  \"name\": \"kebab-or-snake-case\",\n  \"description\": \"short summary\",\n  \"systemPrompt\": \"you are...\",\n  \"model\": { \"provider\": \"anthropic\"|\"openai\"|\"gemini\"|..., \"model\": \"...\" },\n  \"tools\": [{ \"name\": \"search\", \"description\": \"...\", \"schema\": {...}, \"implementation\": \"fetch('/api/search?q=...')\" }],\n  \"memory\": { \"kind\": \"inMemory\"|\"localStorage\", \"key\": \"...\" },\n  \"skills\": [\"researcher\", \"critic\"]\n}\n\nPrefer fewer well-scoped tools over many overlapping ones. Name tools\nin snake_case.`\n\nfunction extractJson(text: string): string {\n  const fenced = text.match(/```(?:json)?\\s*([\\s\\S]+?)```/)\n  const raw = fenced?.[1] ?? text\n  const start = raw.indexOf('{')\n  const end = raw.lastIndexOf('}')\n  if (start < 0 || end <= start) throw new Error('Planner response did not contain a JSON object')\n  return raw.slice(start, end + 1)\n}\n\n/**\n * Turn an `AdapterFactory` into an `AgentPlanner`. The planner drives\n * the model with a fixed system prompt that asks for a JSON AgentSchema,\n * then validates the result.\n */\nexport function createAdapterPlanner(adapter: AdapterFactory): AgentPlanner {\n  return async (description: string) => {\n    const messages: Message[] = [\n      { id: 'sys', role: 'system', content: PLANNER_SYSTEM_PROMPT, status: 'complete', createdAt: new Date(0) },\n      { id: 'user', role: 'user', content: description, status: 'complete', createdAt: new Date(0) },\n    ]\n    const request: AdapterRequest = { messages, context: { temperature: 0 } }\n    const source = adapter.createSource(request)\n    let text = ''\n    for await (const chunk of source.stream()) {\n      if (chunk.type === 'text' && chunk.content) text += chunk.content\n    }\n    const json = extractJson(text)\n    return validateAgentSchema(JSON.parse(json))\n  }\n}\n","import type { Command } from 'commander'\nimport { writeScaffold, scaffoldAgent, createAdapterPlanner } from '../ai'\nimport { resolveChatProvider } from '../providers'\n\nexport function registerAiCommand(program: Command): void {\n  program\n    .command('ai <description...>')\n    .description('Generate an agent (config + tools + skill wiring) from a natural-language description.')\n    .option('-o, --out <dir>', 'Output directory', './my-agent')\n    .option('--provider <provider>', 'Planner provider (openai | anthropic | ...)', 'anthropic')\n    .option('--model <model>', 'Planner model id')\n    .option('--api-key <key>', 'API key (falls back to env)')\n    .option('--base-url <url>', 'Override base URL (for OpenAI-compatible endpoints)')\n    .option('--overwrite', 'Overwrite existing files', false)\n    .option('--dry-run', 'Print the plan + files without writing', false)\n    .action(async (descriptionWords: string[], options) => {\n      const description = descriptionWords.join(' ').trim()\n      if (!description) {\n        process.stderr.write('agentskit ai: missing description.\\n')\n        process.exit(1)\n      }\n\n      const resolved = resolveChatProvider({\n        provider: options.provider,\n        model: options.model,\n        apiKey: options.apiKey,\n        baseUrl: options.baseUrl,\n      })\n      const planner = createAdapterPlanner(resolved.adapter)\n\n      process.stderr.write(`Planning agent for: \"${description}\"\\n`)\n      const schema = await planner(description)\n      const files = scaffoldAgent(schema)\n\n      if (options.dryRun) {\n        process.stdout.write(JSON.stringify({ schema, files: files.map(f => f.path) }, null, 2) + '\\n')\n        return\n      }\n\n      const written = await writeScaffold(files, options.out, { overwrite: options.overwrite })\n      process.stderr.write(`Wrote ${written.length} file(s) to ${options.out}\\n`)\n      for (const f of written) process.stderr.write(`  + ${f}\\n`)\n    })\n}\n","/**\n * `agentskit flow` — visual YAML editor for durable DAGs.\n *\n * Subcommands:\n *   • `validate <file>` — parse the YAML/JSON, type-check the DAG, report\n *     duplicate ids, missing handlers, unknown deps, and cycles.\n *   • `render <file>`   — emit a Mermaid `flowchart TD` to stdout. The\n *     visual editor's preview pane consumes the same output.\n *   • `run <file>`      — compile + execute. Handler registry is loaded\n *     from `--registry <module>`; the module's default export must be a\n *     `FlowRegistry`. With `--store <path>`, the durable step log is\n *     persisted as JSONL — pass the same `--run-id` to resume.\n */\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve as resolvePath } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { parse as parseYaml } from 'yaml'\nimport type { Command } from 'commander'\nimport {\n  compileFlow,\n  createFileStepLog,\n  flowToMermaid,\n  validateFlow,\n  type FlowDefinition,\n  type FlowRegistry,\n  type FlowRunEvent,\n  type StepLogStore,\n} from '@agentskit/runtime'\n\nasync function loadDefinition(file: string): Promise<FlowDefinition> {\n  const raw = await readFile(resolvePath(file), 'utf8')\n  const parsed = file.endsWith('.json') ? JSON.parse(raw) : parseYaml(raw)\n  if (!parsed || typeof parsed !== 'object') throw new Error('flow file must be an object')\n  const def = parsed as FlowDefinition\n  if (!def.name || !Array.isArray(def.nodes)) {\n    throw new Error('flow file must have `name` and `nodes[]`')\n  }\n  return def\n}\n\nasync function loadRegistry(modulePath: string): Promise<FlowRegistry> {\n  const url = pathToFileURL(resolvePath(modulePath)).href\n  const mod = (await import(url)) as { default?: FlowRegistry; registry?: FlowRegistry }\n  const registry = mod.default ?? mod.registry\n  if (!registry || typeof registry !== 'object') {\n    throw new Error(`registry module \"${modulePath}\" must default-export a FlowRegistry`)\n  }\n  return registry\n}\n\nexport function registerFlowCommand(program: Command): void {\n  const flow = program.command('flow').description('Compile and run visual YAML flows as durable DAGs.')\n\n  flow\n    .command('validate <file>')\n    .description('Type-check a flow file: ids, handlers (when --registry given), deps, cycles.')\n    .option('--registry <module>', 'JS/TS module exporting FlowRegistry as default')\n    .action(async (file: string, options: { registry?: string }) => {\n      try {\n        const def = await loadDefinition(file)\n        const registry = options.registry ? await loadRegistry(options.registry) : undefined\n        const result = validateFlow(def, registry)\n        if (result.ok) {\n          process.stdout.write(`flow \"${def.name}\" ok — ${result.order.length} node(s), order: ${result.order.join(' → ')}\\n`)\n          return\n        }\n        for (const issue of result.issues) {\n          process.stderr.write(`  ✗ [${issue.code}] ${issue.message}\\n`)\n        }\n        process.exit(1)\n      } catch (err) {\n        process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n\n  flow\n    .command('render <file>')\n    .description('Emit a Mermaid flowchart for the flow.')\n    .action(async (file: string) => {\n      try {\n        const def = await loadDefinition(file)\n        process.stdout.write(flowToMermaid(def) + '\\n')\n      } catch (err) {\n        process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n\n  flow\n    .command('run <file>')\n    .description('Compile and execute a flow with a handler registry.')\n    .requiredOption('--registry <module>', 'JS/TS module exporting FlowRegistry as default')\n    .option('--input <json>', 'JSON string passed to handlers as ctx.input')\n    .option('--store <path>', 'Persist durable step log as JSONL at <path>')\n    .option('--run-id <id>', 'Resume a previous run by reusing its id')\n    .option('--max-attempts <n>', 'Retries per node (default 1)', '1')\n    .option('--retry-delay <ms>', 'Delay between attempts in ms', '0')\n    .option('--verbose', 'Stream node events to stderr')\n    .action(async (file: string, options: {\n      registry: string\n      input?: string\n      store?: string\n      runId?: string\n      maxAttempts: string\n      retryDelay: string\n      verbose?: boolean\n    }) => {\n      try {\n        const def = await loadDefinition(file)\n        const registry = await loadRegistry(options.registry)\n        const compiled = compileFlow({ definition: def, registry })\n        const input = options.input ? JSON.parse(options.input) : undefined\n        const store: StepLogStore | undefined = options.store\n          ? await createFileStepLog(resolvePath(options.store))\n          : undefined\n        const onEvent = options.verbose\n          ? (e: FlowRunEvent) => process.stderr.write(JSON.stringify(e) + '\\n')\n          : undefined\n        const outputs = await compiled.run(input, {\n          runId: options.runId,\n          store,\n          maxAttempts: Number(options.maxAttempts),\n          retryDelayMs: Number(options.retryDelay),\n          onEvent,\n        })\n        process.stdout.write(JSON.stringify(outputs, null, 2) + '\\n')\n      } catch (err) {\n        process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { validatePIITaxonomy, type TaxonomyValidationResult } from '@agentskit/core/security'\n\nexport interface LintReport {\n  file: string\n  result: TaxonomyValidationResult\n  ruleCount: number\n}\n\nexport function lintTaxonomyFile(filePath: string): LintReport {\n  const absolute = resolve(filePath)\n  let raw: string\n  try {\n    raw = readFileSync(absolute, 'utf8')\n  } catch (err) {\n    return {\n      file: absolute,\n      ruleCount: 0,\n      result: {\n        ok: false,\n        issues: [{ index: -1, path: '', message: `cannot read file: ${(err as Error).message}` }],\n      },\n    }\n  }\n\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch (err) {\n    return {\n      file: absolute,\n      ruleCount: 0,\n      result: {\n        ok: false,\n        issues: [{ index: -1, path: '', message: `invalid JSON: ${(err as Error).message}` }],\n      },\n    }\n  }\n\n  const result = validatePIITaxonomy(parsed)\n  const ruleCount =\n    parsed && typeof parsed === 'object' && Array.isArray((parsed as { rules?: unknown }).rules)\n      ? ((parsed as { rules: unknown[] }).rules.length)\n      : 0\n  return { file: absolute, result, ruleCount }\n}\n\nexport function renderLintReport(report: LintReport, opts: { color?: boolean } = {}): string {\n  const { color = false } = opts\n  const red = (s: string) => (color ? `\u001b[31m${s}\u001b[0m` : s)\n  const green = (s: string) => (color ? `\u001b[32m${s}\u001b[0m` : s)\n  const dim = (s: string) => (color ? `\u001b[2m${s}\u001b[0m` : s)\n\n  const lines: string[] = []\n  lines.push(dim(report.file))\n  if (report.result.ok) {\n    lines.push(green(`✓ valid · ${report.ruleCount} rule${report.ruleCount === 1 ? '' : 's'}`))\n  } else {\n    lines.push(red(`✗ ${report.result.issues.length} issue${report.result.issues.length === 1 ? '' : 's'}`))\n    for (const issue of report.result.issues) {\n      lines.push(`  ${red('•')} ${issue.path || '<root>'}: ${issue.message}`)\n    }\n  }\n  return `${lines.join('\\n')}\\n`\n}\n","import type { Command } from 'commander'\nimport { lintTaxonomyFile, renderLintReport } from '../pii'\n\nexport function registerPiiCommand(program: Command): void {\n  const pii = program\n    .command('pii')\n    .description('Inspect and validate PII taxonomies.')\n\n  pii\n    .command('lint <file...>')\n    .description('Validate one or more PII taxonomy JSON files.')\n    .option('--json', 'Emit JSON instead of formatted output')\n    .action((files: string[], options: { json?: boolean }) => {\n      const reports = files.map(lintTaxonomyFile)\n      const failed = reports.filter(r => !r.result.ok).length\n\n      if (options.json) {\n        process.stdout.write(JSON.stringify(reports, null, 2) + '\\n')\n      } else {\n        for (const report of reports) {\n          process.stdout.write(renderLintReport(report, { color: process.stdout.isTTY }))\n        }\n        if (failed > 0) {\n          process.stderr.write(`\\n${failed} of ${reports.length} taxonomy file${reports.length === 1 ? '' : 's'} failed validation\\n`)\n        }\n      }\n\n      if (failed > 0) process.exit(1)\n    })\n}\n","/**\n * Cursor `.cursor/rules/agentskit.mdc` — applied to every file in the\n * workspace. Teaches Cursor the AgentsKit conventions so generated\n * code respects named-export-only, package boundaries, and the\n * for-agents/* manifest without extra prompting.\n */\nexport const CURSOR_RULE = `---\ndescription: AgentsKit conventions — apply to every file in this workspace\nglobs: [\"**/*.ts\", \"**/*.tsx\"]\nalwaysApply: true\n---\n\n# AgentsKit project rules\n\nWhen writing or editing TypeScript in this workspace, follow these rules. They\nare non-negotiable and enforced by CI.\n\n## Imports\n\n- Use **named exports only**. No \\`export default\\`.\n- Import from package roots: \\`@agentskit/core\\`, \\`@agentskit/runtime\\`, \\`@agentskit/react\\`,\n  \\`@agentskit/ink\\`, \\`@agentskit/adapters\\`, \\`@agentskit/tools\\`, \\`@agentskit/skills\\`,\n  \\`@agentskit/memory\\`, \\`@agentskit/rag\\`, \\`@agentskit/observability\\`, \\`@agentskit/eval\\`,\n  \\`@agentskit/sandbox\\`, \\`@agentskit/cli\\`, \\`@agentskit/templates\\`.\n- For tools subpaths, use \\`@agentskit/tools/integrations\\`, \\`@agentskit/tools/mcp\\`,\n  \\`@agentskit/tools/mcp-devtools\\`.\n\n## Types\n\n- TypeScript strict mode is on. **Do not use \\`any\\`** — use \\`unknown\\` and narrow.\n- Headless React components: no hardcoded styles, use \\`data-ak-*\\` attributes.\n\n## Errors\n\n- Never \\`throw new Error(...)\\` inside package source. Use the typed errors from\n  \\`@agentskit/core\\`: \\`AdapterError\\`, \\`ToolError\\`, \\`MemoryError\\`, \\`RuntimeError\\`,\n  \\`SandboxError\\`, \\`SkillError\\`, \\`ConfigError\\`. Pair with \\`ErrorCodes.<...>\\`.\n\n## Tests\n\n- vitest. Place tests under \\`packages/<pkg>/tests/\\` mirroring \\`src/\\`.\n- E2E lives in \\`apps/example-*\\` with Playwright.\n\n## Versioning\n\n- Every PR with a behavior change requires a Changeset (\\`pnpm changeset\\`).\n\n## Where to look first\n\n- Architecture, contracts, ADRs: \\`docs/architecture/adrs/\\`\n- Per-package conventions: \\`packages/<pkg>/CONVENTIONS.md\\`\n- Agent-facing index: \\`AGENTS.md\\` and \\`apps/docs-next/content/docs/for-agents/\\`\n`\n","/**\n * Windsurf `.windsurfrules` — plain markdown loaded into Cascade's\n * context for every chat in this workspace.\n */\nexport const WINDSURF_RULE = `# AgentsKit project rules (read first)\n\nThis workspace builds AgentsKit — a JavaScript agent toolkit with a 10 KB core,\nsix formal contracts, and ~19 plug-and-play packages. When generating or\nediting code, follow these rules — they are enforced by CI.\n\n## Imports\n- **Named exports only.** No \\`export default\\`.\n- Import from package roots (\\`@agentskit/core\\`, \\`@agentskit/runtime\\`, \\`@agentskit/react\\`, etc.).\n- Tools subpaths: \\`@agentskit/tools/integrations\\`, \\`@agentskit/tools/mcp\\`, \\`@agentskit/tools/mcp-devtools\\`.\n\n## Types\n- Strict mode TypeScript. **No \\`any\\`** — use \\`unknown\\` and narrow.\n\n## Errors\n- **Do not** \\`throw new Error(...)\\` in package source. Use \\`AdapterError\\` /\n  \\`ToolError\\` / \\`MemoryError\\` / \\`RuntimeError\\` / \\`SandboxError\\` / \\`SkillError\\` /\n  \\`ConfigError\\` from \\`@agentskit/core\\`, paired with \\`ErrorCodes\\`.\n\n## Tests\n- vitest. Tests live in \\`packages/<pkg>/tests/\\` mirroring \\`src/\\`.\n- E2E lives in \\`apps/example-*\\` with Playwright.\n\n## Versioning\n- Every behavior change needs a Changeset (\\`pnpm changeset\\`).\n\n## Read first\n- \\`AGENTS.md\\` — universal agent guidance\n- \\`apps/docs-next/content/docs/for-agents/\\` — per-package agent docs\n- \\`docs/architecture/adrs/\\` — six core contracts (Adapter, Tool, Memory, Retriever, Skill, Runtime)\n- \\`packages/<pkg>/CONVENTIONS.md\\` — per-package contribution rules\n`\n","/**\n * Codex / Aider profile block — appended to the existing AGENTS.md\n * via `agentskit rules codex`. Codex and Aider both read AGENTS.md\n * but benefit from a structured profile listing the test runner,\n * allowed commands, and recommended models.\n */\nexport const CODEX_PROFILE = `<!-- agentskit-codex-profile:start -->\n## Codex / Aider profile\n\nStructured hints for CLI coding agents (OpenAI Codex, Aider, Claude Code,\nCursor) running against this workspace. Update via \\`agentskit rules codex\\`.\n\n\\`\\`\\`yaml\n# AgentsKit Codex profile v1\nprofile: agentskit\nruntime: node-25\npackage_manager: pnpm\ntest_runner: vitest\nbuild_runner: turborepo\n\nallowed_commands:\n  - pnpm install\n  - pnpm build\n  - pnpm test\n  - pnpm lint\n  - pnpm changeset\n  - pnpm --filter @agentskit/* test\n  - pnpm --filter @agentskit/* lint\n  - pnpm --filter @agentskit/* build\n\nrestricted_paths:\n  - packages/core/src/errors.ts        # Touch carefully — every package depends on the typed errors here.\n  - packages/core/src/security/        # Security-sensitive — small surface, requires review.\n  - docs/architecture/adrs/            # Contract changes need a new ADR + major bump.\n\nmodels_recommended:\n  - claude-sonnet-4-6                  # Default — long context, fast.\n  - gpt-5                              # Strong reasoning for refactors / cross-package work.\n  - claude-opus-4-7                    # Heavy refactors, contract redesigns.\n\ninvariants:\n  core_max_kb_gzip: 10\n  no_default_exports: true\n  strict_typescript: true\n  no_bare_throw_new_error: true\n  named_exports_only: true\n  changeset_required_for_behavior_changes: true\n\nread_first:\n  - AGENTS.md\n  - apps/docs-next/content/docs/for-agents/\n  - docs/architecture/adrs/\n\\`\\`\\`\n<!-- agentskit-codex-profile:end -->\n`\n","/**\n * Claude Code outputs split into two distinct surfaces:\n *\n *  - **Skill bundle** at `.claude/skills/agentskit/SKILL.md` — the\n *    Anthropic skill-spec file. Skills don't auto-register slash\n *    commands; they shape the conceptual capability the agent picks\n *    up when relevant.\n *\n *  - **Project-scoped slash commands** at `.claude/commands/*.md` —\n *    the actual `/<name>` invocations Claude Code surfaces in the\n *    palette. These live alongside (not inside) the skill bundle.\n *\n * Both are real Claude Code conventions; they live at different paths\n * and serve different purposes. Bundling slash commands inside a skill\n * folder (as an earlier draft did) silently produces files Claude\n * Code never reads.\n */\n\nexport interface ClaudeCodeFile {\n  /** Path relative to the surface root. */\n  path: string\n  contents: string\n}\n\nexport const CLAUDE_CODE_SKILL: ClaudeCodeFile[] = [\n  {\n    path: 'SKILL.md',\n    contents: `---\nname: agentskit\ndescription: Scaffold AgentsKit projects, add tools/skills, run doctor, and inspect the runtime — wraps the agentskit CLI.\n---\n\n# AgentsKit\n\nSkill bundle for working with the AgentsKit toolkit from inside Claude Code.\n\nPair this skill with the project-scoped slash commands at \\`.claude/commands/agentskit-*.md\\`:\n\n- \\`/agentskit-new-agent\\` — interactive scaffold (\\`agentskit init\\`)\n- \\`/agentskit-doctor\\` — diagnose the local environment (\\`agentskit doctor\\`)\n- \\`/agentskit-add-tool\\` — add a tool integration template\n- \\`/agentskit-add-skill\\` — add a skill template\n- \\`/agentskit-lint-pii\\` — validate a PII taxonomy file\n- \\`/agentskit-rules\\` — write \\`.cursor/rules\\` / \\`.windsurfrules\\` / Codex profile\n\nWhen the user is inside an AgentsKit workspace, prefer the slash commands over\nhand-rolling shell invocations — they share the canonical defaults.\n\nFor convention reminders (named exports only, no bare throw, etc.), read\n\\`AGENTS.md\\` at the workspace root.\n`,\n  },\n]\n\nexport const CLAUDE_CODE_SLASH_COMMANDS: ClaudeCodeFile[] = [\n  {\n    path: 'agentskit-new-agent.md',\n    contents: `---\ndescription: Scaffold a new AgentsKit project (interactive)\nallowed-tools: Bash(npx agentskit init:*)\n---\n\nRun \\`npx @agentskit/cli init\\` interactively in the user's chosen directory.\nAfter scaffold completes, summarise the layout (templates created, next\ncommands the user should run).\n`,\n  },\n  {\n    path: 'agentskit-doctor.md',\n    contents: `---\ndescription: Run the AgentsKit environment doctor and summarise findings\nallowed-tools: Bash(npx agentskit doctor:*)\n---\n\nRun \\`npx @agentskit/cli doctor\\` in the workspace root. Format the output\ninto pass / warn / fail buckets and propose a fix for each fail / warn.\n`,\n  },\n  {\n    path: 'agentskit-add-tool.md',\n    contents: `---\ndescription: Add a tool template to the current package\n---\n\nAsk the user which tool to add. Use \\`packages/templates/src/blueprints/tool.ts\\`\nto scaffold the file under \\`packages/<pkg>/src/tools/\\`. Update the package's\n\\`src/index.ts\\` to re-export the new tool. Add a vitest mock test under\n\\`packages/<pkg>/tests/\\`.\n`,\n  },\n  {\n    path: 'agentskit-add-skill.md',\n    contents: `---\ndescription: Add a skill template to @agentskit/skills\n---\n\nUse \\`packages/templates/src/blueprints/skill.ts\\` to scaffold a new skill\nunder \\`packages/skills/src/\\`. Re-export from the package index. Add a\ngolden-dataset test fixture under \\`packages/skills/tests/\\` (10–50 input/\nexpected examples, per the conventions).\n`,\n  },\n  {\n    path: 'agentskit-lint-pii.md',\n    contents: `---\ndescription: Validate a PII taxonomy JSON file\nallowed-tools: Bash(npx agentskit pii lint:*)\n---\n\nAsk the user for a path. Run \\`npx @agentskit/cli pii lint <path>\\` and\ndisplay the report. If issues exist, suggest concrete fixes per the\nissue messages.\n`,\n  },\n  {\n    path: 'agentskit-rules.md',\n    contents: `---\ndescription: Write editor rule files (Cursor / Windsurf / Codex / Claude Code)\nallowed-tools: Bash(npx agentskit rules:*)\n---\n\nAsk which editor (or \"all\"). Run the matching:\n- \\`npx @agentskit/cli rules cursor\\`\n- \\`npx @agentskit/cli rules windsurf\\`\n- \\`npx @agentskit/cli rules codex\\`\n- \\`npx @agentskit/cli rules claude-code\\`\n\nAfter writing, summarise which files landed and what each one does.\n`,\n  },\n]\n","import { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\nimport { ConfigError, ErrorCodes } from '@agentskit/core'\nimport { CURSOR_RULE } from './rules/cursor'\nimport { WINDSURF_RULE } from './rules/windsurf'\nimport { CODEX_PROFILE } from './rules/codex'\nimport { CLAUDE_CODE_SKILL, CLAUDE_CODE_SLASH_COMMANDS } from './rules/claude-code'\n\nexport type Editor = 'cursor' | 'windsurf' | 'codex' | 'claude-code' | 'all'\n\nexport interface RulesWriteResult {\n  editor: Editor\n  files: Array<{ path: string; action: 'wrote' | 'skipped' | 'updated' }>\n}\n\nconst CODEX_BLOCK_START = '<!-- agentskit-codex-profile:start -->'\nconst CODEX_BLOCK_END = '<!-- agentskit-codex-profile:end -->'\n\nasync function ensureDir(path: string): Promise<void> {\n  await mkdir(dirname(path), { recursive: true })\n}\n\nasync function writeIfChanged(\n  absPath: string,\n  contents: string,\n  force: boolean,\n): Promise<'wrote' | 'skipped' | 'updated'> {\n  let existing: string | undefined\n  try {\n    existing = await readFile(absPath, 'utf8')\n  } catch {\n    // not present\n  }\n  if (existing === contents) return 'skipped'\n  if (existing !== undefined && !force) {\n    // Append-or-update flow handled by callers that need it; default\n    // here is to overwrite when contents differ AND force is on.\n    return 'skipped'\n  }\n  await ensureDir(absPath)\n  await writeFile(absPath, contents, 'utf8')\n  return existing === undefined ? 'wrote' : 'updated'\n}\n\nasync function writeCursor(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n  const path = join(rootDir, '.cursor', 'rules', 'agentskit.mdc')\n  const action = await writeIfChanged(path, CURSOR_RULE, force)\n  return [{ path, action }]\n}\n\nasync function writeWindsurf(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n  const path = join(rootDir, '.windsurfrules')\n  const action = await writeIfChanged(path, WINDSURF_RULE, force)\n  return [{ path, action }]\n}\n\n/**\n * Codex profile is appended to the existing AGENTS.md, replacing any\n * previous profile block delimited by the sentinel comments. If\n * AGENTS.md does not exist, write it with just the profile (deployers\n * are expected to add the rest of the universal-agent guidance).\n *\n * Sentinel parsing rules:\n *  - Search the END sentinel only AFTER the START sentinel — prevents\n *    a stray `:end -->` inside YAML content from pulling the slice to\n *    the wrong position.\n *  - Find the LAST end after the start so a duplicate-paste of the\n *    block collapses into one rather than half-overwriting.\n *  - Refuse to modify if a START sentinel is present without any END\n *    after it (file truncated mid-block) — the user has hand-edited\n *    something we don't understand and we should not append on top.\n *  - Require --force for ANY write to a populated AGENTS.md (in-place\n *    block update OR first-time append). AGENTS.md is load-bearing\n *    and every codex run on a populated one must be opt-in.\n */\nasync function writeCodex(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n  const path = join(rootDir, 'AGENTS.md')\n  let existing = ''\n  try {\n    existing = await readFile(path, 'utf8')\n  } catch {\n    // not present — write a fresh AGENTS.md with just the profile.\n  }\n  const startIdx = existing.indexOf(CODEX_BLOCK_START)\n  const endIdx =\n    startIdx >= 0\n      ? existing.lastIndexOf(CODEX_BLOCK_END, existing.length)\n      : -1\n  if (startIdx >= 0 && endIdx <= startIdx) {\n    throw new ConfigError({\n      code: ErrorCodes.AK_CONFIG_INVALID,\n      message: `${path}: found agentskit-codex-profile:start sentinel but no matching :end after it — refusing to modify a half-edited block.`,\n      hint: 'Restore the closing sentinel or remove the partial block, then re-run.',\n    })\n  }\n  let next: string\n  if (startIdx >= 0 && endIdx > startIdx) {\n    next =\n      existing.slice(0, startIdx) +\n      CODEX_PROFILE.trimEnd() +\n      existing.slice(endIdx + CODEX_BLOCK_END.length)\n  } else if (existing) {\n    next = `${existing.replace(/\\s+$/, '')}\\n\\n${CODEX_PROFILE}`\n  } else {\n    next = CODEX_PROFILE\n  }\n  if (next === existing) return [{ path, action: 'skipped' }]\n  if (existing && !force) {\n    return [{ path, action: 'skipped' }]\n  }\n  await ensureDir(path)\n  await writeFile(path, next, 'utf8')\n  return [{ path, action: existing ? 'updated' : 'wrote' }]\n}\n\nasync function writeClaudeCode(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n  const out: RulesWriteResult['files'] = []\n  // Skill bundle (.claude/skills/<name>/SKILL.md) — Claude Code skill format.\n  const skillRoot = join(rootDir, '.claude', 'skills', 'agentskit')\n  for (const file of CLAUDE_CODE_SKILL) {\n    const abs = join(skillRoot, file.path)\n    const action = await writeIfChanged(abs, file.contents, force)\n    out.push({ path: abs, action })\n  }\n  // Project-scoped slash commands (.claude/commands/*.md) — Claude Code's\n  // actual location for `/<name>` invocations. Skill bundles do not\n  // register slash commands automatically; the two surfaces are separate.\n  const commandsRoot = join(rootDir, '.claude', 'commands')\n  for (const cmd of CLAUDE_CODE_SLASH_COMMANDS) {\n    const abs = join(commandsRoot, cmd.path)\n    const action = await writeIfChanged(abs, cmd.contents, force)\n    out.push({ path: abs, action })\n  }\n  return out\n}\n\nexport async function writeRules(\n  editor: Editor,\n  options: { rootDir?: string; force?: boolean } = {},\n): Promise<RulesWriteResult[]> {\n  const root = resolve(options.rootDir ?? process.cwd())\n  const force = options.force === true\n  if (editor === 'all') {\n    return [\n      { editor: 'cursor', files: await writeCursor(root, force) },\n      { editor: 'windsurf', files: await writeWindsurf(root, force) },\n      { editor: 'codex', files: await writeCodex(root, force) },\n      { editor: 'claude-code', files: await writeClaudeCode(root, force) },\n    ]\n  }\n  switch (editor) {\n    case 'cursor':\n      return [{ editor, files: await writeCursor(root, force) }]\n    case 'windsurf':\n      return [{ editor, files: await writeWindsurf(root, force) }]\n    case 'codex':\n      return [{ editor, files: await writeCodex(root, force) }]\n    case 'claude-code':\n      return [{ editor, files: await writeClaudeCode(root, force) }]\n  }\n}\n","import type { Command } from 'commander'\nimport { writeRules, type Editor } from '../rules'\n\nconst VALID: Editor[] = ['cursor', 'windsurf', 'codex', 'claude-code', 'all']\n\nexport function registerRulesCommand(program: Command): void {\n  program\n    .command('rules <editor>')\n    .description(\n      'Write editor rule files (cursor | windsurf | codex | claude-code | all). Teaches the editor AgentsKit conventions so generated code respects named-export-only, package boundaries, and the for-agents/* manifest.',\n    )\n    .option('--out <dir>', 'Workspace root to write files into (default: cwd)')\n    .option('-f, --force', 'Overwrite existing rule files (codex / claude-code skill always update in place)')\n    .action(async (editor: string, options: { out?: string; force?: boolean }) => {\n      if (!(VALID as string[]).includes(editor)) {\n        process.stderr.write(`unknown editor \"${editor}\". Valid: ${VALID.join(', ')}\\n`)\n        process.exit(1)\n      }\n      try {\n        const results = await writeRules(editor as Editor, {\n          rootDir: options.out,\n          force: options.force === true,\n        })\n        const counts = { wrote: 0, updated: 0, skipped: 0 }\n        for (const { editor: ed, files } of results) {\n          process.stdout.write(`\\n[${ed}]\\n`)\n          for (const f of files) {\n            counts[f.action]++\n            process.stdout.write(`  ${f.action.padEnd(7)} ${f.path}\\n`)\n          }\n        }\n        process.stdout.write(\n          `\\nDone — ${counts.wrote} wrote, ${counts.updated} updated, ${counts.skipped} skipped.\\n`,\n        )\n        if (counts.skipped > 0 && options.force !== true) {\n          process.stdout.write(`(re-run with --force to overwrite skipped files)\\n`)\n        }\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err)\n        process.stderr.write(`\\nrules failed: ${message}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","/**\n * AgentsKit Registry client — fetches ready-made agents from the registry and\n * copies their source into the user's project (shadcn-style; the user owns the\n * code). Sources, in order:\n *   1. Hosted index   — https://registry.agentskit.io/r/<id>.json (meta + inlined sources)\n *   2. Raw GitHub      — the registry repo's registry/<id>/ files (works before hosting is live)\n */\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\n\nconst RAW_BASE = 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/main'\n// The committed, prebuilt index (fast path) — served straight from the repo, no\n// separate deploy. Falls back to walking the agent source below.\nconst HOSTED_BASE = `${RAW_BASE}/public/r`\n\nexport interface RegistryEnvVar {\n  name: string\n  description: string\n  required?: boolean\n}\n\nexport interface RegistryFile {\n  path: string\n  content: string\n}\n\nexport interface RegistryAgent {\n  id: string\n  title: string\n  description: string\n  category: string\n  packages: string[]\n  env?: RegistryEnvVar[]\n  files: string[]\n  sources: RegistryFile[]\n  /** draft agents are catalog-only until promoted to validated. */\n  status?: 'draft' | 'alpha' | 'validated' | 'deprecated'\n  installable?: boolean\n  /** Inline skill for `--run` (data only). Null for agents that compose tools. */\n  skill?: RegistrySkill | null\n}\n\nexport interface RegistrySkill {\n  name: string\n  description: string\n  systemPrompt: string\n}\n\nexport interface FetchOptions {\n  /** Injectable fetch (tests). Defaults to global fetch. */\n  fetchImpl?: typeof fetch\n}\n\nasync function getJson(url: string, fetchImpl: typeof fetch): Promise<unknown> {\n  const res = await fetchImpl(url)\n  if (!res.ok) throw new Error(`${res.status} ${res.statusText}`)\n  return res.json()\n}\n\nasync function getText(url: string, fetchImpl: typeof fetch): Promise<string> {\n  const res = await fetchImpl(url)\n  if (!res.ok) throw new Error(`${res.status} ${res.statusText}`)\n  return res.text()\n}\n\n/** Fetch an agent descriptor with inlined file sources, hosted first then raw GitHub. */\nexport async function fetchAgent(id: string, options: FetchOptions = {}): Promise<RegistryAgent> {\n  const fetchImpl = options.fetchImpl ?? globalThis.fetch\n  try {\n    const hosted = (await getJson(`${HOSTED_BASE}/${id}.json`, fetchImpl)) as RegistryAgent\n    if (hosted?.sources?.length) return hosted\n    throw new Error('hosted entry missing sources')\n  } catch {\n    // Fallback: read the repo source directly (no hosting required).\n    const meta = (await getJson(`${RAW_BASE}/registry/${id}/meta.json`, fetchImpl)) as Omit<\n      RegistryAgent,\n      'sources'\n    >\n    const sources = await Promise.all(\n      meta.files.map(async (rel) => ({\n        path: rel,\n        content: await getText(`${RAW_BASE}/registry/${id}/${rel}`, fetchImpl),\n      })),\n    )\n    return { ...meta, sources }\n  }\n}\n\n/**\n * Resolve an agent's runnable systemPrompt — from the hosted `skill` field, or\n * by extracting the inline skill from the fetched `agent.ts` source (raw-GitHub\n * fallback). Returns null for tool-composing agents (no inline prompt).\n */\nexport function resolveSystemPrompt(agent: RegistryAgent): string | null {\n  if (agent.skill?.systemPrompt) return agent.skill.systemPrompt\n  const src = agent.sources.find((f) => f.path === 'agent.ts')?.content\n  if (!src) return null\n  const m = src.match(/systemPrompt:\\s*`((?:\\\\.|[^`\\\\])*)`/)\n  return m ? m[1].replace(/\\\\`/g, '`').replace(/\\\\\\$\\{/g, '${') : null\n}\n\nexport interface AddOptions extends FetchOptions {\n  /** Directory to write the agent into. Default `./agents`. */\n  outDir?: string\n  /** Overwrite existing files. Default false. */\n  force?: boolean\n  /** Injectable writer (tests). */\n  writeFileImpl?: (path: string, content: string) => Promise<void>\n  /** Injectable existence check (tests). */\n  existsImpl?: (path: string) => Promise<boolean>\n}\n\nexport interface AddResult {\n  agent: RegistryAgent\n  written: string[]\n  targetDir: string\n}\n\nasync function defaultExists(path: string): Promise<boolean> {\n  const { access } = await import('node:fs/promises')\n  try {\n    await access(path)\n    return true\n  } catch {\n    return false\n  }\n}\n\nfunction assertInstallable(agent: RegistryAgent): void {\n  if (agent.status === 'draft' || agent.installable === false) {\n    throw new Error(\n      `\"${agent.id}\" is a catalog draft — not installable yet. ` +\n        `Browse the roadmap at https://registry.agentskit.io/r/catalog.json`,\n    )\n  }\n  if (agent.status === 'alpha') {\n    console.warn(`[agentskit] \"${agent.id}\" is alpha — experimental; review before production use.`)\n  }\n  if (agent.status === 'deprecated') {\n    throw new Error(`\"${agent.id}\" is deprecated and no longer installable from the registry.`)\n  }\n}\n\n/** Fetch an agent and write its source files into the project. */\nexport async function addAgent(id: string, options: AddOptions = {}): Promise<AddResult> {\n  const agent = await fetchAgent(id, options)\n  assertInstallable(agent)\n  const baseDir = options.outDir ?? 'agents'\n  const targetDir = join(baseDir, id)\n  const exists = options.existsImpl ?? defaultExists\n  const write =\n    options.writeFileImpl ??\n    (async (path: string, content: string) => {\n      await mkdir(dirname(path), { recursive: true })\n      await writeFile(path, content, 'utf8')\n    })\n\n  const written: string[] = []\n  for (const file of agent.sources) {\n    const dest = join(targetDir, file.path)\n    if (!options.force && (await exists(dest))) {\n      throw new Error(`${dest} already exists (re-run with --force to overwrite)`)\n    }\n    await write(dest, file.content)\n    written.push(dest)\n  }\n  return { agent, written, targetDir }\n}\n\n// ---------------------------------------------------------------------------\n// diff / update — keep a copied agent in sync with the registry (shadcn-style)\n// ---------------------------------------------------------------------------\n\nexport type DiffLine = { type: ' ' | '-' | '+'; text: string }\n\n/** Minimal line-level diff (LCS) — no dependency. */\nexport function lineDiff(a: string, b: string): DiffLine[] {\n  const x = a.split('\\n')\n  const y = b.split('\\n')\n  const m = x.length\n  const n = y.length\n  const lcs: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0))\n  for (let i = m - 1; i >= 0; i--) {\n    for (let j = n - 1; j >= 0; j--) {\n      lcs[i][j] = x[i] === y[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1])\n    }\n  }\n  const out: DiffLine[] = []\n  let i = 0\n  let j = 0\n  while (i < m && j < n) {\n    if (x[i] === y[j]) {\n      out.push({ type: ' ', text: x[i] })\n      i++\n      j++\n    } else if (lcs[i + 1][j] >= lcs[i][j + 1]) {\n      out.push({ type: '-', text: x[i++] })\n    } else {\n      out.push({ type: '+', text: y[j++] })\n    }\n  }\n  while (i < m) out.push({ type: '-', text: x[i++] })\n  while (j < n) out.push({ type: '+', text: y[j++] })\n  return out\n}\n\nexport interface FileDiff {\n  path: string\n  status: 'unchanged' | 'modified' | 'missing-local'\n  diff?: DiffLine[]\n  upstream: string\n}\n\nexport interface DiffAgentOptions extends FetchOptions {\n  outDir?: string\n  readFileImpl?: (path: string) => Promise<string | null>\n}\n\n/** Compare a locally-copied agent against the registry's current source. */\nexport async function diffAgent(id: string, options: DiffAgentOptions = {}): Promise<{\n  agent: RegistryAgent\n  targetDir: string\n  files: FileDiff[]\n}> {\n  const agent = await fetchAgent(id, options)\n  const targetDir = join(options.outDir ?? 'agents', id)\n  const readLocal =\n    options.readFileImpl ??\n    (async (p: string) => {\n      const { readFile } = await import('node:fs/promises')\n      try {\n        return await readFile(p, 'utf8')\n      } catch {\n        return null\n      }\n    })\n\n  const files: FileDiff[] = []\n  for (const f of agent.sources) {\n    const local = await readLocal(join(targetDir, f.path))\n    if (local == null) {\n      files.push({ path: f.path, status: 'missing-local', upstream: f.content })\n    } else if (local === f.content) {\n      files.push({ path: f.path, status: 'unchanged', upstream: f.content })\n    } else {\n      files.push({ path: f.path, status: 'modified', diff: lineDiff(local, f.content), upstream: f.content })\n    }\n  }\n  return { agent, targetDir, files }\n}\n","/**\n * Project scanner (RFC-0006 D3/D4).\n *\n * Inspects a project directory and produces a {@link ProjectScan}: the UI binding,\n * meta-framework, package manager, TypeScript flag, source dir, import alias,\n * styling, and monorepo signals that `agentskit add` needs when there is no\n * committed `.agentskit/components.json`. Pure + deterministic + dependency-light:\n * all filesystem access goes through an injectable {@link ScanFs}, so it is fully\n * unit-testable with an in-memory tree and never guesses silently — ambiguous\n * signals resolve to `'unknown'`/`null` and surface later in validation.\n */\nimport { join } from 'node:path'\nimport type {\n  MetaFramework,\n  PackageManager,\n  ProjectScan,\n  UiBinding,\n} from './types'\n\n/** The only filesystem surface the scanner needs. Injectable for tests. */\nexport interface ScanFs {\n  /** Return the file contents, or `null` if it does not exist / can't be read. */\n  readFile: (path: string) => string | null\n  /** Whether a file or directory exists at `path`. */\n  exists: (path: string) => boolean\n}\n\ninterface PackageJson {\n  dependencies?: Record<string, string>\n  devDependencies?: Record<string, string>\n  peerDependencies?: Record<string, string>\n}\n\n/** Merge all dependency buckets into one name→range map. */\nfunction allDeps(pkg: PackageJson | null): Record<string, string> {\n  if (!pkg) return {}\n  return { ...pkg.peerDependencies, ...pkg.devDependencies, ...pkg.dependencies }\n}\n\nfunction readJson<T>(fs: ScanFs, path: string): T | null {\n  const raw = fs.readFile(path)\n  if (raw == null) return null\n  try {\n    return JSON.parse(raw) as T\n  } catch {\n    return null\n  }\n}\n\nfunction detectPackageManager(fs: ScanFs, root: string): PackageManager {\n  if (fs.exists(join(root, 'pnpm-lock.yaml'))) return 'pnpm'\n  if (fs.exists(join(root, 'bun.lockb')) || fs.exists(join(root, 'bun.lock'))) return 'bun'\n  if (fs.exists(join(root, 'yarn.lock'))) return 'yarn'\n  return 'npm'\n}\n\n/**\n * UI binding from dependencies. Order matters: react-native and the various\n * meta-framework UI libs must be checked before the bare `react`/`vue` they build\n * on, so `expo`/`react-native` is never misread as plain `react`.\n */\nfunction detectUiBinding(deps: Record<string, string>): UiBinding | 'unknown' {\n  const has = (name: string): boolean => name in deps\n  if (has('react-native') || has('expo')) return 'react-native'\n  if (has('@angular/core')) return 'angular'\n  if (has('svelte')) return 'svelte'\n  if (has('nuxt') || has('vue')) return 'vue'\n  if (has('solid-js')) return 'solid'\n  if (has('ink')) return 'ink'\n  if (has('react')) return 'react'\n  return 'unknown'\n}\n\n/**\n * Meta-framework — decides WHERE a server file lands. Distinguishes app vs pages\n * router (Next), SSR vs SPA (Angular), and the no-server bundlers (vite/cra).\n */\nfunction detectMetaFramework(\n  fs: ScanFs,\n  root: string,\n  deps: Record<string, string>,\n  uiBinding: UiBinding | 'unknown',\n): MetaFramework | 'unknown' {\n  const has = (name: string): boolean => name in deps\n  const hasPrefix = (prefix: string): boolean => Object.keys(deps).some((d) => d.startsWith(prefix))\n\n  if (has('next')) {\n    // App Router when an `app/` (or `src/app/`) dir exists, else Pages Router.\n    if (fs.exists(join(root, 'app')) || fs.exists(join(root, 'src/app'))) return 'next-app'\n    return 'next-pages'\n  }\n  if (hasPrefix('@remix-run/')) return 'remix'\n  if (has('@tanstack/react-start') || has('@tanstack/start')) return 'tanstack-start'\n  if (has('@sveltejs/kit')) return 'sveltekit'\n  if (has('nuxt')) return 'nuxt'\n  if (has('astro')) return 'astro'\n  if (uiBinding === 'angular') {\n    return has('@angular/ssr') || has('@angular/platform-server') ? 'angular-ssr' : 'angular-spa'\n  }\n  if (has('expo')) return 'expo'\n  if (has('react-scripts')) return 'cra'\n  if (has('vite')) return 'vite'\n  if (uiBinding === 'ink') return 'node'\n  if (uiBinding === 'unknown') return 'unknown'\n  return 'none'\n}\n\n/** First `@/*`-style alias from tsconfig `compilerOptions.paths`, sans `/*`. */\nfunction detectImportAlias(fs: ScanFs, root: string): string | null {\n  const tsconfig = readJson<{ compilerOptions?: { paths?: Record<string, string[]> } }>(\n    fs,\n    join(root, 'tsconfig.json'),\n  )\n  const paths = tsconfig?.compilerOptions?.paths\n  if (!paths) return null\n  for (const key of Object.keys(paths)) {\n    // e.g. \"@/*\" → \"@\", \"~/*\" → \"~\". Skip exact (non-wildcard) mappings.\n    if (key.endsWith('/*')) return key.slice(0, -2)\n  }\n  return null\n}\n\nconst CSS_ENTRY_CANDIDATES = [\n  'app/globals.css',\n  'app/global.css',\n  'src/app/globals.css',\n  'src/index.css',\n  'src/styles/globals.css',\n  'styles/globals.css',\n  'src/app.css',\n  'src/styles.css',\n]\n\nfunction detectStyling(\n  fs: ScanFs,\n  root: string,\n  deps: Record<string, string>,\n): ProjectScan['styling'] {\n  const tailwind =\n    'tailwindcss' in deps ||\n    fs.exists(join(root, 'tailwind.config.ts')) ||\n    fs.exists(join(root, 'tailwind.config.js')) ||\n    fs.exists(join(root, 'tailwind.config.cjs')) ||\n    fs.exists(join(root, 'tailwind.config.mjs'))\n  let cssEntry: string | null = null\n  for (const candidate of CSS_ENTRY_CANDIDATES) {\n    if (fs.exists(join(root, candidate))) {\n      cssEntry = candidate\n      break\n    }\n  }\n  return { mode: tailwind ? 'tailwind-preset' : 'data-attrs-only', cssEntry }\n}\n\nfunction detectMonorepo(fs: ScanFs, root: string): ProjectScan['monorepo'] {\n  if (fs.exists(join(root, 'pnpm-workspace.yaml'))) return { tool: 'pnpm', root }\n  if (fs.exists(join(root, 'turbo.json'))) return { tool: 'turbo', root }\n  if (fs.exists(join(root, 'nx.json'))) return { tool: 'nx', root }\n  return null\n}\n\n/**\n * Scan `root` and return the detected {@link ProjectScan}. Never throws — a\n * missing/unparseable `package.json` yields an all-`unknown`/default scan that the\n * validator then reports, rather than a crash or a silent wrong guess.\n */\nexport function scanProject(fs: ScanFs, root = '.'): ProjectScan {\n  const pkg = readJson<PackageJson>(fs, join(root, 'package.json'))\n  const deps = allDeps(pkg)\n\n  const uiBinding = detectUiBinding(deps)\n  const metaFramework = detectMetaFramework(fs, root, deps, uiBinding)\n  const srcDir = fs.exists(join(root, 'src')) ? 'src' : null\n\n  return {\n    uiBinding,\n    metaFramework,\n    packageManager: detectPackageManager(fs, root),\n    typescript: fs.exists(join(root, 'tsconfig.json')),\n    srcDir,\n    importAlias: detectImportAlias(fs, root),\n    styling: detectStyling(fs, root, deps),\n    monorepo: detectMonorepo(fs, root),\n  }\n}\n","/**\n * `.agentskit/components.json` — build / read / write (RFC-0006 D3).\n *\n * `agentskit init` writes this file once; every later `add` reads it and skips\n * scanning. This module derives a sensible default `ComponentsConfig` from a\n * {@link ProjectScan}, and (de)serializes it. Pure + injectable I/O so it is\n * unit-testable; the interactive `init` command wires these together with prompts.\n */\nimport { join } from 'node:path'\nimport type { ComponentsConfig, MetaFramework, ProjectScan } from './types'\n\n/** Where the config lives, relative to the project (or workspace package) root. */\nexport const CONFIG_PATH = '.agentskit/components.json'\n\n/** Pinned, fetchable in v1 (the hosted registry URL becomes an alias later, D3). */\nexport const SCHEMA_URL =\n  'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/v1/schema/components.json'\n\nexport const DEFAULT_REGISTRY = 'https://registry.agentskit.io'\n\n/** Idiomatic server route directory per meta-framework. */\nconst SERVER_DIR_BY_META: Record<MetaFramework, string> = {\n  'next-app': 'app/api',\n  'next-pages': 'pages/api',\n  remix: 'app/routes',\n  'tanstack-start': 'app/routes',\n  astro: 'src/pages/api',\n  sveltekit: 'src/routes/api',\n  nuxt: 'server/api',\n  'angular-ssr': 'src/server',\n  expo: 'server',\n  vite: 'server',\n  cra: 'server',\n  'angular-spa': 'server',\n  node: 'server',\n  none: 'server',\n}\n\nfunction joinPath(base: string, sub: string): string {\n  return base ? `${base}/${sub}` : sub\n}\n\n/**\n * Derive a default {@link ComponentsConfig} from a scan. The values are\n * best-effort, framework-idiomatic defaults the user can edit; `init` may override\n * any of them via prompts. Falls back gracefully when the scan is `unknown`.\n */\nexport function buildConfig(scan: ProjectScan): ComponentsConfig {\n  const uiBinding = scan.uiBinding === 'unknown' ? 'react' : scan.uiBinding\n  const metaFramework = scan.metaFramework === 'unknown' ? 'none' : scan.metaFramework\n  const srcBase = scan.srcDir ?? ''\n\n  const componentsPath = joinPath(srcBase, 'components')\n  const libPath = joinPath(srcBase, 'lib')\n  // Next respects a `src/` dir for its router; prefix the server path when present.\n  const rawServer = SERVER_DIR_BY_META[metaFramework]\n  const serverPath =\n    srcBase && (metaFramework === 'next-app' || metaFramework === 'next-pages') && !rawServer.startsWith('src/')\n      ? joinPath(srcBase, rawServer)\n      : rawServer\n\n  const alias = scan.importAlias\n\n  return {\n    $schema: SCHEMA_URL,\n    schemaVersion: 1,\n    uiBinding,\n    metaFramework,\n    typescript: scan.typescript,\n    styling: {\n      mode: scan.styling.mode,\n      css: scan.styling.cssEntry ?? 'app/globals.css',\n      tailwindConfig: null,\n    },\n    aliases: {\n      // components + lib are import-aliased when the project has one; the server\n      // route is a framework-routed filesystem location, so it mirrors its path.\n      components: alias ? `${alias}/components` : `./${componentsPath}`,\n      lib: alias ? `${alias}/lib` : `./${libPath}`,\n      server: serverPath,\n    },\n    paths: {\n      root: scan.monorepo?.root ?? '.',\n      components: componentsPath,\n      lib: libPath,\n      server: serverPath,\n    },\n    registries: { default: DEFAULT_REGISTRY },\n  }\n}\n\n/** Serialize a config to pretty JSON (with a trailing newline, matching editors). */\nexport function serializeConfig(config: ComponentsConfig): string {\n  return `${JSON.stringify(config, null, 2)}\\n`\n}\n\n/** Parse + shallow-validate a config string. Returns `null` on malformed input. */\nexport function parseConfig(raw: string): ComponentsConfig | null {\n  let data: unknown\n  try {\n    data = JSON.parse(raw)\n  } catch {\n    return null\n  }\n  if (!data || typeof data !== 'object') return null\n  const c = data as Partial<ComponentsConfig>\n  if (typeof c.schemaVersion !== 'number' || !c.uiBinding || !c.metaFramework || !c.registries) {\n    return null\n  }\n  return c as ComponentsConfig\n}\n\n/** Injectable config I/O — `read` returns file contents or `null`; `write` persists. */\nexport interface ConfigIo {\n  read: (path: string) => string | null\n  write: (path: string, content: string) => void\n}\n\n/** Read the committed config under `root`, or `null` when absent/malformed. */\nexport function readConfig(io: ConfigIo, root = '.'): ComponentsConfig | null {\n  const raw = io.read(join(root, CONFIG_PATH))\n  return raw == null ? null : parseConfig(raw)\n}\n\n/** Write the config under `root`, returning the path written. */\nexport function writeConfig(io: ConfigIo, config: ComponentsConfig, root = '.'): string {\n  const path = join(root, CONFIG_PATH)\n  io.write(path, serializeConfig(config))\n  return path\n}\n\n/**\n * Resolve the effective config: the committed one when present (zero prompts),\n * else a default derived from the scan. The boolean reports whether it was loaded\n * from disk (vs. freshly derived → the caller should suggest running `init`).\n */\nexport function resolveConfig(\n  io: ConfigIo,\n  scan: ProjectScan,\n  root = '.',\n): { config: ComponentsConfig; fromDisk: boolean } {\n  const existing = readConfig(io, root)\n  if (existing) return { config: existing, fromDisk: true }\n  return { config: buildConfig(scan), fromDisk: false }\n}\n","/**\n * Path-containment guard + transactional file writer (RFC-0006 D16/D10).\n *\n * `sha256` verifies file *content* and the signed manifest verifies the checksum\n * list — but neither constrains *where* a file is written. A valid-checksum entry\n * with `path: '../../.env'` would escape the target via `join`. D16 closes that:\n * every registry path is validated (no absolute, no `..`) and every resolved\n * destination is asserted to stay inside the target dir, on both the write and the\n * diff-read paths.\n *\n * `commitFiles` adds the D10 transactional property at the unit level: validate\n * ALL paths + collect ALL conflicts before writing ANY file, then write, rolling\n * back everything written so far if any write fails. (The real-filesystem adapter\n * layers the sibling temp-dir + atomic rename on top; the all-or-nothing semantics\n * and the containment guard live here, fully testable.)\n */\nimport { isAbsolute, resolve, sep } from 'node:path'\n\n/** Raised on a path-traversal / unsafe-path / unresolved-conflict violation. */\nexport class IntegrityError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'IntegrityError'\n  }\n}\n\n/**\n * Publish-time path validation: a registry file path must be relative and contain\n * no `..` segment (and no empty/`.`-only segment). Pure predicate — the authoring\n * tooling rejects a manifest that fails this; the CLI re-checks at install.\n */\nexport function isSafeRegistryPath(rel: string): boolean {\n  if (rel === '' || isAbsolute(rel)) return false\n  const segments = rel.split(/[/\\\\]/)\n  for (const s of segments) {\n    if (s === '' || s === '.' || s === '..') return false\n  }\n  return true\n}\n\n/**\n * Resolve `rel` under `targetDir` and assert the result stays within it (D16).\n * Throws {@link IntegrityError} on an unsafe path or an escape; otherwise returns\n * the absolute destination. Use on every write AND every diff read.\n */\nexport function assertContained(targetDir: string, rel: string): string {\n  if (!isSafeRegistryPath(rel)) {\n    throw new IntegrityError(`unsafe registry path rejected: ${JSON.stringify(rel)}`)\n  }\n  const base = resolve(targetDir)\n  const dest = resolve(base, rel)\n  if (dest !== base && !dest.startsWith(base + sep)) {\n    throw new IntegrityError(`path escapes the target directory: ${JSON.stringify(rel)}`)\n  }\n  return dest\n}\n\n/** Minimal filesystem surface for the writer. Injectable for tests. */\nexport interface WriteFs {\n  exists: (path: string) => boolean\n  /** Write `content`, creating parent directories as needed. */\n  write: (path: string, content: string) => void\n  /** Remove a file (used for rollback). */\n  remove: (path: string) => void\n}\n\n/** A file to install, with its path relative to the target directory. */\nexport interface FileToWrite {\n  path: string\n  content: string\n}\n\nexport interface CommitOptions {\n  /** Overwrite files that already exist. Default: abort on any conflict. */\n  force?: boolean\n}\n\nexport interface CommitResult {\n  /** Absolute destinations written, in order. */\n  written: string[]\n}\n\n/**\n * Install `files` into `targetDir` transactionally:\n *   1. validate + contain every path (D16) — any failure aborts before any write;\n *   2. collect ALL pre-existing conflicts — abort listing them unless `force`;\n *   3. write; if any write throws, roll back everything written and rethrow.\n *\n * Never leaves a partially-written tree.\n */\nexport function commitFiles(\n  fs: WriteFs,\n  targetDir: string,\n  files: ReadonlyArray<FileToWrite>,\n  options: CommitOptions = {},\n): CommitResult {\n  // 1 — resolve + contain every destination first.\n  const planned = files.map((f) => ({ dest: assertContained(targetDir, f.path), content: f.content, rel: f.path }))\n\n  // 2 — collect all conflicts up front (no throw-on-first).\n  if (!options.force) {\n    const conflicts = planned.filter((p) => fs.exists(p.dest)).map((p) => p.rel)\n    if (conflicts.length > 0) {\n      throw new IntegrityError(\n        `refusing to overwrite ${conflicts.length} existing file(s) (use --force): ${conflicts.join(', ')}`,\n      )\n    }\n  }\n\n  // 3 — write, rolling back on any failure.\n  const written: string[] = []\n  try {\n    for (const p of planned) {\n      fs.write(p.dest, p.content)\n      written.push(p.dest)\n    }\n  } catch (err) {\n    for (const dest of written.reverse()) {\n      try {\n        fs.remove(dest)\n      } catch {\n        // best-effort rollback; surface the original error below\n      }\n    }\n    const message = err instanceof Error ? err.message : String(err)\n    throw new IntegrityError(`install failed and was rolled back (${written.length} file(s) removed): ${message}`)\n  }\n\n  return { written }\n}\n","/**\n * Registry fetch client with per-file integrity (RFC-0006 D9/D14).\n *\n * Resolves a component identifier (`name` / `@org/name` / `https://…`) to a\n * registry base + item id, fetches the manifest at the pinned ref, and fetches\n * each port file (inline content or per-path), verifying a SHA-256 over every file\n * and aborting the WHOLE install on any mismatch. Private registries authenticate\n * via `components.json` `registryAuth` (base URL → env var name) — never an argv\n * token. The signed-manifest check is an injected `signatureVerifier` seam (the\n * minisign/Ed25519 primitive lands in its own slice, tested against a real key).\n *\n * Network access is injected (`FetchLike`) so the whole client is unit-testable\n * with no real requests.\n */\nimport { createHash } from 'node:crypto'\nimport type { ComponentPort, ComponentsConfig, RegistryComponent } from './types'\nimport { IntegrityError, type FileToWrite } from './install'\n\n/** Highest registry `schemaVersion` this CLI understands. */\nexport const SUPPORTED_SCHEMA_VERSION = 1\n\nexport const DEFAULT_REGISTRY = 'https://registry.agentskit.io'\n\nexport interface FetchResponseLike {\n  ok: boolean\n  status: number\n  text: () => Promise<string>\n}\nexport type FetchLike = (\n  url: string,\n  init?: { headers?: Record<string, string> },\n) => Promise<FetchResponseLike>\n\n/** A resolved registry location for one item. */\nexport interface RegistryRef {\n  base: string\n  itemId: string\n}\n\nexport interface ResolveOptions {\n  /** `--registry` override (highest precedence). */\n  registryBase?: string\n}\n\n/**\n * Resolve an identifier to a {@link RegistryRef} (D9):\n *   - `https://…/r/foo.json` → that URL's directory as base, `foo` as the item;\n *   - `@org/name` → `config.registries[org]` as base, `name` as the item;\n *   - `name` → the default registry (`--registry` > `registries.default`).\n */\nexport function resolveIdentifier(\n  identifier: string,\n  config: Pick<ComponentsConfig, 'registries'> | undefined,\n  options: ResolveOptions = {},\n): RegistryRef {\n  const registries = config?.registries ?? {}\n\n  if (/^https?:\\/\\//.test(identifier)) {\n    // Direct URL to a manifest: strip `/r/<id>.json` (or any trailing file) → base.\n    const m = identifier.match(/^(.*?)\\/r\\/([^/]+?)(?:\\.json)?$/)\n    if (m) return { base: m[1]!, itemId: m[2]! }\n    const url = new URL(identifier)\n    const id = url.pathname.split('/').filter(Boolean).pop()?.replace(/\\.json$/, '') ?? identifier\n    return { base: `${url.origin}`, itemId: id }\n  }\n\n  if (identifier.startsWith('@')) {\n    const slash = identifier.indexOf('/')\n    if (slash < 0) throw new IntegrityError(`invalid namespaced identifier: ${identifier}`)\n    const org = identifier.slice(1, slash)\n    const name = identifier.slice(slash + 1)\n    const base = registries[org]\n    if (!base) throw new IntegrityError(`unknown registry namespace \"@${org}\" — add it to components.json registries`)\n    return { base, itemId: name }\n  }\n\n  const base = options.registryBase ?? registries.default ?? DEFAULT_REGISTRY\n  return { base, itemId: identifier }\n}\n\n/**\n * Authorization header for a private registry: `registryAuth` maps a base URL to\n * the ENV VAR NAME holding its bearer token (D9 — secret never in the file, never\n * in argv). Returns `{}` when no match or the env var is unset.\n */\nexport function resolveAuthHeader(\n  base: string,\n  config: Pick<ComponentsConfig, 'registryAuth'> | undefined,\n  env: Record<string, string | undefined> = {},\n): Record<string, string> {\n  const map = config?.registryAuth\n  if (!map) return {}\n  for (const [registryBase, envVar] of Object.entries(map)) {\n    if (base.startsWith(registryBase)) {\n      const token = env[envVar]\n      if (token) return { authorization: `Bearer ${token}` }\n    }\n  }\n  return {}\n}\n\n/** Lowercase hex SHA-256 of a string. */\nexport function sha256Hex(content: string): string {\n  return createHash('sha256').update(content, 'utf8').digest('hex')\n}\n\n/** Throw {@link IntegrityError} listing every file whose content fails its sha256. */\nexport function verifyChecksums(files: ReadonlyArray<{ path: string; content: string; sha256: string }>): void {\n  const bad = files.filter((f) => sha256Hex(f.content) !== f.sha256).map((f) => f.path)\n  if (bad.length > 0) {\n    throw new IntegrityError(`checksum mismatch — install aborted for ${bad.length} file(s): ${bad.join(', ')}`)\n  }\n}\n\nexport interface FetchOptions extends ResolveOptions {\n  fetchImpl?: FetchLike\n  env?: Record<string, string | undefined>\n  config?: Pick<ComponentsConfig, 'registries' | 'registryAuth'>\n  /**\n   * Optional signed-manifest verifier (D9). Receives the raw manifest JSON and the\n   * raw signature; returns whether it is valid. When provided, a manifest that\n   * fails verification aborts the fetch. The minisign signature path is\n   * `<manifest-url>.minisig`.\n   */\n  signatureVerifier?: (manifestRaw: string, signatureRaw: string) => Promise<boolean>\n}\n\nfunction manifestUrl(ref: RegistryRef): string {\n  return `${ref.base}/r/${ref.itemId}.json`\n}\nfunction fileUrl(ref: RegistryRef, path: string): string {\n  return `${ref.base}/r/${ref.itemId}/${path}`\n}\n\nasync function getText(fetchImpl: FetchLike, url: string, headers: Record<string, string>): Promise<string> {\n  const res = await fetchImpl(url, { headers })\n  if (!res.ok) throw new IntegrityError(`fetch failed (${res.status}) for ${url}`)\n  return res.text()\n}\n\n/** Fetch + parse + integrity/version-gate the component manifest. */\nexport async function fetchManifest(identifier: string, options: FetchOptions = {}): Promise<{\n  ref: RegistryRef\n  component: RegistryComponent\n}> {\n  const fetchImpl = options.fetchImpl ?? (globalThis.fetch as unknown as FetchLike)\n  const ref = resolveIdentifier(identifier, options.config, options)\n  const headers = resolveAuthHeader(ref.base, options.config, options.env)\n\n  const raw = await getText(fetchImpl, manifestUrl(ref), headers)\n\n  if (options.signatureVerifier) {\n    const sig = await getText(fetchImpl, `${manifestUrl(ref)}.minisig`, headers)\n    const ok = await options.signatureVerifier(raw, sig)\n    if (!ok) throw new IntegrityError(`manifest signature verification failed for ${ref.itemId}`)\n  }\n\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch {\n    throw new IntegrityError(`manifest is not valid JSON for ${ref.itemId}`)\n  }\n  const component = parsed as RegistryComponent\n  if (component?.kind !== 'component') {\n    throw new IntegrityError(`\"${ref.itemId}\" is not a component (kind=${String((component as { kind?: string })?.kind)})`)\n  }\n  if (typeof component.schemaVersion !== 'number' || component.schemaVersion > SUPPORTED_SCHEMA_VERSION) {\n    throw new IntegrityError(\n      `\"${ref.itemId}\" needs a newer CLI (schemaVersion ${component.schemaVersion} > ${SUPPORTED_SCHEMA_VERSION})`,\n    )\n  }\n  return { ref, component }\n}\n\n/**\n * Fetch a port's files — inline `content` when present, else per-path — verify the\n * SHA-256 of every file, and return them ready for `commitFiles`. Aborts the whole\n * set on any mismatch (D14/D9). `target` overrides are preserved on each file.\n */\nexport async function fetchPortFiles(\n  ref: RegistryRef,\n  port: ComponentPort,\n  options: FetchOptions = {},\n): Promise<FileToWrite[]> {\n  const fetchImpl = options.fetchImpl ?? (globalThis.fetch as unknown as FetchLike)\n  const headers = resolveAuthHeader(ref.base, options.config, options.env)\n\n  const resolved = await Promise.all(\n    port.files.map(async (f) => {\n      const content = f.content ?? (await getText(fetchImpl, fileUrl(ref, f.path), headers))\n      return { path: f.path, content, sha256: f.sha256 }\n    }),\n  )\n\n  verifyChecksums(resolved)\n  return resolved.map((f) => ({ path: f.path, content: f.content }))\n}\n","/**\n * Component install validator (RFC-0006 install-flow step 5; D4/D5/D11/D12).\n *\n * Given a {@link ProjectScan} and a {@link RegistryComponent}, decide whether the\n * component can be installed into this project — BEFORE any file is written. It\n * resolves the port by `uiBinding`, then checks: framework-target support, peer\n * version ranges, runtime/embedding satisfiability, server-only env scope, TS/JS\n * compatibility, styling, and serverless rate-limit durability. Pure + deterministic;\n * returns structured issues (never throws) so the CLI can print them and a\n * `--dry-run`/`--yes` flow can branch on `ok`.\n */\nimport type { ComponentPort, MetaFramework, ProjectScan, RegistryComponent } from './types'\n\nexport type ValidationSeverity = 'error' | 'warning'\n\nexport interface ValidationIssue {\n  severity: ValidationSeverity\n  code: string\n  message: string\n}\n\nexport interface ValidationResult {\n  /** True when there are no `error`-severity issues. */\n  ok: boolean\n  /** The resolved port for the detected `uiBinding`, when one exists. */\n  port?: ComponentPort\n  issues: ValidationIssue[]\n}\n\nexport interface ValidateInput {\n  scan: ProjectScan\n  component: RegistryComponent\n  /** Installed dependency versions (name → version) from the project package.json. */\n  installed?: Record<string, string>\n}\n\n/** Meta-frameworks with no Node server runtime (pure client / device). */\nconst NO_NODE_SERVER: ReadonlySet<MetaFramework> = new Set([\n  'expo',\n  'vite',\n  'cra',\n  'angular-spa',\n  'none',\n])\n\n/** Meta-frameworks commonly deployed serverless (per-instance limiter is unsafe). */\nconst SERVERLESS_CAPABLE: ReadonlySet<MetaFramework> = new Set([\n  'next-app',\n  'next-pages',\n  'remix',\n  'tanstack-start',\n  'sveltekit',\n  'nuxt',\n])\n\ninterface Semver {\n  major: number\n  minor: number\n  patch: number\n}\n\n/** Parse `1.2.3` / `v1.2.3` / `1.2` (prerelease + build stripped). `null` if unparseable. */\nfunction parseVersion(input: string): Semver | null {\n  const cleaned = input.trim().replace(/^[v=]+/, '').split(/[-+]/)[0] ?? ''\n  const parts = cleaned.split('.')\n  if (parts.length === 0 || parts[0] === '') return null\n  const nums = parts.map((p) => Number.parseInt(p, 10))\n  if (nums.some((n) => Number.isNaN(n))) return null\n  return { major: nums[0] ?? 0, minor: nums[1] ?? 0, patch: nums[2] ?? 0 }\n}\n\nfunction cmp(a: Semver, b: Semver): number {\n  return a.major - b.major || a.minor - b.minor || a.patch - b.patch\n}\n\n/**\n * Minimal range satisfier — the subset peerRanges actually use: `*`/empty, exact,\n * comparators (`>=`,`>`,`<=`,`<`,`=`), caret (`^`), tilde (`~`), and `workspace:*`\n * (always satisfied — the version is repo-owner-controlled, RFC-0006 D11). A `||`\n * union is supported by splitting. Unknown forms fail OPEN (treated as satisfied)\n * so an unrecognised range never wrongly blocks an install.\n */\nexport function satisfiesRange(version: string, range: string): boolean {\n  const r = range.trim()\n  if (r === '' || r === '*' || r === 'x' || r.startsWith('workspace:')) return true\n  if (r.includes('||')) return r.split('||').some((part) => satisfiesRange(version, part))\n\n  const v = parseVersion(version)\n  if (!v) return true // can't parse installed version → don't block\n\n  const m = r.match(/^(>=|<=|>|<|=|\\^|~)?\\s*(.+)$/)\n  if (!m) return true\n  const op = m[1] ?? '='\n  const target = parseVersion(m[2]!)\n  if (!target) return true\n\n  switch (op) {\n    case '>=':\n      return cmp(v, target) >= 0\n    case '>':\n      return cmp(v, target) > 0\n    case '<=':\n      return cmp(v, target) <= 0\n    case '<':\n      return cmp(v, target) < 0\n    case '^': {\n      // Compatible within the leftmost non-zero version segment.\n      if (cmp(v, target) < 0) return false\n      if (target.major > 0) return v.major === target.major\n      if (target.minor > 0) return v.major === 0 && v.minor === target.minor\n      return v.major === 0 && v.minor === 0 && v.patch === target.patch\n    }\n    case '~':\n      // Same major.minor, patch >=.\n      return v.major === target.major && v.minor === target.minor && cmp(v, target) >= 0\n    default:\n      return cmp(v, target) === 0\n  }\n}\n\nexport function validateInstall(input: ValidateInput): ValidationResult {\n  const { scan, component, installed = {} } = input\n  const issues: ValidationIssue[] = []\n  const err = (code: string, message: string) => issues.push({ severity: 'error', code, message })\n  const warn = (code: string, message: string) => issues.push({ severity: 'warning', code, message })\n\n  const supported = Object.keys(component.ports)\n\n  // ── Framework-target support (D4). ─────────────────────────────────────────\n  if (scan.uiBinding === 'unknown') {\n    err('framework-unknown', `Could not detect the UI framework. ${component.id} supports: ${supported.join(', ')}.`)\n    return { ok: false, issues }\n  }\n  const port = component.ports[scan.uiBinding]\n  if (!port) {\n    err(\n      'binding-unsupported',\n      `${component.id} has no \"${scan.uiBinding}\" port. Supported bindings: ${supported.join(', ')}.`,\n    )\n    return { ok: false, issues }\n  }\n  // The declared (uiBinding, metaFramework) pair must be shipped.\n  const pairShipped = component.frameworks.some(\n    (t) => t.uiBinding === scan.uiBinding && (scan.metaFramework === 'unknown' || t.metaFramework === scan.metaFramework),\n  )\n  if (scan.metaFramework !== 'unknown' && !pairShipped) {\n    err(\n      'target-unsupported',\n      `${component.id} does not ship a ${scan.uiBinding} × ${scan.metaFramework} target.`,\n    )\n  }\n\n  // ── Peer ranges (D11): port-level overrides component-level. ───────────────\n  const peerRanges = { ...component.peerRanges, ...port.peerRanges }\n  for (const [name, range] of Object.entries(peerRanges)) {\n    const have = installed[name]\n    if (have == null) continue // not yet installed — will be added; don't block\n    if (!satisfiesRange(have, range)) {\n      err('peer-mismatch', `${name}@${have} does not satisfy required ${range}.`)\n    }\n  }\n\n  // ── Runtime + embedding satisfiability (D5/D6). ────────────────────────────\n  const server = port.server\n  if (server) {\n    const noServer = NO_NODE_SERVER.has(scan.metaFramework as MetaFramework)\n    if (server.runtimeRequirement === 'nodejs' && noServer && server.delivery === 'bundled') {\n      err(\n        'runtime-unsatisfiable',\n        `${scan.metaFramework} has no Node server, but this port needs a bundled Node handler. Use a hosted endpoint instead.`,\n      )\n    }\n    if (server.embeddingBackend === 'onnx-node' && noServer) {\n      err(\n        'embedding-unsatisfiable',\n        `The onnx-node embedder needs a Node runtime; ${scan.metaFramework} can't run it. Use a BYO/api-remote embedder.`,\n      )\n    }\n    // Server-only secret would land in a client bundle (D5 env scope).\n    if (noServer && server.delivery === 'bundled') {\n      for (const e of component.env ?? []) {\n        if (e.scope === 'server' && e.required) {\n          err('env-client-leak', `Server-only env \"${e.name}\" can't be bundled into a client-only ${scan.metaFramework} target.`)\n        }\n      }\n    }\n    // Durable rate-limit on serverless (D5).\n    if (server.rateLimitBackend === 'memory' && SERVERLESS_CAPABLE.has(scan.metaFramework as MetaFramework)) {\n      warn(\n        'ratelimit-memory',\n        `In-memory rate-limit is per-instance and ineffective on serverless ${scan.metaFramework}. Set UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN for a durable limiter.`,\n      )\n    }\n  }\n\n  // ── TS / JS compatibility (D12). ───────────────────────────────────────────\n  if (port.language === 'ts' && !scan.typescript) {\n    err('language-ts-only', `${component.id}'s ${scan.uiBinding} port is TypeScript-only, but this is a JavaScript project.`)\n  }\n\n  // ── Styling (D8). ──────────────────────────────────────────────────────────\n  if (port.stylingMode === 'tailwind-preset' && scan.styling.mode !== 'tailwind-preset') {\n    warn('styling-tailwind', `This port expects Tailwind, which wasn't detected. The component still renders via its --ak-* tokens; wire the preset manually.`)\n  }\n\n  return { ok: !issues.some((i) => i.severity === 'error'), port, issues }\n}\n","/**\n * Install marker + tamper-evident audit chain (RFC-0006 D9/D15).\n *\n * Two cooperating records track what was installed and prove it was not silently\n * altered:\n *\n *   • The **install marker** is the `installed[]` array on `components.json`. Each\n *     entry is keyed by `{ id, installPath }` so the same component can live in\n *     several workspace packages (monorepo-safe) without collisions. The per-file\n *     `{ sha, installedAt }` map captures content hashes at install time, which is\n *     what later powers the 3-way diff/update (D15).\n *\n *   • The **audit chain** is the append-only `.agentskit/install-log.jsonl`\n *     (NDJSON). Each {@link AuditEntry} carries the SHA-256 of the *canonical* prior\n *     entry in `prevEntryHash`, hash-linking the log: tampering with, reordering, or\n *     deleting any entry breaks the chain at a detectable index (D9).\n *\n * Everything here is pure + deterministic: timestamps are injected (`now`), object\n * keys are canonicalised (recursively sorted) before hashing so the chain is\n * reproducible, and the only I/O is (de)serialisation of strings — the\n * real-filesystem append lives in the command layer. All throws reuse\n * {@link IntegrityError} (the repo forbids bare `new Error`).\n */\nimport type { AuditEntry, ComponentsConfig, FrameworkTarget, InstalledComponent } from './types'\nimport { sha256Hex } from './fetch'\nimport { IntegrityError } from './install'\nimport type { FileToWrite } from './install'\n\n/**\n * Guard the per-file marker map: a duplicate relative path within a single\n * component install would silently collapse two files into one hash slot, masking\n * a real diff later. Reuse {@link IntegrityError} (the repo forbids bare\n * `new Error`).\n */\nfunction assertUniquePaths(files: ReadonlyArray<FileToWrite>): void {\n  const seen = new Set<string>()\n  for (const f of files) {\n    if (seen.has(f.path)) {\n      throw new IntegrityError(`duplicate file path in install marker: ${JSON.stringify(f.path)}`)\n    }\n    seen.add(f.path)\n  }\n}\n\n// ── Install marker — `installed[]` on components.json (D15) ─────────────────\n\n/** A marker entry is identified by this composite key (monorepo-safe). */\nfunction sameKey(entry: InstalledComponent, id: string, installPath: string): boolean {\n  return entry.id === id && entry.installPath === installPath\n}\n\n/**\n * Add `entry`, or replace the existing one with the same `{ id, installPath }`.\n * Returns a new config (immutably) — the input is never mutated. Order is stable:\n * a replacement keeps its slot; a new entry is appended.\n */\nexport function upsertInstalled(config: ComponentsConfig, entry: InstalledComponent): ComponentsConfig {\n  const current = config.installed ?? []\n  const idx = current.findIndex((e) => sameKey(e, entry.id, entry.installPath))\n  const installed =\n    idx === -1 ? [...current, entry] : current.map((e, i) => (i === idx ? entry : e))\n  return { ...config, installed }\n}\n\n/** Find the recorded install for `{ id, installPath }`, or `undefined`. */\nexport function findInstalled(\n  config: ComponentsConfig,\n  id: string,\n  installPath: string,\n): InstalledComponent | undefined {\n  return (config.installed ?? []).find((e) => sameKey(e, id, installPath))\n}\n\n/**\n * Remove the recorded install for `{ id, installPath }`. Returns a new config\n * (immutably); a no-op when the entry is absent.\n */\nexport function removeInstalled(config: ComponentsConfig, id: string, installPath: string): ComponentsConfig {\n  const current = config.installed ?? []\n  return { ...config, installed: current.filter((e) => !sameKey(e, id, installPath)) }\n}\n\n/**\n * Build an {@link InstalledComponent} marker for a just-written component. The\n * per-file map records the SHA-256 (hex) of each file's content at install time —\n * the basis for the later 3-way diff. `now` is injected (never `Date.now()`) so\n * the result is deterministic and testable.\n */\nexport function buildInstalledComponent(args: {\n  id: string\n  framework: FrameworkTarget\n  installPath: string\n  ref: string\n  version: string\n  files: ReadonlyArray<FileToWrite>\n  now: string\n}): InstalledComponent {\n  assertUniquePaths(args.files)\n  const files: Record<string, { sha: string; installedAt: string }> = {}\n  for (const f of args.files) {\n    files[f.path] = { sha: sha256Hex(f.content), installedAt: args.now }\n  }\n  return {\n    id: args.id,\n    kind: 'component',\n    framework: args.framework,\n    installPath: args.installPath,\n    ref: args.ref,\n    version: args.version,\n    files,\n  }\n}\n\n// ── Canonical JSON — recursively sorted keys (reproducible hashing) ─────────\n\n/**\n * Recursively sort object keys so two structurally-equal values serialise\n * identically regardless of key insertion order. Arrays keep their order (it is\n * semantic); objects are rebuilt with sorted keys; primitives pass through.\n */\nfunction canonicalize(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(canonicalize)\n  if (value !== null && typeof value === 'object') {\n    const sorted: Record<string, unknown> = {}\n    for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n      sorted[key] = canonicalize((value as Record<string, unknown>)[key])\n    }\n    return sorted\n  }\n  return value\n}\n\n/** Canonical JSON string of a value (keys sorted recursively). */\nexport function canonicalJson(value: unknown): string {\n  return JSON.stringify(canonicalize(value))\n}\n\n/** SHA-256 (hex) of the canonical JSON of an audit entry. */\nfunction hashEntry(entry: AuditEntry): string {\n  return sha256Hex(canonicalJson(entry))\n}\n\n// ── Audit chain — `.agentskit/install-log.jsonl` (D9) ──────────────────────\n\n/**\n * Link a new entry onto the chain: its `prevEntryHash` is the SHA-256 of the\n * canonical last prior entry (`''` when the log is empty). Returns the completed\n * {@link AuditEntry}; `prevEntries` is not mutated.\n */\nexport function appendAudit(\n  prevEntries: ReadonlyArray<AuditEntry>,\n  entry: Omit<AuditEntry, 'prevEntryHash'>,\n): AuditEntry {\n  const prev = prevEntries.length > 0 ? prevEntries[prevEntries.length - 1] : undefined\n  const prevEntryHash = prev ? hashEntry(prev) : ''\n  return { ...entry, prevEntryHash }\n}\n\n/** Serialise the chain to NDJSON (one JSON object per line, trailing newline). */\nexport function serializeAuditLog(entries: ReadonlyArray<AuditEntry>): string {\n  if (entries.length === 0) return ''\n  return `${entries.map((e) => JSON.stringify(e)).join('\\n')}\\n`\n}\n\n/**\n * Parse NDJSON back into entries, skipping blank lines and silently dropping any\n * line that is not a well-formed JSON object. (Verification of the *chain* itself\n * is {@link verifyAuditChain}'s job — parsing only rejects unstructured noise.)\n */\nexport function parseAuditLog(raw: string): AuditEntry[] {\n  const out: AuditEntry[] = []\n  for (const line of raw.split('\\n')) {\n    const trimmed = line.trim()\n    if (trimmed === '') continue\n    let parsed: unknown\n    try {\n      parsed = JSON.parse(trimmed)\n    } catch {\n      continue\n    }\n    if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n      out.push(parsed as AuditEntry)\n    }\n  }\n  return out\n}\n\n/**\n * Walk the chain, recomputing each entry's expected `prevEntryHash` from the prior\n * entry. The first entry must carry `''`. Returns `{ ok, brokenAt }` where\n * `brokenAt` is the index of the first entry whose link does not match (or `null`\n * when the whole chain is intact). Detects tampering, reordering, and deletion.\n */\nexport function verifyAuditChain(entries: ReadonlyArray<AuditEntry>): { ok: boolean; brokenAt: number | null } {\n  for (let i = 0; i < entries.length; i++) {\n    const expected = i === 0 ? '' : hashEntry(entries[i - 1])\n    if (entries[i].prevEntryHash !== expected) {\n      return { ok: false, brokenAt: i }\n    }\n  }\n  return { ok: true, brokenAt: null }\n}\n","/**\n * `agentskit add <component>` orchestrator (RFC-0006 install flow).\n *\n * The capstone that wires the component subsystem into one transactional install:\n *   scan → resolve config → fetch manifest → validate → fetch+verify files →\n *   commit (path-guarded, rollback) → write marker → append audit chain.\n *\n * Pure orchestration over injected adapters (filesystem, network, clock) so the\n * whole flow is unit-testable end-to-end with no real I/O. The CLI command layer\n * supplies the real `node:fs`/`fetch` adapters and the interactive prompts; this\n * module makes none of those decisions itself.\n */\nimport { join } from 'node:path'\nimport type { FrameworkTarget, RegistryEnvVar } from './types'\nimport { type ScanFs, scanProject } from './scan'\nimport { type ConfigIo, CONFIG_PATH, resolveConfig, writeConfig } from './config'\nimport { fetchManifest, fetchPortFiles, type FetchLike } from './fetch'\nimport { validateInstall, type ValidationIssue } from './validate'\nimport { type WriteFs, commitFiles, IntegrityError } from './install'\nimport {\n  appendAudit,\n  buildInstalledComponent,\n  parseAuditLog,\n  serializeAuditLog,\n  upsertInstalled,\n} from './marker'\n\n/** Audit log path, relative to the project (or workspace package) root. */\nexport const AUDIT_PATH = '.agentskit/install-log.jsonl'\n\n/** Injected adapters — real `node:fs`/`fetch` in the command, fakes in tests. */\nexport interface AddDeps {\n  scanFs: ScanFs\n  /** Read/write for `components.json` and the audit log. */\n  io: ConfigIo\n  /** File install surface (write + remove for rollback). */\n  writeFs: WriteFs\n  /** Network. Defaults to global fetch. */\n  fetchImpl?: FetchLike\n  /** Injected clock → deterministic markers/audit. */\n  now: () => string\n  env?: Record<string, string | undefined>\n}\n\nexport interface AddOptions {\n  identifier: string\n  root?: string\n  /** `--out` install dir override. Defaults to the port's `defaultTarget`. */\n  outDir?: string\n  /** Overwrite existing files instead of aborting on conflict. */\n  force?: boolean\n  /** `--registry` base override. */\n  registryBase?: string\n  /** Optional signed-manifest verifier (e.g. `makeSignatureVerifier(SHIPPED_KEY)`). */\n  signatureVerifier?: (manifestRaw: string, signatureRaw: string) => Promise<boolean>\n}\n\nexport interface AddResult {\n  id: string\n  version: string\n  installPath: string\n  framework: FrameworkTarget\n  /** Absolute paths written. */\n  written: string[]\n  /** npm packages the component composes (install these). */\n  packages: string[]\n  /** Env the component needs. */\n  env: RegistryEnvVar[]\n  /** Non-blocking validation warnings (rate-limit, styling, …). */\n  warnings: ValidationIssue[]\n  /** Whether config came from a committed components.json (vs derived → suggest init). */\n  configFromDisk: boolean\n}\n\n/** Merge a project's declared dependency versions for the peer-range check. */\nfunction installedVersions(scanFs: ScanFs, root: string): Record<string, string> {\n  const raw = scanFs.readFile(join(root, 'package.json'))\n  if (raw == null) return {}\n  try {\n    const pkg = JSON.parse(raw) as {\n      dependencies?: Record<string, string>\n      devDependencies?: Record<string, string>\n      peerDependencies?: Record<string, string>\n    }\n    return { ...pkg.peerDependencies, ...pkg.devDependencies, ...pkg.dependencies }\n  } catch {\n    return {}\n  }\n}\n\n/**\n * Install a component end-to-end. Throws {@link IntegrityError} (with the joined\n * messages) when validation fails or any integrity check trips — leaving nothing\n * written (commit is transactional). On success the marker + audit chain are\n * persisted and an {@link AddResult} is returned for the command to print.\n */\nexport async function addComponent(options: AddOptions, deps: AddDeps): Promise<AddResult> {\n  const root = options.root ?? '.'\n\n  // 1 — scan + resolve config.\n  const scan = scanProject(deps.scanFs, root)\n  const { config, fromDisk } = resolveConfig(deps.io, scan, root)\n\n  // 2 — fetch + integrity/version-gate the manifest.\n  const { ref, component } = await fetchManifest(options.identifier, {\n    fetchImpl: deps.fetchImpl,\n    env: deps.env,\n    config,\n    registryBase: options.registryBase,\n    signatureVerifier: options.signatureVerifier,\n  })\n\n  // 3 — validate against the detected project (framework, peers, runtime, …).\n  const validation = validateInstall({\n    scan,\n    component,\n    installed: installedVersions(deps.scanFs, root),\n  })\n  if (!validation.ok || !validation.port) {\n    const errors = validation.issues.filter((i) => i.severity === 'error').map((i) => i.message)\n    throw new IntegrityError(`cannot install ${component.id}: ${errors.join('; ') || 'no compatible port'}`)\n  }\n  const port = validation.port\n\n  // 4 — fetch + checksum every port file.\n  const files = await fetchPortFiles(ref, port, { fetchImpl: deps.fetchImpl, env: deps.env, config })\n\n  // 5 — transactional, path-guarded commit.\n  const installPath = options.outDir ?? port.defaultTarget\n  const { written } = commitFiles(deps.writeFs, installPath, files, { force: options.force })\n\n  // 6 — record the marker on components.json.\n  const framework: FrameworkTarget = {\n    uiBinding: port.uiBinding,\n    metaFramework: scan.metaFramework === 'unknown' ? config.metaFramework : scan.metaFramework,\n  }\n  const now = deps.now()\n  const marker = buildInstalledComponent({\n    id: component.id,\n    framework,\n    installPath,\n    ref: ref.base,\n    version: component.version,\n    files,\n    now,\n  })\n  writeConfig(deps.io, upsertInstalled(config, marker), root)\n\n  // 7 — append the tamper-evident audit entry.\n  const auditPath = join(root, AUDIT_PATH)\n  const prev = parseAuditLog(deps.io.read(auditPath) ?? '')\n  const entry = appendAudit(prev, {\n    schemaVersion: 1,\n    eventType: 'install',\n    id: component.id,\n    version: component.version,\n    ref: ref.base,\n    files: files.map((f) => ({ path: f.path, sha256: marker.files[f.path]!.sha })),\n    manifestSigRef: options.signatureVerifier ? `${ref.itemId}.minisig` : '',\n    timestamp: now,\n  })\n  deps.io.write(auditPath, serializeAuditLog([...prev, entry]))\n\n  return {\n    id: component.id,\n    version: component.version,\n    installPath,\n    framework,\n    written,\n    packages: [...component.packages, ...(port.packages ?? [])],\n    env: component.env ?? [],\n    warnings: validation.issues.filter((i) => i.severity === 'warning'),\n    configFromDisk: fromDisk,\n  }\n}\n\n/** Re-export so the command can reference where config/audit live. */\nexport { CONFIG_PATH }\n","/**\n * Real Node.js filesystem and network adapters for the RFC-0006 component subsystem.\n *\n * This is the only module that touches `node:fs` or the network on behalf of the\n * scanner, writer, and config I/O — every other module in `components/` accepts the\n * injected interfaces so it stays unit-testable without touching disk.\n *\n * Proxy / custom-CA awareness is a documented follow-up; `nodeFetch` is intentionally\n * minimal and delegates entirely to `globalThis.fetch`.\n */\nimport { dirname } from 'node:path'\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport type { ConfigIo } from './config'\nimport type { FetchLike } from './fetch'\nimport type { WriteFs } from './install'\nimport type { ScanFs } from './scan'\n\n/**\n * `ScanFs` backed by the real Node.js filesystem.\n * `readFile` returns `null` on ENOENT or any other read error rather than throwing.\n */\nexport function nodeScanFs(): ScanFs {\n  return {\n    readFile(path: string): string | null {\n      try {\n        return readFileSync(path, 'utf8')\n      } catch {\n        return null\n      }\n    },\n    exists(path: string): boolean {\n      return existsSync(path)\n    },\n  }\n}\n\n/**\n * `WriteFs` backed by the real Node.js filesystem.\n * `write` creates all ancestor directories before writing (equivalent to `mkdir -p`).\n * `remove` is force/silent so it does not throw when the file is already absent\n * (rollback paths call it after a partial write and must not double-fault).\n */\nexport function nodeWriteFs(): WriteFs {\n  return {\n    exists(path: string): boolean {\n      return existsSync(path)\n    },\n    write(path: string, content: string): void {\n      mkdirSync(dirname(path), { recursive: true })\n      writeFileSync(path, content, 'utf8')\n    },\n    remove(path: string): void {\n      rmSync(path, { force: true })\n    },\n  }\n}\n\n/**\n * `ConfigIo` backed by the real Node.js filesystem.\n * `read` mirrors `nodeScanFs().readFile`; `write` mirrors `nodeWriteFs().write`\n * (creates parent directories as needed).\n */\nexport function nodeConfigIo(): ConfigIo {\n  return {\n    read(path: string): string | null {\n      try {\n        return readFileSync(path, 'utf8')\n      } catch {\n        return null\n      }\n    },\n    write(path: string, content: string): void {\n      mkdirSync(dirname(path), { recursive: true })\n      writeFileSync(path, content, 'utf8')\n    },\n  }\n}\n\n/**\n * Minimal `FetchLike` that delegates to `globalThis.fetch`.\n *\n * Proxy / custom-CA support (e.g. `HTTPS_PROXY`, `NODE_EXTRA_CA_CERTS`) is a\n * documented follow-up; wire an undici `ProxyAgent` here when that slice lands.\n */\nexport const nodeFetch: FetchLike = async (\n  url: string,\n  init?: { headers?: Record<string, string> },\n): Promise<{ ok: boolean; status: number; text: () => Promise<string> }> => {\n  const res = await globalThis.fetch(url, { headers: init?.headers })\n  return {\n    ok: res.ok,\n    status: res.status,\n    text: () => res.text(),\n  }\n}\n","/**\n * `agentskit add <name>` — component install path (RFC-0006 D1 auto-detect).\n *\n * Thin glue over `addComponent`: builds the real `node:fs`/network adapters, runs\n * the transactional install, and prints the result. Detection is by trying to\n * fetch a component manifest — if the id isn't a component in the registry\n * (`fetch failed` / `not a component`), this returns `not-a-component` so the\n * caller falls back to the agent path. All other failures (validation, checksum,\n * path-escape) are real component errors and surface to the user.\n */\nimport { addComponent, type AddResult } from '../components/flow'\nimport { nodeConfigIo, nodeFetch, nodeScanFs, nodeWriteFs } from '../components/node-fs'\nimport { IntegrityError } from '../components/install'\n\nexport interface ComponentAddOptions {\n  out?: string\n  force?: boolean\n  registry?: string\n}\n\nexport type ComponentAddOutcome = 'installed' | 'not-a-component'\n\n/** True when the error means \"this id is not a registry component\" (→ try agent). */\nfunction isNotAComponent(err: unknown): boolean {\n  return err instanceof IntegrityError && /fetch failed|is not a component/i.test(err.message)\n}\n\nfunction printReport(result: AddResult): void {\n  const { id, version, installPath, framework, written, packages, env, warnings, configFromDisk } = result\n  const out = process.stdout\n  out.write(`\\n✓ Installed ${id}@${version} → ${installPath}/  (${framework.uiBinding} × ${framework.metaFramework})\\n`)\n  out.write(`  wrote ${written.length} file${written.length === 1 ? '' : 's'}\\n`)\n\n  if (packages.length > 0) {\n    out.write(`\\nInstall the packages it composes:\\n  npm install ${packages.join(' ')}\\n`)\n  }\n  const required = env.filter((e) => e.required)\n  if (required.length > 0) {\n    out.write(`\\nRequired environment:\\n`)\n    for (const e of required) out.write(`  ${e.name} — ${e.description}\\n`)\n  }\n  if (warnings.length > 0) {\n    out.write(`\\nWarnings:\\n`)\n    for (const w of warnings) out.write(`  ⚠ ${w.message}\\n`)\n  }\n  if (!configFromDisk) {\n    out.write(`\\nTip: run \\`agentskit init\\` to commit .agentskit/components.json and skip the scan next time.\\n`)\n  }\n  out.write('\\n')\n}\n\n/**\n * Attempt a component install for `name`. Returns `'installed'` on success,\n * `'not-a-component'` when the id is not a registry component (caller should try\n * the agent path). Throws on a genuine component install failure.\n */\nexport async function tryComponentAdd(\n  name: string,\n  options: ComponentAddOptions,\n): Promise<ComponentAddOutcome> {\n  try {\n    const result = await addComponent(\n      { identifier: name, outDir: options.out, force: options.force === true, registryBase: options.registry },\n      {\n        scanFs: nodeScanFs(),\n        io: nodeConfigIo(),\n        writeFs: nodeWriteFs(),\n        fetchImpl: nodeFetch,\n        now: () => new Date().toISOString(),\n        env: process.env,\n      },\n    )\n    printReport(result)\n    return 'installed'\n  } catch (err) {\n    if (isNotAComponent(err)) return 'not-a-component'\n    throw err\n  }\n}\n","import type { Command } from 'commander'\nimport { addAgent, resolveSystemPrompt } from '../registry'\nimport { runAgent } from '../run'\nimport { tryComponentAdd } from './add-component'\n\nexport function registerAddCommand(program: Command): void {\n  program\n    .command('add <name>')\n    .description(\n      'Add a ready-made agent or UI component from the AgentsKit registry (registry.agentskit.io). Auto-detects which: a component is scanned/validated against your project and installed transactionally; an agent is copied into ./agents. You own the code. e.g. `agentskit add docs-chat` (component) or `agentskit add research --run \"…\"` (agent).',\n    )\n    .option('--out <dir>', 'Directory to install into (component: the port dir; agent: ./agents)')\n    .option('-f, --force', 'Overwrite existing files')\n    .option('--registry <url>', 'Registry base URL override (component install)')\n    .option('--run <task>', 'Run the agent on this task right after adding it')\n    .option('--provider <provider>', 'Provider for --run (openai, anthropic, gemini, ollama, demo)', 'demo')\n    .option('--model <model>', 'Model for --run')\n    .option('--api-key <key>', 'API key for --run (else read from the provider env var)')\n    .action(\n      async (\n        agent: string,\n        options: {\n          out?: string\n          force?: boolean\n          registry?: string\n          run?: string\n          provider: string\n          model?: string\n          apiKey?: string\n        },\n      ) => {\n        try {\n          // Auto-detect (RFC-0006 D1): try the component registry first; fall back\n          // to the agent path when the id is not a component.\n          const outcome = await tryComponentAdd(agent, {\n            out: options.out,\n            force: options.force,\n            registry: options.registry,\n          })\n          if (outcome === 'installed') return\n\n          const result = await addAgent(agent, { outDir: options.out, force: options.force === true })\n          process.stdout.write(`\\nAdded \"${result.agent.title}\" → ${result.targetDir}/\\n`)\n          for (const f of result.written) process.stdout.write(`  wrote  ${f}\\n`)\n\n          if (result.agent.packages.length > 0) {\n            process.stdout.write(`\\nInstall the packages it uses:\\n`)\n            process.stdout.write(`  npm install ${result.agent.packages.join(' ')} @agentskit/adapters\\n`)\n          }\n          const required = (result.agent.env ?? []).filter((e) => e.required)\n          if (required.length > 0) {\n            process.stdout.write(`\\nRequired environment:\\n`)\n            for (const e of required) process.stdout.write(`  ${e.name} — ${e.description}\\n`)\n          }\n          const readme = result.written.find((f) => f.toLowerCase().endsWith('readme.md'))\n          process.stdout.write(readme ? `\\nSee ${readme} for usage.\\n` : '\\n')\n\n          if (options.run) {\n            const systemPrompt = resolveSystemPrompt(result.agent)\n            if (!systemPrompt) {\n              process.stderr.write(\n                `\\n--run is not supported for \"${agent}\" (it composes tools/keys). Use it as a library — see the README.\\n`,\n              )\n              process.exit(1)\n            }\n            process.stdout.write(`\\nRunning \"${result.agent.title}\" via ${options.provider}…\\n\\n`)\n            await runAgent(options.run, {\n              provider: options.provider,\n              model: options.model,\n              apiKey: options.apiKey,\n              systemPrompt,\n              maxSteps: '8',\n            })\n          }\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err)\n          process.stderr.write(`\\nadd failed: ${message}\\n`)\n          process.stderr.write(`(browse agents at https://registry.agentskit.io)\\n`)\n          process.exit(1)\n        }\n      },\n    )\n}\n","import type { Command } from 'commander'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { diffAgent } from '../registry'\n\nexport function registerDiffCommand(program: Command): void {\n  program\n    .command('diff <agent>')\n    .description('Show how your local copy of a registry agent differs from the current registry source.')\n    .option('--out <dir>', 'Directory the agent was added into (default: ./agents)')\n    .action(async (agent: string, options: { out?: string }) => {\n      try {\n        const { targetDir, files } = await diffAgent(agent, { outDir: options.out })\n        let changed = 0\n        for (const f of files) {\n          if (f.status === 'unchanged') continue\n          changed++\n          process.stdout.write(`\\n${f.status === 'missing-local' ? 'missing' : 'modified'}: ${join(targetDir, f.path)}\\n`)\n          if (f.diff) {\n            for (const line of f.diff) {\n              if (line.type === ' ') continue\n              process.stdout.write(`  ${line.type} ${line.text}\\n`)\n            }\n          }\n        }\n        process.stdout.write(\n          changed === 0\n            ? `\\n${agent}: up to date with the registry.\\n`\n            : `\\n${changed} file(s) differ. Run \\`agentskit update ${agent}\\` to apply the registry version.\\n`,\n        )\n      } catch (err) {\n        process.stderr.write(`\\ndiff failed: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n}\n\nexport function registerUpdateCommand(program: Command): void {\n  program\n    .command('update <agent>')\n    .description('Update your local copy of a registry agent to the current registry source.')\n    .option('--out <dir>', 'Directory the agent was added into (default: ./agents)')\n    .option('-f, --force', 'Apply without listing the changes first')\n    .action(async (agent: string, options: { out?: string; force?: boolean }) => {\n      try {\n        const { targetDir, files } = await diffAgent(agent, { outDir: options.out })\n        const changed = files.filter((f) => f.status !== 'unchanged')\n        if (changed.length === 0) {\n          process.stdout.write(`\\n${agent}: already up to date.\\n`)\n          return\n        }\n        if (!options.force) {\n          process.stdout.write(`\\nWill overwrite ${changed.length} file(s) with the registry version:\\n`)\n          for (const f of changed) process.stdout.write(`  ${f.path} (${f.status})\\n`)\n        }\n        for (const f of changed) {\n          const dest = join(targetDir, f.path)\n          await mkdir(dirname(dest), { recursive: true })\n          await writeFile(dest, f.upstream, 'utf8')\n          process.stdout.write(`  updated ${dest}\\n`)\n        }\n        process.stdout.write(`\\nUpdated ${agent}. Review the changes with your VCS before committing.\\n`)\n      } catch (err) {\n        process.stderr.write(`\\nupdate failed: ${err instanceof Error ? err.message : String(err)}\\n`)\n        process.exit(1)\n      }\n    })\n}\n","import { Command } from 'commander'\nimport { registerChatCommand } from './chat'\nimport { registerRunCommand } from './run'\nimport { registerInitCommand } from './init'\nimport { registerDoctorCommand } from './doctor'\nimport { registerDevCommand } from './dev'\nimport { registerConfigCommand } from './config'\nimport { registerTunnelCommand } from './tunnel'\nimport { registerRagCommand } from './rag'\nimport { registerAiCommand } from './ai'\nimport { registerFlowCommand } from './flow'\nimport { registerPiiCommand } from './pii'\nimport { registerRulesCommand } from './rules'\nimport { registerAddCommand } from './add'\nimport { registerDiffCommand, registerUpdateCommand } from './registry-maintenance'\n\nexport function createCli(): Command {\n  const program = new Command()\n  program\n    .name('agentskit')\n    .description('AgentsKit CLI for chat demos and project bootstrapping.')\n\n  registerChatCommand(program)\n  registerRunCommand(program)\n  registerInitCommand(program)\n  registerDoctorCommand(program)\n  registerDevCommand(program)\n  registerConfigCommand(program)\n  registerTunnelCommand(program)\n  registerRagCommand(program)\n  registerAiCommand(program)\n  registerFlowCommand(program)\n  registerPiiCommand(program)\n  registerRulesCommand(program)\n  registerAddCommand(program)\n  registerDiffCommand(program)\n  registerUpdateCommand(program)\n\n  return program\n}\n"]}