pixi-tiledmap 2.0.0 → 2.2.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.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/parser/decodeGid.ts","../src/parser/decodeData.ts","../src/parser/resolveMap.ts","../src/parser/parseTmx.ts","../src/renderer/TileSetRenderer.ts","../src/renderer/tilePlacement.ts","../src/renderer/parseColor.ts","../src/renderer/TileLayerRenderer.ts","../src/renderer/ImageLayerRenderer.ts","../src/renderer/ObjectLayerRenderer.ts","../src/renderer/GroupLayerRenderer.ts","../src/renderer/createLayerRenderer.ts","../src/renderer/TiledMap.ts","../src/renderer/tiledAssetLoader.ts"],"names":["child","isStaggered","Container","Sprite","Graphics","pixiPath"],"mappings":";;;AAsUO,IAAM,yBAAA,GAA4B;AAClC,IAAM,uBAAA,GAA0B;AAChC,IAAM,uBAAA,GAA0B;AAChC,IAAM,0BAAA,GAA6B;AACnC,IAAM,QAAA,GAAW;;;AClUjB,SAAS,UAAU,GAAA,EAAkC;AAC1D,EAAA,MAAM,MAAM,GAAA,GAAM,QAAA;AAClB,EAAA,IAAI,GAAA,KAAQ,GAAG,OAAO,IAAA;AAEtB,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,OAAA,EAAS,CAAA;AAAA,IACT,YAAA,EAAc,CAAA;AAAA,IACd,cAAA,EAAA,CAAiB,MAAM,yBAAA,MAA+B,CAAA;AAAA,IACtD,YAAA,EAAA,CAAe,MAAM,uBAAA,MAA6B,CAAA;AAAA,IAClD,YAAA,EAAA,CAAe,MAAM,uBAAA,MAA6B;AAAA,GACpD;AACF;;;AClBO,SAAS,eAAA,CACd,IAAA,EACA,QAAA,EACA,WAAA,EACU;AACV,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,MAAM,KAAA,GAAQ,cAAc,IAAI,CAAA;AAEhC,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,WAAA,KAAgB,MAAA,EAAQ;AACpD,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,EAAO,WAAW,CAAA;AACvD,MAAA,OAAO,YAAY,YAAY,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAA,IAAY,SAAS,CAAA,CAAE,CAAA;AAClE;AAEA,SAAS,cAAc,MAAA,EAA4B;AACjD,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAE5B,EAAA,IAAI,OAAO,UAAA,CAAW,IAAA,KAAS,UAAA,EAAY;AACzC,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AACzC,EAAA,OAAO,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,GAAA,CAAI,UAAA,EAAY,IAAI,UAAU,CAAA;AAClE;AAEA,SAAS,YAAY,KAAA,EAA6B;AAChD,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,KAAA,CAAM,QAAQ,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA;AAC1E,EAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,GAAa,CAAA;AACjC,EAAA,MAAM,IAAA,GAAiB,IAAI,KAAA,CAAM,KAAK,CAAA;AAEtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,GAAG,IAAI,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,oBAAA,CACb,OACA,WAAA,EACqB;AACrB,EAAA,MAAM,MAAA,GAAS,WAAA,KAAgB,MAAA,GAAS,MAAA,GAAS,SAAA;AACjD,EAAA,MAAM,EAAA,GAAK,IAAI,mBAAA,CAAoB,MAAM,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,QAAA,CAAS,SAAA,EAAU;AACrC,EAAA,MAAA,CAAO,MAAM,KAAgC,CAAA;AAC7C,EAAA,MAAA,CAAO,KAAA,EAAM;AAEb,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,QAAA,CAAS,SAAA,EAAU;AACrC,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,WAAS;AACP,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,IAAA,IAAI,IAAA,EAAM;AACV,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,EACvB;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,WAAW,CAAA;AACzC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAA,CAAO,GAAA,CAAI,OAAO,MAAM,CAAA;AACxB,IAAA,MAAA,IAAU,KAAA,CAAM,UAAA;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eAAA,CAAgB,QAAoB,WAAA,EAA0C;AACrF,EAAA,IAAI,OAAO,wBAAwB,WAAA,EAAa;AAG9C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,yBAAyB,WAAW,CAAA,2FAAA;AAAA,KAEtC;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,yBAAyB,WAAW,CAAA,4EAAA;AAAA,GAEtC;AACF;AAEA,eAAsB,oBAAA,CACpB,IAAA,EACA,QAAA,EACA,WAAA,EACmB;AACnB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,MAAM,KAAA,GAAQ,cAAc,IAAI,CAAA;AAEhC,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,WAAA,KAAgB,MAAA,EAAQ;AACpD,MAAA,MAAM,YAAA,GAAe,MAAM,oBAAA,CAAqB,KAAA,EAAO,WAAW,CAAA;AAClE,MAAA,OAAO,YAAY,YAAY,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAA,IAAY,SAAS,CAAA,CAAE,CAAA;AAClE;;;ACvGA,SAAS,aAAa,EAAA,EAA2D;AAC/E,EAAA,OAAO,QAAA,IAAY,EAAA,IAAM,EAAE,MAAA,IAAU,EAAA,CAAA;AACvC;AAIA,SAAS,eAAe,GAAA,EAAoC;AAC1D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAiC;AACnD,EAAA,IAAI,IAAI,KAAA,EAAO;AACb,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,KAAA,EAAO;AAC5B,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,OAAA,EACE,GAAA,CAAI,OAAA,GAAU,CAAA,GACV,GAAA,CAAI,UACJ,GAAA,CAAI,UAAA,IAAc,GAAA,CAAI,SAAA,GAAY,CAAA,GAChC,IAAA,CAAK,OAAO,GAAA,CAAI,UAAA,GAAa,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,GAAA,CAAI,YAAY,GAAA,CAAI,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,CAAA,GAC1F,CAAA;AAAA,IACR,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,YAAY,GAAA,CAAI,UAAA,IAAc,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC3C,eAAA,EAAiB,IAAI,eAAA,IAAmB,aAAA;AAAA,IACxC,cAAA,EAAgB,IAAI,cAAA,IAAkB,MAAA;AAAA,IACtC,QAAA,EAAU,IAAI,QAAA,IAAY,SAAA;AAAA,IAC1B,KAAA;AAAA,IACA,UAAA,EAAY,GAAA,CAAI,UAAA,IAAc,EAAC;AAAA,IAC/B,iBAAiB,GAAA,CAAI,eAAA;AAAA,IACrB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,UAAU,GAAA,CAAI;AAAA,GAChB;AACF;AAIA,SAAS,gBAAA,CAAiB,KAAa,QAAA,EAAqC;AAC1E,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,EAAA,GAAK,SAAS,CAAC,CAAA;AACrB,IAAA,IAAI,EAAA,IAAM,EAAA,CAAG,QAAA,IAAY,GAAA,EAAK;AAC5B,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,CAAA;AACT;AAIA,SAAS,WAAA,CAAY,SAAmB,QAAA,EAAsD;AAC5F,EAAA,MAAM,MAAA,GAAkC,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAEhE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,CAAA,EAAG;AACxC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,UAAU,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AACpD,IAAA,MAAM,EAAA,GAAK,SAAS,KAAK,CAAA;AACzB,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,OAAA,CAAQ,YAAA,GAAe,KAAA;AACvB,MAAA,OAAA,CAAQ,OAAA,GAAU,OAAA,CAAQ,GAAA,GAAM,EAAA,CAAG,QAAA;AAAA,IACrC;AACA,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,OAAA;AAAA,EACd;AAEA,EAAA,OAAO,MAAA;AACT;AAIA,SAAS,cAAc,KAAA,EAAmB;AACxC,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,OAAA,EAAS,MAAM,OAAA,IAAW,CAAA;AAAA,IAC1B,OAAA,EAAS,MAAM,OAAA,IAAW,CAAA;AAAA,IAC1B,SAAA,EAAW,MAAM,SAAA,IAAa,CAAA;AAAA,IAC9B,SAAA,EAAW,MAAM,SAAA,IAAa,CAAA;AAAA,IAC9B,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,UAAA,EAAY,KAAA,CAAM,UAAA,IAAc;AAAC,GACnC;AACF;AAIA,SAAS,YAAA,CAAa,OAAmB,QAAA,EAA4C;AACnF,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,OAAO,MAAA,GAAS,CAAA;AAExD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,cAAA,GAAiB,iBAAA;AAAA,UACrB,KAAA,CAAM,MAAA;AAAA,UACN,KAAA,CAAM,QAAA;AAAA,UACN,KAAA,CAAM,WAAA;AAAA,UACN;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,WAAA;AAAA,UACN,GAAG,cAAc,KAAK,CAAA;AAAA,UACtB,KAAA,EAAO,MAAM,KAAA,IAAS,CAAA;AAAA,UACtB,MAAA,EAAQ,MAAM,MAAA,IAAU,CAAA;AAAA,UACxB,QAAA,EAAU,IAAA;AAAA,UACV,OAAO,EAAC;AAAA,UACR,MAAA,EAAQ;AAAA,SACV;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,gBAAgB,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG,KAAA,CAAM,QAAA,EAAU,KAAA,CAAM,WAAW,CAAA;AACnF,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,KAAA,EAAO,MAAM,KAAA,IAAS,CAAA;AAAA,QACtB,MAAA,EAAQ,MAAM,MAAA,IAAU,CAAA;AAAA,QACxB,QAAA,EAAU,KAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,QACtB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,OAAA,EAAS,MAAM,OAAA,IAAW,KAAA;AAAA,QAC1B,OAAA,EAAS,MAAM,OAAA,IAAW,KAAA;AAAA,QAC1B,kBAAkB,KAAA,CAAM;AAAA,OAC1B;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,SAAA,EAAY,MAAM,SAAA,IAAa,SAAA;AAAA,QAC/B,OAAA,EAAS,KAAA,CAAM,OAAA,IAAW;AAAC,OAC7B;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,MAAA,EAAA,CAAS,KAAA,CAAM,MAAA,IAAU,EAAC,EAAG,IAAI,CAAA,CAAA,KAAK,YAAA,CAAa,CAAA,EAAG,QAAQ,CAAC;AAAA,OACjE;AAAA;AAEN;AAIA,eAAe,iBAAA,CACb,OACA,QAAA,EACwB;AACxB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,OAAO,MAAA,GAAS,CAAA;AAExD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,iBAAiB,MAAM,kBAAA;AAAA,UAC3B,KAAA,CAAM,MAAA;AAAA,UACN,KAAA,CAAM,QAAA;AAAA,UACN,KAAA,CAAM,WAAA;AAAA,UACN;AAAA,SACF;AACA,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,WAAA;AAAA,UACN,GAAG,cAAc,KAAK,CAAA;AAAA,UACtB,KAAA,EAAO,MAAM,KAAA,IAAS,CAAA;AAAA,UACtB,MAAA,EAAQ,MAAM,MAAA,IAAU,CAAA;AAAA,UACxB,QAAA,EAAU,IAAA;AAAA,UACV,OAAO,EAAC;AAAA,UACR,MAAA,EAAQ;AAAA,SACV;AAAA,MACF;AAEA,MAAA,MAAM,UAAU,MAAM,oBAAA;AAAA,QACpB,KAAA,CAAM,QAAQ,EAAC;AAAA,QACf,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AACA,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,KAAA,EAAO,MAAM,KAAA,IAAS,CAAA;AAAA,QACtB,MAAA,EAAQ,MAAM,MAAA,IAAU,CAAA;AAAA,QACxB,QAAA,EAAU,KAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA,IAEA,KAAK,YAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,YAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,KAAA,EAAO,MAAM,KAAA,IAAS,EAAA;AAAA,QACtB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,OAAA,EAAS,MAAM,OAAA,IAAW,KAAA;AAAA,QAC1B,OAAA,EAAS,MAAM,OAAA,IAAW,KAAA;AAAA,QAC1B,kBAAkB,KAAA,CAAM;AAAA,OAC1B;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,SAAA,EAAY,MAAM,SAAA,IAAa,SAAA;AAAA,QAC/B,OAAA,EAAS,KAAA,CAAM,OAAA,IAAW;AAAC,OAC7B;AAAA,IAEF,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,GAAA;AAAA,QAAA,CACpC,KAAA,CAAM,UAAU,EAAC,EAAG,IAAI,CAAA,CAAA,KAAK,iBAAA,CAAkB,CAAA,EAAG,QAAQ,CAAC;AAAA,OAC9D;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,GAAG,cAAc,KAAK,CAAA;AAAA,QACtB,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAAA;AAEJ;AAIO,SAAS,QAAA,CAAS,MAAgB,OAAA,EAAqC;AAC5E,EAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,GAAA,CAAI,OAAK,YAAA,CAAa,CAAA,EAAG,gBAAgB,CAAC,CAAA;AAErE,EAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,gBAAA,EAAkB,MAAM,CAAA;AACxD;AAEA,eAAsB,aAAA,CAAc,MAAgB,OAAA,EAA8C;AAChG,EAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,iBAAA,CAAkB,CAAA,EAAG,gBAAgB,CAAC,CAAC,CAAA;AAE7F,EAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,gBAAA,EAAkB,MAAM,CAAA;AACxD;AAIA,SAAS,iBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA,QAAA,EACiB;AACjB,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AACzB,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,CAAM,IAAA,EAAM,UAAU,WAAW,CAAA;AACjE,IAAA,OAAO;AAAA,MACL,GAAG,KAAA,CAAM,CAAA;AAAA,MACT,GAAG,KAAA,CAAM,CAAA;AAAA,MACT,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,KAAA,EAAO,WAAA,CAAY,OAAA,EAAS,QAAQ;AAAA,KACtC;AAAA,EACF,CAAC,CAAA;AACH;AAEA,eAAe,kBAAA,CACb,MAAA,EACA,QAAA,EACA,WAAA,EACA,QAAA,EAC0B;AAC1B,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IACb,MAAA,CAAO,GAAA,CAAI,OAAM,KAAA,KAAS;AACxB,MAAA,MAAM,UAAU,MAAM,oBAAA,CAAqB,KAAA,CAAM,IAAA,EAAM,UAAU,WAAW,CAAA;AAC5E,MAAA,OAAO;AAAA,QACL,GAAG,KAAA,CAAM,CAAA;AAAA,QACT,GAAG,KAAA,CAAM,CAAA;AAAA,QACT,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,KAAA,EAAO,WAAA,CAAY,OAAA,EAAS,QAAQ;AAAA,OACtC;AAAA,IACF,CAAC;AAAA,GACH;AACF;AAIA,SAAS,eAAA,CACP,KACA,OAAA,EACmB;AACnB,EAAA,OAAO,GAAA,CAAI,IAAI,CAAA,EAAA,KAAM;AACnB,IAAA,IAAI,YAAA,CAAa,EAAE,CAAA,EAAG;AACpB,MAAA,MAAM,QAAA,GAAW,OAAA,EAAS,gBAAA,EAAkB,GAAA,CAAI,GAAG,MAAM,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,kBAAA,EAAqB,GAAG,MAAM,CAAA,qDAAA;AAAA,SAChC;AAAA,MACF;AACA,MAAA,OAAO,eAAe,EAAE,GAAG,UAAU,QAAA,EAAU,EAAA,CAAG,UAAU,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,eAAe,EAAE,CAAA;AAAA,EAC1B,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,IAAA,EACA,QAAA,EACA,MAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,WAAA,EAAc,KAAK,WAAA,IAAe,YAAA;AAAA,IAClC,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,eAAA,EAAiB,KAAK,eAAA,IAAmB,CAAA;AAAA,IACzC,eAAA,EAAiB,KAAK,eAAA,IAAmB,CAAA;AAAA,IACzC,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,EAAC;AAAA,IAChC,QAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAc,IAAA,CAAK;AAAA,GACrB;AACF;;;AC7UA,SAAS,GAAA,CAAI,EAAA,EAAa,IAAA,EAAc,QAAA,GAAW,EAAA,EAAY;AAC7D,EAAA,OAAO,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA,IAAK,QAAA;AAClC;AAEA,SAAS,GAAA,CAAI,EAAA,EAAa,IAAA,EAAc,QAAA,GAAW,CAAA,EAAW;AAC5D,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,GAAI,QAAA;AACvC;AAEA,SAAS,KAAA,CAAM,EAAA,EAAa,IAAA,EAAc,QAAA,GAAW,CAAA,EAAW;AAC9D,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,UAAA,CAAW,CAAC,CAAA,GAAI,QAAA;AACrC;AAEA,SAAS,IAAA,CAAK,EAAA,EAAa,IAAA,EAAc,QAAA,GAAW,KAAA,EAAgB;AAClE,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,IAAI,CAAA,IAAK,MAAM,OAAO,QAAA;AACtB,EAAA,OAAO,CAAA,KAAM,OAAO,CAAA,KAAM,MAAA;AAC5B;AAEA,SAAS,MAAA,CAAO,IAAa,IAAA,EAAkC;AAC7D,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,OAAO,CAAA,IAAK,OAAO,CAAA,GAAI,MAAA;AACzB;AAEA,SAAS,MAAA,CAAO,IAAa,IAAA,EAAkC;AAC7D,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA;AACvC;AAEA,SAAS,QAAA,CAAS,IAAa,IAAA,EAAkC;AAC/D,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AAC9B,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,UAAA,CAAW,CAAC,CAAA,GAAI,MAAA;AACrC;AAEA,SAAS,QAAA,CAAS,IAAa,GAAA,EAAwB;AACrD,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAMA,MAAAA,GAAQ,EAAA,CAAG,QAAA,CAAS,CAAC,CAAA;AAC3B,IAAA,IAAIA,MAAAA,CAAM,OAAA,KAAY,GAAA,EAAK,MAAA,CAAO,KAAKA,MAAK,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,KAAA,CAAM,IAAa,GAAA,EAA6B;AACvD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,CAAA,GAAI,EAAA,CAAG,QAAA,CAAS,CAAC,CAAA;AACvB,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,GAAA,EAAK,OAAO,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,IAAA;AACT;AAIA,SAAS,gBAAgB,EAAA,EAA0C;AACjE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,EAAA,EAAI,YAAY,CAAA;AACtC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,GAAA,IAAO,QAAA,CAAS,OAAA,EAAS,UAAU,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,EAAK,MAAA,EAAQ,QAAQ,CAAA;AACtC,IAAA,IAAI,KAAA,GAAmC,GAAA,CAAI,GAAA,EAAK,OAAA,EAAS,EAAE,CAAA;AAE3D,IAAA,IAAI,CAAC,GAAA,CAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,IAAI,WAAA,IAAe,EAAA;AAAA,IAC7B;AACA,IAAA,IAAI,IAAA,KAAS,KAAA,EAAO,KAAA,GAAQ,QAAA,CAAS,OAAiB,EAAE,CAAA;AAAA,SAAA,IAC/C,IAAA,KAAS,OAAA,EAAS,KAAA,GAAQ,UAAA,CAAW,KAAe,CAAA;AAAA,SAAA,IACpD,IAAA,KAAS,MAAA,EAAQ,KAAA,GAAQ,KAAA,KAAU,MAAA;AAE5C,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAAA,MACrB,IAAA;AAAA,MACA,YAAA,EAAc,MAAA,CAAO,GAAA,EAAK,cAAc,CAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA;AACpC;AAWA,SAAS,WAAW,EAAA,EAAwB;AAC1C,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AAC/B,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC7B,UAAA,EAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACjC,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA;AAAA,IACnC,gBAAA,EAAkB,MAAA,CAAO,KAAA,EAAO,OAAO;AAAA,GACzC;AACF;AAIA,SAAS,gBAAgB,EAAA,EAA0C;AACjE,EAAA,MAAM,EAAA,GAAK,KAAA,CAAM,EAAA,EAAI,YAAY,CAAA;AACjC,EAAA,IAAI,CAAC,IAAI,OAAO,MAAA;AAChB,EAAA,OAAO,EAAE,CAAA,EAAG,GAAA,CAAI,EAAA,EAAI,GAAG,GAAG,CAAA,EAAG,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA,EAAE;AAC5C;AAIA,SAAS,UAAU,EAAA,EAAoC;AACrD,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,EAAA,EAAI,MAAM,CAAA;AAC1B,EAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,GAAA,CAAI,CAAA,EAAG,aAAA,EAAe,YAAY,CAAA;AAAA,IAC/C,KAAA,EAAO,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAAA,IACrB,MAAA,EAAQ,GAAA,CAAI,CAAA,EAAG,QAAQ;AAAA,GACzB;AACF;AAIA,SAAS,qBAAqB,EAAA,EAA+C;AAC3E,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,EAAA,EAAI,iBAAiB,CAAA;AACrC,EAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA,CAAK,CAAA,EAAG,OAAO,CAAA;AAAA,IACtB,KAAA,EAAO,IAAA,CAAK,CAAA,EAAG,OAAO,CAAA;AAAA,IACtB,MAAA,EAAQ,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA;AAAA,IACxB,mBAAA,EAAqB,IAAA,CAAK,CAAA,EAAG,qBAAqB;AAAA,GACpD;AACF;AAIA,SAAS,cAAc,EAAA,EAAyC;AAC9D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,EAAI,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,SAAS,CAAA,CAAE,IAAI,CAAA,CAAA,MAAM;AAAA,IACzC,IAAA,EAAM,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA;AAAA,IACnB,IAAA,EAAM,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA;AAAA,IACnB,UAAA,EAAY,gBAAgB,CAAC;AAAA,GAC/B,CAAE,CAAA;AACJ;AAIA,SAAS,cAAc,EAAA,EAAyC;AAC9D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,EAAI,UAAU,CAAA;AACjC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAElB,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,SAAS,CAAA,CAAE,IAAI,CAAA,EAAA,KAAM;AACzC,IAAA,MAAM,SAA2B,QAAA,CAAS,EAAA,EAAI,WAAW,CAAA,CAAE,IAAI,CAAA,EAAA,MAAO;AAAA,MACpE,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,KAAA,EAAO,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA;AAAA,MACtB,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,MACpB,WAAA,EAAa,KAAA,CAAM,EAAA,EAAI,aAAa,CAAA;AAAA,MACpC,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,MACpB,UAAA,EAAY,gBAAgB,EAAE;AAAA,KAChC,CAAE,CAAA;AAEF,IAAA,MAAM,QAAyB,QAAA,CAAS,EAAA,EAAI,UAAU,CAAA,CAAE,IAAI,CAAA,EAAA,MAAO;AAAA,MACjE,MAAA,EAAQ,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAAA,MACxB,MAAA,EAAQ,IAAI,EAAA,EAAI,QAAQ,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM;AAAA,KACjD,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,MAAA;AAAA,MACA,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,MACpB,UAAA,EAAY,gBAAgB,EAAE,CAAA;AAAA,MAC9B,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,MACpB,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAA,EAAQ,QAAQ,CAAA;AAAA,MAC9B,SAAA,EAAW;AAAA,KACb;AAAA,EACF,CAAC,CAAA;AACH;AAIA,SAAS,eAAe,EAAA,EAAuC;AAC7D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,EAAA,EAAI,WAAW,CAAA;AACpC,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,OAAO,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA,CAAE,IAAI,CAAA,CAAA,MAAM;AAAA,IACzC,MAAA,EAAQ,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,IACvB,QAAA,EAAU,GAAA,CAAI,CAAA,EAAG,UAAU;AAAA,GAC7B,CAAE,CAAA;AACJ;AAIA,SAAS,qBAAqB,EAAA,EAAgD;AAC5E,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,EAAA,EAAI,MAAM,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEjC,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,CAAA,KAAK;AACtB,IAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AACvC,IAAA,MAAM,OAAA,GAAU,WAAA,GACZ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAM,CAAA,KAAM,KAAK,EAAA,GAAK,QAAA,CAAS,CAAA,EAAG,EAAE,CAAE,CAAA,GACjE,MAAA;AAGJ,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAA,EAAG,aAAa,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,IAAA,GAAO,gBAAA,CAAiB,IAAI,CAAA,GAAI,MAAA;AAEpD,IAAA,MAAM,GAAA,GAA2B;AAAA,MAC/B,EAAA,EAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,MACf,MAAM,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA,CAAO,GAAG,OAAO,CAAA;AAAA,MAC5C,WAAA,EAAa,QAAA,CAAS,CAAA,EAAG,aAAa,CAAA;AAAA,MACtC,CAAA,EAAG,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAChB,CAAA,EAAG,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAChB,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACxB,MAAA,EAAQ,MAAA,CAAO,CAAA,EAAG,QAAQ,CAAA;AAAA,MAC1B,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAAA,MAC7B,SAAA,EAAW,eAAe,CAAC,CAAA;AAAA,MAC3B,OAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA,KACL;AAEA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;AAIA,SAAS,aAAa,EAAA,EAA6C;AACjE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAClC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,GAAA,CAAI,EAAA,EAAI,UAAU,CAAA;AAAA,MAC5B;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,WAAW,EAAE,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,qBAAqB,EAAE,CAAA;AAErC,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,EAAA,EAAI,WAAW,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AACpC,EAAA,MAAM,UACJ,UAAA,GAAa,CAAA,GACT,UAAA,GACA,GAAA,CAAI,cAAc,SAAA,GAAY,CAAA,GAC5B,IAAA,CAAK,KAAA,CAAA,CAAO,IAAI,UAAA,GAAa,CAAA,GAAI,SAAS,OAAA,KAAY,SAAA,GAAY,QAAQ,CAAA,GAC1E,CAAA;AAER,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,MAAA,CAAO,EAAA,EAAI,iBAAiB,CAAA;AAAA,IAC7C,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,OAAA;AAAA,IACA,QAAA,EAAU,MAAA,CAAO,EAAA,EAAI,UAAU,CAAA;AAAA,IAC/B,QAAA,EAAU,GAAA,CAAI,EAAA,EAAI,UAAU,CAAA;AAAA,IAC5B,IAAA,EAAM,UAAU,EAAE,CAAA;AAAA,IAClB,MAAA;AAAA,IACA,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,IACpB,eAAA,EAAiB,MAAA,CAAO,EAAA,EAAI,iBAAiB,CAAA;AAAA,IAC7C,UAAA,EAAY,gBAAgB,EAAE,CAAA;AAAA,IAC9B,OAAA;AAAA,IACA,QAAA,EAAU,cAAc,EAAE,CAAA;AAAA,IAC1B,SAAA,EAAW,GAAA,CAAI,EAAA,EAAI,WAAW,CAAA;AAAA,IAC9B,UAAA,EAAY,GAAA,CAAI,EAAA,EAAI,YAAY,CAAA;AAAA,IAChC,UAAA,EAAY,gBAAgB,EAAE,CAAA;AAAA,IAC9B,cAAA,EAAgB,MAAA,CAAO,EAAA,EAAI,gBAAgB,CAAA;AAAA,IAC3C,KAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA,EAAiB,qBAAqB,EAAE,CAAA;AAAA,IACxC,QAAA,EAAU,cAAc,EAAE,CAAA;AAAA,IAC1B,GAAG;AAAA,GACL;AACF;AAIA,SAAS,UAAU,MAAA,EAKjB;AACA,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,EAAQ,UAAU,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,EAAQ,aAAa,CAAA;AAGhD,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AACzC,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,MAAA,GAAuB,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MAC9C,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAAA,MACb,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAAA,MACb,KAAA,EAAO,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAAA,MACrB,MAAA,EAAQ,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,MACvB,IAAA,EAAM,gBAAA,CAAiB,CAAA,EAAG,QAAQ;AAAA,KACpC,CAAE,CAAA;AACF,IAAA,OAAO,EAAE,QAAA,EAAU,WAAA,EAAa,MAAA,EAAO;AAAA,EACzC;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACvC,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CAAiB,IAAa,QAAA,EAAwD;AAC7F,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,OAAA,CAAQ,EAAA,CAAG,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AAAA,EACrC;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,OAAA,CAAQ,EAAA,CAAG,WAAA,IAAe,EAAA,EACvB,IAAA,GACA,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,OAAK,QAAA,CAAS,CAAA,CAAE,IAAA,EAAK,EAAG,EAAE,CAAC,CAAA;AAAA,EACpC;AAGA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,EAAA,EAAI,MAAM,CAAA;AACnC,EAAA,OAAO,QAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AACvC;AAIA,SAAS,YAAY,QAAA,EAAgC;AACnD,EAAA,OAAO,SACJ,IAAA,EAAK,CACL,MAAM,KAAK,CAAA,CACX,IAAI,CAAA,IAAA,KAAQ;AACX,IAAA,MAAM,CAAC,GAAG,CAAC,CAAA,GAAI,KAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACzC,IAAA,OAAO,EAAE,GAAO,CAAA,EAAM;AAAA,EACxB,CAAC,CAAA;AACL;AAEA,SAAS,gBAAgB,EAAA,EAAwB;AAC/C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,GAAG,WAAA,IAAe,EAAA;AAAA,IACxB,UAAA,EAAY,MAAA,CAAO,EAAA,EAAI,YAAY,CAAA;AAAA,IACnC,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,WAAW,CAAA;AAAA,IACjC,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,IAAA,GAAO,MAAA;AAAA,IAChC,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,IAAA,GAAO,MAAA;AAAA,IAChC,MAAA,EAAQ,IAAA,CAAK,EAAA,EAAI,QAAQ,IAAI,IAAA,GAAO,MAAA;AAAA,IACpC,SAAA,EAAW,IAAA,CAAK,EAAA,EAAI,WAAW,IAAI,IAAA,GAAO,MAAA;AAAA,IAC1C,SAAA,EAAW,IAAA,CAAK,EAAA,EAAI,WAAW,IAAI,IAAA,GAAO,MAAA;AAAA,IAC1C,OAAA,EAAS,GAAG,YAAA,CAAa,SAAS,IAAI,IAAA,CAAK,EAAA,EAAI,SAAA,EAAW,IAAI,CAAA,GAAI,MAAA;AAAA,IAClE,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC3B,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,QAAQ;AAAA,GAC7B;AACF;AAEA,SAAS,YAAY,EAAA,EAA0B;AAC7C,EAAA,MAAM,GAAA,GAAmB;AAAA,IACvB,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,IAChB,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,IACpB,MAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA,IAAK,GAAA,CAAI,IAAI,OAAO,CAAA;AAAA,IACxC,CAAA,EAAG,KAAA,CAAM,EAAA,EAAI,GAAG,CAAA;AAAA,IAChB,CAAA,EAAG,KAAA,CAAM,EAAA,EAAI,GAAG,CAAA;AAAA,IAChB,KAAA,EAAO,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AAAA,IACxB,MAAA,EAAQ,KAAA,CAAM,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,EAAA,EAAI,UAAU,CAAA;AAAA,IAC9B,OAAA,EAAS,GAAG,YAAA,CAAa,SAAS,IAAI,IAAA,CAAK,EAAA,EAAI,SAAA,EAAW,IAAI,CAAA,GAAI,IAAA;AAAA,IAClE,UAAA,EAAY,gBAAgB,EAAE;AAAA,GAChC;AAEA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,EAAA,EAAI,KAAK,CAAA;AAC5B,EAAA,IAAI,GAAA,IAAO,IAAA,EAAM,GAAA,CAAI,GAAA,GAAM,GAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,EAAA,EAAI,UAAU,CAAA;AACtC,EAAA,IAAI,QAAA,MAAc,QAAA,GAAW,QAAA;AAE7B,EAAA,IAAI,KAAA,CAAM,EAAA,EAAI,SAAS,CAAA,MAAO,OAAA,GAAU,IAAA;AACxC,EAAA,IAAI,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA,MAAO,KAAA,GAAQ,IAAA;AAEpC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,EAAA,EAAI,SAAS,CAAA;AACrC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,GAAA,CAAI,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,EAAA,EAAI,UAAU,CAAA;AACvC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,GAAA,CAAI,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,EAAA,EAAI,MAAM,CAAA;AAC/B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAA,GAAO,gBAAgB,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,GAAA;AACT;AAIA,SAAS,iBAAiB,EAAA,EAAkC;AAC1D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,IAChB,IAAA,EAAM,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,IACpB,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,OAAA,EAAS,KAAA,CAAM,EAAA,EAAI,SAAA,EAAW,CAAC,CAAA;AAAA,IAC/B,OAAA,EAAS,GAAG,YAAA,CAAa,SAAS,IAAI,IAAA,CAAK,EAAA,EAAI,SAAA,EAAW,IAAI,CAAA,GAAI,IAAA;AAAA,IAClE,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,WAAW,CAAA;AAAA,IACjC,OAAA,EAAS,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA;AAAA,IAC/B,OAAA,EAAS,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA;AAAA,IAC/B,SAAA,EAAW,QAAA,CAAS,EAAA,EAAI,WAAW,CAAA;AAAA,IACnC,SAAA,EAAW,QAAA,CAAS,EAAA,EAAI,WAAW,CAAA;AAAA,IACnC,MAAA,EAAQ,GAAG,YAAA,CAAa,QAAQ,IAAI,IAAA,CAAK,EAAA,EAAI,QAAQ,CAAA,GAAI,MAAA;AAAA,IACzD,UAAA,EAAY,gBAAgB,EAAE,CAAA;AAAA,IAC9B,CAAA,EAAG,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IACd,CAAA,EAAG,GAAA,CAAI,EAAA,EAAI,GAAG;AAAA,GAChB;AACF;AAEA,SAAS,eAAe,EAAA,EAAyB;AAC/C,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,EAAA,EAAI,MAAM,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,MAAA,GAAS,SAAA,CAAU,MAAM,IAAI,EAAC;AAE/C,EAAA,OAAO;AAAA,IACL,GAAG,iBAAiB,EAAE,CAAA;AAAA,IACtB,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC3B,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC3B,MAAA,EAAQ,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC3B,GAAG;AAAA,GACL;AACF;AAEA,SAAS,iBAAiB,EAAA,EAAyB;AACjD,EAAA,OAAO;AAAA,IACL,GAAG,iBAAiB,EAAE,CAAA;AAAA,IACtB,IAAA,EAAM,aAAA;AAAA,IACN,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,WAAW,CAAA;AAAA,IACjC,SAAS,QAAA,CAAS,EAAA,EAAI,QAAQ,CAAA,CAAE,IAAI,WAAW;AAAA,GACjD;AACF;AAEA,SAAS,gBAAgB,EAAA,EAAyB;AAChD,EAAA,MAAM,GAAA,GAAM,WAAW,EAAE,CAAA;AACzB,EAAA,OAAO;AAAA,IACL,GAAG,iBAAiB,EAAE,CAAA;AAAA,IACtB,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,GAAG,YAAA,CAAa,SAAS,IAAI,IAAA,CAAK,EAAA,EAAI,SAAS,CAAA,GAAI,MAAA;AAAA,IAC5D,OAAA,EAAS,GAAG,YAAA,CAAa,SAAS,IAAI,IAAA,CAAK,EAAA,EAAI,SAAS,CAAA,GAAI,MAAA;AAAA,IAC5D,kBAAkB,GAAA,CAAI,gBAAA;AAAA,IACtB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,aAAa,GAAA,CAAI;AAAA,GACnB;AACF;AAEA,SAAS,gBAAgB,EAAA,EAAyB;AAChD,EAAA,OAAO;AAAA,IACL,GAAG,iBAAiB,EAAE,CAAA;AAAA,IACtB,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,YAAY,EAAE;AAAA,GACxB;AACF;AAEA,SAAS,YAAY,QAAA,EAAiC;AACpD,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACjD,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAC9B,IAAA,QAAQ,GAAG,OAAA;AAAS,MAClB,KAAK,OAAA;AACH,QAAA,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,EAAE,CAAC,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,MAAA,CAAO,IAAA,CAAK,gBAAA,CAAiB,EAAE,CAAC,CAAA;AAChC,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA;AACJ,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAIO,SAAS,SAAS,GAAA,EAAuB;AAC9C,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,GAAA,EAAK,UAAU,CAAA;AAElD,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AACjD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,SAAA,CAAU,WAAW,CAAA,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,QAAQ,GAAA,CAAI,eAAA;AAClB,EAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,WAA+C,QAAA,CAAS,KAAA,EAAO,SAAS,CAAA,CAAE,IAAI,YAAY,CAAA;AAEhG,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAEhC,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,MAAA,CAAO,KAAA,EAAO,iBAAiB,CAAA;AAAA,IAChD,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5B,gBAAA,EAAkB,MAAA,CAAO,KAAA,EAAO,kBAAkB,CAAA;AAAA,IAClD,MAAA,EAAQ,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC3B,aAAA,EAAe,MAAA,CAAO,KAAA,EAAO,eAAe,CAAA;AAAA,IAC5C,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AAAA,IAChC,MAAA;AAAA,IACA,WAAA,EAAa,GAAA,CAAI,KAAA,EAAO,aAAa,CAAA;AAAA,IACrC,YAAA,EAAc,GAAA,CAAI,KAAA,EAAO,cAAc,CAAA;AAAA,IACvC,WAAA,EAAa,GAAA,CAAI,KAAA,EAAO,aAAA,EAAe,YAAY,CAAA;AAAA,IACnD,eAAA,EAAiB,QAAA,CAAS,KAAA,EAAO,iBAAiB,CAAA;AAAA,IAClD,eAAA,EAAiB,QAAA,CAAS,KAAA,EAAO,iBAAiB,CAAA;AAAA,IAClD,UAAA,EAAY,gBAAgB,KAAK,CAAA;AAAA,IACjC,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,aAAa,CAAA;AAAA,IACxC,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,aAAa,CAAA;AAAA,IACxC,YAAA,EAAc,MAAA,CAAO,KAAA,EAAO,cAAc,CAAA;AAAA,IAC1C,YAAA,EAAc,MAAA,CAAO,KAAA,EAAO,cAAc,CAAA;AAAA,IAC1C,UAAA,EAAY,GAAA,CAAI,KAAA,EAAO,YAAY,CAAA;AAAA,IACnC,QAAA;AAAA,IACA,SAAA,EAAW,GAAA,CAAI,KAAA,EAAO,WAAW,CAAA;AAAA,IACjC,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,GAAA,CAAI,KAAA,EAAO,SAAA,EAAW,KAAK,CAAA;AAAA,IACpC,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,OAAO;AAAA,GAC3B;AACF;AAEO,SAAS,SAAS,GAAA,EAA2B;AAClD,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,GAAA,EAAK,UAAU,CAAA;AAElD,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AACjD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,SAAA,CAAU,WAAW,CAAA,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAO,GAAA,CAAI,eAAA;AACjB,EAAA,IAAI,IAAA,CAAK,YAAY,SAAA,EAAW;AAC9B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;ACxkBO,IAAM,kBAAN,MAAsB;AAAA,EAK3B,WAAA,CAAY,SAA0B,WAAA,EAA6B;AAFnE,IAAA,IAAA,CAAiB,aAAA,uBAAoB,GAAA,EAAqB;AAGxD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA,EAEA,WAAW,OAAA,EAAiC;AAC1C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA;AAC7C,IAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,OAAO,CAAA;AAG9C,IAAA,IAAI,SAAS,KAAA,EAAO;AAGlB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAa,OAAO,IAAA;AAE9B,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAY,SAAS,MAAA,EAAQ,OAAA,KAAY,IAAA,CAAK,OAAA;AACjE,IAAA,IAAI,OAAA,IAAW,GAAG,OAAO,IAAA;AAEzB,IAAA,MAAM,MAAM,OAAA,GAAU,OAAA;AACtB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,OAAO,CAAA;AACxC,IAAA,MAAM,CAAA,GAAI,MAAA,GAAS,GAAA,IAAO,SAAA,GAAY,OAAA,CAAA;AACtC,IAAA,MAAM,CAAA,GAAI,MAAA,GAAS,GAAA,IAAO,UAAA,GAAa,OAAA,CAAA;AAEvC,IAAA,MAAM,QAAQ,IAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,WAAW,UAAU,CAAA;AACvD,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,EAAE,QAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,CAAA;AAEtE,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA;AACvC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,cAAA,CAAe,SAAiB,OAAA,EAAwB;AACtD,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,mBAAmB,OAAA,EAA+D;AAChF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAAG,SAAA;AAAA,EAC1C;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAO,EAAG;AAC7C,MAAA,GAAA,CAAI,OAAA,EAAQ;AAAA,IACd;AACA,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAC3B;AACF;;;ACtDO,SAAS,WAAA,CAAY,GAAA,EAAa,GAAA,EAAa,GAAA,EAA+B;AACnF,EAAA,QAAQ,IAAI,WAAA;AAAa,IACvB,KAAK,YAAA;AACH,MAAA,OAAO,iBAAA,CAAkB,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACxC,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACvC,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACvC,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAE3C;AAIA,SAAS,iBAAA,CAAkB,GAAA,EAAa,GAAA,EAAa,GAAA,EAA+B;AAClF,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,MAAM,GAAA,CAAI,SAAA;AAAA,IACb,CAAA,EAAG,MAAM,GAAA,CAAI;AAAA,GACf;AACF;AAIA,SAAS,gBAAA,CAAiB,GAAA,EAAa,GAAA,EAAa,GAAA,EAA+B;AACjF,EAAA,MAAM,KAAA,GAAQ,IAAI,SAAA,GAAY,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,GAAa,CAAA;AAC/B,EAAA,OAAO;AAAA,IACL,CAAA,EAAA,CAAI,MAAM,GAAA,IAAO,KAAA;AAAA,IACjB,CAAA,EAAA,CAAI,MAAM,GAAA,IAAO;AAAA,GACnB;AACF;AAIA,SAAS,gBAAA,CAAiB,GAAA,EAAa,GAAA,EAAa,GAAA,EAA+B;AACjF,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,KAAgB,GAAA;AACrC,EAAA,MAAM,WAAA,GAAc,IAAI,YAAA,KAAiB,MAAA;AAEzC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAMC,eAAc,WAAA,GAAc,GAAA,GAAM,CAAA,KAAM,CAAA,GAAI,MAAM,CAAA,KAAM,CAAA;AAC9D,IAAA,OAAO;AAAA,MACL,CAAA,EAAG,GAAA,IAAO,GAAA,CAAI,SAAA,GAAY,CAAA,CAAA;AAAA,MAC1B,GAAG,GAAA,GAAM,GAAA,CAAI,cAAcA,YAAAA,GAAc,GAAA,CAAI,aAAa,CAAA,GAAI,CAAA;AAAA,KAChE;AAAA,EACF;AAGA,EAAA,MAAM,cAAc,WAAA,GAAc,GAAA,GAAM,CAAA,KAAM,CAAA,GAAI,MAAM,CAAA,KAAM,CAAA;AAC9D,EAAA,OAAO;AAAA,IACL,GAAG,GAAA,GAAM,GAAA,CAAI,aAAa,WAAA,GAAc,GAAA,CAAI,YAAY,CAAA,GAAI,CAAA,CAAA;AAAA,IAC5D,CAAA,EAAG,GAAA,IAAO,GAAA,CAAI,UAAA,GAAa,CAAA;AAAA,GAC7B;AACF;AAIA,SAAS,gBAAA,CAAiB,GAAA,EAAa,GAAA,EAAa,GAAA,EAA+B;AACjF,EAAA,MAAM,OAAA,GAAU,IAAI,aAAA,IAAiB,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,KAAgB,GAAA;AACrC,EAAA,MAAM,WAAA,GAAc,IAAI,YAAA,KAAiB,MAAA;AAEzC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,QAAA,GAAA,CAAY,GAAA,CAAI,SAAA,GAAY,OAAA,IAAW,CAAA;AAC7C,IAAA,MAAMA,eAAc,WAAA,GAAc,GAAA,GAAM,CAAA,KAAM,CAAA,GAAI,MAAM,CAAA,KAAM,CAAA;AAC9D,IAAA,OAAO;AAAA,MACL,GAAG,GAAA,GAAM,QAAA;AAAA,MACT,GAAG,GAAA,GAAM,GAAA,CAAI,cAAcA,YAAAA,GAAc,GAAA,CAAI,aAAa,CAAA,GAAI,CAAA;AAAA,KAChE;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAA,CAAa,GAAA,CAAI,UAAA,GAAa,OAAA,IAAW,CAAA;AAC/C,EAAA,MAAM,cAAc,WAAA,GAAc,GAAA,GAAM,CAAA,KAAM,CAAA,GAAI,MAAM,CAAA,KAAM,CAAA;AAC9D,EAAA,OAAO;AAAA,IACL,GAAG,GAAA,GAAM,GAAA,CAAI,aAAa,WAAA,GAAc,GAAA,CAAI,YAAY,CAAA,GAAI,CAAA,CAAA;AAAA,IAC5D,GAAG,GAAA,GAAM;AAAA,GACX;AACF;;;AClFO,SAAS,eAAe,GAAA,EAAqB;AAClD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAEjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,QAAA,CAAS,OAAO,EAAE,CAAA;AAC3B;;;ACIO,IAAM,iBAAA,GAAN,cAAgC,SAAA,CAAU;AAAA,EAG/C,WAAA,CAAY,SAAA,EAA8B,QAAA,EAA6B,GAAA,EAAiB;AACtF,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,OAAA;AACvB,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,OAAA;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AACtD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,SAAA,CAAU,QAAA,IAAY,SAAA,CAAU,MAAA,EAAQ;AAC1C,MAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,MAAA,EAAQ,QAAA,EAAU,GAAG,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAA;AAAA,QACH,SAAA,CAAU,KAAA;AAAA,QACV,SAAA,CAAU,KAAA;AAAA,QACV,KAAK,KAAA,CAAM,SAAA,CAAU,MAAM,MAAA,IAAU,SAAA,CAAU,SAAS,CAAA,CAAE,CAAA;AAAA,QAC1D,CAAA;AAAA,QACA,CAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAA,CACN,MAAA,EACA,QAAA,EACA,GAAA,EACM;AACN,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,QAAA,EAAU,GAAG,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA,EAEQ,YACN,KAAA,EACA,UAAA,EACA,aACA,SAAA,EACA,SAAA,EACA,UACA,GAAA,EACM;AACN,IAAA,MAAM,QAAQ,GAAA,CAAI,WAAA;AAElB,IAAA,KAAA,MAAW,CAAC,KAAK,GAAG,CAAA,IAAK,aAAa,UAAA,EAAY,WAAA,EAAa,KAAK,CAAA,EAAG;AACrE,MAAA,MAAM,CAAA,GAAI,MAAM,UAAA,GAAa,GAAA;AAC7B,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AAC7C,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,MAAM,MAAM,WAAA,CAAY,SAAA,GAAY,GAAA,EAAK,SAAA,GAAY,KAAK,GAAG,CAAA;AAC7D,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAE7D,MAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,QAAA,MAAM,MAAA,GAAS,KAAK,mBAAA,CAAoB,UAAA,EAAY,YAAY,IAAA,EAAM,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA;AAClF,QAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAClD,QAAA,IAAI,CAAC,OAAA,EAAS;AAEd,QAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,OAAO,CAAA;AACjC,QAAA,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAChC,QAAA,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,GAAA,CAAI,SAAS,CAAA;AACrC,QAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAA,CACN,UAAA,EACA,MAAA,EACA,IAAA,EACA,GACA,CAAA,EACuB;AACvB,IAAA,MAAM,WAAiD,EAAC;AAExD,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA;AAC9C,MAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,MAAA,QAAA,CAAS,KAAK,EAAE,OAAA,EAAS,KAAK,IAAA,EAAM,KAAA,CAAM,UAAU,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAAe,QAAQ,CAAA;AAC1C,IAAA,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AACxB,IAAA,MAAA,CAAO,IAAA,EAAK;AACZ,IAAA,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,UAAU,YAAA,CACR,KAAA,EACA,MAAA,EACA,KAAA,EAC6B;AAC7B,EAAA,MAAM,WAAA,GAAc,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,SAAA;AACvD,EAAA,MAAM,WAAA,GAAc,KAAA,KAAU,UAAA,IAAc,KAAA,KAAU,SAAA;AAEtD,EAAA,MAAM,QAAA,GAAW,WAAA,GAAc,MAAA,GAAS,CAAA,GAAI,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,cAAc,EAAA,GAAK,MAAA;AAClC,EAAA,MAAM,OAAA,GAAU,cAAc,EAAA,GAAK,CAAA;AAEnC,EAAA,MAAM,QAAA,GAAW,WAAA,GAAc,KAAA,GAAQ,CAAA,GAAI,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,cAAc,EAAA,GAAK,KAAA;AAClC,EAAA,MAAM,OAAA,GAAU,cAAc,EAAA,GAAK,CAAA;AAEnC,EAAA,KAAA,IAAS,GAAA,GAAM,QAAA,EAAU,GAAA,KAAQ,MAAA,EAAQ,OAAO,OAAA,EAAS;AACvD,IAAA,KAAA,IAAS,GAAA,GAAM,QAAA,EAAU,GAAA,KAAQ,MAAA,EAAQ,OAAO,OAAA,EAAS;AACvD,MAAA,MAAM,CAAC,KAAK,GAAG,CAAA;AAAA,IACjB;AAAA,EACF;AACF;AAEA,SAAS,SAAA,CAAU,MAAA,EAAgB,IAAA,EAAoB,SAAA,EAAyB;AAC9E,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,MAAA,CAAO,QAAA,GAAW,KAAK,EAAA,GAAK,CAAA;AAC5B,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,GAAI,IAAA,CAAK,cAAA,GAAiB,EAAA,GAAK,CAAA;AAC5C,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,GAAI,IAAA,CAAK,YAAA,GAAe,EAAA,GAAK,CAAA;AAC1C,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AACtB,IAAA,MAAA,CAAO,SAAS,CAAA,IAAK,SAAA;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,MAAM,CAAA,GAAI,EAAA;AACjB,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA;AAAA,IACpB;AACA,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,MAAA,CAAO,MAAM,CAAA,GAAI,EAAA;AACjB,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA;AAAA,IACpB;AAAA,EACF;AACF;ACpJO,IAAM,kBAAA,GAAN,cAAiCC,SAAAA,CAAU;AAAA,EAGhD,WAAA,CAAY,WAA+B,OAAA,EAAyB;AAClE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,OAAA;AACvB,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,OAAA;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AACtD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,YAAY,OAAA,EAAwB;AAC1C,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,IAAA,CAAK,SAAA;AAElC,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa;AAAA,QAC9B,OAAA;AAAA,QACA,KAAA,EAAO,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ,KAAK,OAAA,CAAQ,KAAA;AAAA,QAC9C,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,KAAK,OAAA,CAAQ;AAAA,OACjD,CAAA;AACD,MAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,IAAIC,MAAAA,CAAO,OAAO,CAAA;AACjC,MAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IACtB;AAAA,EACF;AACF;ACjCO,IAAM,mBAAA,GAAN,cAAkCD,SAAAA,CAAU;AAAA,EAGjD,WAAA,CAAY,WAAgC,QAAA,EAA6B;AACvE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,OAAA;AACvB,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,OAAA;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AACtD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,IAAA,CAAK,cAAc,QAAQ,CAAA;AAAA,EAC7B;AAAA,EAEQ,cAAc,QAAA,EAAmC;AACvD,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS;AACxC,MAAA,MAAMF,MAAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,QAAQ,CAAA;AAC9C,MAAA,IAAIA,MAAAA,EAAO;AACT,QAAAA,OAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,IAAQ,CAAA,OAAA,EAAU,IAAI,EAAE,CAAA,CAAA;AAC1C,QAAA,IAAA,CAAK,SAASA,MAAK,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,KAAkB,QAAA,EAA+C;AAErF,IAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,EAAW;AACzB,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,EAAK,QAAQ,CAAA;AAAA,IAC7C;AAGA,IAAA,IAAI,IAAI,IAAA,EAAM;AACZ,MAAA,OAAO,IAAA,CAAK,kBAAkB,GAAG,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,IAChC;AAEA,IAAA,IAAI,IAAI,KAAA,EAAO;AACb,MAAA,OAAO,IAAA,CAAK,aAAa,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,IAAI,QAAA,EAAU;AAChB,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,IACrD;AAGA,IAAA,IAAI,GAAA,CAAI,KAAA,GAAQ,CAAA,IAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACnC,MAAA,OAAO,IAAA,CAAK,iBAAiB,GAAG,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,iBAAA,CAAkB,KAAkB,QAAA,EAA4C;AACtF,IAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,MAAA,EAAW,OAAO,IAAA;AAElC,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAGrB,IAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC7C,MAAA,MAAM,EAAA,GAAK,SAAS,CAAC,CAAA;AACrB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,IAAI,EAAA,CAAG,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,GAAA,EAAK;AACtC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,GAAM,EAAA,CAAG,OAAA,CAAQ,QAAA;AACzC,QAAA,MAAM,OAAA,GAAU,EAAA,CAAG,UAAA,CAAW,OAAO,CAAA;AACrC,QAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,QAAA,MAAM,MAAA,GAAS,IAAIG,MAAAA,CAAO,OAAO,CAAA;AACjC,QAAA,MAAA,CAAO,SAAS,GAAA,CAAI,GAAA,CAAI,GAAG,GAAA,CAAI,CAAA,GAAI,IAAI,MAAM,CAAA;AAC7C,QAAA,MAAA,CAAO,QAAQ,GAAA,CAAI,KAAA;AACnB,QAAA,MAAA,CAAO,SAAS,GAAA,CAAI,MAAA;AACpB,QAAA,MAAA,CAAO,QAAQ,GAAA,CAAI,QAAA;AACnB,QAAA,MAAA,CAAO,UAAU,GAAA,CAAI,OAAA;AAErB,QAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,UAAA,MAAA,CAAO,MAAM,CAAA,IAAK,EAAA;AAClB,UAAA,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA;AAAA,QACpB;AACA,QAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,UAAA,MAAA,CAAO,MAAM,CAAA,IAAK,EAAA;AAClB,UAAA,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA;AAAA,QACpB;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,kBAAkB,GAAA,EAA6B;AACrD,IAAA,MAAM,KAAK,GAAA,CAAI,IAAA;AACf,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK;AAAA,MACpB,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,GAAG,UAAA,IAAc,YAAA;AAAA,QAC7B,QAAA,EAAU,GAAG,SAAA,IAAa,EAAA;AAAA,QAC1B,IAAA,EAAM,GAAG,KAAA,IAAS,SAAA;AAAA,QAClB,UAAA,EAAY,EAAA,CAAG,IAAA,GAAO,MAAA,GAAS,QAAA;AAAA,QAC/B,SAAA,EAAW,EAAA,CAAG,MAAA,GAAS,QAAA,GAAW,QAAA;AAAA,QAClC,QAAA,EAAU,GAAG,IAAA,IAAQ,KAAA;AAAA,QACrB,eAAe,GAAA,CAAI,KAAA;AAAA,QACnB,KAAA,EAAO,GAAG,MAAA,IAAU;AAAA;AACtB,KACD,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC9B,IAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,QAAA;AACjB,IAAA,IAAA,CAAK,UAAU,GAAA,CAAI,OAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,iBAAiB,GAAA,EAA6B;AACpD,IAAA,MAAM,IAAI,IAAI,QAAA,GAAW,IAAA,CAAK,CAAA,EAAG,GAAG,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,MAAM,EAAE,MAAA,CAAO,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,GAAG,CAAA;AAC/F,IAAA,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,QAAQ,GAAA,CAAI,QAAA;AACd,IAAA,CAAA,CAAE,UAAU,GAAA,CAAI,OAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,eAAe,GAAA,EAA6B;AAClD,IAAA,MAAM,EAAA,GAAK,IAAI,KAAA,GAAQ,CAAA;AACvB,IAAA,MAAM,EAAA,GAAK,IAAI,MAAA,GAAS,CAAA;AACxB,IAAA,MAAM,IAAI,IAAI,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,CAAE,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAG,CAAA;AACrF,IAAA,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,QAAQ,GAAA,CAAI,QAAA;AACd,IAAA,CAAA,CAAE,UAAU,GAAA,CAAI,OAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,aAAa,GAAA,EAA6B;AAChD,IAAA,MAAM,CAAA,GAAI,IAAI,QAAA,EAAS,CAAE,MAAA,CAAO,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AACtD,IAAA,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,UAAU,GAAA,CAAI,OAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CAAe,GAAA,EAAkB,MAAA,EAAsB,MAAA,EAA4B;AACzF,IAAA,MAAM,CAAA,GAAI,IAAI,QAAA,EAAS;AAEvB,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA;AACzB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,QAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,QAAA,CAAA,CAAE,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA;AAAA,MACrB;AACA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,CAAA,CAAE,SAAA,EAAU;AAAA,MACd;AACA,MAAA,CAAA,CAAE,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAG,CAAA;AAAA,IACxC;AAEA,IAAA,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3B,IAAA,CAAA,CAAE,QAAQ,GAAA,CAAI,QAAA;AACd,IAAA,CAAA,CAAE,UAAU,GAAA,CAAI,OAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AACF;ACvKO,IAAM,kBAAA,GAAN,cAAiCD,SAAAA,CAAU;AAAA,EAGhD,WAAA,CACE,SAAA,EACA,QAAA,EACA,GAAA,EACA,aAAA,EACA;AACA,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,OAAA;AACvB,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,OAAA;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AACtD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,IAAA,CAAK,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,KAAA,MAAWF,MAAAA,IAAS,UAAU,MAAA,EAAQ;AACpC,MAAA,MAAM,QAAA,GAAW,mBAAA,CAAoBA,MAAAA,EAAO,QAAA,EAAU,KAAK,aAAa,CAAA;AACxE,MAAA,IAAI,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AACF;;;ACvBO,SAAS,mBAAA,CACd,KAAA,EACA,QAAA,EACA,GAAA,EACA,aAAA,EACkB;AAClB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,WAAA;AACH,MAAA,OAAO,IAAI,iBAAA,CAAkB,KAAA,EAAO,QAAA,EAAU,GAAG,CAAA;AAAA,IAEnD,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,GAAS,aAAA,CAAc,IAAI,KAAA,CAAM,KAAK,KAAK,IAAA,GAAQ,IAAA;AACrE,MAAA,OAAO,IAAI,kBAAA,CAAmB,KAAA,EAAO,GAAG,CAAA;AAAA,IAC1C;AAAA,IAEA,KAAK,aAAA;AACH,MAAA,OAAO,IAAI,mBAAA,CAAoB,KAAA,EAAO,QAAQ,CAAA;AAAA,IAEhD,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,KAAK,aAAa,CAAA;AAAA;AAEvE;;;ACxBO,IAAM,QAAA,GAAN,cAAuBE,SAAAA,CAAU;AAAA,EAMtC,WAAA,CAAY,SAAsB,OAAA,EAA2B;AAC3D,IAAA,KAAA,EAAM;AAHR,IAAA,IAAA,CAAQ,WAAA,GAA+B,IAAA;AAKrC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AAGb,IAAA,MAAM,eAAA,GAAkB,OAAA,EAAS,eAAA,oBAAmB,IAAI,GAAA,EAAI;AAC5D,IAAA,MAAM,kBAAA,GAAqB,OAAA,EAAS,kBAAA,oBAAsB,IAAI,GAAA,EAAI;AAClE,IAAA,MAAM,iBAAA,GAAoB,OAAA,EAAS,iBAAA,oBAAqB,IAAI,GAAA,EAAI;AAEhE,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,EAAA,KAAM;AACjD,MAAA,MAAM,OAAA,GAAU,GAAG,KAAA,GAAS,eAAA,CAAgB,IAAI,EAAA,CAAG,KAAK,KAAK,IAAA,GAAQ,IAAA;AACrE,MAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,EAAI,OAAO,CAAA;AAGhD,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,OAAO,CAAA,IAAK,GAAG,KAAA,EAAO;AACzC,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAC/C,UAAA,IAAI,GAAA,EAAK,QAAA,CAAS,cAAA,CAAe,OAAA,EAAS,GAAG,CAAA;AAAA,QAC/C;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AAGD,IAAA,MAAM,GAAA,GAAkB;AAAA,MACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAc,OAAA,CAAQ;AAAA,KACxB;AAGA,IAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,MAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,IAC/B;AAGA,IAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,MAAA,MAAMF,SAAQ,mBAAA,CAAoB,KAAA,EAAO,IAAA,CAAK,gBAAA,EAAkB,KAAK,kBAAkB,CAAA;AACvF,MAAA,IAAIA,MAAAA,EAAO,IAAA,CAAK,QAAA,CAASA,MAAK,CAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,IAAI,WAAA,GAAc;AAChB,IAAA,OAAO,KAAK,OAAA,CAAQ,WAAA;AAAA,EACtB;AAAA,EACA,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,EACtB;AAAA,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,OAAA,CAAQ,SAAA;AAAA,EACtB;AAAA,EACA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,EACtB;AAAA,EAEA,SAAS,IAAA,EAAqC;AAC5C,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,IAAI,CAAA;AAAA,EACjD;AAAA,EAEQ,iBAAiB,OAAA,EAA4B;AACnD,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,CAAQ,eAAgB,CAAA;AACrD,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,SAAA;AAC3C,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,UAAA;AAE7C,IAAA,IAAA,CAAK,WAAA,GAAc,IAAII,QAAAA,EAAS,CAAE,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,UAAA,EAAY,WAAW,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAChF,IAAA,IAAA,CAAK,YAAY,KAAA,GAAQ,YAAA;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,EAChC;AAAA,EAES,QAAQ,OAAA,EAAqD;AACpE,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,gBAAA,EAAkB;AACtC,MAAA,EAAA,CAAG,OAAA,EAAQ;AAAA,IACb;AACA,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA,EACvB;AACF;AC5FA,SAAS,SAAS,GAAA,EAAsB;AACtC,EAAA,OAAO,GAAA,KAAQ,MAAA;AACjB;AAEA,SAAS,SAAS,GAAA,EAAsB;AACtC,EAAA,OAAO,GAAA,KAAQ,MAAA;AACjB;AAEO,IAAM,cAAA,GAA8C;AAAA,EACzD,SAAA,EAAW;AAAA,IACT,MAAM,aAAA,CAAc,UAAA;AAAA,IACpB,IAAA,EAAM;AAAA,GACR;AAAA,EAEA,EAAA,EAAI,iBAAA;AAAA,EACJ,IAAA,EAAM,iBAAA;AAAA,EAEN,KAAK,GAAA,EAAsB;AACzB,IAAA,MAAM,GAAA,GAAMC,IAAA,CAAS,OAAA,CAAQ,GAAG,EAAE,WAAA,EAAY;AAC9C,IAAA,OAAO,GAAA,KAAQ,UAAU,GAAA,KAAQ,MAAA;AAAA,EACnC,CAAA;AAAA,EAEA,MAAM,KAAK,GAAA,EAAqC;AAC9C,IAAA,MAAM,GAAA,GAAMA,IAAA,CAAS,OAAA,CAAQ,GAAG,EAAE,WAAA,EAAY;AAC9C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAEhC,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,IAAA,EAAK;AAChC,MAAA,IAAA,GAAO,SAAS,GAAG,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,IAAA,GAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,IAC9B;AAEA,IAAA,MAAM,QAAA,GAAWA,IAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AAGrC,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA0B;AACvD,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,QAAA,EAAU;AAC9B,MAAA,IAAI,QAAA,IAAY,EAAA,IAAM,EAAE,MAAA,IAAU,EAAA,CAAA,EAAK;AACrC,QAAA,MAAM,KAAA,GAAQA,IAAA,CAAS,IAAA,CAAK,QAAA,EAAU,GAAG,MAAM,CAAA;AAC/C,QAAA,MAAM,UAAA,GAAa,MAAM,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,MAAM,QAAQA,IAAA,CAAS,OAAA,CAAQ,EAAA,CAAG,MAAM,EAAE,WAAA,EAAY;AACtD,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,UAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,IAAA,EAAK;AACpC,UAAA,MAAA,GAAS,SAAS,KAAK,CAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,MAAA,GAAU,MAAM,WAAW,IAAA,EAAK;AAAA,QAClC;AACA,QAAA,gBAAA,CAAiB,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,MAAM,CAAA;AAAA,MACxC;AAAA,IACF;AAGA,IAAA,MAAM,UAAU,MAAM,aAAA,CAAc,IAAA,EAAM,EAAE,kBAAkB,CAAA;AAG9D,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAqB;AACjD,IAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAqB;AACpD,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAqB;AAEnD,IAAA,MAAM,eAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,QAAA,EAAU;AACjC,MAAA,IAAI,GAAG,KAAA,EAAO;AACZ,QAAA,MAAM,QAAA,GAAWA,IAAA,CAAS,IAAA,CAAK,QAAA,EAAU,GAAG,KAAK,CAAA;AACjD,QAAA,YAAA,CAAa,IAAA;AAAA,UACX,MAAA,CAAO,IAAA,CAAc,QAAQ,CAAA,CAAE,KAAK,CAAA,GAAA,KAAO;AACzC,YAAA,eAAA,CAAgB,GAAA,CAAI,EAAA,CAAG,KAAA,EAAQ,GAAG,CAAA;AAAA,UACpC,CAAC;AAAA,SACH;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,OAAO,CAAA,IAAK,GAAG,KAAA,EAAO;AAC1C,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,MAAM,UAAA,GAAaA,IAAA,CAAS,IAAA,CAAK,QAAA,EAAU,QAAQ,KAAK,CAAA;AACxD,UAAA,YAAA,CAAa,IAAA;AAAA,YACX,MAAA,CAAO,IAAA,CAAc,UAAU,CAAA,CAAE,KAAK,CAAA,GAAA,KAAO;AAC3C,cAAA,iBAAA,CAAkB,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAQ,GAAG,CAAA;AAAA,YAC3C,CAAC;AAAA,WACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,KAAA,IAAS,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,EAAO;AAC9C,QAAA,MAAM,MAAA,GAASA,IAAA,CAAS,IAAA,CAAK,QAAA,EAAU,MAAM,KAAK,CAAA;AAClD,QAAA,YAAA,CAAa,IAAA;AAAA,UACX,MAAA,CAAO,IAAA,CAAc,MAAM,CAAA,CAAE,KAAK,CAAA,GAAA,KAAO;AACvC,YAAA,kBAAA,CAAmB,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UACzC,CAAC;AAAA,SACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,CAAQ,IAAI,YAAY,CAAA;AAG9B,IAAA,MAAM,SAAA,GAAY,IAAI,QAAA,CAAS,OAAA,EAAS;AAAA,MACtC,eAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,EAAE,SAAS,SAAA,EAAU;AAAA,EAC9B;AACF;AAEA,SAAS,cAAc,MAAA,EAA0C;AAC/D,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT","file":"index.js","sourcesContent":["// ─── Tiled JSON Map Format Types ─────────────────────────────────────────────\n// Based on Tiled 1.11 JSON Map Format specification\n// https://doc.mapeditor.org/en/stable/reference/json-map-format/\n\nimport type { Texture, Container } from 'pixi.js'\n\n// ─── Enums / String Unions ───────────────────────────────────────────────────\n\nexport type TiledOrientation = 'orthogonal' | 'isometric' | 'staggered' | 'hexagonal'\n\nexport type TiledRenderOrder = 'right-down' | 'right-up' | 'left-down' | 'left-up'\n\nexport type TiledStaggerAxis = 'x' | 'y'\n\nexport type TiledStaggerIndex = 'odd' | 'even'\n\nexport type TiledLayerType = 'tilelayer' | 'objectgroup' | 'imagelayer' | 'group'\n\nexport type TiledDrawOrder = 'topdown' | 'index'\n\nexport type TiledEncoding = 'csv' | 'base64'\n\nexport type TiledCompression = 'zlib' | 'gzip' | 'zstd' | ''\n\nexport type TiledPropertyType =\n | 'string'\n | 'int'\n | 'float'\n | 'bool'\n | 'color'\n | 'file'\n | 'object'\n | 'class'\n\nexport type TiledObjectAlignment =\n | 'unspecified'\n | 'topleft'\n | 'top'\n | 'topright'\n | 'left'\n | 'center'\n | 'right'\n | 'bottomleft'\n | 'bottom'\n | 'bottomright'\n\nexport type TiledTileRenderSize = 'tile' | 'grid'\n\nexport type TiledFillMode = 'stretch' | 'preserve-aspect-fit'\n\nexport type TiledGridOrientation = 'orthogonal' | 'isometric'\n\nexport type TiledWangSetType = 'corner' | 'edge' | 'mixed'\n\nexport type TiledHAlign = 'center' | 'right' | 'justify' | 'left'\n\nexport type TiledVAlign = 'center' | 'bottom' | 'top'\n\n// ─── Property ────────────────────────────────────────────────────────────────\n\nexport interface TiledProperty {\n name: string\n type: TiledPropertyType\n propertytype?: string\n value: string | number | boolean\n}\n\n// ─── Point ───────────────────────────────────────────────────────────────────\n\nexport interface TiledPoint {\n x: number\n y: number\n}\n\n// ─── Text ────────────────────────────────────────────────────────────────────\n\nexport interface TiledText {\n bold?: boolean\n color?: string\n fontfamily?: string\n halign?: TiledHAlign\n italic?: boolean\n kerning?: boolean\n pixelsize?: number\n strikeout?: boolean\n text: string\n underline?: boolean\n valign?: TiledVAlign\n wrap?: boolean\n}\n\n// ─── Object ──────────────────────────────────────────────────────────────────\n\nexport interface TiledObject {\n ellipse?: boolean\n gid?: number\n height: number\n id: number\n name: string\n point?: boolean\n polygon?: TiledPoint[]\n polyline?: TiledPoint[]\n properties?: TiledProperty[]\n rotation: number\n template?: string\n text?: TiledText\n type: string\n visible: boolean\n width: number\n x: number\n y: number\n}\n\n// ─── Chunk (infinite maps) ───────────────────────────────────────────────────\n\nexport interface TiledChunk {\n data: number[] | string\n height: number\n width: number\n x: number\n y: number\n}\n\n// ─── Layer ───────────────────────────────────────────────────────────────────\n\nexport interface TiledLayer {\n chunks?: TiledChunk[]\n class?: string\n compression?: TiledCompression\n data?: number[] | string\n draworder?: TiledDrawOrder\n encoding?: TiledEncoding\n height?: number\n id: number\n image?: string\n imageheight?: number\n imagewidth?: number\n layers?: TiledLayer[]\n locked?: boolean\n name: string\n objects?: TiledObject[]\n offsetx?: number\n offsety?: number\n opacity: number\n parallaxx?: number\n parallaxy?: number\n properties?: TiledProperty[]\n repeatx?: boolean\n repeaty?: boolean\n startx?: number\n starty?: number\n tintcolor?: string\n transparentcolor?: string\n type: TiledLayerType\n visible: boolean\n width?: number\n x: number\n y: number\n}\n\n// ─── Frame (tile animation) ──────────────────────────────────────────────────\n\nexport interface TiledFrame {\n duration: number\n tileid: number\n}\n\n// ─── Tile Offset ─────────────────────────────────────────────────────────────\n\nexport interface TiledTileOffset {\n x: number\n y: number\n}\n\n// ─── Grid ────────────────────────────────────────────────────────────────────\n\nexport interface TiledGrid {\n height: number\n orientation: TiledGridOrientation\n width: number\n}\n\n// ─── Transformations ─────────────────────────────────────────────────────────\n\nexport interface TiledTransformations {\n hflip: boolean\n vflip: boolean\n rotate: boolean\n preferuntransformed: boolean\n}\n\n// ─── Terrain ─────────────────────────────────────────────────────────────────\n\nexport interface TiledTerrain {\n name: string\n properties?: TiledProperty[]\n tile: number\n}\n\n// ─── Wang Color ──────────────────────────────────────────────────────────────\n\nexport interface TiledWangColor {\n class?: string\n color: string\n name: string\n probability: number\n properties?: TiledProperty[]\n tile: number\n}\n\n// ─── Wang Tile ───────────────────────────────────────────────────────────────\n\nexport interface TiledWangTile {\n tileid: number\n wangid: number[]\n}\n\n// ─── Wang Set ────────────────────────────────────────────────────────────────\n\nexport interface TiledWangSet {\n class?: string\n colors: TiledWangColor[]\n name: string\n properties?: TiledProperty[]\n tile: number\n type: TiledWangSetType\n wangtiles: TiledWangTile[]\n}\n\n// ─── Tile Definition ─────────────────────────────────────────────────────────\n\nexport interface TiledTileDefinition {\n animation?: TiledFrame[]\n id: number\n image?: string\n imageheight?: number\n imagewidth?: number\n x?: number\n y?: number\n width?: number\n height?: number\n objectgroup?: TiledLayer\n probability?: number\n properties?: TiledProperty[]\n terrain?: number[]\n type?: string\n}\n\n// ─── Tileset ─────────────────────────────────────────────────────────────────\n\nexport interface TiledTileset {\n backgroundcolor?: string\n class?: string\n columns: number\n fillmode?: TiledFillMode\n firstgid: number\n grid?: TiledGrid\n image?: string\n imageheight?: number\n imagewidth?: number\n margin: number\n name: string\n objectalignment?: TiledObjectAlignment\n properties?: TiledProperty[]\n source?: string\n spacing: number\n terrains?: TiledTerrain[]\n tilecount: number\n tiledversion?: string\n tileheight: number\n tileoffset?: TiledTileOffset\n tilerendersize?: TiledTileRenderSize\n tiles?: TiledTileDefinition[]\n tilewidth: number\n transformations?: TiledTransformations\n transparentcolor?: string\n type?: string\n version?: string\n wangsets?: TiledWangSet[]\n}\n\n// ─── External tileset reference (before resolution) ──────────────────────────\n\nexport interface TiledTilesetRef {\n firstgid: number\n source: string\n}\n\n// ─── Map ─────────────────────────────────────────────────────────────────────\n\nexport interface TiledMap {\n backgroundcolor?: string\n class?: string\n compressionlevel?: number\n height: number\n hexsidelength?: number\n infinite: boolean\n layers: TiledLayer[]\n nextlayerid: number\n nextobjectid: number\n orientation: TiledOrientation\n parallaxoriginx?: number\n parallaxoriginy?: number\n properties?: TiledProperty[]\n renderorder?: TiledRenderOrder\n staggeraxis?: TiledStaggerAxis\n staggerindex?: TiledStaggerIndex\n tiledversion?: string\n tileheight: number\n tilesets: (TiledTileset | TiledTilesetRef)[]\n tilewidth: number\n type: 'map'\n version: string\n width: number\n}\n\n// ─── Object Template ─────────────────────────────────────────────────────────\n\nexport interface TiledObjectTemplate {\n type: 'template'\n tileset?: TiledTileset\n object: TiledObject\n}\n\n// ─── GID Bit Flags ───────────────────────────────────────────────────────────\n\nexport const FLIPPED_HORIZONTALLY_FLAG = 0x80000000\nexport const FLIPPED_VERTICALLY_FLAG = 0x40000000\nexport const FLIPPED_DIAGONALLY_FLAG = 0x20000000\nexport const ROTATED_HEXAGONAL_120_FLAG = 0x10000000\nexport const GID_MASK = 0x0fffffff\n\n// ─── Resolved types (post-parse, used by renderer) ──────────────────────────\n\nexport interface ResolvedTile {\n gid: number\n localId: number\n tilesetIndex: number\n horizontalFlip: boolean\n verticalFlip: boolean\n diagonalFlip: boolean\n}\n\nexport interface ResolvedChunk {\n x: number\n y: number\n width: number\n height: number\n tiles: (ResolvedTile | null)[]\n}\n\nexport interface ResolvedTileLayer {\n type: 'tilelayer'\n id: number\n name: string\n opacity: number\n visible: boolean\n offsetx: number\n offsety: number\n parallaxx: number\n parallaxy: number\n tintcolor?: string\n properties: TiledProperty[]\n width: number\n height: number\n infinite: boolean\n tiles: (ResolvedTile | null)[]\n chunks?: ResolvedChunk[]\n}\n\nexport interface ResolvedImageLayer {\n type: 'imagelayer'\n id: number\n name: string\n opacity: number\n visible: boolean\n offsetx: number\n offsety: number\n parallaxx: number\n parallaxy: number\n tintcolor?: string\n properties: TiledProperty[]\n image: string\n imagewidth?: number\n imageheight?: number\n repeatx: boolean\n repeaty: boolean\n transparentcolor?: string\n}\n\nexport interface ResolvedObjectLayer {\n type: 'objectgroup'\n id: number\n name: string\n opacity: number\n visible: boolean\n offsetx: number\n offsety: number\n parallaxx: number\n parallaxy: number\n tintcolor?: string\n properties: TiledProperty[]\n draworder: TiledDrawOrder\n objects: TiledObject[]\n}\n\nexport interface ResolvedGroupLayer {\n type: 'group'\n id: number\n name: string\n opacity: number\n visible: boolean\n offsetx: number\n offsety: number\n parallaxx: number\n parallaxy: number\n tintcolor?: string\n properties: TiledProperty[]\n layers: ResolvedLayer[]\n}\n\nexport type ResolvedLayer =\n | ResolvedTileLayer\n | ResolvedImageLayer\n | ResolvedObjectLayer\n | ResolvedGroupLayer\n\nexport interface ResolvedTileset {\n firstgid: number\n name: string\n tilewidth: number\n tileheight: number\n columns: number\n tilecount: number\n margin: number\n spacing: number\n image?: string\n imagewidth?: number\n imageheight?: number\n tileoffset: TiledTileOffset\n objectalignment: TiledObjectAlignment\n tilerendersize: TiledTileRenderSize\n fillmode: TiledFillMode\n tiles: Map<number, TiledTileDefinition>\n properties: TiledProperty[]\n transformations?: TiledTransformations\n grid?: TiledGrid\n wangsets?: TiledWangSet[]\n terrains?: TiledTerrain[]\n}\n\nexport interface ResolvedMap {\n orientation: TiledOrientation\n renderorder: TiledRenderOrder\n width: number\n height: number\n tilewidth: number\n tileheight: number\n infinite: boolean\n backgroundcolor?: string\n hexsidelength?: number\n staggeraxis?: TiledStaggerAxis\n staggerindex?: TiledStaggerIndex\n parallaxoriginx: number\n parallaxoriginy: number\n properties: TiledProperty[]\n tilesets: ResolvedTileset[]\n layers: ResolvedLayer[]\n version: string\n tiledversion?: string\n}\n\n// ─── Parser options ──────────────────────────────────────────────────────────\n\nexport interface ParseOptions {\n externalTilesets?: Map<string, TiledTileset>\n}\n\n// ─── Renderer options ────────────────────────────────────────────────────────\n\nexport interface TiledMapOptions {\n tilesetTextures?: Map<string, Texture>\n imageLayerTextures?: Map<string, Texture>\n tileImageTextures?: Map<string, Texture>\n}\n\nexport interface TiledMapAsset {\n mapData: ResolvedMap\n container: Container\n}\n\n// ─── Tile placement ──────────────────────────────────────────────────────────\n\nexport interface MapContext {\n orientation: TiledOrientation\n renderorder: TiledRenderOrder\n tilewidth: number\n tileheight: number\n hexsidelength?: number\n staggeraxis?: TiledStaggerAxis\n staggerindex?: TiledStaggerIndex\n}\n\nexport interface TilePosition {\n x: number\n y: number\n}\n","import type { ResolvedTile } from '../types'\nimport {\n FLIPPED_HORIZONTALLY_FLAG,\n FLIPPED_VERTICALLY_FLAG,\n FLIPPED_DIAGONALLY_FLAG,\n GID_MASK\n} from '../types'\n\nexport function decodeGid(raw: number): ResolvedTile | null {\n const gid = raw & GID_MASK\n if (gid === 0) return null\n\n return {\n gid,\n localId: 0,\n tilesetIndex: 0,\n horizontalFlip: (raw & FLIPPED_HORIZONTALLY_FLAG) !== 0,\n verticalFlip: (raw & FLIPPED_VERTICALLY_FLAG) !== 0,\n diagonalFlip: (raw & FLIPPED_DIAGONALLY_FLAG) !== 0\n }\n}\n","import type { TiledCompression, TiledEncoding } from '../types'\n\nexport function decodeLayerData(\n data: number[] | string,\n encoding?: TiledEncoding,\n compression?: TiledCompression\n): number[] {\n if (Array.isArray(data)) {\n return data\n }\n\n if (encoding === 'base64') {\n const bytes = base64ToBytes(data)\n\n if (compression === 'gzip' || compression === 'zlib') {\n const decompressed = decompressBytes(bytes, compression)\n return bytesToGids(decompressed)\n }\n\n if (compression === 'zstd') {\n throw new Error('zstd compression is not supported in the browser')\n }\n\n return bytesToGids(bytes)\n }\n\n throw new Error(`Unsupported encoding: ${encoding ?? 'unknown'}`)\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const trimmed = base64.trim()\n\n if (typeof globalThis.atob === 'function') {\n const binary = globalThis.atob(trimmed)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n }\n\n const buf = Buffer.from(trimmed, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\nfunction bytesToGids(bytes: Uint8Array): number[] {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n const count = bytes.byteLength / 4\n const gids: number[] = new Array(count)\n\n for (let i = 0; i < count; i++) {\n gids[i] = view.getUint32(i * 4, true)\n }\n\n return gids\n}\n\nasync function decompressBytesAsync(\n bytes: Uint8Array,\n compression: 'gzip' | 'zlib'\n): Promise<Uint8Array> {\n const format = compression === 'gzip' ? 'gzip' : 'deflate'\n const ds = new DecompressionStream(format)\n const writer = ds.writable.getWriter()\n writer.write(bytes as Uint8Array<ArrayBuffer>)\n writer.close()\n\n const reader = ds.readable.getReader()\n const chunks: Uint8Array[] = []\n let totalLength = 0\n\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n chunks.push(value)\n totalLength += value.byteLength\n }\n\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.byteLength\n }\n return result\n}\n\nfunction decompressBytes(_bytes: Uint8Array, compression: 'gzip' | 'zlib'): Uint8Array {\n if (typeof DecompressionStream !== 'undefined') {\n // Synchronous wrapper is not possible for DecompressionStream.\n // We throw here — the async path should be used instead.\n throw new Error(\n `Compressed tile data (${compression}) requires the async parser. ` +\n 'Use parseMapAsync() instead of parseMap() for compressed maps.'\n )\n }\n\n throw new Error(\n `Compressed tile data (${compression}) is not supported in this environment. ` +\n 'DecompressionStream API is required.'\n )\n}\n\nexport async function decodeLayerDataAsync(\n data: number[] | string,\n encoding?: TiledEncoding,\n compression?: TiledCompression\n): Promise<number[]> {\n if (Array.isArray(data)) {\n return data\n }\n\n if (encoding === 'base64') {\n const bytes = base64ToBytes(data)\n\n if (compression === 'gzip' || compression === 'zlib') {\n const decompressed = await decompressBytesAsync(bytes, compression)\n return bytesToGids(decompressed)\n }\n\n if (compression === 'zstd') {\n throw new Error('zstd compression is not supported in the browser')\n }\n\n return bytesToGids(bytes)\n }\n\n throw new Error(`Unsupported encoding: ${encoding ?? 'unknown'}`)\n}\n","import type {\n TiledMap,\n TiledLayer,\n TiledTileset,\n TiledTilesetRef,\n TiledTileDefinition,\n TiledChunk,\n TiledDrawOrder,\n TiledRenderOrder,\n ParseOptions,\n ResolvedMap,\n ResolvedLayer,\n ResolvedTileLayer,\n ResolvedImageLayer,\n ResolvedObjectLayer,\n ResolvedGroupLayer,\n ResolvedTileset,\n ResolvedTile,\n ResolvedChunk\n} from '../types'\nimport { decodeGid } from './decodeGid.js'\nimport { decodeLayerData, decodeLayerDataAsync } from './decodeData.js'\n\n// ─── Tileset ref check ───────────────────────────────────────────────────────\n\nfunction isTilesetRef(ts: TiledTileset | TiledTilesetRef): ts is TiledTilesetRef {\n return 'source' in ts && !('name' in ts)\n}\n\n// ─── Resolve tileset ─────────────────────────────────────────────────────────\n\nfunction resolveTileset(raw: TiledTileset): ResolvedTileset {\n const tiles = new Map<number, TiledTileDefinition>()\n if (raw.tiles) {\n for (const tile of raw.tiles) {\n tiles.set(tile.id, tile)\n }\n }\n\n return {\n firstgid: raw.firstgid,\n name: raw.name,\n tilewidth: raw.tilewidth,\n tileheight: raw.tileheight,\n columns:\n raw.columns > 0\n ? raw.columns\n : raw.imagewidth && raw.tilewidth > 0\n ? Math.floor((raw.imagewidth - 2 * raw.margin + raw.spacing) / (raw.tilewidth + raw.spacing))\n : 0,\n tilecount: raw.tilecount,\n margin: raw.margin,\n spacing: raw.spacing,\n image: raw.image,\n imagewidth: raw.imagewidth,\n imageheight: raw.imageheight,\n tileoffset: raw.tileoffset ?? { x: 0, y: 0 },\n objectalignment: raw.objectalignment ?? 'unspecified',\n tilerendersize: raw.tilerendersize ?? 'tile',\n fillmode: raw.fillmode ?? 'stretch',\n tiles,\n properties: raw.properties ?? [],\n transformations: raw.transformations,\n grid: raw.grid,\n wangsets: raw.wangsets,\n terrains: raw.terrains\n }\n}\n\n// ─── Find tileset for GID ────────────────────────────────────────────────────\n\nfunction findTilesetIndex(gid: number, tilesets: ResolvedTileset[]): number {\n for (let i = tilesets.length - 1; i >= 0; i--) {\n const ts = tilesets[i]\n if (ts && ts.firstgid <= gid) {\n return i\n }\n }\n return 0\n}\n\n// ─── Resolve tile data ───────────────────────────────────────────────────────\n\nfunction resolveGids(rawGids: number[], tilesets: ResolvedTileset[]): (ResolvedTile | null)[] {\n const result: (ResolvedTile | null)[] = new Array(rawGids.length)\n\n for (let i = 0; i < rawGids.length; i++) {\n const rawGid = rawGids[i]\n if (rawGid === undefined || rawGid === 0) {\n result[i] = null\n continue\n }\n\n const decoded = decodeGid(rawGid)\n if (!decoded) {\n result[i] = null\n continue\n }\n\n const tsIdx = findTilesetIndex(decoded.gid, tilesets)\n const ts = tilesets[tsIdx]\n if (ts) {\n decoded.tilesetIndex = tsIdx\n decoded.localId = decoded.gid - ts.firstgid\n }\n result[i] = decoded\n }\n\n return result\n}\n\n// ─── Layer defaults ──────────────────────────────────────────────────────────\n\nfunction layerDefaults(layer: TiledLayer) {\n return {\n id: layer.id,\n name: layer.name,\n opacity: layer.opacity,\n visible: layer.visible,\n offsetx: layer.offsetx ?? 0,\n offsety: layer.offsety ?? 0,\n parallaxx: layer.parallaxx ?? 1,\n parallaxy: layer.parallaxy ?? 1,\n tintcolor: layer.tintcolor,\n properties: layer.properties ?? []\n }\n}\n\n// ─── Resolve layers (sync) ──────────────────────────────────────────────────\n\nfunction resolveLayer(layer: TiledLayer, tilesets: ResolvedTileset[]): ResolvedLayer {\n switch (layer.type) {\n case 'tilelayer': {\n const hasChunks = layer.chunks && layer.chunks.length > 0\n\n if (hasChunks) {\n const resolvedChunks = resolveChunksSync(\n layer.chunks!,\n layer.encoding,\n layer.compression,\n tilesets\n )\n return {\n type: 'tilelayer',\n ...layerDefaults(layer),\n width: layer.width ?? 0,\n height: layer.height ?? 0,\n infinite: true,\n tiles: [],\n chunks: resolvedChunks\n } satisfies ResolvedTileLayer\n }\n\n const rawGids = decodeLayerData(layer.data ?? [], layer.encoding, layer.compression)\n const tiles = resolveGids(rawGids, tilesets)\n return {\n type: 'tilelayer',\n ...layerDefaults(layer),\n width: layer.width ?? 0,\n height: layer.height ?? 0,\n infinite: false,\n tiles\n } satisfies ResolvedTileLayer\n }\n\n case 'imagelayer':\n return {\n type: 'imagelayer',\n ...layerDefaults(layer),\n image: layer.image ?? '',\n imagewidth: layer.imagewidth,\n imageheight: layer.imageheight,\n repeatx: layer.repeatx ?? false,\n repeaty: layer.repeaty ?? false,\n transparentcolor: layer.transparentcolor\n } satisfies ResolvedImageLayer\n\n case 'objectgroup':\n return {\n type: 'objectgroup',\n ...layerDefaults(layer),\n draworder: (layer.draworder ?? 'topdown') as TiledDrawOrder,\n objects: layer.objects ?? []\n } satisfies ResolvedObjectLayer\n\n case 'group':\n return {\n type: 'group',\n ...layerDefaults(layer),\n layers: (layer.layers ?? []).map(l => resolveLayer(l, tilesets))\n } satisfies ResolvedGroupLayer\n }\n}\n\n// ─── Resolve layers (async — needed for compressed data) ─────────────────────\n\nasync function resolveLayerAsync(\n layer: TiledLayer,\n tilesets: ResolvedTileset[]\n): Promise<ResolvedLayer> {\n switch (layer.type) {\n case 'tilelayer': {\n const hasChunks = layer.chunks && layer.chunks.length > 0\n\n if (hasChunks) {\n const resolvedChunks = await resolveChunksAsync(\n layer.chunks!,\n layer.encoding,\n layer.compression,\n tilesets\n )\n return {\n type: 'tilelayer',\n ...layerDefaults(layer),\n width: layer.width ?? 0,\n height: layer.height ?? 0,\n infinite: true,\n tiles: [],\n chunks: resolvedChunks\n } satisfies ResolvedTileLayer\n }\n\n const rawGids = await decodeLayerDataAsync(\n layer.data ?? [],\n layer.encoding,\n layer.compression\n )\n const tiles = resolveGids(rawGids, tilesets)\n return {\n type: 'tilelayer',\n ...layerDefaults(layer),\n width: layer.width ?? 0,\n height: layer.height ?? 0,\n infinite: false,\n tiles\n } satisfies ResolvedTileLayer\n }\n\n case 'imagelayer':\n return {\n type: 'imagelayer',\n ...layerDefaults(layer),\n image: layer.image ?? '',\n imagewidth: layer.imagewidth,\n imageheight: layer.imageheight,\n repeatx: layer.repeatx ?? false,\n repeaty: layer.repeaty ?? false,\n transparentcolor: layer.transparentcolor\n } satisfies ResolvedImageLayer\n\n case 'objectgroup':\n return {\n type: 'objectgroup',\n ...layerDefaults(layer),\n draworder: (layer.draworder ?? 'topdown') as TiledDrawOrder,\n objects: layer.objects ?? []\n } satisfies ResolvedObjectLayer\n\n case 'group': {\n const resolvedChildren = await Promise.all(\n (layer.layers ?? []).map(l => resolveLayerAsync(l, tilesets))\n )\n return {\n type: 'group',\n ...layerDefaults(layer),\n layers: resolvedChildren\n } satisfies ResolvedGroupLayer\n }\n }\n}\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\nexport function parseMap(data: TiledMap, options?: ParseOptions): ResolvedMap {\n const resolvedTilesets = resolveTilesets(data.tilesets, options)\n const layers = data.layers.map(l => resolveLayer(l, resolvedTilesets))\n\n return buildResolvedMap(data, resolvedTilesets, layers)\n}\n\nexport async function parseMapAsync(data: TiledMap, options?: ParseOptions): Promise<ResolvedMap> {\n const resolvedTilesets = resolveTilesets(data.tilesets, options)\n const layers = await Promise.all(data.layers.map(l => resolveLayerAsync(l, resolvedTilesets)))\n\n return buildResolvedMap(data, resolvedTilesets, layers)\n}\n\n// ─── Chunk resolution ────────────────────────────────────────────────────────\n\nfunction resolveChunksSync(\n chunks: TiledChunk[],\n encoding: TiledLayer['encoding'],\n compression: TiledLayer['compression'],\n tilesets: ResolvedTileset[]\n): ResolvedChunk[] {\n return chunks.map(chunk => {\n const rawGids = decodeLayerData(chunk.data, encoding, compression)\n return {\n x: chunk.x,\n y: chunk.y,\n width: chunk.width,\n height: chunk.height,\n tiles: resolveGids(rawGids, tilesets)\n }\n })\n}\n\nasync function resolveChunksAsync(\n chunks: TiledChunk[],\n encoding: TiledLayer['encoding'],\n compression: TiledLayer['compression'],\n tilesets: ResolvedTileset[]\n): Promise<ResolvedChunk[]> {\n return Promise.all(\n chunks.map(async chunk => {\n const rawGids = await decodeLayerDataAsync(chunk.data, encoding, compression)\n return {\n x: chunk.x,\n y: chunk.y,\n width: chunk.width,\n height: chunk.height,\n tiles: resolveGids(rawGids, tilesets)\n }\n })\n )\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction resolveTilesets(\n raw: (TiledTileset | TiledTilesetRef)[],\n options?: ParseOptions\n): ResolvedTileset[] {\n return raw.map(ts => {\n if (isTilesetRef(ts)) {\n const external = options?.externalTilesets?.get(ts.source)\n if (!external) {\n throw new Error(\n `External tileset \"${ts.source}\" not provided. ` + 'Pass it via options.externalTilesets.'\n )\n }\n return resolveTileset({ ...external, firstgid: ts.firstgid })\n }\n return resolveTileset(ts)\n })\n}\n\nfunction buildResolvedMap(\n data: TiledMap,\n tilesets: ResolvedTileset[],\n layers: ResolvedLayer[]\n): ResolvedMap {\n return {\n orientation: data.orientation,\n renderorder: (data.renderorder ?? 'right-down') as TiledRenderOrder,\n width: data.width,\n height: data.height,\n tilewidth: data.tilewidth,\n tileheight: data.tileheight,\n infinite: data.infinite,\n backgroundcolor: data.backgroundcolor,\n hexsidelength: data.hexsidelength,\n staggeraxis: data.staggeraxis,\n staggerindex: data.staggerindex,\n parallaxoriginx: data.parallaxoriginx ?? 0,\n parallaxoriginy: data.parallaxoriginy ?? 0,\n properties: data.properties ?? [],\n tilesets,\n layers,\n version: data.version,\n tiledversion: data.tiledversion\n }\n}\n","import type {\n TiledMap,\n TiledLayer,\n TiledLayerType,\n TiledTileset,\n TiledTilesetRef,\n TiledTileDefinition,\n TiledChunk,\n TiledObject,\n TiledText,\n TiledProperty,\n TiledFrame,\n TiledTileOffset,\n TiledGrid,\n TiledTransformations,\n TiledTerrain,\n TiledWangSet,\n TiledWangColor,\n TiledWangTile,\n TiledPoint,\n TiledOrientation,\n TiledRenderOrder,\n TiledStaggerAxis,\n TiledStaggerIndex,\n TiledCompression,\n TiledEncoding,\n TiledDrawOrder,\n TiledObjectAlignment,\n TiledTileRenderSize,\n TiledFillMode,\n TiledGridOrientation,\n TiledWangSetType,\n TiledHAlign,\n TiledVAlign,\n TiledPropertyType\n} from '../types'\n\n// ─── Attribute helpers ──────────────────────────────────────────────────────\n\nfunction str(el: Element, name: string, fallback = ''): string {\n return el.getAttribute(name) ?? fallback\n}\n\nfunction int(el: Element, name: string, fallback = 0): number {\n const v = el.getAttribute(name)\n return v != null ? parseInt(v, 10) : fallback\n}\n\nfunction float(el: Element, name: string, fallback = 0): number {\n const v = el.getAttribute(name)\n return v != null ? parseFloat(v) : fallback\n}\n\nfunction bool(el: Element, name: string, fallback = false): boolean {\n const v = el.getAttribute(name)\n if (v == null) return fallback\n return v === '1' || v === 'true'\n}\n\nfunction optStr(el: Element, name: string): string | undefined {\n const v = el.getAttribute(name)\n return v != null ? v : undefined\n}\n\nfunction optInt(el: Element, name: string): number | undefined {\n const v = el.getAttribute(name)\n return v != null ? parseInt(v, 10) : undefined\n}\n\nfunction optFloat(el: Element, name: string): number | undefined {\n const v = el.getAttribute(name)\n return v != null ? parseFloat(v) : undefined\n}\n\nfunction children(el: Element, tag: string): Element[] {\n const result: Element[] = []\n for (let i = 0; i < el.children.length; i++) {\n const child = el.children[i]!\n if (child.tagName === tag) result.push(child)\n }\n return result\n}\n\nfunction child(el: Element, tag: string): Element | null {\n for (let i = 0; i < el.children.length; i++) {\n const c = el.children[i]!\n if (c.tagName === tag) return c\n }\n return null\n}\n\n// ─── Properties ─────────────────────────────────────────────────────────────\n\nfunction parseProperties(el: Element): TiledProperty[] | undefined {\n const propsEl = child(el, 'properties')\n if (!propsEl) return undefined\n\n const props: TiledProperty[] = []\n for (const pEl of children(propsEl, 'property')) {\n const type = str(pEl, 'type', 'string') as TiledPropertyType\n let value: string | number | boolean = str(pEl, 'value', '')\n // If value not in attribute, check text content (multiline strings)\n if (!pEl.hasAttribute('value')) {\n value = pEl.textContent ?? ''\n }\n if (type === 'int') value = parseInt(value as string, 10)\n else if (type === 'float') value = parseFloat(value as string)\n else if (type === 'bool') value = value === 'true'\n\n props.push({\n name: str(pEl, 'name'),\n type,\n propertytype: optStr(pEl, 'propertytype'),\n value\n })\n }\n return props.length > 0 ? props : undefined\n}\n\n// ─── Image ──────────────────────────────────────────────────────────────────\n\ninterface ImageInfo {\n image?: string\n imagewidth?: number\n imageheight?: number\n transparentcolor?: string\n}\n\nfunction parseImage(el: Element): ImageInfo {\n const imgEl = child(el, 'image')\n if (!imgEl) return {}\n return {\n image: optStr(imgEl, 'source'),\n imagewidth: optInt(imgEl, 'width'),\n imageheight: optInt(imgEl, 'height'),\n transparentcolor: optStr(imgEl, 'trans')\n }\n}\n\n// ─── Tile offset ────────────────────────────────────────────────────────────\n\nfunction parseTileOffset(el: Element): TiledTileOffset | undefined {\n const to = child(el, 'tileoffset')\n if (!to) return undefined\n return { x: int(to, 'x'), y: int(to, 'y') }\n}\n\n// ─── Grid ───────────────────────────────────────────────────────────────────\n\nfunction parseGrid(el: Element): TiledGrid | undefined {\n const g = child(el, 'grid')\n if (!g) return undefined\n return {\n orientation: str(g, 'orientation', 'orthogonal') as TiledGridOrientation,\n width: int(g, 'width'),\n height: int(g, 'height')\n }\n}\n\n// ─── Transformations ────────────────────────────────────────────────────────\n\nfunction parseTransformations(el: Element): TiledTransformations | undefined {\n const t = child(el, 'transformations')\n if (!t) return undefined\n return {\n hflip: bool(t, 'hflip'),\n vflip: bool(t, 'vflip'),\n rotate: bool(t, 'rotate'),\n preferuntransformed: bool(t, 'preferuntransformed')\n }\n}\n\n// ─── Terrain ────────────────────────────────────────────────────────────────\n\nfunction parseTerrains(el: Element): TiledTerrain[] | undefined {\n const ttEl = child(el, 'terraintypes')\n if (!ttEl) return undefined\n return children(ttEl, 'terrain').map(t => ({\n name: str(t, 'name'),\n tile: int(t, 'tile'),\n properties: parseProperties(t)\n }))\n}\n\n// ─── Wang sets ──────────────────────────────────────────────────────────────\n\nfunction parseWangSets(el: Element): TiledWangSet[] | undefined {\n const wsEl = child(el, 'wangsets')\n if (!wsEl) return undefined\n\n return children(wsEl, 'wangset').map(ws => {\n const colors: TiledWangColor[] = children(ws, 'wangcolor').map(wc => ({\n class: optStr(wc, 'class'),\n color: str(wc, 'color'),\n name: str(wc, 'name'),\n probability: float(wc, 'probability'),\n tile: int(wc, 'tile'),\n properties: parseProperties(wc)\n }))\n\n const tiles: TiledWangTile[] = children(ws, 'wangtile').map(wt => ({\n tileid: int(wt, 'tileid'),\n wangid: str(wt, 'wangid').split(',').map(Number)\n }))\n\n return {\n class: optStr(ws, 'class'),\n colors,\n name: str(ws, 'name'),\n properties: parseProperties(ws),\n tile: int(ws, 'tile'),\n type: str(ws, 'type', 'corner') as TiledWangSetType,\n wangtiles: tiles\n } satisfies TiledWangSet\n })\n}\n\n// ─── Animation ──────────────────────────────────────────────────────────────\n\nfunction parseAnimation(el: Element): TiledFrame[] | undefined {\n const animEl = child(el, 'animation')\n if (!animEl) return undefined\n return children(animEl, 'frame').map(f => ({\n tileid: int(f, 'tileid'),\n duration: int(f, 'duration')\n }))\n}\n\n// ─── Tile definitions ───────────────────────────────────────────────────────\n\nfunction parseTileDefinitions(el: Element): TiledTileDefinition[] | undefined {\n const tileEls = children(el, 'tile')\n if (tileEls.length === 0) return undefined\n\n return tileEls.map(t => {\n const img = parseImage(t)\n const terrainAttr = optStr(t, 'terrain')\n const terrain = terrainAttr\n ? terrainAttr.split(',').map(v => (v === '' ? -1 : parseInt(v, 10)))\n : undefined\n\n // Object group (collision shapes)\n const ogEl = child(t, 'objectgroup')\n const objectgroup = ogEl ? parseObjectGroup(ogEl) : undefined\n\n const def: TiledTileDefinition = {\n id: int(t, 'id'),\n type: optStr(t, 'type') ?? optStr(t, 'class'),\n probability: optFloat(t, 'probability'),\n x: optInt(t, 'x'),\n y: optInt(t, 'y'),\n width: optInt(t, 'width'),\n height: optInt(t, 'height'),\n properties: parseProperties(t),\n animation: parseAnimation(t),\n terrain,\n objectgroup,\n ...img\n }\n\n return def\n })\n}\n\n// ─── Tileset ────────────────────────────────────────────────────────────────\n\nfunction parseTileset(el: Element): TiledTileset | TiledTilesetRef {\n const source = optStr(el, 'source')\n if (source) {\n return {\n firstgid: int(el, 'firstgid'),\n source\n } satisfies TiledTilesetRef\n }\n\n const img = parseImage(el)\n const tiles = parseTileDefinitions(el)\n\n const tilewidth = int(el, 'tilewidth')\n const spacing = int(el, 'spacing')\n const margin = int(el, 'margin')\n const rawColumns = int(el, 'columns')\n const columns =\n rawColumns > 0\n ? rawColumns\n : img.imagewidth && tilewidth > 0\n ? Math.floor((img.imagewidth - 2 * margin + spacing) / (tilewidth + spacing))\n : 0\n\n return {\n backgroundcolor: optStr(el, 'backgroundcolor'),\n class: optStr(el, 'class'),\n columns,\n fillmode: optStr(el, 'fillmode') as TiledFillMode | undefined,\n firstgid: int(el, 'firstgid'),\n grid: parseGrid(el),\n margin,\n name: str(el, 'name'),\n objectalignment: optStr(el, 'objectalignment') as TiledObjectAlignment | undefined,\n properties: parseProperties(el),\n spacing,\n terrains: parseTerrains(el),\n tilecount: int(el, 'tilecount'),\n tileheight: int(el, 'tileheight'),\n tileoffset: parseTileOffset(el),\n tilerendersize: optStr(el, 'tilerendersize') as TiledTileRenderSize | undefined,\n tiles: tiles,\n tilewidth,\n transformations: parseTransformations(el),\n wangsets: parseWangSets(el),\n ...img\n } satisfies TiledTileset\n}\n\n// ─── Data / Chunks ──────────────────────────────────────────────────────────\n\nfunction parseData(dataEl: Element): {\n data?: number[] | string\n encoding?: TiledEncoding\n compression?: TiledCompression\n chunks?: TiledChunk[]\n} {\n const encoding = optStr(dataEl, 'encoding') as TiledEncoding | undefined\n const compression = optStr(dataEl, 'compression') as TiledCompression | undefined\n\n // Check for chunks (infinite maps)\n const chunkEls = children(dataEl, 'chunk')\n if (chunkEls.length > 0) {\n const chunks: TiledChunk[] = chunkEls.map(c => ({\n x: int(c, 'x'),\n y: int(c, 'y'),\n width: int(c, 'width'),\n height: int(c, 'height'),\n data: parseDataContent(c, encoding)\n }))\n return { encoding, compression, chunks }\n }\n\n return {\n data: parseDataContent(dataEl, encoding),\n encoding,\n compression\n }\n}\n\nfunction parseDataContent(el: Element, encoding: TiledEncoding | undefined): number[] | string {\n if (encoding === 'base64') {\n return (el.textContent ?? '').trim()\n }\n\n if (encoding === 'csv') {\n return (el.textContent ?? '')\n .trim()\n .split(',')\n .map(s => parseInt(s.trim(), 10))\n }\n\n // XML tile elements (no encoding)\n const tileEls = children(el, 'tile')\n return tileEls.map(t => int(t, 'gid'))\n}\n\n// ─── Objects ────────────────────────────────────────────────────────────────\n\nfunction parsePoints(pointStr: string): TiledPoint[] {\n return pointStr\n .trim()\n .split(/\\s+/)\n .map(pair => {\n const [x, y] = pair.split(',').map(Number)\n return { x: x!, y: y! }\n })\n}\n\nfunction parseTextObject(el: Element): TiledText {\n return {\n text: el.textContent ?? '',\n fontfamily: optStr(el, 'fontfamily'),\n pixelsize: optInt(el, 'pixelsize'),\n wrap: bool(el, 'wrap') ? true : undefined,\n color: optStr(el, 'color'),\n bold: bool(el, 'bold') ? true : undefined,\n italic: bool(el, 'italic') ? true : undefined,\n underline: bool(el, 'underline') ? true : undefined,\n strikeout: bool(el, 'strikeout') ? true : undefined,\n kerning: el.hasAttribute('kerning') ? bool(el, 'kerning', true) : undefined,\n halign: optStr(el, 'halign') as TiledHAlign | undefined,\n valign: optStr(el, 'valign') as TiledVAlign | undefined\n }\n}\n\nfunction parseObject(el: Element): TiledObject {\n const obj: TiledObject = {\n id: int(el, 'id'),\n name: str(el, 'name'),\n type: str(el, 'type') || str(el, 'class'),\n x: float(el, 'x'),\n y: float(el, 'y'),\n width: float(el, 'width'),\n height: float(el, 'height'),\n rotation: float(el, 'rotation'),\n visible: el.hasAttribute('visible') ? bool(el, 'visible', true) : true,\n properties: parseProperties(el)\n }\n\n const gid = optInt(el, 'gid')\n if (gid != null) obj.gid = gid\n\n const template = optStr(el, 'template')\n if (template) obj.template = template\n\n if (child(el, 'ellipse')) obj.ellipse = true\n if (child(el, 'point')) obj.point = true\n\n const polygonEl = child(el, 'polygon')\n if (polygonEl) {\n obj.polygon = parsePoints(str(polygonEl, 'points'))\n }\n\n const polylineEl = child(el, 'polyline')\n if (polylineEl) {\n obj.polyline = parsePoints(str(polylineEl, 'points'))\n }\n\n const textEl = child(el, 'text')\n if (textEl) {\n obj.text = parseTextObject(textEl)\n }\n\n return obj\n}\n\n// ─── Layers ─────────────────────────────────────────────────────────────────\n\nfunction parseLayerCommon(el: Element): Partial<TiledLayer> {\n return {\n id: int(el, 'id'),\n name: str(el, 'name'),\n class: optStr(el, 'class'),\n opacity: float(el, 'opacity', 1),\n visible: el.hasAttribute('visible') ? bool(el, 'visible', true) : true,\n tintcolor: optStr(el, 'tintcolor'),\n offsetx: optFloat(el, 'offsetx'),\n offsety: optFloat(el, 'offsety'),\n parallaxx: optFloat(el, 'parallaxx'),\n parallaxy: optFloat(el, 'parallaxy'),\n locked: el.hasAttribute('locked') ? bool(el, 'locked') : undefined,\n properties: parseProperties(el),\n x: int(el, 'x'),\n y: int(el, 'y')\n }\n}\n\nfunction parseTileLayer(el: Element): TiledLayer {\n const dataEl = child(el, 'data')\n const dataInfo = dataEl ? parseData(dataEl) : {}\n\n return {\n ...parseLayerCommon(el),\n type: 'tilelayer' as TiledLayerType,\n width: optInt(el, 'width'),\n height: optInt(el, 'height'),\n startx: optInt(el, 'startx'),\n starty: optInt(el, 'starty'),\n ...dataInfo\n } as TiledLayer\n}\n\nfunction parseObjectGroup(el: Element): TiledLayer {\n return {\n ...parseLayerCommon(el),\n type: 'objectgroup' as TiledLayerType,\n draworder: optStr(el, 'draworder') as TiledDrawOrder | undefined,\n objects: children(el, 'object').map(parseObject)\n } as TiledLayer\n}\n\nfunction parseImageLayer(el: Element): TiledLayer {\n const img = parseImage(el)\n return {\n ...parseLayerCommon(el),\n type: 'imagelayer' as TiledLayerType,\n repeatx: el.hasAttribute('repeatx') ? bool(el, 'repeatx') : undefined,\n repeaty: el.hasAttribute('repeaty') ? bool(el, 'repeaty') : undefined,\n transparentcolor: img.transparentcolor,\n image: img.image,\n imagewidth: img.imagewidth,\n imageheight: img.imageheight\n } as TiledLayer\n}\n\nfunction parseGroupLayer(el: Element): TiledLayer {\n return {\n ...parseLayerCommon(el),\n type: 'group' as TiledLayerType,\n layers: parseLayers(el)\n } as TiledLayer\n}\n\nfunction parseLayers(parentEl: Element): TiledLayer[] {\n const layers: TiledLayer[] = []\n for (let i = 0; i < parentEl.children.length; i++) {\n const el = parentEl.children[i]!\n switch (el.tagName) {\n case 'layer':\n layers.push(parseTileLayer(el))\n break\n case 'objectgroup':\n layers.push(parseObjectGroup(el))\n break\n case 'imagelayer':\n layers.push(parseImageLayer(el))\n break\n case 'group':\n layers.push(parseGroupLayer(el))\n break\n }\n }\n return layers\n}\n\n// ─── Map ────────────────────────────────────────────────────────────────────\n\nexport function parseTmx(xml: string): TiledMap {\n const parser = new DOMParser()\n const doc = parser.parseFromString(xml, 'text/xml')\n\n const errorNode = doc.querySelector('parsererror')\n if (errorNode) {\n throw new Error(`TMX XML parse error: ${errorNode.textContent}`)\n }\n\n const mapEl = doc.documentElement\n if (mapEl.tagName !== 'map') {\n throw new Error(`Expected root <map> element, got <${mapEl.tagName}>`)\n }\n\n const tilesets: (TiledTileset | TiledTilesetRef)[] = children(mapEl, 'tileset').map(parseTileset)\n\n const layers = parseLayers(mapEl)\n\n return {\n backgroundcolor: optStr(mapEl, 'backgroundcolor'),\n class: optStr(mapEl, 'class'),\n compressionlevel: optInt(mapEl, 'compressionlevel'),\n height: int(mapEl, 'height'),\n hexsidelength: optInt(mapEl, 'hexsidelength'),\n infinite: bool(mapEl, 'infinite'),\n layers,\n nextlayerid: int(mapEl, 'nextlayerid'),\n nextobjectid: int(mapEl, 'nextobjectid'),\n orientation: str(mapEl, 'orientation', 'orthogonal') as TiledOrientation,\n parallaxoriginx: optFloat(mapEl, 'parallaxoriginx'),\n parallaxoriginy: optFloat(mapEl, 'parallaxoriginy'),\n properties: parseProperties(mapEl),\n renderorder: optStr(mapEl, 'renderorder') as TiledRenderOrder | undefined,\n staggeraxis: optStr(mapEl, 'staggeraxis') as TiledStaggerAxis | undefined,\n staggerindex: optStr(mapEl, 'staggerindex') as TiledStaggerIndex | undefined,\n tiledversion: optStr(mapEl, 'tiledversion'),\n tileheight: int(mapEl, 'tileheight'),\n tilesets,\n tilewidth: int(mapEl, 'tilewidth'),\n type: 'map',\n version: str(mapEl, 'version', '1.0'),\n width: int(mapEl, 'width')\n }\n}\n\nexport function parseTsx(xml: string): TiledTileset {\n const parser = new DOMParser()\n const doc = parser.parseFromString(xml, 'text/xml')\n\n const errorNode = doc.querySelector('parsererror')\n if (errorNode) {\n throw new Error(`TSX XML parse error: ${errorNode.textContent}`)\n }\n\n const tsEl = doc.documentElement\n if (tsEl.tagName !== 'tileset') {\n throw new Error(`Expected root <tileset> element, got <${tsEl.tagName}>`)\n }\n\n const result = parseTileset(tsEl)\n if ('source' in result) {\n throw new Error('TSX file should not contain a source reference')\n }\n return result\n}\n","import { Rectangle, Texture } from 'pixi.js'\nimport type { ResolvedTileset, TiledTileDefinition } from '../types'\n\nexport class TileSetRenderer {\n readonly tileset: ResolvedTileset\n readonly baseTexture: Texture | null\n private readonly _textureCache = new Map<number, Texture>()\n\n constructor(tileset: ResolvedTileset, baseTexture: Texture | null) {\n this.tileset = tileset\n this.baseTexture = baseTexture\n }\n\n getTexture(localId: number): Texture | null {\n const cached = this._textureCache.get(localId)\n if (cached) return cached\n\n const tileDef = this.tileset.tiles.get(localId)\n\n // Image-collection tileset: each tile has its own image (loaded separately)\n if (tileDef?.image) {\n // For image-collection tilesets, textures must be supplied externally\n // via setTileTexture(). Return null here.\n return null\n }\n\n // Single-image tileset: cut sub-rectangle from baseTexture\n if (!this.baseTexture) return null\n\n const { tilewidth, tileheight, columns, margin, spacing } = this.tileset\n if (columns <= 0) return null\n\n const col = localId % columns\n const row = Math.floor(localId / columns)\n const x = margin + col * (tilewidth + spacing)\n const y = margin + row * (tileheight + spacing)\n\n const frame = new Rectangle(x, y, tilewidth, tileheight)\n const texture = new Texture({ source: this.baseTexture.source, frame })\n\n this._textureCache.set(localId, texture)\n return texture\n }\n\n setTileTexture(localId: number, texture: Texture): void {\n this._textureCache.set(localId, texture)\n }\n\n getAnimationFrames(localId: number): TiledTileDefinition['animation'] | undefined {\n return this.tileset.tiles.get(localId)?.animation\n }\n\n destroy(): void {\n for (const tex of this._textureCache.values()) {\n tex.destroy()\n }\n this._textureCache.clear()\n }\n}\n","import type { MapContext, TilePosition } from '../types'\n\nexport type { MapContext, TilePosition }\n\nexport function tileToPixel(col: number, row: number, ctx: MapContext): TilePosition {\n switch (ctx.orientation) {\n case 'orthogonal':\n return orthogonalToPixel(col, row, ctx)\n case 'isometric':\n return isometricToPixel(col, row, ctx)\n case 'staggered':\n return staggeredToPixel(col, row, ctx)\n case 'hexagonal':\n return hexagonalToPixel(col, row, ctx)\n }\n}\n\n// ─── Orthogonal ──────────────────────────────────────────────────────────────\n\nfunction orthogonalToPixel(col: number, row: number, ctx: MapContext): TilePosition {\n return {\n x: col * ctx.tilewidth,\n y: row * ctx.tileheight\n }\n}\n\n// ─── Isometric (diamond) ─────────────────────────────────────────────────────\n\nfunction isometricToPixel(col: number, row: number, ctx: MapContext): TilePosition {\n const halfW = ctx.tilewidth / 2\n const halfH = ctx.tileheight / 2\n return {\n x: (col - row) * halfW,\n y: (col + row) * halfH\n }\n}\n\n// ─── Staggered (isometric staggered) ─────────────────────────────────────────\n\nfunction staggeredToPixel(col: number, row: number, ctx: MapContext): TilePosition {\n const staggerX = ctx.staggeraxis === 'x'\n const staggerEven = ctx.staggerindex === 'even'\n\n if (staggerX) {\n const isStaggered = staggerEven ? col % 2 === 0 : col % 2 !== 0\n return {\n x: col * (ctx.tilewidth / 2),\n y: row * ctx.tileheight + (isStaggered ? ctx.tileheight / 2 : 0)\n }\n }\n\n // stagger Y (default)\n const isStaggered = staggerEven ? row % 2 === 0 : row % 2 !== 0\n return {\n x: col * ctx.tilewidth + (isStaggered ? ctx.tilewidth / 2 : 0),\n y: row * (ctx.tileheight / 2)\n }\n}\n\n// ─── Hexagonal ───────────────────────────────────────────────────────────────\n\nfunction hexagonalToPixel(col: number, row: number, ctx: MapContext): TilePosition {\n const hexSide = ctx.hexsidelength ?? 0\n const staggerX = ctx.staggeraxis === 'x'\n const staggerEven = ctx.staggerindex === 'even'\n\n if (staggerX) {\n const colWidth = (ctx.tilewidth + hexSide) / 2\n const isStaggered = staggerEven ? col % 2 === 0 : col % 2 !== 0\n return {\n x: col * colWidth,\n y: row * ctx.tileheight + (isStaggered ? ctx.tileheight / 2 : 0)\n }\n }\n\n // stagger Y (default for hex)\n const rowHeight = (ctx.tileheight + hexSide) / 2\n const isStaggered = staggerEven ? row % 2 === 0 : row % 2 !== 0\n return {\n x: col * ctx.tilewidth + (isStaggered ? ctx.tilewidth / 2 : 0),\n y: row * rowHeight\n }\n}\n","export function parseTintColor(hex: string): number {\n const clean = hex.replace('#', '')\n // #AARRGGBB → strip alpha, use RRGGBB\n if (clean.length === 8) {\n return parseInt(clean.slice(2), 16)\n }\n // #RRGGBB\n return parseInt(clean, 16)\n}\n","import { type Texture, Container, AnimatedSprite, Sprite } from 'pixi.js'\nimport type {\n ResolvedTileLayer,\n ResolvedTile,\n ResolvedChunk,\n TiledFrame,\n TiledRenderOrder\n} from '../types'\nimport type { TileSetRenderer } from './TileSetRenderer.js'\nimport { type MapContext, tileToPixel } from './tilePlacement.js'\nimport { parseTintColor } from './parseColor.js'\n\nexport class TileLayerRenderer extends Container {\n readonly layerData: ResolvedTileLayer\n\n constructor(layerData: ResolvedTileLayer, tilesets: TileSetRenderer[], ctx: MapContext) {\n super()\n\n this.layerData = layerData\n this.label = layerData.name\n this.alpha = layerData.opacity\n this.visible = layerData.visible\n this.position.set(layerData.offsetx, layerData.offsety)\n if (layerData.tintcolor) {\n this.tint = parseTintColor(layerData.tintcolor)\n }\n\n if (layerData.infinite && layerData.chunks) {\n this._buildChunks(layerData.chunks, tilesets, ctx)\n } else {\n this._buildTiles(\n layerData.tiles,\n layerData.width,\n Math.floor(layerData.tiles.length / (layerData.width || 1)),\n 0,\n 0,\n tilesets,\n ctx\n )\n }\n }\n\n private _buildChunks(\n chunks: ResolvedChunk[],\n tilesets: TileSetRenderer[],\n ctx: MapContext\n ): void {\n for (const chunk of chunks) {\n this._buildTiles(chunk.tiles, chunk.width, chunk.height, chunk.x, chunk.y, tilesets, ctx)\n }\n }\n\n private _buildTiles(\n tiles: (ResolvedTile | null)[],\n layerWidth: number,\n layerHeight: number,\n originCol: number,\n originRow: number,\n tilesets: TileSetRenderer[],\n ctx: MapContext\n ): void {\n const order = ctx.renderorder\n\n for (const [col, row] of iterateTiles(layerWidth, layerHeight, order)) {\n const i = row * layerWidth + col\n const tile = tiles[i]\n if (!tile) continue\n\n const tsRenderer = tilesets[tile.tilesetIndex]\n if (!tsRenderer) continue\n\n const pos = tileToPixel(originCol + col, originRow + row, ctx)\n const animFrames = tsRenderer.getAnimationFrames(tile.localId)\n\n if (animFrames && animFrames.length > 1) {\n const sprite = this._createAnimatedTile(tsRenderer, animFrames, tile, pos.x, pos.y)\n if (sprite) this.addChild(sprite)\n } else {\n const texture = tsRenderer.getTexture(tile.localId)\n if (!texture) continue\n\n const sprite = new Sprite(texture)\n sprite.position.set(pos.x, pos.y)\n applyFlip(sprite, tile, ctx.tilewidth)\n this.addChild(sprite)\n }\n }\n }\n\n private _createAnimatedTile(\n tsRenderer: TileSetRenderer,\n frames: TiledFrame[],\n tile: ResolvedTile,\n x: number,\n y: number\n ): AnimatedSprite | null {\n const textures: { texture: Texture; time: number }[] = []\n\n for (const frame of frames) {\n const tex = tsRenderer.getTexture(frame.tileid)\n if (!tex) return null\n textures.push({ texture: tex, time: frame.duration })\n }\n\n const sprite = new AnimatedSprite(textures)\n sprite.position.set(x, y)\n sprite.play()\n applyFlip(sprite, tile, tsRenderer.tileset.tilewidth)\n return sprite\n }\n}\n\nfunction* iterateTiles(\n width: number,\n height: number,\n order: TiledRenderOrder\n): Generator<[number, number]> {\n const rightToLeft = order === 'left-down' || order === 'left-up'\n const bottomToTop = order === 'right-up' || order === 'left-up'\n\n const rowStart = bottomToTop ? height - 1 : 0\n const rowEnd = bottomToTop ? -1 : height\n const rowStep = bottomToTop ? -1 : 1\n\n const colStart = rightToLeft ? width - 1 : 0\n const colEnd = rightToLeft ? -1 : width\n const colStep = rightToLeft ? -1 : 1\n\n for (let row = rowStart; row !== rowEnd; row += rowStep) {\n for (let col = colStart; col !== colEnd; col += colStep) {\n yield [col, row]\n }\n }\n}\n\nfunction applyFlip(sprite: Sprite, tile: ResolvedTile, tileWidth: number): void {\n if (tile.diagonalFlip) {\n sprite.rotation = Math.PI / 2\n sprite.scale.x = tile.horizontalFlip ? -1 : 1\n sprite.scale.y = tile.verticalFlip ? -1 : 1\n sprite.anchor.set(0, 1)\n sprite.position.x += tileWidth\n } else {\n if (tile.horizontalFlip) {\n sprite.scale.x = -1\n sprite.anchor.x = 1\n }\n if (tile.verticalFlip) {\n sprite.scale.y = -1\n sprite.anchor.y = 1\n }\n }\n}\n","import { type Texture, Container, Sprite, TilingSprite } from 'pixi.js'\nimport type { ResolvedImageLayer } from '../types'\nimport { parseTintColor } from './parseColor.js'\n\nexport class ImageLayerRenderer extends Container {\n readonly layerData: ResolvedImageLayer\n\n constructor(layerData: ResolvedImageLayer, texture: Texture | null) {\n super()\n\n this.layerData = layerData\n this.label = layerData.name\n this.alpha = layerData.opacity\n this.visible = layerData.visible\n this.position.set(layerData.offsetx, layerData.offsety)\n if (layerData.tintcolor) {\n this.tint = parseTintColor(layerData.tintcolor)\n }\n\n if (texture) {\n this._buildImage(texture)\n }\n }\n\n private _buildImage(texture: Texture): void {\n const { repeatx, repeaty } = this.layerData\n\n if (repeatx || repeaty) {\n const tiling = new TilingSprite({\n texture,\n width: repeatx ? texture.width * 10 : texture.width,\n height: repeaty ? texture.height * 10 : texture.height\n })\n this.addChild(tiling)\n } else {\n const sprite = new Sprite(texture)\n this.addChild(sprite)\n }\n }\n}\n","import { Container, Graphics, Sprite, Text } from 'pixi.js'\nimport type { ResolvedObjectLayer, TiledObject, TiledText, TiledPoint } from '../types'\nimport type { TileSetRenderer } from './TileSetRenderer.js'\nimport { decodeGid } from '../parser'\nimport { parseTintColor } from './parseColor.js'\n\nexport class ObjectLayerRenderer extends Container {\n readonly layerData: ResolvedObjectLayer\n\n constructor(layerData: ResolvedObjectLayer, tilesets: TileSetRenderer[]) {\n super()\n\n this.layerData = layerData\n this.label = layerData.name\n this.alpha = layerData.opacity\n this.visible = layerData.visible\n this.position.set(layerData.offsetx, layerData.offsety)\n if (layerData.tintcolor) {\n this.tint = parseTintColor(layerData.tintcolor)\n }\n\n this._buildObjects(tilesets)\n }\n\n private _buildObjects(tilesets: TileSetRenderer[]): void {\n for (const obj of this.layerData.objects) {\n const child = this._createObject(obj, tilesets)\n if (child) {\n child.label = obj.name || `object_${obj.id}`\n this.addChild(child)\n }\n }\n }\n\n private _createObject(obj: TiledObject, tilesets: TileSetRenderer[]): Container | null {\n // Tile object (has gid)\n if (obj.gid !== undefined) {\n return this._createTileObject(obj, tilesets)\n }\n\n // Text object\n if (obj.text) {\n return this._createTextObject(obj)\n }\n\n // Shape objects\n if (obj.ellipse) {\n return this._createEllipse(obj)\n }\n\n if (obj.point) {\n return this._createPoint(obj)\n }\n\n if (obj.polygon) {\n return this._createPolygon(obj, obj.polygon, true)\n }\n\n if (obj.polyline) {\n return this._createPolygon(obj, obj.polyline, false)\n }\n\n // Rectangle (default)\n if (obj.width > 0 && obj.height > 0) {\n return this._createRectangle(obj)\n }\n\n return null\n }\n\n private _createTileObject(obj: TiledObject, tilesets: TileSetRenderer[]): Sprite | null {\n if (obj.gid === undefined) return null\n\n const decoded = decodeGid(obj.gid)\n if (!decoded) return null\n\n // Find the right tileset\n for (let i = tilesets.length - 1; i >= 0; i--) {\n const ts = tilesets[i]\n if (!ts) continue\n if (ts.tileset.firstgid <= decoded.gid) {\n const localId = decoded.gid - ts.tileset.firstgid\n const texture = ts.getTexture(localId)\n if (!texture) return null\n\n const sprite = new Sprite(texture)\n sprite.position.set(obj.x, obj.y - obj.height)\n sprite.width = obj.width\n sprite.height = obj.height\n sprite.angle = obj.rotation\n sprite.visible = obj.visible\n\n if (decoded.horizontalFlip) {\n sprite.scale.x *= -1\n sprite.anchor.x = 1\n }\n if (decoded.verticalFlip) {\n sprite.scale.y *= -1\n sprite.anchor.y = 1\n }\n\n return sprite\n }\n }\n return null\n }\n\n private _createTextObject(obj: TiledObject): Container {\n const td = obj.text as TiledText\n const text = new Text({\n text: td.text,\n style: {\n fontFamily: td.fontfamily ?? 'sans-serif',\n fontSize: td.pixelsize ?? 16,\n fill: td.color ?? '#000000',\n fontWeight: td.bold ? 'bold' : 'normal',\n fontStyle: td.italic ? 'italic' : 'normal',\n wordWrap: td.wrap ?? false,\n wordWrapWidth: obj.width,\n align: td.halign ?? 'left'\n }\n })\n text.position.set(obj.x, obj.y)\n text.angle = obj.rotation\n text.visible = obj.visible\n return text\n }\n\n private _createRectangle(obj: TiledObject): Container {\n const g = new Graphics().rect(0, 0, obj.width, obj.height).stroke({ color: 0xffffff, width: 1 })\n g.position.set(obj.x, obj.y)\n g.angle = obj.rotation\n g.visible = obj.visible\n return g\n }\n\n private _createEllipse(obj: TiledObject): Container {\n const rx = obj.width / 2\n const ry = obj.height / 2\n const g = new Graphics().ellipse(rx, ry, rx, ry).stroke({ color: 0xffffff, width: 1 })\n g.position.set(obj.x, obj.y)\n g.angle = obj.rotation\n g.visible = obj.visible\n return g\n }\n\n private _createPoint(obj: TiledObject): Container {\n const g = new Graphics().circle(0, 0, 3).fill(0xffffff)\n g.position.set(obj.x, obj.y)\n g.visible = obj.visible\n return g\n }\n\n private _createPolygon(obj: TiledObject, points: TiledPoint[], closed: boolean): Container {\n const g = new Graphics()\n\n if (points.length > 0) {\n const first = points[0]!\n g.moveTo(first.x, first.y)\n for (let i = 1; i < points.length; i++) {\n const pt = points[i]!\n g.lineTo(pt.x, pt.y)\n }\n if (closed) {\n g.closePath()\n }\n g.stroke({ color: 0xffffff, width: 1 })\n }\n\n g.position.set(obj.x, obj.y)\n g.angle = obj.rotation\n g.visible = obj.visible\n return g\n }\n}\n","import { Container, type Texture } from 'pixi.js'\nimport type { ResolvedGroupLayer } from '../types'\nimport type { TileSetRenderer } from './TileSetRenderer.js'\nimport type { MapContext } from './tilePlacement.js'\nimport { createLayerRenderer } from './createLayerRenderer.js'\nimport { parseTintColor } from './parseColor.js'\n\nexport class GroupLayerRenderer extends Container {\n readonly layerData: ResolvedGroupLayer\n\n constructor(\n layerData: ResolvedGroupLayer,\n tilesets: TileSetRenderer[],\n ctx: MapContext,\n imageTextures: Map<string, Texture>\n ) {\n super()\n\n this.layerData = layerData\n this.label = layerData.name\n this.alpha = layerData.opacity\n this.visible = layerData.visible\n this.position.set(layerData.offsetx, layerData.offsety)\n if (layerData.tintcolor) {\n this.tint = parseTintColor(layerData.tintcolor)\n }\n\n for (const child of layerData.layers) {\n const renderer = createLayerRenderer(child, tilesets, ctx, imageTextures)\n if (renderer) this.addChild(renderer)\n }\n }\n}\n","import type { Container, Texture } from 'pixi.js'\nimport type { ResolvedLayer } from '../types'\nimport type { TileSetRenderer } from './TileSetRenderer.js'\nimport type { MapContext } from './tilePlacement.js'\nimport { TileLayerRenderer } from './TileLayerRenderer.js'\nimport { ImageLayerRenderer } from './ImageLayerRenderer.js'\nimport { ObjectLayerRenderer } from './ObjectLayerRenderer.js'\nimport { GroupLayerRenderer } from './GroupLayerRenderer.js'\n\nexport function createLayerRenderer(\n layer: ResolvedLayer,\n tilesets: TileSetRenderer[],\n ctx: MapContext,\n imageTextures: Map<string, Texture>\n): Container | null {\n switch (layer.type) {\n case 'tilelayer':\n return new TileLayerRenderer(layer, tilesets, ctx)\n\n case 'imagelayer': {\n const tex = layer.image ? (imageTextures.get(layer.image) ?? null) : null\n return new ImageLayerRenderer(layer, tex)\n }\n\n case 'objectgroup':\n return new ObjectLayerRenderer(layer, tilesets)\n\n case 'group':\n return new GroupLayerRenderer(layer, tilesets, ctx, imageTextures)\n }\n}\n","import { Container, Graphics } from 'pixi.js'\nimport type { ResolvedMap, TiledMapOptions, MapContext } from '../types'\nimport { TileSetRenderer } from './TileSetRenderer.js'\nimport { createLayerRenderer } from './createLayerRenderer.js'\nimport { parseTintColor } from './parseColor.js'\n\nexport class TiledMap extends Container {\n readonly mapData: ResolvedMap\n readonly tileSetRenderers: TileSetRenderer[]\n\n private _background: Graphics | null = null\n\n constructor(mapData: ResolvedMap, options?: TiledMapOptions) {\n super()\n\n this.mapData = mapData\n this.label = 'TiledMap'\n\n // Build tileset renderers\n const tilesetTextures = options?.tilesetTextures ?? new Map()\n const imageLayerTextures = options?.imageLayerTextures ?? new Map()\n const tileImageTextures = options?.tileImageTextures ?? new Map()\n\n this.tileSetRenderers = mapData.tilesets.map(ts => {\n const baseTex = ts.image ? (tilesetTextures.get(ts.image) ?? null) : null\n const renderer = new TileSetRenderer(ts, baseTex)\n\n // Supply individual tile images for image-collection tilesets\n for (const [localId, tileDef] of ts.tiles) {\n if (tileDef.image) {\n const tex = tileImageTextures.get(tileDef.image)\n if (tex) renderer.setTileTexture(localId, tex)\n }\n }\n\n return renderer\n })\n\n // Build map context for orientation-aware tile placement\n const ctx: MapContext = {\n orientation: mapData.orientation,\n renderorder: mapData.renderorder,\n tilewidth: mapData.tilewidth,\n tileheight: mapData.tileheight,\n hexsidelength: mapData.hexsidelength,\n staggeraxis: mapData.staggeraxis,\n staggerindex: mapData.staggerindex\n }\n\n // Render background\n if (mapData.backgroundcolor) {\n this._buildBackground(mapData)\n }\n\n // Render layers\n for (const layer of mapData.layers) {\n const child = createLayerRenderer(layer, this.tileSetRenderers, ctx, imageLayerTextures)\n if (child) this.addChild(child)\n }\n }\n\n get orientation() {\n return this.mapData.orientation\n }\n get mapWidth() {\n return this.mapData.width\n }\n get mapHeight() {\n return this.mapData.height\n }\n get tileWidth() {\n return this.mapData.tilewidth\n }\n get tileHeight() {\n return this.mapData.tileheight\n }\n\n getLayer(name: string): Container | undefined {\n return this.children.find(c => c.label === name) as Container | undefined\n }\n\n private _buildBackground(mapData: ResolvedMap): void {\n const color = parseTintColor(mapData.backgroundcolor!)\n const pixelWidth = mapData.width * mapData.tilewidth\n const pixelHeight = mapData.height * mapData.tileheight\n\n this._background = new Graphics().rect(0, 0, pixelWidth, pixelHeight).fill(color)\n this._background.label = 'background'\n this.addChild(this._background)\n }\n\n override destroy(options?: Parameters<Container['destroy']>[0]): void {\n for (const ts of this.tileSetRenderers) {\n ts.destroy()\n }\n super.destroy(options)\n }\n}\n","import { ExtensionType, Assets, path as pixiPath, type LoaderParser, type Texture } from 'pixi.js'\nimport type { TiledMap as TiledMapData, TiledTileset, TiledMapAsset, ResolvedLayer } from '../types'\nimport { parseMapAsync, parseTmx, parseTsx } from '../parser'\nimport { TiledMap } from './TiledMap.js'\n\nfunction isXmlExt(ext: string): boolean {\n return ext === '.tmx'\n}\n\nfunction isTsxExt(ext: string): boolean {\n return ext === '.tsx'\n}\n\nexport const tiledMapLoader: LoaderParser<TiledMapAsset> = {\n extension: {\n type: ExtensionType.LoadParser,\n name: 'tiledmap-loader'\n },\n\n id: 'tiledmap-loader',\n name: 'tiledmap-loader',\n\n test(url: string): boolean {\n const ext = pixiPath.extname(url).toLowerCase()\n return ext === '.tmx' || ext === '.tmj'\n },\n\n async load(url: string): Promise<TiledMapAsset> {\n const ext = pixiPath.extname(url).toLowerCase()\n const response = await fetch(url)\n\n let data: TiledMapData\n if (isXmlExt(ext)) {\n const xml = await response.text()\n data = parseTmx(xml)\n } else {\n data = (await response.json()) as TiledMapData\n }\n\n const basePath = pixiPath.dirname(url)\n\n // Resolve external tilesets\n const externalTilesets = new Map<string, TiledTileset>()\n for (const ts of data.tilesets) {\n if ('source' in ts && !('name' in ts)) {\n const tsUrl = pixiPath.join(basePath, ts.source)\n const tsResponse = await fetch(tsUrl)\n const tsExt = pixiPath.extname(ts.source).toLowerCase()\n let tsData: TiledTileset\n if (isTsxExt(tsExt)) {\n const tsXml = await tsResponse.text()\n tsData = parseTsx(tsXml)\n } else {\n tsData = (await tsResponse.json()) as TiledTileset\n }\n externalTilesets.set(ts.source, tsData)\n }\n }\n\n // Parse the map to resolved IR\n const mapData = await parseMapAsync(data, { externalTilesets })\n\n // Load tileset textures\n const tilesetTextures = new Map<string, Texture>()\n const imageLayerTextures = new Map<string, Texture>()\n const tileImageTextures = new Map<string, Texture>()\n\n const textureLoads: Promise<void>[] = []\n\n for (const ts of mapData.tilesets) {\n if (ts.image) {\n const imageUrl = pixiPath.join(basePath, ts.image)\n textureLoads.push(\n Assets.load<Texture>(imageUrl).then(tex => {\n tilesetTextures.set(ts.image!, tex)\n })\n )\n }\n\n // Image-collection tilesets: each tile has its own image\n for (const [_localId, tileDef] of ts.tiles) {\n if (tileDef.image) {\n const tileImgUrl = pixiPath.join(basePath, tileDef.image)\n textureLoads.push(\n Assets.load<Texture>(tileImgUrl).then(tex => {\n tileImageTextures.set(tileDef.image!, tex)\n })\n )\n }\n }\n }\n\n // Load image layer textures\n for (const layer of flattenLayers(mapData.layers)) {\n if (layer.type === 'imagelayer' && layer.image) {\n const imgUrl = pixiPath.join(basePath, layer.image)\n textureLoads.push(\n Assets.load<Texture>(imgUrl).then(tex => {\n imageLayerTextures.set(layer.image, tex)\n })\n )\n }\n }\n\n await Promise.all(textureLoads)\n\n // Build the display tree\n const container = new TiledMap(mapData, {\n tilesetTextures,\n imageLayerTextures,\n tileImageTextures\n })\n\n return { mapData, container }\n }\n}\n\nfunction flattenLayers(layers: ResolvedLayer[]): ResolvedLayer[] {\n const result: ResolvedLayer[] = []\n for (const layer of layers) {\n result.push(layer)\n if (layer.type === 'group') {\n result.push(...flattenLayers(layer.layers))\n }\n }\n return result\n}\n"]}