@mastra/client-js 0.16.4 → 0.16.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/index.cjs +49 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +49 -5
- package/dist/index.js.map +1 -1
- package/dist/resources/agent.d.ts +17 -1
- package/dist/resources/agent.d.ts.map +1 -1
- package/dist/utils/process-mastra-stream.d.ts.map +1 -1
- package/package.json +12 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/index.ts","../src/utils/zod-to-json-schema.ts","../src/utils/process-client-tools.ts","../src/utils/process-mastra-stream.ts","../src/resources/base.ts","../src/resources/agent.ts","../src/resources/memory-thread.ts","../src/resources/vector.ts","../src/resources/tool.ts","../src/resources/workflow.ts","../src/resources/a2a.ts","../src/resources/mcp-tool.ts","../src/resources/agent-builder.ts","../src/resources/observability.ts","../src/resources/network-memory-thread.ts","../src/client.ts","../src/tools.ts"],"names":["runtimeContext","RuntimeContext","z","originalZodToJsonSchema","isVercelTool","uuid","part","processDataStream","parsePartialJson","invocation","toolCall","toolInvocation","chunk","RECORD_SEPARATOR"],"mappings":";;;;;;;;;;;;;;AAEO,SAAS,0BAA0BA,gBAAA,EAAuD;AAC/F,EAAA,IAAIA,gBAAA,EAAgB;AAClB,IAAA,IAAIA,4BAA0BC,6BAAA,EAAgB;AAC5C,MAAA,OAAO,MAAA,CAAO,WAAA,CAAYD,gBAAA,CAAe,OAAA,EAAS,CAAA;AAAA,IACpD;AACA,IAAA,OAAOA,gBAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,qBAAqB,cAAA,EAA0D;AAC7F,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,0BAA0B,cAAA,EAA+D;AACvG,EAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAC1F,EAAA,IAAI,CAAC,qBAAqB,OAAO,EAAA;AACjC,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,EAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AACtD,EAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,EAAA,OAAO,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAA;AAC3C;ACtBA,SAAS,UAAU,KAAA,EAAkC;AAEnD,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,UAAU,KAAA,IACV,OAAA,IAAW,KAAA,IACX,OAAQ,MAAc,KAAA,KAAU,UAAA,IAChC,eAAe,KAAA,IACf,OAAQ,MAAc,SAAA,KAAc,UAAA;AAExC;AAEO,SAAS,gBAAyC,SAAA,EAAc;AACrE,EAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AACzB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,kBAAkBE,KAAA,EAAG;AACvB,IAAA,MAAM,EAAA,GAAK,cAAA;AAEX,IAAA,OAAOA,KAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAKA,OAAG,SAAS,CAAA;AAAA,EAChC;AAEA,EAAA,OAAOC,wCAAA,CAAwB,SAAA,EAAW,EAAE,YAAA,EAAc,YAAY,CAAA;AACxE;;;ACzBO,SAAS,mBAAmB,WAAA,EAA6D;AAC9F,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,WAAW,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAChD,MAAA,IAAIC,yBAAA,CAAa,KAAK,CAAA,EAAG;AACvB,QAAA,OAAO;AAAA,UACL,GAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,YAAY,KAAA,CAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA;AACrE,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAO;AAAA,UACL,GAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,aAAa,KAAA,CAAM,WAAA,GAAc,eAAA,CAAgB,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAAA,YACtE,cAAc,KAAA,CAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,CAAM,YAAY,CAAA,GAAI;AAAA;AAC3E,SACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,GACH;AACF;;;AC5BA,eAAe,yBAAA,CAA0B;AAAA,EACvC,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,MAAA,IAAI,IAAA,EAAM;AAGV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAGhD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACjC,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEzB,UAAA,IAAI,SAAS,QAAA,EAAU;AACrB,YAAA,OAAA,CAAQ,KAAK,2BAAoB,CAAA;AACjC,YAAA;AAAA,UACF;AAEA,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE5B,YAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,UACpB,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,0BAAA,EAAuB,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,eAAsB,0BAAA,CAA2B;AAAA,EAC/C,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,mBAAA,CAAoB;AAAA,EACxC,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;ACxEO,IAAM,eAAN,MAAmB;AAAA,EACf,OAAA;AAAA,EAET,YAAY,OAAA,EAAwB;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,OAAA,CAAW,IAAA,EAAc,OAAA,GAA0B,EAAC,EAAe;AAC9E,IAAA,IAAI,SAAA,GAA0B,IAAA;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,GAAU,CAAA,EAAG,SAAA,GAAY,GAAA,EAAK,YAAA,GAAe,GAAA,EAAM,OAAA,GAAU,EAAC,EAAG,WAAA,KAAgB,IAAA,CAAK,OAAA;AAEvG,IAAA,IAAI,KAAA,GAAQ,SAAA;AAEZ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,OAAA,EAAS,OAAA,EAAA,EAAW;AACnD,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,UACnE,GAAG,OAAA;AAAA,UACH,OAAA,EAAS;AAAA,YACP,GAAI,OAAA,CAAQ,IAAA,IACZ,EAAE,OAAA,CAAQ,gBAAgB,QAAA,CAAA,KACzB,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,QAAQ,MAAA,KAAW,KAAA,CAAA,GAC7C,EAAE,cAAA,EAAgB,kBAAA,KAClB,EAAC;AAAA,YACL,GAAG,OAAA;AAAA,YACH,GAAG,OAAA,CAAQ;AAAA;AAAA;AAAA,WAGb;AAAA,UACA,MAAA,EAAQ,KAAK,OAAA,CAAQ,WAAA;AAAA,UACrB,WAAA,EAAa,QAAQ,WAAA,IAAe,WAAA;AAAA,UACpC,IAAA,EACE,OAAA,CAAQ,IAAA,YAAgB,QAAA,GAAW,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAA,SACnG,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,UAAA,IAAI,YAAA,GAAe,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA;AACzD,UAAA,IAAI;AACF,YAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACtC,YAAA,YAAA,IAAgB,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AAAA,UACjD,CAAA,CAAA,MAAQ;AACN,YAAA,IAAI,SAAA,EAAW;AACb,cAAA,YAAA,IAAgB,MAAM,SAAS,CAAA,CAAA;AAAA,YACjC;AAAA,UACF;AACA,UAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,QAC9B;AAEA,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,UAAA,OAAO,QAAA;AAAA,QACT;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,GAAY,KAAA;AAEZ,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,QAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,YAAY,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,IAAa,IAAI,KAAA,CAAM,gBAAgB,CAAA;AAAA,EAC/C;AACF,CAAA;;;ACrCA,eAAe,yBAAA,CAA0B;AAAA,EACvC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,IAAA,MAAM,YACJ,QAAA,CAIA,SAAA;AAEF,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,GAAc,QAAA,CAAS,QAAQ,CAAA;AAEzD,MAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,QAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,UAC9B;AAAA,YACE,SAAS,QAAA,EAAU,IAAA;AAAA,YACnB,KAAA;AAAA,YACA,UAAA;AAAA,YACA,QAAA;AAAA,YACA,cAAA;AAAA,YACA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,YACzC,SAAS,YAAY;AAAA,YAAC;AAAA,WACxB;AAAA,UACA;AAAA,YACE,UAAW,QAAA,CAAoD,QAAA;AAAA,YAC/D,YAAY,QAAA,EAAU;AAAA;AACxB,SACF;AAIA,QAAA,MAAM,eAAA,GAAkB;AAAA,UACtB,GAAI,QAAA,CAAS,QAAA,CAAS,QAAA,IAAY,EAAC;AAAA,UACnC;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,aAAA;AAAA,gBACN,YAAY,QAAA,CAAS,UAAA;AAAA,gBACrB,UAAU,QAAA,CAAS,QAAA;AAAA,gBACnB;AAAA;AACF;AACF;AACF,SACF;AAGA,QAAA,OAAO,SAAA,CAAU;AAAA,UACf,GAAG,MAAA;AAAA,UACH,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,UAAA,GAAN,cAAyB,YAAA,CAAa;AAAA,EAC3C,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGR,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CAAM,IAAA,EAAc,OAAA,EAAuE;AAC/F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAkB,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,MACvE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AAAA,MAC7B,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,CAAO,OAAa,OAAA,EAA0D;AAC5E,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,KAAK,CAAA;AAE9B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,MAAA,CAAO,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MAC9D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YACE,cAAA,EACyD;AACzD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,EAAkB,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,cAAA,EAAsF;AAChG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,EAAkB,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AACF,CAAA;AAEO,IAAM,KAAA,GAAN,cAAoB,YAAA,CAAa;AAAA,EAGtC,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGR,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,UAAA,CAAW,OAAA,EAAS,KAAK,OAAO,CAAA;AAAA,EACnD;AAAA,EARgB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAehB,QAAQ,cAAA,EAAkF;AACxF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/F;AAAA,EAgBA,MAAM,eAGJ,MAAA,EAA8F;AAC9F,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,qBAAqB,MAAA,CAAO,mBAAA,GAAsB,eAAA,CAAgB,MAAA,CAAO,mBAAmB,CAAA,GAAI,MAAA;AAAA,MAChG,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW;AAAA,KACpD;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,gBAAe,GAAI,eAAA;AAExD,IAAA,MAAM,QAAA,GAA0D,MAAM,IAAA,CAAK,OAAA;AAAA,MACzE,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,gBAAA,CAAA;AAAA,MAC3B;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,MAAA,MAAM,YACJ,QAAA,CAIA,SAAA;AAEF,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,GAAc,QAAA,CAAS,QAAQ,CAAA;AAEzD,QAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,UAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,YAC9B;AAAA,cACE,SAAS,QAAA,EAAU,IAAA;AAAA,cACnB,KAAA;AAAA,cACA,UAAA;AAAA,cACA,QAAA;AAAA,cACA,cAAA;AAAA,cACA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,cACzC,SAAS,YAAY;AAAA,cAAC;AAAA,aACxB;AAAA,YACA;AAAA,cACE,UAAW,QAAA,CAAoD,QAAA;AAAA,cAC/D,YAAY,QAAA,EAAU;AAAA;AACxB,WACF;AAIA,UAAA,MAAM,eAAA,GAAkB;AAAA,YACtB,GAAI,SAAS,QAAA,CAAoD,QAAA;AAAA,YACjE;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACP;AAAA,kBACE,IAAA,EAAM,aAAA;AAAA,kBACN,YAAY,QAAA,CAAS,UAAA;AAAA,kBACrB,UAAU,QAAA,CAAS,QAAA;AAAA,kBACnB;AAAA;AACF;AACF;AACF,WACF;AAEA,UAAA,OAAO,KAAK,QAAA,CAAS;AAAA,YACnB,GAAG,MAAA;AAAA,YACH,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAUA,MAAM,QAAA,CACJ,gBAAA,EACA,OAAA,EACiE;AAEjE,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,UAAA,IAAc,gBAAA,EAAkB;AAE1E,MAAA,MAAA,GAAS,gBAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAAS;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW,CAAA;AAAA,MAClD,gBAAA,EAAkB,OAAO,gBAAA,GACrB;AAAA,QACE,GAAG,MAAA,CAAO,gBAAA;AAAA,QACV,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,gBAAA,CAAiB,MAAM;AAAA,OACxD,GACA;AAAA,KACN;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,gBAAe,GAAI,eAAA;AAExD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,SAAA,CAAA;AAAA,MAC3B;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,MAAA,OAAO,yBAAA,CAA0B;AAAA,QAC/B,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI;AAAA,OACnC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAc,mBAAA,CAAoB;AAAA,IAChC,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,sBAAM,IAAI,IAAA,EAAK;AAAA,IAChC;AAAA,GACF,EAQG;AACD,IAAA,MAAM,kBAAA,GAAqB,aAAa,IAAA,KAAS,WAAA;AACjD,IAAA,IAAI,OAAO,kBAAA,GACP,CAAA;AAAA,KAEC,WAAA,CAAY,eAAA,EAAiB,MAAA,CAAO,CAAC,KAAK,cAAA,KAAmB;AAC5D,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,IAC/C,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAA,GACT,CAAA;AAEJ,IAAA,MAAM,OAAA,GAAqB,kBAAA,GACvB,eAAA,CAAgB,WAAW,CAAA,GAC3B;AAAA,MACE,IAAIC,OAAA,EAAK;AAAA,MACT,WAAW,cAAA,EAAe;AAAA,MAC1B,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,OAAO;AAAC,KACV;AAEJ,IAAA,IAAI,eAAA,GAA0C,MAAA;AAC9C,IAAA,IAAI,oBAAA,GAAoD,MAAA;AACxD,IAAA,IAAI,0BAAA,GAA6F,MAAA;AAEjG,IAAA,SAAS,wBAAA,CAAyB,YAAoB,UAAA,EAA4B;AAChF,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,QACzB,CAAAC,KAAAA,KAAQA,KAAAA,CAAK,SAAS,iBAAA,IAAqBA,KAAAA,CAAK,eAAe,UAAA,KAAe;AAAA,OAChF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,iBAAA;AAAA,UACN,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,OAAoB,EAAC;AAG3B,IAAA,IAAI,kBAAA,GAA8C,kBAAA,GAAqB,WAAA,EAAa,WAAA,GAAc,MAAA;AAGlG,IAAA,MAAM,mBAAoG,EAAC;AAE3G,IAAA,IAAI,KAAA,GAAa;AAAA,MACf,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc,GAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,GAAuB,SAAA;AAE3B,IAAA,SAAS,UAAA,GAAa;AAEpB,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAI,CAAA;AAI3B,MAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,QAAA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AAAA,MACxB;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA;AAAA;AAAA,QAGpB,GAAG,gBAAgB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAM1B,YAAYD,OAAA;AAAK,OACnB;AAEA,MAAA,MAAA,CAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAME,yBAAA,CAAkB;AAAA,MACtB,MAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,UAAA,eAAA,GAAkB;AAAA,YAChB,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM;AAAA,WACR;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,eAAe,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,eAAA,CAAgB,IAAA,IAAQ,KAAA;AAAA,QAC1B;AAEA,QAAA,OAAA,CAAQ,OAAA,IAAW,KAAA;AACnB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,gBAAgB,KAAA,EAAO;AACrB,QAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,UAAA,0BAAA,GAA6B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM;AACzD,UAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,YAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AAAA,UAC9D;AAAA,QACF,CAAA,MAAO;AACL,UAAA,0BAAA,CAA2B,IAAA,IAAQ,KAAA;AAAA,QACrC;AAEA,QAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,UAAA,oBAAA,GAAuB;AAAA,YACrB,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,KAAA;AAAA,YACX,OAAA,EAAS,CAAC,0BAA0B;AAAA,WACtC;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,oBAAA,CAAqB,SAAA,IAAa,KAAA;AAAA,QACpC;AAEA,QAAA,OAAA,CAAQ,SAAA,GAAA,CAAa,OAAA,CAAQ,SAAA,IAAa,EAAA,IAAM,KAAA;AAEhD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,yBAAyB,KAAA,EAAO;AAC9B,QAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,UAAA,0BAAA,CAA2B,YAAY,KAAA,CAAM,SAAA;AAAA,QAC/C;AAAA,MACF,CAAA;AAAA,MACA,wBAAwB,KAAA,EAAO;AAC7B,QAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,UAAA,oBAAA,GAAuB;AAAA,YACrB,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,EAAA;AAAA,YACX,SAAS;AAAC,WACZ;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,QACzC;AAEA,QAAA,oBAAA,CAAqB,QAAQ,IAAA,CAAK;AAAA,UAChC,IAAA,EAAM,UAAA;AAAA,UACN,MAAM,KAAA,CAAM;AAAA,SACb,CAAA;AAED,QAAA,0BAAA,GAA6B,MAAA;AAE7B,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,MAAA;AAAA,UACN,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,MAAM,KAAA,CAAM;AAAA,SACb,CAAA;AAED,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,aAAa,KAAA,EAAO;AAClB,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,QAAA;AAAA,UACN,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,6BAA6B,KAAA,EAAO;AAClC,QAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,UAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,QAC7B;AAGA,QAAA,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA,UACnC,IAAA,EAAM,EAAA;AAAA,UACN,IAAA;AAAA,UACA,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,KAAA,EAAO,QAAQ,eAAA,CAAgB;AAAA,SACjC;AAEA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,cAAA;AAAA,UACP,IAAA;AAAA,UACA,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,IAAA,EAAM;AAAA,SACR;AAEA,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAAU,CAAA;AAEvC,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,oBAAoB,KAAA,EAAO;AACzB,QAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA;AAEzD,QAAA,eAAA,CAAiB,QAAQ,KAAA,CAAM,aAAA;AAE/B,QAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAIC,wBAAA,CAAiB,gBAAiB,IAAI,CAAA;AAErE,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,cAAA;AAAA,UACP,MAAM,eAAA,CAAiB,IAAA;AAAA,UACvB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,UAAU,eAAA,CAAiB,QAAA;AAAA,UAC3B,IAAA,EAAM;AAAA,SACR;AAEA,QAAA,OAAA,CAAQ,eAAA,CAAiB,eAAA,CAAiB,KAAK,CAAA,GAAI,UAAA;AAEnD,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,MAAM,eAAe,KAAA,EAAO;AAC1B,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,MAAA;AAAA,UACP,IAAA;AAAA,UACA,GAAG;AAAA,SACL;AAEA,QAAA,IAAI,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,IAAK,IAAA,EAAM;AAE9C,UAAA,OAAA,CAAQ,gBAAiB,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,CAAG,KAAK,CAAA,GAAI,UAAA;AAAA,QACxE,CAAA,MAAO;AACL,UAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,YAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,UAC7B;AAEA,UAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAAU,CAAA;AAAA,QACzC;AAEA,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAKX,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,SAAS,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,OAAO,CAAA;AACnD,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,MAAMC,WAAAA,GAAa;AAAA,cACjB,KAAA,EAAO,QAAA;AAAA,cACP,IAAA;AAAA,cACA,GAAG,KAAA;AAAA,cACH;AAAA,aACF;AAGA,YAAA,OAAA,CAAQ,eAAA,CAAiB,OAAA,CAAQ,eAAA,CAAiB,MAAA,GAAS,CAAC,CAAA,GAAIA,WAAAA;AAEhE,YAAA,wBAAA,CAAyB,KAAA,CAAM,YAAYA,WAAU,CAAA;AAErD,YAAA,UAAA,EAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,iBAAiB,KAAA,EAAO;AACtB,QAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAEhC,QAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,UAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,QAC/D;AAIA,QAAA,MAAM,mBAAA,GAAsB,gBAAgB,SAAA,CAAU,CAAAA,gBAAcA,WAAAA,CAAW,UAAA,KAAe,MAAM,UAAU,CAAA;AAE9G,QAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,UAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,QACxF;AAEA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,GAAG,gBAAgB,mBAAmB,CAAA;AAAA,UACtC,KAAA,EAAO,QAAA;AAAA,UACP,GAAG;AAAA,SACL;AAEA,QAAA,eAAA,CAAgB,mBAAmB,CAAA,GAAI,UAAA;AAEvC,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAA4B,CAAA;AAEvE,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAK,CAAA;AAClB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,yBAAyB,KAAA,EAAO;AAC9B,QAAA,IAAI,sBAAsB,IAAA,EAAM;AAC9B,UAAA,kBAAA,GAAqB,CAAC,GAAG,KAAK,CAAA;AAAA,QAChC,CAAA,MAAO;AACL,UAAA,kBAAA,CAAmB,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,QAClC;AAEA,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,iBAAiB,KAAA,EAAO;AACtB,QAAA,IAAA,IAAQ,CAAA;AAGR,QAAA,eAAA,GAAkB,KAAA,CAAM,cAAc,eAAA,GAAkB,MAAA;AACxD,QAAA,oBAAA,GAAuB,MAAA;AACvB,QAAA,0BAAA,GAA6B,MAAA;AAAA,MAC/B,CAAA;AAAA,MACA,gBAAgB,KAAA,EAAO;AAErB,QAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,UAAA,OAAA,CAAQ,KAAK,KAAA,CAAM,SAAA;AAAA,QACrB;AAGA,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,cAAc,CAAA;AACzC,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,oBAAoB,KAAA,EAAO;AACzB,QAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AACrB,QAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AAEvB,UAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,QAChB;AAAA,MACF,CAAA;AAAA,MACA,YAAY,KAAA,EAAO;AACjB,QAAA,MAAM,IAAI,MAAM,KAAK,CAAA;AAAA,MACvB;AAAA,KACD,CAAA;AAED,IAAA,QAAA,GAAW,EAAE,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aACJ,MAAA,EAKA;AACA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,qBAAqB,MAAA,CAAO,mBAAA,GAAsB,eAAA,CAAgB,MAAA,CAAO,mBAAmB,CAAA,GAAI,MAAA;AAAA,MAChG,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW;AAAA,KACpD;AAGA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,2BAAA,CAA4B,iBAAiB,QAAQ,CAAA;AAGjF,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AAKD,IAAA,cAAA,CAAe,iBAAA,GAAoB,OAAO,OAAA,GAAU,EAAC,KAAM;AACzD,MAAA,MAAMF,yBAAA,CAAkB;AAAA,QACtB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAc,yBAAA,CAA0B;AAAA,IACtC,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,sBAAM,IAAI,IAAA,EAAK;AAAA,IAChC;AAAA,GACF,EAQG;AACD,IAAA,MAAM,kBAAA,GAAqB,aAAa,IAAA,KAAS,WAAA;AACjD,IAAA,IAAI,OAAO,kBAAA,GACP,CAAA;AAAA,KAEC,WAAA,CAAY,eAAA,EAAiB,MAAA,CAAO,CAAC,KAAK,cAAA,KAAmB;AAC5D,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,IAC/C,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAA,GACT,CAAA;AAEJ,IAAA,MAAM,OAAA,GAAqB,kBAAA,GACvB,eAAA,CAAgB,WAAW,CAAA,GAC3B;AAAA,MACE,IAAIF,OAAA,EAAK;AAAA,MACT,WAAW,cAAA,EAAe;AAAA,MAC1B,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,OAAO;AAAC,KACV;AAEJ,IAAA,IAAI,eAAA,GAA0C,MAAA;AAC9C,IAAA,IAAI,oBAAA,GAAoD,MAAA;AACxD,IAAA,IAAI,0BAAA,GAA6F,MAAA;AAEjG,IAAA,SAAS,wBAAA,CAAyB,YAAoB,UAAA,EAA4B;AAChF,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,QACzB,CAAAC,KAAAA,KAAQA,KAAAA,CAAK,SAAS,iBAAA,IAAqBA,KAAAA,CAAK,eAAe,UAAA,KAAe;AAAA,OAChF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,iBAAA;AAAA,UACN,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,OAAoB,EAAC;AAG3B,IAAA,IAAI,kBAAA,GAA8C,kBAAA,GAAqB,WAAA,EAAa,WAAA,GAAc,MAAA;AAGlG,IAAA,MAAM,mBAAoG,EAAC;AAE3G,IAAA,IAAI,KAAA,GAAa;AAAA,MACf,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc,GAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,GAAuB,SAAA;AAE3B,IAAA,SAAS,UAAA,GAAa;AAEpB,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAI,CAAA;AAI3B,MAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,QAAA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AAAA,MACxB;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA;AAAA;AAAA,QAGpB,GAAG,gBAAgB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAM1B,YAAYD,OAAA;AAAK,OACnB;AAEA,MAAA,MAAA,CAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,mBAAA,CAAoB;AAAA,MACxB,MAAA;AAAA;AAAA;AAAA,MAGA,OAAA,EAAS,OAAO,KAAA,KAAe;AAC7B,QAAA,QAAQ,MAAM,IAAA;AAAM,UAClB,KAAK,UAAA,EAAY;AACf,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACrB,CAAA;AAED,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,YAAA,EAAc;AAEjB,YAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,cAAA,OAAA,CAAQ,EAAA,GAAK,MAAM,OAAA,CAAQ,SAAA;AAAA,YAC7B;AAGA,YAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,cAAc,CAAA;AACzC,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,YAAA,EAAc;AACjB,YAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,cAAA,eAAA,GAAkB;AAAA,gBAChB,IAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,eACtB;AACA,cAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,eAAe,CAAA;AAAA,YACpC,CAAA,MAAO;AACL,cAAA,eAAA,CAAgB,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACxC;AAEA,YAAA,OAAA,CAAQ,OAAA,IAAW,MAAM,OAAA,CAAQ,IAAA;AACjC,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,iBAAA,EAAmB;AACtB,YAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,cAAA,0BAAA,GAA6B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,QAAQ,IAAA,EAAK;AACtE,cAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,gBAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AAAA,cAC9D;AAAA,YACF,CAAA,MAAO;AACL,cAAA,0BAAA,CAA2B,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACnD;AAEA,YAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,cAAA,oBAAA,GAAuB;AAAA,gBACrB,IAAA,EAAM,WAAA;AAAA,gBACN,SAAA,EAAW,MAAM,OAAA,CAAQ,IAAA;AAAA,gBACzB,OAAA,EAAS,CAAC,0BAA0B;AAAA,eACtC;AACA,cAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,YACzC,CAAA,MAAO;AACL,cAAA,oBAAA,CAAqB,SAAA,IAAa,MAAM,OAAA,CAAQ,IAAA;AAAA,YAClD;AAEA,YAAA,OAAA,CAAQ,SAAA,GAAA,CAAa,OAAA,CAAQ,SAAA,IAAa,EAAA,IAAM,MAAM,OAAA,CAAQ,IAAA;AAE9D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UACA,KAAK,MAAA,EAAQ;AACX,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,MAAA;AAAA,cACN,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACrB,CAAA;AAED,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,QAAA,EAAU;AACb,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,QAAA;AAAA,cACN,MAAA,EAAQ,MAAM,OAAA,CAAQ;AAAA,aACvB,CAAA;AACD,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,WAAA,EAAa;AAChB,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,MAAA;AAAA,cACP,IAAA;AAAA,cACA,GAAG,KAAA,CAAM;AAAA,aACX;AAEA,YAAA,IAAI,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,KAAK,IAAA,EAAM;AAEtD,cAAA,OAAA,CAAQ,gBAAiB,gBAAA,CAAiB,KAAA,CAAM,QAAQ,UAAU,CAAA,CAAG,KAAK,CAAA,GACxE,UAAA;AAAA,YACJ,CAAA,MAAO;AACL,cAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,gBAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,cAC7B;AAEA,cAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAA4B,CAAA;AAAA,YAC3D;AAEA,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAA4B,CAAA;AAE/E,YAAA,UAAA,EAAW;AAKX,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,MAAM,SAAS,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,KAAA,CAAM,SAAgB,CAAA;AAClE,cAAA,IAAI,UAAU,IAAA,EAAM;AAClB,gBAAA,MAAMI,WAAAA,GAAa;AAAA,kBACjB,KAAA,EAAO,QAAA;AAAA,kBACP,IAAA;AAAA,kBACA,GAAG,KAAA,CAAM,OAAA;AAAA,kBACT;AAAA,iBACF;AAGA,gBAAA,OAAA,CAAQ,eAAA,CAAiB,OAAA,CAAQ,eAAA,CAAiB,MAAA,GAAS,CAAC,CAAA,GAAIA,WAAAA;AAEhE,gBAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAYA,WAA4B,CAAA;AAE/E,gBAAA,UAAA,EAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF;AAAA,UAEA,KAAK,iCAAA,EAAmC;AACtC,YAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,cAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,YAC7B;AAGA,YAAA,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,cAC3C,IAAA,EAAM,EAAA;AAAA,cACN,IAAA;AAAA,cACA,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,KAAA,EAAO,QAAQ,eAAA,CAAgB;AAAA,aACjC;AAEA,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,cAAA;AAAA,cACP,IAAA;AAAA,cACA,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,cAC1B,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACtB;AAEA,YAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAA4B,CAAA;AAEzD,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAAU,CAAA;AAE7D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,iBAAA,EAAmB;AACtB,YAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAEjE,YAAA,eAAA,CAAiB,IAAA,IAAQ,MAAM,OAAA,CAAQ,aAAA;AAEvC,YAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAID,wBAAA,CAAiB,gBAAiB,IAAI,CAAA;AAErE,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,cAAA;AAAA,cACP,MAAM,eAAA,CAAiB,IAAA;AAAA,cACvB,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,cAC1B,UAAU,eAAA,CAAiB,QAAA;AAAA,cAC3B,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,OAAA,CAAQ,eAAA,CAAiB,eAAA,CAAiB,KAAK,CAAA,GAAI,UAAA;AAEnD,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAAU,CAAA;AAE7D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,aAAA,EAAe;AAClB,YAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAEhC,YAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,cAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,YAC/D;AAIA,YAAA,MAAM,sBAAsB,eAAA,CAAgB,SAAA;AAAA,cAC1C,CAAAC,WAAAA,KAAcA,WAAAA,CAAW,UAAA,KAAe,MAAM,OAAA,CAAQ;AAAA,aACxD;AAEA,YAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,cAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,YACxF;AAEA,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,GAAG,gBAAgB,mBAAmB,CAAA;AAAA,cACtC,KAAA,EAAO,QAAA;AAAA,cACP,GAAG,KAAA,CAAM;AAAA,aACX;AAEA,YAAA,eAAA,CAAgB,mBAAmB,CAAA,GAAI,UAAA;AAEvC,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAA4B,CAAA;AAE/E,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,OAAA,EAAS;AACZ,YAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,UACrC;AAAA,UAEA,KAAK,MAAA,EAAQ;AACX,YAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAC/B,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,aAAA,EAAe;AAClB,YAAA,IAAA,IAAQ,CAAA;AAGR,YAAA,eAAA,GAAkB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,WAAA,GAAc,eAAA,GAAkB,MAAA;AAC3E,YAAA,oBAAA,GAAuB,MAAA;AACvB,YAAA,0BAAA,GAA6B,MAAA;AAE7B,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,QAAA,EAAU;AACb,YAAA,YAAA,GAAe,KAAA,CAAM,QAAQ,UAAA,CAAW,MAAA;AACxC,YAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,IAAS,IAAA,EAAM;AAE/B,cAAA,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA;AAAA,YACxB;AACA,YAAA;AAAA,UACF;AAAA;AACF,MACF;AAAA,KACD,CAAA;AAED,IAAA,QAAA,GAAW,EAAE,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,qBAAA,CAAsB,eAAA,EAAsB,QAAA,EAAe;AAC/D,IAAA,MAAM,WAAqB,MAAM,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,OAAA,CAAA,EAAW;AAAA,MAClF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,YAA8B,EAAC;AACnC,MAAA,IAAI,WAAwB,EAAC;AAG7B,MAAA,MAAM,CAAC,iBAAA,EAAmB,mBAAmB,CAAA,GAAI,QAAA,CAAS,KAAK,GAAA,EAAI;AAInE,MAAA,iBAAA,CACG,MAAA;AAAA,QACC,IAAI,cAAA,CAA2B;AAAA,UAC7B,MAAM,MAAM,KAAA,EAAO;AACjB,YAAA,IAAI,MAAA;AAGJ,YAAA,IAAI;AACF,cAAA,MAAA,GAAS,SAAS,SAAA,EAAU;AAC5B,cAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC3C,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAC/B,cAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,SAAS,QAAQ,CAAA,CAAE,KAAK,MAAM,CAAA;AAEzE,cAAA,MAAM,OAAO,KAAA,CAAM,IAAI,aAAY,CAAE,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,YAC5D,CAAA,CAAA,MAAQ;AACN,cAAA,MAAM,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,YAC3B,CAAA,SAAE;AACA,cAAA,MAAA,EAAQ,WAAA,EAAY;AAAA,YACtB;AAAA,UACF;AAAA,SACD,CAAA;AAAA,QACD;AAAA,UACE,YAAA,EAAc;AAAA;AAChB,OACF,CACC,MAAM,CAAA,KAAA,KAAS;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MACzD,CAAC,CAAA;AAGH,MAAA,IAAA,CAAK,yBAAA,CAA0B;AAAA,QAC7B,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAQ,KAAM;AACvB,UAAA,MAAM,gBAAgB,QAAA,CAAS,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,EAAE,CAAA;AAEjE,UAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,YAAA,QAAA,CAAS,aAAa,CAAA,GAAI,OAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,UACvB;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU,OAAO,EAAE,YAAA,EAAc,SAAQ,KAAM;AAC7C,UAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,YAAA,MAAM,QAAA,GAAW,CAAC,GAAI,OAAA,EAAS,SAAS,EAAG,CAAA,CACxC,OAAA,GACA,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,iBAAiB,CAAA,EAAG,cAAA;AAClD,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,YACzB;AAEA,YAAA,IAAI,uBAAA,GAA0B,KAAA;AAE9B,YAAA,KAAA,MAAWC,aAAY,SAAA,EAAW;AAChC,cAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,WAAA,GAAcA,SAAAA,CAAS,QAAQ,CAAA;AAClE,cAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,gBAAA,uBAAA,GAA0B,IAAA;AAC1B,gBAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,kBAC9B;AAAA,oBACE,SAASA,SAAAA,EAAU,IAAA;AAAA,oBACnB,OAAO,eAAA,CAAgB,KAAA;AAAA,oBACvB,YAAY,eAAA,CAAgB,UAAA;AAAA,oBAC5B,UAAU,eAAA,CAAgB,QAAA;AAAA,oBAC1B,gBAAgB,eAAA,CAAgB,cAAA;AAAA;AAAA,oBAEhC,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,oBACzC,SAAS,YAAY;AAAA,oBAAC;AAAA,mBACxB;AAAA,kBACA;AAAA,oBACE,UAAW,QAAA,CAAoD,QAAA;AAAA,oBAC/D,YAAYA,SAAAA,EAAU;AAAA;AACxB,iBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACnD,gBAAA,MAAM,WAAA,GACJ,kBAAkB,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA,GAAI,MAAA;AAExE,gBAAA,MAAM,kBAAA,GAAqB,aAAa,KAAA,EAAO,IAAA;AAAA,kBAC7C,UAAQ,IAAA,CAAK,IAAA,KAAS,qBAAqB,IAAA,CAAK,cAAA,EAAgB,eAAeA,SAAAA,CAAS;AAAA,iBAC1F;AAEA,gBAAA,IAAI,kBAAA,EAAoB;AACtB,kBAAA,kBAAA,CAAmB,cAAA,GAAiB;AAAA,oBAClC,GAAG,kBAAA,CAAmB,cAAA;AAAA,oBACtB,KAAA,EAAO,QAAA;AAAA,oBACP;AAAA,mBACF;AAAA,gBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,aAAa,eAAA,EAAiB,IAAA;AAAA,kBACnD,CAAAC,eAAAA,KAAkBA,eAAAA,CAAe,UAAA,KAAeD,SAAAA,CAAS;AAAA,iBAC3D;AAEA,gBAAA,IAAI,cAAA,EAAgB;AAClB,kBAAA,cAAA,CAAe,KAAA,GAAQ,QAAA;AAEvB,kBAAA,cAAA,CAAe,MAAA,GAAS,MAAA;AAAA,gBAC1B;AAIA,gBAAA,MAAM,kBACJ,WAAA,IAAe,IAAA,GAAO,CAAC,GAAG,SAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,YAAY,EAAE,CAAA,EAAG,WAAW,CAAA,GAAI,CAAC,GAAG,QAAQ,CAAA;AAGtG,gBAAA,IAAA,CAAK,qBAAA;AAAA,kBACH;AAAA,oBACE,GAAG,eAAA;AAAA,oBACH,QAAA,EAAU;AAAA,mBACZ;AAAA,kBACA;AAAA,iBACF,CAAE,MAAM,CAAA,KAAA,KAAS;AACf,kBAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,gBAC1D,CAAC,CAAA;AAAA,cACH;AAAA,YACF;AAEA,YAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,cAAA,UAAA,CAAW,MAAM;AACf,gBAAA,QAAA,CAAS,KAAA,EAAM;AAAA,cACjB,GAAG,CAAC,CAAA;AAAA,YACN;AAAA,UACF,CAAA,MAAO;AACL,YAAA,UAAA,CAAW,MAAM;AACf,cAAA,QAAA,CAAS,KAAA,EAAM;AAAA,YACjB,GAAG,CAAC,CAAA;AAAA,UACN;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,MAAA,EAQZ;AACA,IAAA,MAAM,WAAqB,MAAM,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,QAAA,CAAA,EAAY;AAAA,MACnF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM;AAAA,MACjD,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AAQD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,0BAAA,CAA2B;AAAA,QAC/B,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAyBA,MAAM,MAAA,CACJ,gBAAA,EACA,OAAA,EASA;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,UAAA,IAAc,gBAAA,EAAkB;AAE1E,MAAA,MAAA,GAAS,gBAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAAS;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAwC;AAAA,MAC5C,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW,CAAA;AAAA,MAClD,gBAAA,EAAkB,OAAO,gBAAA,GACrB;AAAA,QACE,GAAG,MAAA,CAAO,gBAAA;AAAA,QACV,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,gBAAA,CAAiB,MAAM;AAAA,OACxD,GACA;AAAA,KACN;AAGA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,qBAAA,CAAsB,iBAAiB,QAAQ,CAAA;AAG3E,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AASD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,mBAAA,CAAoB;AAAA,QACxB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,2BAAA,CAA4B,eAAA,EAAsB,QAAA,EAAsC;AACpG,IAAA,MAAM,WAEF,MAAM,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,MAClE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,YAA8B,EAAC;AACnC,MAAA,IAAI,WAAwB,EAAC;AAG7B,MAAA,MAAM,CAAC,iBAAA,EAAmB,mBAAmB,CAAA,GAAI,QAAA,CAAS,KAAK,GAAA,EAAI;AAGnE,MAAA,iBAAA,CACG,OAAO,QAAA,EAAU;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MACzD,CAAC,CAAA;AAGH,MAAA,IAAA,CAAK,mBAAA,CAAoB;AAAA,QACvB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAQ,KAAM;AACvB,UAAA,MAAM,gBAAgB,QAAA,CAAS,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,EAAE,CAAA;AAEjE,UAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,YAAA,QAAA,CAAS,aAAa,CAAA,GAAI,OAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,UACvB;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU,OAAO,EAAE,YAAA,EAAc,SAAQ,KAAM;AAC7C,UAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,YAAA,MAAM,QAAA,GAAW,CAAC,GAAI,OAAA,EAAS,SAAS,EAAG,CAAA,CACxC,OAAA,GACA,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,iBAAiB,CAAA,EAAG,cAAA;AAClD,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,YACzB;AAGA,YAAA,KAAA,MAAWA,aAAY,SAAA,EAAW;AAChC,cAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,WAAA,GAAcA,SAAAA,CAAS,QAAQ,CAAA;AAClE,cAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,gBAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,kBAC9B;AAAA,oBACE,SAASA,SAAAA,EAAU,IAAA;AAAA,oBACnB,OAAO,eAAA,CAAgB,KAAA;AAAA,oBACvB,YAAY,eAAA,CAAgB,UAAA;AAAA,oBAC5B,UAAU,eAAA,CAAgB,QAAA;AAAA,oBAC1B,gBAAgB,eAAA,CAAgB,cAAA;AAAA;AAAA,oBAEhC,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,oBACzC,SAAS,YAAY;AAAA,oBAAC;AAAA,mBACxB;AAAA,kBACA;AAAA,oBACE,UAAW,QAAA,CAAoD,QAAA;AAAA,oBAC/D,YAAYA,SAAAA,EAAU;AAAA;AACxB,iBACF;AAEA,gBAAA,MAAM,WAAA,GAAyB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAEvF,gBAAA,MAAM,kBAAA,GAAqB,aAAa,KAAA,EAAO,IAAA;AAAA,kBAC7C,UAAQ,IAAA,CAAK,IAAA,KAAS,qBAAqB,IAAA,CAAK,cAAA,EAAgB,eAAeA,SAAAA,CAAS;AAAA,iBAC1F;AAEA,gBAAA,IAAI,kBAAA,EAAoB;AACtB,kBAAA,kBAAA,CAAmB,cAAA,GAAiB;AAAA,oBAClC,GAAG,kBAAA,CAAmB,cAAA;AAAA,oBACtB,KAAA,EAAO,QAAA;AAAA,oBACP;AAAA,mBACF;AAAA,gBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,aAAa,eAAA,EAAiB,IAAA;AAAA,kBACnD,CAAAC,eAAAA,KAAkBA,eAAAA,CAAe,UAAA,KAAeD,SAAAA,CAAS;AAAA,iBAC3D;AAEA,gBAAA,IAAI,cAAA,EAAgB;AAClB,kBAAA,cAAA,CAAe,KAAA,GAAQ,QAAA;AAEvB,kBAAA,cAAA,CAAe,MAAA,GAAS,MAAA;AAAA,gBAC1B;AAGA,gBAAA,MAAM,MAAA,GAAS,SAAS,SAAA,EAAU;AAElC,gBAAA,IAAI;AACF,kBAAA,MAAM,MAAA,CAAO,KAAA;AAAA,oBACX,IAAI,aAAY,CAAE,MAAA;AAAA,sBAChB,IAAA,GACE,KAAK,SAAA,CAAU;AAAA,wBACb,YAAYA,SAAAA,CAAS,UAAA;AAAA,wBACrB;AAAA,uBACD,CAAA,GACD;AAAA;AACJ,mBACF;AAAA,gBACF,CAAA,SAAE;AACA,kBAAA,MAAA,CAAO,WAAA,EAAY;AAAA,gBACrB;AAGA,gBAAA,IAAA,CAAK,2BAAA;AAAA,kBACH;AAAA,oBACE,GAAG,eAAA;AAAA,oBACH,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,WAAA,CAAY,EAAE,CAAA,EAAG,WAAW;AAAA,mBAC1E;AAAA,kBACA;AAAA,iBACF,CAAE,MAAM,CAAA,KAAA,KAAS;AACf,kBAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,gBAC1D,CAAC,CAAA;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,UAAA,CAAW,MAAM;AAGf,cAAA,QAAA,CAAS,KAAA,EAAM;AAAA,YACjB,GAAG,CAAC,CAAA;AAAA,UACN;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,QAAgB,cAAA,EAAiF;AACvG,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAA,CACE,QACA,MAAA,EACc;AACd,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc;AAAA,KACjE;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,QAAA,CAAA,EAAY;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAA,EAA2F;AAC/F,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,SAAA,EAAY,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,cAAA,EAA2F;AACnG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,WAAA,EAAc,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,MAAA,EAAyD;AACnE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,MAAA,CAAA,EAAU;AAAA,MACvD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAA,CAAuB,EAAE,aAAA,EAAe,GAAG,QAAO,EAA+D;AAC/G,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,QAAA,EAAW,aAAa,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,MAAA,EAA8D;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,CAAA,EAAmB;AAAA,MAChE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA,EAYA,MAAM,aAAA,CACJ,iBAAA,EACA,QAAA,EACyD;AACzD,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AAAA,EA6BA,MAAM,WAAA,CACJ,iBAAA,EACA,QAAA,EASA;AACA,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AACF,CAAA;;;AC/oDO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CACE,OAAA,EACQ,QAAA,EACA,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA8D;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAClF,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAClF,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAAkF;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAI,MAAA,EAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAO,KAAA,CAAM,QAAA,EAAS,EAAE,GAAI;AAAC,KAC3D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAA,CAAqB;AAAA,IACnB,QAAA;AAAA,IACA,GAAG;AAAA,GACL,EAA8F;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,GAAI,WAAW,EAAE,QAAA,EAAU,KAAK,SAAA,CAAU,QAAQ,CAAA,EAAE,GAAI;AAAC,KAC1D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eACE,UAAA,EACgD;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,4BAAA,EAA+B,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MACrE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,UAAA;AAAW,KACpB,CAAA;AAAA,EACH;AACF,CAAA;;;ACrFO,IAAM,MAAA,GAAN,cAAqB,YAAA,CAAa;AAAA,EACvC,WAAA,CACE,SACQ,UAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,WAAmB,cAAA,EAAwF;AACjH,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,SAAA,EAAY,SAAS,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAAA,KACjG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAA,EAAkD;AACvD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,cAAA,EAAuF;AAChG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,QAAA,EAAW,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAA0D;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,aAAA,CAAA,EAAiB;AAAA,MACjE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA+C;AACpD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,OAAA,CAAA,EAAW;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,EAAyD;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,MAAA,CAAA,EAAU;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF,CAAA;;;AClFO,IAAM,IAAA,GAAN,cAAmB,YAAA,CAAa;AAAA,EACrC,WAAA,CACE,SACQ,MAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAAiF;AACvF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAA,EAA4G;AAClH,IAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAEhC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc;AAAA,KACjE;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,SAAA,EAAY,GAAA,CAAI,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;AC5BA,IAAM,gBAAA,GAAmB,GAAA;AAElB,IAAM,QAAA,GAAN,cAAuB,YAAA,CAAa;AAAA,EACzC,WAAA,CACE,SACQ,UAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAe,gBAAgB,MAAA,EAA4E;AACzG,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAGhC,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,WAAA,EAAa;AAEnB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,WAAA,GAAc,IAAA;AAGd,QAAA,IAAI,IAAA,IAAQ,CAAC,KAAA,EAAO;AAEpB,QAAA,IAAI;AAEF,UAAA,MAAM,UAAU,KAAA,GAAQ,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAG1D,UAAA,MAAM,MAAA,GAAA,CAAU,MAAA,GAAS,OAAA,EAAS,KAAA,CAAM,gBAAgB,CAAA;AAGxD,UAAA,MAAA,GAAS,MAAA,CAAO,KAAI,IAAK,EAAA;AAGzB,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,KAAA,EAAO;AAET,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACpC,kBAAA,MAAM,WAAA;AAAA,gBACR,CAAA,CAAA,MAAQ;AAAA,gBAGR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAGR;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,QACzB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAE5B,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAAqF;AAC3F,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA,CACE,QACA,cAAA,EACkC;AAClC,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,MAAA,EAAQ,KAAA,KAAU,IAAA,IAAQ,MAAA,EAAQ,KAAA,KAAU,MAAA,IAAa,CAAC,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAC,CAAA,EAAG;AAC1F,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,EAAQ,MAAA,KAAW,MAAA,IAAa,CAAC,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAC,CAAA,EAAG;AAC7F,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,MAAA,CAAO,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,YAAY,CAAA,CAAE,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,KAAA,CAAO,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,OAAe,cAAA,EAA4F;AACjH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAA,CACE,OACA,cAAA,EACgD;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,iBAAA,EAAoB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAAA,KAC9G;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,KAAA,EAA6C;AACrD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAA,EAAW;AAAA,MAC5E,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,MAAA,EAAuF;AAClG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,MAAA,CAAO,KAAK,CAAA,WAAA,CAAA,EAAe;AAAA,MACvF,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAAK,KAChD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,OAAA,EAyBb;AACD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAMF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,MAAA,EAkClB;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA;AAAA,MACrB,kBAAkB,IAAA,CAAK,UAAU,CAAA,YAAA,EAAe,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACvE;AAAA,QACE,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAElB,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,OAAO,CAAA,KAIR;AACJ,QAAA,OAAO,KAAK,KAAA,CAAM;AAAA,UAChB,KAAA;AAAA,UACA,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,UAAA,EAAY,OAAO,CAAA,KAIb;AACJ,QAAA,OAAO,KAAK,UAAA,CAAW;AAAA,UACrB,KAAA;AAAA,UACA,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,KAAA,EAAO,OAAO,QAAA,KAAoD;AAChE,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,EAAE,KAAA,IAAS,QAAQ,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,CAAA,KAAiG;AAC9G,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,KAAA,EAAO,SAAA,EAAW,EAAE,SAAA,EAAW,cAAA,EAAgB,CAAA,CAAE,cAAA,EAAgB,CAAA;AAAA,MACxF,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,CAAA,KAKT;AACJ,QAAA,OAAO,KAAK,MAAA,CAAO;AAAA,UACjB,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,WAAA,EAAa,OAAO,CAAA,KAKd;AACJ,QAAA,OAAO,KAAK,WAAA,CAAY;AAAA,UACtB,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,iBAAA,EAAmB,OAAO,CAAA,KAIpB;AACJ,QAAA,OAAO,KAAK,iBAAA,CAAkB;AAAA,UAC5B,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,EAK2B;AAC/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;AAAA,MACnF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,EAAQ,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA;AAAe,KAC7F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,CAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAG;AAAA,GACL,EAMiC;AAC/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,IAAA,CAAK,cAAc,CAAA;AACpE,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAA,EAAI;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,IAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,MAAA,EAKoB;AAC7B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAEtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA;AAAe,KAC5F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,MAAA,EAKV;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,QAAA,EAAW,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACnE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA,EAAe;AAAA,QAC3F,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWE,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,MAAA,EAA2B;AAC7C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,gBAAA,EAAmB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAC3E;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC7E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,MAAA,EAMf;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACxE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,cAAA;AAAA,UACA,gBAAgB,MAAA,CAAO,cAAA;AAAA,UACvB,gBAAgB,MAAA,CAAO;AAAA,SACzB;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAmB,MAAA,EAA2B;AAClD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAEtC,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,qBAAA,EAAwB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAChF;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAMmB;AAC7B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,oBAAA,EAAuB,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;AAAA,MAC1F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,cAAA;AAAA,QACA,gBAAgB,MAAA,CAAO;AAAA;AACzB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB,MAAA,EAMI;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,eAAA,EAAkB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAC1E;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,cAAA;AAAA,UACA,gBAAgB,MAAA,CAAO;AAAA,SACzB;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,CAAM,EAAE,KAAA,IAA6B,QAAA,EAAiD;AAC1F,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA,EAAI;AAAA,MACtG,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,WAAA,MAAiB,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,mBAAmB,OAAA,EAA6D;AACrF,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,OAAO,IAAI,cAAA,CAAe;AAAA,MACxB,MAAM,MAAM,UAAA,EAAY;AACtB,QAAA,IAAI;AACF,UAAA,WAAA,MAAiB,UAAU,OAAA,EAA+B;AACxD,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,GAAI,gBAAA;AACtC,YAAA,UAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,UACzC;AACA,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB,SAAS,GAAA,EAAK;AACZ,UAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;AC10BO,IAAM,GAAA,GAAN,cAAkB,YAAA,CAAa;AAAA,EACpC,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,GAA8B;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,gBAAA,CAAkB,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,MAAA,EAAyD;AACzE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAA6B,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC/E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,cAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBAAqB,MAAA,EAAiF;AAC1G,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAqD,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MACvG,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,gBAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,MAAA,EAAmD;AAC/D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAyB,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,WAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,MAAA,EAAwC;AACvD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,cAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;ACxFO,IAAM,OAAA,GAAN,cAAsB,YAAA,CAAa;AAAA,EAChC,QAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,OAAA,EAAwB,QAAA,EAAkB,MAAA,EAAgB;AACpE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAA6E;AACnF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAA,EAAuE;AAC7E,IAAA,MAAM,OAAY,EAAC;AACnB,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAKlD,IAAA,IAAI,MAAA,CAAO,mBAAmB,MAAA,EAAW;AACvC,MAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,QAAA,CAAA,EAAY;AAAA,MAC5E,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,IAAA,GAAO;AAAA,KAC7C,CAAA;AAAA,EACH;AACF,CAAA;;;AC3CA,IAAMC,iBAAAA,GAAmB,GAAA;AAuBlB,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CACE,SACQ,QAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGV;AAAA;AAAA,EAGA,wBAAwB,MAAA,EAAuC;AAC7D,IAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,KAAA;AAAA,QAClC,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,KAAA;AAAA,QAClC,UAAA,EAAY,OAAO,MAAA,CAAO,UAAA;AAAA,QAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,gCAAA;AAAA,QAClC,iBAAA,EAAmB,OAAO,MAAA,CAAO,iBAAA;AAAA,QACjC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAAA,QACrB,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,QACtB,WAAA,EAAa,OAAO,MAAA,CAAO;AAAA,OAC7B;AAAA,IACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,CAAA,6BAAA,EAAgC,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,QAC7D,KAAA,EAAO,OAAO,KAAA,CAAM;AAAA,OACtB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,oCAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,OAAA,EAA0D;AACxE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAMF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,MAAA,EAAyD;AAC5E,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACzH,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAmC,KAAA,EAAmD;AACrG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAC1H,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,MAAA,EAAmC,KAAA,EAA6C;AACnG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,YAAA,CAAa,UAAU,CAAA,CAAA;AAChF,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CACJ,MAAA,EAKA,KAAA,EAC8B;AAC9B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,QAAA,EAAW,YAAA,CAAa,UAAU,CAAA,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CACJ,MAAA,EAKA,KAAA,EACmC;AACnC,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,cAAA,EAAiB,YAAA,CAAa,UAAU,CAAA,CAAA;AACvF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAe,gBACb,MAAA,EAC+D;AAC/D,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAGhC,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,WAAA,EAAa;AAEnB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,WAAA,GAAc,IAAA;AAGd,QAAA,IAAI,IAAA,IAAQ,CAAC,KAAA,EAAO;AAEpB,QAAA,IAAI;AAEF,UAAA,MAAM,UAAU,KAAA,GAAQ,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAG1D,UAAA,MAAM,MAAA,GAAA,CAAU,MAAA,GAAS,OAAA,EAAS,KAAA,CAAMA,iBAAgB,CAAA;AAGxD,UAAA,MAAA,GAAS,MAAA,CAAO,KAAI,IAAK,EAAA;AAGzB,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,KAAA,EAAO;AAET,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACpC,kBAAA,MAAM,WAAA;AAAA,gBACR,CAAA,CAAA,MAAQ;AAAA,gBAGR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAGR;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,QACzB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAE5B,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CAAO,MAAA,EAAmC,KAAA,EAAgB;AAC9D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACrH,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA,EAAe;AAAA,MACxC,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAEtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAMA,iBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWD,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CAAY,MAAA,EAAmC,KAAA,EAAgB;AACnE,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAC1H,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA,EAAe;AAAA,MACxC,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAEtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAMC,iBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWD,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CACJ,EAAE,KAAA,EAAO,SAAA,IACT,QAAA,EACA;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,aAAA,EAAgB,KAAK,CAAA,EAAG,SAAA,GAAY,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjH,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,WAAA,MAAiB,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ,KAAA,EAAe;AAC3B,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,GAAiC;AACrC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAsB,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AACrF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,MAAA,EAAmG;AAC5G,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,MAAA,EAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,MAAA,CAAO,UAAU,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,KAAA,EAAQ,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACnH,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAmB,KAAA,EAAe;AACtC,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,iBAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,KAAA,EAA6C;AAC3D,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,OAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAa,MAAA,EAAuF;AACxG,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,MAAA,EAAS,OAAO,KAAK,CAAA,WAAA,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAAK,KAChD,CAAA;AAAA,EACH;AACF,CAAA;;;ACrfO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,YAAY,OAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAA,EAAyC;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,MAAA,EAA4D;AACpE,IAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI,MAAA;AAChC,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAU,GAAI,cAAc,EAAC;AACpD,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,UAAA,EAAW,GAAI,WAAW,EAAC;AAC7D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AACrC,MAAA,YAAA,CAAa,GAAA,CAAI,cAAc,UAAU,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,YAAA,GAAe,KAAK,SAAA,CAAU;AAAA,QAClC,KAAA,EAAO,UAAU,KAAA,YAAiB,IAAA,GAAO,UAAU,KAAA,CAAM,WAAA,KAAgB,SAAA,CAAU,KAAA;AAAA,QACnF,GAAA,EAAK,UAAU,GAAA,YAAe,IAAA,GAAO,UAAU,GAAA,CAAI,WAAA,KAAgB,SAAA,CAAU;AAAA,OAC9E,CAAA;AACD,MAAA,YAAA,CAAa,GAAA,CAAI,aAAa,YAAY,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,yBAAA,EAA4B,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,MAAA,EAA2D;AAChF,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,SAAQ,GAAI,MAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,0BAAA,EAA6B,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,EAAU,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,KAAK,EAAE,CAAA;AAAA,KACtI;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,EAG2C;AAC/C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,+BAAA,CAAA,EAAmC;AAAA,MACrD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,MAAA;AAAO,KACnB,CAAA;AAAA,EACH;AACF,CAAA;;;AC9EO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CACE,OAAA,EACQ,QAAA,EACA,SAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA8D;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAAkF;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,GAAI,MAAA,EAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAO,KAAA,CAAM,QAAA,EAAS,EAAE,GAAI;AAAC,KAC3D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eACE,UAAA,EACgD;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oCAAA,EAAuC,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,UAAA;AAAW,KACpB,CAAA;AAAA,EACH;AACF,CAAA;;;AC5BO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EACrC,aAAA;AAAA,EACR,YAAY,OAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CAAc,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,cAAA,EAAkG;AACjH,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAA,EAAiB;AAC/B,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,MAAA,EAAiE;AACvF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,+BAAA,EAAkC,MAAA,CAAO,UAAU,CAAA,SAAA,EAAY,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,MAAA,EAAiE;AACtF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,2BAAA,EAA8B,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,MAAA,EAAuE;AAC/F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,4BAAA,EAA+B,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAA,CAAgB,UAAkB,OAAA,EAAiB;AACxD,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,EACzD;AAAA,EAEO,iBAAA,CACL,QAAA,EACA,IAAA,GAAiD,EAAC,EACR;AAC1C,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,GAAA,GAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,kBAAA,EAAqB,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,IACxE,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,MAAA,GAAA,GAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,IACpF;AACA,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACzB;AAAA,EAEO,YAAA,CACL,QAAA,EACA,IAAA,GAAiD,EAAC,EACF;AAChD,IAAA,IAAI,GAAA,GAAM,EAAA;AAEV,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,GAAA,GAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,MAAA,GAAA,GAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,GAAA,EAAK,EAAE,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBAAoB,MAAA,EAAyE;AAClG,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,kCAAA,EAAqC,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,gBAAgB,OAAA,EAA+C;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,2BAAA,EAA8B,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,wBAAwB,MAAA,EAAwE;AACrG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,uCAAA,EAA0C,MAAA,CAAO,UAAU,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAAA,EACjH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,0BAA0B,MAAA,EAA8E;AAC7G,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,sCAAA,EAAyC,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,sBAAA,CAAuB,UAAkB,SAAA,EAAmB;AACjE,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,OAAA,EAAS,UAAU,SAAS,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,2BAA2B,MAAA,EAAgF;AAChH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,4CAAA,EAA+C,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI;AAAA,MACrF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,uBAAuB,SAAA,EAAiD;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,qCAAA,EAAwC,SAAS,CAAA,CAAE,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,cAAA,EAAiG;AAC/G,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAAA,EAAgB;AAC7B,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aACL,cAAA,EAC8C;AAC9C,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,cAAA,EAAiB,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,UAAA,EAAoB;AACrC,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,sBAAA,GAAgE;AACrE,IAAA,OAAO,IAAA,CAAK,QAAQ,qBAAqB,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,sBAAsB,QAAA,EAAkB;AAC7C,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,UAAA,EAAoB;AACnC,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAAA,EAAiD;AAC9D,IAAA,MAAM,EAAE,aAAa,QAAA,EAAU,MAAA,EAAQ,UAAU,OAAA,EAAS,IAAA,EAAM,SAAQ,GAAI,MAAA;AAC5E,IAAA,MAAM,WAAW,OAAA,GAAU,MAAA,CAAO,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAE/F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,GAAA,CAAI,eAAe,WAAW,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,QAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,YAAY,CAAA,CAAE,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,SAAA,CAAW,CAAA;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,MAAA,EAAgD;AAClE,IAAA,MAAM,EAAE,OAAO,WAAA,EAAa,QAAA,EAAU,QAAQ,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAEnF,IAAA,MAAM,WAAW,OAAA,GAAU,MAAA,CAAO,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAC/F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,GAAA,CAAI,eAAe,WAAW,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,QAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,gBAAA,GAAsD;AAC3D,IAAA,OAAO,IAAA,CAAK,QAAQ,sBAAsB,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,MAAA,EAA4D;AAC9E,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,WAAW,QAAA,EAAU,MAAA,EAAO,GAAI,MAAA,IAAU,EAAC;AAC/E,IAAA,MAAM,aAAa,SAAA,GAAY,MAAA,CAAO,QAAQ,SAAS,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAErG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,QAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,aAAa,UAAU,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAE,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,cAAA,CAAgB,CAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,MAAA,EAA8E;AACjG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,MAAA,EAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,mBAAA,EAAsB,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,mBAAA,CAAoB,UAAkB,MAAA,EAA0D;AACrG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,QAAQ,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBAAkB,QAAA,EAAsD;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,SAAA,EAAY,QAAQ,CAAA,MAAA,CAAQ,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAA,CAAiB,UAAkB,MAAA,EAAyB;AACjE,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,OAAA,EAAiB;AAC7B,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAA,CAAiB;AAAA,IACtB,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,EAIG;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,QAAQ,2BAA2B,OAAO,CAAA,YAAA,EAAe,UAAU,CAAA,CAAE,CAAA;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,mBAAA,CAAoB;AAAA,IACzB,OAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAKG;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,QAAQ,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAA,EAAI;AAAA,MACvF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,aAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAA,GAAyD;AAC9D,IAAA,OAAO,IAAA,CAAK,QAAQ,qBAAqB,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,QAAA,EAA8C;AAC7D,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3E;AAAA,EAEO,oBAAoB,MAAA,EAA+D;AACxF,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,YAAW,GAAI,MAAA;AAC1D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,YAAA,CAAa,GAAA,CAAI,cAAc,UAAU,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACjH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,MAAA,EAA4D;AAClF,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AACjC,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBAAoB,MAAA,EAA+D;AACxF,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,IAAA,EAAM,SAAQ,GAAI,MAAA;AAChD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,KAAK,EAAE,CAAA;AAAA,KAC7H;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,MAAA,EAAqD;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,aAAA,EAAe;AAAA,MACjC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAuC;AACrC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,CAAsB,CAAA;AAAA,EAC5C;AAAA,EAEA,WAAW,OAAA,EAAyC;AAClD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA;AAAA,EAC5C;AAAA,EAEA,YAAY,MAAA,EAA4D;AACtE,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,SAAA,CAAU,MAAM,CAAA;AAAA,EAC5C;AAAA,EAEA,gBAAgB,MAAA,EAA2D;AACzE,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,MAAM,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,MAAA,EAG2C;AAC/C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AAAA,EACxC;AACF;;;ACroBO,IAAM,aAAN,MAIP;AAAA,EACE,EAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EAEA,YAAY,IAAA,EAA+C;AACzD,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,EAAA;AACf,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AAAA,EACtB;AACF;AAGO,SAAS,WAGd,IAAA,EAAkF;AAClF,EAAA,OAAO,IAAI,WAAW,IAAI,CAAA;AAC5B","file":"index.cjs","sourcesContent":["import { RuntimeContext } from '@mastra/core/runtime-context';\n\nexport function parseClientRuntimeContext(runtimeContext?: RuntimeContext | Record<string, any>) {\n if (runtimeContext) {\n if (runtimeContext instanceof RuntimeContext) {\n return Object.fromEntries(runtimeContext.entries());\n }\n return runtimeContext;\n }\n return undefined;\n}\n\nexport function base64RuntimeContext(runtimeContext?: Record<string, any>): string | undefined {\n if (runtimeContext) {\n return btoa(JSON.stringify(runtimeContext));\n }\n return undefined;\n}\n\nexport function runtimeContextQueryString(runtimeContext?: RuntimeContext | Record<string, any>): string {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n if (!runtimeContextParam) return '';\n const searchParams = new URLSearchParams();\n searchParams.set('runtimeContext', runtimeContextParam);\n const queryString = searchParams.toString();\n return queryString ? `?${queryString}` : '';\n}\n","import { z } from 'zod';\nimport type { ZodType } from 'zod';\nimport originalZodToJsonSchema from 'zod-to-json-schema';\n\nfunction isZodType(value: unknown): value is ZodType {\n // Check if it's a Zod schema by looking for common Zod properties and methods\n return (\n typeof value === 'object' &&\n value !== null &&\n '_def' in value &&\n 'parse' in value &&\n typeof (value as any).parse === 'function' &&\n 'safeParse' in value &&\n typeof (value as any).safeParse === 'function'\n );\n}\n\nexport function zodToJsonSchema<T extends ZodType | any>(zodSchema: T) {\n if (!isZodType(zodSchema)) {\n return zodSchema;\n }\n\n if ('toJSONSchema' in z) {\n const fn = 'toJSONSchema';\n // @ts-expect-error Some nextjs compilation issue\n return z[fn].call(z, zodSchema);\n }\n\n return originalZodToJsonSchema(zodSchema, { $refStrategy: 'relative' });\n}\n","import type { ToolsInput } from '@mastra/core/agent';\nimport { isVercelTool } from '@mastra/core/tools/is-vercel-tool';\nimport { zodToJsonSchema } from './zod-to-json-schema';\n\nexport function processClientTools(clientTools: ToolsInput | undefined): ToolsInput | undefined {\n if (!clientTools) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(clientTools).map(([key, value]) => {\n if (isVercelTool(value)) {\n return [\n key,\n {\n ...value,\n parameters: value.parameters ? zodToJsonSchema(value.parameters) : undefined,\n },\n ];\n } else {\n return [\n key,\n {\n ...value,\n inputSchema: value.inputSchema ? zodToJsonSchema(value.inputSchema) : undefined,\n outputSchema: value.outputSchema ? zodToJsonSchema(value.outputSchema) : undefined,\n },\n ];\n }\n }),\n );\n}\n","import type { ReadableStream } from 'stream/web';\nimport type { ChunkType, NetworkChunkType } from '@mastra/core/stream';\n\nasync function sharedProcessMastraStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: any) => Promise<void>;\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete SSE messages\n const lines = buffer.split('\\n\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6); // Remove 'data: '\n\n if (data === '[DONE]') {\n console.info('🏁 Stream finished');\n return;\n }\n\n try {\n const json = JSON.parse(data);\n\n await onChunk(json);\n } catch (error) {\n console.error('❌ JSON parse error:', error, 'Data:', data);\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport async function processMastraNetworkStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: NetworkChunkType) => Promise<void>;\n}) {\n return sharedProcessMastraStream({\n stream,\n onChunk,\n });\n}\n\nexport async function processMastraStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: ChunkType) => Promise<void>;\n}) {\n return sharedProcessMastraStream({\n stream,\n onChunk,\n });\n}\n","import type { RequestOptions, ClientOptions } from '../types';\n\nexport class BaseResource {\n readonly options: ClientOptions;\n\n constructor(options: ClientOptions) {\n this.options = options;\n }\n\n /**\n * Makes an HTTP request to the API with retries and exponential backoff\n * @param path - The API endpoint path\n * @param options - Optional request configuration\n * @returns Promise containing the response data\n */\n public async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n let lastError: Error | null = null;\n const { baseUrl, retries = 3, backoffMs = 100, maxBackoffMs = 1000, headers = {}, credentials } = this.options;\n\n let delay = backoffMs;\n\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const response = await fetch(`${baseUrl.replace(/\\/$/, '')}${path}`, {\n ...options,\n headers: {\n ...(options.body &&\n !(options.body instanceof FormData) &&\n (options.method === 'POST' || options.method === 'PUT')\n ? { 'content-type': 'application/json' }\n : {}),\n ...headers,\n ...options.headers,\n // TODO: Bring this back once we figure out what we/users need to do to make this work with cross-origin requests\n // 'x-mastra-client-type': 'js',\n },\n signal: this.options.abortSignal,\n credentials: options.credentials ?? credentials,\n body:\n options.body instanceof FormData ? options.body : options.body ? JSON.stringify(options.body) : undefined,\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n let errorMessage = `HTTP error! status: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorBody);\n errorMessage += ` - ${JSON.stringify(errorJson)}`;\n } catch {\n if (errorBody) {\n errorMessage += ` - ${errorBody}`;\n }\n }\n throw new Error(errorMessage);\n }\n\n if (options.stream) {\n return response as unknown as T;\n }\n\n const data = await response.json();\n return data as T;\n } catch (error) {\n lastError = error as Error;\n\n if (attempt === retries) {\n break;\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, maxBackoffMs);\n }\n }\n\n throw lastError || new Error('Request failed');\n }\n}\n","import type { ReadableStream } from 'stream/web';\nimport { parsePartialJson, processDataStream } from '@ai-sdk/ui-utils';\nimport type {\n JSONValue,\n ReasoningUIPart,\n TextUIPart,\n ToolInvocation,\n ToolInvocationUIPart,\n UIMessage,\n UseChatOptions,\n} from '@ai-sdk/ui-utils';\nimport { v4 as uuid } from '@lukeed/uuid';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { GenerateReturn, CoreMessage } from '@mastra/core/llm';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { OutputSchema, MastraModelOutput } from '@mastra/core/stream';\nimport type { Tool } from '@mastra/core/tools';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { ZodType } from 'zod';\nimport type {\n GenerateLegacyParams,\n GetAgentResponse,\n GetEvalsByAgentIdResponse,\n GetToolResponse,\n ClientOptions,\n StreamParams,\n StreamLegacyParams,\n UpdateModelParams,\n UpdateModelInModelListParams,\n ReorderModelListParams,\n NetworkStreamParams,\n} from '../types';\n\nimport { parseClientRuntimeContext, runtimeContextQueryString } from '../utils';\nimport { processClientTools } from '../utils/process-client-tools';\nimport { processMastraNetworkStream, processMastraStream } from '../utils/process-mastra-stream';\nimport { zodToJsonSchema } from '../utils/zod-to-json-schema';\nimport { BaseResource } from './base';\n\nasync function executeToolCallAndRespond({\n response,\n params,\n runId,\n resourceId,\n threadId,\n runtimeContext,\n respondFn,\n}: {\n params: StreamParams<any>;\n response: Awaited<ReturnType<MastraModelOutput['getFullOutput']>>;\n runId?: string;\n resourceId?: string;\n threadId?: string;\n runtimeContext?: RuntimeContext<any>;\n respondFn: Agent['generate'];\n}) {\n if (response.finishReason === 'tool-calls') {\n const toolCalls = (\n response as unknown as {\n toolCalls: { toolName: string; args: any; toolCallId: string }[];\n messages: CoreMessage[];\n }\n ).toolCalls;\n\n if (!toolCalls || !Array.isArray(toolCalls)) {\n return response;\n }\n\n for (const toolCall of toolCalls) {\n const clientTool = params.clientTools?.[toolCall.toolName] as Tool;\n\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext,\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n // Build updated messages from the response, adding the tool result\n // Do NOT re-include the original user message to avoid storage duplicates\n const updatedMessages = [\n ...(response.response.messages || []),\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n result,\n },\n ],\n },\n ] as MessageListInput;\n\n // @ts-ignore\n return respondFn({\n ...params,\n messages: updatedMessages,\n });\n }\n }\n }\n}\n\nexport class AgentVoice extends BaseResource {\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n this.agentId = agentId;\n }\n\n /**\n * Convert text to speech using the agent's voice provider\n * @param text - Text to convert to speech\n * @param options - Optional provider-specific options for speech generation\n * @returns Promise containing the audio data\n */\n async speak(text: string, options?: { speaker?: string; [key: string]: any }): Promise<Response> {\n return this.request<Response>(`/api/agents/${this.agentId}/voice/speak`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: { input: text, options },\n stream: true,\n });\n }\n\n /**\n * Convert speech to text using the agent's voice provider\n * @param audio - Audio data to transcribe\n * @param options - Optional provider-specific options\n * @returns Promise containing the transcribed text\n */\n listen(audio: Blob, options?: Record<string, any>): Promise<{ text: string }> {\n const formData = new FormData();\n formData.append('audio', audio);\n\n if (options) {\n formData.append('options', JSON.stringify(options));\n }\n\n return this.request(`/api/agents/${this.agentId}/voice/listen`, {\n method: 'POST',\n body: formData,\n });\n }\n\n /**\n * Get available speakers for the agent's voice provider\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing list of available speakers\n */\n getSpeakers(\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<Array<{ voiceId: string; [key: string]: any }>> {\n return this.request(`/api/agents/${this.agentId}/voice/speakers${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Get the listener configuration for the agent's voice provider\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing a check if the agent has listening capabilities\n */\n getListener(runtimeContext?: RuntimeContext | Record<string, any>): Promise<{ enabled: boolean }> {\n return this.request(`/api/agents/${this.agentId}/voice/listener${runtimeContextQueryString(runtimeContext)}`);\n }\n}\n\nexport class Agent extends BaseResource {\n public readonly voice: AgentVoice;\n\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n this.voice = new AgentVoice(options, this.agentId);\n }\n\n /**\n * Retrieves details about the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing agent details including model and instructions\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetAgentResponse> {\n return this.request(`/api/agents/${this.agentId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Generates a response from the agent\n * @param params - Generation parameters including prompt\n * @returns Promise containing the generated response\n */\n async generateLegacy(\n params: GenerateLegacyParams<undefined> & { output?: never; experimental_output?: never },\n ): Promise<GenerateReturn<any, undefined, undefined>>;\n async generateLegacy<Output extends JSONSchema7 | ZodType>(\n params: GenerateLegacyParams<Output> & { output: Output; experimental_output?: never },\n ): Promise<GenerateReturn<any, Output, undefined>>;\n async generateLegacy<StructuredOutput extends JSONSchema7 | ZodType>(\n params: GenerateLegacyParams<StructuredOutput> & { output?: never; experimental_output: StructuredOutput },\n ): Promise<GenerateReturn<any, undefined, StructuredOutput>>;\n async generateLegacy<\n Output extends JSONSchema7 | ZodType | undefined = undefined,\n StructuredOutput extends JSONSchema7 | ZodType | undefined = undefined,\n >(params: GenerateLegacyParams<Output>): Promise<GenerateReturn<any, Output, StructuredOutput>> {\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n };\n\n const { runId, resourceId, threadId, runtimeContext } = processedParams as GenerateLegacyParams;\n\n const response: GenerateReturn<any, Output, StructuredOutput> = await this.request(\n `/api/agents/${this.agentId}/generate-legacy`,\n {\n method: 'POST',\n body: processedParams,\n },\n );\n\n if (response.finishReason === 'tool-calls') {\n const toolCalls = (\n response as unknown as {\n toolCalls: { toolName: string; args: any; toolCallId: string }[];\n messages: CoreMessage[];\n }\n ).toolCalls;\n\n if (!toolCalls || !Array.isArray(toolCalls)) {\n return response;\n }\n\n for (const toolCall of toolCalls) {\n const clientTool = params.clientTools?.[toolCall.toolName] as Tool;\n\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext,\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n // Build updated messages from the response, adding the tool result\n // Do NOT re-include the original user message to avoid storage duplicates\n const updatedMessages = [\n ...(response.response as unknown as { messages: CoreMessage[] }).messages,\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n result,\n },\n ],\n },\n ];\n // @ts-ignore\n return this.generate({\n ...params,\n messages: updatedMessages,\n });\n }\n }\n }\n\n return response;\n }\n\n async generate<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n // Backward compatibility overload\n async generate<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n async generate<OUTPUT extends OutputSchema = undefined>(\n messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>> {\n // Handle both new signature (messages, options) and old signature (single param object)\n let params: StreamParams<OUTPUT>;\n if (typeof messagesOrParams === 'object' && 'messages' in messagesOrParams) {\n // Old signature: single parameter object\n params = messagesOrParams;\n } else {\n // New signature: messages as first param, options as second\n params = {\n messages: messagesOrParams as MessageListInput,\n ...options,\n } as StreamParams<OUTPUT>;\n }\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n structuredOutput: params.structuredOutput\n ? {\n ...params.structuredOutput,\n schema: zodToJsonSchema(params.structuredOutput.schema),\n }\n : undefined,\n };\n\n const { runId, resourceId, threadId, runtimeContext } = processedParams as StreamParams;\n\n const response = await this.request<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>(\n `/api/agents/${this.agentId}/generate`,\n {\n method: 'POST',\n body: processedParams,\n },\n );\n\n if (response.finishReason === 'tool-calls') {\n return executeToolCallAndRespond({\n response,\n params,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext<any>,\n respondFn: this.generate.bind(this),\n }) as unknown as Awaited<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n }\n\n return response;\n }\n\n private async processChatResponse({\n stream,\n update,\n onToolCall,\n onFinish,\n getCurrentDate = () => new Date(),\n lastMessage,\n }: {\n stream: ReadableStream<Uint8Array>;\n update: (options: { message: UIMessage; data: JSONValue[] | undefined; replaceLastMessage: boolean }) => void;\n onToolCall?: UseChatOptions['onToolCall'];\n onFinish?: (options: { message: UIMessage | undefined; finishReason: string; usage: string }) => void;\n generateId?: () => string;\n getCurrentDate?: () => Date;\n lastMessage: UIMessage | undefined;\n }) {\n const replaceLastMessage = lastMessage?.role === 'assistant';\n let step = replaceLastMessage\n ? 1 +\n // find max step in existing tool invocations:\n (lastMessage.toolInvocations?.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0) ?? 0)\n : 0;\n\n const message: UIMessage = replaceLastMessage\n ? structuredClone(lastMessage)\n : {\n id: uuid(),\n createdAt: getCurrentDate(),\n role: 'assistant',\n content: '',\n parts: [],\n };\n\n let currentTextPart: TextUIPart | undefined = undefined;\n let currentReasoningPart: ReasoningUIPart | undefined = undefined;\n let currentReasoningTextDetail: { type: 'text'; text: string; signature?: string } | undefined = undefined;\n\n function updateToolInvocationPart(toolCallId: string, invocation: ToolInvocation) {\n const part = message.parts.find(\n part => part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\n }\n }\n\n const data: JSONValue[] = [];\n\n // keep list of current message annotations for message\n let messageAnnotations: JSONValue[] | undefined = replaceLastMessage ? lastMessage?.annotations : undefined;\n\n // keep track of partial tool calls\n const partialToolCalls: Record<string, { text: string; step: number; index: number; toolName: string }> = {};\n\n let usage: any = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN,\n };\n let finishReason: string = 'unknown';\n\n function execUpdate() {\n // make a copy of the data array to ensure UI is updated (SWR)\n const copiedData = [...data];\n\n // keeps the currentMessage up to date with the latest annotations,\n // even if annotations preceded the message creation\n if (messageAnnotations?.length) {\n message.annotations = messageAnnotations;\n }\n\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: uuid(),\n } as UIMessage;\n\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage,\n });\n }\n\n await processDataStream({\n stream: stream as ReadableStream<Uint8Array>,\n onTextPart(value) {\n if (currentTextPart == null) {\n currentTextPart = {\n type: 'text',\n text: value,\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += value;\n }\n\n message.content += value;\n execUpdate();\n },\n onReasoningPart(value) {\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: 'text', text: value };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += value;\n }\n\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: value,\n details: [currentReasoningTextDetail],\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += value;\n }\n\n message.reasoning = (message.reasoning ?? '') + value;\n\n execUpdate();\n },\n onReasoningSignaturePart(value) {\n if (currentReasoningTextDetail != null) {\n currentReasoningTextDetail.signature = value.signature;\n }\n },\n onRedactedReasoningPart(value) {\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: '',\n details: [],\n };\n message.parts.push(currentReasoningPart);\n }\n\n currentReasoningPart.details.push({\n type: 'redacted',\n data: value.data,\n });\n\n currentReasoningTextDetail = undefined;\n\n execUpdate();\n },\n onFilePart(value) {\n message.parts.push({\n type: 'file',\n mimeType: value.mimeType,\n data: value.data,\n });\n\n execUpdate();\n },\n onSourcePart(value) {\n message.parts.push({\n type: 'source',\n source: value,\n });\n\n execUpdate();\n },\n onToolCallStreamingStartPart(value) {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n // add the partial tool call to the map\n partialToolCalls[value.toolCallId] = {\n text: '',\n step,\n toolName: value.toolName,\n index: message.toolInvocations.length,\n };\n\n const invocation = {\n state: 'partial-call',\n step,\n toolCallId: value.toolCallId,\n toolName: value.toolName,\n args: undefined,\n } as const;\n\n message.toolInvocations.push(invocation);\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n },\n onToolCallDeltaPart(value) {\n const partialToolCall = partialToolCalls[value.toolCallId];\n\n partialToolCall!.text += value.argsTextDelta;\n\n const { value: partialArgs } = parsePartialJson(partialToolCall!.text);\n\n const invocation = {\n state: 'partial-call',\n step: partialToolCall!.step,\n toolCallId: value.toolCallId,\n toolName: partialToolCall!.toolName,\n args: partialArgs,\n } as const;\n\n message.toolInvocations![partialToolCall!.index] = invocation;\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n },\n async onToolCallPart(value) {\n const invocation = {\n state: 'call',\n step,\n ...value,\n } as const;\n\n if (partialToolCalls[value.toolCallId] != null) {\n // change the partial tool call to a full tool call\n message.toolInvocations![partialToolCalls[value.toolCallId]!.index] = invocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n message.toolInvocations.push(invocation);\n }\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n\n // invoke the onToolCall callback if it exists. This is blocking.\n // In the future we should make this non-blocking, which\n // requires additional state management for error handling etc.\n if (onToolCall) {\n const result = await onToolCall({ toolCall: value });\n if (result != null) {\n const invocation = {\n state: 'result',\n step,\n ...value,\n result,\n } as const;\n\n // store the result in the tool invocation\n message.toolInvocations![message.toolInvocations!.length - 1] = invocation;\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n }\n }\n },\n onToolResultPart(value) {\n const toolInvocations = message.toolInvocations;\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(invocation => invocation.toolCallId === value.toolCallId);\n\n if (toolInvocationIndex === -1) {\n throw new Error('tool_result must be preceded by a tool_call with the same toolCallId');\n }\n\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n ...value,\n } as const;\n\n toolInvocations[toolInvocationIndex] = invocation as ToolInvocation;\n\n updateToolInvocationPart(value.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n },\n onDataPart(value) {\n data.push(...value);\n execUpdate();\n },\n onMessageAnnotationsPart(value) {\n if (messageAnnotations == null) {\n messageAnnotations = [...value];\n } else {\n messageAnnotations.push(...value);\n }\n\n execUpdate();\n },\n onFinishStepPart(value) {\n step += 1;\n\n // reset the current text and reasoning parts\n currentTextPart = value.isContinued ? currentTextPart : undefined;\n currentReasoningPart = undefined;\n currentReasoningTextDetail = undefined;\n },\n onStartStepPart(value) {\n // keep message id stable when we are updating an existing message:\n if (!replaceLastMessage) {\n message.id = value.messageId;\n }\n\n // add a step boundary part to the message\n message.parts.push({ type: 'step-start' });\n execUpdate();\n },\n onFinishMessagePart(value) {\n finishReason = value.finishReason;\n if (value.usage != null) {\n // usage = calculateLanguageModelUsage(value.usage);\n usage = value.usage;\n }\n },\n onErrorPart(error) {\n throw new Error(error);\n },\n });\n\n onFinish?.({ message, finishReason, usage });\n }\n\n /**\n * Streams a response from the agent\n * @param params - Stream parameters including prompt\n * @returns Promise containing the enhanced Response object with processDataStream method\n */\n async streamLegacy<T extends JSONSchema7 | ZodType | undefined = undefined>(\n params: StreamLegacyParams<T>,\n ): Promise<\n Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n }\n > {\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n };\n\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponseLegacy(processedParams, writable);\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async (options = {}) => {\n await processDataStream({\n stream: streamResponse.body as unknown as globalThis.ReadableStream<Uint8Array>,\n ...options,\n });\n };\n\n return streamResponse;\n }\n\n private async processChatResponse_vNext({\n stream,\n update,\n onToolCall,\n onFinish,\n getCurrentDate = () => new Date(),\n lastMessage,\n }: {\n stream: ReadableStream<Uint8Array>;\n update: (options: { message: UIMessage; data: JSONValue[] | undefined; replaceLastMessage: boolean }) => void;\n onToolCall?: UseChatOptions['onToolCall'];\n onFinish?: (options: { message: UIMessage | undefined; finishReason: string; usage: string }) => void;\n generateId?: () => string;\n getCurrentDate?: () => Date;\n lastMessage: UIMessage | undefined;\n }) {\n const replaceLastMessage = lastMessage?.role === 'assistant';\n let step = replaceLastMessage\n ? 1 +\n // find max step in existing tool invocations:\n (lastMessage.toolInvocations?.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0) ?? 0)\n : 0;\n\n const message: UIMessage = replaceLastMessage\n ? structuredClone(lastMessage)\n : {\n id: uuid(),\n createdAt: getCurrentDate(),\n role: 'assistant',\n content: '',\n parts: [],\n };\n\n let currentTextPart: TextUIPart | undefined = undefined;\n let currentReasoningPart: ReasoningUIPart | undefined = undefined;\n let currentReasoningTextDetail: { type: 'text'; text: string; signature?: string } | undefined = undefined;\n\n function updateToolInvocationPart(toolCallId: string, invocation: ToolInvocation) {\n const part = message.parts.find(\n part => part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\n }\n }\n\n const data: JSONValue[] = [];\n\n // keep list of current message annotations for message\n let messageAnnotations: JSONValue[] | undefined = replaceLastMessage ? lastMessage?.annotations : undefined;\n\n // keep track of partial tool calls\n const partialToolCalls: Record<string, { text: string; step: number; index: number; toolName: string }> = {};\n\n let usage: any = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN,\n };\n let finishReason: string = 'unknown';\n\n function execUpdate() {\n // make a copy of the data array to ensure UI is updated (SWR)\n const copiedData = [...data];\n\n // keeps the currentMessage up to date with the latest annotations,\n // even if annotations preceded the message creation\n if (messageAnnotations?.length) {\n message.annotations = messageAnnotations;\n }\n\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: uuid(),\n } as UIMessage;\n\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage,\n });\n }\n\n await processMastraStream({\n stream,\n // TODO: casting as any here because the stream types were all typed as any before in core.\n // but this is completely wrong and this fn is probably broken. Remove \":any\" and you'll see a bunch of type errors\n onChunk: async (chunk: any) => {\n switch (chunk.type) {\n case 'tripwire': {\n message.parts.push({\n type: 'text',\n text: chunk.payload.tripwireReason,\n });\n\n execUpdate();\n break;\n }\n\n case 'step-start': {\n // keep message id stable when we are updating an existing message:\n if (!replaceLastMessage) {\n message.id = chunk.payload.messageId;\n }\n\n // add a step boundary part to the message\n message.parts.push({ type: 'step-start' });\n execUpdate();\n break;\n }\n\n case 'text-delta': {\n if (currentTextPart == null) {\n currentTextPart = {\n type: 'text',\n text: chunk.payload.text,\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += chunk.payload.text;\n }\n\n message.content += chunk.payload.text;\n execUpdate();\n break;\n }\n\n case 'reasoning-delta': {\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: 'text', text: chunk.payload.text };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += chunk.payload.text;\n }\n\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: chunk.payload.text,\n details: [currentReasoningTextDetail],\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += chunk.payload.text;\n }\n\n message.reasoning = (message.reasoning ?? '') + chunk.payload.text;\n\n execUpdate();\n break;\n }\n case 'file': {\n message.parts.push({\n type: 'file',\n mimeType: chunk.payload.mimeType,\n data: chunk.payload.data,\n });\n\n execUpdate();\n break;\n }\n\n case 'source': {\n message.parts.push({\n type: 'source',\n source: chunk.payload.source,\n });\n execUpdate();\n break;\n }\n\n case 'tool-call': {\n const invocation = {\n state: 'call',\n step,\n ...chunk.payload,\n } as const;\n\n if (partialToolCalls[chunk.payload.toolCallId] != null) {\n // change the partial tool call to a full tool call\n message.toolInvocations![partialToolCalls[chunk.payload.toolCallId]!.index] =\n invocation as ToolInvocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n message.toolInvocations.push(invocation as ToolInvocation);\n }\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n\n // invoke the onToolCall callback if it exists. This is blocking.\n // In the future we should make this non-blocking, which\n // requires additional state management for error handling etc.\n if (onToolCall) {\n const result = await onToolCall({ toolCall: chunk.payload as any });\n if (result != null) {\n const invocation = {\n state: 'result',\n step,\n ...chunk.payload,\n result,\n } as const;\n\n // store the result in the tool invocation\n message.toolInvocations![message.toolInvocations!.length - 1] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n }\n }\n }\n\n case 'tool-call-input-streaming-start': {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n // add the partial tool call to the map\n partialToolCalls[chunk.payload.toolCallId] = {\n text: '',\n step,\n toolName: chunk.payload.toolName,\n index: message.toolInvocations.length,\n };\n\n const invocation = {\n state: 'partial-call',\n step,\n toolCallId: chunk.payload.toolCallId,\n toolName: chunk.payload.toolName,\n args: chunk.payload.args,\n } as const;\n\n message.toolInvocations.push(invocation as ToolInvocation);\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation);\n\n execUpdate();\n break;\n }\n\n case 'tool-call-delta': {\n const partialToolCall = partialToolCalls[chunk.payload.toolCallId];\n\n partialToolCall!.text += chunk.payload.argsTextDelta;\n\n const { value: partialArgs } = parsePartialJson(partialToolCall!.text);\n\n const invocation = {\n state: 'partial-call',\n step: partialToolCall!.step,\n toolCallId: chunk.payload.toolCallId,\n toolName: partialToolCall!.toolName,\n args: partialArgs,\n } as const;\n\n message.toolInvocations![partialToolCall!.index] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation);\n\n execUpdate();\n break;\n }\n\n case 'tool-result': {\n const toolInvocations = message.toolInvocations;\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(\n invocation => invocation.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolInvocationIndex === -1) {\n throw new Error('tool_result must be preceded by a tool_call with the same toolCallId');\n }\n\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n ...chunk.payload,\n } as const;\n\n toolInvocations[toolInvocationIndex] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n break;\n }\n\n case 'error': {\n throw new Error(chunk.payload.error);\n }\n\n case 'data': {\n data.push(...chunk.payload.data);\n execUpdate();\n break;\n }\n\n case 'step-finish': {\n step += 1;\n\n // reset the current text and reasoning parts\n currentTextPart = chunk.payload.stepResult.isContinued ? currentTextPart : undefined;\n currentReasoningPart = undefined;\n currentReasoningTextDetail = undefined;\n\n execUpdate();\n break;\n }\n\n case 'finish': {\n finishReason = chunk.payload.stepResult.reason;\n if (chunk.payload.usage != null) {\n // usage = calculateLanguageModelUsage(value.usage);\n usage = chunk.payload.usage;\n }\n break;\n }\n }\n },\n });\n\n onFinish?.({ message, finishReason, usage });\n }\n\n async processStreamResponse(processedParams: any, writable: any) {\n const response: Response = await this.request(`/api/agents/${this.agentId}/stream`, {\n method: 'POST',\n body: processedParams,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n try {\n let toolCalls: ToolInvocation[] = [];\n let messages: UIMessage[] = [];\n\n // Use tee() to split the stream into two branches\n const [streamForWritable, streamForProcessing] = response.body.tee();\n\n // Pipe one branch to the writable stream without holding a persistent lock\n\n streamForWritable\n .pipeTo(\n new WritableStream<Uint8Array>({\n async write(chunk) {\n let writer;\n\n // Filter out terminal markers so the client stream doesn't end before recursion\n try {\n writer = writable.getWriter();\n const text = new TextDecoder().decode(chunk);\n const lines = text.split('\\n\\n');\n const readableLines = lines.filter(line => line !== '[DONE]').join('\\n\\n');\n\n await writer.write(new TextEncoder().encode(readableLines));\n } catch {\n await writer?.write(chunk);\n } finally {\n writer?.releaseLock();\n }\n },\n }),\n {\n preventClose: true,\n },\n )\n .catch(error => {\n console.error('Error piping to writable stream:', error);\n });\n\n // Process the other branch for chat response handling\n this.processChatResponse_vNext({\n stream: streamForProcessing as unknown as ReadableStream<Uint8Array>,\n update: ({ message }) => {\n const existingIndex = messages.findIndex(m => m.id === message.id);\n\n if (existingIndex !== -1) {\n messages[existingIndex] = message;\n } else {\n messages.push(message);\n }\n },\n onFinish: async ({ finishReason, message }) => {\n if (finishReason === 'tool-calls') {\n const toolCall = [...(message?.parts ?? [])]\n .reverse()\n .find(part => part.type === 'tool-invocation')?.toolInvocation;\n if (toolCall) {\n toolCalls.push(toolCall);\n }\n\n let shouldExecuteClientTool = false;\n // Handle tool calls if needed\n for (const toolCall of toolCalls) {\n const clientTool = processedParams.clientTools?.[toolCall.toolName] as Tool;\n if (clientTool && clientTool.execute) {\n shouldExecuteClientTool = true;\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId: processedParams.runId,\n resourceId: processedParams.resourceId,\n threadId: processedParams.threadId,\n runtimeContext: processedParams.runtimeContext as RuntimeContext,\n // TODO: Pass proper tracing context when client-js supports tracing\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n const lastMessageRaw = messages[messages.length - 1];\n const lastMessage: UIMessage | undefined =\n lastMessageRaw != null ? JSON.parse(JSON.stringify(lastMessageRaw)) : undefined;\n\n const toolInvocationPart = lastMessage?.parts?.find(\n part => part.type === 'tool-invocation' && part.toolInvocation?.toolCallId === toolCall.toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (toolInvocationPart) {\n toolInvocationPart.toolInvocation = {\n ...toolInvocationPart.toolInvocation,\n state: 'result',\n result,\n };\n }\n\n const toolInvocation = lastMessage?.toolInvocations?.find(\n toolInvocation => toolInvocation.toolCallId === toolCall.toolCallId,\n ) as ToolInvocation | undefined;\n\n if (toolInvocation) {\n toolInvocation.state = 'result';\n // @ts-ignore\n toolInvocation.result = result;\n }\n\n // Build updated messages for the recursive call\n // Do NOT re-include the original messages to avoid storage duplicates\n const updatedMessages =\n lastMessage != null ? [...messages.filter(m => m.id !== lastMessage.id), lastMessage] : [...messages];\n\n // Recursively call stream with updated messages\n this.processStreamResponse(\n {\n ...processedParams,\n messages: updatedMessages,\n },\n writable,\n ).catch(error => {\n console.error('Error processing stream response:', error);\n });\n }\n }\n\n if (!shouldExecuteClientTool) {\n setTimeout(() => {\n writable.close();\n }, 0);\n }\n } else {\n setTimeout(() => {\n writable.close();\n }, 0);\n }\n },\n lastMessage: undefined,\n }).catch(error => {\n console.error('Error processing stream response:', error);\n });\n } catch (error) {\n console.error('Error processing stream response:', error);\n }\n\n return response;\n }\n\n async network(params: NetworkStreamParams): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n const response: Response = await this.request(`/api/agents/${this.agentId}/network`, {\n method: 'POST',\n body: params,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n const streamResponse = new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => {\n await processMastraNetworkStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n async stream<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n // Backward compatibility overload\n async stream<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n async stream<OUTPUT extends OutputSchema = undefined>(\n messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n // Handle both new signature (messages, options) and old signature (single param object)\n let params: StreamParams<OUTPUT>;\n if (typeof messagesOrParams === 'object' && 'messages' in messagesOrParams) {\n // Old signature: single parameter object\n params = messagesOrParams;\n } else {\n // New signature: messages as first param, options as second\n params = {\n messages: messagesOrParams as MessageListInput,\n ...options,\n } as StreamParams<OUTPUT>;\n }\n const processedParams: StreamParams<OUTPUT> = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n structuredOutput: params.structuredOutput\n ? {\n ...params.structuredOutput,\n schema: zodToJsonSchema(params.structuredOutput.schema) as OUTPUT,\n }\n : undefined,\n };\n\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponse(processedParams, writable);\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => {\n await processMastraStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n\n /**\n * Processes the stream response and handles tool calls\n */\n private async processStreamResponseLegacy(processedParams: any, writable: WritableStream<Uint8Array>) {\n const response: Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n } = await this.request(`/api/agents/${this.agentId}/stream-legacy`, {\n method: 'POST',\n body: processedParams,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n try {\n let toolCalls: ToolInvocation[] = [];\n let messages: UIMessage[] = [];\n\n // Use tee() to split the stream into two branches\n const [streamForWritable, streamForProcessing] = response.body.tee();\n\n // Pipe one branch to the writable stream\n streamForWritable\n .pipeTo(writable, {\n preventClose: true,\n })\n .catch(error => {\n console.error('Error piping to writable stream:', error);\n });\n\n // Process the other branch for chat response handling\n this.processChatResponse({\n stream: streamForProcessing as unknown as ReadableStream<Uint8Array>,\n update: ({ message }) => {\n const existingIndex = messages.findIndex(m => m.id === message.id);\n\n if (existingIndex !== -1) {\n messages[existingIndex] = message;\n } else {\n messages.push(message);\n }\n },\n onFinish: async ({ finishReason, message }) => {\n if (finishReason === 'tool-calls') {\n const toolCall = [...(message?.parts ?? [])]\n .reverse()\n .find(part => part.type === 'tool-invocation')?.toolInvocation;\n if (toolCall) {\n toolCalls.push(toolCall);\n }\n\n // Handle tool calls if needed\n for (const toolCall of toolCalls) {\n const clientTool = processedParams.clientTools?.[toolCall.toolName] as Tool;\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId: processedParams.runId,\n resourceId: processedParams.resourceId,\n threadId: processedParams.threadId,\n runtimeContext: processedParams.runtimeContext as RuntimeContext,\n // TODO: Pass proper tracing context when client-js supports tracing\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n const lastMessage: UIMessage = JSON.parse(JSON.stringify(messages[messages.length - 1]));\n\n const toolInvocationPart = lastMessage?.parts?.find(\n part => part.type === 'tool-invocation' && part.toolInvocation?.toolCallId === toolCall.toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (toolInvocationPart) {\n toolInvocationPart.toolInvocation = {\n ...toolInvocationPart.toolInvocation,\n state: 'result',\n result,\n };\n }\n\n const toolInvocation = lastMessage?.toolInvocations?.find(\n toolInvocation => toolInvocation.toolCallId === toolCall.toolCallId,\n ) as ToolInvocation | undefined;\n\n if (toolInvocation) {\n toolInvocation.state = 'result';\n // @ts-ignore\n toolInvocation.result = result;\n }\n\n // write the tool result part to the stream\n const writer = writable.getWriter();\n\n try {\n await writer.write(\n new TextEncoder().encode(\n 'a:' +\n JSON.stringify({\n toolCallId: toolCall.toolCallId,\n result,\n }) +\n '\\n',\n ),\n );\n } finally {\n writer.releaseLock();\n }\n\n // Recursively call stream with updated messages\n this.processStreamResponseLegacy(\n {\n ...processedParams,\n messages: [...messages.filter(m => m.id !== lastMessage.id), lastMessage],\n },\n writable,\n ).catch(error => {\n console.error('Error processing stream response:', error);\n });\n }\n }\n } else {\n setTimeout(() => {\n // We can't close the stream in this function, we have to wait until it's done\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writable.close();\n }, 0);\n }\n },\n lastMessage: undefined,\n }).catch(error => {\n console.error('Error processing stream response:', error);\n });\n } catch (error) {\n console.error('Error processing stream response:', error);\n }\n return response;\n }\n\n /**\n * Gets details about a specific tool available to the agent\n * @param toolId - ID of the tool to retrieve\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing tool details\n */\n getTool(toolId: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetToolResponse> {\n return this.request(`/api/agents/${this.agentId}/tools/${toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes a tool for the agent\n * @param toolId - ID of the tool to execute\n * @param params - Parameters required for tool execution\n * @returns Promise containing the tool execution results\n */\n executeTool(\n toolId: string,\n params: { data: any; runtimeContext?: RuntimeContext | Record<string, any> },\n ): Promise<any> {\n const body = {\n data: params.data,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n };\n return this.request(`/api/agents/${this.agentId}/tools/${toolId}/execute`, {\n method: 'POST',\n body,\n });\n }\n\n /**\n * Retrieves evaluation results for the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing agent evaluations\n */\n evals(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetEvalsByAgentIdResponse> {\n return this.request(`/api/agents/${this.agentId}/evals/ci${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves live evaluation results for the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing live agent evaluations\n */\n liveEvals(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetEvalsByAgentIdResponse> {\n return this.request(`/api/agents/${this.agentId}/evals/live${runtimeContextQueryString(runtimeContext)}`);\n }\n /**\n * Updates the model for the agent\n * @param params - Parameters for updating the model\n * @returns Promise containing the updated model\n */\n updateModel(params: UpdateModelParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/model`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Updates the model for the agent in the model list\n * @param params - Parameters for updating the model\n * @returns Promise containing the updated model\n */\n updateModelInModelList({ modelConfigId, ...params }: UpdateModelInModelListParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/models/${modelConfigId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Reorders the models for the agent\n * @param params - Parameters for reordering the model list\n * @returns Promise containing the updated model list\n */\n reorderModelList(params: ReorderModelListParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/models/reorder`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * @deprecated generateVNext has been renamed to generate. Please use generate instead.\n */\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>>;\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>>;\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n _messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n _options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>> {\n throw new Error('generateVNext has been renamed to generate. Please use generate instead.');\n }\n\n /**\n * @deprecated streamVNext has been renamed to stream. Please use stream instead.\n */\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n // Backward compatibility overload\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n _messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n _options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n throw new Error('streamVNext has been renamed to stream. Please use stream instead.');\n }\n}\n","import type { StorageThreadType } from '@mastra/core/memory';\n\nimport type {\n GetMemoryThreadMessagesResponse,\n ClientOptions,\n UpdateMemoryThreadParams,\n GetMemoryThreadMessagesParams,\n GetMemoryThreadMessagesPaginatedParams,\n GetMemoryThreadMessagesPaginatedResponse,\n} from '../types';\n\nimport { BaseResource } from './base';\n\nexport class MemoryThread extends BaseResource {\n constructor(\n options: ClientOptions,\n private threadId: string,\n private agentId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves the memory thread details\n * @returns Promise containing thread details including title and metadata\n */\n get(): Promise<StorageThreadType> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`);\n }\n\n /**\n * Updates the memory thread properties\n * @param params - Update parameters including title and metadata\n * @returns Promise containing updated thread details\n */\n update(params: UpdateMemoryThreadParams): Promise<StorageThreadType> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`, {\n method: 'PATCH',\n body: params,\n });\n }\n\n /**\n * Deletes the memory thread\n * @returns Promise containing deletion result\n */\n delete(): Promise<{ result: string }> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves messages associated with the thread\n * @param params - Optional parameters including limit for number of messages to retrieve\n * @returns Promise containing thread messages and UI messages\n */\n getMessages(params?: GetMemoryThreadMessagesParams): Promise<GetMemoryThreadMessagesResponse> {\n const query = new URLSearchParams({\n agentId: this.agentId,\n ...(params?.limit ? { limit: params.limit.toString() } : {}),\n });\n return this.request(`/api/memory/threads/${this.threadId}/messages?${query.toString()}`);\n }\n\n /**\n * Retrieves paginated messages associated with the thread with advanced filtering and selection options\n * @param params - Pagination parameters including selectBy criteria, page, perPage, date ranges, and message inclusion options\n * @returns Promise containing paginated thread messages with pagination metadata (total, page, perPage, hasMore)\n */\n getMessagesPaginated({\n selectBy,\n ...rest\n }: GetMemoryThreadMessagesPaginatedParams): Promise<GetMemoryThreadMessagesPaginatedResponse> {\n const query = new URLSearchParams({\n ...rest,\n ...(selectBy ? { selectBy: JSON.stringify(selectBy) } : {}),\n });\n return this.request(`/api/memory/threads/${this.threadId}/messages/paginated?${query.toString()}`);\n }\n\n /**\n * Deletes one or more messages from the thread\n * @param messageIds - Can be a single message ID (string), array of message IDs,\n * message object with id property, or array of message objects\n * @returns Promise containing deletion result\n */\n deleteMessages(\n messageIds: string | string[] | { id: string } | { id: string }[],\n ): Promise<{ success: boolean; message: string }> {\n const query = new URLSearchParams({\n agentId: this.agentId,\n });\n return this.request(`/api/memory/messages/delete?${query.toString()}`, {\n method: 'POST',\n body: { messageIds },\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type {\n CreateIndexParams,\n GetVectorIndexResponse,\n QueryVectorParams,\n QueryVectorResponse,\n ClientOptions,\n UpsertVectorParams,\n} from '../types';\nimport { runtimeContextQueryString } from '../utils';\n\nimport { BaseResource } from './base';\n\nexport class Vector extends BaseResource {\n constructor(\n options: ClientOptions,\n private vectorName: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves details about a specific vector index\n * @param indexName - Name of the index to get details for\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing vector index details\n */\n details(indexName: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetVectorIndexResponse> {\n return this.request(\n `/api/vector/${this.vectorName}/indexes/${indexName}${runtimeContextQueryString(runtimeContext)}`,\n );\n }\n\n /**\n * Deletes a vector index\n * @param indexName - Name of the index to delete\n * @returns Promise indicating deletion success\n */\n delete(indexName: string): Promise<{ success: boolean }> {\n return this.request(`/api/vector/${this.vectorName}/indexes/${indexName}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves a list of all available indexes\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing array of index names\n */\n getIndexes(runtimeContext?: RuntimeContext | Record<string, any>): Promise<{ indexes: string[] }> {\n return this.request(`/api/vector/${this.vectorName}/indexes${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Creates a new vector index\n * @param params - Parameters for index creation including dimension and metric\n * @returns Promise indicating creation success\n */\n createIndex(params: CreateIndexParams): Promise<{ success: boolean }> {\n return this.request(`/api/vector/${this.vectorName}/create-index`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Upserts vectors into an index\n * @param params - Parameters containing vectors, metadata, and optional IDs\n * @returns Promise containing array of vector IDs\n */\n upsert(params: UpsertVectorParams): Promise<string[]> {\n return this.request(`/api/vector/${this.vectorName}/upsert`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Queries vectors in an index\n * @param params - Query parameters including query vector and search options\n * @returns Promise containing query results\n */\n query(params: QueryVectorParams): Promise<QueryVectorResponse> {\n return this.request(`/api/vector/${this.vectorName}/query`, {\n method: 'POST',\n body: params,\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { GetToolResponse, ClientOptions } from '../types';\n\nimport { parseClientRuntimeContext, runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\nexport class Tool extends BaseResource {\n constructor(\n options: ClientOptions,\n private toolId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves details about the tool\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing tool details including description and schemas\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetToolResponse> {\n return this.request(`/api/tools/${this.toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes the tool with the provided parameters\n * @param params - Parameters required for tool execution\n * @returns Promise containing the tool execution results\n */\n execute(params: { data: any; runId?: string; runtimeContext?: RuntimeContext | Record<string, any> }): Promise<any> {\n const url = new URLSearchParams();\n\n if (params.runId) {\n url.set('runId', params.runId);\n }\n\n const body = {\n data: params.data,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n };\n\n return this.request(`/api/tools/${this.toolId}/execute?${url.toString()}`, {\n method: 'POST',\n body,\n });\n }\n}\n","import type { TracingOptions } from '@mastra/core/ai-tracing';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type {\n ClientOptions,\n GetWorkflowResponse,\n GetWorkflowRunsResponse,\n GetWorkflowRunsParams,\n WorkflowRunResult,\n WorkflowWatchResult,\n GetWorkflowRunByIdResponse,\n GetWorkflowRunExecutionResultResponse,\n StreamVNextChunkType,\n} from '../types';\n\nimport { parseClientRuntimeContext, base64RuntimeContext, runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\nconst RECORD_SEPARATOR = '\\x1E';\n\nexport class Workflow extends BaseResource {\n constructor(\n options: ClientOptions,\n private workflowId: string,\n ) {\n super(options);\n }\n\n /**\n * Creates an async generator that processes a readable stream and yields workflow records\n * separated by the Record Separator character (\\x1E)\n *\n * @param stream - The readable stream to process\n * @returns An async generator that yields parsed records\n */\n private async *streamProcessor(stream: ReadableStream): AsyncGenerator<WorkflowWatchResult, void, unknown> {\n const reader = stream.getReader();\n\n // Track if we've finished reading from the stream\n let doneReading = false;\n // Buffer to accumulate partial chunks\n let buffer = '';\n\n try {\n while (!doneReading) {\n // Read the next chunk from the stream\n const { done, value } = await reader.read();\n doneReading = done;\n\n // Skip processing if we're done and there's no value\n if (done && !value) continue;\n\n try {\n // Decode binary data to text\n const decoded = value ? new TextDecoder().decode(value) : '';\n\n // Split the combined buffer and new data by record separator\n const chunks = (buffer + decoded).split(RECORD_SEPARATOR);\n\n // The last chunk might be incomplete, so save it for the next iteration\n buffer = chunks.pop() || '';\n\n // Process complete chunks\n for (const chunk of chunks) {\n if (chunk) {\n // Only process non-empty chunks\n if (typeof chunk === 'string') {\n try {\n const parsedChunk = JSON.parse(chunk);\n yield parsedChunk;\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n }\n }\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n\n // Process any remaining data in the buffer after stream is done\n if (buffer) {\n try {\n yield JSON.parse(buffer);\n } catch {\n // Ignore parsing error for final chunk\n }\n }\n } finally {\n // Always ensure we clean up the reader\n reader.cancel().catch(() => {\n // Ignore cancel errors\n });\n }\n }\n\n /**\n * Retrieves details about the workflow\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing workflow details including steps and graphs\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetWorkflowResponse> {\n return this.request(`/api/workflows/${this.workflowId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves all runs for a workflow\n * @param params - Parameters for filtering runs\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing workflow runs array\n */\n runs(\n params?: GetWorkflowRunsParams,\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<GetWorkflowRunsResponse> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n if (params?.fromDate) {\n searchParams.set('fromDate', params.fromDate.toISOString());\n }\n if (params?.toDate) {\n searchParams.set('toDate', params.toDate.toISOString());\n }\n if (params?.limit !== null && params?.limit !== undefined && !isNaN(Number(params?.limit))) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== null && params?.offset !== undefined && !isNaN(Number(params?.offset))) {\n searchParams.set('offset', String(params.offset));\n }\n if (params?.resourceId) {\n searchParams.set('resourceId', params.resourceId);\n }\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n if (searchParams.size) {\n return this.request(`/api/workflows/${this.workflowId}/runs?${searchParams}`);\n } else {\n return this.request(`/api/workflows/${this.workflowId}/runs`);\n }\n }\n\n /**\n * Retrieves a specific workflow run by its ID\n * @param runId - The ID of the workflow run to retrieve\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the workflow run details\n */\n runById(runId: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetWorkflowRunByIdResponse> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${runId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves the execution result for a specific workflow run by its ID\n * @param runId - The ID of the workflow run to retrieve the execution result for\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the workflow run execution result\n */\n runExecutionResult(\n runId: string,\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<GetWorkflowRunExecutionResultResponse> {\n return this.request(\n `/api/workflows/${this.workflowId}/runs/${runId}/execution-result${runtimeContextQueryString(runtimeContext)}`,\n );\n }\n\n /**\n * Cancels a specific workflow run by its ID\n * @param runId - The ID of the workflow run to cancel\n * @returns Promise containing a success message\n */\n cancelRun(runId: string): Promise<{ message: string }> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${runId}/cancel`, {\n method: 'POST',\n });\n }\n\n /**\n * Sends an event to a specific workflow run by its ID\n * @param params - Object containing the runId, event and data\n * @returns Promise containing a success message\n */\n sendRunEvent(params: { runId: string; event: string; data: unknown }): Promise<{ message: string }> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${params.runId}/send-event`, {\n method: 'POST',\n body: { event: params.event, data: params.data },\n });\n }\n\n /**\n * @deprecated Use createRunAsync() instead.\n * @throws {Error} Always throws an error directing users to use createRunAsync()\n */\n async createRun(_params?: { runId?: string }): Promise<{\n runId: string;\n start: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<{ message: string }>;\n watch: (onRecord: (record: WorkflowWatchResult) => void) => Promise<void>;\n resume: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<{ message: string }>;\n stream: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n startAsync: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<WorkflowRunResult>;\n resumeAsync: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<WorkflowRunResult>;\n }> {\n throw new Error(\n 'createRun() has been deprecated. ' +\n 'Please use createRunAsync() instead.\\n\\n' +\n 'Migration guide:\\n' +\n ' Before: const run = workflow.createRun();\\n' +\n ' After: const run = await workflow.createRunAsync();\\n\\n' +\n 'Note: createRunAsync() is an async method, so make sure your calling function is async.',\n );\n }\n\n /**\n * Creates a new workflow run\n * @param params - Optional object containing the optional runId\n * @returns Promise containing the runId of the created run with methods to control execution\n */\n async createRunAsync(params?: { runId?: string }): Promise<{\n runId: string;\n start: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<{ message: string }>;\n watch: (onRecord: (record: WorkflowWatchResult) => void) => Promise<void>;\n resume: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<{ message: string }>;\n stream: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n startAsync: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<WorkflowRunResult>;\n resumeAsync: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<WorkflowRunResult>;\n resumeStreamVNext: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n }> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const res = await this.request<{ runId: string }>(\n `/api/workflows/${this.workflowId}/create-run?${searchParams.toString()}`,\n {\n method: 'POST',\n },\n );\n\n const runId = res.runId;\n\n return {\n runId,\n start: async (p: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.start({\n runId,\n inputData: p.inputData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n startAsync: async (p: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.startAsync({\n runId,\n inputData: p.inputData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n watch: async (onRecord: (record: WorkflowWatchResult) => void) => {\n return this.watch({ runId }, onRecord);\n },\n stream: async (p: { inputData: Record<string, any>; runtimeContext?: RuntimeContext | Record<string, any> }) => {\n return this.stream({ runId, inputData: p.inputData, runtimeContext: p.runtimeContext });\n },\n resume: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.resume({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n resumeAsync: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.resumeAsync({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n resumeStreamVNext: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => {\n return this.resumeStreamVNext({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n });\n },\n };\n }\n\n /**\n * Starts a workflow run synchronously without waiting for the workflow to complete\n * @param params - Object containing the runId, inputData and runtimeContext\n * @returns Promise containing success message\n */\n start(params: {\n runId: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<{ message: string }> {\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/start?runId=${params.runId}`, {\n method: 'POST',\n body: { inputData: params?.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n });\n }\n\n /**\n * Resumes a suspended workflow step synchronously without waiting for the workflow to complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing success message\n */\n resume({\n step,\n runId,\n resumeData,\n tracingOptions,\n ...rest\n }: {\n step: string | string[];\n runId: string;\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<{ message: string }> {\n const runtimeContext = parseClientRuntimeContext(rest.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/resume?runId=${runId}`, {\n method: 'POST',\n body: {\n step,\n resumeData,\n runtimeContext,\n tracingOptions,\n },\n });\n }\n\n /**\n * Starts a workflow run asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n startAsync(params: {\n runId?: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<WorkflowRunResult> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n\n return this.request(`/api/workflows/${this.workflowId}/start-async?${searchParams.toString()}`, {\n method: 'POST',\n body: { inputData: params.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n });\n }\n\n /**\n * Starts a workflow run and returns a stream\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n async stream(params: {\n runId?: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/stream?${searchParams.toString()}`,\n {\n method: 'POST',\n body: { inputData: params.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Observes workflow stream for a workflow run\n * @param params - Object containing the runId\n * @returns Promise containing the workflow execution results\n */\n async observeStream(params: { runId: string }) {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/observe-stream?${searchParams.toString()}`,\n {\n method: 'POST',\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to observe workflow stream: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Starts a workflow run and returns a stream\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n async streamVNext(params: {\n runId?: string;\n inputData?: Record<string, any>;\n runtimeContext?: RuntimeContext;\n closeOnSuspend?: boolean;\n tracingOptions?: TracingOptions;\n }) {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/streamVNext?${searchParams.toString()}`,\n {\n method: 'POST',\n body: {\n inputData: params.inputData,\n runtimeContext,\n closeOnSuspend: params.closeOnSuspend,\n tracingOptions: params.tracingOptions,\n },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Observes workflow vNext stream for a workflow run\n * @param params - Object containing the runId\n * @returns Promise containing the workflow execution results\n */\n async observeStreamVNext(params: { runId: string }) {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/observe-streamVNext?${searchParams.toString()}`,\n {\n method: 'POST',\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to observe stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Resumes a suspended workflow step asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing the workflow resume results\n */\n resumeAsync(params: {\n runId: string;\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<WorkflowRunResult> {\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/resume-async?runId=${params.runId}`, {\n method: 'POST',\n body: {\n step: params.step,\n resumeData: params.resumeData,\n runtimeContext,\n tracingOptions: params.tracingOptions,\n },\n });\n }\n\n /**\n * Resumes a suspended workflow step that uses streamVNext asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing the workflow resume results\n */\n async resumeStreamVNext(params: {\n runId: string;\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<ReadableStream> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/resume-stream?${searchParams.toString()}`,\n {\n method: 'POST',\n body: {\n step: params.step,\n resumeData: params.resumeData,\n runtimeContext,\n tracingOptions: params.tracingOptions,\n },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n /**\n * Watches workflow transitions in real-time\n * @param runId - Optional run ID to filter the watch stream\n * @returns AsyncGenerator that yields parsed records from the workflow watch stream\n */\n async watch({ runId }: { runId?: string }, onRecord: (record: WorkflowWatchResult) => void) {\n const response: Response = await this.request(`/api/workflows/${this.workflowId}/watch?runId=${runId}`, {\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to watch workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n for await (const record of this.streamProcessor(response.body)) {\n if (typeof record === 'string') {\n onRecord(JSON.parse(record));\n } else {\n onRecord(record);\n }\n }\n }\n\n /**\n * Creates a new ReadableStream from an iterable or async iterable of objects,\n * serializing each as JSON and separating them with the record separator (\\x1E).\n *\n * @param records - An iterable or async iterable of objects to stream\n * @returns A ReadableStream emitting the records as JSON strings separated by the record separator\n */\n static createRecordStream(records: Iterable<any> | AsyncIterable<any>): ReadableStream {\n const encoder = new TextEncoder();\n return new ReadableStream({\n async start(controller) {\n try {\n for await (const record of records as AsyncIterable<any>) {\n const json = JSON.stringify(record) + RECORD_SEPARATOR;\n controller.enqueue(encoder.encode(json));\n }\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n}\n","import type {\n AgentCard,\n GetTaskResponse,\n MessageSendParams,\n SendMessageResponse,\n SendStreamingMessageResponse,\n Task,\n TaskQueryParams,\n} from '@mastra/core/a2a';\nimport type { ClientOptions } from '../types';\nimport { BaseResource } from './base';\n\n/**\n * Class for interacting with an agent via the A2A protocol\n */\nexport class A2A extends BaseResource {\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n }\n\n /**\n * Get the agent card with metadata about the agent\n * @returns Promise containing the agent card information\n */\n async getCard(): Promise<AgentCard> {\n return this.request(`/.well-known/${this.agentId}/agent-card.json`);\n }\n\n /**\n * Send a message to the agent and gets a message or task response\n * @param params - Parameters for the task\n * @returns Promise containing the response\n */\n async sendMessage(params: MessageSendParams): Promise<SendMessageResponse> {\n const response = await this.request<SendMessageResponse>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'message/send',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Sends a message to an agent to initiate/continue a task and subscribes\n * the client to real-time updates for that task via Server-Sent Events (SSE).\n * @param params - Parameters for the task\n * @returns A stream of Server-Sent Events. Each SSE `data` field contains a `SendStreamingMessageResponse`\n */\n async sendStreamingMessage(params: MessageSendParams): Promise<AsyncIterable<SendStreamingMessageResponse>> {\n const response = await this.request<AsyncIterable<SendStreamingMessageResponse>>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'message/stream',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Get the status and result of a task\n * @param params - Parameters for querying the task\n * @returns Promise containing the task response\n */\n async getTask(params: TaskQueryParams): Promise<GetTaskResponse> {\n const response = await this.request<GetTaskResponse>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'tasks/get',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Cancel a running task\n * @param params - Parameters identifying the task to cancel\n * @returns Promise containing the task response\n */\n async cancelTask(params: TaskQueryParams): Promise<Task> {\n return this.request(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'tasks/cancel',\n params,\n },\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { ClientOptions, McpToolInfo } from '../types';\nimport { runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\n/**\n * Represents a specific tool available on a specific MCP server.\n * Provides methods to get details and execute the tool.\n */\nexport class MCPTool extends BaseResource {\n private serverId: string;\n private toolId: string;\n\n constructor(options: ClientOptions, serverId: string, toolId: string) {\n super(options);\n this.serverId = serverId;\n this.toolId = toolId;\n }\n\n /**\n * Retrieves details about this specific tool from the MCP server.\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the tool's information (name, description, schema).\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<McpToolInfo> {\n return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes this specific tool on the MCP server.\n * @param params - Parameters for tool execution, including data/args and optional runtimeContext.\n * @returns Promise containing the result of the tool execution.\n */\n execute(params: { data?: any; runtimeContext?: RuntimeContext }): Promise<any> {\n const body: any = {};\n if (params.data !== undefined) body.data = params.data;\n // If none of data, args the body might be empty or just contain runtimeContext.\n // The handler will look for these, so an empty args object might be appropriate if that's the intent.\n // else body.data = {}; // Or let it be empty if no specific input fields are used\n\n if (params.runtimeContext !== undefined) {\n body.runtimeContext = params.runtimeContext;\n }\n\n return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}/execute`, {\n method: 'POST',\n body: Object.keys(body).length > 0 ? body : undefined,\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { WorkflowInfo } from '@mastra/core/workflows';\nimport type { ClientOptions } from '../types';\nimport { parseClientRuntimeContext } from '../utils';\nimport { BaseResource } from './base';\n\nconst RECORD_SEPARATOR = '\\x1E';\n\nexport interface AgentBuilderActionRequest {\n /** Input data specific to the workflow type */\n inputData: any;\n /** Runtime context for the action execution */\n runtimeContext?: RuntimeContext;\n}\n\nexport interface AgentBuilderActionResult {\n success: boolean;\n applied: boolean;\n branchName?: string;\n message: string;\n validationResults?: any;\n error?: string;\n errors?: string[];\n stepResults?: any;\n}\n\n/**\n * Agent Builder resource: operations related to agent-builder workflows via server endpoints.\n */\nexport class AgentBuilder extends BaseResource {\n constructor(\n options: ClientOptions,\n private actionId: string,\n ) {\n super(options);\n }\n\n // Helper function to transform workflow result to action result\n transformWorkflowResult(result: any): AgentBuilderActionResult {\n if (result.status === 'success') {\n return {\n success: result.result.success || false,\n applied: result.result.applied || false,\n branchName: result.result.branchName,\n message: result.result.message || 'Agent builder action completed',\n validationResults: result.result.validationResults,\n error: result.result.error,\n errors: result.result.errors,\n stepResults: result.result.stepResults,\n };\n } else if (result.status === 'failed') {\n return {\n success: false,\n applied: false,\n message: `Agent builder action failed: ${result.error.message}`,\n error: result.error.message,\n };\n } else {\n return {\n success: false,\n applied: false,\n message: 'Agent builder action was suspended',\n error: 'Workflow suspended - manual intervention required',\n };\n }\n }\n\n /**\n * @deprecated Use createRunAsync() instead.\n * @throws {Error} Always throws an error directing users to use createRunAsync()\n */\n async createRun(_params?: { runId?: string }): Promise<{ runId: string }> {\n throw new Error(\n 'createRun() has been deprecated. ' +\n 'Please use createRunAsync() instead.\\n\\n' +\n 'Migration guide:\\n' +\n ' Before: const run = agentBuilder.createRun();\\n' +\n ' After: const run = await agentBuilder.createRunAsync();\\n\\n' +\n 'Note: createRunAsync() is an async method, so make sure your calling function is async.',\n );\n }\n\n /**\n * Creates a new agent builder action run and returns the runId.\n * This calls `/api/agent-builder/:actionId/create-run`.\n */\n async createRunAsync(params?: { runId?: string }): Promise<{ runId: string }> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const url = `/api/agent-builder/${this.actionId}/create-run${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n return this.request(url, {\n method: 'POST',\n });\n }\n\n /**\n * Starts agent builder action asynchronously and waits for completion.\n * This calls `/api/agent-builder/:actionId/start-async`.\n */\n async startAsync(params: AgentBuilderActionRequest, runId?: string): Promise<AgentBuilderActionResult> {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/start-async${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const result = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n });\n\n return this.transformWorkflowResult(result);\n }\n\n /**\n * Starts an existing agent builder action run.\n * This calls `/api/agent-builder/:actionId/start`.\n */\n async startActionRun(params: AgentBuilderActionRequest, runId: string): Promise<{ message: string }> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/start?${searchParams.toString()}`;\n return this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n });\n }\n\n /**\n * Resumes a suspended agent builder action step.\n * This calls `/api/agent-builder/:actionId/resume`.\n */\n async resume(\n params: {\n step: string | string[];\n resumeData?: unknown;\n runtimeContext?: RuntimeContext;\n },\n runId: string,\n ): Promise<{ message: string }> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...resumeParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/resume?${searchParams.toString()}`;\n return this.request(url, {\n method: 'POST',\n body: { ...resumeParams, runtimeContext },\n });\n }\n\n /**\n * Resumes a suspended agent builder action step asynchronously.\n * This calls `/api/agent-builder/:actionId/resume-async`.\n */\n async resumeAsync(\n params: {\n step: string | string[];\n resumeData?: unknown;\n runtimeContext?: RuntimeContext;\n },\n runId: string,\n ): Promise<AgentBuilderActionResult> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...resumeParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/resume-async?${searchParams.toString()}`;\n const result = await this.request(url, {\n method: 'POST',\n body: { ...resumeParams, runtimeContext },\n });\n\n return this.transformWorkflowResult(result);\n }\n\n /**\n * Creates an async generator that processes a readable stream and yields action records\n * separated by the Record Separator character (\\x1E)\n *\n * @param stream - The readable stream to process\n * @returns An async generator that yields parsed records\n */\n private async *streamProcessor(\n stream: ReadableStream,\n ): AsyncGenerator<{ type: string; payload: any }, void, unknown> {\n const reader = stream.getReader();\n\n // Track if we've finished reading from the stream\n let doneReading = false;\n // Buffer to accumulate partial chunks\n let buffer = '';\n\n try {\n while (!doneReading) {\n // Read the next chunk from the stream\n const { done, value } = await reader.read();\n doneReading = done;\n\n // Skip processing if we're done and there's no value\n if (done && !value) continue;\n\n try {\n // Decode binary data to text\n const decoded = value ? new TextDecoder().decode(value) : '';\n\n // Split the combined buffer and new data by record separator\n const chunks = (buffer + decoded).split(RECORD_SEPARATOR);\n\n // The last chunk might be incomplete, so save it for the next iteration\n buffer = chunks.pop() || '';\n\n // Process complete chunks\n for (const chunk of chunks) {\n if (chunk) {\n // Only process non-empty chunks\n if (typeof chunk === 'string') {\n try {\n const parsedChunk = JSON.parse(chunk);\n yield parsedChunk;\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n }\n }\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n\n // Process any remaining data in the buffer after stream is done\n if (buffer) {\n try {\n yield JSON.parse(buffer);\n } catch {\n // Ignore parsing error for final chunk\n }\n }\n } finally {\n // Always ensure we clean up the reader\n reader.cancel().catch(() => {\n // Ignore cancel errors\n });\n }\n }\n\n /**\n * Streams agent builder action progress in real-time.\n * This calls `/api/agent-builder/:actionId/stream`.\n */\n async stream(params: AgentBuilderActionRequest, runId?: string) {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/stream${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to stream agent builder action: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n let failedChunk: string | undefined = undefined;\n\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Streams agent builder action progress in real-time using VNext streaming.\n * This calls `/api/agent-builder/:actionId/streamVNext`.\n */\n async streamVNext(params: AgentBuilderActionRequest, runId?: string) {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/streamVNext${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to stream agent builder action VNext: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n let failedChunk: string | undefined = undefined;\n\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Watches an existing agent builder action run by runId.\n * This is used for hot reload recovery - it loads the existing run state\n * and streams any remaining progress.\n * This calls `/api/agent-builder/:actionId/watch`.\n */\n async watch(\n { runId, eventType }: { runId: string; eventType?: 'watch' | 'watch-v2' },\n onRecord: (record: { type: string; payload: any }) => void,\n ) {\n const url = `/api/agent-builder/${this.actionId}/watch?runId=${runId}${eventType ? `&eventType=${eventType}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'GET',\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to watch agent builder action: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n // Use the exact same stream processing as workflows\n for await (const record of this.streamProcessor(response.body)) {\n if (typeof record === 'string') {\n onRecord(JSON.parse(record));\n } else {\n onRecord(record);\n }\n }\n }\n\n /**\n * Gets a specific action run by its ID.\n * This calls `/api/agent-builder/:actionId/runs/:runId`.\n */\n async runById(runId: string) {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Gets details about this agent builder action.\n * This calls `/api/agent-builder/:actionId`.\n */\n async details(): Promise<WorkflowInfo> {\n const result = await this.request<WorkflowInfo>(`/api/agent-builder/${this.actionId}`);\n return result;\n }\n\n /**\n * Gets all runs for this agent builder action.\n * This calls `/api/agent-builder/:actionId/runs`.\n */\n async runs(params?: { fromDate?: Date; toDate?: Date; limit?: number; offset?: number; resourceId?: string }) {\n const searchParams = new URLSearchParams();\n if (params?.fromDate) {\n searchParams.set('fromDate', params.fromDate.toISOString());\n }\n if (params?.toDate) {\n searchParams.set('toDate', params.toDate.toISOString());\n }\n if (params?.limit !== undefined) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== undefined) {\n searchParams.set('offset', String(params.offset));\n }\n if (params?.resourceId) {\n searchParams.set('resourceId', params.resourceId);\n }\n\n const url = `/api/agent-builder/${this.actionId}/runs${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Gets the execution result of an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/execution-result`.\n */\n async runExecutionResult(runId: string) {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}/execution-result`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Cancels an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/cancel`.\n */\n async cancelRun(runId: string): Promise<{ message: string }> {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}/cancel`;\n return this.request(url, {\n method: 'POST',\n });\n }\n\n /**\n * Sends an event to an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/send-event`.\n */\n async sendRunEvent(params: { runId: string; event: string; data: unknown }): Promise<{ message: string }> {\n const url = `/api/agent-builder/${this.actionId}/runs/${params.runId}/send-event`;\n return this.request(url, {\n method: 'POST',\n body: { event: params.event, data: params.data },\n });\n }\n}\n","import type { AITraceRecord, AITracesPaginatedArg } from '@mastra/core/storage';\nimport type { ClientOptions, GetAITracesResponse, GetScoresBySpanParams, GetScoresResponse } from '../types';\nimport { BaseResource } from './base';\n\nexport class Observability extends BaseResource {\n constructor(options: ClientOptions) {\n super(options);\n }\n\n /**\n * Retrieves a specific AI trace by ID\n * @param traceId - ID of the trace to retrieve\n * @returns Promise containing the AI trace with all its spans\n */\n getTrace(traceId: string): Promise<AITraceRecord> {\n return this.request(`/api/observability/traces/${traceId}`);\n }\n\n /**\n * Retrieves paginated list of AI traces with optional filtering\n * @param params - Parameters for pagination and filtering\n * @returns Promise containing paginated traces and pagination info\n */\n getTraces(params: AITracesPaginatedArg): Promise<GetAITracesResponse> {\n const { pagination, filters } = params;\n const { page, perPage, dateRange } = pagination || {};\n const { name, spanType, entityId, entityType } = filters || {};\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n if (name) {\n searchParams.set('name', name);\n }\n if (spanType !== undefined) {\n searchParams.set('spanType', String(spanType));\n }\n if (entityId && entityType) {\n searchParams.set('entityId', entityId);\n searchParams.set('entityType', entityType);\n }\n\n if (dateRange) {\n const dateRangeStr = JSON.stringify({\n start: dateRange.start instanceof Date ? dateRange.start.toISOString() : dateRange.start,\n end: dateRange.end instanceof Date ? dateRange.end.toISOString() : dateRange.end,\n });\n searchParams.set('dateRange', dateRangeStr);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/observability/traces${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by trace ID and span ID\n * @param params - Parameters containing trace ID, span ID, and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresBySpan(params: GetScoresBySpanParams): Promise<GetScoresResponse> {\n const { traceId, spanId, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(\n `/api/observability/traces/${encodeURIComponent(traceId)}/${encodeURIComponent(spanId)}/scores${queryString ? `?${queryString}` : ''}`,\n );\n }\n\n score(params: {\n scorerName: string;\n targets: Array<{ traceId: string; spanId?: string }>;\n }): Promise<{ status: string; message: string }> {\n return this.request(`/api/observability/traces/score`, {\n method: 'POST',\n body: { ...params },\n });\n }\n}\n","import type { StorageThreadType } from '@mastra/core/memory';\n\nimport type {\n GetMemoryThreadMessagesResponse,\n ClientOptions,\n UpdateMemoryThreadParams,\n GetMemoryThreadMessagesParams,\n} from '../types';\n\nimport { BaseResource } from './base';\n\nexport class NetworkMemoryThread extends BaseResource {\n constructor(\n options: ClientOptions,\n private threadId: string,\n private networkId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves the memory thread details\n * @returns Promise containing thread details including title and metadata\n */\n get(): Promise<StorageThreadType> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`);\n }\n\n /**\n * Updates the memory thread properties\n * @param params - Update parameters including title and metadata\n * @returns Promise containing updated thread details\n */\n update(params: UpdateMemoryThreadParams): Promise<StorageThreadType> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {\n method: 'PATCH',\n body: params,\n });\n }\n\n /**\n * Deletes the memory thread\n * @returns Promise containing deletion result\n */\n delete(): Promise<{ result: string }> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves messages associated with the thread\n * @param params - Optional parameters including limit for number of messages to retrieve\n * @returns Promise containing thread messages and UI messages\n */\n getMessages(params?: GetMemoryThreadMessagesParams): Promise<GetMemoryThreadMessagesResponse> {\n const query = new URLSearchParams({\n networkId: this.networkId,\n ...(params?.limit ? { limit: params.limit.toString() } : {}),\n });\n return this.request(`/api/memory/network/threads/${this.threadId}/messages?${query.toString()}`);\n }\n\n /**\n * Deletes one or more messages from the thread\n * @param messageIds - Can be a single message ID (string), array of message IDs,\n * message object with id property, or array of message objects\n * @returns Promise containing deletion result\n */\n deleteMessages(\n messageIds: string | string[] | { id: string } | { id: string }[],\n ): Promise<{ success: boolean; message: string }> {\n const query = new URLSearchParams({\n networkId: this.networkId,\n });\n return this.request(`/api/memory/network/messages/delete?${query.toString()}`, {\n method: 'POST',\n body: { messageIds },\n });\n }\n}\n","import type { AITraceRecord, AITracesPaginatedArg, WorkflowInfo } from '@mastra/core';\nimport type { ServerDetailInfo } from '@mastra/core/mcp';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport {\n Agent,\n MemoryThread,\n Tool,\n Workflow,\n Vector,\n BaseResource,\n A2A,\n MCPTool,\n AgentBuilder,\n Observability,\n} from './resources';\nimport { NetworkMemoryThread } from './resources/network-memory-thread';\nimport type {\n ClientOptions,\n CreateMemoryThreadParams,\n CreateMemoryThreadResponse,\n GetAgentResponse,\n GetLogParams,\n GetLogsParams,\n GetLogsResponse,\n GetMemoryThreadParams,\n GetMemoryThreadResponse,\n GetTelemetryParams,\n GetTelemetryResponse,\n GetToolResponse,\n GetWorkflowResponse,\n SaveMessageToMemoryParams,\n SaveMessageToMemoryResponse,\n McpServerListResponse,\n McpServerToolListResponse,\n GetNetworkMemoryThreadParams,\n CreateNetworkMemoryThreadParams,\n SaveNetworkMessageToMemoryParams,\n GetScorerResponse,\n GetScoresByScorerIdParams,\n GetScoresResponse,\n GetScoresByRunIdParams,\n GetScoresByEntityIdParams,\n GetScoresBySpanParams,\n SaveScoreParams,\n SaveScoreResponse,\n GetAITracesResponse,\n GetMemoryConfigParams,\n GetMemoryConfigResponse,\n GetMemoryThreadMessagesResponse,\n} from './types';\nimport { base64RuntimeContext, parseClientRuntimeContext } from './utils';\n\nexport class MastraClient extends BaseResource {\n private observability: Observability;\n constructor(options: ClientOptions) {\n super(options);\n this.observability = new Observability(options);\n }\n\n /**\n * Retrieves all available agents\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of agent IDs to agent details\n */\n public getAgents(runtimeContext?: RuntimeContext | Record<string, any>): Promise<Record<string, GetAgentResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/agents${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets an agent instance by ID\n * @param agentId - ID of the agent to retrieve\n * @returns Agent instance\n */\n public getAgent(agentId: string) {\n return new Agent(this.options, agentId);\n }\n\n /**\n * Retrieves memory threads for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getMemoryThreads(params: GetMemoryThreadParams): Promise<GetMemoryThreadResponse> {\n return this.request(`/api/memory/threads?resourceid=${params.resourceId}&agentId=${params.agentId}`);\n }\n\n /**\n * Retrieves memory config for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getMemoryConfig(params: GetMemoryConfigParams): Promise<GetMemoryConfigResponse> {\n return this.request(`/api/memory/config?agentId=${params.agentId}`);\n }\n\n /**\n * Creates a new memory thread\n * @param params - Parameters for creating the memory thread\n * @returns Promise containing the created memory thread\n */\n public createMemoryThread(params: CreateMemoryThreadParams): Promise<CreateMemoryThreadResponse> {\n return this.request(`/api/memory/threads?agentId=${params.agentId}`, { method: 'POST', body: params });\n }\n\n /**\n * Gets a memory thread instance by ID\n * @param threadId - ID of the memory thread to retrieve\n * @returns MemoryThread instance\n */\n public getMemoryThread(threadId: string, agentId: string) {\n return new MemoryThread(this.options, threadId, agentId);\n }\n\n public getThreadMessages(\n threadId: string,\n opts: { agentId?: string; networkId?: string } = {},\n ): Promise<GetMemoryThreadMessagesResponse> {\n let url = '';\n if (opts.agentId) {\n url = `/api/memory/threads/${threadId}/messages?agentId=${opts.agentId}`;\n } else if (opts.networkId) {\n url = `/api/memory/network/threads/${threadId}/messages?networkId=${opts.networkId}`;\n }\n return this.request(url);\n }\n\n public deleteThread(\n threadId: string,\n opts: { agentId?: string; networkId?: string } = {},\n ): Promise<{ success: boolean; message: string }> {\n let url = '';\n\n if (opts.agentId) {\n url = `/api/memory/threads/${threadId}?agentId=${opts.agentId}`;\n } else if (opts.networkId) {\n url = `/api/memory/network/threads/${threadId}?networkId=${opts.networkId}`;\n }\n return this.request(url, { method: 'DELETE' });\n }\n\n /**\n * Saves messages to memory\n * @param params - Parameters containing messages to save\n * @returns Promise containing the saved messages\n */\n public saveMessageToMemory(params: SaveMessageToMemoryParams): Promise<SaveMessageToMemoryResponse> {\n return this.request(`/api/memory/save-messages?agentId=${params.agentId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Gets the status of the memory system\n * @returns Promise containing memory system status\n */\n public getMemoryStatus(agentId: string): Promise<{ result: boolean }> {\n return this.request(`/api/memory/status?agentId=${agentId}`);\n }\n\n /**\n * Retrieves memory threads for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getNetworkMemoryThreads(params: GetNetworkMemoryThreadParams): Promise<GetMemoryThreadResponse> {\n return this.request(`/api/memory/network/threads?resourceid=${params.resourceId}&networkId=${params.networkId}`);\n }\n\n /**\n * Creates a new memory thread\n * @param params - Parameters for creating the memory thread\n * @returns Promise containing the created memory thread\n */\n public createNetworkMemoryThread(params: CreateNetworkMemoryThreadParams): Promise<CreateMemoryThreadResponse> {\n return this.request(`/api/memory/network/threads?networkId=${params.networkId}`, { method: 'POST', body: params });\n }\n\n /**\n * Gets a memory thread instance by ID\n * @param threadId - ID of the memory thread to retrieve\n * @returns MemoryThread instance\n */\n public getNetworkMemoryThread(threadId: string, networkId: string) {\n return new NetworkMemoryThread(this.options, threadId, networkId);\n }\n\n /**\n * Saves messages to memory\n * @param params - Parameters containing messages to save\n * @returns Promise containing the saved messages\n */\n public saveNetworkMessageToMemory(params: SaveNetworkMessageToMemoryParams): Promise<SaveMessageToMemoryResponse> {\n return this.request(`/api/memory/network/save-messages?networkId=${params.networkId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Gets the status of the memory system\n * @returns Promise containing memory system status\n */\n public getNetworkMemoryStatus(networkId: string): Promise<{ result: boolean }> {\n return this.request(`/api/memory/network/status?networkId=${networkId}`);\n }\n\n /**\n * Retrieves all available tools\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of tool IDs to tool details\n */\n public getTools(runtimeContext?: RuntimeContext | Record<string, any>): Promise<Record<string, GetToolResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/tools${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets a tool instance by ID\n * @param toolId - ID of the tool to retrieve\n * @returns Tool instance\n */\n public getTool(toolId: string) {\n return new Tool(this.options, toolId);\n }\n\n /**\n * Retrieves all available workflows\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of workflow IDs to workflow details\n */\n public getWorkflows(\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<Record<string, GetWorkflowResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/workflows${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets a workflow instance by ID\n * @param workflowId - ID of the workflow to retrieve\n * @returns Workflow instance\n */\n public getWorkflow(workflowId: string) {\n return new Workflow(this.options, workflowId);\n }\n\n /**\n * Gets all available agent builder actions\n * @returns Promise containing map of action IDs to action details\n */\n public getAgentBuilderActions(): Promise<Record<string, WorkflowInfo>> {\n return this.request('/api/agent-builder/');\n }\n\n /**\n * Gets an agent builder instance for executing agent-builder workflows\n * @returns AgentBuilder instance\n */\n public getAgentBuilderAction(actionId: string) {\n return new AgentBuilder(this.options, actionId);\n }\n\n /**\n * Gets a vector instance by name\n * @param vectorName - Name of the vector to retrieve\n * @returns Vector instance\n */\n public getVector(vectorName: string) {\n return new Vector(this.options, vectorName);\n }\n\n /**\n * Retrieves logs\n * @param params - Parameters for filtering logs\n * @returns Promise containing array of log messages\n */\n public getLogs(params: GetLogsParams): Promise<GetLogsResponse> {\n const { transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;\n const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];\n\n const searchParams = new URLSearchParams();\n if (transportId) {\n searchParams.set('transportId', transportId);\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n if (logLevel) {\n searchParams.set('logLevel', logLevel);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n if (_filters) {\n if (Array.isArray(_filters)) {\n for (const filter of _filters) {\n searchParams.append('filters', filter);\n }\n } else {\n searchParams.set('filters', _filters);\n }\n }\n\n if (searchParams.size) {\n return this.request(`/api/logs?${searchParams}`);\n } else {\n return this.request(`/api/logs`);\n }\n }\n\n /**\n * Gets logs for a specific run\n * @param params - Parameters containing run ID to retrieve\n * @returns Promise containing array of log messages\n */\n public getLogForRun(params: GetLogParams): Promise<GetLogsResponse> {\n const { runId, transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;\n\n const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n if (transportId) {\n searchParams.set('transportId', transportId);\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n if (logLevel) {\n searchParams.set('logLevel', logLevel);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n\n if (_filters) {\n if (Array.isArray(_filters)) {\n for (const filter of _filters) {\n searchParams.append('filters', filter);\n }\n } else {\n searchParams.set('filters', _filters);\n }\n }\n\n if (searchParams.size) {\n return this.request(`/api/logs/${runId}?${searchParams}`);\n } else {\n return this.request(`/api/logs/${runId}`);\n }\n }\n\n /**\n * List of all log transports\n * @returns Promise containing list of log transports\n */\n public getLogTransports(): Promise<{ transports: string[] }> {\n return this.request('/api/logs/transports');\n }\n\n /**\n * List of all traces (paged)\n * @param params - Parameters for filtering traces\n * @returns Promise containing telemetry data\n */\n public getTelemetry(params?: GetTelemetryParams): Promise<GetTelemetryResponse> {\n const { name, scope, page, perPage, attribute, fromDate, toDate } = params || {};\n const _attribute = attribute ? Object.entries(attribute).map(([key, value]) => `${key}:${value}`) : [];\n\n const searchParams = new URLSearchParams();\n if (name) {\n searchParams.set('name', name);\n }\n if (scope) {\n searchParams.set('scope', scope);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n if (_attribute) {\n if (Array.isArray(_attribute)) {\n for (const attr of _attribute) {\n searchParams.append('attribute', attr);\n }\n } else {\n searchParams.set('attribute', _attribute);\n }\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n\n if (searchParams.size) {\n return this.request(`/api/telemetry?${searchParams}`);\n } else {\n return this.request(`/api/telemetry`);\n }\n }\n\n /**\n * Retrieves a list of available MCP servers.\n * @param params - Optional parameters for pagination (limit, offset).\n * @returns Promise containing the list of MCP servers and pagination info.\n */\n public getMcpServers(params?: { limit?: number; offset?: number }): Promise<McpServerListResponse> {\n const searchParams = new URLSearchParams();\n if (params?.limit !== undefined) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== undefined) {\n searchParams.set('offset', String(params.offset));\n }\n const queryString = searchParams.toString();\n return this.request(`/api/mcp/v0/servers${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves detailed information for a specific MCP server.\n * @param serverId - The ID of the MCP server to retrieve.\n * @param params - Optional parameters, e.g., specific version.\n * @returns Promise containing the detailed MCP server information.\n */\n public getMcpServerDetails(serverId: string, params?: { version?: string }): Promise<ServerDetailInfo> {\n const searchParams = new URLSearchParams();\n if (params?.version) {\n searchParams.set('version', params.version);\n }\n const queryString = searchParams.toString();\n return this.request(`/api/mcp/v0/servers/${serverId}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves a list of tools for a specific MCP server.\n * @param serverId - The ID of the MCP server.\n * @returns Promise containing the list of tools.\n */\n public getMcpServerTools(serverId: string): Promise<McpServerToolListResponse> {\n return this.request(`/api/mcp/${serverId}/tools`);\n }\n\n /**\n * Gets an MCPTool resource instance for a specific tool on an MCP server.\n * This instance can then be used to fetch details or execute the tool.\n * @param serverId - The ID of the MCP server.\n * @param toolId - The ID of the tool.\n * @returns MCPTool instance.\n */\n public getMcpServerTool(serverId: string, toolId: string): MCPTool {\n return new MCPTool(this.options, serverId, toolId);\n }\n\n /**\n * Gets an A2A client for interacting with an agent via the A2A protocol\n * @param agentId - ID of the agent to interact with\n * @returns A2A client instance\n */\n public getA2A(agentId: string) {\n return new A2A(this.options, agentId);\n }\n\n /**\n * Retrieves the working memory for a specific thread (optionally resource-scoped).\n * @param agentId - ID of the agent.\n * @param threadId - ID of the thread.\n * @param resourceId - Optional ID of the resource.\n * @returns Working memory for the specified thread or resource.\n */\n public getWorkingMemory({\n agentId,\n threadId,\n resourceId,\n }: {\n agentId: string;\n threadId: string;\n resourceId?: string;\n }) {\n return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}&resourceId=${resourceId}`);\n }\n\n /**\n * Updates the working memory for a specific thread (optionally resource-scoped).\n * @param agentId - ID of the agent.\n * @param threadId - ID of the thread.\n * @param workingMemory - The new working memory content.\n * @param resourceId - Optional ID of the resource.\n */\n public updateWorkingMemory({\n agentId,\n threadId,\n workingMemory,\n resourceId,\n }: {\n agentId: string;\n threadId: string;\n workingMemory: string;\n resourceId?: string;\n }) {\n return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}`, {\n method: 'POST',\n body: {\n workingMemory,\n resourceId,\n },\n });\n }\n\n /**\n * Retrieves all available scorers\n * @returns Promise containing list of available scorers\n */\n public getScorers(): Promise<Record<string, GetScorerResponse>> {\n return this.request('/api/scores/scorers');\n }\n\n /**\n * Retrieves a scorer by ID\n * @param scorerId - ID of the scorer to retrieve\n * @returns Promise containing the scorer\n */\n public getScorer(scorerId: string): Promise<GetScorerResponse> {\n return this.request(`/api/scores/scorers/${encodeURIComponent(scorerId)}`);\n }\n\n public getScoresByScorerId(params: GetScoresByScorerIdParams): Promise<GetScoresResponse> {\n const { page, perPage, scorerId, entityId, entityType } = params;\n const searchParams = new URLSearchParams();\n\n if (entityId) {\n searchParams.set('entityId', entityId);\n }\n if (entityType) {\n searchParams.set('entityType', entityType);\n }\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n const queryString = searchParams.toString();\n return this.request(`/api/scores/scorer/${encodeURIComponent(scorerId)}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by run ID\n * @param params - Parameters containing run ID and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresByRunId(params: GetScoresByRunIdParams): Promise<GetScoresResponse> {\n const { runId, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/scores/run/${encodeURIComponent(runId)}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by entity ID and type\n * @param params - Parameters containing entity ID, type, and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresByEntityId(params: GetScoresByEntityIdParams): Promise<GetScoresResponse> {\n const { entityId, entityType, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(\n `/api/scores/entity/${encodeURIComponent(entityType)}/${encodeURIComponent(entityId)}${queryString ? `?${queryString}` : ''}`,\n );\n }\n\n /**\n * Saves a score\n * @param params - Parameters containing the score data to save\n * @returns Promise containing the saved score\n */\n public saveScore(params: SaveScoreParams): Promise<SaveScoreResponse> {\n return this.request('/api/scores', {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Retrieves model providers with available keys\n * @returns Promise containing model providers with available keys\n */\n getModelProviders(): Promise<string[]> {\n return this.request(`/api/model-providers`);\n }\n\n getAITrace(traceId: string): Promise<AITraceRecord> {\n return this.observability.getTrace(traceId);\n }\n\n getAITraces(params: AITracesPaginatedArg): Promise<GetAITracesResponse> {\n return this.observability.getTraces(params);\n }\n\n getScoresBySpan(params: GetScoresBySpanParams): Promise<GetScoresResponse> {\n return this.observability.getScoresBySpan(params);\n }\n\n score(params: {\n scorerName: string;\n targets: Array<{ traceId: string; spanId?: string }>;\n }): Promise<{ status: string; message: string }> {\n return this.observability.score(params);\n }\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\n// Client-side tool execution context (simplified version without server dependencies)\nexport interface ClientToolExecutionContext<TSchemaIn extends z.ZodSchema | undefined = undefined> {\n context: TSchemaIn extends z.ZodSchema ? z.infer<TSchemaIn> : unknown;\n}\n\n// Client-side tool action interface\nexport interface ClientToolAction<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n> {\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: (\n context: ClientToolExecutionContext<TSchemaIn>,\n options?: ToolExecutionOptions,\n ) => Promise<TSchemaOut extends z.ZodSchema ? z.infer<TSchemaOut> : unknown>;\n}\n\n// Client-side tool class (simplified version without server dependencies)\nexport class ClientTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n> implements ClientToolAction<TSchemaIn, TSchemaOut>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ClientToolAction<TSchemaIn, TSchemaOut>['execute'];\n\n constructor(opts: ClientToolAction<TSchemaIn, TSchemaOut>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.execute = opts.execute;\n }\n}\n\n// Client-side createTool function\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n>(opts: ClientToolAction<TSchemaIn, TSchemaOut>): ClientTool<TSchemaIn, TSchemaOut> {\n return new ClientTool(opts);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.ts","../src/utils/zod-to-json-schema.ts","../src/utils/process-client-tools.ts","../src/utils/process-mastra-stream.ts","../src/resources/base.ts","../src/resources/agent.ts","../src/resources/memory-thread.ts","../src/resources/vector.ts","../src/resources/tool.ts","../src/resources/workflow.ts","../src/resources/a2a.ts","../src/resources/mcp-tool.ts","../src/resources/agent-builder.ts","../src/resources/observability.ts","../src/resources/network-memory-thread.ts","../src/client.ts","../src/tools.ts"],"names":["runtimeContext","RuntimeContext","z","originalZodToJsonSchema","isVercelTool","uuid","part","processDataStream","parsePartialJson","invocation","getErrorFromUnknown","toolCall","toolInvocation","chunk","RECORD_SEPARATOR"],"mappings":";;;;;;;;;;;;;;;AAEO,SAAS,0BAA0BA,gBAAA,EAAuD;AAC/F,EAAA,IAAIA,gBAAA,EAAgB;AAClB,IAAA,IAAIA,4BAA0BC,6BAAA,EAAgB;AAC5C,MAAA,OAAO,MAAA,CAAO,WAAA,CAAYD,gBAAA,CAAe,OAAA,EAAS,CAAA;AAAA,IACpD;AACA,IAAA,OAAOA,gBAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,qBAAqB,cAAA,EAA0D;AAC7F,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,0BAA0B,cAAA,EAA+D;AACvG,EAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAC1F,EAAA,IAAI,CAAC,qBAAqB,OAAO,EAAA;AACjC,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,EAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AACtD,EAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,EAAA,OAAO,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAA;AAC3C;ACtBA,SAAS,UAAU,KAAA,EAAkC;AAEnD,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,UAAU,KAAA,IACV,OAAA,IAAW,KAAA,IACX,OAAQ,MAAc,KAAA,KAAU,UAAA,IAChC,eAAe,KAAA,IACf,OAAQ,MAAc,SAAA,KAAc,UAAA;AAExC;AAEO,SAAS,gBAAyC,SAAA,EAAc;AACrE,EAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AACzB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,kBAAkBE,KAAA,EAAG;AACvB,IAAA,MAAM,EAAA,GAAK,cAAA;AAEX,IAAA,OAAOA,KAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAKA,OAAG,SAAS,CAAA;AAAA,EAChC;AAEA,EAAA,OAAOC,wCAAA,CAAwB,SAAA,EAAW,EAAE,YAAA,EAAc,YAAY,CAAA;AACxE;;;ACzBO,SAAS,mBAAmB,WAAA,EAA6D;AAC9F,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,WAAW,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAChD,MAAA,IAAIC,yBAAA,CAAa,KAAK,CAAA,EAAG;AACvB,QAAA,OAAO;AAAA,UACL,GAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,YAAY,KAAA,CAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA;AACrE,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAO;AAAA,UACL,GAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,aAAa,KAAA,CAAM,WAAA,GAAc,eAAA,CAAgB,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAAA,YACtE,cAAc,KAAA,CAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,CAAM,YAAY,CAAA,GAAI;AAAA;AAC3E,SACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,GACH;AACF;;;AC5BA,eAAe,yBAAA,CAA0B;AAAA,EACvC,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,MAAA,IAAI,IAAA,EAAM;AAGV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAGhD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACjC,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEzB,UAAA,IAAI,SAAS,QAAA,EAAU;AACrB,YAAA,OAAA,CAAQ,KAAK,2BAAoB,CAAA;AACjC,YAAA;AAAA,UACF;AACA,UAAA,IAAI,IAAA;AACJ,UAAA,IAAI;AACF,YAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,UACxB,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,0BAAA,EAAuB,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AACzD,YAAA;AAAA,UACF;AACA,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,eAAsB,0BAAA,CAA2B;AAAA,EAC/C,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,mBAAA,CAAoB;AAAA,EACxC,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,OAAO,yBAAA,CAA0B;AAAA,IAC/B,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;AC1EO,IAAM,eAAN,MAAmB;AAAA,EACf,OAAA;AAAA,EAET,YAAY,OAAA,EAAwB;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,OAAA,CAAW,IAAA,EAAc,OAAA,GAA0B,EAAC,EAAe;AAC9E,IAAA,IAAI,SAAA,GAA0B,IAAA;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,GAAU,CAAA,EAAG,SAAA,GAAY,GAAA,EAAK,YAAA,GAAe,GAAA,EAAM,OAAA,GAAU,EAAC,EAAG,WAAA,KAAgB,IAAA,CAAK,OAAA;AAEvG,IAAA,IAAI,KAAA,GAAQ,SAAA;AAEZ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,OAAA,EAAS,OAAA,EAAA,EAAW;AACnD,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,UACnE,GAAG,OAAA;AAAA,UACH,OAAA,EAAS;AAAA,YACP,GAAI,OAAA,CAAQ,IAAA,IACZ,EAAE,OAAA,CAAQ,gBAAgB,QAAA,CAAA,KACzB,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,QAAQ,MAAA,KAAW,KAAA,CAAA,GAC7C,EAAE,cAAA,EAAgB,kBAAA,KAClB,EAAC;AAAA,YACL,GAAG,OAAA;AAAA,YACH,GAAG,OAAA,CAAQ;AAAA;AAAA;AAAA,WAGb;AAAA,UACA,MAAA,EAAQ,KAAK,OAAA,CAAQ,WAAA;AAAA,UACrB,WAAA,EAAa,QAAQ,WAAA,IAAe,WAAA;AAAA,UACpC,IAAA,EACE,OAAA,CAAQ,IAAA,YAAgB,QAAA,GAAW,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAA,SACnG,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,UAAA,IAAI,YAAA,GAAe,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA;AACzD,UAAA,IAAI;AACF,YAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACtC,YAAA,YAAA,IAAgB,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AAAA,UACjD,CAAA,CAAA,MAAQ;AACN,YAAA,IAAI,SAAA,EAAW;AACb,cAAA,YAAA,IAAgB,MAAM,SAAS,CAAA,CAAA;AAAA,YACjC;AAAA,UACF;AACA,UAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,QAC9B;AAEA,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,UAAA,OAAO,QAAA;AAAA,QACT;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,GAAY,KAAA;AAEZ,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,QAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,YAAY,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,IAAa,IAAI,KAAA,CAAM,gBAAgB,CAAA;AAAA,EAC/C;AACF,CAAA;;;ACpCA,eAAe,yBAAA,CAA0B;AAAA,EACvC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,IAAA,MAAM,YACJ,QAAA,CAIA,SAAA;AAEF,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,GAAc,QAAA,CAAS,QAAQ,CAAA;AAEzD,MAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,QAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,UAC9B;AAAA,YACE,SAAS,QAAA,EAAU,IAAA;AAAA,YACnB,KAAA;AAAA,YACA,UAAA;AAAA,YACA,QAAA;AAAA,YACA,cAAA;AAAA,YACA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,YACzC,SAAS,YAAY;AAAA,YAAC;AAAA,WACxB;AAAA,UACA;AAAA,YACE,UAAW,QAAA,CAAoD,QAAA;AAAA,YAC/D,YAAY,QAAA,EAAU;AAAA;AACxB,SACF;AAIA,QAAA,MAAM,eAAA,GAAkB;AAAA,UACtB,GAAI,QAAA,CAAS,QAAA,CAAS,QAAA,IAAY,EAAC;AAAA,UACnC;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,OAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAM,aAAA;AAAA,gBACN,YAAY,QAAA,CAAS,UAAA;AAAA,gBACrB,UAAU,QAAA,CAAS,QAAA;AAAA,gBACnB;AAAA;AACF;AACF;AACF,SACF;AAGA,QAAA,OAAO,SAAA,CAAU;AAAA,UACf,GAAG,MAAA;AAAA,UACH,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,UAAA,GAAN,cAAyB,YAAA,CAAa;AAAA,EAC3C,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGR,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CAAM,IAAA,EAAc,OAAA,EAAuE;AAC/F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAkB,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,MACvE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AAAA,MAC7B,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,CAAO,OAAa,OAAA,EAA0D;AAC5E,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,KAAK,CAAA;AAE9B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,MAAA,CAAO,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MAC9D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YACE,cAAA,EACyD;AACzD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,EAAkB,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,cAAA,EAAsF;AAChG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,EAAkB,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AACF,CAAA;AAEO,IAAM,KAAA,GAAN,cAAoB,YAAA,CAAa;AAAA,EAGtC,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGR,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,UAAA,CAAW,OAAA,EAAS,KAAK,OAAO,CAAA;AAAA,EACnD;AAAA,EARgB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAehB,QAAQ,cAAA,EAAkF;AACxF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/F;AAAA,EAgBA,MAAM,eAGJ,MAAA,EAA8F;AAC9F,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,qBAAqB,MAAA,CAAO,mBAAA,GAAsB,eAAA,CAAgB,MAAA,CAAO,mBAAmB,CAAA,GAAI,MAAA;AAAA,MAChG,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW;AAAA,KACpD;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,gBAAe,GAAI,eAAA;AAExD,IAAA,MAAM,QAAA,GAA0D,MAAM,IAAA,CAAK,OAAA;AAAA,MACzE,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,gBAAA,CAAA;AAAA,MAC3B;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,MAAA,MAAM,YACJ,QAAA,CAIA,SAAA;AAEF,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,GAAc,QAAA,CAAS,QAAQ,CAAA;AAEzD,QAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,UAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,YAC9B;AAAA,cACE,SAAS,QAAA,EAAU,IAAA;AAAA,cACnB,KAAA;AAAA,cACA,UAAA;AAAA,cACA,QAAA;AAAA,cACA,cAAA;AAAA,cACA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,cACzC,SAAS,YAAY;AAAA,cAAC;AAAA,aACxB;AAAA,YACA;AAAA,cACE,UAAW,QAAA,CAAoD,QAAA;AAAA,cAC/D,YAAY,QAAA,EAAU;AAAA;AACxB,WACF;AAIA,UAAA,MAAM,eAAA,GAAkB;AAAA,YACtB,GAAI,SAAS,QAAA,CAAoD,QAAA;AAAA,YACjE;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACP;AAAA,kBACE,IAAA,EAAM,aAAA;AAAA,kBACN,YAAY,QAAA,CAAS,UAAA;AAAA,kBACrB,UAAU,QAAA,CAAS,QAAA;AAAA,kBACnB;AAAA;AACF;AACF;AACF,WACF;AAEA,UAAA,OAAO,KAAK,QAAA,CAAS;AAAA,YACnB,GAAG,MAAA;AAAA,YACH,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAUA,MAAM,QAAA,CACJ,gBAAA,EACA,OAAA,EACiE;AAEjE,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,UAAA,IAAc,gBAAA,EAAkB;AAE1E,MAAA,MAAA,GAAS,gBAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAAS;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW,CAAA;AAAA,MAClD,gBAAA,EAAkB,OAAO,gBAAA,GACrB;AAAA,QACE,GAAG,MAAA,CAAO,gBAAA;AAAA,QACV,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,gBAAA,CAAiB,MAAM;AAAA,OACxD,GACA;AAAA,KACN;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,gBAAe,GAAI,eAAA;AAExD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,SAAA,CAAA;AAAA,MAC3B;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,EAAc;AAC1C,MAAA,OAAO,yBAAA,CAA0B;AAAA,QAC/B,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI;AAAA,OACnC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAc,mBAAA,CAAoB;AAAA,IAChC,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,sBAAM,IAAI,IAAA,EAAK;AAAA,IAChC;AAAA,GACF,EAQG;AACD,IAAA,MAAM,kBAAA,GAAqB,aAAa,IAAA,KAAS,WAAA;AACjD,IAAA,IAAI,OAAO,kBAAA,GACP,CAAA;AAAA,KAEC,WAAA,CAAY,eAAA,EAAiB,MAAA,CAAO,CAAC,KAAK,cAAA,KAAmB;AAC5D,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,IAC/C,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAA,GACT,CAAA;AAEJ,IAAA,MAAM,OAAA,GAAqB,kBAAA,GACvB,eAAA,CAAgB,WAAW,CAAA,GAC3B;AAAA,MACE,IAAIC,OAAA,EAAK;AAAA,MACT,WAAW,cAAA,EAAe;AAAA,MAC1B,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,OAAO;AAAC,KACV;AAEJ,IAAA,IAAI,eAAA,GAA0C,MAAA;AAC9C,IAAA,IAAI,oBAAA,GAAoD,MAAA;AACxD,IAAA,IAAI,0BAAA,GAA6F,MAAA;AAEjG,IAAA,SAAS,wBAAA,CAAyB,YAAoB,UAAA,EAA4B;AAChF,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,QACzB,CAAAC,KAAAA,KAAQA,KAAAA,CAAK,SAAS,iBAAA,IAAqBA,KAAAA,CAAK,eAAe,UAAA,KAAe;AAAA,OAChF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,iBAAA;AAAA,UACN,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,OAAoB,EAAC;AAG3B,IAAA,IAAI,kBAAA,GAA8C,kBAAA,GAAqB,WAAA,EAAa,WAAA,GAAc,MAAA;AAGlG,IAAA,MAAM,mBAAoG,EAAC;AAE3G,IAAA,IAAI,KAAA,GAAa;AAAA,MACf,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc,GAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,GAAuB,SAAA;AAE3B,IAAA,SAAS,UAAA,GAAa;AAEpB,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAI,CAAA;AAI3B,MAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,QAAA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AAAA,MACxB;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA;AAAA;AAAA,QAGpB,GAAG,gBAAgB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAM1B,YAAYD,OAAA;AAAK,OACnB;AAEA,MAAA,MAAA,CAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAME,yBAAA,CAAkB;AAAA,MACtB,MAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,UAAA,eAAA,GAAkB;AAAA,YAChB,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM;AAAA,WACR;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,eAAe,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,eAAA,CAAgB,IAAA,IAAQ,KAAA;AAAA,QAC1B;AAEA,QAAA,OAAA,CAAQ,OAAA,IAAW,KAAA;AACnB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,gBAAgB,KAAA,EAAO;AACrB,QAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,UAAA,0BAAA,GAA6B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM;AACzD,UAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,YAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AAAA,UAC9D;AAAA,QACF,CAAA,MAAO;AACL,UAAA,0BAAA,CAA2B,IAAA,IAAQ,KAAA;AAAA,QACrC;AAEA,QAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,UAAA,oBAAA,GAAuB;AAAA,YACrB,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,KAAA;AAAA,YACX,OAAA,EAAS,CAAC,0BAA0B;AAAA,WACtC;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,oBAAA,CAAqB,SAAA,IAAa,KAAA;AAAA,QACpC;AAEA,QAAA,OAAA,CAAQ,SAAA,GAAA,CAAa,OAAA,CAAQ,SAAA,IAAa,EAAA,IAAM,KAAA;AAEhD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,yBAAyB,KAAA,EAAO;AAC9B,QAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,UAAA,0BAAA,CAA2B,YAAY,KAAA,CAAM,SAAA;AAAA,QAC/C;AAAA,MACF,CAAA;AAAA,MACA,wBAAwB,KAAA,EAAO;AAC7B,QAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,UAAA,oBAAA,GAAuB;AAAA,YACrB,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,EAAA;AAAA,YACX,SAAS;AAAC,WACZ;AACA,UAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,QACzC;AAEA,QAAA,oBAAA,CAAqB,QAAQ,IAAA,CAAK;AAAA,UAChC,IAAA,EAAM,UAAA;AAAA,UACN,MAAM,KAAA,CAAM;AAAA,SACb,CAAA;AAED,QAAA,0BAAA,GAA6B,MAAA;AAE7B,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,MAAA;AAAA,UACN,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,MAAM,KAAA,CAAM;AAAA,SACb,CAAA;AAED,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,aAAa,KAAA,EAAO;AAClB,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,QAAA;AAAA,UACN,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,6BAA6B,KAAA,EAAO;AAClC,QAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,UAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,QAC7B;AAGA,QAAA,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA,UACnC,IAAA,EAAM,EAAA;AAAA,UACN,IAAA;AAAA,UACA,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,KAAA,EAAO,QAAQ,eAAA,CAAgB;AAAA,SACjC;AAEA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,cAAA;AAAA,UACP,IAAA;AAAA,UACA,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,IAAA,EAAM;AAAA,SACR;AAEA,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAAU,CAAA;AAEvC,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,oBAAoB,KAAA,EAAO;AACzB,QAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA;AAEzD,QAAA,eAAA,CAAiB,QAAQ,KAAA,CAAM,aAAA;AAE/B,QAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAIC,wBAAA,CAAiB,gBAAiB,IAAI,CAAA;AAErE,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,cAAA;AAAA,UACP,MAAM,eAAA,CAAiB,IAAA;AAAA,UACvB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,UAAU,eAAA,CAAiB,QAAA;AAAA,UAC3B,IAAA,EAAM;AAAA,SACR;AAEA,QAAA,OAAA,CAAQ,eAAA,CAAiB,eAAA,CAAiB,KAAK,CAAA,GAAI,UAAA;AAEnD,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,MAAM,eAAe,KAAA,EAAO;AAC1B,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,KAAA,EAAO,MAAA;AAAA,UACP,IAAA;AAAA,UACA,GAAG;AAAA,SACL;AAEA,QAAA,IAAI,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,IAAK,IAAA,EAAM;AAE9C,UAAA,OAAA,CAAQ,gBAAiB,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,CAAG,KAAK,CAAA,GAAI,UAAA;AAAA,QACxE,CAAA,MAAO;AACL,UAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,YAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,UAC7B;AAEA,UAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAAU,CAAA;AAAA,QACzC;AAEA,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAAU,CAAA;AAErD,QAAA,UAAA,EAAW;AAKX,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,SAAS,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,OAAO,CAAA;AACnD,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,MAAMC,WAAAA,GAAa;AAAA,cACjB,KAAA,EAAO,QAAA;AAAA,cACP,IAAA;AAAA,cACA,GAAG,KAAA;AAAA,cACH;AAAA,aACF;AAGA,YAAA,OAAA,CAAQ,eAAA,CAAiB,OAAA,CAAQ,eAAA,CAAiB,MAAA,GAAS,CAAC,CAAA,GAAIA,WAAAA;AAEhE,YAAA,wBAAA,CAAyB,KAAA,CAAM,YAAYA,WAAU,CAAA;AAErD,YAAA,UAAA,EAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,iBAAiB,KAAA,EAAO;AACtB,QAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAEhC,QAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,UAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,QAC/D;AAIA,QAAA,MAAM,mBAAA,GAAsB,gBAAgB,SAAA,CAAU,CAAAA,gBAAcA,WAAAA,CAAW,UAAA,KAAe,MAAM,UAAU,CAAA;AAE9G,QAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,UAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,QACxF;AAEA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,GAAG,gBAAgB,mBAAmB,CAAA;AAAA,UACtC,KAAA,EAAO,QAAA;AAAA,UACP,GAAG;AAAA,SACL;AAEA,QAAA,eAAA,CAAgB,mBAAmB,CAAA,GAAI,UAAA;AAEvC,QAAA,wBAAA,CAAyB,KAAA,CAAM,YAAY,UAA4B,CAAA;AAEvE,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,WAAW,KAAA,EAAO;AAChB,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAK,CAAA;AAClB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,yBAAyB,KAAA,EAAO;AAC9B,QAAA,IAAI,sBAAsB,IAAA,EAAM;AAC9B,UAAA,kBAAA,GAAqB,CAAC,GAAG,KAAK,CAAA;AAAA,QAChC,CAAA,MAAO;AACL,UAAA,kBAAA,CAAmB,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,QAClC;AAEA,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,iBAAiB,KAAA,EAAO;AACtB,QAAA,IAAA,IAAQ,CAAA;AAGR,QAAA,eAAA,GAAkB,KAAA,CAAM,cAAc,eAAA,GAAkB,MAAA;AACxD,QAAA,oBAAA,GAAuB,MAAA;AACvB,QAAA,0BAAA,GAA6B,MAAA;AAAA,MAC/B,CAAA;AAAA,MACA,gBAAgB,KAAA,EAAO;AAErB,QAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,UAAA,OAAA,CAAQ,KAAK,KAAA,CAAM,SAAA;AAAA,QACrB;AAGA,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,cAAc,CAAA;AACzC,QAAA,UAAA,EAAW;AAAA,MACb,CAAA;AAAA,MACA,oBAAoB,KAAA,EAAO;AACzB,QAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AACrB,QAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AAEvB,UAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,QAChB;AAAA,MACF,CAAA;AAAA,MACA,YAAY,KAAA,EAAO;AACjB,QAAA,MAAM,IAAI,MAAM,KAAK,CAAA;AAAA,MACvB;AAAA,KACD,CAAA;AAED,IAAA,QAAA,GAAW,EAAE,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aACJ,MAAA,EAKA;AACA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,qBAAqB,MAAA,CAAO,mBAAA,GAAsB,eAAA,CAAgB,MAAA,CAAO,mBAAmB,CAAA,GAAI,MAAA;AAAA,MAChG,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW;AAAA,KACpD;AAGA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,2BAAA,CAA4B,iBAAiB,QAAQ,CAAA;AAGjF,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AAKD,IAAA,cAAA,CAAe,iBAAA,GAAoB,OAAO,OAAA,GAAU,EAAC,KAAM;AACzD,MAAA,MAAMF,yBAAA,CAAkB;AAAA,QACtB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAc,yBAAA,CAA0B;AAAA,IACtC,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,GAAiB,sBAAM,IAAI,IAAA,EAAK;AAAA,IAChC;AAAA,GACF,EAQG;AACD,IAAA,MAAM,kBAAA,GAAqB,aAAa,IAAA,KAAS,WAAA;AACjD,IAAA,IAAI,OAAO,kBAAA,GACP,CAAA;AAAA,KAEC,WAAA,CAAY,eAAA,EAAiB,MAAA,CAAO,CAAC,KAAK,cAAA,KAAmB;AAC5D,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,IAC/C,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAA,GACT,CAAA;AAEJ,IAAA,MAAM,OAAA,GAAqB,kBAAA,GACvB,eAAA,CAAgB,WAAW,CAAA,GAC3B;AAAA,MACE,IAAIF,OAAA,EAAK;AAAA,MACT,WAAW,cAAA,EAAe;AAAA,MAC1B,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,OAAO;AAAC,KACV;AAEJ,IAAA,IAAI,eAAA,GAA0C,MAAA;AAC9C,IAAA,IAAI,oBAAA,GAAoD,MAAA;AACxD,IAAA,IAAI,0BAAA,GAA6F,MAAA;AAEjG,IAAA,SAAS,wBAAA,CAAyB,YAAoB,UAAA,EAA4B;AAChF,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,QACzB,CAAAC,KAAAA,KAAQA,KAAAA,CAAK,SAAS,iBAAA,IAAqBA,KAAAA,CAAK,eAAe,UAAA,KAAe;AAAA,OAChF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,UACjB,IAAA,EAAM,iBAAA;AAAA,UACN,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,OAAoB,EAAC;AAG3B,IAAA,IAAI,kBAAA,GAA8C,kBAAA,GAAqB,WAAA,EAAa,WAAA,GAAc,MAAA;AAGlG,IAAA,MAAM,mBAAoG,EAAC;AAE3G,IAAA,IAAI,KAAA,GAAa;AAAA,MACf,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc,GAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,GAAuB,SAAA;AAE3B,IAAA,SAAS,UAAA,GAAa;AAEpB,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAI,CAAA;AAI3B,MAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,QAAA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AAAA,MACxB;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA;AAAA;AAAA,QAGpB,GAAG,gBAAgB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAM1B,YAAYD,OAAA;AAAK,OACnB;AAEA,MAAA,MAAA,CAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,mBAAA,CAAoB;AAAA,MACxB,MAAA;AAAA;AAAA;AAAA,MAGA,OAAA,EAAS,OAAO,KAAA,KAAe;AAC7B,QAAA,QAAQ,MAAM,IAAA;AAAM,UAClB,KAAK,UAAA,EAAY;AACf,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACrB,CAAA;AAED,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,YAAA,EAAc;AAEjB,YAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,cAAA,OAAA,CAAQ,EAAA,GAAK,MAAM,OAAA,CAAQ,SAAA;AAAA,YAC7B;AAGA,YAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,cAAc,CAAA;AACzC,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,YAAA,EAAc;AACjB,YAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,cAAA,eAAA,GAAkB;AAAA,gBAChB,IAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,eACtB;AACA,cAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,eAAe,CAAA;AAAA,YACpC,CAAA,MAAO;AACL,cAAA,eAAA,CAAgB,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACxC;AAEA,YAAA,OAAA,CAAQ,OAAA,IAAW,MAAM,OAAA,CAAQ,IAAA;AACjC,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,iBAAA,EAAmB;AACtB,YAAA,IAAI,8BAA8B,IAAA,EAAM;AACtC,cAAA,0BAAA,GAA6B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,QAAQ,IAAA,EAAK;AACtE,cAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,gBAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAK,0BAA0B,CAAA;AAAA,cAC9D;AAAA,YACF,CAAA,MAAO;AACL,cAAA,0BAAA,CAA2B,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACnD;AAEA,YAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,cAAA,oBAAA,GAAuB;AAAA,gBACrB,IAAA,EAAM,WAAA;AAAA,gBACN,SAAA,EAAW,MAAM,OAAA,CAAQ,IAAA;AAAA,gBACzB,OAAA,EAAS,CAAC,0BAA0B;AAAA,eACtC;AACA,cAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAAA,YACzC,CAAA,MAAO;AACL,cAAA,oBAAA,CAAqB,SAAA,IAAa,MAAM,OAAA,CAAQ,IAAA;AAAA,YAClD;AAEA,YAAA,OAAA,CAAQ,SAAA,GAAA,CAAa,OAAA,CAAQ,SAAA,IAAa,EAAA,IAAM,MAAM,OAAA,CAAQ,IAAA;AAE9D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UACA,KAAK,MAAA,EAAQ;AACX,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,MAAA;AAAA,cACN,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACrB,CAAA;AAED,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,QAAA,EAAU;AACb,YAAA,OAAA,CAAQ,MAAM,IAAA,CAAK;AAAA,cACjB,IAAA,EAAM,QAAA;AAAA,cACN,MAAA,EAAQ,MAAM,OAAA,CAAQ;AAAA,aACvB,CAAA;AACD,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,WAAA,EAAa;AAChB,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,MAAA;AAAA,cACP,IAAA;AAAA,cACA,GAAG,KAAA,CAAM;AAAA,aACX;AAEA,YAAA,IAAI,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,KAAK,IAAA,EAAM;AAEtD,cAAA,OAAA,CAAQ,gBAAiB,gBAAA,CAAiB,KAAA,CAAM,QAAQ,UAAU,CAAA,CAAG,KAAK,CAAA,GACxE,UAAA;AAAA,YACJ,CAAA,MAAO;AACL,cAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,gBAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,cAC7B;AAEA,cAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAA4B,CAAA;AAAA,YAC3D;AAEA,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAA4B,CAAA;AAE/E,YAAA,UAAA,EAAW;AAKX,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,MAAM,SAAS,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,KAAA,CAAM,SAAgB,CAAA;AAClE,cAAA,IAAI,UAAU,IAAA,EAAM;AAClB,gBAAA,MAAMI,WAAAA,GAAa;AAAA,kBACjB,KAAA,EAAO,QAAA;AAAA,kBACP,IAAA;AAAA,kBACA,GAAG,KAAA,CAAM,OAAA;AAAA,kBACT;AAAA,iBACF;AAGA,gBAAA,OAAA,CAAQ,eAAA,CAAiB,OAAA,CAAQ,eAAA,CAAiB,MAAA,GAAS,CAAC,CAAA,GAAIA,WAAAA;AAEhE,gBAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAYA,WAA4B,CAAA;AAE/E,gBAAA,UAAA,EAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF;AAAA,UAEA,KAAK,iCAAA,EAAmC;AACtC,YAAA,IAAI,OAAA,CAAQ,mBAAmB,IAAA,EAAM;AACnC,cAAA,OAAA,CAAQ,kBAAkB,EAAC;AAAA,YAC7B;AAGA,YAAA,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,cAC3C,IAAA,EAAM,EAAA;AAAA,cACN,IAAA;AAAA,cACA,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,KAAA,EAAO,QAAQ,eAAA,CAAgB;AAAA,aACjC;AAEA,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,cAAA;AAAA,cACP,IAAA;AAAA,cACA,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,cAC1B,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,IAAA,EAAM,MAAM,OAAA,CAAQ;AAAA,aACtB;AAEA,YAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,UAA4B,CAAA;AAEzD,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAAU,CAAA;AAE7D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,iBAAA,EAAmB;AACtB,YAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAEjE,YAAA,eAAA,CAAiB,IAAA,IAAQ,MAAM,OAAA,CAAQ,aAAA;AAEvC,YAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAID,wBAAA,CAAiB,gBAAiB,IAAI,CAAA;AAErE,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,KAAA,EAAO,cAAA;AAAA,cACP,MAAM,eAAA,CAAiB,IAAA;AAAA,cACvB,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,cAC1B,UAAU,eAAA,CAAiB,QAAA;AAAA,cAC3B,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,OAAA,CAAQ,eAAA,CAAiB,eAAA,CAAiB,KAAK,CAAA,GAAI,UAAA;AAEnD,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAAU,CAAA;AAE7D,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,aAAA,EAAe;AAClB,YAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAEhC,YAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,cAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,YAC/D;AAIA,YAAA,MAAM,sBAAsB,eAAA,CAAgB,SAAA;AAAA,cAC1C,CAAAC,WAAAA,KAAcA,WAAAA,CAAW,UAAA,KAAe,MAAM,OAAA,CAAQ;AAAA,aACxD;AAEA,YAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,cAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,YACxF;AAEA,YAAA,MAAM,UAAA,GAAa;AAAA,cACjB,GAAG,gBAAgB,mBAAmB,CAAA;AAAA,cACtC,KAAA,EAAO,QAAA;AAAA,cACP,GAAG,KAAA,CAAM;AAAA,aACX;AAEA,YAAA,eAAA,CAAgB,mBAAmB,CAAA,GAAI,UAAA;AAEvC,YAAA,wBAAA,CAAyB,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,UAA4B,CAAA;AAE/E,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,OAAA,EAAS;AACZ,YAAA,MAAMC,yBAAA,CAAoB,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO;AAAA,cAC7C,eAAA,EAAiB,yBAAA;AAAA,cACjB,oBAAA,EAAsB;AAAA,aACvB,CAAA;AAAA,UACH;AAAA,UAEA,KAAK,MAAA,EAAQ;AACX,YAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAC/B,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,aAAA,EAAe;AAClB,YAAA,IAAA,IAAQ,CAAA;AAGR,YAAA,eAAA,GAAkB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,WAAA,GAAc,eAAA,GAAkB,MAAA;AAC3E,YAAA,oBAAA,GAAuB,MAAA;AACvB,YAAA,0BAAA,GAA6B,MAAA;AAE7B,YAAA,UAAA,EAAW;AACX,YAAA;AAAA,UACF;AAAA,UAEA,KAAK,QAAA,EAAU;AACb,YAAA,YAAA,GAAe,KAAA,CAAM,QAAQ,UAAA,CAAW,MAAA;AACxC,YAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,IAAS,IAAA,EAAM;AAE/B,cAAA,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA;AAAA,YACxB;AACA,YAAA;AAAA,UACF;AAAA;AACF,MACF;AAAA,KACD,CAAA;AAED,IAAA,QAAA,GAAW,EAAE,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,qBAAA,CAAsB,eAAA,EAAsB,QAAA,EAAe,QAAgB,QAAA,EAAU;AACzF,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,eAAe,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI;AAAA,MACpF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,YAA8B,EAAC;AACnC,MAAA,IAAI,WAAwB,EAAC;AAG7B,MAAA,MAAM,CAAC,iBAAA,EAAmB,mBAAmB,CAAA,GAAI,QAAA,CAAS,KAAK,GAAA,EAAI;AAInE,MAAA,iBAAA,CACG,MAAA;AAAA,QACC,IAAI,cAAA,CAA2B;AAAA,UAC7B,MAAM,MAAM,KAAA,EAAO;AACjB,YAAA,IAAI,MAAA;AAGJ,YAAA,IAAI;AACF,cAAA,MAAA,GAAS,SAAS,SAAA,EAAU;AAC5B,cAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC3C,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAC/B,cAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,SAAS,QAAQ,CAAA,CAAE,KAAK,MAAM,CAAA;AAEzE,cAAA,MAAM,OAAO,KAAA,CAAM,IAAI,aAAY,CAAE,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,YAC5D,CAAA,CAAA,MAAQ;AACN,cAAA,MAAM,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,YAC3B,CAAA,SAAE;AACA,cAAA,MAAA,EAAQ,WAAA,EAAY;AAAA,YACtB;AAAA,UACF;AAAA,SACD,CAAA;AAAA,QACD;AAAA,UACE,YAAA,EAAc;AAAA;AAChB,OACF,CACC,MAAM,CAAA,KAAA,KAAS;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MACzD,CAAC,CAAA;AAGH,MAAA,IAAA,CAAK,yBAAA,CAA0B;AAAA,QAC7B,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAQ,KAAM;AACvB,UAAA,MAAM,gBAAgB,QAAA,CAAS,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,EAAE,CAAA;AAEjE,UAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,YAAA,QAAA,CAAS,aAAa,CAAA,GAAI,OAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,UACvB;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU,OAAO,EAAE,YAAA,EAAc,SAAQ,KAAM;AAC7C,UAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,YAAA,MAAM,QAAA,GAAW,CAAC,GAAI,OAAA,EAAS,SAAS,EAAG,CAAA,CACxC,OAAA,GACA,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,iBAAiB,CAAA,EAAG,cAAA;AAClD,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,YACzB;AAEA,YAAA,IAAI,uBAAA,GAA0B,KAAA;AAE9B,YAAA,KAAA,MAAWC,aAAY,SAAA,EAAW;AAChC,cAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,WAAA,GAAcA,SAAAA,CAAS,QAAQ,CAAA;AAClE,cAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,gBAAA,uBAAA,GAA0B,IAAA;AAC1B,gBAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,kBAC9B;AAAA,oBACE,SAASA,SAAAA,EAAU,IAAA;AAAA,oBACnB,OAAO,eAAA,CAAgB,KAAA;AAAA,oBACvB,YAAY,eAAA,CAAgB,UAAA;AAAA,oBAC5B,UAAU,eAAA,CAAgB,QAAA;AAAA,oBAC1B,gBAAgB,eAAA,CAAgB,cAAA;AAAA;AAAA,oBAEhC,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,oBACzC,SAAS,YAAY;AAAA,oBAAC;AAAA,mBACxB;AAAA,kBACA;AAAA,oBACE,UAAW,QAAA,CAAoD,QAAA;AAAA,oBAC/D,YAAYA,SAAAA,EAAU;AAAA;AACxB,iBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACnD,gBAAA,MAAM,WAAA,GACJ,kBAAkB,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA,GAAI,MAAA;AAExE,gBAAA,MAAM,kBAAA,GAAqB,aAAa,KAAA,EAAO,IAAA;AAAA,kBAC7C,UAAQ,IAAA,CAAK,IAAA,KAAS,qBAAqB,IAAA,CAAK,cAAA,EAAgB,eAAeA,SAAAA,CAAS;AAAA,iBAC1F;AAEA,gBAAA,IAAI,kBAAA,EAAoB;AACtB,kBAAA,kBAAA,CAAmB,cAAA,GAAiB;AAAA,oBAClC,GAAG,kBAAA,CAAmB,cAAA;AAAA,oBACtB,KAAA,EAAO,QAAA;AAAA,oBACP;AAAA,mBACF;AAAA,gBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,aAAa,eAAA,EAAiB,IAAA;AAAA,kBACnD,CAAAC,eAAAA,KAAkBA,eAAAA,CAAe,UAAA,KAAeD,SAAAA,CAAS;AAAA,iBAC3D;AAEA,gBAAA,IAAI,cAAA,EAAgB;AAClB,kBAAA,cAAA,CAAe,KAAA,GAAQ,QAAA;AAEvB,kBAAA,cAAA,CAAe,MAAA,GAAS,MAAA;AAAA,gBAC1B;AAIA,gBAAA,MAAM,kBACJ,WAAA,IAAe,IAAA,GAAO,CAAC,GAAG,SAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,YAAY,EAAE,CAAA,EAAG,WAAW,CAAA,GAAI,CAAC,GAAG,QAAQ,CAAA;AAGtG,gBAAA,IAAA,CAAK,qBAAA;AAAA,kBACH;AAAA,oBACE,GAAG,eAAA;AAAA,oBACH,QAAA,EAAU;AAAA,mBACZ;AAAA,kBACA;AAAA,iBACF,CAAE,MAAM,CAAA,KAAA,KAAS;AACf,kBAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,gBAC1D,CAAC,CAAA;AAAA,cACH;AAAA,YACF;AAEA,YAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,cAAA,UAAA,CAAW,MAAM;AACf,gBAAA,QAAA,CAAS,KAAA,EAAM;AAAA,cACjB,GAAG,CAAC,CAAA;AAAA,YACN;AAAA,UACF,CAAA,MAAO;AACL,YAAA,UAAA,CAAW,MAAM;AACf,cAAA,QAAA,CAAS,KAAA,EAAM;AAAA,YACjB,GAAG,CAAC,CAAA;AAAA,UACN;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,MAAA,EAQZ;AACA,IAAA,MAAM,WAAqB,MAAM,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,QAAA,CAAA,EAAY;AAAA,MACnF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM;AAAA,MACjD,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AAQD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,0BAAA,CAA2B;AAAA,QAC/B,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAyBA,MAAM,MAAA,CACJ,gBAAA,EACA,OAAA,EASA;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,UAAA,IAAc,gBAAA,EAAkB;AAE1E,MAAA,MAAA,GAAS,gBAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAAS;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,IACF;AACA,IAAA,MAAM,eAAA,GAAwC;AAAA,MAC5C,GAAG,MAAA;AAAA,MACH,QAAQ,MAAA,CAAO,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MACzD,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAAA,MAC/D,WAAA,EAAa,kBAAA,CAAmB,MAAA,CAAO,WAAW,CAAA;AAAA,MAClD,gBAAA,EAAkB,OAAO,gBAAA,GACrB;AAAA,QACE,GAAG,MAAA,CAAO,gBAAA;AAAA,QACV,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,gBAAA,CAAiB,MAAM;AAAA,OACxD,GACA;AAAA,KACN;AAGA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,qBAAA,CAAsB,iBAAiB,QAAQ,CAAA;AAG3E,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AASD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,mBAAA,CAAoB;AAAA,QACxB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,MAAA,EAQpB;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,UAAU,mBAAmB,CAAA;AAGvF,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AASD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,mBAAA,CAAoB;AAAA,QACxB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,MAAA,EAQpB;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAwC;AAG3E,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,UAAU,mBAAmB,CAAA;AAGvF,IAAA,MAAM,cAAA,GAAiB,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,MAC5C,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS;AAAA,KACnB,CAAA;AASD,IAAA,cAAA,CAAe,oBAAoB,OAAO;AAAA,MACxC;AAAA,KACF,KAEM;AACJ,MAAA,MAAM,mBAAA,CAAoB;AAAA,QACxB,QAAQ,cAAA,CAAe,IAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,2BAAA,CAA4B,eAAA,EAAsB,QAAA,EAAsC;AACpG,IAAA,MAAM,WAEF,MAAM,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,MAClE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,YAA8B,EAAC;AACnC,MAAA,IAAI,WAAwB,EAAC;AAG7B,MAAA,MAAM,CAAC,iBAAA,EAAmB,mBAAmB,CAAA,GAAI,QAAA,CAAS,KAAK,GAAA,EAAI;AAGnE,MAAA,iBAAA,CACG,OAAO,QAAA,EAAU;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MACzD,CAAC,CAAA;AAGH,MAAA,IAAA,CAAK,mBAAA,CAAoB;AAAA,QACvB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAQ,KAAM;AACvB,UAAA,MAAM,gBAAgB,QAAA,CAAS,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,EAAE,CAAA;AAEjE,UAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,YAAA,QAAA,CAAS,aAAa,CAAA,GAAI,OAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,UACvB;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU,OAAO,EAAE,YAAA,EAAc,SAAQ,KAAM;AAC7C,UAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,YAAA,MAAM,QAAA,GAAW,CAAC,GAAI,OAAA,EAAS,SAAS,EAAG,CAAA,CACxC,OAAA,GACA,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,iBAAiB,CAAA,EAAG,cAAA;AAClD,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,YACzB;AAGA,YAAA,KAAA,MAAWA,aAAY,SAAA,EAAW;AAChC,cAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,WAAA,GAAcA,SAAAA,CAAS,QAAQ,CAAA;AAClE,cAAA,IAAI,UAAA,IAAc,WAAW,OAAA,EAAS;AACpC,gBAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,OAAA;AAAA,kBAC9B;AAAA,oBACE,SAASA,SAAAA,EAAU,IAAA;AAAA,oBACnB,OAAO,eAAA,CAAgB,KAAA;AAAA,oBACvB,YAAY,eAAA,CAAgB,UAAA;AAAA,oBAC5B,UAAU,eAAA,CAAgB,QAAA;AAAA,oBAC1B,gBAAgB,eAAA,CAAgB,cAAA;AAAA;AAAA,oBAEhC,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,oBACzC,SAAS,YAAY;AAAA,oBAAC;AAAA,mBACxB;AAAA,kBACA;AAAA,oBACE,UAAW,QAAA,CAAoD,QAAA;AAAA,oBAC/D,YAAYA,SAAAA,EAAU;AAAA;AACxB,iBACF;AAEA,gBAAA,MAAM,WAAA,GAAyB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAEvF,gBAAA,MAAM,kBAAA,GAAqB,aAAa,KAAA,EAAO,IAAA;AAAA,kBAC7C,UAAQ,IAAA,CAAK,IAAA,KAAS,qBAAqB,IAAA,CAAK,cAAA,EAAgB,eAAeA,SAAAA,CAAS;AAAA,iBAC1F;AAEA,gBAAA,IAAI,kBAAA,EAAoB;AACtB,kBAAA,kBAAA,CAAmB,cAAA,GAAiB;AAAA,oBAClC,GAAG,kBAAA,CAAmB,cAAA;AAAA,oBACtB,KAAA,EAAO,QAAA;AAAA,oBACP;AAAA,mBACF;AAAA,gBACF;AAEA,gBAAA,MAAM,cAAA,GAAiB,aAAa,eAAA,EAAiB,IAAA;AAAA,kBACnD,CAAAC,eAAAA,KAAkBA,eAAAA,CAAe,UAAA,KAAeD,SAAAA,CAAS;AAAA,iBAC3D;AAEA,gBAAA,IAAI,cAAA,EAAgB;AAClB,kBAAA,cAAA,CAAe,KAAA,GAAQ,QAAA;AAEvB,kBAAA,cAAA,CAAe,MAAA,GAAS,MAAA;AAAA,gBAC1B;AAGA,gBAAA,MAAM,MAAA,GAAS,SAAS,SAAA,EAAU;AAElC,gBAAA,IAAI;AACF,kBAAA,MAAM,MAAA,CAAO,KAAA;AAAA,oBACX,IAAI,aAAY,CAAE,MAAA;AAAA,sBAChB,IAAA,GACE,KAAK,SAAA,CAAU;AAAA,wBACb,YAAYA,SAAAA,CAAS,UAAA;AAAA,wBACrB;AAAA,uBACD,CAAA,GACD;AAAA;AACJ,mBACF;AAAA,gBACF,CAAA,SAAE;AACA,kBAAA,MAAA,CAAO,WAAA,EAAY;AAAA,gBACrB;AAGA,gBAAA,IAAA,CAAK,2BAAA;AAAA,kBACH;AAAA,oBACE,GAAG,eAAA;AAAA,oBACH,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,WAAA,CAAY,EAAE,CAAA,EAAG,WAAW;AAAA,mBAC1E;AAAA,kBACA;AAAA,iBACF,CAAE,MAAM,CAAA,KAAA,KAAS;AACf,kBAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,gBAC1D,CAAC,CAAA;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,UAAA,CAAW,MAAM;AAGf,cAAA,QAAA,CAAS,KAAA,EAAM;AAAA,YACjB,GAAG,CAAC,CAAA;AAAA,UACN;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,QAAgB,cAAA,EAAiF;AACvG,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAA,CACE,QACA,MAAA,EACc;AACd,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc;AAAA,KACjE;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,QAAA,CAAA,EAAY;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAA,EAA2F;AAC/F,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,SAAA,EAAY,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,cAAA,EAA2F;AACnG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,WAAA,EAAc,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,MAAA,EAAyD;AACnE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,MAAA,CAAA,EAAU;AAAA,MACvD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAA,CAAuB,EAAE,aAAA,EAAe,GAAG,QAAO,EAA+D;AAC/G,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,QAAA,EAAW,aAAa,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,MAAA,EAA8D;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,OAAO,CAAA,eAAA,CAAA,EAAmB;AAAA,MAChE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA,EAYA,MAAM,aAAA,CACJ,iBAAA,EACA,QAAA,EACyD;AACzD,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AAAA,EA6BA,MAAM,WAAA,CACJ,iBAAA,EACA,QAAA,EASA;AACA,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AACF,CAAA;;;ACzuDO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CACE,OAAA,EACQ,QAAA,EACA,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA8D;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAClF,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAClF,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAAkF;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAI,MAAA,EAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAO,KAAA,CAAM,QAAA,EAAS,EAAE,GAAI;AAAC,KAC3D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAA,CAAqB;AAAA,IACnB,QAAA;AAAA,IACA,GAAG;AAAA,GACL,EAA8F;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,GAAI,WAAW,EAAE,QAAA,EAAU,KAAK,SAAA,CAAU,QAAQ,CAAA,EAAE,GAAI;AAAC,KAC1D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eACE,UAAA,EACgD;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,4BAAA,EAA+B,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MACrE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,UAAA;AAAW,KACpB,CAAA;AAAA,EACH;AACF,CAAA;;;ACrFO,IAAM,MAAA,GAAN,cAAqB,YAAA,CAAa;AAAA,EACvC,WAAA,CACE,SACQ,UAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,WAAmB,cAAA,EAAwF;AACjH,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,SAAA,EAAY,SAAS,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAAA,KACjG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAA,EAAkD;AACvD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,cAAA,EAAuF;AAChG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,QAAA,EAAW,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAA0D;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,aAAA,CAAA,EAAiB;AAAA,MACjE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA+C;AACpD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,OAAA,CAAA,EAAW;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,EAAyD;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,MAAA,CAAA,EAAU;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF,CAAA;;;AClFO,IAAM,IAAA,GAAN,cAAmB,YAAA,CAAa;AAAA,EACrC,WAAA,CACE,SACQ,MAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAAiF;AACvF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAA,EAA4G;AAClH,IAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAEhC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,cAAA,EAAgB,yBAAA,CAA0B,MAAA,CAAO,cAAc;AAAA,KACjE;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,SAAA,EAAY,GAAA,CAAI,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;AC5BA,IAAM,gBAAA,GAAmB,GAAA;AAElB,IAAM,QAAA,GAAN,cAAuB,YAAA,CAAa;AAAA,EACzC,WAAA,CACE,SACQ,UAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAe,gBAAgB,MAAA,EAA4E;AACzG,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAGhC,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,WAAA,EAAa;AAEnB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,WAAA,GAAc,IAAA;AAGd,QAAA,IAAI,IAAA,IAAQ,CAAC,KAAA,EAAO;AAEpB,QAAA,IAAI;AAEF,UAAA,MAAM,UAAU,KAAA,GAAQ,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAG1D,UAAA,MAAM,MAAA,GAAA,CAAU,MAAA,GAAS,OAAA,EAAS,KAAA,CAAM,gBAAgB,CAAA;AAGxD,UAAA,MAAA,GAAS,MAAA,CAAO,KAAI,IAAK,EAAA;AAGzB,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,KAAA,EAAO;AAET,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACpC,kBAAA,MAAM,WAAA;AAAA,gBACR,CAAA,CAAA,MAAQ;AAAA,gBAGR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAGR;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,QACzB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAE5B,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAAqF;AAC3F,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA,CACE,QACA,cAAA,EACkC;AAClC,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,MAAA,EAAQ,KAAA,KAAU,IAAA,IAAQ,MAAA,EAAQ,KAAA,KAAU,MAAA,IAAa,CAAC,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAC,CAAA,EAAG;AAC1F,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,MAAA,KAAW,IAAA,IAAQ,MAAA,EAAQ,MAAA,KAAW,MAAA,IAAa,CAAC,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAC,CAAA,EAAG;AAC7F,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,MAAA,CAAO,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,YAAY,CAAA,CAAE,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,KAAA,CAAO,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CAAQ,OAAe,cAAA,EAA4F;AACjH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAA,CACE,OACA,cAAA,EACgD;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,iBAAA,EAAoB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAAA,KAC9G;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,KAAA,EAA6C;AACrD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAA,EAAW;AAAA,MAC5E,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,MAAA,EAAuF;AAClG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,MAAA,CAAO,KAAK,CAAA,WAAA,CAAA,EAAe;AAAA,MACvF,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAAK,KAChD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,OAAA,EAyBb;AACD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAMF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,MAAA,EAkClB;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA;AAAA,MACrB,kBAAkB,IAAA,CAAK,UAAU,CAAA,YAAA,EAAe,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACvE;AAAA,QACE,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAElB,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,OAAO,CAAA,KAIR;AACJ,QAAA,OAAO,KAAK,KAAA,CAAM;AAAA,UAChB,KAAA;AAAA,UACA,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,UAAA,EAAY,OAAO,CAAA,KAIb;AACJ,QAAA,OAAO,KAAK,UAAA,CAAW;AAAA,UACrB,KAAA;AAAA,UACA,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,KAAA,EAAO,OAAO,QAAA,KAAoD;AAChE,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,EAAE,KAAA,IAAS,QAAQ,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,CAAA,KAAiG;AAC9G,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,KAAA,EAAO,SAAA,EAAW,EAAE,SAAA,EAAW,cAAA,EAAgB,CAAA,CAAE,cAAA,EAAgB,CAAA;AAAA,MACxF,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,CAAA,KAKT;AACJ,QAAA,OAAO,KAAK,MAAA,CAAO;AAAA,UACjB,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,WAAA,EAAa,OAAO,CAAA,KAKd;AACJ,QAAA,OAAO,KAAK,WAAA,CAAY;AAAA,UACtB,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,MACA,iBAAA,EAAmB,OAAO,CAAA,KAIpB;AACJ,QAAA,OAAO,KAAK,iBAAA,CAAkB;AAAA,UAC5B,KAAA;AAAA,UACA,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,gBAAgB,CAAA,CAAE;AAAA,SACnB,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,EAK2B;AAC/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;AAAA,MACnF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,EAAQ,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA;AAAe,KAC7F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,CAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAG;AAAA,GACL,EAMiC;AAC/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,IAAA,CAAK,cAAc,CAAA;AACpE,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,KAAK,UAAU,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAA,EAAI;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,IAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,MAAA,EAKoB;AAC7B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AAEtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA;AAAe,KAC5F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,MAAA,EAKV;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,QAAA,EAAW,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACnE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,cAAA,EAAgB,cAAA,EAAgB,OAAO,cAAA,EAAe;AAAA,QAC3F,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWE,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,MAAA,EAA2B;AAC7C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,gBAAA,EAAmB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAC3E;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC7E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,MAAA,EAMf;AACD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MACxE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,cAAA;AAAA,UACA,gBAAgB,MAAA,CAAO,cAAA;AAAA,UACvB,gBAAgB,MAAA,CAAO;AAAA,SACzB;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAmB,MAAA,EAA2B;AAClD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAEtC,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,qBAAA,EAAwB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAChF;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAMmB;AAC7B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,oBAAA,EAAuB,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;AAAA,MAC1F,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,cAAA;AAAA,QACA,gBAAgB,MAAA,CAAO;AAAA;AACzB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB,MAAA,EAMI;AAC1B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA;AAAA,MACpC,kBAAkB,IAAA,CAAK,UAAU,CAAA,eAAA,EAAkB,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,MAC1E;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,cAAA;AAAA,UACA,gBAAgB,MAAA,CAAO;AAAA,SACzB;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAGtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAmD;AAAA,MAC7E,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,gBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWA,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,CAAM,EAAE,KAAA,IAA6B,QAAA,EAAiD;AAC1F,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAkB,IAAA,CAAK,UAAU,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA,EAAI;AAAA,MACtG,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,WAAA,MAAiB,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,mBAAmB,OAAA,EAA6D;AACrF,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,OAAO,IAAI,cAAA,CAAe;AAAA,MACxB,MAAM,MAAM,UAAA,EAAY;AACtB,QAAA,IAAI;AACF,UAAA,WAAA,MAAiB,UAAU,OAAA,EAA+B;AACxD,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,GAAI,gBAAA;AACtC,YAAA,UAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,UACzC;AACA,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB,SAAS,GAAA,EAAK;AACZ,UAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;AC10BO,IAAM,GAAA,GAAN,cAAkB,YAAA,CAAa;AAAA,EACpC,WAAA,CACE,SACQ,OAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,GAA8B;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,gBAAA,CAAkB,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,MAAA,EAAyD;AACzE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAA6B,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC/E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,cAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBAAqB,MAAA,EAAiF;AAC1G,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAqD,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MACvG,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,gBAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,MAAA,EAAmD;AAC/D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAyB,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,WAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,MAAA,EAAwC;AACvD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,cAAA;AAAA,QACR;AAAA;AACF,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;ACxFO,IAAM,OAAA,GAAN,cAAsB,YAAA,CAAa;AAAA,EAChC,QAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,OAAA,EAAwB,QAAA,EAAkB,MAAA,EAAgB;AACpE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,cAAA,EAA6E;AACnF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,EAAG,yBAAA,CAA0B,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAA,EAAuE;AAC7E,IAAA,MAAM,OAAY,EAAC;AACnB,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAKlD,IAAA,IAAI,MAAA,CAAO,mBAAmB,MAAA,EAAW;AACvC,MAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,QAAA,CAAA,EAAY;AAAA,MAC5E,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,IAAA,GAAO;AAAA,KAC7C,CAAA;AAAA,EACH;AACF,CAAA;;;AC3CA,IAAMC,iBAAAA,GAAmB,GAAA;AAuBlB,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CACE,SACQ,QAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGV;AAAA;AAAA,EAGA,wBAAwB,MAAA,EAAuC;AAC7D,IAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,KAAA;AAAA,QAClC,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,KAAA;AAAA,QAClC,UAAA,EAAY,OAAO,MAAA,CAAO,UAAA;AAAA,QAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,gCAAA;AAAA,QAClC,iBAAA,EAAmB,OAAO,MAAA,CAAO,iBAAA;AAAA,QACjC,KAAA,EAAO,OAAO,MAAA,CAAO,KAAA;AAAA,QACrB,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,QACtB,WAAA,EAAa,OAAO,MAAA,CAAO;AAAA,OAC7B;AAAA,IACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,CAAA,6BAAA,EAAgC,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,QAC7D,KAAA,EAAO,OAAO,KAAA,CAAM;AAAA,OACtB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,OAAA,EAAS,oCAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,OAAA,EAA0D;AACxE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAMF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,MAAA,EAAyD;AAC5E,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACzH,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CAAW,MAAA,EAAmC,KAAA,EAAmD;AACrG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAC1H,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,MAAA,EAAmC,KAAA,EAA6C;AACnG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,YAAA,CAAa,UAAU,CAAA,CAAA;AAChF,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CACJ,MAAA,EAKA,KAAA,EAC8B;AAC9B,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,QAAA,EAAW,YAAA,CAAa,UAAU,CAAA,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CACJ,MAAA,EAKA,KAAA,EACmC;AACnC,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAE/B,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,cAAA,EAAiB,YAAA,CAAa,UAAU,CAAA,CAAA;AACvF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA;AAAe,KACzC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAe,gBACb,MAAA,EAC+D;AAC/D,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAGhC,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,WAAA,EAAa;AAEnB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,WAAA,GAAc,IAAA;AAGd,QAAA,IAAI,IAAA,IAAQ,CAAC,KAAA,EAAO;AAEpB,QAAA,IAAI;AAEF,UAAA,MAAM,UAAU,KAAA,GAAQ,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAG1D,UAAA,MAAM,MAAA,GAAA,CAAU,MAAA,GAAS,OAAA,EAAS,KAAA,CAAMA,iBAAgB,CAAA;AAGxD,UAAA,MAAA,GAAS,MAAA,CAAO,KAAI,IAAK,EAAA;AAGzB,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,KAAA,EAAO;AAET,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACpC,kBAAA,MAAM,WAAA;AAAA,gBACR,CAAA,CAAA,MAAQ;AAAA,gBAGR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAGR;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,QACzB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAE5B,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CAAO,MAAA,EAAmC,KAAA,EAAgB;AAC9D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACrH,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA,EAAe;AAAA,MACxC,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAEtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAMA,iBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWD,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CAAY,MAAA,EAAmC,KAAA,EAAgB;AACnE,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,cAAc,CAAA;AACtE,IAAA,MAAM,EAAE,cAAA,EAAgB,CAAA,EAAG,GAAG,cAAa,GAAI,MAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,YAAA,EAAe,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAC1H,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,cAAA,EAAe;AAAA,MACxC,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,WAAA,GAAkC,MAAA;AAEtC,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAA6D;AAAA,MACvF,KAAA,GAAQ;AAAA,MAAC,CAAA;AAAA,MACT,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,EAAY;AACjC,QAAA,IAAI;AAEF,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAG9C,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAMC,iBAAgB,CAAA;AAG7C,UAAA,KAAA,MAAWD,UAAS,MAAA,EAAQ;AAC1B,YAAA,IAAIA,MAAAA,EAAO;AACT,cAAA,MAAM,QAAA,GAAmB,WAAA,GAAc,WAAA,GAAcA,MAAAA,GAAQA,MAAAA;AAC7D,cAAA,IAAI;AACF,gBAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACvC,gBAAA,UAAA,CAAW,QAAQ,WAAW,CAAA;AAC9B,gBAAA,WAAA,GAAc,MAAA;AAAA,cAChB,CAAA,CAAA,MAAQ;AACN,gBAAA,WAAA,GAAc,QAAA;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CACJ,EAAE,KAAA,EAAO,SAAA,IACT,QAAA,EACA;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,aAAA,EAAgB,KAAK,CAAA,EAAG,SAAA,GAAY,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjH,IAAA,MAAM,QAAA,GAAqB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,WAAA,MAAiB,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAM,CAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ,KAAA,EAAe;AAC3B,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,GAAiC;AACrC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAsB,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AACrF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,MAAA,EAAmG;AAC5G,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,MAAA,EAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,MAAA,CAAO,UAAU,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,KAAA,EAAQ,YAAA,CAAa,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AACnH,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAAmB,KAAA,EAAe;AACtC,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,iBAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,KAAA,EAA6C;AAC3D,IAAA,MAAM,GAAA,GAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,SAAS,KAAK,CAAA,OAAA,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAa,MAAA,EAAuF;AACxG,IAAA,MAAM,MAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAQ,CAAA,MAAA,EAAS,OAAO,KAAK,CAAA,WAAA,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA;AAAK,KAChD,CAAA;AAAA,EACH;AACF,CAAA;;;ACrfO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,YAAY,OAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAA,EAAyC;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,MAAA,EAA4D;AACpE,IAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI,MAAA;AAChC,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAU,GAAI,cAAc,EAAC;AACpD,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,UAAA,EAAW,GAAI,WAAW,EAAC;AAC7D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AACrC,MAAA,YAAA,CAAa,GAAA,CAAI,cAAc,UAAU,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,YAAA,GAAe,KAAK,SAAA,CAAU;AAAA,QAClC,KAAA,EAAO,UAAU,KAAA,YAAiB,IAAA,GAAO,UAAU,KAAA,CAAM,WAAA,KAAgB,SAAA,CAAU,KAAA;AAAA,QACnF,GAAA,EAAK,UAAU,GAAA,YAAe,IAAA,GAAO,UAAU,GAAA,CAAI,WAAA,KAAgB,SAAA,CAAU;AAAA,OAC9E,CAAA;AACD,MAAA,YAAA,CAAa,GAAA,CAAI,aAAa,YAAY,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,yBAAA,EAA4B,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,MAAA,EAA2D;AAChF,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,SAAQ,GAAI,MAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,0BAAA,EAA6B,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,EAAU,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,KAAK,EAAE,CAAA;AAAA,KACtI;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,EAG2C;AAC/C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,+BAAA,CAAA,EAAmC;AAAA,MACrD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,GAAG,MAAA;AAAO,KACnB,CAAA;AAAA,EACH;AACF,CAAA;;;AC9EO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CACE,OAAA,EACQ,QAAA,EACA,SAAA,EACR;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHL,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAGV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAA,EAA8D;AACnE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI;AAAA,MAC9F,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAA,EAAkF;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,GAAI,MAAA,EAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAO,KAAA,CAAM,QAAA,EAAS,EAAE,GAAI;AAAC,KAC3D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,4BAAA,EAA+B,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eACE,UAAA,EACgD;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB;AAAA,MAChC,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oCAAA,EAAuC,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,EAAE,UAAA;AAAW,KACpB,CAAA;AAAA,EACH;AACF,CAAA;;;AC5BO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EACrC,aAAA;AAAA,EACR,YAAY,OAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CAAc,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,cAAA,EAAkG;AACjH,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,WAAA,EAAc,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAA,EAAiB;AAC/B,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,MAAA,EAAiE;AACvF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,+BAAA,EAAkC,MAAA,CAAO,UAAU,CAAA,SAAA,EAAY,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,MAAA,EAAiE;AACtF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,2BAAA,EAA8B,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,MAAA,EAAuE;AAC/F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,4BAAA,EAA+B,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAA,CAAgB,UAAkB,OAAA,EAAiB;AACxD,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,EACzD;AAAA,EAEO,iBAAA,CACL,QAAA,EACA,IAAA,GAAiD,EAAC,EACR;AAC1C,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,GAAA,GAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,kBAAA,EAAqB,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,IACxE,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,MAAA,GAAA,GAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,oBAAA,EAAuB,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,IACpF;AACA,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACzB;AAAA,EAEO,YAAA,CACL,QAAA,EACA,IAAA,GAAiD,EAAC,EACF;AAChD,IAAA,IAAI,GAAA,GAAM,EAAA;AAEV,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,GAAA,GAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,SAAA,EAAY,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,MAAA,GAAA,GAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,WAAA,EAAc,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,GAAA,EAAK,EAAE,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBAAoB,MAAA,EAAyE;AAClG,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,kCAAA,EAAqC,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI;AAAA,MACzE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,gBAAgB,OAAA,EAA+C;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,2BAAA,EAA8B,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,wBAAwB,MAAA,EAAwE;AACrG,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,uCAAA,EAA0C,MAAA,CAAO,UAAU,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAAA,EACjH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,0BAA0B,MAAA,EAA8E;AAC7G,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,sCAAA,EAAyC,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,sBAAA,CAAuB,UAAkB,SAAA,EAAmB;AACjE,IAAA,OAAO,IAAI,mBAAA,CAAoB,IAAA,CAAK,OAAA,EAAS,UAAU,SAAS,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,2BAA2B,MAAA,EAAgF;AAChH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,4CAAA,EAA+C,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI;AAAA,MACrF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,uBAAuB,SAAA,EAAiD;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,qCAAA,EAAwC,SAAS,CAAA,CAAE,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,cAAA,EAAiG;AAC/G,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,UAAA,EAAa,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAAA,EAAgB;AAC7B,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aACL,cAAA,EAC8C;AAC9C,IAAA,MAAM,mBAAA,GAAsB,oBAAA,CAAqB,yBAAA,CAA0B,cAAc,CAAC,CAAA;AAE1F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,YAAA,CAAa,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,cAAA,EAAiB,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,UAAA,EAAoB;AACrC,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,sBAAA,GAAgE;AACrE,IAAA,OAAO,IAAA,CAAK,QAAQ,qBAAqB,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,sBAAsB,QAAA,EAAkB;AAC7C,IAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,UAAA,EAAoB;AACnC,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAAA,EAAiD;AAC9D,IAAA,MAAM,EAAE,aAAa,QAAA,EAAU,MAAA,EAAQ,UAAU,OAAA,EAAS,IAAA,EAAM,SAAQ,GAAI,MAAA;AAC5E,IAAA,MAAM,WAAW,OAAA,GAAU,MAAA,CAAO,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAE/F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,GAAA,CAAI,eAAe,WAAW,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,QAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,YAAY,CAAA,CAAE,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,SAAA,CAAW,CAAA;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,MAAA,EAAgD;AAClE,IAAA,MAAM,EAAE,OAAO,WAAA,EAAa,QAAA,EAAU,QAAQ,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAEnF,IAAA,MAAM,WAAW,OAAA,GAAU,MAAA,CAAO,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAC/F,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,GAAA,CAAI,eAAe,WAAW,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,QAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,gBAAA,GAAsD;AAC3D,IAAA,OAAO,IAAA,CAAK,QAAQ,sBAAsB,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,MAAA,EAA4D;AAC9E,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,WAAW,QAAA,EAAU,MAAA,EAAO,GAAI,MAAA,IAAU,EAAC;AAC/E,IAAA,MAAM,aAAa,SAAA,GAAY,MAAA,CAAO,QAAQ,SAAS,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,CAAE,IAAI,EAAC;AAErG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,QAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,UAAA,YAAA,CAAa,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,QACvC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,GAAA,CAAI,aAAa,UAAU,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,QAAA,CAAS,WAAA,EAAa,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAE,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,cAAA,CAAgB,CAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,MAAA,EAA8E;AACjG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,MAAA,EAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,EAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,mBAAA,EAAsB,WAAA,GAAc,IAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,mBAAA,CAAoB,UAAkB,MAAA,EAA0D;AACrG,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,QAAQ,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBAAkB,QAAA,EAAsD;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,SAAA,EAAY,QAAQ,CAAA,MAAA,CAAQ,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAA,CAAiB,UAAkB,MAAA,EAAyB;AACjE,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,OAAA,EAAiB;AAC7B,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAA,CAAiB;AAAA,IACtB,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,EAIG;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,QAAQ,2BAA2B,OAAO,CAAA,YAAA,EAAe,UAAU,CAAA,CAAE,CAAA;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,mBAAA,CAAoB;AAAA,IACzB,OAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAKG;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,QAAQ,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAA,EAAI;AAAA,MACvF,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,aAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAA,GAAyD;AAC9D,IAAA,OAAO,IAAA,CAAK,QAAQ,qBAAqB,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,QAAA,EAA8C;AAC7D,IAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3E;AAAA,EAEO,oBAAoB,MAAA,EAA+D;AACxF,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,YAAW,GAAI,MAAA;AAC1D,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,YAAA,CAAa,GAAA,CAAI,YAAY,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,YAAA,CAAa,GAAA,CAAI,cAAc,UAAU,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EACjH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,MAAA,EAA4D;AAClF,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AACjC,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBAAoB,MAAA,EAA+D;AACxF,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,IAAA,EAAM,SAAQ,GAAI,MAAA;AAChD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAA,GAAc,aAAa,QAAA,EAAS;AAC1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,KAAK,EAAE,CAAA;AAAA,KAC7H;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,MAAA,EAAqD;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,aAAA,EAAe;AAAA,MACjC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAuC;AACrC,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,CAAsB,CAAA;AAAA,EAC5C;AAAA,EAEA,WAAW,OAAA,EAAyC;AAClD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA;AAAA,EAC5C;AAAA,EAEA,YAAY,MAAA,EAA4D;AACtE,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,SAAA,CAAU,MAAM,CAAA;AAAA,EAC5C;AAAA,EAEA,gBAAgB,MAAA,EAA2D;AACzE,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,MAAM,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,MAAA,EAG2C;AAC/C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AAAA,EACxC;AACF;;;ACroBO,IAAM,aAAN,MAIP;AAAA,EACE,EAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EAEA,YAAY,IAAA,EAA+C;AACzD,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,EAAA;AACf,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AAAA,EACtB;AACF;AAGO,SAAS,WAGd,IAAA,EAAkF;AAClF,EAAA,OAAO,IAAI,WAAW,IAAI,CAAA;AAC5B","file":"index.cjs","sourcesContent":["import { RuntimeContext } from '@mastra/core/runtime-context';\n\nexport function parseClientRuntimeContext(runtimeContext?: RuntimeContext | Record<string, any>) {\n if (runtimeContext) {\n if (runtimeContext instanceof RuntimeContext) {\n return Object.fromEntries(runtimeContext.entries());\n }\n return runtimeContext;\n }\n return undefined;\n}\n\nexport function base64RuntimeContext(runtimeContext?: Record<string, any>): string | undefined {\n if (runtimeContext) {\n return btoa(JSON.stringify(runtimeContext));\n }\n return undefined;\n}\n\nexport function runtimeContextQueryString(runtimeContext?: RuntimeContext | Record<string, any>): string {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n if (!runtimeContextParam) return '';\n const searchParams = new URLSearchParams();\n searchParams.set('runtimeContext', runtimeContextParam);\n const queryString = searchParams.toString();\n return queryString ? `?${queryString}` : '';\n}\n","import { z } from 'zod';\nimport type { ZodType } from 'zod';\nimport originalZodToJsonSchema from 'zod-to-json-schema';\n\nfunction isZodType(value: unknown): value is ZodType {\n // Check if it's a Zod schema by looking for common Zod properties and methods\n return (\n typeof value === 'object' &&\n value !== null &&\n '_def' in value &&\n 'parse' in value &&\n typeof (value as any).parse === 'function' &&\n 'safeParse' in value &&\n typeof (value as any).safeParse === 'function'\n );\n}\n\nexport function zodToJsonSchema<T extends ZodType | any>(zodSchema: T) {\n if (!isZodType(zodSchema)) {\n return zodSchema;\n }\n\n if ('toJSONSchema' in z) {\n const fn = 'toJSONSchema';\n // @ts-expect-error Some nextjs compilation issue\n return z[fn].call(z, zodSchema);\n }\n\n return originalZodToJsonSchema(zodSchema, { $refStrategy: 'relative' });\n}\n","import type { ToolsInput } from '@mastra/core/agent';\nimport { isVercelTool } from '@mastra/core/tools/is-vercel-tool';\nimport { zodToJsonSchema } from './zod-to-json-schema';\n\nexport function processClientTools(clientTools: ToolsInput | undefined): ToolsInput | undefined {\n if (!clientTools) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(clientTools).map(([key, value]) => {\n if (isVercelTool(value)) {\n return [\n key,\n {\n ...value,\n parameters: value.parameters ? zodToJsonSchema(value.parameters) : undefined,\n },\n ];\n } else {\n return [\n key,\n {\n ...value,\n inputSchema: value.inputSchema ? zodToJsonSchema(value.inputSchema) : undefined,\n outputSchema: value.outputSchema ? zodToJsonSchema(value.outputSchema) : undefined,\n },\n ];\n }\n }),\n );\n}\n","import type { ReadableStream } from 'stream/web';\nimport type { ChunkType, NetworkChunkType } from '@mastra/core/stream';\n\nasync function sharedProcessMastraStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: any) => Promise<void>;\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete SSE messages\n const lines = buffer.split('\\n\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6); // Remove 'data: '\n\n if (data === '[DONE]') {\n console.info('🏁 Stream finished');\n return;\n }\n let json;\n try {\n json = JSON.parse(data);\n } catch (error) {\n console.error('❌ JSON parse error:', error, 'Data:', data);\n continue;\n }\n if (json) {\n await onChunk(json);\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport async function processMastraNetworkStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: NetworkChunkType) => Promise<void>;\n}) {\n return sharedProcessMastraStream({\n stream,\n onChunk,\n });\n}\n\nexport async function processMastraStream({\n stream,\n onChunk,\n}: {\n stream: ReadableStream<Uint8Array>;\n onChunk: (chunk: ChunkType) => Promise<void>;\n}) {\n return sharedProcessMastraStream({\n stream,\n onChunk,\n });\n}\n","import type { RequestOptions, ClientOptions } from '../types';\n\nexport class BaseResource {\n readonly options: ClientOptions;\n\n constructor(options: ClientOptions) {\n this.options = options;\n }\n\n /**\n * Makes an HTTP request to the API with retries and exponential backoff\n * @param path - The API endpoint path\n * @param options - Optional request configuration\n * @returns Promise containing the response data\n */\n public async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n let lastError: Error | null = null;\n const { baseUrl, retries = 3, backoffMs = 100, maxBackoffMs = 1000, headers = {}, credentials } = this.options;\n\n let delay = backoffMs;\n\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const response = await fetch(`${baseUrl.replace(/\\/$/, '')}${path}`, {\n ...options,\n headers: {\n ...(options.body &&\n !(options.body instanceof FormData) &&\n (options.method === 'POST' || options.method === 'PUT')\n ? { 'content-type': 'application/json' }\n : {}),\n ...headers,\n ...options.headers,\n // TODO: Bring this back once we figure out what we/users need to do to make this work with cross-origin requests\n // 'x-mastra-client-type': 'js',\n },\n signal: this.options.abortSignal,\n credentials: options.credentials ?? credentials,\n body:\n options.body instanceof FormData ? options.body : options.body ? JSON.stringify(options.body) : undefined,\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n let errorMessage = `HTTP error! status: ${response.status}`;\n try {\n const errorJson = JSON.parse(errorBody);\n errorMessage += ` - ${JSON.stringify(errorJson)}`;\n } catch {\n if (errorBody) {\n errorMessage += ` - ${errorBody}`;\n }\n }\n throw new Error(errorMessage);\n }\n\n if (options.stream) {\n return response as unknown as T;\n }\n\n const data = await response.json();\n return data as T;\n } catch (error) {\n lastError = error as Error;\n\n if (attempt === retries) {\n break;\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, maxBackoffMs);\n }\n }\n\n throw lastError || new Error('Request failed');\n }\n}\n","import type { ReadableStream } from 'stream/web';\nimport { parsePartialJson, processDataStream } from '@ai-sdk/ui-utils';\nimport type {\n JSONValue,\n ReasoningUIPart,\n TextUIPart,\n ToolInvocation,\n ToolInvocationUIPart,\n UIMessage,\n UseChatOptions,\n} from '@ai-sdk/ui-utils';\nimport { v4 as uuid } from '@lukeed/uuid';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport { getErrorFromUnknown } from '@mastra/core/error';\nimport type { GenerateReturn, CoreMessage } from '@mastra/core/llm';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { OutputSchema, MastraModelOutput } from '@mastra/core/stream';\nimport type { Tool } from '@mastra/core/tools';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { ZodType } from 'zod';\nimport type {\n GenerateLegacyParams,\n GetAgentResponse,\n GetEvalsByAgentIdResponse,\n GetToolResponse,\n ClientOptions,\n StreamParams,\n StreamLegacyParams,\n UpdateModelParams,\n UpdateModelInModelListParams,\n ReorderModelListParams,\n NetworkStreamParams,\n} from '../types';\n\nimport { parseClientRuntimeContext, runtimeContextQueryString } from '../utils';\nimport { processClientTools } from '../utils/process-client-tools';\nimport { processMastraNetworkStream, processMastraStream } from '../utils/process-mastra-stream';\nimport { zodToJsonSchema } from '../utils/zod-to-json-schema';\nimport { BaseResource } from './base';\n\nasync function executeToolCallAndRespond({\n response,\n params,\n runId,\n resourceId,\n threadId,\n runtimeContext,\n respondFn,\n}: {\n params: StreamParams<any>;\n response: Awaited<ReturnType<MastraModelOutput['getFullOutput']>>;\n runId?: string;\n resourceId?: string;\n threadId?: string;\n runtimeContext?: RuntimeContext<any>;\n respondFn: Agent['generate'];\n}) {\n if (response.finishReason === 'tool-calls') {\n const toolCalls = (\n response as unknown as {\n toolCalls: { toolName: string; args: any; toolCallId: string }[];\n messages: CoreMessage[];\n }\n ).toolCalls;\n\n if (!toolCalls || !Array.isArray(toolCalls)) {\n return response;\n }\n\n for (const toolCall of toolCalls) {\n const clientTool = params.clientTools?.[toolCall.toolName] as Tool;\n\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext,\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n // Build updated messages from the response, adding the tool result\n // Do NOT re-include the original user message to avoid storage duplicates\n const updatedMessages = [\n ...(response.response.messages || []),\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n result,\n },\n ],\n },\n ] as MessageListInput;\n\n // @ts-ignore\n return respondFn({\n ...params,\n messages: updatedMessages,\n });\n }\n }\n }\n}\n\nexport class AgentVoice extends BaseResource {\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n this.agentId = agentId;\n }\n\n /**\n * Convert text to speech using the agent's voice provider\n * @param text - Text to convert to speech\n * @param options - Optional provider-specific options for speech generation\n * @returns Promise containing the audio data\n */\n async speak(text: string, options?: { speaker?: string; [key: string]: any }): Promise<Response> {\n return this.request<Response>(`/api/agents/${this.agentId}/voice/speak`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: { input: text, options },\n stream: true,\n });\n }\n\n /**\n * Convert speech to text using the agent's voice provider\n * @param audio - Audio data to transcribe\n * @param options - Optional provider-specific options\n * @returns Promise containing the transcribed text\n */\n listen(audio: Blob, options?: Record<string, any>): Promise<{ text: string }> {\n const formData = new FormData();\n formData.append('audio', audio);\n\n if (options) {\n formData.append('options', JSON.stringify(options));\n }\n\n return this.request(`/api/agents/${this.agentId}/voice/listen`, {\n method: 'POST',\n body: formData,\n });\n }\n\n /**\n * Get available speakers for the agent's voice provider\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing list of available speakers\n */\n getSpeakers(\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<Array<{ voiceId: string; [key: string]: any }>> {\n return this.request(`/api/agents/${this.agentId}/voice/speakers${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Get the listener configuration for the agent's voice provider\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing a check if the agent has listening capabilities\n */\n getListener(runtimeContext?: RuntimeContext | Record<string, any>): Promise<{ enabled: boolean }> {\n return this.request(`/api/agents/${this.agentId}/voice/listener${runtimeContextQueryString(runtimeContext)}`);\n }\n}\n\nexport class Agent extends BaseResource {\n public readonly voice: AgentVoice;\n\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n this.voice = new AgentVoice(options, this.agentId);\n }\n\n /**\n * Retrieves details about the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing agent details including model and instructions\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetAgentResponse> {\n return this.request(`/api/agents/${this.agentId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Generates a response from the agent\n * @param params - Generation parameters including prompt\n * @returns Promise containing the generated response\n */\n async generateLegacy(\n params: GenerateLegacyParams<undefined> & { output?: never; experimental_output?: never },\n ): Promise<GenerateReturn<any, undefined, undefined>>;\n async generateLegacy<Output extends JSONSchema7 | ZodType>(\n params: GenerateLegacyParams<Output> & { output: Output; experimental_output?: never },\n ): Promise<GenerateReturn<any, Output, undefined>>;\n async generateLegacy<StructuredOutput extends JSONSchema7 | ZodType>(\n params: GenerateLegacyParams<StructuredOutput> & { output?: never; experimental_output: StructuredOutput },\n ): Promise<GenerateReturn<any, undefined, StructuredOutput>>;\n async generateLegacy<\n Output extends JSONSchema7 | ZodType | undefined = undefined,\n StructuredOutput extends JSONSchema7 | ZodType | undefined = undefined,\n >(params: GenerateLegacyParams<Output>): Promise<GenerateReturn<any, Output, StructuredOutput>> {\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n };\n\n const { runId, resourceId, threadId, runtimeContext } = processedParams as GenerateLegacyParams;\n\n const response: GenerateReturn<any, Output, StructuredOutput> = await this.request(\n `/api/agents/${this.agentId}/generate-legacy`,\n {\n method: 'POST',\n body: processedParams,\n },\n );\n\n if (response.finishReason === 'tool-calls') {\n const toolCalls = (\n response as unknown as {\n toolCalls: { toolName: string; args: any; toolCallId: string }[];\n messages: CoreMessage[];\n }\n ).toolCalls;\n\n if (!toolCalls || !Array.isArray(toolCalls)) {\n return response;\n }\n\n for (const toolCall of toolCalls) {\n const clientTool = params.clientTools?.[toolCall.toolName] as Tool;\n\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext,\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n // Build updated messages from the response, adding the tool result\n // Do NOT re-include the original user message to avoid storage duplicates\n const updatedMessages = [\n ...(response.response as unknown as { messages: CoreMessage[] }).messages,\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n result,\n },\n ],\n },\n ];\n // @ts-ignore\n return this.generate({\n ...params,\n messages: updatedMessages,\n });\n }\n }\n }\n\n return response;\n }\n\n async generate<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n // Backward compatibility overload\n async generate<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n async generate<OUTPUT extends OutputSchema = undefined>(\n messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>> {\n // Handle both new signature (messages, options) and old signature (single param object)\n let params: StreamParams<OUTPUT>;\n if (typeof messagesOrParams === 'object' && 'messages' in messagesOrParams) {\n // Old signature: single parameter object\n params = messagesOrParams;\n } else {\n // New signature: messages as first param, options as second\n params = {\n messages: messagesOrParams as MessageListInput,\n ...options,\n } as StreamParams<OUTPUT>;\n }\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n structuredOutput: params.structuredOutput\n ? {\n ...params.structuredOutput,\n schema: zodToJsonSchema(params.structuredOutput.schema),\n }\n : undefined,\n };\n\n const { runId, resourceId, threadId, runtimeContext } = processedParams as StreamParams;\n\n const response = await this.request<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>(\n `/api/agents/${this.agentId}/generate`,\n {\n method: 'POST',\n body: processedParams,\n },\n );\n\n if (response.finishReason === 'tool-calls') {\n return executeToolCallAndRespond({\n response,\n params,\n runId,\n resourceId,\n threadId,\n runtimeContext: runtimeContext as RuntimeContext<any>,\n respondFn: this.generate.bind(this),\n }) as unknown as Awaited<ReturnType<MastraModelOutput<OUTPUT>['getFullOutput']>>;\n }\n\n return response;\n }\n\n private async processChatResponse({\n stream,\n update,\n onToolCall,\n onFinish,\n getCurrentDate = () => new Date(),\n lastMessage,\n }: {\n stream: ReadableStream<Uint8Array>;\n update: (options: { message: UIMessage; data: JSONValue[] | undefined; replaceLastMessage: boolean }) => void;\n onToolCall?: UseChatOptions['onToolCall'];\n onFinish?: (options: { message: UIMessage | undefined; finishReason: string; usage: string }) => void;\n generateId?: () => string;\n getCurrentDate?: () => Date;\n lastMessage: UIMessage | undefined;\n }) {\n const replaceLastMessage = lastMessage?.role === 'assistant';\n let step = replaceLastMessage\n ? 1 +\n // find max step in existing tool invocations:\n (lastMessage.toolInvocations?.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0) ?? 0)\n : 0;\n\n const message: UIMessage = replaceLastMessage\n ? structuredClone(lastMessage)\n : {\n id: uuid(),\n createdAt: getCurrentDate(),\n role: 'assistant',\n content: '',\n parts: [],\n };\n\n let currentTextPart: TextUIPart | undefined = undefined;\n let currentReasoningPart: ReasoningUIPart | undefined = undefined;\n let currentReasoningTextDetail: { type: 'text'; text: string; signature?: string } | undefined = undefined;\n\n function updateToolInvocationPart(toolCallId: string, invocation: ToolInvocation) {\n const part = message.parts.find(\n part => part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\n }\n }\n\n const data: JSONValue[] = [];\n\n // keep list of current message annotations for message\n let messageAnnotations: JSONValue[] | undefined = replaceLastMessage ? lastMessage?.annotations : undefined;\n\n // keep track of partial tool calls\n const partialToolCalls: Record<string, { text: string; step: number; index: number; toolName: string }> = {};\n\n let usage: any = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN,\n };\n let finishReason: string = 'unknown';\n\n function execUpdate() {\n // make a copy of the data array to ensure UI is updated (SWR)\n const copiedData = [...data];\n\n // keeps the currentMessage up to date with the latest annotations,\n // even if annotations preceded the message creation\n if (messageAnnotations?.length) {\n message.annotations = messageAnnotations;\n }\n\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: uuid(),\n } as UIMessage;\n\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage,\n });\n }\n\n await processDataStream({\n stream: stream as ReadableStream<Uint8Array>,\n onTextPart(value) {\n if (currentTextPart == null) {\n currentTextPart = {\n type: 'text',\n text: value,\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += value;\n }\n\n message.content += value;\n execUpdate();\n },\n onReasoningPart(value) {\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: 'text', text: value };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += value;\n }\n\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: value,\n details: [currentReasoningTextDetail],\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += value;\n }\n\n message.reasoning = (message.reasoning ?? '') + value;\n\n execUpdate();\n },\n onReasoningSignaturePart(value) {\n if (currentReasoningTextDetail != null) {\n currentReasoningTextDetail.signature = value.signature;\n }\n },\n onRedactedReasoningPart(value) {\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: '',\n details: [],\n };\n message.parts.push(currentReasoningPart);\n }\n\n currentReasoningPart.details.push({\n type: 'redacted',\n data: value.data,\n });\n\n currentReasoningTextDetail = undefined;\n\n execUpdate();\n },\n onFilePart(value) {\n message.parts.push({\n type: 'file',\n mimeType: value.mimeType,\n data: value.data,\n });\n\n execUpdate();\n },\n onSourcePart(value) {\n message.parts.push({\n type: 'source',\n source: value,\n });\n\n execUpdate();\n },\n onToolCallStreamingStartPart(value) {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n // add the partial tool call to the map\n partialToolCalls[value.toolCallId] = {\n text: '',\n step,\n toolName: value.toolName,\n index: message.toolInvocations.length,\n };\n\n const invocation = {\n state: 'partial-call',\n step,\n toolCallId: value.toolCallId,\n toolName: value.toolName,\n args: undefined,\n } as const;\n\n message.toolInvocations.push(invocation);\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n },\n onToolCallDeltaPart(value) {\n const partialToolCall = partialToolCalls[value.toolCallId];\n\n partialToolCall!.text += value.argsTextDelta;\n\n const { value: partialArgs } = parsePartialJson(partialToolCall!.text);\n\n const invocation = {\n state: 'partial-call',\n step: partialToolCall!.step,\n toolCallId: value.toolCallId,\n toolName: partialToolCall!.toolName,\n args: partialArgs,\n } as const;\n\n message.toolInvocations![partialToolCall!.index] = invocation;\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n },\n async onToolCallPart(value) {\n const invocation = {\n state: 'call',\n step,\n ...value,\n } as const;\n\n if (partialToolCalls[value.toolCallId] != null) {\n // change the partial tool call to a full tool call\n message.toolInvocations![partialToolCalls[value.toolCallId]!.index] = invocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n message.toolInvocations.push(invocation);\n }\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n\n // invoke the onToolCall callback if it exists. This is blocking.\n // In the future we should make this non-blocking, which\n // requires additional state management for error handling etc.\n if (onToolCall) {\n const result = await onToolCall({ toolCall: value });\n if (result != null) {\n const invocation = {\n state: 'result',\n step,\n ...value,\n result,\n } as const;\n\n // store the result in the tool invocation\n message.toolInvocations![message.toolInvocations!.length - 1] = invocation;\n\n updateToolInvocationPart(value.toolCallId, invocation);\n\n execUpdate();\n }\n }\n },\n onToolResultPart(value) {\n const toolInvocations = message.toolInvocations;\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(invocation => invocation.toolCallId === value.toolCallId);\n\n if (toolInvocationIndex === -1) {\n throw new Error('tool_result must be preceded by a tool_call with the same toolCallId');\n }\n\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n ...value,\n } as const;\n\n toolInvocations[toolInvocationIndex] = invocation as ToolInvocation;\n\n updateToolInvocationPart(value.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n },\n onDataPart(value) {\n data.push(...value);\n execUpdate();\n },\n onMessageAnnotationsPart(value) {\n if (messageAnnotations == null) {\n messageAnnotations = [...value];\n } else {\n messageAnnotations.push(...value);\n }\n\n execUpdate();\n },\n onFinishStepPart(value) {\n step += 1;\n\n // reset the current text and reasoning parts\n currentTextPart = value.isContinued ? currentTextPart : undefined;\n currentReasoningPart = undefined;\n currentReasoningTextDetail = undefined;\n },\n onStartStepPart(value) {\n // keep message id stable when we are updating an existing message:\n if (!replaceLastMessage) {\n message.id = value.messageId;\n }\n\n // add a step boundary part to the message\n message.parts.push({ type: 'step-start' });\n execUpdate();\n },\n onFinishMessagePart(value) {\n finishReason = value.finishReason;\n if (value.usage != null) {\n // usage = calculateLanguageModelUsage(value.usage);\n usage = value.usage;\n }\n },\n onErrorPart(error) {\n throw new Error(error);\n },\n });\n\n onFinish?.({ message, finishReason, usage });\n }\n\n /**\n * Streams a response from the agent\n * @param params - Stream parameters including prompt\n * @returns Promise containing the enhanced Response object with processDataStream method\n */\n async streamLegacy<T extends JSONSchema7 | ZodType | undefined = undefined>(\n params: StreamLegacyParams<T>,\n ): Promise<\n Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n }\n > {\n const processedParams = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n };\n\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponseLegacy(processedParams, writable);\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async (options = {}) => {\n await processDataStream({\n stream: streamResponse.body as unknown as globalThis.ReadableStream<Uint8Array>,\n ...options,\n });\n };\n\n return streamResponse;\n }\n\n private async processChatResponse_vNext({\n stream,\n update,\n onToolCall,\n onFinish,\n getCurrentDate = () => new Date(),\n lastMessage,\n }: {\n stream: ReadableStream<Uint8Array>;\n update: (options: { message: UIMessage; data: JSONValue[] | undefined; replaceLastMessage: boolean }) => void;\n onToolCall?: UseChatOptions['onToolCall'];\n onFinish?: (options: { message: UIMessage | undefined; finishReason: string; usage: string }) => void;\n generateId?: () => string;\n getCurrentDate?: () => Date;\n lastMessage: UIMessage | undefined;\n }) {\n const replaceLastMessage = lastMessage?.role === 'assistant';\n let step = replaceLastMessage\n ? 1 +\n // find max step in existing tool invocations:\n (lastMessage.toolInvocations?.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0) ?? 0)\n : 0;\n\n const message: UIMessage = replaceLastMessage\n ? structuredClone(lastMessage)\n : {\n id: uuid(),\n createdAt: getCurrentDate(),\n role: 'assistant',\n content: '',\n parts: [],\n };\n\n let currentTextPart: TextUIPart | undefined = undefined;\n let currentReasoningPart: ReasoningUIPart | undefined = undefined;\n let currentReasoningTextDetail: { type: 'text'; text: string; signature?: string } | undefined = undefined;\n\n function updateToolInvocationPart(toolCallId: string, invocation: ToolInvocation) {\n const part = message.parts.find(\n part => part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\n }\n }\n\n const data: JSONValue[] = [];\n\n // keep list of current message annotations for message\n let messageAnnotations: JSONValue[] | undefined = replaceLastMessage ? lastMessage?.annotations : undefined;\n\n // keep track of partial tool calls\n const partialToolCalls: Record<string, { text: string; step: number; index: number; toolName: string }> = {};\n\n let usage: any = {\n completionTokens: NaN,\n promptTokens: NaN,\n totalTokens: NaN,\n };\n let finishReason: string = 'unknown';\n\n function execUpdate() {\n // make a copy of the data array to ensure UI is updated (SWR)\n const copiedData = [...data];\n\n // keeps the currentMessage up to date with the latest annotations,\n // even if annotations preceded the message creation\n if (messageAnnotations?.length) {\n message.annotations = messageAnnotations;\n }\n\n const copiedMessage = {\n // deep copy the message to ensure that deep changes (msg attachments) are updated\n // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.\n ...structuredClone(message),\n // add a revision id to ensure that the message is updated with SWR. SWR uses a\n // hashing approach by default to detect changes, but it only works for shallow\n // changes. This is why we need to add a revision id to ensure that the message\n // is updated with SWR (without it, the changes get stuck in SWR and are not\n // forwarded to rendering):\n revisionId: uuid(),\n } as UIMessage;\n\n update({\n message: copiedMessage,\n data: copiedData,\n replaceLastMessage,\n });\n }\n\n await processMastraStream({\n stream,\n // TODO: casting as any here because the stream types were all typed as any before in core.\n // but this is completely wrong and this fn is probably broken. Remove \":any\" and you'll see a bunch of type errors\n onChunk: async (chunk: any) => {\n switch (chunk.type) {\n case 'tripwire': {\n message.parts.push({\n type: 'text',\n text: chunk.payload.tripwireReason,\n });\n\n execUpdate();\n break;\n }\n\n case 'step-start': {\n // keep message id stable when we are updating an existing message:\n if (!replaceLastMessage) {\n message.id = chunk.payload.messageId;\n }\n\n // add a step boundary part to the message\n message.parts.push({ type: 'step-start' });\n execUpdate();\n break;\n }\n\n case 'text-delta': {\n if (currentTextPart == null) {\n currentTextPart = {\n type: 'text',\n text: chunk.payload.text,\n };\n message.parts.push(currentTextPart);\n } else {\n currentTextPart.text += chunk.payload.text;\n }\n\n message.content += chunk.payload.text;\n execUpdate();\n break;\n }\n\n case 'reasoning-delta': {\n if (currentReasoningTextDetail == null) {\n currentReasoningTextDetail = { type: 'text', text: chunk.payload.text };\n if (currentReasoningPart != null) {\n currentReasoningPart.details.push(currentReasoningTextDetail);\n }\n } else {\n currentReasoningTextDetail.text += chunk.payload.text;\n }\n\n if (currentReasoningPart == null) {\n currentReasoningPart = {\n type: 'reasoning',\n reasoning: chunk.payload.text,\n details: [currentReasoningTextDetail],\n };\n message.parts.push(currentReasoningPart);\n } else {\n currentReasoningPart.reasoning += chunk.payload.text;\n }\n\n message.reasoning = (message.reasoning ?? '') + chunk.payload.text;\n\n execUpdate();\n break;\n }\n case 'file': {\n message.parts.push({\n type: 'file',\n mimeType: chunk.payload.mimeType,\n data: chunk.payload.data,\n });\n\n execUpdate();\n break;\n }\n\n case 'source': {\n message.parts.push({\n type: 'source',\n source: chunk.payload.source,\n });\n execUpdate();\n break;\n }\n\n case 'tool-call': {\n const invocation = {\n state: 'call',\n step,\n ...chunk.payload,\n } as const;\n\n if (partialToolCalls[chunk.payload.toolCallId] != null) {\n // change the partial tool call to a full tool call\n message.toolInvocations![partialToolCalls[chunk.payload.toolCallId]!.index] =\n invocation as ToolInvocation;\n } else {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n message.toolInvocations.push(invocation as ToolInvocation);\n }\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n\n // invoke the onToolCall callback if it exists. This is blocking.\n // In the future we should make this non-blocking, which\n // requires additional state management for error handling etc.\n if (onToolCall) {\n const result = await onToolCall({ toolCall: chunk.payload as any });\n if (result != null) {\n const invocation = {\n state: 'result',\n step,\n ...chunk.payload,\n result,\n } as const;\n\n // store the result in the tool invocation\n message.toolInvocations![message.toolInvocations!.length - 1] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n }\n }\n }\n\n case 'tool-call-input-streaming-start': {\n if (message.toolInvocations == null) {\n message.toolInvocations = [];\n }\n\n // add the partial tool call to the map\n partialToolCalls[chunk.payload.toolCallId] = {\n text: '',\n step,\n toolName: chunk.payload.toolName,\n index: message.toolInvocations.length,\n };\n\n const invocation = {\n state: 'partial-call',\n step,\n toolCallId: chunk.payload.toolCallId,\n toolName: chunk.payload.toolName,\n args: chunk.payload.args,\n } as const;\n\n message.toolInvocations.push(invocation as ToolInvocation);\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation);\n\n execUpdate();\n break;\n }\n\n case 'tool-call-delta': {\n const partialToolCall = partialToolCalls[chunk.payload.toolCallId];\n\n partialToolCall!.text += chunk.payload.argsTextDelta;\n\n const { value: partialArgs } = parsePartialJson(partialToolCall!.text);\n\n const invocation = {\n state: 'partial-call',\n step: partialToolCall!.step,\n toolCallId: chunk.payload.toolCallId,\n toolName: partialToolCall!.toolName,\n args: partialArgs,\n } as const;\n\n message.toolInvocations![partialToolCall!.index] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation);\n\n execUpdate();\n break;\n }\n\n case 'tool-result': {\n const toolInvocations = message.toolInvocations;\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(\n invocation => invocation.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolInvocationIndex === -1) {\n throw new Error('tool_result must be preceded by a tool_call with the same toolCallId');\n }\n\n const invocation = {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n ...chunk.payload,\n } as const;\n\n toolInvocations[toolInvocationIndex] = invocation as ToolInvocation;\n\n updateToolInvocationPart(chunk.payload.toolCallId, invocation as ToolInvocation);\n\n execUpdate();\n break;\n }\n\n case 'error': {\n throw getErrorFromUnknown(chunk.payload.error, {\n fallbackMessage: 'Unknown error in stream',\n supportSerialization: false,\n });\n }\n\n case 'data': {\n data.push(...chunk.payload.data);\n execUpdate();\n break;\n }\n\n case 'step-finish': {\n step += 1;\n\n // reset the current text and reasoning parts\n currentTextPart = chunk.payload.stepResult.isContinued ? currentTextPart : undefined;\n currentReasoningPart = undefined;\n currentReasoningTextDetail = undefined;\n\n execUpdate();\n break;\n }\n\n case 'finish': {\n finishReason = chunk.payload.stepResult.reason;\n if (chunk.payload.usage != null) {\n // usage = calculateLanguageModelUsage(value.usage);\n usage = chunk.payload.usage;\n }\n break;\n }\n }\n },\n });\n\n onFinish?.({ message, finishReason, usage });\n }\n\n async processStreamResponse(processedParams: any, writable: any, route: string = 'stream') {\n const response: Response = await this.request(`/api/agents/${this.agentId}/${route}`, {\n method: 'POST',\n body: processedParams,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n try {\n let toolCalls: ToolInvocation[] = [];\n let messages: UIMessage[] = [];\n\n // Use tee() to split the stream into two branches\n const [streamForWritable, streamForProcessing] = response.body.tee();\n\n // Pipe one branch to the writable stream without holding a persistent lock\n\n streamForWritable\n .pipeTo(\n new WritableStream<Uint8Array>({\n async write(chunk) {\n let writer;\n\n // Filter out terminal markers so the client stream doesn't end before recursion\n try {\n writer = writable.getWriter();\n const text = new TextDecoder().decode(chunk);\n const lines = text.split('\\n\\n');\n const readableLines = lines.filter(line => line !== '[DONE]').join('\\n\\n');\n\n await writer.write(new TextEncoder().encode(readableLines));\n } catch {\n await writer?.write(chunk);\n } finally {\n writer?.releaseLock();\n }\n },\n }),\n {\n preventClose: true,\n },\n )\n .catch(error => {\n console.error('Error piping to writable stream:', error);\n });\n\n // Process the other branch for chat response handling\n this.processChatResponse_vNext({\n stream: streamForProcessing as unknown as ReadableStream<Uint8Array>,\n update: ({ message }) => {\n const existingIndex = messages.findIndex(m => m.id === message.id);\n\n if (existingIndex !== -1) {\n messages[existingIndex] = message;\n } else {\n messages.push(message);\n }\n },\n onFinish: async ({ finishReason, message }) => {\n if (finishReason === 'tool-calls') {\n const toolCall = [...(message?.parts ?? [])]\n .reverse()\n .find(part => part.type === 'tool-invocation')?.toolInvocation;\n if (toolCall) {\n toolCalls.push(toolCall);\n }\n\n let shouldExecuteClientTool = false;\n // Handle tool calls if needed\n for (const toolCall of toolCalls) {\n const clientTool = processedParams.clientTools?.[toolCall.toolName] as Tool;\n if (clientTool && clientTool.execute) {\n shouldExecuteClientTool = true;\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId: processedParams.runId,\n resourceId: processedParams.resourceId,\n threadId: processedParams.threadId,\n runtimeContext: processedParams.runtimeContext as RuntimeContext,\n // TODO: Pass proper tracing context when client-js supports tracing\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n const lastMessageRaw = messages[messages.length - 1];\n const lastMessage: UIMessage | undefined =\n lastMessageRaw != null ? JSON.parse(JSON.stringify(lastMessageRaw)) : undefined;\n\n const toolInvocationPart = lastMessage?.parts?.find(\n part => part.type === 'tool-invocation' && part.toolInvocation?.toolCallId === toolCall.toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (toolInvocationPart) {\n toolInvocationPart.toolInvocation = {\n ...toolInvocationPart.toolInvocation,\n state: 'result',\n result,\n };\n }\n\n const toolInvocation = lastMessage?.toolInvocations?.find(\n toolInvocation => toolInvocation.toolCallId === toolCall.toolCallId,\n ) as ToolInvocation | undefined;\n\n if (toolInvocation) {\n toolInvocation.state = 'result';\n // @ts-ignore\n toolInvocation.result = result;\n }\n\n // Build updated messages for the recursive call\n // Do NOT re-include the original messages to avoid storage duplicates\n const updatedMessages =\n lastMessage != null ? [...messages.filter(m => m.id !== lastMessage.id), lastMessage] : [...messages];\n\n // Recursively call stream with updated messages\n this.processStreamResponse(\n {\n ...processedParams,\n messages: updatedMessages,\n },\n writable,\n ).catch(error => {\n console.error('Error processing stream response:', error);\n });\n }\n }\n\n if (!shouldExecuteClientTool) {\n setTimeout(() => {\n writable.close();\n }, 0);\n }\n } else {\n setTimeout(() => {\n writable.close();\n }, 0);\n }\n },\n lastMessage: undefined,\n }).catch(error => {\n console.error('Error processing stream response:', error);\n });\n } catch (error) {\n console.error('Error processing stream response:', error);\n }\n\n return response;\n }\n\n async network(params: NetworkStreamParams): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n const response: Response = await this.request(`/api/agents/${this.agentId}/network`, {\n method: 'POST',\n body: params,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n const streamResponse = new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraNetworkStream>[0]['onChunk'];\n }) => {\n await processMastraNetworkStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n async stream<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n // Backward compatibility overload\n async stream<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n async stream<OUTPUT extends OutputSchema = undefined>(\n messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n // Handle both new signature (messages, options) and old signature (single param object)\n let params: StreamParams<OUTPUT>;\n if (typeof messagesOrParams === 'object' && 'messages' in messagesOrParams) {\n // Old signature: single parameter object\n params = messagesOrParams;\n } else {\n // New signature: messages as first param, options as second\n params = {\n messages: messagesOrParams as MessageListInput,\n ...options,\n } as StreamParams<OUTPUT>;\n }\n const processedParams: StreamParams<OUTPUT> = {\n ...params,\n output: params.output ? zodToJsonSchema(params.output) : undefined,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n clientTools: processClientTools(params.clientTools),\n structuredOutput: params.structuredOutput\n ? {\n ...params.structuredOutput,\n schema: zodToJsonSchema(params.structuredOutput.schema) as OUTPUT,\n }\n : undefined,\n };\n\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponse(processedParams, writable);\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => {\n await processMastraStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n\n async approveToolCall(params: { runId: string; toolCallId: string }): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponse(params, writable, 'approve-tool-call');\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => {\n await processMastraStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n\n async declineToolCall(params: { runId: string; toolCallId: string }): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n // Create a readable stream that will handle the response processing\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Start processing the response in the background\n const response = await this.processStreamResponse(params, writable, 'decline-tool-call');\n\n // Create a new response with the readable stream\n const streamResponse = new Response(readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }) as Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n };\n\n // Add the processDataStream method to the response\n streamResponse.processDataStream = async ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => {\n await processMastraStream({\n stream: streamResponse.body as ReadableStream<Uint8Array>,\n onChunk,\n });\n };\n\n return streamResponse;\n }\n\n /**\n * Processes the stream response and handles tool calls\n */\n private async processStreamResponseLegacy(processedParams: any, writable: WritableStream<Uint8Array>) {\n const response: Response & {\n processDataStream: (options?: Omit<Parameters<typeof processDataStream>[0], 'stream'>) => Promise<void>;\n } = await this.request(`/api/agents/${this.agentId}/stream-legacy`, {\n method: 'POST',\n body: processedParams,\n stream: true,\n });\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n try {\n let toolCalls: ToolInvocation[] = [];\n let messages: UIMessage[] = [];\n\n // Use tee() to split the stream into two branches\n const [streamForWritable, streamForProcessing] = response.body.tee();\n\n // Pipe one branch to the writable stream\n streamForWritable\n .pipeTo(writable, {\n preventClose: true,\n })\n .catch(error => {\n console.error('Error piping to writable stream:', error);\n });\n\n // Process the other branch for chat response handling\n this.processChatResponse({\n stream: streamForProcessing as unknown as ReadableStream<Uint8Array>,\n update: ({ message }) => {\n const existingIndex = messages.findIndex(m => m.id === message.id);\n\n if (existingIndex !== -1) {\n messages[existingIndex] = message;\n } else {\n messages.push(message);\n }\n },\n onFinish: async ({ finishReason, message }) => {\n if (finishReason === 'tool-calls') {\n const toolCall = [...(message?.parts ?? [])]\n .reverse()\n .find(part => part.type === 'tool-invocation')?.toolInvocation;\n if (toolCall) {\n toolCalls.push(toolCall);\n }\n\n // Handle tool calls if needed\n for (const toolCall of toolCalls) {\n const clientTool = processedParams.clientTools?.[toolCall.toolName] as Tool;\n if (clientTool && clientTool.execute) {\n const result = await clientTool.execute(\n {\n context: toolCall?.args,\n runId: processedParams.runId,\n resourceId: processedParams.resourceId,\n threadId: processedParams.threadId,\n runtimeContext: processedParams.runtimeContext as RuntimeContext,\n // TODO: Pass proper tracing context when client-js supports tracing\n tracingContext: { currentSpan: undefined },\n suspend: async () => {},\n },\n {\n messages: (response as unknown as { messages: CoreMessage[] }).messages,\n toolCallId: toolCall?.toolCallId,\n },\n );\n\n const lastMessage: UIMessage = JSON.parse(JSON.stringify(messages[messages.length - 1]));\n\n const toolInvocationPart = lastMessage?.parts?.find(\n part => part.type === 'tool-invocation' && part.toolInvocation?.toolCallId === toolCall.toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (toolInvocationPart) {\n toolInvocationPart.toolInvocation = {\n ...toolInvocationPart.toolInvocation,\n state: 'result',\n result,\n };\n }\n\n const toolInvocation = lastMessage?.toolInvocations?.find(\n toolInvocation => toolInvocation.toolCallId === toolCall.toolCallId,\n ) as ToolInvocation | undefined;\n\n if (toolInvocation) {\n toolInvocation.state = 'result';\n // @ts-ignore\n toolInvocation.result = result;\n }\n\n // write the tool result part to the stream\n const writer = writable.getWriter();\n\n try {\n await writer.write(\n new TextEncoder().encode(\n 'a:' +\n JSON.stringify({\n toolCallId: toolCall.toolCallId,\n result,\n }) +\n '\\n',\n ),\n );\n } finally {\n writer.releaseLock();\n }\n\n // Recursively call stream with updated messages\n this.processStreamResponseLegacy(\n {\n ...processedParams,\n messages: [...messages.filter(m => m.id !== lastMessage.id), lastMessage],\n },\n writable,\n ).catch(error => {\n console.error('Error processing stream response:', error);\n });\n }\n }\n } else {\n setTimeout(() => {\n // We can't close the stream in this function, we have to wait until it's done\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writable.close();\n }, 0);\n }\n },\n lastMessage: undefined,\n }).catch(error => {\n console.error('Error processing stream response:', error);\n });\n } catch (error) {\n console.error('Error processing stream response:', error);\n }\n return response;\n }\n\n /**\n * Gets details about a specific tool available to the agent\n * @param toolId - ID of the tool to retrieve\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing tool details\n */\n getTool(toolId: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetToolResponse> {\n return this.request(`/api/agents/${this.agentId}/tools/${toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes a tool for the agent\n * @param toolId - ID of the tool to execute\n * @param params - Parameters required for tool execution\n * @returns Promise containing the tool execution results\n */\n executeTool(\n toolId: string,\n params: { data: any; runtimeContext?: RuntimeContext | Record<string, any> },\n ): Promise<any> {\n const body = {\n data: params.data,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n };\n return this.request(`/api/agents/${this.agentId}/tools/${toolId}/execute`, {\n method: 'POST',\n body,\n });\n }\n\n /**\n * Retrieves evaluation results for the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing agent evaluations\n */\n evals(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetEvalsByAgentIdResponse> {\n return this.request(`/api/agents/${this.agentId}/evals/ci${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves live evaluation results for the agent\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing live agent evaluations\n */\n liveEvals(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetEvalsByAgentIdResponse> {\n return this.request(`/api/agents/${this.agentId}/evals/live${runtimeContextQueryString(runtimeContext)}`);\n }\n /**\n * Updates the model for the agent\n * @param params - Parameters for updating the model\n * @returns Promise containing the updated model\n */\n updateModel(params: UpdateModelParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/model`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Updates the model for the agent in the model list\n * @param params - Parameters for updating the model\n * @returns Promise containing the updated model\n */\n updateModelInModelList({ modelConfigId, ...params }: UpdateModelInModelListParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/models/${modelConfigId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Reorders the models for the agent\n * @param params - Parameters for reordering the model list\n * @returns Promise containing the updated model list\n */\n reorderModelList(params: ReorderModelListParams): Promise<{ message: string }> {\n return this.request(`/api/agents/${this.agentId}/models/reorder`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * @deprecated generateVNext has been renamed to generate. Please use generate instead.\n */\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>>;\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>>;\n async generateVNext<OUTPUT extends OutputSchema = undefined>(\n _messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n _options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<ReturnType<MastraModelOutput['getFullOutput']>> {\n throw new Error('generateVNext has been renamed to generate. Please use generate instead.');\n }\n\n /**\n * @deprecated streamVNext has been renamed to stream. Please use stream instead.\n */\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n messages: MessageListInput,\n options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n // Backward compatibility overload\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n params: StreamParams<OUTPUT>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n >;\n async streamVNext<OUTPUT extends OutputSchema = undefined>(\n _messagesOrParams: MessageListInput | StreamParams<OUTPUT>,\n _options?: Omit<StreamParams<OUTPUT>, 'messages'>,\n ): Promise<\n Response & {\n processDataStream: ({\n onChunk,\n }: {\n onChunk: Parameters<typeof processMastraStream>[0]['onChunk'];\n }) => Promise<void>;\n }\n > {\n throw new Error('streamVNext has been renamed to stream. Please use stream instead.');\n }\n}\n","import type { StorageThreadType } from '@mastra/core/memory';\n\nimport type {\n GetMemoryThreadMessagesResponse,\n ClientOptions,\n UpdateMemoryThreadParams,\n GetMemoryThreadMessagesParams,\n GetMemoryThreadMessagesPaginatedParams,\n GetMemoryThreadMessagesPaginatedResponse,\n} from '../types';\n\nimport { BaseResource } from './base';\n\nexport class MemoryThread extends BaseResource {\n constructor(\n options: ClientOptions,\n private threadId: string,\n private agentId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves the memory thread details\n * @returns Promise containing thread details including title and metadata\n */\n get(): Promise<StorageThreadType> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`);\n }\n\n /**\n * Updates the memory thread properties\n * @param params - Update parameters including title and metadata\n * @returns Promise containing updated thread details\n */\n update(params: UpdateMemoryThreadParams): Promise<StorageThreadType> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`, {\n method: 'PATCH',\n body: params,\n });\n }\n\n /**\n * Deletes the memory thread\n * @returns Promise containing deletion result\n */\n delete(): Promise<{ result: string }> {\n return this.request(`/api/memory/threads/${this.threadId}?agentId=${this.agentId}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves messages associated with the thread\n * @param params - Optional parameters including limit for number of messages to retrieve\n * @returns Promise containing thread messages and UI messages\n */\n getMessages(params?: GetMemoryThreadMessagesParams): Promise<GetMemoryThreadMessagesResponse> {\n const query = new URLSearchParams({\n agentId: this.agentId,\n ...(params?.limit ? { limit: params.limit.toString() } : {}),\n });\n return this.request(`/api/memory/threads/${this.threadId}/messages?${query.toString()}`);\n }\n\n /**\n * Retrieves paginated messages associated with the thread with advanced filtering and selection options\n * @param params - Pagination parameters including selectBy criteria, page, perPage, date ranges, and message inclusion options\n * @returns Promise containing paginated thread messages with pagination metadata (total, page, perPage, hasMore)\n */\n getMessagesPaginated({\n selectBy,\n ...rest\n }: GetMemoryThreadMessagesPaginatedParams): Promise<GetMemoryThreadMessagesPaginatedResponse> {\n const query = new URLSearchParams({\n ...rest,\n ...(selectBy ? { selectBy: JSON.stringify(selectBy) } : {}),\n });\n return this.request(`/api/memory/threads/${this.threadId}/messages/paginated?${query.toString()}`);\n }\n\n /**\n * Deletes one or more messages from the thread\n * @param messageIds - Can be a single message ID (string), array of message IDs,\n * message object with id property, or array of message objects\n * @returns Promise containing deletion result\n */\n deleteMessages(\n messageIds: string | string[] | { id: string } | { id: string }[],\n ): Promise<{ success: boolean; message: string }> {\n const query = new URLSearchParams({\n agentId: this.agentId,\n });\n return this.request(`/api/memory/messages/delete?${query.toString()}`, {\n method: 'POST',\n body: { messageIds },\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type {\n CreateIndexParams,\n GetVectorIndexResponse,\n QueryVectorParams,\n QueryVectorResponse,\n ClientOptions,\n UpsertVectorParams,\n} from '../types';\nimport { runtimeContextQueryString } from '../utils';\n\nimport { BaseResource } from './base';\n\nexport class Vector extends BaseResource {\n constructor(\n options: ClientOptions,\n private vectorName: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves details about a specific vector index\n * @param indexName - Name of the index to get details for\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing vector index details\n */\n details(indexName: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetVectorIndexResponse> {\n return this.request(\n `/api/vector/${this.vectorName}/indexes/${indexName}${runtimeContextQueryString(runtimeContext)}`,\n );\n }\n\n /**\n * Deletes a vector index\n * @param indexName - Name of the index to delete\n * @returns Promise indicating deletion success\n */\n delete(indexName: string): Promise<{ success: boolean }> {\n return this.request(`/api/vector/${this.vectorName}/indexes/${indexName}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves a list of all available indexes\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing array of index names\n */\n getIndexes(runtimeContext?: RuntimeContext | Record<string, any>): Promise<{ indexes: string[] }> {\n return this.request(`/api/vector/${this.vectorName}/indexes${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Creates a new vector index\n * @param params - Parameters for index creation including dimension and metric\n * @returns Promise indicating creation success\n */\n createIndex(params: CreateIndexParams): Promise<{ success: boolean }> {\n return this.request(`/api/vector/${this.vectorName}/create-index`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Upserts vectors into an index\n * @param params - Parameters containing vectors, metadata, and optional IDs\n * @returns Promise containing array of vector IDs\n */\n upsert(params: UpsertVectorParams): Promise<string[]> {\n return this.request(`/api/vector/${this.vectorName}/upsert`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Queries vectors in an index\n * @param params - Query parameters including query vector and search options\n * @returns Promise containing query results\n */\n query(params: QueryVectorParams): Promise<QueryVectorResponse> {\n return this.request(`/api/vector/${this.vectorName}/query`, {\n method: 'POST',\n body: params,\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { GetToolResponse, ClientOptions } from '../types';\n\nimport { parseClientRuntimeContext, runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\nexport class Tool extends BaseResource {\n constructor(\n options: ClientOptions,\n private toolId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves details about the tool\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing tool details including description and schemas\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetToolResponse> {\n return this.request(`/api/tools/${this.toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes the tool with the provided parameters\n * @param params - Parameters required for tool execution\n * @returns Promise containing the tool execution results\n */\n execute(params: { data: any; runId?: string; runtimeContext?: RuntimeContext | Record<string, any> }): Promise<any> {\n const url = new URLSearchParams();\n\n if (params.runId) {\n url.set('runId', params.runId);\n }\n\n const body = {\n data: params.data,\n runtimeContext: parseClientRuntimeContext(params.runtimeContext),\n };\n\n return this.request(`/api/tools/${this.toolId}/execute?${url.toString()}`, {\n method: 'POST',\n body,\n });\n }\n}\n","import type { TracingOptions } from '@mastra/core/ai-tracing';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type {\n ClientOptions,\n GetWorkflowResponse,\n GetWorkflowRunsResponse,\n GetWorkflowRunsParams,\n WorkflowRunResult,\n WorkflowWatchResult,\n GetWorkflowRunByIdResponse,\n GetWorkflowRunExecutionResultResponse,\n StreamVNextChunkType,\n} from '../types';\n\nimport { parseClientRuntimeContext, base64RuntimeContext, runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\nconst RECORD_SEPARATOR = '\\x1E';\n\nexport class Workflow extends BaseResource {\n constructor(\n options: ClientOptions,\n private workflowId: string,\n ) {\n super(options);\n }\n\n /**\n * Creates an async generator that processes a readable stream and yields workflow records\n * separated by the Record Separator character (\\x1E)\n *\n * @param stream - The readable stream to process\n * @returns An async generator that yields parsed records\n */\n private async *streamProcessor(stream: ReadableStream): AsyncGenerator<WorkflowWatchResult, void, unknown> {\n const reader = stream.getReader();\n\n // Track if we've finished reading from the stream\n let doneReading = false;\n // Buffer to accumulate partial chunks\n let buffer = '';\n\n try {\n while (!doneReading) {\n // Read the next chunk from the stream\n const { done, value } = await reader.read();\n doneReading = done;\n\n // Skip processing if we're done and there's no value\n if (done && !value) continue;\n\n try {\n // Decode binary data to text\n const decoded = value ? new TextDecoder().decode(value) : '';\n\n // Split the combined buffer and new data by record separator\n const chunks = (buffer + decoded).split(RECORD_SEPARATOR);\n\n // The last chunk might be incomplete, so save it for the next iteration\n buffer = chunks.pop() || '';\n\n // Process complete chunks\n for (const chunk of chunks) {\n if (chunk) {\n // Only process non-empty chunks\n if (typeof chunk === 'string') {\n try {\n const parsedChunk = JSON.parse(chunk);\n yield parsedChunk;\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n }\n }\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n\n // Process any remaining data in the buffer after stream is done\n if (buffer) {\n try {\n yield JSON.parse(buffer);\n } catch {\n // Ignore parsing error for final chunk\n }\n }\n } finally {\n // Always ensure we clean up the reader\n reader.cancel().catch(() => {\n // Ignore cancel errors\n });\n }\n }\n\n /**\n * Retrieves details about the workflow\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing workflow details including steps and graphs\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetWorkflowResponse> {\n return this.request(`/api/workflows/${this.workflowId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves all runs for a workflow\n * @param params - Parameters for filtering runs\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing workflow runs array\n */\n runs(\n params?: GetWorkflowRunsParams,\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<GetWorkflowRunsResponse> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n if (params?.fromDate) {\n searchParams.set('fromDate', params.fromDate.toISOString());\n }\n if (params?.toDate) {\n searchParams.set('toDate', params.toDate.toISOString());\n }\n if (params?.limit !== null && params?.limit !== undefined && !isNaN(Number(params?.limit))) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== null && params?.offset !== undefined && !isNaN(Number(params?.offset))) {\n searchParams.set('offset', String(params.offset));\n }\n if (params?.resourceId) {\n searchParams.set('resourceId', params.resourceId);\n }\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n if (searchParams.size) {\n return this.request(`/api/workflows/${this.workflowId}/runs?${searchParams}`);\n } else {\n return this.request(`/api/workflows/${this.workflowId}/runs`);\n }\n }\n\n /**\n * Retrieves a specific workflow run by its ID\n * @param runId - The ID of the workflow run to retrieve\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the workflow run details\n */\n runById(runId: string, runtimeContext?: RuntimeContext | Record<string, any>): Promise<GetWorkflowRunByIdResponse> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${runId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Retrieves the execution result for a specific workflow run by its ID\n * @param runId - The ID of the workflow run to retrieve the execution result for\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the workflow run execution result\n */\n runExecutionResult(\n runId: string,\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<GetWorkflowRunExecutionResultResponse> {\n return this.request(\n `/api/workflows/${this.workflowId}/runs/${runId}/execution-result${runtimeContextQueryString(runtimeContext)}`,\n );\n }\n\n /**\n * Cancels a specific workflow run by its ID\n * @param runId - The ID of the workflow run to cancel\n * @returns Promise containing a success message\n */\n cancelRun(runId: string): Promise<{ message: string }> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${runId}/cancel`, {\n method: 'POST',\n });\n }\n\n /**\n * Sends an event to a specific workflow run by its ID\n * @param params - Object containing the runId, event and data\n * @returns Promise containing a success message\n */\n sendRunEvent(params: { runId: string; event: string; data: unknown }): Promise<{ message: string }> {\n return this.request(`/api/workflows/${this.workflowId}/runs/${params.runId}/send-event`, {\n method: 'POST',\n body: { event: params.event, data: params.data },\n });\n }\n\n /**\n * @deprecated Use createRunAsync() instead.\n * @throws {Error} Always throws an error directing users to use createRunAsync()\n */\n async createRun(_params?: { runId?: string }): Promise<{\n runId: string;\n start: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<{ message: string }>;\n watch: (onRecord: (record: WorkflowWatchResult) => void) => Promise<void>;\n resume: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<{ message: string }>;\n stream: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n startAsync: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<WorkflowRunResult>;\n resumeAsync: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<WorkflowRunResult>;\n }> {\n throw new Error(\n 'createRun() has been deprecated. ' +\n 'Please use createRunAsync() instead.\\n\\n' +\n 'Migration guide:\\n' +\n ' Before: const run = workflow.createRun();\\n' +\n ' After: const run = await workflow.createRunAsync();\\n\\n' +\n 'Note: createRunAsync() is an async method, so make sure your calling function is async.',\n );\n }\n\n /**\n * Creates a new workflow run\n * @param params - Optional object containing the optional runId\n * @returns Promise containing the runId of the created run with methods to control execution\n */\n async createRunAsync(params?: { runId?: string }): Promise<{\n runId: string;\n start: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<{ message: string }>;\n watch: (onRecord: (record: WorkflowWatchResult) => void) => Promise<void>;\n resume: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<{ message: string }>;\n stream: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n startAsync: (params: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<WorkflowRunResult>;\n resumeAsync: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => Promise<WorkflowRunResult>;\n resumeStreamVNext: (params: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => Promise<ReadableStream>;\n }> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const res = await this.request<{ runId: string }>(\n `/api/workflows/${this.workflowId}/create-run?${searchParams.toString()}`,\n {\n method: 'POST',\n },\n );\n\n const runId = res.runId;\n\n return {\n runId,\n start: async (p: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.start({\n runId,\n inputData: p.inputData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n startAsync: async (p: {\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.startAsync({\n runId,\n inputData: p.inputData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n watch: async (onRecord: (record: WorkflowWatchResult) => void) => {\n return this.watch({ runId }, onRecord);\n },\n stream: async (p: { inputData: Record<string, any>; runtimeContext?: RuntimeContext | Record<string, any> }) => {\n return this.stream({ runId, inputData: p.inputData, runtimeContext: p.runtimeContext });\n },\n resume: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.resume({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n resumeAsync: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) => {\n return this.resumeAsync({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n tracingOptions: p.tracingOptions,\n });\n },\n resumeStreamVNext: async (p: {\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n }) => {\n return this.resumeStreamVNext({\n runId,\n step: p.step,\n resumeData: p.resumeData,\n runtimeContext: p.runtimeContext,\n });\n },\n };\n }\n\n /**\n * Starts a workflow run synchronously without waiting for the workflow to complete\n * @param params - Object containing the runId, inputData and runtimeContext\n * @returns Promise containing success message\n */\n start(params: {\n runId: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<{ message: string }> {\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/start?runId=${params.runId}`, {\n method: 'POST',\n body: { inputData: params?.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n });\n }\n\n /**\n * Resumes a suspended workflow step synchronously without waiting for the workflow to complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing success message\n */\n resume({\n step,\n runId,\n resumeData,\n tracingOptions,\n ...rest\n }: {\n step: string | string[];\n runId: string;\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<{ message: string }> {\n const runtimeContext = parseClientRuntimeContext(rest.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/resume?runId=${runId}`, {\n method: 'POST',\n body: {\n step,\n resumeData,\n runtimeContext,\n tracingOptions,\n },\n });\n }\n\n /**\n * Starts a workflow run asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n startAsync(params: {\n runId?: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<WorkflowRunResult> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n\n return this.request(`/api/workflows/${this.workflowId}/start-async?${searchParams.toString()}`, {\n method: 'POST',\n body: { inputData: params.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n });\n }\n\n /**\n * Starts a workflow run and returns a stream\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n async stream(params: {\n runId?: string;\n inputData: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }) {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/stream?${searchParams.toString()}`,\n {\n method: 'POST',\n body: { inputData: params.inputData, runtimeContext, tracingOptions: params.tracingOptions },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Observes workflow stream for a workflow run\n * @param params - Object containing the runId\n * @returns Promise containing the workflow execution results\n */\n async observeStream(params: { runId: string }) {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/observe-stream?${searchParams.toString()}`,\n {\n method: 'POST',\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to observe workflow stream: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Starts a workflow run and returns a stream\n * @param params - Object containing the optional runId, inputData and runtimeContext\n * @returns Promise containing the workflow execution results\n */\n async streamVNext(params: {\n runId?: string;\n inputData?: Record<string, any>;\n runtimeContext?: RuntimeContext;\n closeOnSuspend?: boolean;\n tracingOptions?: TracingOptions;\n }) {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/streamVNext?${searchParams.toString()}`,\n {\n method: 'POST',\n body: {\n inputData: params.inputData,\n runtimeContext,\n closeOnSuspend: params.closeOnSuspend,\n tracingOptions: params.tracingOptions,\n },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Observes workflow vNext stream for a workflow run\n * @param params - Object containing the runId\n * @returns Promise containing the workflow execution results\n */\n async observeStreamVNext(params: { runId: string }) {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/observe-streamVNext?${searchParams.toString()}`,\n {\n method: 'POST',\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to observe stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Resumes a suspended workflow step asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing the workflow resume results\n */\n resumeAsync(params: {\n runId: string;\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<WorkflowRunResult> {\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n return this.request(`/api/workflows/${this.workflowId}/resume-async?runId=${params.runId}`, {\n method: 'POST',\n body: {\n step: params.step,\n resumeData: params.resumeData,\n runtimeContext,\n tracingOptions: params.tracingOptions,\n },\n });\n }\n\n /**\n * Resumes a suspended workflow step that uses streamVNext asynchronously and returns a promise that resolves when the workflow is complete\n * @param params - Object containing the runId, step, resumeData and runtimeContext\n * @returns Promise containing the workflow resume results\n */\n async resumeStreamVNext(params: {\n runId: string;\n step: string | string[];\n resumeData?: Record<string, any>;\n runtimeContext?: RuntimeContext | Record<string, any>;\n tracingOptions?: TracingOptions;\n }): Promise<ReadableStream> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', params.runId);\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const response: Response = await this.request(\n `/api/workflows/${this.workflowId}/resume-stream?${searchParams.toString()}`,\n {\n method: 'POST',\n body: {\n step: params.step,\n resumeData: params.resumeData,\n runtimeContext,\n tracingOptions: params.tracingOptions,\n },\n stream: true,\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to stream vNext workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n //using undefined instead of empty string to avoid parsing errors\n let failedChunk: string | undefined = undefined;\n\n // Create a transform stream that processes the response body\n const transformStream = new TransformStream<ArrayBuffer, StreamVNextChunkType>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n /**\n * Watches workflow transitions in real-time\n * @param runId - Optional run ID to filter the watch stream\n * @returns AsyncGenerator that yields parsed records from the workflow watch stream\n */\n async watch({ runId }: { runId?: string }, onRecord: (record: WorkflowWatchResult) => void) {\n const response: Response = await this.request(`/api/workflows/${this.workflowId}/watch?runId=${runId}`, {\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to watch workflow: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n for await (const record of this.streamProcessor(response.body)) {\n if (typeof record === 'string') {\n onRecord(JSON.parse(record));\n } else {\n onRecord(record);\n }\n }\n }\n\n /**\n * Creates a new ReadableStream from an iterable or async iterable of objects,\n * serializing each as JSON and separating them with the record separator (\\x1E).\n *\n * @param records - An iterable or async iterable of objects to stream\n * @returns A ReadableStream emitting the records as JSON strings separated by the record separator\n */\n static createRecordStream(records: Iterable<any> | AsyncIterable<any>): ReadableStream {\n const encoder = new TextEncoder();\n return new ReadableStream({\n async start(controller) {\n try {\n for await (const record of records as AsyncIterable<any>) {\n const json = JSON.stringify(record) + RECORD_SEPARATOR;\n controller.enqueue(encoder.encode(json));\n }\n controller.close();\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n}\n","import type {\n AgentCard,\n GetTaskResponse,\n MessageSendParams,\n SendMessageResponse,\n SendStreamingMessageResponse,\n Task,\n TaskQueryParams,\n} from '@mastra/core/a2a';\nimport type { ClientOptions } from '../types';\nimport { BaseResource } from './base';\n\n/**\n * Class for interacting with an agent via the A2A protocol\n */\nexport class A2A extends BaseResource {\n constructor(\n options: ClientOptions,\n private agentId: string,\n ) {\n super(options);\n }\n\n /**\n * Get the agent card with metadata about the agent\n * @returns Promise containing the agent card information\n */\n async getCard(): Promise<AgentCard> {\n return this.request(`/.well-known/${this.agentId}/agent-card.json`);\n }\n\n /**\n * Send a message to the agent and gets a message or task response\n * @param params - Parameters for the task\n * @returns Promise containing the response\n */\n async sendMessage(params: MessageSendParams): Promise<SendMessageResponse> {\n const response = await this.request<SendMessageResponse>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'message/send',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Sends a message to an agent to initiate/continue a task and subscribes\n * the client to real-time updates for that task via Server-Sent Events (SSE).\n * @param params - Parameters for the task\n * @returns A stream of Server-Sent Events. Each SSE `data` field contains a `SendStreamingMessageResponse`\n */\n async sendStreamingMessage(params: MessageSendParams): Promise<AsyncIterable<SendStreamingMessageResponse>> {\n const response = await this.request<AsyncIterable<SendStreamingMessageResponse>>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'message/stream',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Get the status and result of a task\n * @param params - Parameters for querying the task\n * @returns Promise containing the task response\n */\n async getTask(params: TaskQueryParams): Promise<GetTaskResponse> {\n const response = await this.request<GetTaskResponse>(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'tasks/get',\n params,\n },\n });\n\n return response;\n }\n\n /**\n * Cancel a running task\n * @param params - Parameters identifying the task to cancel\n * @returns Promise containing the task response\n */\n async cancelTask(params: TaskQueryParams): Promise<Task> {\n return this.request(`/a2a/${this.agentId}`, {\n method: 'POST',\n body: {\n method: 'tasks/cancel',\n params,\n },\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { ClientOptions, McpToolInfo } from '../types';\nimport { runtimeContextQueryString } from '../utils';\nimport { BaseResource } from './base';\n\n/**\n * Represents a specific tool available on a specific MCP server.\n * Provides methods to get details and execute the tool.\n */\nexport class MCPTool extends BaseResource {\n private serverId: string;\n private toolId: string;\n\n constructor(options: ClientOptions, serverId: string, toolId: string) {\n super(options);\n this.serverId = serverId;\n this.toolId = toolId;\n }\n\n /**\n * Retrieves details about this specific tool from the MCP server.\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing the tool's information (name, description, schema).\n */\n details(runtimeContext?: RuntimeContext | Record<string, any>): Promise<McpToolInfo> {\n return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}${runtimeContextQueryString(runtimeContext)}`);\n }\n\n /**\n * Executes this specific tool on the MCP server.\n * @param params - Parameters for tool execution, including data/args and optional runtimeContext.\n * @returns Promise containing the result of the tool execution.\n */\n execute(params: { data?: any; runtimeContext?: RuntimeContext }): Promise<any> {\n const body: any = {};\n if (params.data !== undefined) body.data = params.data;\n // If none of data, args the body might be empty or just contain runtimeContext.\n // The handler will look for these, so an empty args object might be appropriate if that's the intent.\n // else body.data = {}; // Or let it be empty if no specific input fields are used\n\n if (params.runtimeContext !== undefined) {\n body.runtimeContext = params.runtimeContext;\n }\n\n return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}/execute`, {\n method: 'POST',\n body: Object.keys(body).length > 0 ? body : undefined,\n });\n }\n}\n","import type { RuntimeContext } from '@mastra/core/runtime-context';\nimport type { WorkflowInfo } from '@mastra/core/workflows';\nimport type { ClientOptions } from '../types';\nimport { parseClientRuntimeContext } from '../utils';\nimport { BaseResource } from './base';\n\nconst RECORD_SEPARATOR = '\\x1E';\n\nexport interface AgentBuilderActionRequest {\n /** Input data specific to the workflow type */\n inputData: any;\n /** Runtime context for the action execution */\n runtimeContext?: RuntimeContext;\n}\n\nexport interface AgentBuilderActionResult {\n success: boolean;\n applied: boolean;\n branchName?: string;\n message: string;\n validationResults?: any;\n error?: string;\n errors?: string[];\n stepResults?: any;\n}\n\n/**\n * Agent Builder resource: operations related to agent-builder workflows via server endpoints.\n */\nexport class AgentBuilder extends BaseResource {\n constructor(\n options: ClientOptions,\n private actionId: string,\n ) {\n super(options);\n }\n\n // Helper function to transform workflow result to action result\n transformWorkflowResult(result: any): AgentBuilderActionResult {\n if (result.status === 'success') {\n return {\n success: result.result.success || false,\n applied: result.result.applied || false,\n branchName: result.result.branchName,\n message: result.result.message || 'Agent builder action completed',\n validationResults: result.result.validationResults,\n error: result.result.error,\n errors: result.result.errors,\n stepResults: result.result.stepResults,\n };\n } else if (result.status === 'failed') {\n return {\n success: false,\n applied: false,\n message: `Agent builder action failed: ${result.error.message}`,\n error: result.error.message,\n };\n } else {\n return {\n success: false,\n applied: false,\n message: 'Agent builder action was suspended',\n error: 'Workflow suspended - manual intervention required',\n };\n }\n }\n\n /**\n * @deprecated Use createRunAsync() instead.\n * @throws {Error} Always throws an error directing users to use createRunAsync()\n */\n async createRun(_params?: { runId?: string }): Promise<{ runId: string }> {\n throw new Error(\n 'createRun() has been deprecated. ' +\n 'Please use createRunAsync() instead.\\n\\n' +\n 'Migration guide:\\n' +\n ' Before: const run = agentBuilder.createRun();\\n' +\n ' After: const run = await agentBuilder.createRunAsync();\\n\\n' +\n 'Note: createRunAsync() is an async method, so make sure your calling function is async.',\n );\n }\n\n /**\n * Creates a new agent builder action run and returns the runId.\n * This calls `/api/agent-builder/:actionId/create-run`.\n */\n async createRunAsync(params?: { runId?: string }): Promise<{ runId: string }> {\n const searchParams = new URLSearchParams();\n\n if (!!params?.runId) {\n searchParams.set('runId', params.runId);\n }\n\n const url = `/api/agent-builder/${this.actionId}/create-run${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n return this.request(url, {\n method: 'POST',\n });\n }\n\n /**\n * Starts agent builder action asynchronously and waits for completion.\n * This calls `/api/agent-builder/:actionId/start-async`.\n */\n async startAsync(params: AgentBuilderActionRequest, runId?: string): Promise<AgentBuilderActionResult> {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/start-async${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const result = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n });\n\n return this.transformWorkflowResult(result);\n }\n\n /**\n * Starts an existing agent builder action run.\n * This calls `/api/agent-builder/:actionId/start`.\n */\n async startActionRun(params: AgentBuilderActionRequest, runId: string): Promise<{ message: string }> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/start?${searchParams.toString()}`;\n return this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n });\n }\n\n /**\n * Resumes a suspended agent builder action step.\n * This calls `/api/agent-builder/:actionId/resume`.\n */\n async resume(\n params: {\n step: string | string[];\n resumeData?: unknown;\n runtimeContext?: RuntimeContext;\n },\n runId: string,\n ): Promise<{ message: string }> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...resumeParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/resume?${searchParams.toString()}`;\n return this.request(url, {\n method: 'POST',\n body: { ...resumeParams, runtimeContext },\n });\n }\n\n /**\n * Resumes a suspended agent builder action step asynchronously.\n * This calls `/api/agent-builder/:actionId/resume-async`.\n */\n async resumeAsync(\n params: {\n step: string | string[];\n resumeData?: unknown;\n runtimeContext?: RuntimeContext;\n },\n runId: string,\n ): Promise<AgentBuilderActionResult> {\n const searchParams = new URLSearchParams();\n searchParams.set('runId', runId);\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...resumeParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/resume-async?${searchParams.toString()}`;\n const result = await this.request(url, {\n method: 'POST',\n body: { ...resumeParams, runtimeContext },\n });\n\n return this.transformWorkflowResult(result);\n }\n\n /**\n * Creates an async generator that processes a readable stream and yields action records\n * separated by the Record Separator character (\\x1E)\n *\n * @param stream - The readable stream to process\n * @returns An async generator that yields parsed records\n */\n private async *streamProcessor(\n stream: ReadableStream,\n ): AsyncGenerator<{ type: string; payload: any }, void, unknown> {\n const reader = stream.getReader();\n\n // Track if we've finished reading from the stream\n let doneReading = false;\n // Buffer to accumulate partial chunks\n let buffer = '';\n\n try {\n while (!doneReading) {\n // Read the next chunk from the stream\n const { done, value } = await reader.read();\n doneReading = done;\n\n // Skip processing if we're done and there's no value\n if (done && !value) continue;\n\n try {\n // Decode binary data to text\n const decoded = value ? new TextDecoder().decode(value) : '';\n\n // Split the combined buffer and new data by record separator\n const chunks = (buffer + decoded).split(RECORD_SEPARATOR);\n\n // The last chunk might be incomplete, so save it for the next iteration\n buffer = chunks.pop() || '';\n\n // Process complete chunks\n for (const chunk of chunks) {\n if (chunk) {\n // Only process non-empty chunks\n if (typeof chunk === 'string') {\n try {\n const parsedChunk = JSON.parse(chunk);\n yield parsedChunk;\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n }\n }\n } catch {\n // Silently ignore parsing errors to maintain stream processing\n // This allows the stream to continue even if one record is malformed\n }\n }\n\n // Process any remaining data in the buffer after stream is done\n if (buffer) {\n try {\n yield JSON.parse(buffer);\n } catch {\n // Ignore parsing error for final chunk\n }\n }\n } finally {\n // Always ensure we clean up the reader\n reader.cancel().catch(() => {\n // Ignore cancel errors\n });\n }\n }\n\n /**\n * Streams agent builder action progress in real-time.\n * This calls `/api/agent-builder/:actionId/stream`.\n */\n async stream(params: AgentBuilderActionRequest, runId?: string) {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/stream${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to stream agent builder action: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n let failedChunk: string | undefined = undefined;\n\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Streams agent builder action progress in real-time using VNext streaming.\n * This calls `/api/agent-builder/:actionId/streamVNext`.\n */\n async streamVNext(params: AgentBuilderActionRequest, runId?: string) {\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n\n const runtimeContext = parseClientRuntimeContext(params.runtimeContext);\n const { runtimeContext: _, ...actionParams } = params;\n\n const url = `/api/agent-builder/${this.actionId}/streamVNext${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'POST',\n body: { ...actionParams, runtimeContext },\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to stream agent builder action VNext: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n let failedChunk: string | undefined = undefined;\n\n const transformStream = new TransformStream<ArrayBuffer, { type: string; payload: any }>({\n start() {},\n async transform(chunk, controller) {\n try {\n // Decode binary data to text\n const decoded = new TextDecoder().decode(chunk);\n\n // Split by record separator\n const chunks = decoded.split(RECORD_SEPARATOR);\n\n // Process each chunk\n for (const chunk of chunks) {\n if (chunk) {\n const newChunk: string = failedChunk ? failedChunk + chunk : chunk;\n try {\n const parsedChunk = JSON.parse(newChunk);\n controller.enqueue(parsedChunk);\n failedChunk = undefined;\n } catch {\n failedChunk = newChunk;\n }\n }\n }\n } catch {\n // Silently ignore processing errors\n }\n },\n });\n\n // Pipe the response body through the transform stream\n return response.body.pipeThrough(transformStream);\n }\n\n /**\n * Watches an existing agent builder action run by runId.\n * This is used for hot reload recovery - it loads the existing run state\n * and streams any remaining progress.\n * This calls `/api/agent-builder/:actionId/watch`.\n */\n async watch(\n { runId, eventType }: { runId: string; eventType?: 'watch' | 'watch-v2' },\n onRecord: (record: { type: string; payload: any }) => void,\n ) {\n const url = `/api/agent-builder/${this.actionId}/watch?runId=${runId}${eventType ? `&eventType=${eventType}` : ''}`;\n const response: Response = await this.request(url, {\n method: 'GET',\n stream: true,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to watch agent builder action: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n // Use the exact same stream processing as workflows\n for await (const record of this.streamProcessor(response.body)) {\n if (typeof record === 'string') {\n onRecord(JSON.parse(record));\n } else {\n onRecord(record);\n }\n }\n }\n\n /**\n * Gets a specific action run by its ID.\n * This calls `/api/agent-builder/:actionId/runs/:runId`.\n */\n async runById(runId: string) {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Gets details about this agent builder action.\n * This calls `/api/agent-builder/:actionId`.\n */\n async details(): Promise<WorkflowInfo> {\n const result = await this.request<WorkflowInfo>(`/api/agent-builder/${this.actionId}`);\n return result;\n }\n\n /**\n * Gets all runs for this agent builder action.\n * This calls `/api/agent-builder/:actionId/runs`.\n */\n async runs(params?: { fromDate?: Date; toDate?: Date; limit?: number; offset?: number; resourceId?: string }) {\n const searchParams = new URLSearchParams();\n if (params?.fromDate) {\n searchParams.set('fromDate', params.fromDate.toISOString());\n }\n if (params?.toDate) {\n searchParams.set('toDate', params.toDate.toISOString());\n }\n if (params?.limit !== undefined) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== undefined) {\n searchParams.set('offset', String(params.offset));\n }\n if (params?.resourceId) {\n searchParams.set('resourceId', params.resourceId);\n }\n\n const url = `/api/agent-builder/${this.actionId}/runs${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Gets the execution result of an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/execution-result`.\n */\n async runExecutionResult(runId: string) {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}/execution-result`;\n return this.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Cancels an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/cancel`.\n */\n async cancelRun(runId: string): Promise<{ message: string }> {\n const url = `/api/agent-builder/${this.actionId}/runs/${runId}/cancel`;\n return this.request(url, {\n method: 'POST',\n });\n }\n\n /**\n * Sends an event to an agent builder action run.\n * This calls `/api/agent-builder/:actionId/runs/:runId/send-event`.\n */\n async sendRunEvent(params: { runId: string; event: string; data: unknown }): Promise<{ message: string }> {\n const url = `/api/agent-builder/${this.actionId}/runs/${params.runId}/send-event`;\n return this.request(url, {\n method: 'POST',\n body: { event: params.event, data: params.data },\n });\n }\n}\n","import type { AITraceRecord, AITracesPaginatedArg } from '@mastra/core/storage';\nimport type { ClientOptions, GetAITracesResponse, GetScoresBySpanParams, GetScoresResponse } from '../types';\nimport { BaseResource } from './base';\n\nexport class Observability extends BaseResource {\n constructor(options: ClientOptions) {\n super(options);\n }\n\n /**\n * Retrieves a specific AI trace by ID\n * @param traceId - ID of the trace to retrieve\n * @returns Promise containing the AI trace with all its spans\n */\n getTrace(traceId: string): Promise<AITraceRecord> {\n return this.request(`/api/observability/traces/${traceId}`);\n }\n\n /**\n * Retrieves paginated list of AI traces with optional filtering\n * @param params - Parameters for pagination and filtering\n * @returns Promise containing paginated traces and pagination info\n */\n getTraces(params: AITracesPaginatedArg): Promise<GetAITracesResponse> {\n const { pagination, filters } = params;\n const { page, perPage, dateRange } = pagination || {};\n const { name, spanType, entityId, entityType } = filters || {};\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n if (name) {\n searchParams.set('name', name);\n }\n if (spanType !== undefined) {\n searchParams.set('spanType', String(spanType));\n }\n if (entityId && entityType) {\n searchParams.set('entityId', entityId);\n searchParams.set('entityType', entityType);\n }\n\n if (dateRange) {\n const dateRangeStr = JSON.stringify({\n start: dateRange.start instanceof Date ? dateRange.start.toISOString() : dateRange.start,\n end: dateRange.end instanceof Date ? dateRange.end.toISOString() : dateRange.end,\n });\n searchParams.set('dateRange', dateRangeStr);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/observability/traces${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by trace ID and span ID\n * @param params - Parameters containing trace ID, span ID, and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresBySpan(params: GetScoresBySpanParams): Promise<GetScoresResponse> {\n const { traceId, spanId, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(\n `/api/observability/traces/${encodeURIComponent(traceId)}/${encodeURIComponent(spanId)}/scores${queryString ? `?${queryString}` : ''}`,\n );\n }\n\n score(params: {\n scorerName: string;\n targets: Array<{ traceId: string; spanId?: string }>;\n }): Promise<{ status: string; message: string }> {\n return this.request(`/api/observability/traces/score`, {\n method: 'POST',\n body: { ...params },\n });\n }\n}\n","import type { StorageThreadType } from '@mastra/core/memory';\n\nimport type {\n GetMemoryThreadMessagesResponse,\n ClientOptions,\n UpdateMemoryThreadParams,\n GetMemoryThreadMessagesParams,\n} from '../types';\n\nimport { BaseResource } from './base';\n\nexport class NetworkMemoryThread extends BaseResource {\n constructor(\n options: ClientOptions,\n private threadId: string,\n private networkId: string,\n ) {\n super(options);\n }\n\n /**\n * Retrieves the memory thread details\n * @returns Promise containing thread details including title and metadata\n */\n get(): Promise<StorageThreadType> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`);\n }\n\n /**\n * Updates the memory thread properties\n * @param params - Update parameters including title and metadata\n * @returns Promise containing updated thread details\n */\n update(params: UpdateMemoryThreadParams): Promise<StorageThreadType> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {\n method: 'PATCH',\n body: params,\n });\n }\n\n /**\n * Deletes the memory thread\n * @returns Promise containing deletion result\n */\n delete(): Promise<{ result: string }> {\n return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Retrieves messages associated with the thread\n * @param params - Optional parameters including limit for number of messages to retrieve\n * @returns Promise containing thread messages and UI messages\n */\n getMessages(params?: GetMemoryThreadMessagesParams): Promise<GetMemoryThreadMessagesResponse> {\n const query = new URLSearchParams({\n networkId: this.networkId,\n ...(params?.limit ? { limit: params.limit.toString() } : {}),\n });\n return this.request(`/api/memory/network/threads/${this.threadId}/messages?${query.toString()}`);\n }\n\n /**\n * Deletes one or more messages from the thread\n * @param messageIds - Can be a single message ID (string), array of message IDs,\n * message object with id property, or array of message objects\n * @returns Promise containing deletion result\n */\n deleteMessages(\n messageIds: string | string[] | { id: string } | { id: string }[],\n ): Promise<{ success: boolean; message: string }> {\n const query = new URLSearchParams({\n networkId: this.networkId,\n });\n return this.request(`/api/memory/network/messages/delete?${query.toString()}`, {\n method: 'POST',\n body: { messageIds },\n });\n }\n}\n","import type { AITraceRecord, AITracesPaginatedArg, WorkflowInfo } from '@mastra/core';\nimport type { ServerDetailInfo } from '@mastra/core/mcp';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport {\n Agent,\n MemoryThread,\n Tool,\n Workflow,\n Vector,\n BaseResource,\n A2A,\n MCPTool,\n AgentBuilder,\n Observability,\n} from './resources';\nimport { NetworkMemoryThread } from './resources/network-memory-thread';\nimport type {\n ClientOptions,\n CreateMemoryThreadParams,\n CreateMemoryThreadResponse,\n GetAgentResponse,\n GetLogParams,\n GetLogsParams,\n GetLogsResponse,\n GetMemoryThreadParams,\n GetMemoryThreadResponse,\n GetTelemetryParams,\n GetTelemetryResponse,\n GetToolResponse,\n GetWorkflowResponse,\n SaveMessageToMemoryParams,\n SaveMessageToMemoryResponse,\n McpServerListResponse,\n McpServerToolListResponse,\n GetNetworkMemoryThreadParams,\n CreateNetworkMemoryThreadParams,\n SaveNetworkMessageToMemoryParams,\n GetScorerResponse,\n GetScoresByScorerIdParams,\n GetScoresResponse,\n GetScoresByRunIdParams,\n GetScoresByEntityIdParams,\n GetScoresBySpanParams,\n SaveScoreParams,\n SaveScoreResponse,\n GetAITracesResponse,\n GetMemoryConfigParams,\n GetMemoryConfigResponse,\n GetMemoryThreadMessagesResponse,\n} from './types';\nimport { base64RuntimeContext, parseClientRuntimeContext } from './utils';\n\nexport class MastraClient extends BaseResource {\n private observability: Observability;\n constructor(options: ClientOptions) {\n super(options);\n this.observability = new Observability(options);\n }\n\n /**\n * Retrieves all available agents\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of agent IDs to agent details\n */\n public getAgents(runtimeContext?: RuntimeContext | Record<string, any>): Promise<Record<string, GetAgentResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/agents${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets an agent instance by ID\n * @param agentId - ID of the agent to retrieve\n * @returns Agent instance\n */\n public getAgent(agentId: string) {\n return new Agent(this.options, agentId);\n }\n\n /**\n * Retrieves memory threads for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getMemoryThreads(params: GetMemoryThreadParams): Promise<GetMemoryThreadResponse> {\n return this.request(`/api/memory/threads?resourceid=${params.resourceId}&agentId=${params.agentId}`);\n }\n\n /**\n * Retrieves memory config for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getMemoryConfig(params: GetMemoryConfigParams): Promise<GetMemoryConfigResponse> {\n return this.request(`/api/memory/config?agentId=${params.agentId}`);\n }\n\n /**\n * Creates a new memory thread\n * @param params - Parameters for creating the memory thread\n * @returns Promise containing the created memory thread\n */\n public createMemoryThread(params: CreateMemoryThreadParams): Promise<CreateMemoryThreadResponse> {\n return this.request(`/api/memory/threads?agentId=${params.agentId}`, { method: 'POST', body: params });\n }\n\n /**\n * Gets a memory thread instance by ID\n * @param threadId - ID of the memory thread to retrieve\n * @returns MemoryThread instance\n */\n public getMemoryThread(threadId: string, agentId: string) {\n return new MemoryThread(this.options, threadId, agentId);\n }\n\n public getThreadMessages(\n threadId: string,\n opts: { agentId?: string; networkId?: string } = {},\n ): Promise<GetMemoryThreadMessagesResponse> {\n let url = '';\n if (opts.agentId) {\n url = `/api/memory/threads/${threadId}/messages?agentId=${opts.agentId}`;\n } else if (opts.networkId) {\n url = `/api/memory/network/threads/${threadId}/messages?networkId=${opts.networkId}`;\n }\n return this.request(url);\n }\n\n public deleteThread(\n threadId: string,\n opts: { agentId?: string; networkId?: string } = {},\n ): Promise<{ success: boolean; message: string }> {\n let url = '';\n\n if (opts.agentId) {\n url = `/api/memory/threads/${threadId}?agentId=${opts.agentId}`;\n } else if (opts.networkId) {\n url = `/api/memory/network/threads/${threadId}?networkId=${opts.networkId}`;\n }\n return this.request(url, { method: 'DELETE' });\n }\n\n /**\n * Saves messages to memory\n * @param params - Parameters containing messages to save\n * @returns Promise containing the saved messages\n */\n public saveMessageToMemory(params: SaveMessageToMemoryParams): Promise<SaveMessageToMemoryResponse> {\n return this.request(`/api/memory/save-messages?agentId=${params.agentId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Gets the status of the memory system\n * @returns Promise containing memory system status\n */\n public getMemoryStatus(agentId: string): Promise<{ result: boolean }> {\n return this.request(`/api/memory/status?agentId=${agentId}`);\n }\n\n /**\n * Retrieves memory threads for a resource\n * @param params - Parameters containing the resource ID\n * @returns Promise containing array of memory threads\n */\n public getNetworkMemoryThreads(params: GetNetworkMemoryThreadParams): Promise<GetMemoryThreadResponse> {\n return this.request(`/api/memory/network/threads?resourceid=${params.resourceId}&networkId=${params.networkId}`);\n }\n\n /**\n * Creates a new memory thread\n * @param params - Parameters for creating the memory thread\n * @returns Promise containing the created memory thread\n */\n public createNetworkMemoryThread(params: CreateNetworkMemoryThreadParams): Promise<CreateMemoryThreadResponse> {\n return this.request(`/api/memory/network/threads?networkId=${params.networkId}`, { method: 'POST', body: params });\n }\n\n /**\n * Gets a memory thread instance by ID\n * @param threadId - ID of the memory thread to retrieve\n * @returns MemoryThread instance\n */\n public getNetworkMemoryThread(threadId: string, networkId: string) {\n return new NetworkMemoryThread(this.options, threadId, networkId);\n }\n\n /**\n * Saves messages to memory\n * @param params - Parameters containing messages to save\n * @returns Promise containing the saved messages\n */\n public saveNetworkMessageToMemory(params: SaveNetworkMessageToMemoryParams): Promise<SaveMessageToMemoryResponse> {\n return this.request(`/api/memory/network/save-messages?networkId=${params.networkId}`, {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Gets the status of the memory system\n * @returns Promise containing memory system status\n */\n public getNetworkMemoryStatus(networkId: string): Promise<{ result: boolean }> {\n return this.request(`/api/memory/network/status?networkId=${networkId}`);\n }\n\n /**\n * Retrieves all available tools\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of tool IDs to tool details\n */\n public getTools(runtimeContext?: RuntimeContext | Record<string, any>): Promise<Record<string, GetToolResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/tools${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets a tool instance by ID\n * @param toolId - ID of the tool to retrieve\n * @returns Tool instance\n */\n public getTool(toolId: string) {\n return new Tool(this.options, toolId);\n }\n\n /**\n * Retrieves all available workflows\n * @param runtimeContext - Optional runtime context to pass as query parameter\n * @returns Promise containing map of workflow IDs to workflow details\n */\n public getWorkflows(\n runtimeContext?: RuntimeContext | Record<string, any>,\n ): Promise<Record<string, GetWorkflowResponse>> {\n const runtimeContextParam = base64RuntimeContext(parseClientRuntimeContext(runtimeContext));\n\n const searchParams = new URLSearchParams();\n\n if (runtimeContextParam) {\n searchParams.set('runtimeContext', runtimeContextParam);\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/workflows${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Gets a workflow instance by ID\n * @param workflowId - ID of the workflow to retrieve\n * @returns Workflow instance\n */\n public getWorkflow(workflowId: string) {\n return new Workflow(this.options, workflowId);\n }\n\n /**\n * Gets all available agent builder actions\n * @returns Promise containing map of action IDs to action details\n */\n public getAgentBuilderActions(): Promise<Record<string, WorkflowInfo>> {\n return this.request('/api/agent-builder/');\n }\n\n /**\n * Gets an agent builder instance for executing agent-builder workflows\n * @returns AgentBuilder instance\n */\n public getAgentBuilderAction(actionId: string) {\n return new AgentBuilder(this.options, actionId);\n }\n\n /**\n * Gets a vector instance by name\n * @param vectorName - Name of the vector to retrieve\n * @returns Vector instance\n */\n public getVector(vectorName: string) {\n return new Vector(this.options, vectorName);\n }\n\n /**\n * Retrieves logs\n * @param params - Parameters for filtering logs\n * @returns Promise containing array of log messages\n */\n public getLogs(params: GetLogsParams): Promise<GetLogsResponse> {\n const { transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;\n const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];\n\n const searchParams = new URLSearchParams();\n if (transportId) {\n searchParams.set('transportId', transportId);\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n if (logLevel) {\n searchParams.set('logLevel', logLevel);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n if (_filters) {\n if (Array.isArray(_filters)) {\n for (const filter of _filters) {\n searchParams.append('filters', filter);\n }\n } else {\n searchParams.set('filters', _filters);\n }\n }\n\n if (searchParams.size) {\n return this.request(`/api/logs?${searchParams}`);\n } else {\n return this.request(`/api/logs`);\n }\n }\n\n /**\n * Gets logs for a specific run\n * @param params - Parameters containing run ID to retrieve\n * @returns Promise containing array of log messages\n */\n public getLogForRun(params: GetLogParams): Promise<GetLogsResponse> {\n const { runId, transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;\n\n const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];\n const searchParams = new URLSearchParams();\n if (runId) {\n searchParams.set('runId', runId);\n }\n if (transportId) {\n searchParams.set('transportId', transportId);\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n if (logLevel) {\n searchParams.set('logLevel', logLevel);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n\n if (_filters) {\n if (Array.isArray(_filters)) {\n for (const filter of _filters) {\n searchParams.append('filters', filter);\n }\n } else {\n searchParams.set('filters', _filters);\n }\n }\n\n if (searchParams.size) {\n return this.request(`/api/logs/${runId}?${searchParams}`);\n } else {\n return this.request(`/api/logs/${runId}`);\n }\n }\n\n /**\n * List of all log transports\n * @returns Promise containing list of log transports\n */\n public getLogTransports(): Promise<{ transports: string[] }> {\n return this.request('/api/logs/transports');\n }\n\n /**\n * List of all traces (paged)\n * @param params - Parameters for filtering traces\n * @returns Promise containing telemetry data\n */\n public getTelemetry(params?: GetTelemetryParams): Promise<GetTelemetryResponse> {\n const { name, scope, page, perPage, attribute, fromDate, toDate } = params || {};\n const _attribute = attribute ? Object.entries(attribute).map(([key, value]) => `${key}:${value}`) : [];\n\n const searchParams = new URLSearchParams();\n if (name) {\n searchParams.set('name', name);\n }\n if (scope) {\n searchParams.set('scope', scope);\n }\n if (page) {\n searchParams.set('page', String(page));\n }\n if (perPage) {\n searchParams.set('perPage', String(perPage));\n }\n if (_attribute) {\n if (Array.isArray(_attribute)) {\n for (const attr of _attribute) {\n searchParams.append('attribute', attr);\n }\n } else {\n searchParams.set('attribute', _attribute);\n }\n }\n if (fromDate) {\n searchParams.set('fromDate', fromDate.toISOString());\n }\n if (toDate) {\n searchParams.set('toDate', toDate.toISOString());\n }\n\n if (searchParams.size) {\n return this.request(`/api/telemetry?${searchParams}`);\n } else {\n return this.request(`/api/telemetry`);\n }\n }\n\n /**\n * Retrieves a list of available MCP servers.\n * @param params - Optional parameters for pagination (limit, offset).\n * @returns Promise containing the list of MCP servers and pagination info.\n */\n public getMcpServers(params?: { limit?: number; offset?: number }): Promise<McpServerListResponse> {\n const searchParams = new URLSearchParams();\n if (params?.limit !== undefined) {\n searchParams.set('limit', String(params.limit));\n }\n if (params?.offset !== undefined) {\n searchParams.set('offset', String(params.offset));\n }\n const queryString = searchParams.toString();\n return this.request(`/api/mcp/v0/servers${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves detailed information for a specific MCP server.\n * @param serverId - The ID of the MCP server to retrieve.\n * @param params - Optional parameters, e.g., specific version.\n * @returns Promise containing the detailed MCP server information.\n */\n public getMcpServerDetails(serverId: string, params?: { version?: string }): Promise<ServerDetailInfo> {\n const searchParams = new URLSearchParams();\n if (params?.version) {\n searchParams.set('version', params.version);\n }\n const queryString = searchParams.toString();\n return this.request(`/api/mcp/v0/servers/${serverId}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves a list of tools for a specific MCP server.\n * @param serverId - The ID of the MCP server.\n * @returns Promise containing the list of tools.\n */\n public getMcpServerTools(serverId: string): Promise<McpServerToolListResponse> {\n return this.request(`/api/mcp/${serverId}/tools`);\n }\n\n /**\n * Gets an MCPTool resource instance for a specific tool on an MCP server.\n * This instance can then be used to fetch details or execute the tool.\n * @param serverId - The ID of the MCP server.\n * @param toolId - The ID of the tool.\n * @returns MCPTool instance.\n */\n public getMcpServerTool(serverId: string, toolId: string): MCPTool {\n return new MCPTool(this.options, serverId, toolId);\n }\n\n /**\n * Gets an A2A client for interacting with an agent via the A2A protocol\n * @param agentId - ID of the agent to interact with\n * @returns A2A client instance\n */\n public getA2A(agentId: string) {\n return new A2A(this.options, agentId);\n }\n\n /**\n * Retrieves the working memory for a specific thread (optionally resource-scoped).\n * @param agentId - ID of the agent.\n * @param threadId - ID of the thread.\n * @param resourceId - Optional ID of the resource.\n * @returns Working memory for the specified thread or resource.\n */\n public getWorkingMemory({\n agentId,\n threadId,\n resourceId,\n }: {\n agentId: string;\n threadId: string;\n resourceId?: string;\n }) {\n return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}&resourceId=${resourceId}`);\n }\n\n /**\n * Updates the working memory for a specific thread (optionally resource-scoped).\n * @param agentId - ID of the agent.\n * @param threadId - ID of the thread.\n * @param workingMemory - The new working memory content.\n * @param resourceId - Optional ID of the resource.\n */\n public updateWorkingMemory({\n agentId,\n threadId,\n workingMemory,\n resourceId,\n }: {\n agentId: string;\n threadId: string;\n workingMemory: string;\n resourceId?: string;\n }) {\n return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}`, {\n method: 'POST',\n body: {\n workingMemory,\n resourceId,\n },\n });\n }\n\n /**\n * Retrieves all available scorers\n * @returns Promise containing list of available scorers\n */\n public getScorers(): Promise<Record<string, GetScorerResponse>> {\n return this.request('/api/scores/scorers');\n }\n\n /**\n * Retrieves a scorer by ID\n * @param scorerId - ID of the scorer to retrieve\n * @returns Promise containing the scorer\n */\n public getScorer(scorerId: string): Promise<GetScorerResponse> {\n return this.request(`/api/scores/scorers/${encodeURIComponent(scorerId)}`);\n }\n\n public getScoresByScorerId(params: GetScoresByScorerIdParams): Promise<GetScoresResponse> {\n const { page, perPage, scorerId, entityId, entityType } = params;\n const searchParams = new URLSearchParams();\n\n if (entityId) {\n searchParams.set('entityId', entityId);\n }\n if (entityType) {\n searchParams.set('entityType', entityType);\n }\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n const queryString = searchParams.toString();\n return this.request(`/api/scores/scorer/${encodeURIComponent(scorerId)}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by run ID\n * @param params - Parameters containing run ID and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresByRunId(params: GetScoresByRunIdParams): Promise<GetScoresResponse> {\n const { runId, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(`/api/scores/run/${encodeURIComponent(runId)}${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Retrieves scores by entity ID and type\n * @param params - Parameters containing entity ID, type, and pagination options\n * @returns Promise containing scores and pagination info\n */\n public getScoresByEntityId(params: GetScoresByEntityIdParams): Promise<GetScoresResponse> {\n const { entityId, entityType, page, perPage } = params;\n const searchParams = new URLSearchParams();\n\n if (page !== undefined) {\n searchParams.set('page', String(page));\n }\n if (perPage !== undefined) {\n searchParams.set('perPage', String(perPage));\n }\n\n const queryString = searchParams.toString();\n return this.request(\n `/api/scores/entity/${encodeURIComponent(entityType)}/${encodeURIComponent(entityId)}${queryString ? `?${queryString}` : ''}`,\n );\n }\n\n /**\n * Saves a score\n * @param params - Parameters containing the score data to save\n * @returns Promise containing the saved score\n */\n public saveScore(params: SaveScoreParams): Promise<SaveScoreResponse> {\n return this.request('/api/scores', {\n method: 'POST',\n body: params,\n });\n }\n\n /**\n * Retrieves model providers with available keys\n * @returns Promise containing model providers with available keys\n */\n getModelProviders(): Promise<string[]> {\n return this.request(`/api/model-providers`);\n }\n\n getAITrace(traceId: string): Promise<AITraceRecord> {\n return this.observability.getTrace(traceId);\n }\n\n getAITraces(params: AITracesPaginatedArg): Promise<GetAITracesResponse> {\n return this.observability.getTraces(params);\n }\n\n getScoresBySpan(params: GetScoresBySpanParams): Promise<GetScoresResponse> {\n return this.observability.getScoresBySpan(params);\n }\n\n score(params: {\n scorerName: string;\n targets: Array<{ traceId: string; spanId?: string }>;\n }): Promise<{ status: string; message: string }> {\n return this.observability.score(params);\n }\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\n// Client-side tool execution context (simplified version without server dependencies)\nexport interface ClientToolExecutionContext<TSchemaIn extends z.ZodSchema | undefined = undefined> {\n context: TSchemaIn extends z.ZodSchema ? z.infer<TSchemaIn> : unknown;\n}\n\n// Client-side tool action interface\nexport interface ClientToolAction<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n> {\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: (\n context: ClientToolExecutionContext<TSchemaIn>,\n options?: ToolExecutionOptions,\n ) => Promise<TSchemaOut extends z.ZodSchema ? z.infer<TSchemaOut> : unknown>;\n}\n\n// Client-side tool class (simplified version without server dependencies)\nexport class ClientTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n> implements ClientToolAction<TSchemaIn, TSchemaOut>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ClientToolAction<TSchemaIn, TSchemaOut>['execute'];\n\n constructor(opts: ClientToolAction<TSchemaIn, TSchemaOut>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.execute = opts.execute;\n }\n}\n\n// Client-side createTool function\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n>(opts: ClientToolAction<TSchemaIn, TSchemaOut>): ClientTool<TSchemaIn, TSchemaOut> {\n return new ClientTool(opts);\n}\n"]}
|