@tbookdev/vault-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +4359 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +894 -0
- package/dist/index.d.ts +894 -0
- package/dist/index.js +4297 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/pda.ts","../src/types.ts","../src/queries.ts","../src/share-price-cache.ts","../src/share-price.ts","../src/history.ts","../src/rpc-utils.ts","../src/transactions.ts","../src/idl/vault-gateway-devnet.json","../src/client.ts","../src/utils.ts"],"names":["PublicKey","bs58"],"mappings":";;;;;;;;AAgBO,IAAM,aAAA,GAAgB;AAEtB,IAAM,cAAA,GAAiB;AAEvB,IAAM,QAAA,GAAW;AAEjB,IAAM,SAAA,GAAY;AAElB,IAAM,sBAAA,GAAyB;AAE/B,IAAM,sBAAA,GAAyB,GAAA;AAItC,IAAM,WAAA,GAA6C;AAAA,EACjD,MAAA,EAAQ,+BAAA;AAAA,EACR,cAAA,EAAgB;AAClB,CAAA;AAOO,SAAS,iBAAiB,OAAA,EAAgC;AAC/D,EAAA,OAAO,YAAY,OAAO,CAAA;AAC5B;AAKO,IAAM,mBAAA,GACX,uFAAA;AAIF,IAAM,aAAA,GAAgB,6BAAA;AAGf,SAAS,WAAA,CACd,IAAA,EACA,KAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,OAAA,KAAY,cAAA,GAAiB,EAAA,GAAK,YAAY,OAAO,CAAA,CAAA;AACrE,EAAA,OAAO,GAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,OAAO,CAAA,CAAA;AACpD;AA0BA,IAAM,eAAA,GAA+C;AAAA,EACnD,eAAA,EAAiB;AAAA,IACf,EAAA,EAAI,QAAA;AAAA,IACJ,SAAA,EAAW,IAAI,SAAA,CAAU,8CAA8C,CAAA;AAAA;AAAA,IAEvE,QAAA,EAAU,IAAI,SAAA,CAAU,8CAA8C,CAAA;AAAA,IACtE,OAAA,EAAS;AAAA;AACX;AAAA;AAGF,CAAA;AAMO,SAAS,cAAA,CACd,SACA,OAAA,EACyB;AACzB,EAAA,OAAO,eAAA,CAAgB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAChD;AAKO,SAAS,kBAAkB,OAAA,EAA2C;AAC3E,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CACjC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,OAAO,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,IAAA,EAAM,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,MAAA,CAAA;AAAA,IACb,WAAA,EAAa,kCAAA;AAAA,IACb,SAAA,EAAW,CAAA,CAAE,SAAA,CAAU,QAAA,EAAS;AAAA,IAChC,SAAS,CAAA,CAAE,OAAA;AAAA,IACX,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,EAAS;AAAA,IAC9B,YAAY,EAAE,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,UAAU,cAAA,EAAe;AAAA,IACrD,MAAA,EAAQ;AAAA,GACV,CAAE,CAAA;AACN;AAGO,IAAM,gBAAA,GAAmB;;;AC9GzB,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA;AAAA,EAE9B,IAAA;AAAA;AAAA,EAGA,mBAAA;AAAA,EAET,WAAA,CAAY,IAAA,EAAc,OAAA,EAAiB,mBAAA,EAA8B;AACvE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,sBAAsB,mBAAA,IAAuB,yCAAA;AAAA,EACpD;AACF;AAOO,IAAM,gBAAA,GAAN,cAA+B,aAAA,CAAc;AAAA,EAClD,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE,cAAA;AAAA,MACA,mEAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA;AAAA,EAExC,UAAA;AAAA,EAET,YAAY,UAAA,EAAoB;AAC9B,IAAA,KAAA;AAAA,MACE,aAAA;AAAA,MACA,sBAAsB,UAAU,CAAA,MAAA,CAAA;AAAA,MAChC,+CAA+C,UAAU,CAAA,MAAA;AAAA,KAC3D;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,aAAA,CAAc;AAAA,EAC7C,eAAA;AAAA,EAET,YAAY,eAAA,EAAyB;AACnC,IAAA,KAAA;AAAA,MACE,mBAAA;AAAA,MACA,gDAAgD,eAAe,CAAA,MAAA,CAAA;AAAA,MAC/D,mDAAmD,eAAe,CAAA,MAAA;AAAA,KACpE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,EACzB;AACF;AAGO,IAAM,iBAAA,GAAN,cAAgC,aAAA,CAAc;AAAA,EACnD,WAAA,CAAY,WAAiC,MAAA,EAAgB;AAC3D,IAAA,KAAA;AAAA,MACE,gBAAA;AAAA,MACA,CAAA,IAAA,EAAO,SAAS,CAAA,qBAAA,EAAwB,MAAM,CAAA,cAAA,CAAA;AAAA,MAC9C;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAGO,IAAM,kBAAA,GAAN,cAAiC,aAAA,CAAc;AAAA,EACpD,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE,iBAAA;AAAA,MACA,kEAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAGO,IAAM,wBAAA,GAAN,cAAuC,aAAA,CAAc;AAAA,EAC1D,YAAY,MAAA,EAAgB;AAC1B,IAAA,KAAA;AAAA,MACE,gBAAA;AAAA,MACA,mCAAmC,MAAM,CAAA,CAAA,CAAA;AAAA,MACzC;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;AAGO,IAAM,iBAAA,GAAN,cAAgC,aAAA,CAAc;AAAA,EACnD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA;AAAA,MACE,eAAA;AAAA,MACA,UAAU,OAAO,CAAA,8DAAA,CAAA;AAAA,MACjB;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAGO,IAAM,0BAAA,GAAN,cAAyC,aAAA,CAAc;AAAA,EAC5D,YAAY,MAAA,EAAiB;AAC3B,IAAA,KAAA;AAAA,MACE,mBAAA;AAAA,MACA,CAAA,+BAAA,EAAkC,MAAA,GAAS,CAAA,EAAA,EAAK,MAAM,KAAK,GAAG,CAAA,CAAA;AAAA,MAC9D;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF;AAGO,IAAM,qBAAA,GAAN,cAAoC,aAAA,CAAc;AAAA,EACvD,WAAA,GAAc;AACZ,IAAA,KAAA;AAAA,MACE,oBAAA;AAAA,MACA,oFAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAGO,IAAM,QAAA,GAAN,cAAuB,aAAA,CAAc;AAAA;AAAA,EAEjC,KAAA;AAAA,EAET,WAAA,CAAY,WAAmB,KAAA,EAAgB;AAC7C,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,KAAA;AAAA,MACE,WAAA;AAAA,MACA,CAAA,uBAAA,EAA0B,SAAS,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA;AAAA,MAC3C;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA;AAAA,EAExC,SAAA;AAAA,EAET,WAAA,CAAY,WAAmB,SAAA,EAAmB;AAChD,IAAA,KAAA;AAAA,MACE,aAAA;AAAA,MACA,CAAA,yBAAA,EAA4B,SAAS,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA;AAAA,MAC3D;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AACF;AAGO,IAAM,uBAAA,GAAN,cAAsC,aAAA,CAAc;AAAA;AAAA,EAEhD,SAAA;AAAA,EAET,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA;AAAA,MACE,YAAA;AAAA,MACA,eAAe,SAAS,CAAA,oCAAA,CAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AACF;AAGO,IAAM,sBAAA,GAAN,cAAqC,aAAA,CAAc;AAAA;AAAA,EAE/C,SAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EAET,WAAA,CAAY,WAAmB,OAAA,EAAkB;AAC/C,IAAA,KAAA;AAAA,MACE,WAAA;AAAA,MACA,eAAe,SAAS,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA;AAAA,MACpE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;ACxMO,SAAS,kBAAkB,SAAA,EAA2C;AAC3E,EAAA,OAAOA,SAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,IAC5B;AAAA,GACF;AACF;AAMO,SAAS,eAAA,CACd,aACA,SAAA,EACqB;AACrB,EAAA,OAAOA,SAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,EAAG,WAAA,CAAY,UAAU,CAAA;AAAA,IAClD;AAAA,GACF;AACF;AAMO,SAAS,UAAA,CACd,WAAA,EACA,IAAA,EACA,SAAA,EACqB;AACrB,EAAA,OAAOA,SAAAA,CAAU,sBAAA;AAAA,IACf,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG,YAAY,QAAA,EAAS,EAAG,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,IAC7D;AAAA,GACF;AACF;AAMO,SAAS,kBAAA,CACd,WAAA,EACA,KAAA,EACA,SAAA,EACqB;AACrB,EAAA,OAAOA,SAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,KAAK,eAAe,CAAA;AAAA,MAC3B,YAAY,QAAA,EAAS;AAAA,MACrB,eAAe,KAAK;AAAA,KACtB;AAAA,IACA;AAAA,GACF;AACF;AAMO,SAAS,iBAAA,CACd,WAAA,EACA,KAAA,EACA,SAAA,EACqB;AACrB,EAAA,OAAOA,SAAAA,CAAU,sBAAA;AAAA,IACf;AAAA,MACE,MAAA,CAAO,KAAK,cAAc,CAAA;AAAA,MAC1B,YAAY,QAAA,EAAS;AAAA,MACrB,eAAe,KAAK;AAAA,KACtB;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,IAAI,UAAA,CAAW,IAAI,cAAA,CAAe,CAAC,OAAO,KAAK,CAAC,CAAC,CAAA,CAAE,MAAM;AAAA,GAC3D;AACF;;;AC/BO,IAAM,UAAA,GAA0C;AAAA,EACrD,CAAA,EAAG,MAAA;AAAA,EACH,CAAA,EAAG,QAAA;AAAA,EACH,CAAA,EAAG,UAAA;AAAA,EACH,CAAA,EAAG,SAAA;AAAA,EACH,CAAA,EAAG;AACL;;;ACjCA,eAAsB,cAAA,CACpB,UAAA,EACA,SAAA,EACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AAGpD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,SAAS,cAAc,CAAA;AAAA,IAClF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAGA,EAAA,OAAO,iBAAA,CAAkB,UAAA,EAAY,SAAA,EAAW,cAAc,CAAA;AAChE;AAEA,eAAe,oBAAA,CACb,UAAA,EACA,SAAA,EACA,OAAA,EACA,cAAA,EAC0B;AAC1B,EAAA,MAAM,IAAI,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAEzE,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,CAAgB,gBAAgB,SAAS,CAAA;AAChE,EAAA,MAAM,gBAAA,GAAmB,MAAM,gBAAA,CAAiB,UAAA,EAAY,YAAY,CAAA;AAExE,EAAA,MAAM,mBAAA,GAAsB,CAAA,CAAE,mBAAA,CAAoB,QAAA,EAAS;AAC3D,EAAA,MAAM,kBAAA,GAAqB,CAAA,CAAE,kBAAA,CAAmB,QAAA,EAAS;AAEzD,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,KAAA,EAAO,CAAA,CAAE,SAAA,CAAU,QAAA,EAAS;AAAA,IAC5B,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAS;AAAA,IAC5B,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAA,EAAS;AAAA,IAC9B,WAAA,EAAa,CAAA,CAAE,WAAA,CAAY,QAAA,KAAa,EAAA,IAAM,cAAA;AAAA,IAC9C,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA,EAAiB,CAAA,CAAE,eAAA,CAAgB,QAAA,KAAa,EAAA,IAAM,aAAA;AAAA,IACtD,UAAA,EAAY,CAAA,CAAE,UAAA,CAAW,QAAA,KAAa,EAAA,IAAM,aAAA;AAAA,IAC5C,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,gBAAA;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAEA,EAAA,MAAM,eAAe,MAAM,uBAAA,CAAwB,OAAA,EAAS,SAAA,EAAW,gBAAgB,mBAAmB,CAAA;AAC1G,EAAA,MAAM,cAAc,MAAM,sBAAA,CAAuB,OAAA,EAAS,SAAA,EAAW,gBAAgB,kBAAkB,CAAA;AAEvG,EAAA,OAAO,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAY;AAC5C;AAEA,eAAe,iBAAA,CACb,UAAA,EACA,SAAA,EACA,cAAA,EAC0B;AAC1B,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,MAAM,UAAA,CAAW,cAAA,CAAe,cAAc,CAAA;AAAA,EAC9D,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,gBAAA,EAAkB,GAAG,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EAC9D;AAEA,EAAA,MAAM,OAAO,WAAA,CAAY,IAAA;AACzB,EAAA,MAAM,CAAA,GAAI,CAAA;AAcV,EAAA,MAAM,KAAA,GAAQ,IAAIA,SAAAA,CAAU,IAAA,CAAK,SAAS,CAAA,EAAG,CAAA,GAAI,EAAE,CAAC,CAAA;AACpD,EAAA,MAAM,OAAA,GAAU,IAAIA,SAAAA,CAAU,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA,EAAI,CAAA,GAAI,EAAE,CAAC,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,IAAIA,SAAAA,CAAU,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA,EAAI,CAAA,GAAI,EAAE,CAAC,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,IAAIA,SAAAA,CAAU,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA,EAAI,CAAA,GAAI,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,IAAIA,SAAAA,CAAU,IAAA,CAAK,SAAS,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,GAAG,CAAC,CAAA;AAClE,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAI,GAAG,CAAC,IAAI,EAAA,IAAM,cAAA;AAClE,EAAA,MAAM,sBAAsB,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,CAAA,GAAI,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,qBAAqB,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,CAAA,GAAI,GAAG,CAAC,CAAA;AAC/D,EAAA,MAAM,eAAA,GAAkB,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAI,GAAG,CAAC,IAAI,EAAA,IAAM,aAAA;AACtE,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAI,GAAG,CAAC,IAAI,EAAA,IAAM,aAAA;AACjE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,CAAA,GAAI,GAAG,CAAA,KAAM,CAAA;AAEjC,EAAA,MAAM,gBAAA,GAAmB,MAAM,gBAAA,CAAiB,UAAA,EAAY,YAAY,CAAA;AAExE,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,IACtB,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,IAC1B,QAAA,EAAU,SAAS,QAAA,EAAS;AAAA,IAC5B,WAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,EAAU,WAAA;AAAA,IACV,gBAAA;AAAA,IACA,WAAA,EAAa,gBAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAE,CAAC,CAAA,EAAG,mBAAmB,CAAA;AAC3H,EAAA,MAAM,WAAA,GAAc,MAAM,mBAAA,CAAoB,UAAA,EAAY,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAE,CAAC,CAAA,EAAG,kBAAkB,CAAA;AAExH,EAAA,OAAO,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAY;AAC5C;AAIA,eAAe,uBAAA,CACb,OAAA,EACA,SAAA,EACA,cAAA,EACA,KAAA,EACkC;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,CAAC,GAAG,CAAA,GAAI,kBAAA,CAAmB,cAAA,EAAgB,OAAO,SAAS,CAAA;AACjE,IAAA,MAAM,IAAI,MAAO,OAAA,CAAQ,OAAA,CAAgB,YAAA,CAAa,MAAM,GAAG,CAAA;AAC/D,IAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,MAAM,EAAE,CAAC,CAAA;AACzC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,QAAA,EAAS;AAAA,MACxB,MAAA,EAAS,UAAU,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAAA,MAC9D,gBAAA,EAAkB,CAAA,CAAE,gBAAA,CAAiB,QAAA,KAAa,EAAA,IAAM,aAAA;AAAA,MACxD,kBAAkB,CAAA,CAAE,gBAAA;AAAA,MACpB,mBAAA,EAAqB,CAAA,CAAE,mBAAA,CAAoB,QAAA,KAAa,EAAA,IAAM;AAAA,KAChE;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,eAAe,sBAAA,CACb,OAAA,EACA,SAAA,EACA,cAAA,EACA,KAAA,EACiC;AACjC,EAAA,IAAI;AACF,IAAA,MAAM,CAAC,GAAG,CAAA,GAAI,iBAAA,CAAkB,cAAA,EAAgB,OAAO,SAAS,CAAA;AAChE,IAAA,MAAM,IAAI,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,GAAG,CAAA;AAC9D,IAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,MAAM,EAAE,CAAC,CAAA;AACzC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,QAAA,EAAS;AAAA,MACxB,MAAA,EAAS,UAAU,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAAA,MAC9D,iBAAA,EAAmB,CAAA,CAAE,iBAAA,CAAkB,QAAA,KAAa,EAAA,IAAM,cAAA;AAAA,MAC1D,iBAAiB,CAAA,CAAE,eAAA;AAAA,MACnB,qBAAA,EAAuB,CAAA,CAAE,qBAAA,CAAsB,QAAA,KAAa,EAAA,IAAM;AAAA,KACpE;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,eAAe,oBAAA,CACb,UAAA,EACA,SAAA,EACA,cAAA,EACA,KAAA,EACkC;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,CAAC,GAAG,CAAA,GAAI,kBAAA,CAAmB,cAAA,EAAgB,OAAO,SAAS,CAAA;AACjE,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,cAAA,CAAe,GAAG,CAAA;AAChD,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,MAAM,IAAI,IAAA,CAAK,IAAA;AACf,IAAA,MAAM,EAAA,GAAK,CAAA;AACX,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,eAAA,CAAgB,EAAE,CAAC,CAAA;AAAA,MACnC,QAAQ,UAAA,CAAW,CAAA,CAAE,EAAA,GAAK,CAAC,CAAC,CAAA,IAAK,MAAA;AAAA,MACjC,gBAAA,EAAkB,OAAO,CAAA,CAAE,eAAA,CAAgB,KAAK,CAAC,CAAC,IAAI,EAAA,IAAM,aAAA;AAAA,MAC5D,gBAAA,EAAkB,CAAA,CAAE,YAAA,CAAa,EAAA,GAAK,EAAE,CAAA;AAAA,MACxC,mBAAA,EAAqB,OAAO,CAAA,CAAE,eAAA,CAAgB,KAAK,EAAE,CAAC,IAAI,EAAA,IAAM;AAAA,KAClE;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,eAAe,mBAAA,CACb,UAAA,EACA,SAAA,EACA,cAAA,EACA,KAAA,EACiC;AACjC,EAAA,IAAI;AACF,IAAA,MAAM,CAAC,GAAG,CAAA,GAAI,iBAAA,CAAkB,cAAA,EAAgB,OAAO,SAAS,CAAA;AAChE,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,cAAA,CAAe,GAAG,CAAA;AAChD,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,MAAM,IAAI,IAAA,CAAK,IAAA;AACf,IAAA,MAAM,EAAA,GAAK,CAAA;AACX,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,eAAA,CAAgB,EAAE,CAAC,CAAA;AAAA,MACnC,QAAQ,UAAA,CAAW,CAAA,CAAE,EAAA,GAAK,CAAC,CAAC,CAAA,IAAK,MAAA;AAAA,MACjC,iBAAA,EAAmB,OAAO,CAAA,CAAE,eAAA,CAAgB,KAAK,CAAC,CAAC,IAAI,EAAA,IAAM,cAAA;AAAA,MAC7D,eAAA,EAAiB,CAAA,CAAE,YAAA,CAAa,EAAA,GAAK,EAAE,CAAA;AAAA,MACvC,qBAAA,EAAuB,OAAO,CAAA,CAAE,eAAA,CAAgB,KAAK,EAAE,CAAC,IAAI,EAAA,IAAM;AAAA,KACpE;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAiBA,eAAsB,gBAAA,CACpB,UAAA,EACA,SAAA,EACA,IAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,UAAA,CAAW,cAAA,EAAgB,MAAM,SAAS,CAAA;AAE5D,EAAA,IAAI,CAAC,OAAA,EAAS;AAGZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,OAAO,CAAA;AAAA,EACxE,SAAS,GAAA,EAAc;AAErB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,CAAO,QAAA,KAAa,EAAA,IAAM,cAAA;AACrD,EAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,kBAAA,CAAmB,QAAA,KAAa,EAAA,IAAM,aAAA;AAC7E,EAAA,MAAM,mBAAA,GAAsB,WAAA,CAAY,mBAAA,CAAoB,QAAA,EAAS;AACrE,EAAA,MAAM,mBAAA,GAAsB,WAAA,CAAY,mBAAA,CAAoB,QAAA,KAAa,EAAA,IAAM,cAAA;AAC/E,EAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,kBAAA,CAAmB,QAAA,EAAS;AACnE,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,aAAA,CAAc,QAAA,KAAa,EAAA,IAAM,aAAA;AAGnE,EAAA,MAAM,YAAY,MAAM,uBAAA;AAAA,IACtB,UAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,UAAU,CAAA;AAAA,MAC5C,aAAA,EAAe,MAAA,CAAO,WAAA,CAAY,aAAA,CAAc,UAAU,CAAA;AAAA,MAC1D,kBAAA,EAAoB,MAAA,CAAO,WAAA,CAAY,kBAAA,CAAmB,UAAU,CAAA;AAAA,MACpE,mBAAA;AAAA,MACA,mBAAA,EAAqB,MAAA,CAAO,WAAA,CAAY,mBAAA,CAAoB,UAAU,CAAA;AAAA,MACtE;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA,EAAiB,MAAA,CAAO,SAAA,CAAU,MAAM,IAAI,EAAA,IAAM,cAAA;AAAA,IAClD,sBAAA,EAAwB,MAAA,CAAO,SAAA,CAAU,aAAa,IAAI,EAAA,IAAM;AAAA,GAClE;AACF;AAkBA,eAAe,uBAAA,CACb,UAAA,EACA,SAAA,EACA,OAAA,EACA,gBACA,GAAA,EACoD;AACpD,EAAA,IAAI,SAAS,GAAA,CAAI,MAAA;AACjB,EAAA,IAAI,gBAAgB,GAAA,CAAI,aAAA;AAGxB,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAAA,EAC9E,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AAAA,IACjC;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AAEA,EAAA,MAAM,mBAAA,GAAsB,UAAA,CAAW,mBAAA,CAAoB,QAAA,EAAS;AACpE,EAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,kBAAA,CAAmB,QAAA,EAAS;AAGlE,EAAA,IAAI,GAAA,CAAI,kBAAA,GAAqB,EAAA,IAAM,GAAA,CAAI,wBAAwB,mBAAA,EAAqB;AAClF,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,GAAG,CAAA,GAAI,mBAAmB,cAAA,EAAgB,GAAA,CAAI,qBAAqB,SAAS,CAAA;AACnF,MAAA,MAAM,QAAQ,MAAO,OAAA,CAAQ,OAAA,CAAgB,YAAA,CAAa,MAAM,GAAG,CAAA;AACnE,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,UAAU,CAAA;AAC7D,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,mBAAA,CAAoB,UAAU,CAAA;AAChE,QAAA,IAAI,eAAe,EAAA,EAAI;AACrB,UAAA,MAAA,IAAW,GAAA,CAAI,qBAAqB,YAAA,GAAgB,YAAA;AAAA,QACtD;AAAA,MACF,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAQ;AACjC,QAAA,aAAA,IAAiB,GAAA,CAAI,kBAAA;AAAA,MACvB;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C,CAEH,MAAO;AACL,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,GAAA,CAAI,mBAAA,GAAsB,EAAA,IAAM,GAAA,CAAI,uBAAuB,kBAAA,EAAoB;AACjF,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,GAAG,CAAA,GAAI,kBAAkB,cAAA,EAAgB,GAAA,CAAI,oBAAoB,SAAS,CAAA;AACjF,MAAA,MAAM,QAAQ,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,GAAG,CAAA;AAClE,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,iBAAA,CAAkB,UAAU,CAAA;AAC7D,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,qBAAA,CAAsB,UAAU,CAAA;AACpE,QAAA,IAAI,cAAc,EAAA,EAAI;AACpB,UAAA,aAAA,IAAkB,GAAA,CAAI,sBAAsB,cAAA,GAAkB,WAAA;AAAA,QAChE;AAAA,MACF,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAQ;AACjC,QAAA,MAAA,IAAU,GAAA,CAAI,mBAAA;AAAA,MAChB;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C,CAEH,MAAO;AACL,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AACjC;AAgBA,eAAsB,8BAAA,CACpB,OAAA,EACA,SAAA,EACA,cAAA,EACA,OAAA,EAC0E;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,cAAc,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,OAAO,CAAA;AAC5E,IAAA,MAAM,mBAAA,GAAsB,WAAA,CAAY,mBAAA,CAAoB,QAAA,EAAS;AACrE,IAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,kBAAA,CAAmB,QAAA,EAAS;AACnE,IAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,kBAAA,CAAmB,QAAA,EAAS,GAAI,CAAA;AACtE,IAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,mBAAA,CAAoB,QAAA,EAAS,GAAI,CAAA;AAEtE,IAAA,IAAI,CAAC,iBAAA,IAAqB,CAAC,gBAAA,SAAyB,EAAC;AAErD,IAAA,MAAM,WAA4E,EAAC;AAEnF,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,CAAC,GAAG,CAAA,GAAI,kBAAA,CAAmB,cAAA,EAAgB,qBAAqB,SAAS,CAAA;AAC/E,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAA,EAAK,YAAY,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AAAA,IACnE;AAEA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,CAAC,GAAG,CAAA,GAAI,iBAAA,CAAkB,cAAA,EAAgB,oBAAoB,SAAS,CAAA;AAC7E,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAA,EAAK,YAAY,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AAAA,IACnE;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,GAAA,EAAc;AAErB,IAAA,IAAI,GAAA,YAAe,KAAA,KACjB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,IAC7C,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,wBAAwB,CAAA,CAAA,EAC5C;AACD,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,gBAAA,CACb,YACA,YAAA,EACiB;AACjB,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,sBAAA,CAAuB,YAAY,CAAA;AACjE,IAAA,OAAO,IAAA,CAAK,MAAM,QAAA,IAAY,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,CAAA;AAAA,EACT;AACF;;;ACxgBA,IAAM,oBAAA,GAAuB,GAAA;AAG7B,IAAM,yBAAA,GAA4B,CAAA;AAGlC,IAAM,wBAAA,GAA2B,GAAA;AAM1B,IAAM,kBAAN,MAAsB;AAAA;AAAA,EAElB,UAAA;AAAA,EAED,IAAA,GAA8B,IAAA;AAAA,EAC9B,QAAA,GAAW,CAAA;AAAA;AAAA,EAGX,YAAA,GAAe,CAAA;AAAA,EACN,gBAAA;AAAA,EACT,eAAA,GAAkB,CAAA;AAAA,EACT,cAAA;AAAA,EAEjB,YAAY,IAAA,EAIT;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,UAAA,IAAc,oBAAA;AACtC,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAM,gBAAA,IAAoB,yBAAA;AAClD,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAM,cAAA,IAAkB,wBAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,MAAA,EAAwC;AAC1C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,QAAA;AAC9B,IAAA,MAAM,SAAA,GAAY,UAAU,IAAA,CAAK,UAAA;AACjC,IAAA,IAAI,GAAA,GAAM,WAAW,OAAO,IAAA;AAC5B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,IAAA,EAA4B;AAC9B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,GAAA,EAAI;AAAA,EAC3B;AAAA;AAAA,EAGA,aAAA,GAAyB;AACvB,IAAA,IAAI,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,gBAAA,EAAkB,OAAO,KAAA;AAEtD,IAAA,IAAI,KAAK,GAAA,EAAI,GAAI,IAAA,CAAK,eAAA,IAAmB,KAAK,cAAA,EAAgB;AAE5D,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,YAAA,IAAgB,CAAA;AACrB,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,gBAAA,EAAkB;AAC9C,MAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,GAAA,EAAI;AAAA,IAClC;AAAA,EACF;AAAA;AAAA,EAGA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,IAAA,IAAA,CAAK,eAAA,GAAkB,CAAA;AAAA,EACzB;AACF;AAGO,IAAM,eAAA,GAAkB,IAAI,eAAA;;;ACxEnC,IAAM,oBAAA,GAAuB,GAAA;AAiB7B,eAAsB,gBACpB,OAAA,EACyB;AAEzB,EAAA,MAAM,IAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GAAW,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,OAAA,IAAW,EAAC;AAClE,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,mBAAA;AAG9B,EAAA,MAAM,MAAA,GAAS,gBAAgB,GAAA,EAAI;AACnC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,OAAO,KAAA,EAAM;AAAA,EACpD;AAGA,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAA,EAAc,EAAG;AACpC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,MAAM,CAAA;AACtC,MAAA,eAAA,CAAgB,IAAI,IAAI,CAAA;AACxB,MAAA,eAAA,CAAgB,aAAA,EAAc;AAC9B,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAM;AAAA,IAClC,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,CAAgB,aAAA,EAAc;AAAA,IAChC;AAAA,EACF;AAGA,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA;AAC1C,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,OAAO,IAAA,EAAK;AAAA,EAClD;AAGA,EAAA,MAAM,IAAI,2BAA2B,6BAA6B,CAAA;AACpE;AAKA,eAAe,aAAa,MAAA,EAAyC;AACnE,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,oBAAoB,CAAA;AAEvE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,EAAQ,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA;AAAA,EACzD,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,0BAAA;AAAA,MACR,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU;AAAA,KACvC;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,0BAAA,CAA2B,CAAA,kBAAA,EAAqB,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EACxE;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,2BAA2B,uBAAuB,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,UAAA,EAAY;AACrC,IAAA,MAAM,IAAI,2BAA2B,gCAAgC,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAY,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,0BAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,KAAK,UAAU,CAAA;AAAA,KAC9C;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,UAAA;AAAA,IACZ,QAAA;AAAA,IACA,GAAA,EAAK,KAAK,GAAA,IAAO,GAAA;AAAA,IACjB,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA;AAAY,GACtD;AACF;AC9EA,SAAS,oBAAoB,IAAA,EAAsB;AACjD,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CACvB,MAAA,CAAO,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA,CACvB,MAAA,EAAO,CACP,QAAA,CAAS,CAAA,EAAG,CAAC,CAAA;AAClB;AAGA,IAAM,cAAA,GAAkG;AAAA,EACtG,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,oBAAoB,SAAS,CAAA;AAAA,IACnC,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,oBAAoB,gBAAgB,CAAA;AAAA,IAC1C,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,oBAAoB,OAAO,CAAA;AAAA,IACjC,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,oBAAoB,gBAAgB,CAAA;AAAA,IAC1C,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAA;AAEA,IAAM,qBAAA,GAAwB,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA;AAW1D,SAAS,oBAAoB,MAAA,EAG3B;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EAC7C;AAEA,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,CAAS,CAAA,EAAG,CAAC,CAAC,CAAA;AAChD,EAAA,KAAA,MAAW,SAAS,qBAAA,EAAuB;AACzC,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,MAAM,KAAA,EAAM;AAAA,IAChD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAC7C;AAiBA,eAAsB,uBAAA,CACpB,UAAA,EACA,OAAA,EACA,SAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,EAAA;AAGhC,EAAA,MAAM,UAAA,GAAa,MAAM,UAAA,CAAW,uBAAA,CAAwB,OAAA,EAAS;AAAA,IACnE,KAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GAClB,CAAA;AAED,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAC;AAAA,EACV;AAGA,EAAA,MAAM,aAAa,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,qBAAA,CAAsB,UAAA,EAAY;AAAA,IACnE,8BAAA,EAAgC;AAAA,GACjC,CAAA;AAGD,EAAA,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AACpC,IAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,IAAA,IAAI,IAAA,GAAiC,SAAA;AACrC,IAAA,IAAI,WAAA,GAAc,mBAAA;AAElB,IAAA,IAAI,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,YAAA,EAAc;AAE9C,MAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,YAAA,EAAc;AAExD,QAAA,IAAI,UAAU,EAAA,IAAM,EAAA,CAAG,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,EAAG;AAClD,UAAA,IAAI;AACF,YAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,EAAA,CAAG,IAAc,CAAC,CAAA;AACvD,YAAA,MAAM,UAAA,GAAa,oBAAoB,IAAI,CAAA;AAC3C,YAAA,IAAA,GAAO,UAAA,CAAW,IAAA;AAClB,YAAA,WAAA,GAAc,UAAA,CAAW,KAAA;AAAA,UAC3B,CAAA,CAAA,MAAQ;AAAA,UAER;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,IAAA,KAAS,SAAA,IAAa,MAAA,CAAO,IAAA,EAAM,iBAAA,EAAmB;AACxD,QAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,iBAAA,EAAmB;AACjD,UAAA,KAAA,MAAW,EAAA,IAAM,MAAM,YAAA,EAAc;AACnC,YAAA,IAAI,UAAU,EAAA,IAAM,EAAA,CAAG,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,EAAG;AAClD,cAAA,IAAI;AACF,gBAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,EAAA,CAAG,IAAc,CAAC,CAAA;AACvD,gBAAA,MAAM,UAAA,GAAa,oBAAoB,IAAI,CAAA;AAC3C,gBAAA,IAAA,GAAO,UAAA,CAAW,IAAA;AAClB,gBAAA,WAAA,GAAc,UAAA,CAAW,KAAA;AAAA,cAC3B,CAAA,CAAA,MAAQ;AAAA,cAER;AACA,cAAA,IAAI,SAAS,SAAA,EAAW;AAAA,YAC1B;AAAA,UACF;AACA,UAAA,IAAI,SAAS,SAAA,EAAW;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,IAAI,GAAA,EAAK;AACX,MAAA,WAAA,GAAc,WAAW,WAAW,CAAA,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO;AAAA,MACL,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,IAAA;AAAA,MACA,SAAA,EAAW,IAAI,SAAA,IAAa,CAAA;AAAA,MAC5B,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAA,EAAS,IAAI,GAAA,KAAQ,IAAA;AAAA,MACrB;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;;;AC1LO,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAcA,eAAsB,WAAA,CACpB,OAAA,EACA,EAAA,EACA,KAAA,EACY;AACZ,EAAA,IAAI,MAAM,CAAA,IAAK,CAAC,OAAO,QAAA,CAAS,EAAE,GAAG,OAAO,OAAA;AAE5C,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,EAAE,CAAA;AAErD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,MAChC,OAAA;AAAA,MACA,IAAI,OAAA,CAAe,CAAC,CAAA,EAAG,MAAA,KAAW;AAChC,QAAA,UAAA,CAAW,MAAA,CAAO,gBAAA;AAAA,UAAiB,OAAA;AAAA,UAAS,MAC1C,MAAA,CAAO,IAAI,eAAA,CAAgB,KAAA,EAAO,EAAE,CAAC;AAAA,SACvC;AAAA,MACF,CAAC;AAAA,KACF,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;AAmCA,eAAsB,4BACpB,IAAA,EACe;AACf,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,EAAW,UAAA;AAAA,IACX,oBAAA;AAAA,IACA,UAAA,GAAa,WAAA;AAAA,IACb,SAAA,GAAY,GAAA;AAAA,IACZ,iBAAA,GAAoB;AAAA,GACtB,GAAI,IAAA;AAEJ,EAAA,MAAM,iBAAA,GAAoB,CAAC,WAAA,EAAa,WAAA,EAAa,WAAW,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,OAAA,CAAQ,UAA8C,CAAA;AAC7F,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,IAAI,QAAA,GAAW,iBAAA;AACf,EAAA,MAAM,YAAA,GAAe,GAAA;AAErB,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,GAAQ,SAAA,EAAW;AAErC,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,cAAA,EAAe;AACpD,MAAA,IAAI,cAAc,oBAAA,EAAsB;AACtC,QAAA,MAAM,IAAI,wBAAwB,SAAS,CAAA;AAAA,MAC7C;AAAA,IACF,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAI,GAAA,YAAe,yBAAyB,MAAM,GAAA;AAAA,IACpD;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAM,GAAI,MAAM,WAAW,oBAAA,CAAqB,CAAC,SAAS,CAAC,CAAA;AACnE,MAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AAExB,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,MAAM,IAAI,sBAAA,CAAuB,SAAA,EAAW,MAAA,CAAO,GAAG,CAAA;AAAA,MACxD;AAEA,MAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,QAAA,MAAM,cAAc,iBAAA,CAAkB,OAAA;AAAA,UACpC,MAAA,CAAO;AAAA,SACT;AACA,QAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAI,GAAA,YAAe,wBAAwB,MAAM,GAAA;AAAA,IAEnD;AAEA,IAAA,MAAM,MAAM,QAAQ,CAAA;AACpB,IAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,GAAW,GAAA,EAAK,YAAY,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,IAAI,eAAA,CAAgB,oBAAA,EAAsB,SAAS,CAAA;AAC3D;;;ACrGA,eAAe,UAAA,CACb,EAAA,EACA,OAAA,EACA,QAAA,EACA,YAAoB,sBAAA,EACwF;AAC5G,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,CAAS,UAAA;AACpC,EAAA,MAAM,EAAE,SAAA,EAAW,oBAAA,EAAqB,GAAI,MAAM,WAAA;AAAA,IAChD,WAAW,kBAAA,EAAmB;AAAA,IAC9B,SAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,EAAA,CAAG,eAAA,GAAkB,SAAA;AACrB,EAAA,EAAA,CAAG,oBAAA,GAAuB,oBAAA;AAC1B,EAAA,EAAA,CAAG,QAAA,GAAW,QAAA;AACd,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAYC,KAAK,MAAA,CAAO,EAAA,CAAG,UAAU,EAAE,oBAAA,EAAsB,KAAA,EAAO,CAAC,CAAA;AAAA,IACrE,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAOA,SAAS,UAAU,MAAA,EAAoB;AACrC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA;AACxC,EAAA,MAAM,CAAC,KAAA,EAAO,IAAA,GAAO,EAAE,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,eAAe,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AAC1E,EAAA,OAAO,IAAI,GAAG,GAAG,CAAA;AACnB;AAMA,SAAS,YAAY,MAAA,EAAoB;AACvC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,IAAA,GAAO,EAAE,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,gBAAgB,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,cAAc,CAAA;AAC5E,EAAA,OAAO,IAAI,GAAG,GAAG,CAAA;AACnB;AAmBA,eAAsB,cAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,MAAA;AAC7B,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,CAAgB,gBAAgB,SAAS,CAAA;AAChE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,UAAA,CAAW,cAAA,EAAgB,MAAM,SAAS,CAAA;AAG5D,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI;AACF,IAAA,kBAAA,GAAqB,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAAA,EACtF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,iCAAA,EAAmC,GAAG,CAAA;AAAA,EAC3D;AAGA,EAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,IAAA,MAAM,IAAI,gBAAA,EAAiB;AAAA,EAC7B;AAEA,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,QAAA,KAAa,EAAA,IAAM,aAAA;AACpE,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,MAAM,IAAI,gBAAgB,UAAU,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,mBAAA,GAAsB,kBAAA,CAAmB,mBAAA,CAAoB,QAAA,EAAS;AAC5E,EAA2B,kBAAA,CAAmB,kBAAA,CAAmB,QAAA;AACjE,EAAA,MAAM,CAAC,eAAe,CAAA,GAAI,kBAAA,CAAmB,cAAA,EAAgB,qBAAqB,SAAS,CAAA;AAG3F,EAAA,IAAI;AACF,IAAA,MAAM,eAAe,MAAO,OAAA,CAAQ,OAAA,CAAgB,YAAA,CAAa,MAAM,eAAe,CAAA;AACtF,IAAA,IAAI,EAAE,MAAA,IAAU,YAAA,CAAa,MAAA,CAAA,EAAS;AACpC,MAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,aAAa,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AACzD,MAAA,MAAM,IAAI,iBAAA,CAAkB,SAAA,EAAW,SAAS,CAAA;AAAA,IAClD;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,GAAA,YAAe,mBAAmB,MAAM,GAAA;AAAA,EAE9C;AAEA,EAAA,MAAM,WAAsB,kBAAA,CAAmB,QAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,MAAM,yBAAA,CAA0B,QAAA,EAAU,MAAM,IAAI,CAAA;AACrE,EAAA,MAAM,QAAA,GAAW,UAAU,UAAU,CAAA;AAGrC,EAAA,MAAM,oBAAoB,MAAM,8BAAA;AAAA,IAC9B,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,KAAK,MAAM,OAAA,CAAQ,QACtB,OAAA,CAAQ,QAAQ,EAChB,QAAA,CAAS;AAAA,IACR,IAAA;AAAA,IACA,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,OAAA;AAAA,IACb,YAAA,EAAc,eAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAA,EAAW,YAAA;AAAA,IACX,QAAA;AAAA,IACA,YAAA,EAAc,gBAAA;AAAA,IACd,eAAe,aAAA,CAAc;AAAA,GAC9B,CAAA,CACA,iBAAA,CAAkB,iBAAiB,EACnC,WAAA,EAAY;AAEf,EAAA,MAAM,YAAY,MAAM,UAAA,CAAW,IAAI,OAAA,EAAS,IAAA,EAAM,SAAS,SAAS,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,OAAA,EAAS,CAAA,QAAA,EAAW,UAAU,CAAA,+BAAA,EAAkC,mBAAmB,CAAA,CAAA;AAAA,GACrF;AACF;AAeA,eAAsB,aAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AACzB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,UAAA,CAAW,cAAA,EAAgB,MAAM,SAAS,CAAA;AAE5D,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI;AACF,IAAA,kBAAA,GAAqB,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAAA,EACtF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,gCAAA,EAAkC,GAAG,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,IAAA,MAAM,IAAI,gBAAA,EAAiB;AAAA,EAC7B;AAEA,EAA4B,kBAAA,CAAmB,mBAAA,CAAoB,QAAA;AACnE,EAAA,MAAM,kBAAA,GAAqB,kBAAA,CAAmB,kBAAA,CAAmB,QAAA,EAAS;AAC1E,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,cAAA,EAAgB,oBAAoB,SAAS,CAAA;AAGxF,EAAA,IAAI;AACF,IAAA,MAAM,eAAe,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AACpF,IAAA,IAAI,EAAE,MAAA,IAAU,YAAA,CAAa,MAAA,CAAA,EAAS;AACpC,MAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,aAAa,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AACzD,MAAA,MAAM,IAAI,iBAAA,CAAkB,QAAA,EAAU,SAAS,CAAA;AAAA,IACjD;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,GAAA,YAAe,mBAAmB,MAAM,GAAA;AAAA,EAE9C;AAEA,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM,CAAA;AAEnC,EAAA,MAAM,oBAAoB,MAAM,8BAAA;AAAA,IAC9B,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,KAAK,MAAM,OAAA,CAAQ,QACtB,aAAA,CAAc,QAAQ,EACtB,QAAA,CAAS;AAAA,IACR,IAAA;AAAA,IACA,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,OAAA;AAAA,IACb,WAAA,EAAa,cAAA;AAAA,IACb,eAAe,aAAA,CAAc;AAAA,GAC9B,CAAA,CACA,iBAAA,CAAkB,iBAAiB,EACnC,WAAA,EAAY;AAEf,EAAA,MAAM,YAAY,MAAM,UAAA,CAAW,IAAI,OAAA,EAAS,IAAA,EAAM,SAAS,SAAS,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,OAAA,EAAS,CAAA,kBAAA,EAAqB,MAAM,CAAA,sBAAA,EAAyB,kBAAkB,CAAA,CAAA;AAAA,GACjF;AACF;AAYA,eAAsB,YAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,CAAgB,gBAAgB,SAAS,CAAA;AAChE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,UAAA,CAAW,cAAA,EAAgB,MAAM,SAAS,CAAA;AAE5D,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI;AACF,IAAA,kBAAA,GAAqB,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAAA,EACtF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,+BAAA,EAAiC,GAAG,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,WAAsB,kBAAA,CAAmB,QAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,MAAM,yBAAA,CAA0B,QAAA,EAAU,MAAM,IAAI,CAAA;AAErE,EAAA,MAAM,oBAAoB,MAAM,8BAAA;AAAA,IAC9B,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,KAAK,MAAM,OAAA,CAAQ,OAAA,CACtB,KAAA,GACA,QAAA,CAAS;AAAA,IACR,IAAA;AAAA,IACA,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,OAAA;AAAA,IACb,QAAA;AAAA,IACA,SAAA,EAAW,YAAA;AAAA,IACX,YAAA,EAAc;AAAA,GACf,CAAA,CACA,iBAAA,CAAkB,iBAAiB,EACnC,WAAA,EAAY;AAEf,EAAA,MAAM,YAAY,MAAM,UAAA,CAAW,IAAI,OAAA,EAAS,IAAA,EAAM,SAAS,SAAS,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AACF;AAWA,eAAsB,oBAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,CAAC,cAAc,CAAA,GAAI,iBAAA,CAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,CAAgB,gBAAgB,SAAS,CAAA;AAChE,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,UAAA,CAAW,cAAA,EAAgB,MAAM,SAAS,CAAA;AAE5D,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI;AACF,IAAA,kBAAA,GAAqB,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,MAAM,cAAc,CAAA;AAAA,EACtF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,uCAAA,EAAyC,GAAG,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,WAAsB,kBAAA,CAAmB,QAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,MAAM,yBAAA,CAA0B,QAAA,EAAU,MAAM,IAAI,CAAA;AAErE,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,MAAO,OAAA,CAAQ,OAAA,CAAgB,WAAA,CAAY,cAAc,OAAO,CAAA;AAAA,EAChF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAS,uCAAA,EAAyC,GAAG,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,qBAAA,EAAsB;AAAA,EAClC;AAGA,EAAA,IAAI,YAAY,kBAAA,IAAsB,WAAA,CAAY,kBAAA,CAAmB,QAAA,OAAe,CAAA,EAAG;AACrF,IAAA,MAAM,IAAI,qBAAA,EAAsB;AAAA,EAClC;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,mBAAA,CAAoB,QAAA,EAAS;AACjE,EAAA,MAAM,CAAC,eAAe,CAAA,GAAI,kBAAA,CAAmB,cAAA,EAAgB,iBAAiB,SAAS,CAAA;AAEvF,EAAA,MAAM,oBAAoB,MAAM,8BAAA;AAAA,IAC9B,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,KAAK,MAAM,OAAA,CAAQ,OAAA,CACtB,aAAA,GACA,QAAA,CAAS;AAAA,IACR,IAAA;AAAA,IACA,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,OAAA;AAAA,IACb,YAAA,EAAc,eAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAA,EAAW,YAAA;AAAA,IACX,YAAA,EAAc;AAAA,GACf,CAAA,CACA,iBAAA,CAAkB,iBAAiB,EACnC,WAAA,EAAY;AAEf,EAAA,MAAM,YAAY,MAAM,UAAA,CAAW,IAAI,OAAA,EAAS,IAAA,EAAM,SAAS,SAAS,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AACF;;;ACjZA,IAAA,4BAAA,GAAA;AAAA,EACE,OAAA,EAAW,8CAAA;AAAA,EACX,QAAA,EAAY;AAAA,IACV,IAAA,EAAQ,eAAA;AAAA,IACR,OAAA,EAAW,OAAA;AAAA,IACX,IAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAe;AAAA,GACjB;AAAA,EACA,YAAA,EAAgB;AAAA,IACd;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,oCAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,mDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,oCAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,8DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,6DAAA;AAAA,QACA,mCAAA;AAAA,QACA,0EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,uBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,oCAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,wBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,oBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,mDAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,qBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,4DAAA;AAAA,QACA,kCAAA;AAAA,QACA,yEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,sBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,mCAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,uBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,kDAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA,CAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,gBAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,mBAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,wFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,YAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN;AAAA,WACF;AAAA,UACA,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAQ,mCAAA;AAAA,gBACR,OAAA,EAAW;AAAA;AACb;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,kEAAA;AAAA,QACA,0EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,qDAAA;AAAA,QACA,sEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,MAAQ;AAAC,KACX;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,aAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,oEAAA;AAAA,QACA,oCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,wEAAA;AAAA,QACA,oCAAA;AAAA,QACA,kEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY,IAAA;AAAA,UACZ,GAAA,EAAO;AAAA,YACL,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ,OAAA;AAAA,gBACR,KAAA,EAAS;AAAA,kBACP,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,EAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA,GAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAQ,cAAA;AAAA,UACR,QAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAQ,kBAAA;AAAA,UACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAY;AAAA,IACV;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,aAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,MAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAQ,aAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,+BAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,8BAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,gBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,aAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,yBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,wBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,KAAA,EAAS;AAAA,IACP;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,cAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,+EAAA;AAAA,QACA,oEAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,sBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,oBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,iGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,MAAA;AAAA,QACR,QAAA,EAAY;AAAA,UACV;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,wBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,6EAAA;AAAA,QACA,mEAAA;AAAA,QACA,EAAA;AAAA,QACA,0EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,cACN,OAAA,EAAW;AAAA,gBACT,IAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,0BAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,qBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,uBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,iBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,mBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,iBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,yDAAA;AAAA,QACA,mDAAA;AAAA,QACA,EAAA;AAAA,QACA,wDAAA;AAAA,QACA,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,kBAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,yDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,uBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,sBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,IAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,IAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AAEJ,CAAA;;;AC3xFO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA;AAAA,EAEb,UAAA;AAAA;AAAA,EAEA,OAAA;AAAA;AAAA,EAEA,SAAA;AAAA,EAEQ,MAAA;AAAA;AAAA,EAEA,QAAA,uBAAe,GAAA,EAAqB;AAAA;AAAA,EAEpC,gBAAA,uBAAuB,GAAA,EAAoB;AAAA;AAAA,EAE5D,OAAwB,oBAAA,GAAuB,CAAA,GAAI,EAAA,GAAK,GAAA;AAAA,EAExD,YAAY,OAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,sBAAA;AACtC,IAAA,IAAA,CAAK,aAAa,IAAI,UAAA;AAAA,MACpB,OAAA,CAAQ,MAAA,IAAU,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA;AAAA,MAClD;AAAA,QACE,UAAA,EAAY,WAAA;AAAA,QACZ,kCAAkC,IAAA,CAAK;AAAA;AACzC,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,UAAA,GAAyC;AAE7C,IAAA,OAAO,iBAAA,CAAkB,KAAK,OAAO,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAa,OAAA,EAA4C;AAC7D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,UAAA,EAAY,MAAA,CAAO,WAAW,OAAO,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,cAAA,CACJ,IAAA,EACA,OAAA,EAC6B;AAC7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,MAAM,SAAS,OAAO,IAAA,KAAS,WAAW,IAAID,SAAAA,CAAU,IAAI,CAAA,GAAI,IAAA;AAChE,IAAA,OAAO,iBAAiB,IAAA,CAAK,UAAA,EAAY,MAAA,CAAO,SAAA,EAAW,QAAQ,OAAO,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,cAAc,OAAA,EAA2C;AAC7D,IAAA,IAAI,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACtC,IAAA,OAAO,eAAA,EAAgB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,YAAA,CACJ,MAAA,EACA,OAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,OAAO,eAAe,OAAA,EAAS,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAA,CACJ,MAAA,EACA,OAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,OAAO,cAAc,OAAA,EAAS,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,OAAO,aAAa,OAAA,EAAS,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACtC,IAAA,OAAO,qBAAqB,OAAA,EAAS,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,qBAAA,CACJ,WAAA,EACA,OAAA,EACA,OAAA,EAC6B;AAC7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACxC,IAAA,MAAM,SACJ,OAAO,WAAA,KAAgB,WACnB,IAAIA,SAAAA,CAAU,WAAW,CAAA,GACzB,WAAA;AAGN,IAAA,MAAM,CAAC,WAAW,CAAA,GAAI,iBAAA,CAAkB,OAAO,SAAS,CAAA;AACxD,IAAA,MAAM,CAAC,OAAO,CAAA,GAAI,WAAW,WAAA,EAAa,MAAA,EAAQ,OAAO,SAAS,CAAA;AAElE,IAAA,OAAO,uBAAA;AAAA,MACL,IAAA,CAAK,UAAA;AAAA,MACL,OAAA;AAAA,MACA,MAAA,CAAO,SAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,eAAe,UAAA,EAA4C;AAC/D,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,EAAc;AACvC,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,CAAA,EAAG,OAAO,IAAA;AAChC,MAAA,MAAM,MAAA,GAAS,aAAa,KAAA,CAAM,QAAA;AAClC,MAAA,OAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAa,MAAA,EAAwC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,EAAc;AACvC,MAAA,MAAM,IAAA,GAAO,SAAS,KAAA,CAAM,QAAA;AAC5B,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,aAAa,OAAA,EAA+B;AAClD,IAAA,MAAM,KAAK,OAAA,IAAW,gBAAA;AACtB,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,EAAA,EAAI,IAAA,CAAK,OAAO,CAAA;AAC9C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,kBAAkB,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,WAAW,MAAA,EAA8B;AAC/C,IAAA,MAAM,MAAM,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,CAAA;AAC1C,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAGnC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA;AAC/C,IAAA,IAAI,WAAW,SAAA,IAAa,IAAA,CAAK,KAAI,GAAI,SAAA,GAAY,YAAW,oBAAA,EAAsB;AACpF,MAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AACxB,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,GAAG,CAAA;AAChC,MAAA,OAAA,GAAU,MAAA;AAAA,IACZ;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,SAAA,EAAW,OAAA,CAAQ,QAAA,EAAS,CAAE,SAAA;AAAA,QAC9B,eAAA,EAAiB,OAAO,EAAA,KAAY,EAAA;AAAA,QACpC,mBAAA,EAAqB,OAAO,GAAA,KAAe;AAAA,OAC7C;AACA,MAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,IAAA,CAAK,YAAY,WAAA,EAAoB;AAAA,QACvE,UAAA,EAAY;AAAA,OACb,CAAA;AAGD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAClC,MAAA,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAA,EAAY,QAAQ,CAAA;AAC1C,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAC9B,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAW,MAAA,EAA0B;AAG3C,IAAA,OAAO,4BAAA;AAAA,EACT;AACF;;;AC7VO,SAAS,cAAA,CAAe,OAAe,QAAA,EAA0B;AACtE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AACpC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,MAAM,CAAA,GAAI,MAAA;AACtC;AAGO,SAAS,eAAA,CAAgB,OAAe,QAAA,EAA0B;AACvE,EAAA,OAAO,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,CAAE,QAAQ,QAAQ,CAAA;AACzD;AAGO,SAAS,YAAA,CAAa,KAAA,EAAe,QAAA,GAAW,CAAA,EAAW;AAChE,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAChD,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IACpC,qBAAA,EAAuB,QAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA;AACrB;AAGO,SAAS,cAAA,CAAe,KAAA,EAAe,QAAA,GAAW,KAAA,EAAe;AACtE,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,EAAO,CAAC,CAAA;AACzC,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IACpC,KAAA,EAAO,UAAA;AAAA,IACP,QAAA;AAAA,IACA,qBAAA,EAAuB,CAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA;AACrB;AAGO,SAAS,gBAAA,CAAiB,KAAA,EAAe,QAAA,GAAW,CAAA,EAAW;AACpE,EAAA,OAAO,CAAA,EAAG,YAAA,CAAa,KAAA,EAAO,QAAQ,CAAC,CAAA,CAAA,CAAA;AACzC;AAGO,SAAS,cAAA,CAAe,OAAA,EAAiB,KAAA,GAAQ,CAAA,EAAW;AACjE,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,KAAA,GAAQ,CAAA,GAAI,GAAG,OAAO,OAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,CAAC,KAAK,CAAC,CAAA,CAAA;AAC9D;AAGO,SAAS,WAAW,GAAA,EAA8B;AACvD,EAAA,OAAO,aAAa,MAAA,CAAO,GAAG,CAAA,GAAI,EAAA,IAAM,eAAe,aAAa,CAAA;AACtE;AAGO,SAAS,aAAa,GAAA,EAA8B;AACzD,EAAA,OAAO,aAAa,MAAA,CAAO,GAAG,CAAA,GAAI,EAAA,IAAM,gBAAgB,cAAc,CAAA;AACxE;AAKO,SAAS,OAAA,CAAQ,KAAsB,QAAA,EAA0B;AACtE,EAAA,OAAO,OAAO,GAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,QAAQ,CAAA;AAC5C;AAGO,SAAS,OAAA,CAAQ,IAAY,QAAA,EAA0B;AAC5D,EAAA,OAAO,KAAK,KAAA,CAAM,EAAA,GAAK,KAAK,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAC,CAAA;AAC/C;AAoBO,SAAS,eACd,MAAA,EACA,OAAA,EACA,MAAA,EACA,KAAA,EACA,KACA,GAAA,EACkB;AAClB,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAM,CAAA;AAEnC,EAAA,IAAI,KAAA,CAAM,aAAa,CAAA,IAAK,aAAA,IAAiB,CAAA,EAAG;AAC9C,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,4CAAA,EAA6C;AAAA,EAC7E;AACA,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAE,OAAO,KAAA,EAAO,KAAA,EAAO,iBAAiB,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,EAAI;AAAA,EACrE;AACA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,aAAA,GAAgB,GAAA,EAAK;AAC5C,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,CAAA,YAAA,EAAe,MAAM,CAAA,UAAA,EAAa,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,EAAI;AAAA,EAClF;AACA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,aAAA,GAAgB,GAAA,EAAK;AAC5C,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,CAAA,aAAA,EAAgB,MAAM,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,EAAI;AAAA,EAChF;AACA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAGO,SAAS,mBAAmB,KAAA,EAAwB;AACzD,EAAA,OAAO,KAAA,KAAU,EAAA,IAAM,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACjD","file":"index.js","sourcesContent":["/**\n * Network-specific configuration and vault registry.\n *\n * The SDK ships with built-in configuration for the rcUSDP vault on both\n * devnet and mainnet. Future vaults will be dynamically loaded via the\n * TBook API.\n *\n * @module config\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport type { SolanaNetwork, VaultDescriptor } from \"./types.js\";\n\n// ── Token Constants ──\n\n/** USDC uses 6 decimal places on Solana. */\nexport const USDC_DECIMALS = 6;\n/** Vault shares use 6 decimal places (matching Sui vault share token). */\nexport const SHARE_DECIMALS = 6;\n/** 1 USDC in raw units (10^6). */\nexport const ONE_USDC = 1_000_000;\n/** 1 share in raw units (10^6). */\nexport const ONE_SHARE = 1_000_000;\n/** Default cancellation fee in basis points (0.1%). */\nexport const DEFAULT_CANCEL_FEE_BPS = 10;\n/** Default timeout for RPC calls in milliseconds (30 seconds). */\nexport const DEFAULT_RPC_TIMEOUT_MS = 30_000;\n\n// ── Default RPC Endpoints ──\n\nconst DEFAULT_RPC: Record<SolanaNetwork, string> = {\n devnet: \"https://api.devnet.solana.com\",\n \"mainnet-beta\": \"https://api.mainnet-beta.solana.com\",\n};\n\n/**\n * Return a default public RPC URL for the given network.\n * In production, consumers should supply their own dedicated RPC\n * (e.g. Helius, Triton) for reliability and rate-limit headroom.\n */\nexport function getDefaultRpcUrl(network: SolanaNetwork): string {\n return DEFAULT_RPC[network];\n}\n\n// ── Share Price API ──\n\n/** NAV oracle endpoint for share price data. */\nexport const SHARE_PRICE_API_URL =\n \"https://d5a6giwxrgpzqpxktgpgufpvtq0ltxgk.lambda-url.ap-southeast-1.on.aws/share-price\";\n\n// ── Explorer ──\n\nconst EXPLORER_BASE = \"https://explorer.solana.com\";\n\n/** Build a Solana Explorer URL for an address or transaction. */\nexport function explorerUrl(\n type: \"address\" | \"tx\",\n value: string,\n network: SolanaNetwork,\n): string {\n const cluster = network === \"mainnet-beta\" ? \"\" : `?cluster=${network}`;\n return `${EXPLORER_BASE}/${type}/${value}${cluster}`;\n}\n\n// ── Vault Configuration ──\n\n/**\n * Per-vault on-chain configuration.\n * Contains the program ID and known account addresses needed to\n * interact with a specific vault deployment.\n */\nexport interface VaultConfig {\n /** Vault identifier. */\n id: string;\n /** Anchor program ID. */\n programId: PublicKey;\n /** USDC mint used by this vault. */\n usdcMint: PublicKey;\n /** Network this config applies to. */\n network: SolanaNetwork;\n}\n\n// ── Built-in Vault Registry ──\n\n/**\n * Built-in vault configurations shipped with the SDK.\n * Keyed by `${network}:${vaultId}`.\n */\nconst BUILT_IN_VAULTS: Record<string, VaultConfig> = {\n \"devnet:rcUSDP\": {\n id: \"rcUSDP\",\n programId: new PublicKey(\"BdeE87CsE9kvxJJcxaJqxNsC2nC6hFft3UBzcgAm5X1i\"),\n // Circle devnet USDC — must match the mint the on-chain vault was initialized with\n usdcMint: new PublicKey(\"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\"),\n network: \"devnet\",\n },\n // mainnet config will be added when contract is deployed\n // \"mainnet-beta:rcUSDP\": { ... },\n};\n\n/**\n * Resolve a vault config by id and network.\n * Returns `undefined` if the vault is not registered.\n */\nexport function getVaultConfig(\n vaultId: string,\n network: SolanaNetwork,\n): VaultConfig | undefined {\n return BUILT_IN_VAULTS[`${network}:${vaultId}`];\n}\n\n/**\n * List all built-in vault descriptors for a given network.\n */\nexport function listBuiltInVaults(network: SolanaNetwork): VaultDescriptor[] {\n return Object.values(BUILT_IN_VAULTS)\n .filter((v) => v.network === network)\n .map((v) => ({\n id: v.id,\n name: `${v.id} Vault`,\n description: \"RWA yield vault powered by TBook\",\n programId: v.programId.toBase58(),\n network: v.network,\n usdcMint: v.usdcMint.toBase58(),\n shareToken: { symbol: v.id, decimals: SHARE_DECIMALS },\n status: \"active\" as const,\n }));\n}\n\n/** Default vault ID used when no vaultId is specified. */\nexport const DEFAULT_VAULT_ID = \"rcUSDP\";\n","/**\n * Typed error classes for the TBook Vault SDK.\n *\n * All SDK errors extend {@link VaultSdkError} so consumers can catch\n * SDK-specific errors in a single catch block:\n *\n * ```typescript\n * try {\n * await vault.buildDeposit({ ... });\n * } catch (err) {\n * if (err instanceof VaultSdkError) {\n * console.error(`SDK error [${err.code}]: ${err.message}`);\n * }\n * }\n * ```\n *\n * @module errors\n */\n\n/** Base error class for all vault SDK errors. */\nexport class VaultSdkError extends Error {\n /** Machine-readable error code. */\n readonly code: string;\n\n /** Non-technical message suitable for displaying to end users. */\n readonly userFriendlyMessage: string;\n\n constructor(code: string, message: string, userFriendlyMessage?: string) {\n super(message);\n this.name = \"VaultSdkError\";\n this.code = code;\n this.userFriendlyMessage = userFriendlyMessage ?? \"Something went wrong. Please try again.\";\n }\n}\n\n/**\n * Thrown when the vault is paused and an operation that requires\n * an active vault is attempted (deposit, redeem).\n * Note: `claim` always works even when paused.\n */\nexport class VaultPausedError extends VaultSdkError {\n constructor() {\n super(\n \"VAULT_PAUSED\",\n \"The vault is currently paused. Only claim operations are allowed.\",\n \"The service is temporarily unavailable. Please try again later.\",\n );\n this.name = \"VaultPausedError\";\n }\n}\n\n/** Thrown when the deposit amount is below the vault's minimum. */\nexport class MinDepositError extends VaultSdkError {\n /** The minimum required deposit in USDC. */\n readonly minDeposit: number;\n\n constructor(minDeposit: number) {\n super(\n \"MIN_DEPOSIT\",\n `Minimum deposit is ${minDeposit} USDC.`,\n `The deposit amount is too small. Minimum is ${minDeposit} USDC.`,\n );\n this.name = \"MinDepositError\";\n this.minDeposit = minDeposit;\n }\n}\n\n/** Thrown when the deposit amount would exceed the epoch's maximum. */\nexport class MaxEpochDepositError extends VaultSdkError {\n readonly maxEpochDeposit: number;\n\n constructor(maxEpochDeposit: number) {\n super(\n \"MAX_EPOCH_DEPOSIT\",\n `This deposit would exceed the epoch limit of ${maxEpochDeposit} USDC.`,\n `The deposit amount exceeds the current limit of ${maxEpochDeposit} USDC.`,\n );\n this.name = \"MaxEpochDepositError\";\n this.maxEpochDeposit = maxEpochDeposit;\n }\n}\n\n/** Thrown when the deposit epoch is not in an \"Open\" state. */\nexport class EpochNotOpenError extends VaultSdkError {\n constructor(epochType: \"deposit\" | \"redeem\", status: string) {\n super(\n \"EPOCH_NOT_OPEN\",\n `The ${epochType} epoch is currently \"${status}\", not \"Open\".`,\n \"This operation is not available right now. Please try again later.\",\n );\n this.name = \"EpochNotOpenError\";\n }\n}\n\n/** Thrown when the VaultMirror PDA cannot be found on-chain. */\nexport class VaultNotFoundError extends VaultSdkError {\n constructor() {\n super(\n \"VAULT_NOT_FOUND\",\n \"VaultMirror account not found on-chain. Is the program deployed?\",\n \"The vault service is currently unreachable. Please try again later.\",\n );\n this.name = \"VaultNotFoundError\";\n }\n}\n\n/** Thrown when a user account PDA is expected but does not exist. */\nexport class UserAccountNotFoundError extends VaultSdkError {\n constructor(pubkey: string) {\n super(\n \"USER_NOT_FOUND\",\n `No vault user account found for ${pubkey}.`,\n \"No account found. Please make a deposit first to create your account.\",\n );\n this.name = \"UserAccountNotFoundError\";\n }\n}\n\n/** Thrown when an unsupported or unknown vault ID is requested. */\nexport class UnknownVaultError extends VaultSdkError {\n constructor(vaultId: string) {\n super(\n \"UNKNOWN_VAULT\",\n `Vault \"${vaultId}\" is not registered. Use listVaults() to see available vaults.`,\n \"The requested vault is not available.\",\n );\n this.name = \"UnknownVaultError\";\n }\n}\n\n/** Thrown when the share price API is unreachable or returns invalid data. */\nexport class SharePriceUnavailableError extends VaultSdkError {\n constructor(reason?: string) {\n super(\n \"PRICE_UNAVAILABLE\",\n `Share price data is unavailable${reason ? `: ${reason}` : \".\"}`,\n \"Price information is temporarily unavailable. Please try again in a few minutes.\",\n );\n this.name = \"SharePriceUnavailableError\";\n }\n}\n\n/** Thrown when a cancel-deposit is attempted but the user has no pending deposit. */\nexport class NoPendingDepositError extends VaultSdkError {\n constructor() {\n super(\n \"NO_PENDING_DEPOSIT\",\n \"No pending deposit to cancel. The user has no active deposit in the current epoch.\",\n \"You don't have a pending deposit to cancel.\",\n );\n this.name = \"NoPendingDepositError\";\n }\n}\n\n/** Thrown when an RPC call fails. */\nexport class RpcError extends VaultSdkError {\n /** The underlying error from the RPC library. */\n readonly cause: unknown;\n\n constructor(operation: string, cause: unknown) {\n const msg = cause instanceof Error ? cause.message : String(cause);\n super(\n \"RPC_ERROR\",\n `RPC call failed during ${operation}: ${msg}`,\n \"A network error occurred. Please check your connection and try again.\",\n );\n this.name = \"RpcError\";\n this.cause = cause;\n }\n}\n\n/** Thrown when an RPC call exceeds the configured timeout. */\nexport class RpcTimeoutError extends VaultSdkError {\n /** The timeout duration in milliseconds. */\n readonly timeoutMs: number;\n\n constructor(operation: string, timeoutMs: number) {\n super(\n \"RPC_TIMEOUT\",\n `RPC call timed out after ${timeoutMs}ms during ${operation}`,\n \"The request timed out. Please try again.\",\n );\n this.name = \"RpcTimeoutError\";\n this.timeoutMs = timeoutMs;\n }\n}\n\n/** Thrown when a transaction's blockhash expires before confirmation. */\nexport class TransactionExpiredError extends VaultSdkError {\n /** The transaction signature. */\n readonly signature: string;\n\n constructor(signature: string) {\n super(\n \"TX_EXPIRED\",\n `Transaction ${signature} expired (blockhash no longer valid)`,\n \"The transaction expired. Please try again.\",\n );\n this.name = \"TransactionExpiredError\";\n this.signature = signature;\n }\n}\n\n/** Thrown when a transaction fails on-chain (e.g., program error). */\nexport class TransactionFailedError extends VaultSdkError {\n /** The transaction signature. */\n readonly signature: string;\n /** The on-chain error object. */\n readonly txError: unknown;\n\n constructor(signature: string, txError: unknown) {\n super(\n \"TX_FAILED\",\n `Transaction ${signature} failed on-chain: ${JSON.stringify(txError)}`,\n \"The transaction failed. Please try again or contact support.\",\n );\n this.name = \"TransactionFailedError\";\n this.signature = signature;\n this.txError = txError;\n }\n}\n","/**\n * PDA (Program Derived Address) derivation for Vault Gateway accounts.\n *\n * Each vault has a set of deterministic PDAs derived from the program ID:\n * - VaultMirror: global singleton\n * - UserAccount: per-user state\n * - DepositEpoch / RedeemEpoch: per-epoch batch tracking\n * - UsdcVault: SPL token account for vault USDC\n *\n * All functions are pure and synchronous — no RPC calls needed.\n *\n * @module pda\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\n\n/**\n * Derive the VaultMirror PDA (global vault state).\n * Seeds: `[\"vault_mirror\"]`\n */\nexport function getVaultMirrorPda(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"vault_mirror\")],\n programId,\n );\n}\n\n/**\n * Derive the USDC vault token account PDA.\n * Seeds: `[\"usdc_vault\", vaultMirror]`\n */\nexport function getUsdcVaultPda(\n vaultMirror: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"usdc_vault\"), vaultMirror.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derive a user's account PDA.\n * Seeds: `[\"user\", vaultMirror, userPubkey]`\n */\nexport function getUserPda(\n vaultMirror: PublicKey,\n user: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"user\"), vaultMirror.toBuffer(), user.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derive a deposit epoch PDA.\n * Seeds: `[\"deposit_epoch\", vaultMirror, epochNumber (u64 LE)]`\n */\nexport function getDepositEpochPda(\n vaultMirror: PublicKey,\n epoch: number,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"deposit_epoch\"),\n vaultMirror.toBuffer(),\n epochToLeBytes(epoch),\n ],\n programId,\n );\n}\n\n/**\n * Derive a redeem epoch PDA.\n * Seeds: `[\"redeem_epoch\", vaultMirror, epochNumber (u64 LE)]`\n */\nexport function getRedeemEpochPda(\n vaultMirror: PublicKey,\n epoch: number,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"redeem_epoch\"),\n vaultMirror.toBuffer(),\n epochToLeBytes(epoch),\n ],\n programId,\n );\n}\n\n// ── Internal Helpers ──\n\n/** Convert an epoch number to an 8-byte little-endian buffer (u64). */\nfunction epochToLeBytes(epoch: number): Buffer {\n return Buffer.from(\n new Uint8Array(new BigUint64Array([BigInt(epoch)]).buffer),\n );\n}\n","/**\n * Core type definitions for the TBook Vault Gateway SDK.\n *\n * @module types\n */\n\nimport type { PublicKey, Transaction } from \"@solana/web3.js\";\n\n// ── Network & Configuration ──\n\n/** Supported Solana networks. */\nexport type SolanaNetwork = \"devnet\" | \"mainnet-beta\";\n\n/** Options for initializing a {@link TBookVault} client instance. */\nexport interface TBookVaultOptions {\n /** Solana network to connect to. */\n network: SolanaNetwork;\n /**\n * Custom Solana RPC endpoint URL.\n * Falls back to a sensible public default for the chosen network.\n */\n rpcUrl?: string;\n /**\n * TBook API key for accessing the hosted API layer.\n * When provided, queries are routed through the cached TBook API\n * (higher rate limits, lower latency). Without a key the SDK reads\n * directly from the Solana RPC.\n */\n apiKey?: string;\n /**\n * Default timeout for RPC calls in milliseconds.\n * Applies to all on-chain reads and transaction building.\n * Default: 30_000 (30 seconds).\n */\n timeoutMs?: number;\n}\n\n// ── Vault Registry ──\n\n/** Metadata for a single vault available in the TBook ecosystem. */\nexport interface VaultDescriptor {\n /** Unique identifier for this vault, e.g. `\"rcUSDP\"`. */\n id: string;\n /** Human-readable name. */\n name: string;\n /** Short description of the vault strategy. */\n description: string;\n /** Solana program ID that manages this vault. */\n programId: string;\n /** Network this vault is deployed on. */\n network: SolanaNetwork;\n /** USDC mint address accepted by the vault. */\n usdcMint: string;\n /** Share token details. */\n shareToken: { symbol: string; decimals: number };\n /** Current vault status. */\n status: \"active\" | \"paused\" | \"deprecated\";\n}\n\n// ── On-chain State ──\n\n/** Epoch lifecycle status. */\nexport type EpochStatus =\n | \"Open\"\n | \"Frozen\"\n | \"Bridging\"\n | \"Settled\"\n | \"RolledBack\";\n\n/** Numeric → EpochStatus mapping for manual deserialization. */\nexport const STATUS_MAP: Record<number, EpochStatus> = {\n 0: \"Open\",\n 1: \"Frozen\",\n 2: \"Bridging\",\n 3: \"Settled\",\n 4: \"RolledBack\",\n};\n\n/** Global vault state from VaultMirror PDA. All amounts are human-readable. */\nexport interface VaultInfo {\n /** Authority (governance) public key. */\n admin: string;\n /** Curator multisig public key. */\n curator: string;\n /** Operator multisig public key. */\n operator: string;\n /** Total shares outstanding across all users. */\n totalShares: number;\n /** Current deposit epoch number. */\n currentDepositEpoch: number;\n /** Current redeem epoch number. */\n currentRedeemEpoch: number;\n /** Maximum USDC allowed per deposit epoch. */\n maxEpochDeposit: number;\n /** Minimum single deposit amount in USDC. */\n minDeposit: number;\n /** Whether the vault is paused (claim always works even when paused). */\n paused: boolean;\n /** USDC mint public key. */\n usdcMint: PublicKey;\n /** Current USDC balance held in the vault token account. */\n vaultUsdcBalance: number;\n /** Estimated TVL in USDC. */\n tvlEstimate: number;\n /** Cancellation fee in basis points (default 10 = 0.1%). */\n cancelFeeBps: number;\n}\n\n/** Current deposit epoch on-chain state. */\nexport interface DepositEpochInfo {\n epoch: number;\n status: EpochStatus;\n /** Total USDC deposited in this epoch. */\n totalDepositUsdc: number;\n /** Number of unique users who deposited in this epoch. */\n depositUserCount: number;\n /** Shares minted for this epoch after settlement. */\n settledSharesMinted: number;\n}\n\n/** Current redeem epoch on-chain state. */\nexport interface RedeemEpochInfo {\n epoch: number;\n status: EpochStatus;\n /** Total shares queued for redemption. */\n totalRedeemShares: number;\n /** Number of unique users who requested redemption. */\n redeemUserCount: number;\n /** USDC distributed for this epoch after settlement. */\n settledUsdcForRedeems: number;\n}\n\n/**\n * Per-user on-chain account state.\n * All amounts are human-readable (divided by 10^decimals).\n */\nexport interface UserAccount {\n /** Settled share balance. */\n shares: number;\n /** USDC pending in an open deposit epoch. */\n pendingDepositUsdc: number;\n /** Which deposit epoch the pending deposit belongs to. */\n pendingDepositEpoch: number;\n /** Shares pending in an open redeem epoch. */\n pendingRedeemShares: number;\n /** Which redeem epoch the pending redeem belongs to. */\n pendingRedeemEpoch: number;\n /** USDC available to claim. */\n claimableUsdc: number;\n /**\n * Effective share balance including not-yet-lazy-settled deposits.\n * This is what the user \"really\" owns.\n */\n effectiveShares: number;\n /**\n * Effective claimable USDC including not-yet-lazy-settled redeems.\n */\n effectiveClaimableUsdc: number;\n /**\n * Estimated portfolio value in USDC (effectiveShares * sharePrice).\n * Only present when share price is available.\n */\n portfolioValueUsdc?: number;\n}\n\n/** Share price data from the NAV oracle. */\nexport interface SharePriceData {\n /** Human-readable price string, e.g. \"1.000214\". */\n price: string;\n /** Price as a number for calculations. */\n priceNum: number;\n /** Annualized yield percentage, e.g. \"8.30\". */\n apy: string;\n /** Date of the NAV snapshot (ISO date string). */\n date: string;\n /** ISO timestamp when the data was last fetched. */\n fetchedAt: string;\n /** Where this price data came from. */\n source?: \"api\" | \"cache\" | \"on-chain\";\n /** Whether the data is stale (older than the freshness window). */\n stale?: boolean;\n}\n\n// ── Transaction Results ──\n\n/**\n * Result of a transaction-building operation.\n * Contains both the raw Transaction object and a pre-serialized base58\n * string for direct use with Wallet-as-a-Service APIs.\n */\nexport interface TransactionResult {\n /** Unsigned Solana Transaction object. */\n transaction: Transaction;\n /**\n * Base58-encoded serialized transaction.\n * Can be sent directly to WaaS providers (Crossmint, Privy, etc.)\n * or deserialized back into a Transaction for wallet adapters.\n */\n serialized: string;\n /** Human-readable description of the transaction. */\n message: string;\n /** Blockhash used in the transaction (needed for confirmation). */\n blockhash: string;\n /** Last valid block height for the blockhash (needed for expiry detection). */\n lastValidBlockHeight: number;\n}\n\n/** Parameters for building a deposit transaction. */\nexport interface DepositParams {\n /** User's Solana public key. */\n user: PublicKey;\n /** Amount of USDC to deposit (human-readable, e.g. 100 for $100). */\n amountUsdc: number;\n}\n\n/** Parameters for building a redeem transaction. */\nexport interface RedeemParams {\n /** User's Solana public key. */\n user: PublicKey;\n /** Number of vault shares to redeem (human-readable). */\n shares: number;\n}\n\n/** Parameters for building a claim or cancel transaction. */\nexport interface UserTxParams {\n /** User's Solana public key. */\n user: PublicKey;\n}\n\n// ── Combined Query Results ──\n\n/** Full vault information including current epochs. */\nexport interface VaultInfoResult {\n vault: VaultInfo | null;\n depositEpoch: DepositEpochInfo | null;\n redeemEpoch: RedeemEpochInfo | null;\n}\n","/**\n * On-chain state query functions.\n *\n * Reads VaultMirror, UserAccount, and Epoch PDAs from Solana.\n * Supports both Anchor-based and raw byte deserialization for\n * maximum compatibility (the latter works without a wallet).\n *\n * @module queries\n */\n\nimport { type Program } from \"@coral-xyz/anchor\";\nimport { type Connection, PublicKey } from \"@solana/web3.js\";\nimport {\n getVaultMirrorPda,\n getUsdcVaultPda,\n getDepositEpochPda,\n getRedeemEpochPda,\n getUserPda,\n} from \"./pda.js\";\nimport { USDC_DECIMALS, SHARE_DECIMALS, DEFAULT_CANCEL_FEE_BPS } from \"./config.js\";\nimport { RpcError, VaultNotFoundError, UserAccountNotFoundError } from \"./errors.js\";\nimport {\n STATUS_MAP,\n type VaultInfo,\n type VaultInfoResult,\n type DepositEpochInfo,\n type RedeemEpochInfo,\n type UserAccount,\n type EpochStatus,\n} from \"./types.js\";\n\n// ── Vault Info ──\n\n/**\n * Fetch global vault state and current epoch info.\n *\n * Tries Anchor deserialization first (requires a Program instance),\n * then falls back to manual byte parsing (works with just a Connection).\n *\n * @param connection - Solana RPC connection\n * @param programId - Vault Gateway program ID\n * @param program - Optional Anchor program (enables richer deserialization)\n */\nexport async function fetchVaultInfo(\n connection: Connection,\n programId: PublicKey,\n program?: Program,\n): Promise<VaultInfoResult> {\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n\n // ── Strategy 1: Anchor deserialization ──\n if (program) {\n try {\n return await fetchVaultInfoAnchor(connection, programId, program, vaultMirrorPda);\n } catch {\n // Fall through to manual deserialization\n }\n }\n\n // ── Strategy 2: Raw byte deserialization (no wallet needed) ──\n return fetchVaultInfoRaw(connection, programId, vaultMirrorPda);\n}\n\nasync function fetchVaultInfoAnchor(\n connection: Connection,\n programId: PublicKey,\n program: Program,\n vaultMirrorPda: PublicKey,\n): Promise<VaultInfoResult> {\n const v = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n\n const [usdcVaultPda] = getUsdcVaultPda(vaultMirrorPda, programId);\n const vaultUsdcBalance = await safeTokenBalance(connection, usdcVaultPda);\n\n const currentDepositEpoch = v.currentDepositEpoch.toNumber();\n const currentRedeemEpoch = v.currentRedeemEpoch.toNumber();\n\n const vault: VaultInfo = {\n admin: v.authority.toString(),\n curator: v.curator.toString(),\n operator: v.operator.toString(),\n totalShares: v.totalShares.toNumber() / 10 ** SHARE_DECIMALS,\n currentDepositEpoch,\n currentRedeemEpoch,\n maxEpochDeposit: v.maxEpochDeposit.toNumber() / 10 ** USDC_DECIMALS,\n minDeposit: v.minDeposit.toNumber() / 10 ** USDC_DECIMALS,\n paused: v.paused,\n usdcMint: v.usdcMint,\n vaultUsdcBalance,\n tvlEstimate: vaultUsdcBalance,\n cancelFeeBps: DEFAULT_CANCEL_FEE_BPS,\n };\n\n const depositEpoch = await fetchDepositEpochAnchor(program, programId, vaultMirrorPda, currentDepositEpoch);\n const redeemEpoch = await fetchRedeemEpochAnchor(program, programId, vaultMirrorPda, currentRedeemEpoch);\n\n return { vault, depositEpoch, redeemEpoch };\n}\n\nasync function fetchVaultInfoRaw(\n connection: Connection,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n): Promise<VaultInfoResult> {\n let accountInfo;\n try {\n accountInfo = await connection.getAccountInfo(vaultMirrorPda);\n } catch (err) {\n throw new RpcError(\"fetchVaultInfo\", err);\n }\n\n if (!accountInfo) {\n return { vault: null, depositEpoch: null, redeemEpoch: null };\n }\n\n const data = accountInfo.data;\n const o = 8; // Skip 8-byte Anchor discriminator\n\n // VaultMirror layout (V2 — independent epochs):\n // authority: 32 bytes offset o+0\n // curator: 32 bytes offset o+32\n // operator: 32 bytes offset o+64\n // usdc_mint: 32 bytes offset o+96\n // usdc_vault: 32 bytes offset o+128\n // total_shares: 8 bytes offset o+160\n // current_deposit_epoch: 8 bytes offset o+168\n // current_redeem_epoch: 8 bytes offset o+176\n // max_epoch_deposit: 8 bytes offset o+184\n // min_deposit: 8 bytes offset o+192\n // paused: 1 byte offset o+200\n const admin = new PublicKey(data.subarray(o, o + 32));\n const curator = new PublicKey(data.subarray(o + 32, o + 64));\n const operator = new PublicKey(data.subarray(o + 64, o + 96));\n const usdcMintKey = new PublicKey(data.subarray(o + 96, o + 128));\n const usdcVaultKey = new PublicKey(data.subarray(o + 128, o + 160));\n const totalShares = Number(data.readBigUInt64LE(o + 160)) / 10 ** SHARE_DECIMALS;\n const currentDepositEpoch = Number(data.readBigUInt64LE(o + 168));\n const currentRedeemEpoch = Number(data.readBigUInt64LE(o + 176));\n const maxEpochDeposit = Number(data.readBigUInt64LE(o + 184)) / 10 ** USDC_DECIMALS;\n const minDeposit = Number(data.readBigUInt64LE(o + 192)) / 10 ** USDC_DECIMALS;\n const paused = data[o + 200] !== 0;\n\n const vaultUsdcBalance = await safeTokenBalance(connection, usdcVaultKey);\n\n const vault: VaultInfo = {\n admin: admin.toString(),\n curator: curator.toString(),\n operator: operator.toString(),\n totalShares,\n currentDepositEpoch,\n currentRedeemEpoch,\n maxEpochDeposit,\n minDeposit,\n paused,\n usdcMint: usdcMintKey,\n vaultUsdcBalance,\n tvlEstimate: vaultUsdcBalance,\n cancelFeeBps: DEFAULT_CANCEL_FEE_BPS,\n };\n\n const depositEpoch = await fetchDepositEpochRaw(connection, programId, getVaultMirrorPda(programId)[0], currentDepositEpoch);\n const redeemEpoch = await fetchRedeemEpochRaw(connection, programId, getVaultMirrorPda(programId)[0], currentRedeemEpoch);\n\n return { vault, depositEpoch, redeemEpoch };\n}\n\n// ── Epoch Info ──\n\nasync function fetchDepositEpochAnchor(\n program: Program,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n epoch: number,\n): Promise<DepositEpochInfo | null> {\n try {\n const [pda] = getDepositEpochPda(vaultMirrorPda, epoch, programId);\n const e = await (program.account as any).depositEpoch.fetch(pda);\n const statusKey = Object.keys(e.status)[0];\n return {\n epoch: e.epoch.toNumber(),\n status: (statusKey.charAt(0).toUpperCase() + statusKey.slice(1)) as EpochStatus,\n totalDepositUsdc: e.totalDepositUsdc.toNumber() / 10 ** USDC_DECIMALS,\n depositUserCount: e.depositUserCount,\n settledSharesMinted: e.settledSharesMinted.toNumber() / 10 ** SHARE_DECIMALS,\n };\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return null;\n }\n throw err;\n }\n}\n\nasync function fetchRedeemEpochAnchor(\n program: Program,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n epoch: number,\n): Promise<RedeemEpochInfo | null> {\n try {\n const [pda] = getRedeemEpochPda(vaultMirrorPda, epoch, programId);\n const e = await (program.account as any).redeemEpoch.fetch(pda);\n const statusKey = Object.keys(e.status)[0];\n return {\n epoch: e.epoch.toNumber(),\n status: (statusKey.charAt(0).toUpperCase() + statusKey.slice(1)) as EpochStatus,\n totalRedeemShares: e.totalRedeemShares.toNumber() / 10 ** SHARE_DECIMALS,\n redeemUserCount: e.redeemUserCount,\n settledUsdcForRedeems: e.settledUsdcForRedeems.toNumber() / 10 ** USDC_DECIMALS,\n };\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return null;\n }\n throw err;\n }\n}\n\nasync function fetchDepositEpochRaw(\n connection: Connection,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n epoch: number,\n): Promise<DepositEpochInfo | null> {\n try {\n const [pda] = getDepositEpochPda(vaultMirrorPda, epoch, programId);\n const info = await connection.getAccountInfo(pda);\n if (!info) return null;\n const d = info.data;\n const eo = 8;\n return {\n epoch: Number(d.readBigUInt64LE(eo)),\n status: STATUS_MAP[d[eo + 8]] || \"Open\",\n totalDepositUsdc: Number(d.readBigUInt64LE(eo + 9)) / 10 ** USDC_DECIMALS,\n depositUserCount: d.readUInt32LE(eo + 17),\n settledSharesMinted: Number(d.readBigUInt64LE(eo + 21)) / 10 ** SHARE_DECIMALS,\n };\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return null;\n }\n throw err;\n }\n}\n\nasync function fetchRedeemEpochRaw(\n connection: Connection,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n epoch: number,\n): Promise<RedeemEpochInfo | null> {\n try {\n const [pda] = getRedeemEpochPda(vaultMirrorPda, epoch, programId);\n const info = await connection.getAccountInfo(pda);\n if (!info) return null;\n const d = info.data;\n const eo = 8;\n return {\n epoch: Number(d.readBigUInt64LE(eo)),\n status: STATUS_MAP[d[eo + 8]] || \"Open\",\n totalRedeemShares: Number(d.readBigUInt64LE(eo + 9)) / 10 ** SHARE_DECIMALS,\n redeemUserCount: d.readUInt32LE(eo + 17),\n settledUsdcForRedeems: Number(d.readBigUInt64LE(eo + 21)) / 10 ** USDC_DECIMALS,\n };\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return null;\n }\n throw err;\n }\n}\n\n// ── User Account ──\n\n/**\n * Fetch a user's vault account with effective balances.\n *\n * Effective balances account for settled epochs that haven't been\n * lazy-settled yet — the user's \"real\" balance even before their\n * next on-chain interaction.\n *\n * @param connection - Solana RPC connection\n * @param programId - Vault Gateway program ID\n * @param user - User's public key\n * @param program - Optional Anchor program\n * @returns User account state, or null if user has never interacted\n */\nexport async function fetchUserAccount(\n connection: Connection,\n programId: PublicKey,\n user: PublicKey,\n program?: Program,\n): Promise<UserAccount | null> {\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n const [userPda] = getUserPda(vaultMirrorPda, user, programId);\n\n if (!program) {\n // Without Anchor we can't easily deserialize — return null for now\n // TODO: add raw byte deserialization for user accounts\n return null;\n }\n\n let userAccount;\n try {\n userAccount = await (program.account as any).userAccount.fetch(userPda);\n } catch (err: unknown) {\n // Account doesn't exist (new user) — return null\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return null;\n }\n throw err; // Re-throw actual RPC errors\n }\n\n const shares = userAccount.shares.toNumber() / 10 ** SHARE_DECIMALS;\n const pendingDepositUsdc = userAccount.pendingDepositUsdc.toNumber() / 10 ** USDC_DECIMALS;\n const pendingDepositEpoch = userAccount.pendingDepositEpoch.toNumber();\n const pendingRedeemShares = userAccount.pendingRedeemShares.toNumber() / 10 ** SHARE_DECIMALS;\n const pendingRedeemEpoch = userAccount.pendingRedeemEpoch.toNumber();\n const claimableUsdc = userAccount.claimableUsdc.toNumber() / 10 ** USDC_DECIMALS;\n\n // Compute effective balances by checking epoch settlement status\n const effective = await computeEffectiveBalance(\n connection,\n programId,\n program,\n vaultMirrorPda,\n {\n shares: BigInt(userAccount.shares.toString()),\n claimableUsdc: BigInt(userAccount.claimableUsdc.toString()),\n pendingDepositUsdc: BigInt(userAccount.pendingDepositUsdc.toString()),\n pendingDepositEpoch,\n pendingRedeemShares: BigInt(userAccount.pendingRedeemShares.toString()),\n pendingRedeemEpoch,\n },\n );\n\n return {\n shares,\n pendingDepositUsdc,\n pendingDepositEpoch,\n pendingRedeemShares,\n pendingRedeemEpoch,\n claimableUsdc,\n effectiveShares: Number(effective.shares) / 10 ** SHARE_DECIMALS,\n effectiveClaimableUsdc: Number(effective.claimableUsdc) / 10 ** USDC_DECIMALS,\n };\n}\n\n// ── Lazy Settlement Logic ──\n\ninterface RawUserState {\n shares: bigint;\n claimableUsdc: bigint;\n pendingDepositUsdc: bigint;\n pendingDepositEpoch: number;\n pendingRedeemShares: bigint;\n pendingRedeemEpoch: number;\n}\n\n/**\n * Compute effective user balances by checking whether pending epochs\n * have been settled or rolled back. This mirrors the on-chain\n * `try_settle_pending()` logic without requiring a transaction.\n */\nasync function computeEffectiveBalance(\n connection: Connection,\n programId: PublicKey,\n program: Program,\n vaultMirrorPda: PublicKey,\n raw: RawUserState,\n): Promise<{ shares: bigint; claimableUsdc: bigint }> {\n let shares = raw.shares;\n let claimableUsdc = raw.claimableUsdc;\n\n // Fetch current epochs to check if user's epochs are stale\n let vaultState;\n try {\n vaultState = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return { shares, claimableUsdc };\n }\n throw err;\n }\n\n const currentDepositEpoch = vaultState.currentDepositEpoch.toNumber();\n const currentRedeemEpoch = vaultState.currentRedeemEpoch.toNumber();\n\n // Check pending deposit from a non-current epoch\n if (raw.pendingDepositUsdc > 0n && raw.pendingDepositEpoch !== currentDepositEpoch) {\n try {\n const [pda] = getDepositEpochPda(vaultMirrorPda, raw.pendingDepositEpoch, programId);\n const epoch = await (program.account as any).depositEpoch.fetch(pda);\n const status = epoch.status;\n\n if (\"settled\" in status) {\n const totalDeposit = BigInt(epoch.totalDepositUsdc.toString());\n const sharesMinted = BigInt(epoch.settledSharesMinted.toString());\n if (totalDeposit > 0n) {\n shares += (raw.pendingDepositUsdc * sharesMinted) / totalDeposit;\n }\n } else if (\"rolledBack\" in status) {\n claimableUsdc += raw.pendingDepositUsdc;\n }\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n // Epoch account doesn't exist — leave as-is\n } else {\n throw err;\n }\n }\n }\n\n // Check pending redeem from a non-current epoch\n if (raw.pendingRedeemShares > 0n && raw.pendingRedeemEpoch !== currentRedeemEpoch) {\n try {\n const [pda] = getRedeemEpochPda(vaultMirrorPda, raw.pendingRedeemEpoch, programId);\n const epoch = await (program.account as any).redeemEpoch.fetch(pda);\n const status = epoch.status;\n\n if (\"settled\" in status) {\n const totalRedeem = BigInt(epoch.totalRedeemShares.toString());\n const usdcForRedeems = BigInt(epoch.settledUsdcForRedeems.toString());\n if (totalRedeem > 0n) {\n claimableUsdc += (raw.pendingRedeemShares * usdcForRedeems) / totalRedeem;\n }\n } else if (\"rolledBack\" in status) {\n shares += raw.pendingRedeemShares;\n }\n } catch (err: unknown) {\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n // Epoch account doesn't exist — leave as-is\n } else {\n throw err;\n }\n }\n }\n\n return { shares, claimableUsdc };\n}\n\n/**\n * Build remaining_accounts for lazy settlement.\n *\n * The on-chain `try_settle_pending()` indexes remaining_accounts positionally:\n * - If user has ANY pending deposit (amount > 0): remaining_accounts[0] = deposit epoch PDA\n * - If user has ANY pending redeem (amount > 0): remaining_accounts[next] = redeem epoch PDA\n *\n * IMPORTANT: The contract checks `pending_deposit_usdc > 0` (not whether the\n * epoch is non-current) to decide whether to consume remaining_accounts[0] as\n * a deposit epoch PDA. So we MUST always include the deposit epoch PDA when the\n * user has any pending deposit, even from the current epoch.\n *\n * @internal\n */\nexport async function getLazySettleRemainingAccounts(\n program: Program,\n programId: PublicKey,\n vaultMirrorPda: PublicKey,\n userPda: PublicKey,\n): Promise<{ pubkey: PublicKey; isWritable: boolean; isSigner: boolean }[]> {\n try {\n const userAccount = await (program.account as any).userAccount.fetch(userPda);\n const pendingDepositEpoch = userAccount.pendingDepositEpoch.toNumber();\n const pendingRedeemEpoch = userAccount.pendingRedeemEpoch.toNumber();\n const hasPendingDeposit = userAccount.pendingDepositUsdc.toNumber() > 0;\n const hasPendingRedeem = userAccount.pendingRedeemShares.toNumber() > 0;\n\n if (!hasPendingDeposit && !hasPendingRedeem) return [];\n\n const accounts: { pubkey: PublicKey; isWritable: boolean; isSigner: boolean }[] = [];\n\n if (hasPendingDeposit) {\n const [pda] = getDepositEpochPda(vaultMirrorPda, pendingDepositEpoch, programId);\n accounts.push({ pubkey: pda, isWritable: false, isSigner: false });\n }\n\n if (hasPendingRedeem) {\n const [pda] = getRedeemEpochPda(vaultMirrorPda, pendingRedeemEpoch, programId);\n accounts.push({ pubkey: pda, isWritable: false, isSigner: false });\n }\n\n return accounts;\n } catch (err: unknown) {\n // User account doesn't exist — no lazy settlement needed\n if (err instanceof Error && (\n err.message.includes(\"Account does not exist\") ||\n err.message.includes(\"could not find account\")\n )) {\n return [];\n }\n throw err;\n }\n}\n\n// ── Helpers ──\n\n/** Safely get a token account's UI balance, returning 0 on error. */\nasync function safeTokenBalance(\n connection: Connection,\n tokenAccount: PublicKey,\n): Promise<number> {\n try {\n const info = await connection.getTokenAccountBalance(tokenAccount);\n return info.value.uiAmount ?? 0;\n } catch {\n return 0;\n }\n}\n","/**\n * In-memory share price cache with circuit breaker.\n *\n * Avoids redundant API calls and provides graceful degradation\n * when the NAV oracle is temporarily unreachable.\n *\n * @module share-price-cache\n */\n\nimport type { SharePriceData } from \"./types.js\";\n\n/** Default freshness window: 10 minutes. */\nconst DEFAULT_MAX_STALE_MS = 600_000;\n\n/** Number of consecutive failures before the circuit opens. */\nconst DEFAULT_FAILURE_THRESHOLD = 3;\n\n/** How long the circuit stays open before allowing a retry. */\nconst DEFAULT_CIRCUIT_RESET_MS = 60_000;\n\n/**\n * In-memory cache for share price data with a simple circuit breaker\n * to avoid hammering a failing API endpoint.\n */\nexport class SharePriceCache {\n /** Maximum age (in ms) before cached data is considered stale. */\n readonly maxStaleMs: number;\n\n private data: SharePriceData | null = null;\n private storedAt = 0;\n\n // Circuit breaker state\n private failureCount = 0;\n private readonly failureThreshold: number;\n private circuitOpenedAt = 0;\n private readonly circuitResetMs: number;\n\n constructor(opts?: {\n maxStaleMs?: number;\n failureThreshold?: number;\n circuitResetMs?: number;\n }) {\n this.maxStaleMs = opts?.maxStaleMs ?? DEFAULT_MAX_STALE_MS;\n this.failureThreshold = opts?.failureThreshold ?? DEFAULT_FAILURE_THRESHOLD;\n this.circuitResetMs = opts?.circuitResetMs ?? DEFAULT_CIRCUIT_RESET_MS;\n }\n\n /**\n * Return cached data if it is fresher than `maxAge` milliseconds.\n * Returns `null` if the cache is empty or the data is too old.\n *\n * @param maxAge - Override the default freshness window (pass `Infinity` for stale-ok)\n */\n get(maxAge?: number): SharePriceData | null {\n if (!this.data) return null;\n const age = Date.now() - this.storedAt;\n const threshold = maxAge ?? this.maxStaleMs;\n if (age > threshold) return null;\n return this.data;\n }\n\n /** Store fresh share price data. */\n set(data: SharePriceData): void {\n this.data = data;\n this.storedAt = Date.now();\n }\n\n /** Whether the circuit breaker is currently open (API calls should be skipped). */\n isCircuitOpen(): boolean {\n if (this.failureCount < this.failureThreshold) return false;\n // Check if enough time has passed to allow a retry\n if (Date.now() - this.circuitOpenedAt >= this.circuitResetMs) {\n // Half-open: allow one retry\n return false;\n }\n return true;\n }\n\n /** Record a failed API call. Opens the circuit after the threshold is reached. */\n recordFailure(): void {\n this.failureCount += 1;\n if (this.failureCount >= this.failureThreshold) {\n this.circuitOpenedAt = Date.now();\n }\n }\n\n /** Record a successful API call. Resets the circuit breaker. */\n recordSuccess(): void {\n this.failureCount = 0;\n this.circuitOpenedAt = 0;\n }\n}\n\n/** Shared singleton cache instance used by {@link fetchSharePrice}. */\nexport const sharePriceCache = new SharePriceCache();\n","/**\n * Share price fetching with 3-layer fallback:\n *\n * 1. Fresh cache — return immediately if within freshness window\n * 2. API fetch — NAV oracle endpoint, with timeout + circuit breaker\n * 3. Stale cache — return expired cache with `stale: true` flag\n * 4. All fail — throw SharePriceUnavailableError\n *\n * NOTE: On-chain calculation (vaultUsdcBalance / totalShares) was removed\n * because it only reflects Solana-side USDC, not bridged assets on Sui.\n * This would produce dangerously low prices (e.g., $0.02 when real price\n * is ~$1.00). The API endpoint is the only reliable price source.\n *\n * @module share-price\n */\n\nimport { SHARE_PRICE_API_URL } from \"./config.js\";\nimport { SharePriceUnavailableError } from \"./errors.js\";\nimport { sharePriceCache } from \"./share-price-cache.js\";\nimport type { SharePriceData } from \"./types.js\";\n\n/** Default timeout for the API fetch (5 seconds). */\nconst API_FETCH_TIMEOUT_MS = 5_000;\n\n/**\n * Options for {@link fetchSharePrice}.\n */\nexport interface FetchSharePriceOptions {\n /** Override the default API endpoint. */\n apiUrl?: string;\n}\n\n/**\n * Fetch the current share price using a 3-layer fallback strategy.\n *\n * @param options - Optional overrides for API URL\n * @returns Share price data with `source` indicating where it came from\n * @throws {SharePriceUnavailableError} If all layers fail\n */\nexport async function fetchSharePrice(\n options?: FetchSharePriceOptions | string,\n): Promise<SharePriceData> {\n // Backward compatibility: accept a plain string as apiUrl\n const opts: FetchSharePriceOptions =\n typeof options === \"string\" ? { apiUrl: options } : options ?? {};\n const apiUrl = opts.apiUrl ?? SHARE_PRICE_API_URL;\n\n // ── Layer 1: Fresh cache ──\n const cached = sharePriceCache.get();\n if (cached) {\n return { ...cached, source: \"cache\", stale: false };\n }\n\n // ── Layer 2: API fetch (with timeout, skip if circuit open) ──\n if (!sharePriceCache.isCircuitOpen()) {\n try {\n const data = await fetchFromApi(apiUrl);\n sharePriceCache.set(data);\n sharePriceCache.recordSuccess();\n return { ...data, source: \"api\" };\n } catch {\n sharePriceCache.recordFailure();\n }\n }\n\n // ── Layer 3: Stale cache ──\n const stale = sharePriceCache.get(Infinity);\n if (stale) {\n return { ...stale, source: \"cache\", stale: true };\n }\n\n // ── All failed ──\n throw new SharePriceUnavailableError(\"All price sources exhausted\");\n}\n\n/**\n * Fetch share price from the NAV oracle API with a timeout.\n */\nasync function fetchFromApi(apiUrl: string): Promise<SharePriceData> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), API_FETCH_TIMEOUT_MS);\n\n let res: Response;\n try {\n res = await fetch(apiUrl, { signal: controller.signal });\n } catch (err) {\n throw new SharePriceUnavailableError(\n err instanceof Error ? err.message : \"Network error\",\n );\n } finally {\n clearTimeout(timer);\n }\n\n if (!res.ok) {\n throw new SharePriceUnavailableError(`API returned HTTP ${res.status}`);\n }\n\n let data: any;\n try {\n data = await res.json();\n } catch {\n throw new SharePriceUnavailableError(\"Invalid JSON response\");\n }\n\n if (!data.success || !data.sharePrice) {\n throw new SharePriceUnavailableError(\"Missing sharePrice in response\");\n }\n\n const priceNum = parseFloat(data.sharePrice);\n if (!Number.isFinite(priceNum) || priceNum <= 0) {\n throw new SharePriceUnavailableError(\n `Invalid sharePrice value: ${data.sharePrice}`,\n );\n }\n\n return {\n price: data.sharePrice,\n priceNum,\n apy: data.apy || \"0\",\n date: data.date || \"\",\n fetchedAt: data.fetchedAt || new Date().toISOString(),\n };\n}\n","/**\n * Transaction history for vault user accounts.\n *\n * Fetches and classifies on-chain vault interactions (deposits, redeems,\n * claims, cancel-deposits) by reading Solana transaction signatures and\n * matching Anchor instruction discriminators.\n *\n * @module history\n */\n\nimport { createHash } from \"crypto\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\n\n// ── Types ──\n\nexport interface VaultTransaction {\n /** Transaction signature (base58). */\n signature: string;\n /** Classified instruction type. */\n type: \"deposit\" | \"redeem\" | \"claim\" | \"cancel_deposit\" | \"unknown\";\n /** Unix timestamp (seconds). 0 if unavailable. */\n timestamp: number;\n /** Slot number of the transaction. */\n slot: number;\n /** Whether the transaction succeeded. */\n success: boolean;\n /** Human-readable description. */\n description: string;\n}\n\nexport interface TransactionHistoryOptions {\n /** Maximum number of transactions to return (default: 20). */\n limit?: number;\n /** Pagination cursor: signature to start searching before. */\n before?: string;\n}\n\n// ── Anchor Discriminators ──\n\n/**\n * Compute the 8-byte Anchor instruction discriminator for a given\n * instruction name. This is sha256(\"global:<name>\")[0..8].\n */\nfunction anchorDiscriminator(name: string): Buffer {\n return createHash(\"sha256\")\n .update(`global:${name}`)\n .digest()\n .subarray(0, 8);\n}\n\n/** Pre-computed discriminators for vault instructions. */\nconst DISCRIMINATORS: Record<string, { disc: Buffer; type: VaultTransaction[\"type\"]; label: string }> = {\n deposit: {\n disc: anchorDiscriminator(\"deposit\"),\n type: \"deposit\",\n label: \"Deposit\",\n },\n request_redeem: {\n disc: anchorDiscriminator(\"request_redeem\"),\n type: \"redeem\",\n label: \"Request Redeem\",\n },\n claim: {\n disc: anchorDiscriminator(\"claim\"),\n type: \"claim\",\n label: \"Claim\",\n },\n cancel_deposit: {\n disc: anchorDiscriminator(\"cancel_deposit\"),\n type: \"cancel_deposit\",\n label: \"Cancel Deposit\",\n },\n};\n\nconst DISCRIMINATOR_ENTRIES = Object.values(DISCRIMINATORS);\n\n// ── Classification ──\n\n/**\n * Classify a transaction by matching the first 8 bytes of instruction\n * data against known Anchor discriminators.\n *\n * @param ixData - Raw instruction data (base58 decoded or Buffer)\n * @returns Matched type and label, or unknown\n */\nfunction classifyInstruction(ixData: Buffer | Uint8Array): {\n type: VaultTransaction[\"type\"];\n label: string;\n} {\n if (ixData.length < 8) {\n return { type: \"unknown\", label: \"Unknown\" };\n }\n\n const prefix = Buffer.from(ixData.subarray(0, 8));\n for (const entry of DISCRIMINATOR_ENTRIES) {\n if (prefix.equals(entry.disc)) {\n return { type: entry.type, label: entry.label };\n }\n }\n\n return { type: \"unknown\", label: \"Unknown\" };\n}\n\n// ── Main Query ──\n\n/**\n * Fetch vault transaction history for a user.\n *\n * Uses `getSignaturesForAddress` on the user's UserAccount PDA to find\n * relevant transactions, then batch-fetches parsed transaction data\n * to classify each one by its Anchor instruction discriminator.\n *\n * @param connection - Solana RPC connection\n * @param userPda - The user's UserAccount PDA address\n * @param programId - The vault program ID (used to identify vault instructions)\n * @param options - Pagination options\n * @returns Array of classified vault transactions, newest first\n */\nexport async function fetchTransactionHistory(\n connection: Connection,\n userPda: PublicKey,\n programId: PublicKey,\n options?: TransactionHistoryOptions,\n): Promise<VaultTransaction[]> {\n const limit = options?.limit ?? 20;\n\n // Step 1: Get signatures for the user's PDA\n const signatures = await connection.getSignaturesForAddress(userPda, {\n limit,\n before: options?.before,\n });\n\n if (signatures.length === 0) {\n return [];\n }\n\n // Step 2: Batch-fetch parsed transactions for classification\n const sigStrings = signatures.map((s) => s.signature);\n const parsedTxs = await connection.getParsedTransactions(sigStrings, {\n maxSupportedTransactionVersion: 0,\n });\n\n // Step 3: Classify each transaction\n return signatures.map((sig, index) => {\n const parsed = parsedTxs[index];\n let type: VaultTransaction[\"type\"] = \"unknown\";\n let description = \"Vault transaction\";\n\n if (parsed?.transaction?.message?.instructions) {\n // Look for the vault program instruction\n for (const ix of parsed.transaction.message.instructions) {\n // Skip parsed instructions (SPL token, system, etc.)\n if (\"data\" in ix && ix.programId.equals(programId)) {\n try {\n const data = Buffer.from(bs58.decode(ix.data as string));\n const classified = classifyInstruction(data);\n type = classified.type;\n description = classified.label;\n } catch {\n // If decoding fails, leave as unknown\n }\n break;\n }\n }\n\n // Also check inner instructions (CPI calls)\n if (type === \"unknown\" && parsed.meta?.innerInstructions) {\n for (const inner of parsed.meta.innerInstructions) {\n for (const ix of inner.instructions) {\n if (\"data\" in ix && ix.programId.equals(programId)) {\n try {\n const data = Buffer.from(bs58.decode(ix.data as string));\n const classified = classifyInstruction(data);\n type = classified.type;\n description = classified.label;\n } catch {\n // Ignore decode errors\n }\n if (type !== \"unknown\") break;\n }\n }\n if (type !== \"unknown\") break;\n }\n }\n }\n\n // Add failure status to description\n if (sig.err) {\n description = `Failed: ${description}`;\n }\n\n return {\n signature: sig.signature,\n type,\n timestamp: sig.blockTime ?? 0,\n slot: sig.slot,\n success: sig.err === null,\n description,\n };\n });\n}\n","/**\n * RPC utilities: timeout wrapper and transaction confirmation with retry.\n *\n * These utilities work in both browser and Node.js environments\n * (no external dependencies, uses standard AbortController).\n *\n * @module rpc-utils\n */\n\nimport type { Connection, Commitment } from \"@solana/web3.js\";\nimport { RpcTimeoutError, TransactionExpiredError, TransactionFailedError } from \"./errors.js\";\n\n/**\n * Wait for the given number of milliseconds.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Race a promise against a timeout. If the promise doesn't resolve\n * within `ms` milliseconds, throws {@link RpcTimeoutError}.\n *\n * Uses `AbortController` which is available in browsers and Node 16+.\n *\n * @param promise - The async operation to wrap\n * @param ms - Timeout in milliseconds\n * @param label - Human-readable label for error messages (e.g., \"getLatestBlockhash\")\n * @returns The resolved value of the promise\n * @throws {RpcTimeoutError} If the timeout fires before the promise resolves\n */\nexport async function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n label: string,\n): Promise<T> {\n if (ms <= 0 || !Number.isFinite(ms)) return promise;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), ms);\n\n try {\n const result = await Promise.race([\n promise,\n new Promise<never>((_, reject) => {\n controller.signal.addEventListener(\"abort\", () =>\n reject(new RpcTimeoutError(label, ms)),\n );\n }),\n ]);\n return result;\n } finally {\n clearTimeout(timer);\n }\n}\n\n// ── Transaction Confirmation ──\n\n/** Options for {@link confirmTransactionWithRetry}. */\nexport interface ConfirmTxOptions {\n /** Solana RPC connection. */\n connection: Connection;\n /** Transaction signature (base58). */\n signature: string;\n /** Blockhash used when the transaction was built. */\n blockhash: string;\n /** Last valid block height for the blockhash. */\n lastValidBlockHeight: number;\n /** Desired commitment level. Default: \"confirmed\". */\n commitment?: Commitment;\n /** Maximum total wait time in milliseconds. Default: 60_000. */\n timeoutMs?: number;\n /** Initial polling interval in milliseconds. Default: 2_000 (scales up with 1.5x backoff, max 5s). */\n initialIntervalMs?: number;\n}\n\n/**\n * Confirm a transaction with exponential-backoff polling.\n *\n * Unlike `connection.confirmTransaction()` which can silently hang,\n * this implementation:\n * - Polls `getSignatureStatuses` with configurable backoff\n * - Checks `getBlockHeight` to detect expired blockhashes\n * - Throws typed errors for timeout, expiry, and on-chain failures\n *\n * @throws {TransactionExpiredError} If the blockhash expires before confirmation\n * @throws {TransactionFailedError} If the transaction fails on-chain\n * @throws {RpcTimeoutError} If the overall timeout is exceeded\n */\nexport async function confirmTransactionWithRetry(\n opts: ConfirmTxOptions,\n): Promise<void> {\n const {\n connection,\n signature,\n blockhash: _blockhash,\n lastValidBlockHeight,\n commitment = \"confirmed\",\n timeoutMs = 60_000,\n initialIntervalMs = 2_000,\n } = opts;\n\n const COMMITMENT_LEVELS = [\"processed\", \"confirmed\", \"finalized\"] as const;\n const desiredLevel = COMMITMENT_LEVELS.indexOf(commitment as typeof COMMITMENT_LEVELS[number]);\n const start = Date.now();\n let interval = initialIntervalMs;\n const MAX_INTERVAL = 5_000;\n\n while (Date.now() - start < timeoutMs) {\n // Check if blockhash has expired\n try {\n const blockHeight = await connection.getBlockHeight();\n if (blockHeight > lastValidBlockHeight) {\n throw new TransactionExpiredError(signature);\n }\n } catch (err) {\n // Re-throw our own errors, swallow RPC failures for block height check\n if (err instanceof TransactionExpiredError) throw err;\n }\n\n // Poll signature status\n try {\n const { value } = await connection.getSignatureStatuses([signature]);\n const status = value?.[0];\n\n if (status?.err) {\n throw new TransactionFailedError(signature, status.err);\n }\n\n if (status?.confirmationStatus) {\n const actualLevel = COMMITMENT_LEVELS.indexOf(\n status.confirmationStatus as typeof COMMITMENT_LEVELS[number],\n );\n if (actualLevel >= desiredLevel) {\n return; // Confirmed!\n }\n }\n } catch (err) {\n // Re-throw our own typed errors\n if (err instanceof TransactionFailedError) throw err;\n // Swallow RPC failures and retry\n }\n\n await sleep(interval);\n interval = Math.min(interval * 1.5, MAX_INTERVAL);\n }\n\n throw new RpcTimeoutError(\"confirmTransaction\", timeoutMs);\n}\n","/**\n * Transaction builders for vault operations.\n *\n * All builders return an **unsigned** {@link TransactionResult} containing:\n * - `transaction`: a Solana `Transaction` object for wallet adapters\n * - `serialized`: a base58 string for WaaS provider APIs\n * - `message`: human-readable description\n *\n * The SDK never signs or submits transactions. Signing is the\n * responsibility of the integrating app (via wallet adapter, WaaS, etc.).\n *\n * @module transactions\n */\n\nimport { Program } from \"@coral-xyz/anchor\";\nimport BN from \"bn.js\";\nimport { PublicKey, SystemProgram, Transaction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n getAssociatedTokenAddress,\n} from \"@solana/spl-token\";\nimport bs58 from \"bs58\";\n\nimport {\n getVaultMirrorPda,\n getUsdcVaultPda,\n getUserPda,\n getDepositEpochPda,\n getRedeemEpochPda,\n} from \"./pda.js\";\nimport { getLazySettleRemainingAccounts } from \"./queries.js\";\nimport { USDC_DECIMALS, SHARE_DECIMALS, DEFAULT_RPC_TIMEOUT_MS } from \"./config.js\";\nimport {\n VaultPausedError,\n MinDepositError,\n MaxEpochDepositError,\n EpochNotOpenError,\n NoPendingDepositError,\n RpcError,\n} from \"./errors.js\";\nimport { withTimeout } from \"./rpc-utils.js\";\nimport type { TransactionResult, DepositParams, RedeemParams, UserTxParams } from \"./types.js\";\n\n/**\n * Finalize an unsigned transaction: set recentBlockhash and feePayer,\n * then serialize to base58. Wraps getLatestBlockhash with a timeout.\n */\nasync function finalizeTx(\n tx: Transaction,\n program: Program,\n feePayer: PublicKey,\n timeoutMs: number = DEFAULT_RPC_TIMEOUT_MS,\n): Promise<{ transaction: Transaction; serialized: string; blockhash: string; lastValidBlockHeight: number }> {\n const connection = program.provider.connection;\n const { blockhash, lastValidBlockHeight } = await withTimeout(\n connection.getLatestBlockhash(),\n timeoutMs,\n \"getLatestBlockhash\",\n );\n tx.recentBlockhash = blockhash;\n tx.lastValidBlockHeight = lastValidBlockHeight;\n tx.feePayer = feePayer;\n return {\n transaction: tx,\n serialized: bs58.encode(tx.serialize({ requireAllSignatures: false })),\n blockhash,\n lastValidBlockHeight,\n };\n}\n\n/**\n * Convert a human-readable USDC amount to raw integer (6 decimals).\n * Uses string-based conversion to avoid floating-point precision loss.\n * e.g., 1.005 * 1e6 = 1004999.9999999999 (wrong), but string-based = 1005000 (correct)\n */\nfunction usdcToRaw(amount: number): BN {\n const str = amount.toFixed(USDC_DECIMALS);\n const [whole, frac = \"\"] = str.split(\".\");\n const raw = whole + frac.padEnd(USDC_DECIMALS, \"0\").slice(0, USDC_DECIMALS);\n return new BN(raw);\n}\n\n/**\n * Convert a human-readable share amount to raw integer (6 decimals).\n * Uses string-based conversion to avoid floating-point precision loss.\n */\nfunction sharesToRaw(amount: number): BN {\n const str = amount.toFixed(SHARE_DECIMALS);\n const [whole, frac = \"\"] = str.split(\".\");\n const raw = whole + frac.padEnd(SHARE_DECIMALS, \"0\").slice(0, SHARE_DECIMALS);\n return new BN(raw);\n}\n\n/**\n * Build an unsigned deposit transaction.\n *\n * Validates vault state (not paused, epoch open, min/max amounts)\n * before building. Lazy settlement remaining_accounts are computed\n * automatically.\n *\n * @param program - Initialized Anchor program (readonly, no signer needed)\n * @param params - Deposit parameters (user pubkey + USDC amount)\n * @returns Unsigned transaction ready for signing\n *\n * @throws {VaultPausedError} If the vault is paused\n * @throws {MinDepositError} If amount is below minimum\n * @throws {MaxEpochDepositError} If amount exceeds epoch limit\n * @throws {EpochNotOpenError} If deposit epoch is not open\n * @throws {RpcError} If an RPC call fails\n */\nexport async function buildDepositTx(\n program: Program,\n params: DepositParams,\n options?: { timeoutMs?: number },\n): Promise<TransactionResult> {\n const { user, amountUsdc } = params;\n const programId = program.programId;\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n const [usdcVaultPda] = getUsdcVaultPda(vaultMirrorPda, programId);\n const [userPda] = getUserPda(vaultMirrorPda, user, programId);\n\n // Fetch vault state for validation\n let vaultMirrorAccount;\n try {\n vaultMirrorAccount = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n } catch (err) {\n throw new RpcError(\"buildDepositTx:fetchVaultMirror\", err);\n }\n\n // Validate vault state\n if (vaultMirrorAccount.paused) {\n throw new VaultPausedError();\n }\n\n const minDeposit = vaultMirrorAccount.minDeposit.toNumber() / 10 ** USDC_DECIMALS;\n if (amountUsdc < minDeposit) {\n throw new MinDepositError(minDeposit);\n }\n\n const currentDepositEpoch = vaultMirrorAccount.currentDepositEpoch.toNumber();\n const currentRedeemEpoch = vaultMirrorAccount.currentRedeemEpoch.toNumber();\n const [depositEpochPda] = getDepositEpochPda(vaultMirrorPda, currentDepositEpoch, programId);\n\n // Validate deposit epoch is Open\n try {\n const epochAccount = await (program.account as any).depositEpoch.fetch(depositEpochPda);\n if (!(\"open\" in epochAccount.status)) {\n const statusKey = Object.keys(epochAccount.status)[0] || \"unknown\";\n throw new EpochNotOpenError(\"deposit\", statusKey);\n }\n } catch (err) {\n if (err instanceof EpochNotOpenError) throw err;\n // If epoch PDA doesn't exist yet, that's OK — it will be created on first deposit\n }\n\n const usdcMint: PublicKey = vaultMirrorAccount.usdcMint;\n const userUsdc = await getAssociatedTokenAddress(usdcMint, user, true);\n const amountBn = usdcToRaw(amountUsdc);\n\n // Lazy settlement: automatically compute remaining_accounts\n const remainingAccounts = await getLazySettleRemainingAccounts(\n program,\n programId,\n vaultMirrorPda,\n userPda,\n );\n\n const tx = await program.methods\n .deposit(amountBn)\n .accounts({\n user,\n vaultMirror: vaultMirrorPda,\n userAccount: userPda,\n depositEpoch: depositEpochPda,\n userUsdc,\n usdcVault: usdcVaultPda,\n usdcMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(remainingAccounts)\n .transaction();\n\n const finalized = await finalizeTx(tx, program, user, options?.timeoutMs);\n return {\n ...finalized,\n message: `Deposit ${amountUsdc} USDC into TBook Vault (Epoch #${currentDepositEpoch})`,\n };\n}\n\n/**\n * Build an unsigned request-redeem transaction.\n *\n * Locks the specified shares for redemption in the current epoch.\n * The actual USDC payout happens after the curator settles the epoch.\n *\n * @param program - Initialized Anchor program\n * @param params - Redeem parameters (user pubkey + share amount)\n * @returns Unsigned transaction ready for signing\n *\n * @throws {VaultPausedError} If the vault is paused\n * @throws {RpcError} If an RPC call fails\n */\nexport async function buildRedeemTx(\n program: Program,\n params: RedeemParams,\n options?: { timeoutMs?: number },\n): Promise<TransactionResult> {\n const { user, shares } = params;\n const programId = program.programId;\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n const [userPda] = getUserPda(vaultMirrorPda, user, programId);\n\n let vaultMirrorAccount;\n try {\n vaultMirrorAccount = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n } catch (err) {\n throw new RpcError(\"buildRedeemTx:fetchVaultMirror\", err);\n }\n\n if (vaultMirrorAccount.paused) {\n throw new VaultPausedError();\n }\n\n const currentDepositEpoch = vaultMirrorAccount.currentDepositEpoch.toNumber();\n const currentRedeemEpoch = vaultMirrorAccount.currentRedeemEpoch.toNumber();\n const [redeemEpochPda] = getRedeemEpochPda(vaultMirrorPda, currentRedeemEpoch, programId);\n\n // Validate redeem epoch is Open\n try {\n const epochAccount = await (program.account as any).redeemEpoch.fetch(redeemEpochPda);\n if (!(\"open\" in epochAccount.status)) {\n const statusKey = Object.keys(epochAccount.status)[0] || \"unknown\";\n throw new EpochNotOpenError(\"redeem\", statusKey);\n }\n } catch (err) {\n if (err instanceof EpochNotOpenError) throw err;\n // If epoch PDA doesn't exist yet, that's OK\n }\n\n const sharesBn = sharesToRaw(shares);\n\n const remainingAccounts = await getLazySettleRemainingAccounts(\n program,\n programId,\n vaultMirrorPda,\n userPda,\n );\n\n const tx = await program.methods\n .requestRedeem(sharesBn)\n .accounts({\n user,\n vaultMirror: vaultMirrorPda,\n userAccount: userPda,\n redeemEpoch: redeemEpochPda,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(remainingAccounts)\n .transaction();\n\n const finalized = await finalizeTx(tx, program, user, options?.timeoutMs);\n return {\n ...finalized,\n message: `Request redeem of ${shares} vault shares (Epoch #${currentRedeemEpoch})`,\n };\n}\n\n/**\n * Build an unsigned claim transaction.\n *\n * Withdraws any claimable USDC to the user's wallet.\n * Claim always works even when the vault is paused.\n *\n * @param program - Initialized Anchor program\n * @param params - User parameters (user pubkey)\n * @returns Unsigned transaction ready for signing\n */\nexport async function buildClaimTx(\n program: Program,\n params: UserTxParams,\n options?: { timeoutMs?: number },\n): Promise<TransactionResult> {\n const { user } = params;\n const programId = program.programId;\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n const [usdcVaultPda] = getUsdcVaultPda(vaultMirrorPda, programId);\n const [userPda] = getUserPda(vaultMirrorPda, user, programId);\n\n let vaultMirrorAccount;\n try {\n vaultMirrorAccount = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n } catch (err) {\n throw new RpcError(\"buildClaimTx:fetchVaultMirror\", err);\n }\n\n const usdcMint: PublicKey = vaultMirrorAccount.usdcMint;\n const userUsdc = await getAssociatedTokenAddress(usdcMint, user, true);\n\n const remainingAccounts = await getLazySettleRemainingAccounts(\n program,\n programId,\n vaultMirrorPda,\n userPda,\n );\n\n const tx = await program.methods\n .claim()\n .accounts({\n user,\n vaultMirror: vaultMirrorPda,\n userAccount: userPda,\n userUsdc,\n usdcVault: usdcVaultPda,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts)\n .transaction();\n\n const finalized = await finalizeTx(tx, program, user, options?.timeoutMs);\n return {\n ...finalized,\n message: \"Claim USDC from TBook Vault\",\n };\n}\n\n/**\n * Build an unsigned cancel-deposit transaction.\n *\n * Cancels a pending deposit and returns USDC minus a 0.1% fee.\n *\n * @param program - Initialized Anchor program\n * @param params - User parameters (user pubkey)\n * @returns Unsigned transaction ready for signing\n */\nexport async function buildCancelDepositTx(\n program: Program,\n params: UserTxParams,\n options?: { timeoutMs?: number },\n): Promise<TransactionResult> {\n const { user } = params;\n const programId = program.programId;\n const [vaultMirrorPda] = getVaultMirrorPda(programId);\n const [usdcVaultPda] = getUsdcVaultPda(vaultMirrorPda, programId);\n const [userPda] = getUserPda(vaultMirrorPda, user, programId);\n\n let vaultMirrorAccount;\n try {\n vaultMirrorAccount = await (program.account as any).vaultMirror.fetch(vaultMirrorPda);\n } catch (err) {\n throw new RpcError(\"buildCancelDepositTx:fetchVaultMirror\", err);\n }\n\n const usdcMint: PublicKey = vaultMirrorAccount.usdcMint;\n const userUsdc = await getAssociatedTokenAddress(usdcMint, user, true);\n\n let userAccount;\n try {\n userAccount = await (program.account as any).userAccount.fetchNullable(userPda);\n } catch (err) {\n throw new RpcError(\"buildCancelDepositTx:fetchUserAccount\", err);\n }\n\n if (!userAccount) {\n throw new NoPendingDepositError();\n }\n\n // Check if there is actually a pending deposit\n if (userAccount.pendingDepositUsdc && userAccount.pendingDepositUsdc.toNumber() === 0) {\n throw new NoPendingDepositError();\n }\n\n const depositEpochNum = userAccount.pendingDepositEpoch.toNumber();\n const [depositEpochPda] = getDepositEpochPda(vaultMirrorPda, depositEpochNum, programId);\n\n const remainingAccounts = await getLazySettleRemainingAccounts(\n program,\n programId,\n vaultMirrorPda,\n userPda,\n );\n\n const tx = await program.methods\n .cancelDeposit()\n .accounts({\n user,\n vaultMirror: vaultMirrorPda,\n userAccount: userPda,\n depositEpoch: depositEpochPda,\n userUsdc,\n usdcVault: usdcVaultPda,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts)\n .transaction();\n\n const finalized = await finalizeTx(tx, program, user, options?.timeoutMs);\n return {\n ...finalized,\n message: \"Cancel pending deposit (0.1% fee applies)\",\n };\n}\n","{\n \"address\": \"BdeE87CsE9kvxJJcxaJqxNsC2nC6hFft3UBzcgAm5X1i\",\n \"metadata\": {\n \"name\": \"vault_gateway\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Solana Vault Gateway - Cross-chain entry point for TBook Vault investment\"\n },\n \"instructions\": [\n {\n \"name\": \"cancel_deposit\",\n \"docs\": [\n \"Cancel a pending deposit in the current open deposit epoch (with fee).\"\n ],\n \"discriminator\": [\n 207,\n 37,\n 219,\n 229,\n 183,\n 50,\n 54,\n 245\n ],\n \"accounts\": [\n {\n \"name\": \"user\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"user_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"deposit_epoch\",\n \"docs\": [\n \"Current open deposit epoch\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 112,\n 111,\n 115,\n 105,\n 116,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_deposit_epoch\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"user_usdc\",\n \"writable\": true\n },\n {\n \"name\": \"usdc_vault\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claim available USDC (works even when paused).\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"user\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"user_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"user_usdc\",\n \"writable\": true\n },\n {\n \"name\": \"usdc_vault\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"deposit\",\n \"docs\": [\n \"Deposit USDC into the current open deposit epoch.\",\n \"Pass previous DepositEpoch/RedeemEpoch PDAs as remaining_accounts for lazy settlement.\"\n ],\n \"discriminator\": [\n 242,\n 35,\n 198,\n 137,\n 82,\n 225,\n 242,\n 182\n ],\n \"accounts\": [\n {\n \"name\": \"user\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"user_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"deposit_epoch\",\n \"docs\": [\n \"Current open deposit epoch\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 112,\n 111,\n 115,\n 105,\n 116,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_deposit_epoch\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"user_usdc\",\n \"docs\": [\n \"User's USDC token account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"usdc_vault\",\n \"docs\": [\n \"Vault USDC token account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"deposit_to_vault\",\n \"docs\": [\n \"Deposit USDC back into the PDA vault (curator → vault).\",\n \"Used after bridging redeemed USDC back from Sui to make it claimable.\"\n ],\n \"discriminator\": [\n 18,\n 62,\n 110,\n 8,\n 26,\n 106,\n 248,\n 151\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"usdc_vault\",\n \"writable\": true\n },\n {\n \"name\": \"curator_usdc\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"emergency_withdraw\",\n \"docs\": [\n \"Emergency withdraw: Authority can withdraw USDC from the vault.\"\n ],\n \"discriminator\": [\n 239,\n 45,\n 203,\n 64,\n 150,\n 73,\n 218,\n 92\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"usdc_vault\",\n \"writable\": true\n },\n {\n \"name\": \"authority_usdc\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"freeze_deposit_epoch\",\n \"docs\": [\n \"Freeze the current open deposit epoch and create a new one.\",\n \"Rejects if epoch has no deposits.\",\n \"Serial constraint: previous deposit epoch must be Settled or RolledBack.\",\n \"Routine operation — requires operator (1-of-3).\"\n ],\n \"discriminator\": [\n 120,\n 11,\n 158,\n 152,\n 237,\n 62,\n 188,\n 235\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_deposit_epoch\",\n \"docs\": [\n \"Current deposit epoch to freeze\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 112,\n 111,\n 115,\n 105,\n 116,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_deposit_epoch\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"previous_deposit_epoch\",\n \"docs\": [\n \"Previous deposit epoch (optional — only needed if current > 0 for serial constraint)\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"next_deposit_epoch\",\n \"docs\": [\n \"Next deposit epoch to create\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 112,\n 111,\n 115,\n 105,\n 116,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_deposit_epoch.checked_add(1)\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"freeze_redeem_epoch\",\n \"docs\": [\n \"Freeze the current open redeem epoch and create a new one.\",\n \"Rejects if epoch has no redeems.\",\n \"Serial constraint: previous redeem epoch must be Settled or RolledBack.\",\n \"Routine operation — requires operator (1-of-3).\"\n ],\n \"discriminator\": [\n 233,\n 155,\n 202,\n 214,\n 205,\n 1,\n 50,\n 15\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_redeem_epoch\",\n \"docs\": [\n \"Current redeem epoch to freeze\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 100,\n 101,\n 101,\n 109,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_redeem_epoch\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"previous_redeem_epoch\",\n \"docs\": [\n \"Previous redeem epoch (optional — only needed if current > 0 for serial constraint)\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"next_redeem_epoch\",\n \"docs\": [\n \"Next redeem epoch to create\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 100,\n 101,\n 101,\n 109,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_redeem_epoch.checked_add(1)\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initialize the vault mirror, first deposit epoch (0, Open), and first redeem epoch (0, Open)\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"usdc_vault\",\n \"docs\": [\n \"USDC token account owned by VaultMirror PDA\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 100,\n 99,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n }\n ]\n }\n },\n {\n \"name\": \"usdc_mint\"\n },\n {\n \"name\": \"deposit_epoch\",\n \"docs\": [\n \"First deposit epoch (epoch 0)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 112,\n 111,\n 115,\n 105,\n 116,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"redeem_epoch\",\n \"docs\": [\n \"First redeem epoch (epoch 0)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 100,\n 101,\n 101,\n 109,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"curator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_epoch_deposit\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"mark_bridging\",\n \"docs\": [\n \"Mark a frozen deposit epoch as bridging and extract USDC to curator's wallet for CCTP.\",\n \"Sensitive operation — requires curator (2-of-3).\"\n ],\n \"discriminator\": [\n 161,\n 92,\n 108,\n 165,\n 34,\n 123,\n 227,\n 110\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"deposit_epoch\",\n \"writable\": true\n },\n {\n \"name\": \"usdc_vault\",\n \"docs\": [\n \"Vault USDC token account (PDA-owned, source of funds)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"curator_usdc\",\n \"docs\": [\n \"Curator's USDC token account (destination for CCTP bridge)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"request_redeem\",\n \"docs\": [\n \"Request redemption of shares in the current open redeem epoch.\"\n ],\n \"discriminator\": [\n 105,\n 49,\n 44,\n 38,\n 207,\n 241,\n 33,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"user\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"user_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"redeem_epoch\",\n \"docs\": [\n \"Current open redeem epoch\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 100,\n 101,\n 101,\n 109,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"vault_mirror.current_redeem_epoch\",\n \"account\": \"VaultMirror\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"shares\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"rollback_deposit_epoch\",\n \"docs\": [\n \"Rollback a deposit epoch (Frozen or Bridging → RolledBack).\",\n \"Users auto-rollback via lazy settlement: deposits become claimable USDC.\",\n \"Sensitive operation — requires curator (2-of-3).\"\n ],\n \"discriminator\": [\n 119,\n 99,\n 137,\n 62,\n 80,\n 139,\n 61,\n 181\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"deposit_epoch\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"rollback_redeem_epoch\",\n \"docs\": [\n \"Rollback a redeem epoch (Frozen → RolledBack).\",\n \"Users auto-rollback via lazy settlement: locked shares are restored.\",\n \"Sensitive operation — requires curator (2-of-3).\"\n ],\n \"discriminator\": [\n 172,\n 217,\n 168,\n 112,\n 217,\n 37,\n 157,\n 218\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"redeem_epoch\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"set_authority\",\n \"docs\": [\n \"Transfer authority to a new address\"\n ],\n \"discriminator\": [\n 133,\n 250,\n 37,\n 21,\n 110,\n 163,\n 26,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_authority\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"set_curator\",\n \"docs\": [\n \"Change the curator address\"\n ],\n \"discriminator\": [\n 115,\n 127,\n 196,\n 219,\n 235,\n 198,\n 96,\n 253\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_curator\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"set_max_epoch_deposit\",\n \"docs\": [\n \"Update the maximum epoch deposit cap\"\n ],\n \"discriminator\": [\n 205,\n 115,\n 249,\n 24,\n 108,\n 6,\n 169,\n 224\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_max\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_min_deposit\",\n \"docs\": [\n \"Update the minimum deposit amount.\"\n ],\n \"discriminator\": [\n 15,\n 182,\n 74,\n 248,\n 251,\n 148,\n 186,\n 171\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_min\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_operator\",\n \"docs\": [\n \"Change the operator address\"\n ],\n \"discriminator\": [\n 238,\n 153,\n 101,\n 169,\n 243,\n 131,\n 36,\n 1\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_operator\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"set_pause\",\n \"docs\": [\n \"Toggle pause state. When paused, deposit and redeem are blocked, but claim still works.\"\n ],\n \"discriminator\": [\n 63,\n 32,\n 154,\n 2,\n 56,\n 103,\n 79,\n 45\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"settle_deposits\",\n \"docs\": [\n \"Settle a deposit epoch: lock in shares minted and mark as Settled.\",\n \"Updates vault_mirror.total_shares.\",\n \"Sensitive operation — requires curator (2-of-3).\"\n ],\n \"discriminator\": [\n 216,\n 163,\n 126,\n 212,\n 189,\n 105,\n 226,\n 91\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"deposit_epoch\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"shares_minted\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"settle_redeems\",\n \"docs\": [\n \"Settle a redeem epoch: lock in USDC for redeemers and mark as Settled.\",\n \"Updates vault_mirror.total_shares.\",\n \"Curator must have called deposit_to_vault first to fund the PDA.\",\n \"Sensitive operation — requires curator (2-of-3).\"\n ],\n \"discriminator\": [\n 41,\n 238,\n 144,\n 152,\n 241,\n 69,\n 163,\n 71\n ],\n \"accounts\": [\n {\n \"name\": \"curator\",\n \"signer\": true\n },\n {\n \"name\": \"vault_mirror\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 109,\n 105,\n 114,\n 114,\n 111,\n 114\n ]\n }\n ]\n }\n },\n {\n \"name\": \"redeem_epoch\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"usdc_for_redeems\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"DepositEpoch\",\n \"discriminator\": [\n 113,\n 170,\n 28,\n 39,\n 59,\n 253,\n 178,\n 123\n ]\n },\n {\n \"name\": \"RedeemEpoch\",\n \"discriminator\": [\n 151,\n 138,\n 181,\n 158,\n 40,\n 74,\n 85,\n 44\n ]\n },\n {\n \"name\": \"UserAccount\",\n \"discriminator\": [\n 211,\n 33,\n 136,\n 16,\n 186,\n 110,\n 242,\n 127\n ]\n },\n {\n \"name\": \"VaultMirror\",\n \"discriminator\": [\n 187,\n 198,\n 62,\n 71,\n 138,\n 173,\n 117,\n 230\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AuthorityChanged\",\n \"discriminator\": [\n 31,\n 19,\n 174,\n 152,\n 4,\n 82,\n 215,\n 226\n ]\n },\n {\n \"name\": \"CuratorChanged\",\n \"discriminator\": [\n 87,\n 59,\n 49,\n 50,\n 194,\n 244,\n 0,\n 178\n ]\n },\n {\n \"name\": \"DepositCancelled\",\n \"discriminator\": [\n 233,\n 23,\n 42,\n 206,\n 203,\n 207,\n 147,\n 35\n ]\n },\n {\n \"name\": \"DepositEpochBridging\",\n \"discriminator\": [\n 135,\n 188,\n 190,\n 180,\n 130,\n 52,\n 8,\n 188\n ]\n },\n {\n \"name\": \"DepositEpochFrozen\",\n \"discriminator\": [\n 212,\n 27,\n 141,\n 46,\n 207,\n 146,\n 142,\n 61\n ]\n },\n {\n \"name\": \"DepositEpochRolledBack\",\n \"discriminator\": [\n 66,\n 33,\n 209,\n 58,\n 163,\n 10,\n 48,\n 130\n ]\n },\n {\n \"name\": \"DepositLazySettled\",\n \"discriminator\": [\n 200,\n 161,\n 186,\n 180,\n 2,\n 93,\n 11,\n 155\n ]\n },\n {\n \"name\": \"DepositsSettled\",\n \"discriminator\": [\n 202,\n 56,\n 60,\n 238,\n 125,\n 34,\n 71,\n 245\n ]\n },\n {\n \"name\": \"EmergencyWithdrawn\",\n \"discriminator\": [\n 116,\n 226,\n 36,\n 3,\n 37,\n 92,\n 138,\n 76\n ]\n },\n {\n \"name\": \"MaxEpochDepositChanged\",\n \"discriminator\": [\n 111,\n 5,\n 240,\n 109,\n 254,\n 93,\n 243,\n 97\n ]\n },\n {\n \"name\": \"MinDepositChanged\",\n \"discriminator\": [\n 110,\n 94,\n 102,\n 242,\n 183,\n 121,\n 89,\n 244\n ]\n },\n {\n \"name\": \"OperatorChanged\",\n \"discriminator\": [\n 231,\n 79,\n 62,\n 226,\n 190,\n 139,\n 176,\n 51\n ]\n },\n {\n \"name\": \"RedeemEpochFrozen\",\n \"discriminator\": [\n 25,\n 105,\n 245,\n 218,\n 51,\n 117,\n 30,\n 200\n ]\n },\n {\n \"name\": \"RedeemEpochRolledBack\",\n \"discriminator\": [\n 186,\n 177,\n 42,\n 37,\n 248,\n 170,\n 149,\n 196\n ]\n },\n {\n \"name\": \"RedeemLazySettled\",\n \"discriminator\": [\n 196,\n 65,\n 102,\n 125,\n 173,\n 10,\n 31,\n 23\n ]\n },\n {\n \"name\": \"RedeemRequested\",\n \"discriminator\": [\n 5,\n 130,\n 67,\n 249,\n 243,\n 168,\n 11,\n 88\n ]\n },\n {\n \"name\": \"RedeemsSettled\",\n \"discriminator\": [\n 233,\n 221,\n 150,\n 195,\n 102,\n 11,\n 229,\n 220\n ]\n },\n {\n \"name\": \"UserClaimed\",\n \"discriminator\": [\n 222,\n 173,\n 163,\n 173,\n 82,\n 10,\n 133,\n 226\n ]\n },\n {\n \"name\": \"UserDeposited\",\n \"discriminator\": [\n 83,\n 166,\n 194,\n 102,\n 87,\n 104,\n 88,\n 137\n ]\n },\n {\n \"name\": \"VaultFunded\",\n \"discriminator\": [\n 192,\n 119,\n 245,\n 193,\n 55,\n 223,\n 195,\n 50\n ]\n },\n {\n \"name\": \"VaultInitialized\",\n \"discriminator\": [\n 180,\n 43,\n 207,\n 2,\n 18,\n 71,\n 3,\n 75\n ]\n },\n {\n \"name\": \"VaultPaused\",\n \"discriminator\": [\n 198,\n 157,\n 22,\n 151,\n 68,\n 100,\n 162,\n 35\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"VaultPaused\",\n \"msg\": \"Vault is paused\"\n },\n {\n \"code\": 6001,\n \"name\": \"DepositBelowMinimum\",\n \"msg\": \"Deposit amount below minimum\"\n },\n {\n \"code\": 6002,\n \"name\": \"EpochCapExceeded\",\n \"msg\": \"Epoch deposit cap exceeded\"\n },\n {\n \"code\": 6003,\n \"name\": \"InvalidEpochStatus\",\n \"msg\": \"Invalid epoch status for this operation\"\n },\n {\n \"code\": 6004,\n \"name\": \"EmptyDepositEpoch\",\n \"msg\": \"Deposit epoch has no deposits\"\n },\n {\n \"code\": 6005,\n \"name\": \"EmptyRedeemEpoch\",\n \"msg\": \"Redeem epoch has no redeems\"\n },\n {\n \"code\": 6006,\n \"name\": \"PreviousDepositEpochUnsettled\",\n \"msg\": \"Previous deposit epoch not yet settled or rolled back\"\n },\n {\n \"code\": 6007,\n \"name\": \"PreviousRedeemEpochUnsettled\",\n \"msg\": \"Previous redeem epoch not yet settled or rolled back\"\n },\n {\n \"code\": 6008,\n \"name\": \"NoPendingDeposit\",\n \"msg\": \"No pending deposit to cancel\"\n },\n {\n \"code\": 6009,\n \"name\": \"InsufficientShares\",\n \"msg\": \"Insufficient shares for redemption\"\n },\n {\n \"code\": 6010,\n \"name\": \"NothingToClaim\",\n \"msg\": \"No claimable USDC\"\n },\n {\n \"code\": 6011,\n \"name\": \"NotCurator\",\n \"msg\": \"Unauthorized: not curator\"\n },\n {\n \"code\": 6012,\n \"name\": \"NotOperator\",\n \"msg\": \"Unauthorized: not operator\"\n },\n {\n \"code\": 6013,\n \"name\": \"NotAuthority\",\n \"msg\": \"Unauthorized: not authority\"\n },\n {\n \"code\": 6014,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidDepositEpoch\",\n \"msg\": \"Invalid deposit epoch PDA passed for lazy settlement\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidRedeemEpoch\",\n \"msg\": \"Invalid redeem epoch PDA passed for lazy settlement\"\n },\n {\n \"code\": 6017,\n \"name\": \"CannotRollbackSettled\",\n \"msg\": \"Cannot rollback a settled epoch\"\n },\n {\n \"code\": 6018,\n \"name\": \"PendingDepositUnsettled\",\n \"msg\": \"User has unsettled pending deposit from a different epoch\"\n },\n {\n \"code\": 6019,\n \"name\": \"PendingRedeemUnsettled\",\n \"msg\": \"User has unsettled pending redeem from a different epoch\"\n },\n {\n \"code\": 6020,\n \"name\": \"ZeroAmount\",\n \"msg\": \"Amount must be greater than zero\"\n },\n {\n \"code\": 6021,\n \"name\": \"MinDepositTooLow\",\n \"msg\": \"Minimum deposit must be at least 1 token (smallest unit)\"\n },\n {\n \"code\": 6022,\n \"name\": \"NoDepositActivity\",\n \"msg\": \"Deposit epoch has no activity to settle\"\n },\n {\n \"code\": 6023,\n \"name\": \"NoRedeemActivity\",\n \"msg\": \"Redeem epoch has no activity to settle\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AuthorityChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"old_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_authority\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"CuratorChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"old_curator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_curator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositCancelled\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_returned\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_epoch\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositEpoch\",\n \"docs\": [\n \"Deposit epoch — tracks a batch of user deposits (Solana → Sui path)\",\n \"Seeds: [b\\\"deposit_epoch\\\", vault_mirror.key(), epoch.to_le_bytes()]\",\n \"\",\n \"Lifecycle: Open → Frozen → Bridging → Settled (or RolledBack from Frozen/Bridging)\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"docs\": [\n \"Deposit epoch number\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"status\",\n \"docs\": [\n \"Current status\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"EpochStatus\"\n }\n }\n },\n {\n \"name\": \"total_deposit_usdc\",\n \"docs\": [\n \"Total USDC deposited by users in this epoch\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_user_count\",\n \"docs\": [\n \"Number of users who deposited\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"settled_shares_minted\",\n \"docs\": [\n \"Total new shares minted for depositors (set by settle_deposits)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"frozen_at\",\n \"docs\": [\n \"Timestamp when epoch was frozen\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bridge_nonce\",\n \"docs\": [\n \"CCTP bridge nonce (set by mark_bridging)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for this PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositEpochBridging\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositEpochFrozen\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_deposit_usdc\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_user_count\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositEpochRolledBack\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposits_returned\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositLazySettled\",\n \"docs\": [\n \"Emitted when a user's pending deposit is lazily settled\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deposit_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_rollback\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"DepositsSettled\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares_minted\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EmergencyWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochStatus\",\n \"docs\": [\n \"Epoch lifecycle for deposits: Open → Frozen → Bridging → Settled (or RolledBack)\",\n \"Epoch lifecycle for redeems: Open → Frozen → Settled (or RolledBack)\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Open\"\n },\n {\n \"name\": \"Frozen\"\n },\n {\n \"name\": \"Bridging\"\n },\n {\n \"name\": \"Settled\"\n },\n {\n \"name\": \"RolledBack\"\n }\n ]\n }\n },\n {\n \"name\": \"MaxEpochDepositChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"old_value\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_value\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MinDepositChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"old_value\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_value\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OperatorChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"old_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemEpoch\",\n \"docs\": [\n \"Redeem epoch — tracks a batch of user redeems (Sui → Solana path)\",\n \"Seeds: [b\\\"redeem_epoch\\\", vault_mirror.key(), epoch.to_le_bytes()]\",\n \"\",\n \"Lifecycle: Open → Frozen → Settled (or RolledBack from Frozen)\",\n \"No Bridging state — the Sui→Solana bridge is handled off-chain by the curator.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"docs\": [\n \"Redeem epoch number\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"status\",\n \"docs\": [\n \"Current status\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"EpochStatus\"\n }\n }\n },\n {\n \"name\": \"total_redeem_shares\",\n \"docs\": [\n \"Total shares queued for redemption in this epoch\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"redeem_user_count\",\n \"docs\": [\n \"Number of users who redeemed\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"settled_usdc_for_redeems\",\n \"docs\": [\n \"Total USDC allocated for redeemers (set by settle_redeems)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"frozen_at\",\n \"docs\": [\n \"Timestamp when epoch was frozen\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for this PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemEpochFrozen\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_redeem_shares\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"redeem_user_count\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemEpochRolledBack\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares_restored\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemLazySettled\",\n \"docs\": [\n \"Emitted when a user's pending redeem is lazily settled\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"redeem_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"usdc_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_rollback\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemRequested\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"shares\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"redeem_epoch\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemsSettled\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"usdc_for_redeems\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"UserAccount\",\n \"docs\": [\n \"Per-user account tracking shares and pending operations\",\n \"Seeds: [b\\\"user\\\", vault_mirror.key(), user_pubkey]\",\n \"\",\n \"pending_deposit_epoch refers to a DepositEpoch number.\",\n \"pending_redeem_epoch refers to a RedeemEpoch number.\",\n \"The two are completely independent.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"User wallet pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"shares\",\n \"docs\": [\n \"Settled (confirmed) shares\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_deposit_usdc\",\n \"docs\": [\n \"USDC amount pending deposit in current open deposit epoch\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_deposit_epoch\",\n \"docs\": [\n \"DepositEpoch number of pending deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_redeem_shares\",\n \"docs\": [\n \"Shares pending redemption in current open redeem epoch\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pending_redeem_epoch\",\n \"docs\": [\n \"RedeemEpoch number of pending redeem\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"claimable_usdc\",\n \"docs\": [\n \"USDC available for user to claim\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for this PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"UserClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"UserDeposited\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposit_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_pending\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"VaultFunded\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"curator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"VaultInitialized\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"curator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_epoch_deposit\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"VaultMirror\",\n \"docs\": [\n \"Global vault mirror — single PDA holding all state\",\n \"Seeds: [b\\\"vault_mirror\\\"]\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Admin authority (can pause, set curator/operator, change config)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"curator\",\n \"docs\": [\n \"Curator multisig (2-of-3) — sensitive ops: mark_bridging, settle, rollback\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator multisig (1-of-3) — routine ops: freeze epochs\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"docs\": [\n \"USDC SPL token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_vault\",\n \"docs\": [\n \"PDA token account holding all USDC deposits\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_shares\",\n \"docs\": [\n \"Total shares across all users\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_deposit_epoch\",\n \"docs\": [\n \"Current deposit epoch number (independent of redeem epochs)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_redeem_epoch\",\n \"docs\": [\n \"Current redeem epoch number (independent of deposit epochs)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_epoch_deposit\",\n \"docs\": [\n \"Global cap on deposits per epoch\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_deposit\",\n \"docs\": [\n \"Minimum deposit amount (e.g. 1 USDC = 1_000_000)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"paused\",\n \"docs\": [\n \"Whether deposits and redeems are paused (claim always works)\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for VaultMirror PDA\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"vault_bump\",\n \"docs\": [\n \"Bump for usdc_vault token account PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"VaultPaused\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ]\n }\n }\n ]\n}","/**\n * Main SDK client for TBook Vault Gateway.\n *\n * ```typescript\n * import { TBookVault } from \"@tbookdev/vault-sdk\";\n *\n * const vault = new TBookVault({ network: \"mainnet-beta\" });\n *\n * // Read vault state (no wallet needed)\n * const info = await vault.getVaultInfo();\n * const price = await vault.getSharePrice();\n *\n * // Build unsigned transactions\n * const { transaction, serialized } = await vault.buildDeposit({\n * user: userPublicKey,\n * amountUsdc: 100,\n * });\n * // Send `serialized` to WaaS or `transaction` to wallet adapter\n * ```\n *\n * @module client\n */\n\nimport { AnchorProvider, Program } from \"@coral-xyz/anchor\";\nimport { Connection, Keypair, PublicKey } from \"@solana/web3.js\";\nimport {\n getDefaultRpcUrl,\n getVaultConfig,\n listBuiltInVaults,\n DEFAULT_VAULT_ID,\n DEFAULT_RPC_TIMEOUT_MS,\n type VaultConfig,\n} from \"./config.js\";\nimport { UnknownVaultError } from \"./errors.js\";\nimport { fetchVaultInfo, fetchUserAccount } from \"./queries.js\";\nimport { fetchSharePrice } from \"./share-price.js\";\nimport {\n fetchTransactionHistory,\n type VaultTransaction,\n type TransactionHistoryOptions,\n} from \"./history.js\";\nimport {\n buildDepositTx,\n buildRedeemTx,\n buildClaimTx,\n buildCancelDepositTx,\n} from \"./transactions.js\";\nimport { getVaultMirrorPda, getUserPda } from \"./pda.js\";\nimport type {\n TBookVaultOptions,\n VaultDescriptor,\n VaultInfoResult,\n UserAccount,\n SharePriceData,\n TransactionResult,\n DepositParams,\n RedeemParams,\n UserTxParams,\n} from \"./types.js\";\n\n// Import the devnet IDL\nimport devnetIdl from \"./idl/vault-gateway-devnet.json\" with { type: \"json\" };\n\n/**\n * TBook Vault SDK client.\n *\n * Provides a unified interface for reading on-chain state and building\n * unsigned transactions. Framework-agnostic — works in browsers and Node.js.\n *\n * The client is lightweight and stateless. Each method makes independent\n * RPC calls, so instances can be shared across components safely.\n */\nexport class TBookVault {\n /** Solana RPC connection. */\n readonly connection: Connection;\n /** Active network. */\n readonly network: TBookVaultOptions[\"network\"];\n /** Default timeout for RPC calls in milliseconds. */\n readonly timeoutMs: number;\n\n private readonly apiKey?: string;\n /** Cache of Anchor programs, keyed by vault ID. */\n private readonly programs = new Map<string, Program>();\n /** Timestamps of when each cached program was created. */\n private readonly programCreatedAt = new Map<string, number>();\n /** Maximum age for cached programs (5 minutes). */\n private static readonly PROGRAM_CACHE_TTL_MS = 5 * 60 * 1000;\n\n constructor(options: TBookVaultOptions) {\n this.network = options.network;\n this.apiKey = options.apiKey;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_RPC_TIMEOUT_MS;\n this.connection = new Connection(\n options.rpcUrl ?? getDefaultRpcUrl(options.network),\n {\n commitment: \"confirmed\",\n confirmTransactionInitialTimeout: this.timeoutMs,\n },\n );\n }\n\n // ── Vault Registry ──\n\n /**\n * List all available vaults on the current network.\n *\n * Currently returns built-in vaults only. In the future, this will\n * also query the TBook API for dynamically registered vaults.\n */\n async listVaults(): Promise<VaultDescriptor[]> {\n // TODO: merge with API-fetched vaults when API is available\n return listBuiltInVaults(this.network);\n }\n\n // ── Read Operations ──\n\n /**\n * Fetch global vault state and current epoch info.\n *\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n */\n async getVaultInfo(vaultId?: string): Promise<VaultInfoResult> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n return fetchVaultInfo(this.connection, config.programId, program);\n }\n\n /**\n * Fetch a user's vault account with effective balances.\n *\n * Returns `null` if the user has never interacted with the vault.\n *\n * @param user - User's Solana public key (string or PublicKey)\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n */\n async getUserAccount(\n user: string | PublicKey,\n vaultId?: string,\n ): Promise<UserAccount | null> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n const pubkey = typeof user === \"string\" ? new PublicKey(user) : user;\n return fetchUserAccount(this.connection, config.programId, pubkey, program);\n }\n\n /**\n * Fetch current share price from the NAV oracle.\n *\n * Uses a 3-layer fallback: fresh cache -> API fetch -> stale cache.\n * The API endpoint (NAV oracle) is the authoritative price source.\n *\n * @param vaultId - Vault identifier. Currently all registered vaults share\n * one NAV source; per-vault price URLs land with the multi-asset registry\n * (VaultConfig.sharePriceUrl) in 0.2.0.\n */\n async getSharePrice(vaultId?: string): Promise<SharePriceData> {\n if (vaultId) this.resolveVault(vaultId); // throws UNKNOWN_VAULT for bad ids\n return fetchSharePrice();\n }\n\n // ── Write Operations (unsigned TX builders) ──\n\n /**\n * Build an unsigned deposit transaction.\n *\n * @param params - Deposit parameters (user + amount)\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n * @returns Unsigned transaction + base58 serialization + description\n */\n async buildDeposit(\n params: DepositParams,\n vaultId?: string,\n ): Promise<TransactionResult> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n return buildDepositTx(program, params, { timeoutMs: this.timeoutMs });\n }\n\n /**\n * Build an unsigned redeem transaction.\n *\n * @param params - Redeem parameters (user + shares)\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n */\n async buildRedeem(\n params: RedeemParams,\n vaultId?: string,\n ): Promise<TransactionResult> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n return buildRedeemTx(program, params, { timeoutMs: this.timeoutMs });\n }\n\n /**\n * Build an unsigned claim transaction.\n * Claim always works even when the vault is paused.\n *\n * @param params - User parameters\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n */\n async buildClaim(\n params: UserTxParams,\n vaultId?: string,\n ): Promise<TransactionResult> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n return buildClaimTx(program, params, { timeoutMs: this.timeoutMs });\n }\n\n /**\n * Build an unsigned cancel-deposit transaction.\n * Returns pending USDC minus 0.1% fee.\n *\n * @param params - User parameters\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n */\n async buildCancelDeposit(\n params: UserTxParams,\n vaultId?: string,\n ): Promise<TransactionResult> {\n const config = this.resolveVault(vaultId);\n const program = this.getProgram(config);\n return buildCancelDepositTx(program, params, { timeoutMs: this.timeoutMs });\n }\n\n // ── History ──\n\n /**\n * Fetch vault transaction history for a user.\n *\n * Returns classified transactions (deposit, redeem, claim, cancel_deposit)\n * by querying the user's PDA account for signatures and parsing instruction data.\n *\n * @param userAddress - User's Solana wallet address (string or PublicKey)\n * @param options - Pagination options (limit, before cursor)\n * @param vaultId - Vault identifier (default: \"rcUSDP\")\n * @returns Array of classified vault transactions, newest first\n */\n async getTransactionHistory(\n userAddress: string | PublicKey,\n options?: TransactionHistoryOptions,\n vaultId?: string,\n ): Promise<VaultTransaction[]> {\n const config = this.resolveVault(vaultId);\n const pubkey =\n typeof userAddress === \"string\"\n ? new PublicKey(userAddress)\n : userAddress;\n\n // Derive the user's PDA\n const [vaultMirror] = getVaultMirrorPda(config.programId);\n const [userPda] = getUserPda(vaultMirror, pubkey, config.programId);\n\n return fetchTransactionHistory(\n this.connection,\n userPda,\n config.programId,\n options,\n );\n }\n\n // ── Utility Methods ──\n\n /**\n * Estimate the number of shares that a USDC deposit would yield\n * at the current share price.\n *\n * @param amountUsdc - USDC amount (human-readable)\n * @returns Estimated shares as a string, or null if price unavailable\n */\n async estimateShares(amountUsdc: number): Promise<string | null> {\n try {\n const price = await this.getSharePrice();\n if (price.priceNum <= 0) return null;\n const shares = amountUsdc / price.priceNum;\n return shares.toFixed(6);\n } catch {\n return null;\n }\n }\n\n /**\n * Estimate the USDC value of a given number of shares\n * at the current share price.\n *\n * @param shares - Number of shares (human-readable)\n * @returns Estimated USDC value as a string, or null if price unavailable\n */\n async estimateUsdc(shares: number): Promise<string | null> {\n try {\n const price = await this.getSharePrice();\n const usdc = shares * price.priceNum;\n return usdc.toFixed(6);\n } catch {\n return null;\n }\n }\n\n // ── Internal ──\n\n /**\n * Resolve a vault config by ID, falling back to the default vault.\n * @throws {UnknownVaultError} If the vault ID is not registered\n */\n private resolveVault(vaultId?: string): VaultConfig {\n const id = vaultId ?? DEFAULT_VAULT_ID;\n const config = getVaultConfig(id, this.network);\n if (!config) {\n throw new UnknownVaultError(id);\n }\n return config;\n }\n\n /**\n * Get or create a cached Anchor Program instance for a vault.\n *\n * Uses a read-only provider (no signer) since the SDK only builds\n * transactions — it never signs or submits them.\n */\n private getProgram(config: VaultConfig): Program {\n const key = `${config.network}:${config.id}`;\n let program = this.programs.get(key);\n\n // Evict if older than TTL\n const createdAt = this.programCreatedAt.get(key);\n if (program && createdAt && Date.now() - createdAt > TBookVault.PROGRAM_CACHE_TTL_MS) {\n this.programs.delete(key);\n this.programCreatedAt.delete(key);\n program = undefined;\n }\n\n if (!program) {\n // Create a read-only Anchor provider (dummy wallet, never signs)\n const dummyWallet = {\n publicKey: Keypair.generate().publicKey,\n signTransaction: async (tx: any) => tx,\n signAllTransactions: async (txs: any[]) => txs,\n };\n const provider = new AnchorProvider(this.connection, dummyWallet as any, {\n commitment: \"confirmed\",\n });\n\n // Use the appropriate IDL for this vault\n const idl = this.resolveIdl(config);\n program = new Program(idl as any, provider);\n this.programs.set(key, program);\n this.programCreatedAt.set(key, Date.now());\n }\n return program;\n }\n\n /**\n * Resolve the Anchor IDL for a given vault configuration.\n * Currently only the built-in rcUSDP devnet IDL is supported.\n */\n private resolveIdl(config: VaultConfig): any {\n // For now, all vaults use the same IDL (vault_gateway)\n // Future: fetch IDL from API for dynamically registered vaults\n return devnetIdl;\n }\n}\n","/**\n * Formatting, validation, and conversion utilities.\n *\n * @module utils\n */\n\nimport { USDC_DECIMALS, SHARE_DECIMALS } from \"./config.js\";\n\n// ── Number Formatting ──\n\n/** Truncate a number to N decimal places without rounding. */\nexport function truncateNumber(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.trunc(value * factor) / factor;\n}\n\n/** Truncate and format a number to a fixed-decimal string. */\nexport function formatTruncated(value: number, decimals: number): string {\n return truncateNumber(value, decimals).toFixed(decimals);\n}\n\n/** Format a number with locale-aware thousand separators (truncated, not rounded). */\nexport function formatNumber(value: number, decimals = 2): string {\n const truncated = truncateNumber(value, decimals);\n return new Intl.NumberFormat(\"en-US\", {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(truncated);\n}\n\n/** Format a number as USD currency (truncated). */\nexport function formatCurrency(value: number, currency = \"USD\"): string {\n const truncated = truncateNumber(value, 2);\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(truncated);\n}\n\n/** Format a percentage value. */\nexport function formatPercentage(value: number, decimals = 2): string {\n return `${formatNumber(value, decimals)}%`;\n}\n\n/** Shorten a Solana address for display: \"AbCd...xYz\". */\nexport function shortenAddress(address: string, chars = 4): string {\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars)}...${address.slice(-chars)}`;\n}\n\n/** Format a raw USDC amount (6 decimals) to a human-readable string. */\nexport function formatUsdc(raw: number | bigint): string {\n return formatNumber(Number(raw) / 10 ** USDC_DECIMALS, USDC_DECIMALS);\n}\n\n/** Format a raw share amount (6 decimals) to a human-readable string. */\nexport function formatShares(raw: number | bigint): string {\n return formatNumber(Number(raw) / 10 ** SHARE_DECIMALS, SHARE_DECIMALS);\n}\n\n// ── Conversion ──\n\n/** Convert raw u64 to human-readable UI amount. */\nexport function rawToUi(raw: number | bigint, decimals: number): number {\n return Number(raw) / Math.pow(10, decimals);\n}\n\n/** Convert human-readable UI amount to raw u64. Uses truncation (not rounding). */\nexport function uiToRaw(ui: number, decimals: number): number {\n return Math.floor(ui * Math.pow(10, decimals));\n}\n\n// ── Validation ──\n\n/** Result of an input validation check. */\nexport interface ValidationResult {\n valid: boolean;\n error?: string;\n}\n\n/**\n * Validate an amount for deposit or redeem operations.\n *\n * @param amount - The amount as a string (from user input)\n * @param balance - User's available balance\n * @param action - Action name for error messages (e.g. \"deposit\")\n * @param token - Token name for error messages (e.g. \"USDC\")\n * @param min - Minimum allowed amount\n * @param max - Maximum allowed amount\n */\nexport function validateAmount(\n amount: string,\n balance: number,\n action: string,\n token: string,\n min?: number,\n max?: number,\n): ValidationResult {\n const numericAmount = Number(amount);\n\n if (isNaN(numericAmount) || numericAmount <= 0) {\n return { valid: false, error: \"Please enter a valid amount greater than 0\" };\n }\n if (numericAmount > balance) {\n return { valid: false, error: `You only have ${balance} ${token}.` };\n }\n if (min !== undefined && numericAmount < min) {\n return { valid: false, error: `You need to ${action} at least ${min} ${token}.` };\n }\n if (max !== undefined && numericAmount > max) {\n return { valid: false, error: `You can only ${action} up to ${max} ${token}.` };\n }\n return { valid: true };\n}\n\n/** Check if a string is a valid numeric input (numbers and single decimal point). */\nexport function isValidAmountInput(value: string): boolean {\n return value === \"\" || /^\\d*\\.?\\d*$/.test(value);\n}\n"]}
|