@drincs/pixi-vn
Version:
Pixi'VN is a npm package that provides various features for creating visual novels.
1 lines • 356 kB
Source Map (JSON)
{"version":3,"sources":["../src/classes/CanvasEvent.ts","../src/functions/StepLabelUtility.ts","../src/classes/LabelAbstract.ts","../src/classes/Label.ts","../src/classes/CloseLabel.ts","../src/decorators/LabelDecorator.ts","../src/classes/canvas/CanvasBase.ts","../src/functions/CanvasUtility.ts","../src/classes/canvas/CanvasContainer.ts","../src/functions/TextureUtility.ts","../src/decorators/EventDecorator.ts","../src/classes/canvas/CanvasSprite.ts","../src/classes/canvas/CanvasImage.ts","../src/classes/canvas/CanvasText.ts","../src/decorators/CanvasElementDecorator.ts","../src/decorators/CharacterDecorator.ts","../src/decorators/TickerDecorator.ts","../src/types/CloseType.ts","../src/classes/ChoiceMenuOption.ts","../src/functions/FlagsUtility.ts","../src/functions/DialogueUtility.ts","../src/functions/GameUtility.ts","../src/classes/ticker/TickerBase.ts","../src/classes/ticker/FadeAlphaTicker.ts","../src/functions/TickerUtility.ts","../src/classes/ticker/MoveTicker.ts","../src/classes/ticker/RotateTicker.ts","../src/classes/ticker/ZoomTicker.ts","../src/constants.ts","../src/functions/ImageUtility.ts","../src/functions/Importer.ts","../src/functions/SavesUtility.ts","../src/functions/ExportUtility.ts","../src/functions/DiffUtility.ts","../src/managers/StorageManager.ts","../src/functions/EasterEgg.ts","../src/types/ticker/TagToRemoveAfterType.ts","../src/managers/WindowManager.ts","../src/managers/StepManager.ts","../src/classes/StoredClassModel.ts","../src/classes/CharacterBaseModel.ts","../src/classes/DialogueBaseModel.ts","../src/classes/LabelJson.ts","../src/labels/TestConstant.ts","../src/labels/BaseCanvasElementTestLabel.ts","../src/labels/CanvasEventsTestLabel.ts","../src/labels/CustomTickerCanvasElementTestLabel.ts","../src/labels/ImagesAnimationsTestLabel.ts","../src/labels/MarkdownTest.ts","../src/labels/StepLabelTest.ts","../src/labels/StartLabel.ts"],"names":["Container","Sprite","tagToRemoveAfter","LabelJson","diff","index","sha1","tag","ticker","CharacterBaseModel","Assets","TextStyle","FillGradient","Texture"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAqB,cAArB,MAAoC;AAAA,EAChC,WAAc,GAAA;AAOd;AAAA;AAAA;AAAA,IAAkB,IAAA,CAAA,EAAA,GAAA,kBAAA,CAAA;AANd,IAAK,IAAA,CAAA,EAAA,GAAK,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,EAAA,CAAA;AAAA,GACzC;AAAA,EACA,EAAA,CAAG,QAA8B,QAAa,EAAA;AAAE,IAAM,MAAA,IAAI,MAAM,0DAA0D,CAAA,CAAA;AAAA,GAAE;AAKhI,EAAA;ACtBO,SAAS,YAAY,IAA0C,EAAA;AAClE,EAAA,IAAI,aAAa,IAAK,CAAA,IAAA,CAAK,QAAS,EAAA,CAAE,mBAAmB,CAAA,CAAA;AACzD,EAAA,OAAO,WAAW,QAAS,EAAA,CAAA;AAC/B,CAAA;AAOO,SAAS,mBAAA,CAAoB,OAAiD,KAA0D,EAAA;AAC3I,EAAA,OAAO,KAAU,KAAA,KAAA,CAAA;AACrB,CAAA;;;ACdA,IAA8B,gBAA9B,MAA4E;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxE,WAAA,CAAY,IAAiB,KAA4B,EAAA;AACrD,IAAA,IAAA,CAAK,GAAM,GAAA,EAAA,CAAA;AACX,IAAA,IAAA,CAAK,eAAe,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,WAAA,CAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,UAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,aAAa,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,SAAA,CAAA;AACzB,IAAA,IAAA,CAAK,eAAe,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,WAAA,CAAA;AAAA,GAC/B;AAAA;AAAA;AAAA;AAAA,EAMA,IAAW,EAAkB,GAAA;AACzB,IAAA,OAAO,IAAK,CAAA,GAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYU,4BAA4B,aAAgE,EAAA;AAClG,IAAI,IAAA,aAAA,CAAc,WAAW,CAAG,EAAA;AAC5B,MAAO,OAAA,CAAA,CAAA;AAAA,KACX;AACA,IAAA,IAAI,GAAc,GAAA,CAAA,CAAA;AAClB,IAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAU,KAAA;AACnC,MAAA,IAAI,oBAAoB,IAAM,EAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAC,CAAG,EAAA;AAC9C,QAAM,GAAA,GAAA,KAAA,CAAA;AAAA,OACV;AAAA,KACH,CAAA,CAAA;AACD,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,WAAwF,GAAA;AAC/F,IAAO,OAAA,CAAO,WAAmB,KAAkB,KAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/C,MAAA,IAAI,KAAK,WAAa,EAAA;AAClB,QAAM,MAAA,IAAA,CAAK,WAAY,CAAA,SAAA,EAAW,KAAK,CAAA,CAAA;AAAA,OAC3C;AACA,MAAA,IAAI,KAAK,YAAc,EAAA;AACnB,QAAA,OAAO,MAAM,IAAA,CAAK,YAAa,CAAA,SAAA,EAAW,KAAK,CAAA,CAAA;AAAA,OACnD;AAAA,KACJ,CAAA,CAAA;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,UAAuF,GAAA;AAC9F,IAAA,OAAO,IAAK,CAAA,WAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,SAAsF,GAAA;AAC7F,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GAChB;AAAA,EAGA,IAAW,WAAkC,GAAA;AACzC,IAAA,OAAO,IAAK,CAAA,YAAA,CAAA;AAAA,GAChB;AACJ,CAAA,CAAA;;;AC5DqB,IAAA,KAAA,GAArB,cAAsD,aAA2B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM7E,WAAA,CAAY,EAAiB,EAAA,KAAA,EAAwD,KAA8B,EAAA;AAC/G,IAAA,KAAA,CAAM,IAAI,KAAK,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAMA,IAAW,KAA4B,GAAA;AACnC,IAAI,IAAA,OAAO,IAAK,CAAA,MAAA,KAAW,UAAY,EAAA;AACnC,MAAA,OAAO,KAAK,MAAO,EAAA,CAAA;AAAA,KACvB;AACA,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;AAAA,GAChB;AACJ,EAAA;;;AChDO,IAAM,cAAiB,GAAA,oBAAA,CAAA;AAKf,SAAR,cAAkD,WAAsB,EAAA;AAC3E,EAAA,OAAO,IAAI,KAAA,CAAS,cAAgB,EAAA,EAAI,EAAA;AAAA,IACpC,WAAA;AAAA,GACH,CAAA,CAAA;AACL,CAAA;;;ACLO,IAAM,mBAA+F,EAAC,CAAA;AAUtG,SAAS,QAAA,CAA4B,EAAiB,EAAA,KAAA,EAAwD,KAA6D,EAAA;AAC9K,EAAI,IAAA,gBAAA,CAAiB,EAAE,CAAG,EAAA;AACtB,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAmB,gBAAA,EAAA,EAAE,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,GAC/E;AACA,EAAA,IAAI,KAAQ,GAAA,IAAI,KAAS,CAAA,EAAA,EAAI,OAAO,KAAK,CAAA,CAAA;AACzC,EAAA,gBAAA,CAAiB,EAAE,CAAI,GAAA,KAAA,CAAA;AACvB,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAOO,SAAS,aAA6B,EAAgC,EAAA;AACzE,EAAI,IAAA,KAAA,GAAQ,iBAAiB,EAAE,CAAA,CAAA;AAC/B,EAAA,IAAI,CAAC,KAAO,EAAA;AACR,IAAQ,OAAA,CAAA,KAAA,CAAM,CAAmB,gBAAA,EAAA,EAAE,CAAY,UAAA,CAAA,CAAA,CAAA;AAC/C,IAAA,OAAA;AAAA,GACJ;AACA,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAMO,SAAS,UAAwC,KAAU,EAAA;AAC9D,EAAiB,gBAAA,CAAA,KAAA,CAAM,EAAE,CAAI,GAAA,KAAA,CAAA;AACjC,CAAA;AClBqB,IAAA,UAAA,GAArB,cAAsE,SAAU,CAAA;AAAA,EAAhF,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAYI;AAAA;AAAA;AAAA,IAAmB,IAAA,CAAA,QAAA,GAAA,2BAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA,EARnB,IAAI,MAAa,GAAA;AAAE,IAAM,MAAA,IAAI,MAAM,2DAA2D,CAAA,CAAA;AAAA,GAAE;AAAA;AAAA;AAAA;AAAA,EAIhG,IAAI,OAAO,MAAY,EAAA;AAAE,IAAM,MAAA,IAAI,MAAM,2DAA2D,CAAA,CAAA;AAAA,GAAE;AAK1G,EAAA;;;AC9BO,SAAS,iBAAiB,OAAkC,EAAA;AAC/D,EAAA,IAAI,gBAAgB,OAAQ,CAAA,MAAA,CAAA;AAC5B,EAAA,IAAI,aAAgC,GAAA;AAAA,IAChC,OAAO,aAAc,CAAA,KAAA;AAAA,GACzB,CAAA;AACA,EAAO,OAAA,aAAA,CAAA;AACX,CAAA;AAOO,SAAS,oBACZ,OACiB,EAAA;AACjB,EAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AACnB,CAAA;AAOO,SAAS,oBACZ,MACC,EAAA;AACD,EAAI,IAAA,OAAA,GAAU,4BAAgC,CAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AAC7D,EAAA,IAAI,OAAS,EAAA;AACT,IAAA,OAAA,CAAQ,MAAS,GAAA,MAAA,CAAA;AAAA,GAEhB,MAAA;AACD,IAAA,MAAM,IAAI,KAAA,CAAM,wBAA2B,GAAA,MAAA,CAAO,WAAW,uBAAuB,CAAA,CAAA;AAAA,GACxF;AAEA,EAAO,OAAA,OAAA,CAAA;AACX,CAAA;;;ACzCO,IAAM,mBAAsB,GAAA,iBAAA,CAAA;AAmBd,IAAA,eAAA,GAArB,cAA6CA,SAAwD,CAAA;AAAA,EACjG,YAAY,OAA4B,EAAA;AACpC,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAGjB,IAAmB,IAAA,CAAA,QAAA,GAAA,mBAAA,CAAA;AAFf,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,WAAY,CAAA,SAAA,CAAU,QAAY,IAAA,mBAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,IAAI,MAAiC,GAAA;AACjC,IAAI,IAAA,MAAA,GAAS,mBAAmB,IAAI,CAAA,CAAA;AACpC,IAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,CAAS,KAAA,KAAA;AAC3B,MAAA,MAAA,CAAO,QAAS,CAAA,IAAA,CAAK,mBAAoB,CAAA,KAAwB,CAAC,CAAA,CAAA;AAAA,KACrE,CAAA,CAAA;AACD,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AAAA,EACA,IAAI,OAAO,KAA+B,EAAA;AACtC,IAAA,kBAAA,CAAmB,MAAM,KAAK,CAAA,CAAA;AAC9B,IAAM,KAAA,CAAA,QAAA,CAAS,QAAQ,CAAS,KAAA,KAAA;AAC5B,MAAK,IAAA,CAAA,QAAA,CAAS,mBAAoB,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAC3C,CAAA,CAAA;AAAA,GACL;AACJ,EAAA;AAEO,SAAS,mBAAwC,OAAoC,EAAA;AACxF,EAAA,IAAI,SAAY,GAAA,iBAAA,CAAA;AAChB,EAAI,IAAA,OAAA,CAAQ,cAAe,CAAA,UAAU,CAAG,EAAA;AACpC,IAAA,SAAA,GAAa,OAAgB,CAAA,QAAA,CAAA;AAAA,GACjC;AACA,EAAO,OAAA;AAAA,IACH,QAAU,EAAA,SAAA;AAAA,IACV,UAAU,EAAC;AAAA,IAEX,OAAO,OAAQ,CAAA,KAAA;AAAA,IACf,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAEhB,eAAe,OAAQ,CAAA,aAAA;AAAA,IACvB,WAAW,OAAQ,CAAA,SAAA;AAAA,IACnB,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,OAAO,OAAQ,CAAA,KAAA;AAAA,IACf,OAAO,OAAQ,CAAA,KAAA;AAAA,IACf,YAAY,OAAQ,CAAA,UAAA;AAAA,IACpB,UAAU,OAAQ,CAAA,QAAA;AAAA,IAClB,KAAA,EAAO,EAAE,CAAG,EAAA,OAAA,CAAQ,MAAM,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,KAAA,CAAM,CAAE,EAAA;AAAA,IAChD,KAAA,EAAO,EAAE,CAAG,EAAA,OAAA,CAAQ,MAAM,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,KAAA,CAAM,CAAE,EAAA;AAAA,IAChD,QAAA,EAAU,EAAE,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,QAAA,CAAS,CAAE,EAAA;AAAA,IACzD,IAAA,EAAM,EAAE,CAAG,EAAA,OAAA,CAAQ,KAAK,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,IAAA,CAAK,CAAE,EAAA;AAAA,IAC7C,SAAS,OAAQ,CAAA,OAAA;AAAA,IACjB,GAAG,OAAQ,CAAA,CAAA;AAAA,IACX,GAAG,OAAQ,CAAA,CAAA;AAAA,IACX,YAAY,OAAQ,CAAA,UAAA;AAAA,IAEpB,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAChB,WAAW,OAAQ,CAAA,SAAA;AAAA,IACnB,aAAa,OAAQ,CAAA,WAAA;AAAA,IACrB,qBAAqB,OAAQ,CAAA,mBAAA;AAAA,IAC7B,SAAS,OAAQ,CAAA,OAAA;AAAA,GACrB,CAAA;AACJ,CAAA;AAEO,SAAS,kBAAA,CAAwC,SAAwB,MAA0B,EAAA;AACtG,EAAO,MAAA,CAAA,aAAA,KAAkB,OAAQ,CAAA,aAAA,GAAgB,MAAO,CAAA,aAAA,CAAA,CAAA;AACxD,EAAO,MAAA,CAAA,SAAA,KAAc,OAAQ,CAAA,SAAA,GAAY,MAAO,CAAA,SAAA,CAAA,CAAA;AAChD,EAAO,MAAA,CAAA,IAAA,KAAS,OAAQ,CAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA,CAAA;AACtC,EAAO,MAAA,CAAA,KAAA,KAAU,OAAQ,CAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,KAAA,KAAU,OAAQ,CAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,UAAA,KAAe,OAAQ,CAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAA,CAAA;AAClD,EAAO,MAAA,CAAA,QAAA,KAAa,OAAQ,CAAA,QAAA,GAAW,MAAO,CAAA,QAAA,CAAA,CAAA;AAC9C,EAAA,IAAI,OAAO,KAAO,EAAA;AACd,IAAI,IAAA,OAAO,MAAO,CAAA,KAAA,KAAU,QAAU,EAAA;AAClC,MAAA,OAAA,CAAQ,KAAM,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAAA,KAE3C,MAAA;AACD,MAAA,OAAA,CAAQ,MAAM,GAAI,CAAA,MAAA,CAAO,MAAM,CAAG,EAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAAA,KACpD;AAAA,GACJ;AACA,EAAA,IAAI,OAAO,KAAO,EAAA;AACd,IAAI,IAAA,OAAO,MAAO,CAAA,KAAA,KAAU,QAAU,EAAA;AAClC,MAAA,OAAA,CAAQ,KAAM,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAAA,KAE3C,MAAA;AACD,MAAA,OAAA,CAAQ,MAAM,GAAI,CAAA,MAAA,CAAO,MAAM,CAAG,EAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAAA,KACpD;AAAA,GACJ;AACA,EAAO,MAAA,CAAA,QAAA,IAAa,QAAQ,QAAS,CAAA,GAAA,CAAI,OAAO,QAAS,CAAA,CAAA,EAAG,MAAO,CAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAC7E,EAAO,MAAA,CAAA,IAAA,IAAS,QAAQ,IAAK,CAAA,GAAA,CAAI,OAAO,IAAK,CAAA,CAAA,EAAG,MAAO,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC7D,EAAO,MAAA,CAAA,OAAA,KAAY,OAAQ,CAAA,OAAA,GAAU,MAAO,CAAA,OAAA,CAAA,CAAA;AAC5C,EAAO,MAAA,CAAA,CAAA,KAAM,OAAQ,CAAA,CAAA,GAAI,MAAO,CAAA,CAAA,CAAA,CAAA;AAChC,EAAO,MAAA,CAAA,CAAA,KAAM,OAAQ,CAAA,CAAA,GAAI,MAAO,CAAA,CAAA,CAAA,CAAA;AAChC,EAAO,MAAA,CAAA,UAAA,KAAe,OAAQ,CAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAA,CAAA;AAElD,EAAO,MAAA,CAAA,MAAA,KAAW,OAAQ,CAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAA,CAAA;AAC1C,EAAO,MAAA,CAAA,SAAA,KAAc,OAAQ,CAAA,SAAA,GAAY,MAAO,CAAA,SAAA,CAAA,CAAA;AAChD,EAAO,MAAA,CAAA,WAAA,KAAgB,OAAQ,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAA,CAAA;AACpD,EAAO,MAAA,CAAA,mBAAA,KAAwB,OAAQ,CAAA,mBAAA,GAAsB,MAAO,CAAA,mBAAA,CAAA,CAAA;AACpE,EAAO,MAAA,CAAA,OAAA,KAAY,OAAQ,CAAA,OAAA,GAAU,MAAO,CAAA,OAAA,CAAA,CAAA;AAI5C,EAAO,MAAA,CAAA,KAAA,KAAU,OAAQ,CAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,MAAA,KAAW,OAAQ,CAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAA,CAAA;AAC9C,CAAA;ACnHA,SAAsB,WAAW,QAA2C,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACxE,IAAA,IAAI,MAAO,CAAA,KAAA,CAAM,GAAI,CAAA,QAAQ,CAAG,EAAA;AAC5B,MAAO,OAAA,MAAA,CAAO,IAAI,QAAQ,CAAA,CAAA;AAAA,KAC9B;AACA,IAAA,OAAO,OAAO,IAAK,CAAA,QAAQ,CACtB,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA;AACf,MAAA,IAAI,CAAC,OAAS,EAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,+BAA+B,QAAQ,CAAA,CAAA;AACrD,QAAA,OAAA;AAAA,OACJ;AAEA,MAAI,IAAA,EAAE,mBAAmB,OAAU,CAAA,EAAA;AAC/B,QAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,QAAQ,CAAA,CAAA;AACvD,QAAA,OAAA;AAAA,OACJ;AAEA,MAAO,OAAA,OAAA,CAAA;AAAA,KACV,CAAA,CACA,KAAM,CAAA,CAAC,CAAM,KAAA;AACV,MAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,CAAC,CAAA,CAAA;AAChD,MAAA,OAAA;AAAA,KACH,CAAA,CAAA;AAAA,GACT,CAAA,CAAA;AAAA,CAAA;AAEA,SAAS,0BAAA,CAA2B,MAA8D,QAA2B,EAAA;AACzH,EAAI,IAAA,EAAE,gBAAgB,MAAS,CAAA,EAAA;AAC3B,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAEA,EAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,2BAAA,EAA8B,QAAQ,CAAA,6DAAA,CAAA,EAAiE,IAAI,CAAA,CAAA;AACxH,EAAO,OAAA,KAAA,CAAA,CAAA;AACX,CAAA;AAEO,SAAS,aAAa,KAAoC,EAAA;AAC7D,EAAO,OAAA;AAAA,IACH,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,IAAM,EAAA,0BAAA,CAA2B,KAAM,CAAA,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrD,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,UAAU,KAAM,CAAA,QAAA;AAAA,IAChB,WAAW,KAAM,CAAA,SAAA;AAAA,IACjB,aAAa,KAAM,CAAA,WAAA;AAAA,IACnB,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,eAAe,KAAM,CAAA,aAAA;AAAA,IACrB,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,MAAQ,EAAA,0BAAA,CAA2B,KAAM,CAAA,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACzD,cAAc,KAAM,CAAA,YAAA;AAAA,IACpB,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,YAAY,KAAM,CAAA,UAAA;AAAA,IAClB,UAAU,KAAM,CAAA,QAAA;AAAA,IAChB,eAAe,KAAM,CAAA,aAAA;AAAA,GACzB,CAAA;AACJ,CAAA;;;ACtDO,IAAM,mBAAsF,EAAC,CAAA;AAQrF,SAAR,eAAgC,IAAoB,EAAA;AACvD,EAAA,OAAO,SAAU,MAAiC,EAAA;AAC9C,IAAA,IAAI,CAAC,IAAM,EAAA;AACP,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA;AAAA,KAClB;AACA,IAAI,IAAA,gBAAA,CAAiB,IAAI,CAAG,EAAA;AACxB,MAAQ,OAAA,CAAA,IAAA,CAAK,CAAmB,gBAAA,EAAA,IAAI,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,KACjF;AACA,IAAA,MAAA,CAAO,UAAU,EAAK,GAAA,IAAA,CAAA;AACtB,IAAA,gBAAA,CAAiB,IAAI,CAAI,GAAA,MAAA,CAAA;AAAA,GAC7B,CAAA;AACJ,CAAA;AAOO,SAAS,iBAA0D,OAAqC,EAAA;AAC3G,EAAI,IAAA;AACA,IAAI,IAAA,SAAA,GAAY,iBAAiB,OAAO,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,SAAW,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAmB,gBAAA,EAAA,OAAO,CAAY,UAAA,CAAA,CAAA,CAAA;AACpD,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,IAAI,SAAU,EAAA,CAAA;AACd,IAAO,OAAA,SAAA,CAAA;AAAA,WAEJ,CAAG,EAAA;AACN,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,oCAAA,EAAuC,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AACjE,IAAA,OAAA;AAAA,GACJ;AACJ,CAAA;AAOO,SAAS,qBAAuD,OAAqC,EAAA;AACxG,EAAI,IAAA;AACA,IAAI,IAAA,SAAA,GAAY,iBAAiB,OAAO,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,SAAW,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAmB,gBAAA,EAAA,OAAO,CAAY,UAAA,CAAA,CAAA,CAAA;AACpD,MAAA,OAAA;AAAA,KACJ;AACA,IAAI,IAAA,KAAA,GAAQ,IAAI,SAAU,EAAA,CAAA;AAC1B,IAAO,OAAA,KAAA,CAAA;AAAA,WAEJ,CAAG,EAAA;AACN,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,oCAAA,EAAuC,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AACjE,IAAA,OAAA;AAAA,GACJ;AACJ,CAAA;;;ACzDO,IAAM,gBAAmB,GAAA,cAAA,CAAA;AAqBX,IAAA,YAAA,GAArB,MAAqB,aAAA,SAA6F,MAA2D,CAAA;AAAA,EACzK,YAAY,OAAmC,EAAA;AAC3C,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAGjB,IAAmB,IAAA,CAAA,QAAA,GAAA,gBAAA,CAAA;AAOnB,IAAA,IAAA,CAAQ,YAA2D,EAAC,CAAA;AAThE,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,WAAY,CAAA,SAAA,CAAU,QAAY,IAAA,gBAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,IAAI,MAAuC,GAAA;AACvC,IAAA,OAAO,gBAAgB,IAAI,CAAA,CAAA;AAAA,GAC/B;AAAA,EACA,IAAI,OAAO,KAA4B,EAAA;AACnC,IAAA,eAAA,CAAgB,MAAM,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA,EAEA,IAAI,QAAW,GAAA;AACX,IAAA,OAAO,IAAK,CAAA,SAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BA,OAAA,CAAoF,OAAU,UAAgB,EAAA;AAC1G,IAAI,IAAA,EAAA,GAAK,WAAW,SAAU,CAAA,EAAA,CAAA;AAC9B,IAAI,IAAA,QAAA,GAAW,qBAAqB,EAAE,CAAA,CAAA;AACtC,IAAK,IAAA,CAAA,SAAA,CAAU,KAAK,CAAI,GAAA,EAAA,CAAA;AACxB,IAAA,IAAI,QAAU,EAAA;AACV,MAAM,KAAA,CAAA,EAAA,CAAG,OAAO,MAAM;AAClB,QAAC,QAAA,CAA0C,EAAG,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAAA,OAC5D,CAAA,CAAA;AAAA,KACL;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASS,EAAA,CAAwG,KAAU,EAAA,EAAA,EAAuO,OAAqB,EAAA;AACnX,IAAA,OAAO,KAAM,CAAA,EAAA,CAAG,KAAO,EAAA,EAAA,EAAI,OAAO,CAAA,CAAA;AAAA,GACtC;AAAA,EACA,OAAgB,IAAK,CAAA,MAAA,EAAqC,SAAwC,EAAA;AAC9F,IAAA,IAAI,MAAS,GAAA,MAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAC1C,IAAI,IAAA,QAAA,GAAW,IAAI,aAAa,EAAA,CAAA;AAChC,IAAA,QAAA,CAAS,UAAU,MAAO,CAAA,OAAA,CAAA;AAC1B,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AACJ,EAAA;AAEO,SAAS,gBAA6C,OAAqD,EAAA;AAC9G,EAAI,IAAA,IAAA,GAAO,mBAAmB,OAAO,CAAA,CAAA;AACrC,EAAA,OAAO,iCACA,IADA,CAAA,EAAA;AAAA,IAEH,UAAU,OAAQ,CAAA,QAAA;AAAA,IAClB,YAAA,EAAc,gBAAkB,CAAA,OAAA,CAAgB,OAAO,CAAA;AAAA,IACvD,MAAA,EAAQ,EAAE,CAAG,EAAA,OAAA,CAAQ,OAAO,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,MAAA,CAAO,CAAE,EAAA;AAAA,IACnD,aAAa,OAAQ,CAAA,WAAA;AAAA,IACrB,UAAU,OAAQ,CAAA,QAAA;AAAA,GACtB,CAAA,CAAA;AACJ,CAAA;AAEO,SAAS,eAAA,CAAwD,SAA4B,MAAgB,EAAA;AAChH,EAAA,kBAAA,CAAmB,SAAS,MAAM,CAAA,CAAA;AAClC,EAAA,UAAA,CAAW,OAAO,YAAa,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA;AACpD,IAAA,IAAI,OAAS,EAAA;AACT,MAAA,OAAA,CAAQ,OAAU,GAAA,OAAA,CAAA;AAAA,KACtB;AAAA,GACH,CAAA,CAAA;AACD,EAAA,IAAI,OAAO,MAAQ,EAAA;AACf,IAAI,IAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QAAU,EAAA;AACnC,MAAA,OAAA,CAAQ,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,MAAA,EAAQ,OAAO,MAAM,CAAA,CAAA;AAAA,KAE9C,MAAA;AACD,MAAA,OAAA,CAAQ,OAAO,GAAI,CAAA,MAAA,CAAO,OAAO,CAAG,EAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAAA,KACvD;AAAA,GACJ;AACA,EAAO,MAAA,CAAA,WAAA,KAAgB,OAAQ,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAA,CAAA;AACpD,EAAS,KAAA,IAAA,KAAA,IAAS,OAAO,QAAU,EAAA;AAC/B,IAAI,IAAA,EAAA,GAAK,MAAO,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC9B,IAAI,IAAA,QAAA,GAAW,iBAAiB,EAAE,CAAA,CAAA;AAClC,IAAA,IAAI,QAAU,EAAA;AACV,MAAQ,OAAA,CAAA,OAAA,CAAQ,OAAO,QAAQ,CAAA,CAAA;AAAA,KACnC;AAAA,GACJ;AACJ,CAAA;;;ACzIO,IAAM,eAAkB,GAAA,aAAA,CAAA;AA0BV,IAAA,WAAA,GAArB,MAAqB,YAAA,SAAoB,YAAiC,CAAA;AAAA,EAEtE,WAAA,CAAY,SAA+C,SAAoB,EAAA;AAC3E,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAFjB,IAAmB,IAAA,CAAA,QAAA,GAAA,eAAA,CAAA;AAkBnB,IAAoB,IAAA,CAAA,SAAA,GAAA,EAAA,CAAA;AAfhB,IAAA,IAAI,SAAW,EAAA;AACX,MAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAAA,KACrB;AAAA,GACJ;AAAA,EACA,IAAa,MAA6B,GAAA;AACtC,IAAO,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACA,eAAgB,CAAA,IAAI,CADpB,CAAA,EAAA;AAAA,MAEH,UAAU,IAAK,CAAA,QAAA;AAAA,MACf,WAAW,IAAK,CAAA,SAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GACJ;AAAA,EACA,IAAa,OAAO,MAA4B,EAAA;AAC5C,IAAA,eAAA,CAAgB,MAAM,MAAM,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,YAAY,MAAO,CAAA,SAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,OAAgB,IAAK,CAAA,MAAA,EAAqC,SAAqB,EAAA;AAC3E,IAAA,IAAI,MAASC,GAAAA,MAAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAC1C,IAAI,IAAA,QAAA,GAAW,IAAI,YAAY,EAAA,CAAA;AAC/B,IAAA,QAAA,CAAS,UAAU,MAAO,CAAA,OAAA,CAAA;AAC1B,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMM,KAAK,KAAgB,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACvB,MAAA,IAAI,CAAC,KAAO,EAAA;AACR,QAAA,KAAA,GAAQ,IAAK,CAAA,SAAA,CAAA;AAAA,OACjB;AACA,MAAA,OAAO,WAAW,IAAK,CAAA,SAAS,CAC3B,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA;AACf,QAAA,IAAI,OAAS,EAAA;AACT,UAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AAAA,SACnB;AAAA,OACH,CAAA,CACA,KAAM,CAAA,CAAC,CAAM,KAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,2CAA2C,CAAC,CAAA,CAAA;AAAA,OAC7D,CAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAAA,GAAA;AACJ,EAAA;ACnEO,IAAM,cAAiB,GAAA,YAAA,CAAA;AAYT,IAAA,UAAA,GAArB,cAAwC,IAA8C,CAAA;AAAA,EAClF,YAAY,OAAuB,EAAA;AAC/B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAGjB,IAAmB,IAAA,CAAA,QAAA,GAAA,cAAA,CAAA;AAOnB,IAAA,IAAA,CAAQ,YAA2D,EAAC,CAAA;AAThE,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,WAAY,CAAA,SAAA,CAAU,QAAY,IAAA,cAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,IAAI,MAA4B,GAAA;AAC5B,IAAA,OAAO,cAAc,IAAI,CAAA,CAAA;AAAA,GAC7B;AAAA,EACA,IAAI,OAAO,KAA0B,EAAA;AACjC,IAAA,aAAA,CAAc,MAAM,KAAK,CAAA,CAAA;AAAA,GAC7B;AAAA,EAEA,IAAI,QAAW,GAAA;AACX,IAAA,OAAO,IAAK,CAAA,SAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BA,OAAA,CAAoF,OAAU,UAAgB,EAAA;AAC1G,IAAI,IAAA,EAAA,GAAK,WAAW,SAAU,CAAA,EAAA,CAAA;AAC9B,IAAI,IAAA,QAAA,GAAW,qBAAqB,EAAE,CAAA,CAAA;AACtC,IAAK,IAAA,CAAA,SAAA,CAAU,KAAK,CAAI,GAAA,EAAA,CAAA;AACxB,IAAA,IAAI,QAAU,EAAA;AACV,MAAM,KAAA,CAAA,EAAA,CAAG,OAAO,MAAM;AAClB,QAAC,QAAA,CAA0C,EAAG,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAAA,OAC5D,CAAA,CAAA;AAAA,KACL;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASS,EAAA,CAAwG,KAAU,EAAA,EAAA,EAAuO,OAAqB,EAAA;AACnX,IAAA,OAAO,KAAM,CAAA,EAAA,CAAG,KAAO,EAAA,EAAA,EAAI,OAAO,CAAA,CAAA;AAAA,GACtC;AACJ,EAAA;AAEO,SAAS,cAAoC,OAA4C,EAAA;AAC5F,EAAI,IAAA,IAAA,GAAO,mBAAmB,OAAO,CAAA,CAAA;AACrC,EAAA,OAAO,iCACA,IADA,CAAA,EAAA;AAAA,IAEH,UAAU,OAAQ,CAAA,QAAA;AAAA,IAClB,MAAA,EAAQ,EAAE,CAAG,EAAA,OAAA,CAAQ,OAAO,CAAG,EAAA,CAAA,EAAG,OAAQ,CAAA,MAAA,CAAO,CAAE,EAAA;AAAA,IACnD,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,YAAY,OAAQ,CAAA,UAAA;AAAA,IACpB,KAAA,EAAO,YAAa,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjC,aAAa,OAAQ,CAAA,WAAA;AAAA,IACrB,UAAU,OAAQ,CAAA,QAAA;AAAA,GACtB,CAAA,CAAA;AACJ,CAAA;AAEO,SAAS,aAAA,CAAc,SAAqB,MAA2B,EAAA;AAC1E,EAAA,kBAAA,CAAmB,SAAS,MAAM,CAAA,CAAA;AAClC,EAAA,IAAI,OAAO,MAAQ,EAAA;AACf,IAAI,IAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QAAU,EAAA;AACnC,MAAA,OAAA,CAAQ,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,MAAA,EAAQ,OAAO,MAAM,CAAA,CAAA;AAAA,KAE9C,MAAA;AACD,MAAA,OAAA,CAAQ,OAAO,GAAI,CAAA,MAAA,CAAO,OAAO,CAAG,EAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAAA,KACvD;AAAA,GACJ;AACA,EAAO,MAAA,CAAA,IAAA,KAAS,OAAQ,CAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA,CAAA;AACtC,EAAO,MAAA,CAAA,UAAA,KAAe,OAAQ,CAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAA,CAAA;AAClD,EAAO,MAAA,CAAA,KAAA,KAAU,OAAQ,CAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,WAAA,KAAgB,OAAQ,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAA,CAAA;AACpD,EAAS,KAAA,IAAA,KAAA,IAAS,OAAO,QAAU,EAAA;AAC/B,IAAI,IAAA,EAAA,GAAK,MAAO,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC9B,IAAI,IAAA,QAAA,GAAW,iBAAiB,EAAE,CAAA,CAAA;AAClC,IAAA,IAAI,QAAU,EAAA;AACV,MAAQ,OAAA,CAAA,OAAA,CAAQ,OAA+B,QAAQ,CAAA,CAAA;AAAA,KAC3D;AAAA,GACJ;AACJ,CAAA;;;ACtHO,IAAM,0BAAoF,EAAC,CAAA;AAMnF,SAAR,uBAAwC,IAA6B,EAAA;AACxE,EAAA,OAAO,SAAU,MAAgC,EAAA;AAC7C,IAAA,IAAI,CAAC,IAAM,EAAA;AACP,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA;AAAA,KAClB;AACA,IAAI,IAAA,uBAAA,CAAwB,IAAI,CAAG,EAAA;AAC/B,MAAQ,OAAA,CAAA,IAAA,CAAK,CAA2B,wBAAA,EAAA,IAAI,CAAqB,mBAAA,CAAA,CAAA,CAAA;AAAA,KACrE;AACA,IAAA,MAAA,CAAO,UAAU,QAAW,GAAA,IAAA,CAAA;AAC5B,IAAA,uBAAA,CAAwB,IAAI,CAAI,GAAA,MAAA,CAAA;AAAA,GACpC,CAAA;AACJ,CAAA;AAkBO,SAAS,6BAAwD,QAA+C,EAAA;AACnH,EAAI,IAAA;AACA,IAAI,IAAA,SAAA,GAAY,wBAAwB,QAAQ,CAAA,CAAA;AAChD,IAAA,IAAI,CAAC,SAAW,EAAA;AACZ,MAAA,IAAI,aAAa,mBAAqB,EAAA;AAClC,QAAY,SAAA,GAAA,eAAA,CAAA;AAAA,OAChB,MAAA,IACS,aAAa,eAAiB,EAAA;AACnC,QAAY,SAAA,GAAA,WAAA,CAAA;AAAA,OAChB,MAAA,IACS,aAAa,gBAAkB,EAAA;AACpC,QAAY,SAAA,GAAA,YAAA,CAAA;AAAA,OAChB,MAAA,IACS,aAAa,cAAgB,EAAA;AAClC,QAAY,SAAA,GAAA,UAAA,CAAA;AAAA,OAChB;AAAA,KACJ;AAEA,IAAA,IAAI,CAAC,SAAW,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,CAA2B,wBAAA,EAAA,QAAQ,CAAY,UAAA,CAAA,CAAA,CAAA;AAC7D,MAAA,OAAA;AAAA,KACJ;AACA,IAAI,IAAA,aAAA,GAAgB,IAAI,SAAU,EAAA,CAAA;AAClC,IAAO,OAAA,aAAA,CAAA;AAAA,WAEJ,CAAG,EAAA;AACN,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,4CAAA,EAA+C,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAC1E,IAAA,OAAA;AAAA,GACJ;AACJ,CAAA;;;ACtEO,IAAM,uBAA6D,EAAC,CAAA;AAYpE,SAAS,cAAiE,SAAoB,EAAA;AACjG,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC1B,IAAA,SAAA,CAAU,OAAQ,CAAA,CAAA,CAAA,KAAK,aAAc,CAAA,CAAC,CAAC,CAAA,CAAA;AACvC,IAAA,OAAA;AAAA,GACJ;AACA,EAAI,IAAA,oBAAA,CAAqB,SAAU,CAAA,EAAE,CAAG,EAAA;AACpC,IAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,uBAAA,EAA0B,SAAU,CAAA,EAAE,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,GAChG;AACA,EAAqB,oBAAA,CAAA,SAAA,CAAU,EAAE,CAAI,GAAA,SAAA,CAAA;AACzC,CAAA;AAWO,SAAS,iBAA+C,EAA2B,EAAA;AACtF,EAAI,IAAA;AACA,IAAI,IAAA,SAAA,GAAY,qBAAqB,EAAE,CAAA,CAAA;AACvC,IAAA,IAAI,CAAC,SAAW,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAuB,oBAAA,EAAA,EAAE,CAAY,UAAA,CAAA,CAAA,CAAA;AACnD,MAAA,OAAA;AAAA,KACJ;AACA,IAAO,OAAA,SAAA,CAAA;AAAA,WAEJ,CAAG,EAAA;AACN,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,wCAAA,EAA2C,EAAE,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAChE,IAAA,OAAA;AAAA,GACJ;AACJ,CAAA;AAUO,SAAS,gBAAsD,GAAA;AAClE,EAAO,OAAA,MAAA,CAAO,OAAO,oBAAoB,CAAA,CAAA;AAC7C,CAAA;;;ACpDO,IAAM,oBAAiE,EAAC,CAAA;AAQhE,SAAR,gBAAiC,IAAqB,EAAA;AACzD,EAAA,OAAO,SAAU,MAAgC,EAAA;AAC7C,IAAA,IAAI,CAAC,IAAM,EAAA;AACP,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA;AAAA,KAClB;AACA,IAAI,IAAA,iBAAA,CAAkB,IAAI,CAAG,EAAA;AACzB,MAAQ,OAAA,CAAA,IAAA,CAAK,CAAoB,iBAAA,EAAA,IAAI,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,KAClF;AACA,IAAA,MAAA,CAAO,UAAU,EAAK,GAAA,IAAA,CAAA;AACtB,IAAA,iBAAA,CAAkB,IAAI,CAAI,GAAA,MAAA,CAAA;AAAA,GAC9B,CAAA;AACJ,CAAA;AAUO,SAAS,oBAAmD,CAAA,QAAA,EAAwB,IAAa,EAAA,QAAA,EAAmB,QAA2D,EAAA;AAClL,EAAI,IAAA;AACA,IAAI,IAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA,CAAA;AACvC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACT,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAoB,iBAAA,EAAA,QAAQ,CAAY,UAAA,CAAA,CAAA,CAAA;AACtD,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,OAAO,IAAI,MAAA,CAAO,IAAM,EAAA,QAAA,EAAU,QAAQ,CAAA,CAAA;AAAA,WAEvC,CAAG,EAAA;AACN,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AACnE,IAAA,OAAA;AAAA,GACJ;AACJ,CAAA;;;AChDO,IAAM,KAAmB,GAAA,QAAA;;;ACYhC,IAAqB,mBAArB,MAAmE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyD/D,WAAY,CAAA,IAAA,EAAc,KAA+B,EAAA,KAAA,EAAU,OAAyB,MAAQ,EAAA;AAPpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,KAAA,GAA2B,EAAC,CAAA;AAQxB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AACd,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAI,KAAO,EAAA;AACP,MAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAAA,KACjB;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA,EAvDA,IAAI,KAAkB,GAAA;AAClB,IAAA,IAAI,QAAQ,IAAK,CAAA,MAAA,CAAA;AACjB,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,MAAI,IAAA,GAAA,GAAM,aAAa,KAAK,CAAA,CAAA;AAC5B,MAAA,IAAI,GAAK,EAAA;AACL,QAAQ,KAAA,GAAA,GAAA,CAAA;AAAA,OAEP,MAAA;AACD,QAAQ,OAAA,CAAA,KAAA,CAAM,CAAS,MAAA,EAAA,KAAK,CAAkC,gCAAA,CAAA,CAAA,CAAA;AAC9D,QAAA,KAAA,GAAQ,aAAc,EAAA,CAAA;AAAA,OAC1B;AAAA,KACJ;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AA2CJ,EAAA;AAUO,IAAM,wBAAN,MAA+C;AAAA;AAAA;AAAA;AAAA;AAAA,EA6ClD,WAAA,CAAY,IAAc,EAAA,iBAAA,GAA6B,KAAO,EAAA;AAzC9D;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,KAAA,GAAkB,aAAc,EAAA,CAAA;AAYhC;AAAA;AAAA;AAAA,IAAkB,IAAA,CAAA,IAAA,GAAA,KAAA,CAAA;AAwBlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,KAAA,GAA2B,EAAC,CAAA;AAMxB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,iBAAoB,GAAA,iBAAA,CAAA;AAAA,GAC7B;AACJ,EAAA;;;AClIO,SAAS,OAAA,CAAQ,MAAc,KAAgB,EAAA;AAClD,EAAA,IAAI,QAAQ,kBAAmB,CAAA,WAAA,CAAsB,mBAAmB,UAAW,CAAA,kBAAkB,KAAK,EAAC,CAAA;AAC3G,EAAA,IAAI,KAAO,EAAA;AACP,IAAA,IAAI,CAAC,KAAA,CAAM,QAAS,CAAA,IAAI,CAAG,EAAA;AACvB,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AAAA,KACnB;AAAA,GACG,MAAA;AACH,IAAI,IAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC9B,IAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACZ,MAAM,KAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAAA,KACzB;AAAA,GACJ;AACA,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,kBAAA,EAAoB,KAAK,CAAA,CAAA;AAC1F,CAAA;AAOO,SAAS,QAAQ,IAAuB,EAAA;AAC3C,EAAA,IAAI,QAAQ,kBAAmB,CAAA,WAAA,CAAsB,mBAAmB,UAAW,CAAA,kBAAkB,KAAK,EAAC,CAAA;AAC3G,EAAO,OAAA,KAAA,CAAM,SAAS,IAAI,CAAA,CAAA;AAC9B,CAAA;;;ACNO,SAAS,YAAiI,KAGxG,EAAA;AACrC,EAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AACX,EAAA,IAAI,SAAgC,GAAA,KAAA,CAAA,CAAA;AACpC,EAAI,IAAA,QAAA,CAAA;AACJ,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,IAAO,IAAA,GAAA,KAAA,CAAA;AACP,IAAW,QAAA,GAAA,IAAI,iBAAkB,CAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,GAE3C,MAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,IAAA,GAAO,MAAM,IAAK,EAAA,CAAA;AAClB,IAAW,QAAA,GAAA,IAAI,iBAAkB,CAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,GACpD,MAAA,IACS,EAAE,KAAA,YAAiB,iBAAoB,CAAA,EAAA;AAC5C,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAI,CAAG,EAAA;AAC3B,MAAO,IAAA,GAAA,KAAA,CAAM,KAAK,IAAK,EAAA,CAAA;AAAA,KAEtB,MAAA;AACD,MAAA,IAAA,GAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACjB;AACA,IAAA,IAAI,MAAM,SAAW,EAAA;AACjB,MAAI,IAAA,OAAO,KAAM,CAAA,SAAA,KAAc,QAAU,EAAA;AACrC,QAAA,SAAA,GAAY,KAAM,CAAA,SAAA,CAAA;AAAA,OAEjB,MAAA;AACD,QAAA,SAAA,GAAY,MAAM,SAAU,CAAA,EAAA,CAAA;AAAA,OAChC;AAAA,KACJ;AACA,IAAW,QAAA,GAAA,IAAI,iBAAkB,CAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,GAE/C,MAAA;AACD,IAAW,QAAA,GAAA,KAAA,CAAA;AAAA,GACf;AAEA,EAAA,IAAI,OAAQ,CAAA,kBAAA,CAAmB,UAAW,CAAA,qDAAqD,CAAG,EAAA;AAC9F,IAAA,IAAI,eAAe,WAAuB,EAAA,CAAA;AAC1C,IAAA,IAAI,YAAc,EAAA;AACd,MAAA,QAAA,CAAS,OAAO,CAAG,EAAA,YAAA,CAAa,IAAI,CAAA,EAAG,SAAS,IAAI,CAAA,CAAA,CAAA;AAAA,KACxD;AACA,IAAQ,OAAA,CAAA,kBAAA,CAAmB,UAAW,CAAA,qDAAA,EAAuD,KAAK,CAAA,CAAA;AAAA,GACtG;AAEA,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,2BAAA,EAA6B,QAAwB,CAAA,CAAA;AAClH,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,sCAAA,EAAwC,gBAAgB,aAAa,CAAA,CAAA;AACtI,CAAA;AAMO,SAAS,WAA8E,GAAA;AAC1F,EAAA,OAAO,kBAAmB,CAAA,WAAA,CAA0B,kBAAmB,CAAA,UAAA,CAAW,2BAA2B,CAAA,CAAA;AACjH,CAAA;AAKO,SAAS,aAAsB,GAAA;AAClC,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,2BAAA,EAA6B,KAAS,CAAA,CAAA,CAAA;AACvG,CAAA;AAgBO,SAAS,qBAAqB,OAA2C,EAAA;AAC5E,EAAA,IAAI,KAAqC,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AAC7D,IAAA,IAAI,kBAAkB,qBAAuB,EAAA;AACzC,MAAO,OAAA;AAAA,QACH,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,IAAM,EAAA,KAAA;AAAA,QACN,mBAAmB,MAAO,CAAA,iBAAA;AAAA,OAC9B,CAAA;AAAA,KACJ;AACA,IAAA,OAAO,iCACA,MADA,CAAA,EAAA;AAAA,MAEH,KAAA,EAAO,OAAO,KAAM,CAAA,EAAA;AAAA,KACxB,CAAA,CAAA;AAAA,GACH,CAAA,CAAA;AACD,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,+BAAA,EAAiC,KAAK,CAAA,CAAA;AACnG,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,0CAAA,EAA4C,gBAAgB,aAAa,CAAA,CAAA;AAC1I,CAAA;AAMO,SAAS,oBAAqJ,GAAA;AACjK,EAAA,IAAI,CAAI,GAAA,kBAAA,CAAmB,WAAyC,CAAA,kBAAA,CAAmB,WAAW,+BAA+B,CAAA,CAAA;AACjI,EAAA,IAAI,CAAG,EAAA;AACH,IAAA,IAAI,UAAiC,EAAC,CAAA;AACtC,IAAE,CAAA,CAAA,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAU,KAAA;AACzB,MAAI,IAAA,MAAA,CAAO,SAAS,KAAO,EAAA;AACvB,QAAI,IAAA,SAAA,GAAY,cAAc,KAAK,CAAA,CAAA;AACnC,QAAA,IAAI,SAAS,IAAI,qBAAA,CAAsB,MAAO,CAAA,IAAA,EAAM,OAAO,iBAAiB,CAAA,CAAA;AAC5E,QAAA,MAAA,CAAO,KAAQ,GAAA,SAAA,CAAA;AACf,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAA;AACnB,QAAA,OAAA;AAAA,OACJ;AACA,MAAI,IAAA,KAAA,GAAQ,YAAa,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACrC,MAAA,IAAI,KAAO,EAAA;AACP,QAAA,IAAI,YAAY,IAAI,KAAA,CAAM,KAAM,CAAA,EAAA,EAAI,MAAM,KAAO,EAAA;AAAA,UAC7C,aAAa,KAAM,CAAA,WAAA;AAAA,UACnB,WAAa,EAAA,KAAA;AAAA,SAChB,CAAA,CAAA;AACD,QAAQ,OAAA,CAAA,IAAA,CAAK,IAAI,gBAAA,CAAiB,MAAO,CAAA,IAAA,EAAM,WAAW,MAAO,CAAA,KAAA,EAAO,MAAO,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OACxF;AAAA,KACH,CAAA,CAAA;AACD,IAAO,OAAA,OAAA,CAAA;AAAA,GACX;AACA,EAAO,OAAA,KAAA,CAAA,CAAA;AACX,CAAA;AAKO,SAAS,sBAA+B,GAAA;AAC3C,EAAA,kBAAA,CAAmB,WAAY,CAAA,kBAAA,CAAmB,UAAW,CAAA,+BAAA,EAAiC,KAAS,CAAA,CAAA,CAAA;AAC3G,CAAA;AAMO,SAAS,kBAA4F,GAAA;AACxG,EAAA,IAAI,OAA6B,EAAC,CAAA;AAClC,EAAgB,eAAA,CAAA,YAAA,CAAa,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC3C,IAAA,IAAI,UAAU,IAAK,CAAA,OAAA,CAAA;AACnB,IAAA,IAAI,kBAAkB,IAAK,CAAA,OAAA,CAAA;AAC3B,IAAA,IACI,KAAK,MAAS,GAAA,CAAA,IACd,IAAK,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,OACtB,IAAA,CAAC,KAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAE,CAAA,gBAAA,IACvB,KAAK,YACP,EAAA;AACE,MAAA,IAAI,UAAa,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAE,CAAA,OAAA,CAAA;AACvC,MAAA,IAAI,UAAY,EAAA;AACZ,QAAA,IAAI,UAAa,GAAA,KAAA,CAAA;AACjB,QAAA,IAAI,KAAK,eAAoB,KAAA,KAAA,CAAA,IAAa,UAAW,CAAA,MAAA,GAAS,KAAK,eAAiB,EAAA;AAChF,UAAW,UAAA,CAAA,IAAA,CAAK,eAAe,CAAA,CAAE,UAAa,GAAA,IAAA,CAAA;AAC9C,UAAa,UAAA,GAAA,IAAA,CAAA;AAAA,SACjB;AACA,QAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAE,gBAAmB,GAAA,UAAA,CAAA;AACzC,QAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAE,OAAU,GAAA,UAAA,CAAA;AAAA,OACpC;AAAA,KACJ;AACA,IAAA,IAAI,WAAW,eAAiB,EAAA;AAC5B,MAAA,IAAI,OAAiD,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,GAAI,CAAA,CAAC,MAAW,KAAA;AAClF,QAAO,OAAA;AAAA,UACH,MAAM,MAAO,CAAA,IAAA;AAAA,UACb,MAAM,MAAO,CAAA,IAAA;AAAA,UACb,UAAY,EAAA,KAAA;AAAA,SAChB,CAAA;AAAA,OACJ,CAAA,CAAA;AACA,MAAA,IAAA,CAAK,IAAK,CAAA;AAAA,QACN,OAAA;AAAA,QACA,gBAAkB,EAAA,KAAA;AAAA,QAClB,OAAA;AAAA,QACA,WAAW,IAAK,CAAA,KAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KACL;AAAA,GACH,CAAA,CAAA;AACD,EAAO,OAAA,IAAA,CAAA;AACX,CAAA;;;AClMO,SAAS,iBAAoB,GAAA;AAChC,EAAA,kBAAA,CAAmB,KAAM,EAAA,CAAA;AACzB,EAAA,iBAAA,CAAkB,KAAM,EAAA,CAAA;AACxB,EAAA,eAAA,CAAgB,KAAM,EAAA,CAAA;AAC1B,CAAA;;;ACoCA,IAAqB,aAArB,MAAwF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpF,WAAA,CAAY,IAAa,EAAA,QAAA,EAAmB,QAA4B,EAAA;AASxE;AAAA;AAAA;AAAA,IAAmB,IAAA,CAAA,EAAA,GAAA,mBAAA,CAAA;AARf,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAChB,IAAK,IAAA,CAAA,EAAA,GAAK,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,EAAA,CAAA;AAAA,GACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,EAAG,CAAA,OAAA,EAAiB,KAAc,EAAA,KAAA,EAA0B,SAAyB,EAAA;AAAE,IAAM,MAAA,IAAI,MAAM,yDAAyD,CAAA,CAAA;AAAA,GAAE;AACtK,EAAA;;;AClDqB,IAAA,eAAA,GAArB,cAA6C,UAAiC,CAAA;AAAA,EACjE,EACL,CAAA,MAAA,EACA,IACA,EAAA,IAAA,EACA,QACI,EAAA;AACJ,IAAA,IAAI,IAAO,GAAA,IAAA,CAAK,IAAS,KAAA,KAAA,CAAA,GAAY,SAAS,IAAK,CAAA,IAAA,CAAA;AACnD,IAAA,IAAI,QAAW,GAAA,IAAA,CAAK,QAAa,KAAA,KAAA,CAAA,GAAY,IAAI,IAAK,CAAA,QAAA,CAAA;AACtD,IAAI,IAAA,KAAA,GAAQ,KAAK,QAAW,GAAA,EAAA,CAAA,CAAA;AAC5B,IAAI,IAAA,KAAA,GAAQ,KAAK,KAAU,KAAA,KAAA,CAAA,GAAY,SAAS,MAAS,GAAA,CAAA,GAAI,IAAI,IAAK,CAAA,KAAA,CAAA;AACtE,IAAIC,IAAAA,iBAAAA,GAAmB,IAAK,CAAA,gBAAA,IAAoB,EAAC,CAAA;AACjD,IAAI,IAAA,OAAOA,sBAAqB,QAAU,EAAA;AACtC,MAAAA,iBAAAA,GAAmB,CAACA,iBAAgB,CAAA,CAAA;AAAA,KACxC;AACA,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC9B,MAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,KACZ;AACA,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC9B,MAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,KACZ;AACA,IACK,IAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AA7C7B,MAAA,IAAA,EAAA,CAAA;AA8CgB,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAA,IAAI,KAAK,sBAAwB,EAAA;AAC7B,QAAA,IAAI,WAAW,OAAmBD,YAAAA,MAAAA,IAAAA,CAAAA,CAAU,aAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,UAAS,OAAS,EAAA;AAC3E,UAAO,OAAA,KAAA,CAAA;AAAA,SACX;AAAA,OACJ;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACV,CAAA,CACA,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACd,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAI,IAAA,OAAA,IAAW,mBAAmBD,SAAW,EAAA;AACzC,QAAA,IAAI,IAAS,KAAA,MAAA,IAAU,OAAQ,CAAA,KAAA,GAAQ,KAAO,EAAA;AAC1C,UAAQ,OAAA,CAAA,KAAA,IAAS,QAAQ,MAAO,CAAA,SAAA,CAAA;AAAA,SAE3B,MAAA,IAAA,IAAA,KAAS,MAAU,IAAA,OAAA,CAAQ,QAAQ,KAAO,EAAA;AAC/C,UAAQ,OAAA,CAAA,KAAA,IAAS,QAAQ,MAAO,CAAA,SAAA,CAAA;AAAA,SACpC;AACA,QAAA,IAAI,IAAS,KAAA,MAAA,IAAU,OAAQ,CAAA,KAAA,IAAS,KAAO,EAAA;AAC3C,UAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA;AAChB,UAAA,iBAAA,CAAkB,aAAc,CAAA,GAAA,EAAK,IAAME,EAAAA,iBAAAA,EAAkB,QAAQ,CAAA,CAAA;AAAA,SAEhE,MAAA,IAAA,IAAA,KAAS,MAAU,IAAA,OAAA,CAAQ,SAAS,KAAO,EAAA;AAChD,UAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA;AAChB,UAAA,iBAAA,CAAkB,aAAc,CAAA,GAAA,EAAK,IAAMA,EAAAA,iBAAAA,EAAkB,QAAQ,CAAA,CAAA;AAAA,SACzE;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAAA,GACT;AACJ,EAAA;AAnDqB,eAArB,GAAA,eAAA,CAAA;AAAA,EADC,eAAgB,EAAA;AAAA,CACI,EAAA,eAAA,CAAA,CAAA;;;ACZd,SAAS,uBAAsC,CAAA,IAAA,EAAS,YAAuB,EAAA,WAAA,EAAmC,YAA0C,EAAA;AAC/J,EAAI,IAAA,KAAA,GAAQ,gBAAgB,WAAY,CAAA,KAAA,GAAQ,aAAa,WAAY,CAAA,KAAK,IAAI,WAAY,CAAA,KAAA,CAAA;AAC9F,EAAI,IAAA,IAAA,CAAK,YAAY,CAAM,KAAA,KAAA,CAAA,IACpB,CAAC,WACD,IAAA,IAAA,CAAK,YAAY,CAAA,KAAM,KAC5B,EAAA;AACE,IAAA,OAAA;AAAA,GACJ;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,YAAY,CAAA,KAAM,QAAU,EAAA;AACxC,IAAI,IAAA,WAAA,CAAY,SAAS,QAAU,EAAA;AAC/B,MAAC,KAAa,YAAY,CAAA,GAAI,qBAAqB,IAAK,CAAA,YAAY,GAAG,WAAW,CAAA,CAAA;AAAA,KACtF,MAAA,IACS,WAAY,CAAA,IAAA,KAAS,aAAe,EAAA;AACzC,MAAC,KAAa,YAAY,CAAA,GAAI,0BAA0B,IAAK,CAAA,YAAY,GAAG,WAAW,CAAA,CAAA;AAAA,KAC3F;AAAA,GAIA,MAAA,IAAA,IAAA,CAAK,YAAY,CAAA,KAAM,UACvB,OAAO,IAAA,CAAK,YAAY,CAAA,KAAM,QAC7B,IAAA,IAAA,CAAa,YAAY,CAAA,CAAE,gBAAgB,GAAG,CAAA,IAC9C,IAAa,CAAA,YAAY,CAAE,CAAA,eAAA,CAAgB,GAAG,CAAA,IAC/C,OAAQ,IAAa,CAAA,YAAY,CAAE,CAAA,CAAA,KAAM,YACzC,OAAQ,IAAA,CAAa,YAAY,CAAA,CAAE,MAAM,QAC3C,EAAA;AACE,IAAI,IAAA,WAAA,CAAY,SAAS,QAAU,EAAA;AAC/B,MAAC,IAAA,CAAa,YAAY,CAAE,CAAA,CAAA,GAAI,qBAAsB,IAAa,CAAA,YAAY,CAAE,CAAA,CAAA,EAAG,WAAW,CAAA,CAAA;AAC/F,MAAC,IAAA,CAAa,YAAY,CAAE,CAAA,CAAA,GAAI,qBAAsB,IAAa,CAAA,YAAY,CAAE,CAAA,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,KACnG,MAAA,IACS,WAAY,CAAA,IAAA,KAAS,aAAe,EAAA;AACzC,MAAC,IAAA,CAAa,YAAY,CAAE,CAAA,CAAA,GAAI,0BAA2B,IAAa,CAAA,YAAY,CAAE,CAAA,CAAA,EAAG,WAAW,CAAA,CAAA;AACpG,MAAC,IAAA,CAAa,YAAY,CAAE,CAAA,CAAA,GAAI,0BAA2B,IAAa,CAAA,YAAY,CAAE,CAAA,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,KACxG;AAAA,GACJ;AACJ,CAAA;AAEA,SAAS,oBAAA,CAAqB,MAAgB,EAAA,WAAA,EAAsC,YAAkD,EAAA;AAClI,EAAI,IAAA,KAAA,GAAQ,gBAAgB,WAAY,CAAA,KAAA,GAAQ,aAAa,WAAY,CAAA,KAAK,IAAI,WAAY,CAAA,KAAA,CAAA;AAC9F,EAAA,IAAI,MAAM,YAAe,GAAA,YAAA,CAAa,WAAY,CAAA,GAAG,IAAI,WAAY,CAAA,GAAA,CAAA;AACrE,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACrB,IAAI,IAAA,MAAA,GAAS,KAAS,IAAA,GAAA,GAAM,CAAG,EAAA;AAC3B,MAAO,OAAA,KAAA,CAAA;AAAA,KAEF,MAAA,IAAA,MAAA,GAAS,KAAS,IAAA,GAAA,GAAM,CAAG,EAAA;AAChC,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,GACJ;AACA,EAAA,OAAO,MAAS,GAAA,GAAA,CAAA;AACpB,CAAA;AAEA,SAAS,yBAAA,CAA0B,MAAgB,EAAA,WAAA,EAA2C,YAAkD,EAAA;AAC5I,EAAI,IAAA,KAAA,GAAQ,gBAAgB,WAAY,CAAA,KAAA,GAAQ,aAAa,WAAY,CAAA,KAAK,IAAI,WAAY,CAAA,KAAA,CAAA;AAC9F,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACrB,IAAA,IAAI,MAAS,GAAA,KAAA,IAAS,WAAY,CAAA,UAAA,GAAa,CAAG,EAAA;AAC9C,MAAO,OAAA,KAAA,CAAA;AAAA,KAEF,MAAA,IAAA,MAAA,GAAS,KAAS,IAAA,WAAA,CAAY,aAAa,CAAG,EAAA;AACnD,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,GACJ;AACA,EAAO,OAAA,MAAA,GAAS,SAAS,WAAY,CAAA,UAAA,CAAA;AACzC,CAAA;;;ACnDqB,IAAA,UAAA,GAArB,cAAwC,UAA4B,CAAA;AAAA,EACvD,EACL,CAAA,MAAA,EACA,IACA,EAAA,IAAA,EACA,QACI,EAAA;AACJ,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AACb,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AACb,IAAA,IAAI,KAAK,KAAO,EAAA;AACZ,MAAI,IAAA,OAAO,IAAK,CAAA,KAAA,KAAU,QAAU,EAAA;AAChC,QAAS,MAAA,GAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AACrC,QAAS,MAAA,GAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OAEpC,MAAA;AACD,QAAA,MAAA,GAAS,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACvC,QAAA,MAAA,GAAS,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,OAC3C;AAAA,KACJ;AACA,IAAA,IAAI,cAAc,IAAK,CAAA,WAAA,CAAA;AACvB,IAAIA,IAAAA,iBAAAA,GAAmB,IAAK,CAAA,gBAAA,IAAoB,EAAC,CAAA;AACjD,IAAI,IAAA,OAAOA,sBAAqB,QAAU,EAAA;AACtC,MAAAA,iBAAAA,GAAmB,CAACA,iBAAgB,CAAA,CAAA;AAAA,KACxC;AACA,IACK,IAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AA9C7B,MAAA,IAAA,EAAA,CAAA;AA+CgB,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAA,IAAI,KAAK,sBAAwB,EAAA;AAC7B,QAAA,IAAI,WAAW,OAAmBD,YAAAA,MAAAA,IAAAA,CAAAA,CAAU,aAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,UAAS,OAAS,EAAA;AAC3E,UAAO,OAAA,KAAA,CAAA;AAAA,SACX;AAAA,OACJ;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACV,CAAA,CACA,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACd,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAI,IAAA,OAAA,IAAW,mBAAmBD,SAAW,EAAA;AACzC,QAAA,IAAI,YAAa,WAAY,CAAA,CAAA,GAAI,OAAQ,CAAA,CAAA,GAAK,IAAI,CAAI,GAAA,CAAA,CAAA,CAAA;AACtD,QAAA,IAAI,aAAa,CAAG,EAAA;AAChB,UAAQ,OAAA,CAAA,CAAA,IAAK,SAAY,GAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AACzC,UAAI,IAAA,WAAA,GAAc,WAAY,CAAA,CAAA,GAAI,OAAQ,CAAA,CAAA,CAAA;AAC1C,UAAA,IAAI,YAAY,CAAK,IAAA,WAAA,GAAc,KAC/B,SAAY,GAAA,CAAA,IAAK,cAAc,CACjC,EAAA;AACE,YAAA,OAAA,CAAQ,IAAI,WAAY,CAAA,CAAA,CAAA;AAAA,WAC5B;AAAA,SACJ;AACA,QAAA,IAAI,YAAa,WAAY,CAAA,CAAA,GAAI,OAAQ,CAAA,CAAA,GAAK,IAAI,CAAI,GAAA,CAAA,CAAA,CAAA;AACtD,QAAA,IAAI,aAAa,CAAG,EAAA;AAChB,UAAQ,OAAA,CAAA,CAAA,IAAK,SAAY,GAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AACzC,UAAI,IAAA,WAAA,GAAc,WAAY,CAAA,CAAA,GAAI,OAAQ,CAAA,CAAA,CAAA;AAC1C,UAAA,IAAI,YAAY,CAAK,IAAA,WAAA,GAAc,KAC/B,SAAY,GAAA,CAAA,IAAK,cAAc,CACjC,EAAA;AACE,YAAA,OAAA,CAAQ,IAAI,WAAY,CAAA,CAAA,CAAA;AAAA,WAC5B;AAAA,SACJ;AACA,QAAA,IAAI,QAAQ,CAAK,IAAA,WAAA,CAAY,KAAK,OAAQ,CAAA,CAAA,IAAK,YAAY,CAAG,EAAA;AAC1D,UAAA,iBAAA,CAAkB,aAAc,CAAA,GAAA,EAAK,IAAME,EAAAA,iBAAAA,EAAkB,QAAQ,CAAA,CAAA;AAAA,SACzE;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AACL,IAAA,IAAI,IAAK,CAAA,gBAAA;AACL,MAAA,uBAAA,CAAwB,IAAM,EAAA,OAAA,EAAS,IAAK,CAAA,gBAAA,EAAkB,KAAK,YAAY,CAAA,CAAA;AAAA,GACvF;AAAA,EACQ,aAAa,KAAuB,EAAA;AACxC,IAAA,OAAO,KAAQ,GAAA,CAAA,CAAA;AAAA,GACnB;AACJ,EAAA;AApEqB,UAArB,GAAA,eAAA,CAAA;AAAA,EADC,eAAgB,EAAA;AAAA,CACI,EAAA,UAAA,CAAA,CAAA;ACEA,IAAA,YAAA,GAArB,cAA0C,UAA8B,CAAA;AAAA,EAC3D,EACL,CAAA,MAAA,EACA,IACA,EAAA,IAAA,EACA,QACI,EAAA;AACJ,IAAI,IAAA,KAAA,GAAQ,KAAK,YAAa,CAAA,IAAA,CAAK,UAAU,KAAY,CAAA,GAAA,CAAA,GAAI,KAAK,KAAK,CAAA,CAAA;AACvE,IAAA,IAAI,SAAY,GAAA,IAAA,CAAK,SAAc,KAAA,KAAA,CAAA,GAAY,OAAO,IAAK,CAAA,SAAA,CAAA;AAC3D,IAAIA,IAAAA,iBAAAA,GAAmB,IAAK,CAAA,gBAAA,IAAoB,EAAC,CAAA;AACjD,IAAI,IAAA,OAAOA,sBAAqB,QAAU,EAAA;AACtC,MAAAA,iBAAAA,GAAmB,CAACA,iBAAgB,CAAA,CAAA;AAAA,KACxC;AACA,IACK,IAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AArC7B,MAAA,IAAA,EAAA,CAAA;AAsCgB,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAA,IAAI,KAAK,sBAAwB,EAAA;AAC7B,QAAA,IAAI,WAAW,OAAmBD,YAAAA,MAAAA,IAAAA,CAAAA,CAAU,aAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,UAAS,OAAS,EAAA;AAC3E,UAAO,OAAA,KAAA,CAAA;AAAA,SACX;AAAA,OACJ;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACV,CAAA,CACA,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACd,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAI,IAAA,OAAA,IAAW,mBAAmBD,SAAW,EAAA;AACzC,QAAI,IAAA,SAAA;AACA,UAAQ,OAAA,CAAA,QAAA,IAAY,QAAQ,MAAO,CAAA,SAAA,CAAA;AAAA;AAEnC,UAAQ,OAAA,CAAA,QAAA,IAAY,QAAQ,MAAO,CAAA,SAAA,CAAA;AACvC,QAAA,IAAI,KAAQ,GAAA,IAAA,IAAW,EAAE,IAAA,CAAK,gBAAoB,IAAA,IAAA,CAAK,gBAAiB,CAAA,IAAA,IAAQ,QAAY,IAAA,IAAA,CAAK,gBAAiB,CAAA,GAAA,IAAO,CAAI,CAAA,EAAA;AACzH,UAAA,iBAAA,CAAkB,aAAc,CAAA,GAAA,EAAK,IAAME,EAAAA,iBAAAA,EAAkB,QAAQ,CAAA,CAAA;AAAA,SACzE;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AACL,IAAA,IAAI,IAAK,CAAA,gBAAA;AACL,MAAA,uBAAA,CAAwB,IAAM,EAAA,OAAA,EAAS,IAAK,CAAA,gBAAA,EAAkB,KAAK,YAAY,CAAA,CAAA;AAAA,GACvF;AAAA,EACQ,aAAa,KAAuB,EAAA;AACxC,IAAA,OAAO,KAAQ,GAAA,EAAA,CAAA;AAAA,GACnB;AACJ,EAAA;AAzCqB,YAArB,GAAA,eAAA,CAAA;AAAA,EADC,eAAgB,EAAA;AAAA,CACI,EAAA,YAAA,CAAA,CAAA;ACDA,IAAA,UAAA,GAArB,cAAwC,UAA4B,CAAA;AAAA,EACvD,EACL,CAAA,MAAA,EACA,IACA,EAAA,IAAA,EACA,QACI,EAAA;AACJ,IAAA,IAAI,MAAS,GAAA,GAAA,CAAA;AACb,IAAA,IAAI,MAAS,GAAA,GAAA,CAAA;AACb,IAAA,IAAI,KAAK,KAAO,EAAA;AACZ,MAAI,IAAA,OAAO,IAAK,CAAA,KAAA,KAAU,QAAU,EAAA;AAChC,QAAS,MAAA,GAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AACrC,QAAS,MAAA,GAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,OAEpC,MAAA;AACD,QAAA,MAAA,GAAS,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACvC,QAAA,MAAA,GAAS,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,OAC3C;AAAA,KACJ;AACA,IAAIA,IAAAA,iBAAAA,GAAmB,IAAK,CAAA,gBAAA,IAAoB,EAAC,CAAA;AACjD,IAAI,IAAA,OAAOA,sBAAqB,QAAU,EAAA;AACtC,MAAAA,iBAAAA,GAAmB,CAACA,iBAAgB,CAAA,CAAA;AAAA,KACxC;AACA,IAAI,IAAA,IAAA,GAAO,KAAK,IAAQ,IAAA,MAAA,CAAA;AACxB,IAAI,IAAA,MAAA,GAAS,IAAS,KAAA,MAAA,GAAS,QAAW,GAAA,CAAA,CAAA;AAC1C,IAAI,IAAA,MAAA,GAAS,IAAS,KAAA,MAAA,GAAS,QAAW,GAAA,CAAA,CAAA;AAC1C,IAAA,IAAI,KAAK,KAAO,EAAA;AACZ,MAAI,IAAA,OAAO,IAAK,CAAA,KAAA,KAAU,QAAU,EAAA;AAChC,QAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAA;AACd,QAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAA;AAAA,OAEb,MAAA;AACD,QAAA,MAAA,GAAS,KAAK,KAAM,CAAA,CAAA,CAAA;AACpB,QAAA,MAAA,GAAS,KAAK,KAAM,CAAA,CAAA,CAAA;AAAA,OACxB;AAAA,KACJ;AACA,IACK,IAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AA3D7B,MAAA,IAAA,EAAA,CAAA;AA4DgB,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAA,IAAI,KAAK,sBAAwB,EAAA;AAC7B,QAAA,IAAI,WAAW,OAAmBD,YAAAA,MAAAA,IAAAA,CAAAA,CAAU,aAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,UAAS,OAAS,EAAA;AAC3E,UAAO,OAAA,KAAA,CAAA;AAAA,SACX;AAAA,OACJ;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACV,CAAA,CACA,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACd,MAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACpD,MAAI,IAAA,OAAA,IAAW,mBAAmBD,SAAW,EAAA;AACzC,QACI,IAAA,IAAA,KAAS,WACL,OAAQ,CAAA,KAAA,CAAM,IAAI,MAAU,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MACpD,CAAA,EAAA;AACE,UAAQ,OAAA,CAAA,KAAA,CAAM,CAAK,IAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AACnC,UAAQ,OAAA,CAAA,KAAA,CAAM,CAAK,IAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AAAA,SACvC,MAAA,IAEI,IAAS,KAAA,QAAA,KACL,OAAQ,CAAA,KAAA,CAAM,IAAI,MAAU,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MACpD,CAAA,EAAA;AACE,UAAQ,OAAA,CAAA,KAAA,CAAM,CAAK,IAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AACnC,UAAQ,OAAA,CAAA,KAAA,CAAM,CAAK,IAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAA;AAAA,SACvC;AACA,QAAA,IAAI,SAAS,MAAQ,EAAA;AACjB,UAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MAAQ,EAAA;AAC1B,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAAA,WACtB;AACA,UAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MAAQ,EAAA;AAC1B,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAAA,WACtB;AACA,UAAA,IAAI,QAAQ,KAAM,CAAA,CAAA,IAAK,UAAU,OAAQ,CAAA,KAAA,CAAM,KAAK,MAAQ,EAAA;AACxD,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAClB,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAClB,YAAA,IAAA,CAAK,aAAc,CAAA,GAAA,EAAK,QAAU,EAAA,OAAA,EAASE,iBAAgB,CAAA,CAAA;AAAA,WAC/D;AAAA,SACJ,MAAA,IACS,SAAS,QAAU,EAAA;AACxB,UAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MAAQ,EAAA;AAC1B,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAAA,WACtB;AACA,UAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,GAAI,MAAQ,EAAA;AAC1B,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAAA,WACtB;AACA,UAAA,IAAI,QAAQ,KAAM,CAAA,CAAA,IAAK,UAAU,OAAQ,CAAA,KAAA,CAAM,KAAK,MAAQ,EAAA;AACxD,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAClB,YAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,CAAA;AAClB,YAAA,IAAA,CAAK,aAAc,CAAA,GAAA,EAAK,QAAU,EAAA,OAAA,EAASA,iBAAgB,CAAA,CAAA;AAAA,WAC/D;AAAA,SACJ;AACA,QAAA,IAAI,MAAS,GAAA,IAAA,IAAW,MAAS,GAAA,IAAA,IAAW,EAAE,IAAK,CAAA,gBAAA,IAAoB,IAAK,CAAA,gBAAA,CAAiB,IAAQ,IAAA,QAAA,IAAY,IAAK,CAAA,gBAAA,CAAiB,OAAO,CAAI,CAAA,EAAA;AAC9I,UAAA,IAAA,CAAK,aAAc,CAAA,GAAA,EAAK,QAAU,EAAA,OAAA,EAASA,iBAAgB,CAAA,CAAA;AAAA,SAC/D;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AACL,IAAA,IAAI,IAAK,CAAA,gBAAA;AACL,MAAA,uBAAA,CAAwB,IAAM,EAAA,OAAA,EAAS,IAAK,CAAA,gBAAA,EAAkB,KAAK,YAAY,CAAA,CAAA;AAAA,GACvF;AAAA,EACQ,aAAa,KAAuB,EAAA;AACxC,IAAA,OAAO,KAAQ,GAAA,EAAA,CAAA;AAAA,GACnB;AAAA,EAEA,aACI,CAAA,GAAA,EACA,QACA,EAAA,QAAA,EACAA,iBACI,EAAA;AACJ,IAAA,iBAAA,CAAkB,aAAc,CAAA,GAAA,EAAK,IAAMA,EAAAA,iBAAAA,EAAkB,QAAQ,CAAA,CAAA;AAAA,GACzE;AACJ,EAAA;AA7GqB,UAArB,GAAA,eAAA,CAAA;AAAA,EADC,eAAgB,EAAA;AAAA,CACI,EAAA,UAAA,CAAA,CAAA;AAgHd,IAAM,eAAA,GAAN,cAA8B,UAAW,CAAA;AAAA,EAC5C,WAAA,CAAY,KAAwB,EAAA,QAAA,EAAmB,QAA4B,EAAA;AAC/E,IAAM,KAAA,CAAA,KAAA,EAAO,UAAU,QAAQ,CAAA,CAAA;AAAA,GACnC;AAAA,EACS,aAA+D,CAAA,GAAA,EAAa,QAAkB,EAAA,OAAA,EAAYA,iBAA2C,EAAA;AAC1J,IAAI,IAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7B,MAAI,IAAA,YAAA,GAAe,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AACrC,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,YAAmB,CAAA,CAAA;AAAA,KAC/D;AACA,IAAA,KAAA,CAAM,aAAc,CAAA,GAAA,EAAK,QAAU,EAAA,OAAA,EAASA,iBAAgB,CAAA,CAAA;AAAA,GAChE;AACJ,CAAA,CAAA;;;AC/IO,IAAM,cAAiB,GAAA,QAAA,CAAA;AACvB,IAAM,MAAqB,GAAA,SAAA;AAM3B,SAAS,MAAM,QAA6B,EAAA;AAC/C,EAAO,OAAA;AAAA,IACH,IAAM,EAAA,OAAA;AAAA,IACN,QAAA;AAAA,GACJ,CAAA;AACJ,CAAA;;;ACSO,SAAS,QAAA,CAAS,KAAa,QAA+B,EAAA;AACjE,EAAI,IAAA,KAAA,GAAQ,IAAI,WAAY,EAAA,CAAA;AAC5B,EAAA,KAAA,CAAM,SAAY,GAAA,QAAA,CAAA;AAClB,EAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA,CAAA;AAC7C,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAOA,SAAsB,UAAU,YAAmE,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/F,IAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAC9B,MAAA,OAAO,CAAC,YAAY,CAAA,CAAA;AAAA,KACxB;AACA,IAAI,IAAA,QAAA,GAAsC,KAA+B,CAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAC5F,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AAC1C,MAAA,QAAA,CAAS,CAAC,CAAI,GAAA,UAAA,CAAW,YAAa,CAAA,CAAC,EAAE,SAAS,CAAA,CAAA;AAAA,KACtD;AAEA,IAAA,OAAO,QAAQ,GAAI,CAAA,QAAQ,CAAE,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA;AAC5C,MAAA,OAAO,QAAS,CAAA,GAAA,CAAI,CAAC,OAAA,EAAS,KAAU,KAAA;AACpC,QAAA,IAAI,OAAS,EAAA;AACT,UAAa,YAAA,CAAA,KAAK,EAAE,OAAU,GAAA,OAAA,CAAA;AAC9B,UAAA,OAAO,aAAa,KAAK,CAAA,CAAA;AAAA,SAC7B;AACA,QAAa,YAAA,CAAA,KAAK,EAAE,IAAK,EAAA,CAAA;AACzB,QAAA,OAAO,aAAa,KAAK,CAAA,CAAA;AAAA,OAC5B,CAAA,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACL,CAAA,CAAA;AAAA,CAAA;AAQA,SAAsB,SAAA,CAAU,KAAa,QAAwC,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACjF,IAAI,IAAA,KAAA,GAAQ,QAAS,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAClC,IAAA,MAAM,MAAM,IAAK,EAAA,CAAA;AACjB,IAAO,OAAA,KAAA,CAAA;AAAA,GACX,CAAA,CAAA;AAAA,CAAA;AAMO,SAAS,oBAAoB,GAAwB,EAAA;AACxD,EAAA,iBAAA,CAAkB,oBAAoB,GAAG,CAAA,CAAA;AAC7C,CAAA;AAaA,SAAsB,0BAAA,CAClB,IACA,EAGa,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAJb,GACA,EAAA,KAAA,EACA,KAA8F,GAAA,IAC9F,QACa,EAAA;AA5FjB,IAAA,IAAA,EAAA,CAAA;AA6FI,IAAA,IAAI,YAAmC,GAAA,KAAA,CAAA,CAAA;AACvC,IAAI,IAAA,iBAAA,CAAkB,gBAAiB,CAAA,GAAG,CAAG,EAAA;AACzC,MAAA,YAAA,GAAe,GAAM,GAAA,eAAA,CAAA;AACrB,MAAkB,iBAAA,CAAA,oBAAA,CAAqB,KAAK,YAAY,CAAA,CAAA;AAAA,KAC5D;AAEA,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,MAAgB,aAAA,GAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAAA,KAElC,MAAA;AACD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAChB,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA,CAAA;AAAA,KACzD;AACA,IAAA,IAAI,yBAAyB,WAAe,IAAA,CAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,UAAS,OAAS,EAAA;AACjF,MAAA,MAAM,cAAc,IAAK,EAAA,CAAA;AAAA,KAC7B;AACA,IAAA,aAAA,CAAc,KAAQ,GAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,MAAS,GAAA,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC1B,KAD0B,CAAA,EAAA;AAAA,MAE7B,IAAM,EAAA,MAAA;AAAA,MACN,gBAAkB,EAAA,YAAA;AAAA,MAClB,sBAAwB,EAAA,IAAA;AAAA,KAC5B,CAAA,EAAG,IAAI,QAAQ,CAAA,CAAA;AACf,IAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AACvC,IAAA,OAAA;AAAA,GACJ,CAAA,CAAA;AAAA,CAAA;AAWO,SAAS,4BACZ,CAAA,GAAA,EACA,KAA8F,GAAA,IAC9F,QACI,EAAA;AACJ,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AACzB,IAAA,GAAA,GAAM,CAAC,GAAG,CAAA,CAAA;AAAA,GACd;AACA,EAAA,IAAI,MAAS,GAAA,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC1B,KAD0B,CAAA,EAAA;AAAA,IAE7B,IAAM,EAAA,MAAA;AAAA,IACN,gBAAkB,EAAA,GAAA;AAAA,IAClB,sBAAwB,EAAA,IAAA;AAAA,GAC5B,CAAA,EAAG,IAAI,QAAQ,CAAA,CAAA;AACf,EAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAC3C,CAAA;AAYA,SAAsB,sBAAA,CAClB,IACA,EAGa,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAJb,GACA,EAAA,KAAA,EACA,KAA8F,GAAA,IAC9F,QACa,EAAA;AAnKjB,IAAA,IAAA,EAAA,CAAA;AAoKI,IAAA,IAAI,CAAC,iBAAA,CAAkB,gBAAiB,CAAA,GAAG,CAAG,EAAA;AAC1C,MAAA,OAAO,0BAA2B,CAAA,GAAA,EAAK,KAAO,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,KACjE;AAEA,IAAA,IAAI,eAAe,GAAM,GAAA,YAAA,CAAA;AACzB,IAAkB,iBAAA,CAAA,oBAAA,CAAqB,KAAK,YAAY,CAAA,CAAA;AAExD,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,MAAgB,aAAA,GAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAAA,KAElC,MAAA;AACD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAChB,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA,CAAA;AAAA,KACzD;AACA,IAAA,IAAI,yBAAyB,WAAe,IAAA,CAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,UAAS,OAAS,EAAA;AACjF,MAAA,MAAM,cAAc,IAAK,EAAA,CAAA;AAAA,KAC7B;AACA,IAAA,aAAA,CAAc,KAAQ,GAAA,CAAA,CAAA;AAEtB,IAAA,iBAAA,CAAkB,gBAAgB,YAAc,EAAA;AAAA,MAC5C,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACb,KADa,CAAA,EAAA;AAAA,QAEhB,IAAM,EAAA,MAAA;AAAA,QACN,sBAAwB,EAAA,IAAA;AAAA,OAC3B,CAAA,CAAA;AAAA,KACJ,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkB,gBAAgB,GAAK,EAAA;AAAA,MACnC,KAAA,CAAM,KAAM,CAAA,QAAA,IAAY,CAAC,CAAA;AAAA,MACzB,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACb,KADa,CAAA,EAAA;AAAA,QAEhB,IAAM,EAAA,MAAA;AAAA,QACN,sBAAwB,EAAA,IAAA;AAAA,OAC3B,CAAA,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACL,CAAA,CAAA;AAAA,CAAA;AAWO,SAAS,wBACZ,CAAA,GAAA,EACA,KAA8F,GAAA,IAC9F,QACI,EAAA;AACJ,EAAO,OAAA,4BAAA,CAA6B,GAAK,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAC5D,CAAA;AAiBA,SAAsB,MAAA,CAClB,IACA,EAGa,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAJb,KACA,KACA,EAAA,KAAA,GAAwB,EAAE,SAAW,EAAA,OAAA,IACrC,QACa,EAAA;AA9OjB,IAAA,IAAA,EAAA,CAAA;AA+OI,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,MAAgB,aAAA,GAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAAA,KAElC,MAAA;AACD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAChB,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA,CAAA;AAAA,KACzD;AACA,IAAA,IAAI,yBAAyB,WAAe,IAAA,CAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,UAAS,OAAS,EAAA;AACjF,MAAA,MAAM,cAAc,IAAK,EAAA,CAAA;AAAA,KAC7B;AAEA,IAAA,IAAI,cAAc,EAAE,CAAA,EAAG,cAAc,CAAG,EAAA,CAAA,EAAG,cAAc,CAAE,EAAA,CAAA;AAE3D,IAAI,IAAA,KAAA,CAAM,aAAa,IAAM,EAAA;AACzB,MAAc,aAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,YAAA,GAAe,aAAc,CAAA,MAAA,CAAA;AAAA,KACrE,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,MAAc,aAAA,CAAA,CAAA,GAAI,CAAE,aAAc,CAAA,MAAA,CAAA;AAAA,KACtC,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,MAAc,aAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,WAAA,GAAc,aAAc,CAAA,KAAA,CAAA;AAAA,KACpE,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,OAAS,EAAA;AACjC,MAAc,aAAA,CAAA,CAAA,GAAI,CAAE,aAAc,CAAA,KAAA,CAAA;AAAA,KACtC;AAEA,IAAA,IAAI,MAAS,GAAA,IAAI,UAAW,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACrB,KADqB,CAAA,EAAA;AAAA,MAExB,WAAA;AAAA,MACA,sBAAwB,EAAA,IAAA;AAAA,QACzB,QAAQ,CAAA,CAAA;AAEX,IAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAAA,GAC3C,CAAA,CAAA;AAAA,CAAA;AAQO,SAAS,QACZ,GACA,EAAA,KAAA,GAAwB,EAAE,SAAW,EAAA,OAAA,IACrC,QACI,EAAA;AACJ,EAAI,IAAA,aAAA,GAAgB,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AAC1D,EAAA,IAAI,CAAC,aAAe,EAAA;AAChB,IAAA,OAAA,CAAQ,KAAK,4CAA4C,CAAA,CAAA;AACzD,IAAA,OAAA;AAAA,GACJ;AAEA,EAAA,IAAI,cAAc,EAAE,CAAA,EAAG,cAAc,CAAG,EAAA,CAAA,EAAG,cAAc,CAAE,EAAA,CAAA;AAC3D,EAAI,IAAA,KAAA,CAAM,aAAa,IAAM,EAAA;AACzB,IAAY,WAAA,CAAA,CAAA,GAAI,CAAE,aAAc,CAAA,MAAA,CAAA;AAAA,GACpC,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,IAAY,WAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,YAAA,GAAe,aAAc,CAAA,MAAA,CAAA;AAAA,GACnE,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,IAAY,WAAA,CAAA,CAAA,GAAI,CAAE,aAAc,CAAA,KAAA,CAAA;AAAA,GACpC,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,OAAS,EAAA;AACjC,IAAY,WAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,WAAA,GAAc,aAAc,CAAA,KAAA,CAAA;AAAA,GAClE;AAEA,EAAA,IAAI,MAAS,GAAA,IAAI,UAAW,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACrB,KADqB,CAAA,EAAA;AAAA,IAExB,WAAA;AAAA,IACA,sBAAwB,EAAA,IAAA;AAAA,IACxB,gBAAkB,EAAA,GAAA;AAAA,MACnB,QAAQ,CAAA,CAAA;AAEX,EAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAC3C,CAAA;AASA,SAAsB,MAAA,CAClB,IACA,EAGF,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAJE,KACA,KACA,EAAA,KAAA,GAAwB,EAAE,SAAW,EAAA,OAAA,IACrC,QACF,EAAA;AAxUF,IAAA,IAAA,EAAA,CAAA;AAyUI,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,MAAA,aAAA,GAAgB,IAAI,WAAA,CAAY,EAAC,EAAG,KAAK,CAAA,CAAA;AAAA,KAExC,MAAA;AACD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAAA,KACpB;AAEA,IAAI,IAAA,SAAA,GAAY,IAAI,eAAgB,EAAA,CAAA;AACpC,IAAA,SAAA,CAAU,SAAS,aAAa,CAAA,CAAA;AAChC,IAAA,SAAA,CAAU,SAAS,iBAAkB,CAAA,YAAA,CAAA;AACrC,IAAA,SAAA,CAAU,QAAQ,iBAAkB,CAAA,WAAA,CAAA;AACpC,IAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAEjD,IAAA,IAAI,yBAAyB,WAAe,IAAA,CAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,UAAS,OAAS,EAAA;AACjF,MAAA,MAAM,cAAc,IAAK,EAAA,CAAA;AAAA,KAC7B;AAEA,IAAI,IAAA,KAAA,CAAM,aAAa,IAAM,EAAA;AACzB,MAAU,SAAA,CAAA,KAAA,CAAM,IAAI,iBAAkB,CAAA,YAAA,CAAA;AACtC,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,WAAc,GAAA,CAAA,CAAA;AACpD,MAAA,SAAA,CAAU,IAAI,iBAAkB,CAAA,YAAA,CAAA;AAChC,MAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,WAAc,GAAA,CAAA,CAAA;AAAA,KAClD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,MAAA,SAAA,CAAU,MAAM,CAAI,GAAA,CAAA,CAAA;AACpB,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,WAAc,GAAA,CAAA,CAAA;AACpD,MAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;AACd,MAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,WAAc,GAAA,CAAA,CAAA;AAAA,KAClD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,MAAU,SAAA,CAAA,KAAA,CAAM,IAAI,iBAAkB,CAAA,WAAA,CAAA;AACtC,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,YAAe,GAAA,CAAA,CAAA;AACrD,MAAA,SAAA,CAAU,IAAI,iBAAkB,CAAA,WAAA,CAAA;AAChC,MAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,YAAe,GAAA,CAAA,CAAA;AAAA,KACnD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,OAAS,EAAA;AACjC,MAAA,SAAA,CAAU,MAAM,CAAI,GAAA,CAAA,CAAA;AACpB,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,YAAe,GAAA,CAAA,CAAA;AACrD,MAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;AACd,MAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,YAAe,GAAA,CAAA,CAAA;AAAA,KACnD;AACA,IAAU,SAAA,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAErB,IAAA,IAAI,MAAS,GAAA,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC1B,KAD0B,CAAA,EAAA;AAAA,MAE7B,sBAAwB,EAAA,IAAA;AAAA,MACxB,IAAM,EAAA,MAAA;AAAA,MACN,KAAO,EAAA,CAAA;AAAA,QACR,QAAQ,CAAA,CAAA;AAEX,IAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAAA,GAC3C,CAAA,CAAA;AAAA,CAAA;AAEO,SAAS,QACZ,GACA,EAAA,KAAA,GAAwB,EAAE,SAAW,EAAA,OAAA,IACrC,QACF,EAAA;AACE,EAAI,IAAA,aAAA,GAAgB,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AAC1D,EAAA,IAAI,CAAC,aAAe,EAAA;AAChB,IAAA,OAAA,CAAQ,KAAK,4CAA4C,CAAA,CAAA;AACzD,IAAA,OAAA;AAAA,GACJ;AAEA,EAAI,IAAA,SAAA,GAAY,IAAI,eAAgB,EAAA,CAAA;AACpC,EAAA,SAAA,CAAU,SAAS,aAAa,CAAA,CAAA;AAChC,EAAA,SAAA,CAAU,SAAS,iBAAkB,CAAA,YAAA,CAAA;AACrC,EAAA,SAAA,CAAU,QAAQ,iBAAkB,CAAA,WAAA,CAAA;AACpC,EAAkB,iBAAA,CAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA,CAAA;AAEjD,EAAI,IAAA,KAAA,CAAM,aAAa,IAAM,EAAA;AACzB,IAAU,SAAA,CAAA,KAAA,CAAM,IAAI,iBAAkB,CAAA,YAAA,CAAA;AACtC,IAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,WAAc,GAAA,CAAA,CAAA;AACpD,IAAA,SAAA,CAAU,IAAI,iBAAkB,CAAA,YAAA,CAAA;AAChC,IAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,WAAc,GAAA,CAAA,CAAA;AAAA,GAClD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,IAAA,SAAA,CAAU,MAAM,CAAI,GAAA,CAAA,CAAA;AACpB,IAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,WAAc,GAAA,CAAA,CAAA;AACpD,IAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;AACd,IAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,WAAc,GAAA,CAAA,CAAA;AAAA,GAClD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,MAAQ,EAAA;AAChC,IAAU,SAAA,CAAA,KAAA,CAAM,IAAI,iBAAkB,CAAA,WAAA,CAAA;AACtC,IAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,YAAe,GAAA,CAAA,CAAA;AACrD,IAAA,SAAA,CAAU,IAAI,iBAAkB,CAAA,WAAA,CAAA;AAChC,IAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,YAAe,GAAA,CAAA,CAAA;AAAA,GACnD,MAAA,IACS,KAAM,CAAA,SAAA,IAAa,OAAS,EAAA;AACjC,IAAA,SAAA,CAAU,MAAM,CAAI,GAAA,CAAA,CAAA;AACpB,IAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,iBAAA,CAAkB,YAAe,GAAA,CAAA,CAAA;AACrD,IAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;AACd,IAAU,SAAA,CAAA,CAAA,GAAI,kBAAkB,YAAe,GAAA,CAAA,CAAA;AAAA,GACnD;AACA,EAAU,SAAA,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAErB,EAAA,IAAI,MAAS,GAAA,IAAI,eAAgB,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC1B,KAD0B,CAAA,EAAA;AAAA,IAE7B,sBAAwB,EAAA,IAAA;AAAA,IACxB,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,CAAA;AAAA,IACP,gBAAkB,EAAA,GAAA;AAAA,MACnB,QAAQ,CAAA,CAAA;AAEX,EAAkB,iBAAA,CAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAC3C,CAAA;;;ACxaO,SAAS,iBAAiB,IAA2B,EAAA;AACxD,EAAI,IAAA;AACA,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAO,IAAA,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AAAA,KAC1B;AAAA,WAEG,CAAG,EAAA;AACN,IAAQ,OAAA,CAAA,KAAA,CAAM,iDAAiD,CAAC,CAAA,CAAA;AAChE,IAAA,OAAA;AAAA,GACJ;AACA,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,IAAA,OAAA,CAAQ,MAAM,sEAAsE,CAAA,CAAA;AACpF,IAAA,OAAA;AAAA,GACJ;AACA,EAAA,IAAI,KAAK,MAAQ,EAAA;AACb,IAAA,IAAI,SAAS,IAAK,CAAA,MAAA,CAAA;AAClB,IAAA,KAAA,MAAW,WAAW,MAAQ,EAAA;AAC1B,MAAI,IAAA;AACA,QAAM,MAAA,KAAA,GAA6B,OAAO,OAAO,CAAA,CAAA;AACjD,QAAA,IAAI,KAAQ,GAAA,IAAIC,UAAU,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AACxC,QAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,eAEZ,CAAG,EAAA;AACN,QAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,oCAAA,EAAuC,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,OACrE;AAAA,KACJ;AAAA,GACJ;AACJ,CAAA;;;AC9BO,SAAS,WAAyB,GAAA;AACrC,EAAO,OAAA;AAAA,IACH,cAAgB,EAAA,cAAA;AAAA,IAChB,QAAA,EAAU,gBAAgB,MAAO,EAAA;AAAA,IACjC,WAAA,EAAa,mBAAmB,MAAO,EAAA;AAAA,IACvC,UAAA,EAAY,kBAAkB,MAAO,EAAA;AAAA,IACrC,IAAA,EAAM,OAAO,QAAS,CAAA,QAAA;AAAA,GAC1B,CAAA;AACJ,CAAA;AAkBO,SAAS,WAAc,GAAA;AAC1B,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAO,OAAA,IAAA,CAAK,UAAU,QAAQ,CAAA,CAAA;AAClC,CAAA;AAOA,SAAsB,YAAA,CAAa,MAAiB,QAAkC,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAClF,IAAM,MAAA,eAAA,CAAgB,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAC1C,IAAmB,kBAAA,CAAA,MAAA,CAAO,KAAK,WAAW,CAAA,CAAA;AAC1C,IAAkB,iBAAA,CAAA,MAAA,CAAO,KAAK,UAAU,CAAA,CAAA;AACxC,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA,CAAA;AAAA,GACtB,CAAA,CAAA;AAAA,CAAA;AA8BA,SAAsB,YAAA,CAAa,YAAoB,QAAkC,EAAA;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrF,IAAA,MAAM,YAAa,CAAA,cAAA,CAAe,UAAU,CAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,GAC3D,CAAA,CAAA;AAAA,CAAA;AAOO,SAAS,eAAe,IAAyB,EAAA;AACpD,EAAO,OAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AAC1B,CAAA;;;ACrFO,SAAS,wBAA2B,OAAe,EAAA;AACtD,EAAI,IAAA;AACA,IAAI,IAAA,aAAA,GAAgB,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAC1C,IAAO,OAAA,IAAA,CAAK,MAAM,aAAa,CAAA,CAAA;AAAA,WAE5B,CAAG,EAAA;AACN,IAAQ,OAAA,CAAA,KAAA,CAAM,+CAA+C,CAAC,CAAA,CAAA;AAC9D,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA,CAAA;AAAA,GACjE;AACJ,CAAA;;;ACXO,SAAS,sBAAA,CAAkD,MAAS,WAAuC,EAAA;AAC9G,EAAI,IAAA,MAAA,GAAS,wBAAwB,IAAI,CAAA,CAAA;AACzC,EAAY,WAAA,CAAA,OAAA,CAAQ,CAACC,KAAS,KAAA;AAC1B,IAAA,IAAI,UAAkB,GAAA,MAAA,CAAA;AACtB,IAAA,IAAIA,KAAK,CAAA,IAAA,IAAQA,KAAK,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnC,MAAAA,KAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,CAAC,MAAM,KAAU,KAAA;AAC/B,QAAA,IAAIA,MAAK,IAAQ,IAAA,KAAA,KAAUA,KAAK,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AAC7C,UAAA,IAAIA,KAAK,CAAA,IAAA,KAAS,GAAOA,IAAAA,KAAAA,CAAK,SAAS,GAAK,EAAA;AACxC,YAAW,UAAA,CAAA,IAAI,IAAIA,KAAK,CAAA,GAAA,CAAA;AAAA,WAC5B,MAAA,IACSA,KAAK,CAAA,IAAA,KAAS,GAAK,EAAA;AAExB,YAAI,IAAA,MAAA,CAAO,SAAU,CAAA,IAAI,CAAG,EAAA;AAExB,cAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,UAAU,CAAG,EAAA;AAC3B,gBAAW,UAAA,CAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAAA,eAC7B;AAAA,aACJ,MAAA,IAES,OAAO,IAAA,KAAS,QAAU,EAAA;AAE/B,cAAA,OAAO,WAAW,IAAI,CAAA,CAAA;AAAA,aAC1B;AAAA,WACJ,MAAA,IACSA,KAAK,CAAA,IAAA,KAAS,GAAK,EAAA;AACxB,YAAA,IAAIC,SAAQD,KAAK,CAAA,KAAA,CAAA;AACjB,YAAIA,IAAAA,KAAAA,CAAK,IAAK,CAAA,IAAA,KAAS,GAAK,EAAA;AAExB,cAAC,UAAW,CAAA,IAAI,CAAY,CAAA,MAAA,CAAOC,QAAO,CAAC,CAAA,CAAA;AAAA,aAC/C,MAAA,IACSD,MAAK,IAAK,CAAA,IAAA,KAAS,OAAOA,KAAK,CAAA,IAAA,CAAK,SAAS,GAAK,EAAA;AAEvD,cAAC,WAAW,IAAI,CAAA,CAAYC,MAAK,CAAA,GAAID,MAAK,IAAK,CAAA,GAAA,CAAA;AAAA,aAE1CA,MAAAA,IAAAA,KAAAA,CAAK,IAAK,CAAA,IAAA,KAAS,GAAK,EAAA;AAC7B,cAAQ,OAAA,CAAA,IAAA,CAAK,+CAA+CA,KAAI,CAAA,CAAA;AAAA,aAE/D,MAAA;AACD,cAAQ,OAAA,CAAA,IAAA,CAAK,2CAA2CA,KAAI,CAAA,CAAA;AAAA,aAChE;AAAA,WACJ;AAAA,SAEC,MAAA;AACD,UAAA,UAAA,GAAa,WAAW,IAAI,CAAA,CAAA;AAAA,SAChC;AAAA,OACH,CAAA,CAAA;AAAA,KAEA,MAAA;AACD,MAAQ,OAAA,CAAA,IAAA,CAAK,0CAA0CA,KAAI,CAAA,CAAA;AAAA,KAC/D;AAAA,GACH,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACX,CAAA;;;ACnDA,IAAqB,mBAAA,GAArB,MAAqB,mBAAmB,CAAA;AAAA,EAE5B,WAAc,GAAA;AAAA,GAAE;AAAA,EACxB,WAAkB,UAAa,GAAA;AAC3B,IAAO,OAAA;AAAA;AAAA;AAAA;AAAA,MAIH,2BAA6B,EAAA,+BAAA;AAAA;AAAA;AAAA;AAAA,MAI7B,sCAAwC,EAAA,0CAAA;AAAA;AAAA;AAAA;AAAA,MAIxC,+BAAiC,EAAA,mCAAA;AAAA;AAAA;AAAA;AAAA,MAIjC,0CAA4C,EAAA,8CAAA;AAAA;AAAA;AAAA;AAAA,MAI5C,sBAAwB,EAAA,iBAAA;AAAA;AAAA;AAAA;AAAA,MAIxB,kBAAoB,EAAA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKpB,qDAAuD,EAAA,YAAA;AAAA,KAC3D,CAAA;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,WAAY,CAAA,GAAA,EAAa,KAA2B,EAAA;AAC9D,IAAA,GAAA,GAAM,IAAI,WAAY,EAAA,CAAA;AACtB,IAAI,IAAA,KAAA,KAAU,KAAa,CAAA,IAAA,KAAA,KAAU,IAAM,EAAA;AACvC,MAAA,IAAI,mBAAmB,CAAA,OAAA,CAAQ,cAAe,CAAA,GAAG,CAAG,EAAA;AAChD,QAAO,OAAA,mBAAA,CAAmB,QAAQ,GAAG,CAAA,CAAA;AAAA,OACzC;AACA,MAAA,OAAA;AAAA,KACJ;AACA,IAAmB,mBAAA,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,YAA0C,GAA4B,EAAA;AAChF,IAAA,GAAA,GAAM,IAAI,WAAY,EAAA,CAAA;AACtB,IAAA,IAAI,mBAAmB,CAAA,OAAA,CAAQ,cAAe,CAAA,GAAG,CAAG,EAAA;AAChD,MAAO,OAAA,mBAAA,CAAmB,QAAQ,GAAG,CAAA,CAAA;AAAA,KACzC;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,eAAe,GAAa,EAAA;AACtC,IAAA,GAAA,GAAM,IAAI,WAAY,EAAA,CAAA;AACtB,IAAA,IAAI,mBAAmB,CAAA,OAAA,CAAQ,cAAe,CAAA,GAAG,CAAG,EAAA;AAChD,MAAO,OAAA,mBAAA,CAAmB,QAAQ,GAAG,CAAA,CAAA;AAAA,KACzC;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,KAAQ,GAAA;AAClB,IAAA,mBAAA,CAAmB,UAAU,EAAC,CAAA;AAAA,GAClC;AAAA,EACA,OAAc,UAAqB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACvC;AAAA,EACA,OAAc,MAA0B,GAAA;AACpC,IAAO,OAAA,uBAAA,CAAwB,oBAAmB,OAAO,CAAA,CAAA;AAAA,GAC7D;AAAA,EACA,OAAc,WAAW,UAAoB,EAAA;AACzC,IAAA,mBAAA,CAAmB,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,UAAU,CAAC,CAAA,CAAA;AAAA,GACpD;AAAA,EACA,OAAc,OAAO,IAAc,EAAA;AAC/B,IAAA,mBAAA,CAAmB,KAAM,EAAA,CAAA;AACzB,IAAI,IAAA;AACA,MAAA,IAAI,IAAM,EAAA;AACN,QAAA,mBAAA,CAAmB,OAAW,GAAA,IAAA,CAAA;AAAA,OAE7B,MAAA;AACD,QAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA,CAAA;AAAA,OAClD;AAAA,aAEG,CAAG,EAAA;AACN,MAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,CAAC,CAAA,CAAA;AAAA,KACrD;AAAA,GACJ;AACJ,CAAA,CAAA;AAzGqB,mBAAA,CACF,UAAiD,EAAC,CAAA;AADrE,IAAqB,kBAArB,GAAA,oBAAA;;;ACJO,SAAS,WAAc,GAAA;AAC1B,EAAA,OAAA,CAAQ,IAAK,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ,CAAA,CAAA,CAAA;AACL,CAAA;;;ACRO,IAAM,gBAAmB,GAAA,kBAAA,CAAA;;;ACsBhC,IAAqB,kBAAA,GAArB,MAAqB,kBAAkB,CAAA;AAAA,EAC3B,WAAc,GAAA;AAAA,GAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,WAAW,GAAM,GAAA;AACb,IAAI,IAAA,CAAC,mBAAkB,IAAM,EAAA;AACzB,MAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA,CAAA;AAAA,KAClE;AACA,IAAA,OAAO,kBAAkB,CAAA,IAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,aAAgB,GAAA;AACvB,IAAA,OAAO,kBAAkB,CAAA,cAAA,CAAA;AAAA,GAC7B;AAAA,EASA,WAAW,MAAS,GAAA;AAChB,IAAA,OAAO,mBAAkB,GAAI,CAAA,MAAA,CAAA;AAAA,GACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,OAAoB,UAAA,CAAW,OAAsB,EAAA,KAAA,EAAe,QAAgB,OAAsD,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACtI,MAAA,kBAAA,CAAkB,WAAc,GAAA,KAAA,CAAA;AAChC,MAAA,kBAAA,CAAkB,YAAe,GAAA,MAAA,CAAA;AACjC,MAAkB,kBAAA,CAAA,IAAA,GAAO,IAAI,WAAY,EAAA,CAAA;AACzC,MAAO,OAAA,kBAAA,CAAkB,IAAI,IAAK,CAAA,cAAA,CAAA;AAAA,QAC9B,UAAA,EAAY,OAAO,gBAAoB,IAAA,CAAA;AAAA,QACvC,WAAa,EAAA,IAAA;AAAA,QACb,KAAA;AAAA,QACA,MAAA;AAAA,OACG,EAAA,OAAA,CACN,CAAE,CAAA,IAAA,CAAK,MAAM;AACV,QAAA,YAAA,CAAa,EAAE,GAAA,EAAK,kBAAkB,CAAA,IAAA,EAAM,CAAA,CAAA;AAE5C,QAAA,kBAAA,CAAkB,cAAiB,GAAA,IAAA,CAAA;AAEnC,QAAA,IAAA,CAAK,yBAAyB,OAAO,CAAA,CAAA;AAErC,QAAO,MAAA,CAAA,gBAAA,CAAiB,QAAU,EAAA,kBAAA,CAAkB,MAAM,CAAA,CAAA;AAG1D,QAAA,kBAAA,CAAkB,MAAO,EAAA,CAAA;AAEzB,QAAY,WAAA,EAAA,CAAA;AAAA,OACf,CAAA,CAAA;AAAA,KACL,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,yBAAyB,OAAsB,EAAA;AAC1D,IAAA,IAAI,mBAAkB,aAAe,EAAA;AACjC,MAAQ,OAAA,CAAA,WAAA,CAAY,kBAAkB,CAAA,GAAA,CAAI,MAA2B,CAAA,CAAA;AAAA,KAEpE,MAAA;AACD,MAAA,OAAA,CAAQ,MAAM,gDAAgD,CAAA,CAAA;AAAA,KAClE;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAc,qBAAqB,OAAsB,EAAA;AACrD,IAAI,IAAA,GAAA,GAAM,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACtC,IAAA,GAAA,CAAI,MAAM,QAAW,GAAA,UAAA,CAAA;AACrB,IAAA,GAAA,CAAI,MAAM,aAAgB,GAAA,MAAA,CAAA;AAC1B,IAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAA;AACvB,IAAA,kBAAA,CAAkB,UAAa,GAAA,GAAA,CAAA;AAC/B,IAAA,kBAAA,CAAkB,MAAO,EAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAkB,WAAc,GAAA;AAC5B,IAAI,IAAA,WAAA,GAAc,KAAK,GAAI,CAAA,QAAA,CAAS,gBAAgB,WAAa,EAAA,MAAA,CAAO,cAAc,CAAC,CAAA,CAAA;AACvF,IAAI,IAAA,YAAA,GAAe,KAAK,GAAI,CAAA,QAAA,CAAS,gBAAgB,YAAc,EAAA,MAAA,CAAO,eAAe,CAAC,CAAA,CAAA;AAC1F,IAAA,OAAO,KAAK,GAAI,CAAA,WAAA,GAAc,mBAAkB,WAAa,EAAA,YAAA,GAAe,mBAAkB,YAAY,CAAA,CAAA;AAAA,GAC9G;AAAA;AAAA;AAAA;AAAA,EAIA,WAAkB,WAAc,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,kBAAkB,CAAA,WAAA,GAAc,mBAAkB,WAAW,CAAA,CAAA;AAAA,GACnF;AAAA;AAAA;AAAA;AAAA,EAIA,WAAkB,YAAe,GAAA;AAC7B,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,kBAAkB,CAAA,WAAA,GAAc,mBAAkB,YAAY,CAAA,CAAA;AAAA,GACpF;AAAA;AAAA;AAAA;AAAA,EAIA,WAAkB,gBAAmB,GAAA;AACjC,IAAI,IAAA,WAAA,GAAc,KAAK,GAAI,CAAA,QAAA,CAAS,gBAAgB,WAAa,EAAA,MAAA,CAAO,cAAc,CAAC,CAAA,CAAA;AACvF,IAAQ,OAAA,CAAA,WAAA,GAAc,mBAAkB,WAAe,IAAA,CAAA,CAAA;AAAA,GAC3D;AAAA;AAAA;AAAA;AAAA,EAIA,WAAkB,cAAiB,GAAA;AAC/B,IAAI,IAAA,YAAA,GAAe,KAAK,GAAI,CAAA,QAAA,CAAS,gBAAgB,YAAc,EAAA,MAAA,CAAO,eAAe,CAAC,CAAA,CAAA;AAC1F,IAAQ,OAAA,CAAA,YAAA,GAAe,mBAAkB,YAAgB,IAAA,CAAA,CAAA;AAAA,GAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAe,MAAe,GAAA;AAE1B,IAAA,IAAI,mBAAkB,aAAe,EAAA;AACjC,MAAI,IAAA,KAAA,GAAQ,kBAAkB,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA,CAAA;AACzC,MAAM,KAAA,CAAA,KAAA,GAAQ,CAAG,EAAA,kBAAA,CAAkB,WAAW,CAAA,EAAA,CAAA,CAAA;AAC9C,MAAM,KAAA,CAAA,MAAA,GAAS,CAAG,EAAA,kBAAA,CAAkB,YAAY,CAAA,EAAA,CAAA,CAAA;AAChD,MAAC,KAAc,CAAA,UAAA,GAAa,CAAG,EAAA,kBAAA,CAAkB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AACjE,MAAC,KAAc,CAAA,WAAA,GAAc,CAAG,EAAA,kBAAA,CAAkB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAClE,MAAC,KAAc,CAAA,SAAA,GAAY,CAAG,EAAA,kBAAA,CAAkB,cAAc,CAAA,EAAA,CAAA,CAAA;AAC9D,MAAC,KAAc,CAAA,YAAA,GAAe,CAAG,EAAA,kBAAA,CAAkB,cAAc,CAAA,EAAA,CAAA,CAAA;AAAA,KACrE;AAEA,IAAA,IAAI,mBAAkB,UAAY,EAAA;AAC9B,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,mBAAkB,WAAW,CAAA,EAAA,CAAA,CAAA;AAC3E,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,mBAAkB,YAAY,CAAA,EAAA,CAAA,CAAA;AAC7E,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,UAAa,GAAA,CAAA,EAAG,mBAAkB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AACrF,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,WAAc,GAAA,CAAA,EAAG,mBAAkB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AACtF,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,SAAY,GAAA,CAAA,EAAG,mBAAkB,cAAc,CAAA,EAAA,CAAA,CAAA;AAClF,MAAA,kBAAA,CAAkB,UAAW,CAAA,KAAA,CAAM,YAAe,GAAA,CAAA,EAAG,mBAAkB,cAAc,CAAA,EAAA,CAAA,CAAA;AAAA,KACzF;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,qBAAwB,GAAA;AAC/B,IAAA,OAAO,kBAAkB,CAAA,SAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAc,gBAAiB,CAAA,GAAA,EAAa,aAAgC,EAAA;AACxE,IAAI,IAAA,kBAAA,CAAkB,SAAU,CAAA,GAAG,CAAG,EAAA;AAClC,MAAA,kBAAA,CAAkB,oBAAoB,GAAG,CAAA,CAAA;AAAA,KAC7C;AACA,IAAkB,kBAAA,CAAA,GAAA,CAAI,KAAM,CAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AAClD,IAAkB,kBAAA,CAAA,SAAA,CAAU,GAAG,CAAI,GAAA,aAAA,CAAA;AACnC,IAAkB,kBAAA,CAAA,iBAAA,CAAkB,KAAK,GAAG,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAc,oBAAoB,IAAyB,EAAA;AACvD,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAA,IAAA,GAAO,CAAC,IAAI,CAAA,CAAA;AAAA,KAChB;AACA,IAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAClB,MAAI,IAAA,kBAAA,CAAkB,SAAU,CAAA,GAAG,CAAG,EAAA;AAClC,QAAA,kBAAA,CAAkB,IAAI,KAAM,CAAA,WAAA,CAAY,kBAAkB,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AACxE,QAAO,OAAA,kBAAA,CAAkB,UAAU,GAAG,CAAA,CAAA;AACtC,QAAA,kBAAA,CAAkB,4BAA4B,GAAG,CAAA,CAAA;AAAA,OACrD;AAAA,KACH,CAAA,CAAA;AACD,IAAkB,kBAAA,CAAA,iBAAA,GAAoB,kBAAkB,CAAA,iBAAA,CAAkB,MAAO,CAAA,CAAC,MAAM,CAAC,IAAA,CAAK,QAAS,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAc,iBAA4C,GAA4B,EAAA;AAClF,IAAO,OAAA,kBAAA,CAAkB,UAAU,GAAG,CAAA,CAAA;AAAA,GAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,wBAA6C,WAAgB,EAAA;AACvE,IAAA,OAAO,kBAAkB,CAAA,GAAA,CAAI,KAAM,CAAA,QAAA,CAAS,SAAS,WAAW,CAAA,CAAA;AAAA,GACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,oBAAuB,GAAA;AACjC,IAAkB,kBAAA,CAAA,GAAA,CAAI,MAAM,cAAe,EAAA,CAAA;AAC3C,IAAA,kBAAA,CAAkB,YAAY,EAAC,CAAA;AAC/B,IAAA,kBAAA,CAAkB,oBAAoB,EAAC,CAAA;AACvC,IAAA,kBAAA,CAAkB,gBAAiB,EAAA,CAAA;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,oBAAqB,CAAA,MAAA,EAAgB,MAAgB,EAAA;AAC/D,IAAI,IAAA,kBAAA,CAAkB,SAAU,CAAA,MAAM,CAAG,EAAA;AACrC,MAAA,kBAAA,CAAkB,SAAU,CAAA,MAAM,CAAI,GAAA,kBAAA,CAAkB,UAAU,MAAM,CAAA,CAAA;AACxE,MAAO,OAAA,kBAAA,CAAkB,UAAU,MAAM,CAAA,CAAA;AAAA,KAC7C;AACA,IAAI,IAAA,kBAAA,CAAkB,oBAAqB,CAAA,MAAM,CAAG,EAAA;AAChD,MAAA,kBAAA,CAAkB,oBAAqB,CAAA,MAAM,CAAI,GAAA,kBAAA,CAAkB,qBAAqB,MAAM,CAAA,CAAA;AAC9F,MAAO,OAAA,kBAAA,CAAkB,qBAAqB,MAAM,CAAA,CAAA;AAAA,KACxD;AACA,IAAS,KAAA,IAAA,EAAA,IAAM,mBAAkB,eAAiB,EAAA;AAC9C,MAAI,IAAA,MAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AACjD,MAAA,IAAI,MAAO,CAAA,iBAAA,CAAkB,QAAS,CAAA,MAAM,CAAG,EAAA;AAC3C,QAAO,MAAA,CAAA,iBAAA,GAAoB,OAAO,iBAAkB,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,KAAM,MAAS,GAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACxF,QAAA,IAAI,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA,gBAAgB,CAAG,EAAA;AAC9C,UAAIF,IAAAA,iBAAAA,GAAsC,OAAO,IAAK,CAAA,gBAAA,CAAA;AACtD,UAAI,IAAA,OAAOA,sBAAqB,QAAU,EAAA;AACtC,YAAAA,iBAAAA,GAAmB,CAACA,iBAAgB,CAAA,CAAA;AAAA,WACxC;AACA,UAAI,IAAA,KAAA,CAAM,OAAQA,CAAAA,iBAAgB,CAAG,EAAA;AACjC,YAAO,MAAA,CAAA,IAAA,CAAK,mBAAmBA,iBAAiB,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,KAAM,MAAS,GAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,WACxF;AAAA,SACJ;AAAA,OACJ;AAAA,KACJ;AACA,IAAS,KAAA,IAAA,OAAA,IAAW,mBAAkB,uBAAyB,EAAA;AAC3D,MAAI,IAAA,aAAA,GAAgB,kBAAkB,CAAA,uBAAA,CAAwB,OAAO,CAAA,CAAA;AACrE,MAAA,IAAI,aAAc,CAAA,IAAA,CAAK,QAAS,CAAA,MAAM,CAAG,EAAA;AACrC,QAAc,aAAA,CAAA,IAAA,GAAO,cAAc,IAAK,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,KAAM,MAAS,GAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,OAChF;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAkB,cAAiB,GAAA;AAC/B,IAAA,OAAO,kBAAkB,CAAA,eAAA,CAAA;AAAA,GAC7B;AAAA,EACA,WAAkB,kBAAqB,GAAA;AACnC,IAAO,OAAA,MAAA,CAAO,MAAO,CAAA,kBAAA,CAAkB,eAAe,CAAA,CAAA;AAAA,GAC1D;AAAA,EACA,WAAmB,mCAAsC,GAAA;AACrD,IAAA,OAAO,OAAO,WAAY,CAAA,MAAA,CAAO,OAAQ,CAAA,kBAAA,CAAkB,eAAe,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,GAAG,MAAM,CAAA,KAAM,CAAC,MAAA,CAAO,sBAAsB,CAAC,CAAA,CAAA;AAAA,GACvI;AAAA;AAAA;AAAA;AAAA,EAKA,WAAkB,mBAAsB,GAAA;AACpC,IAAA,OAAO,kBAAkB,CAAA,oBAAA,CAAA;AAAA,GAC7B;AAAA,EAGA,OAAe,iBAAiB,UAAwC,EAAA;AACpE,IAAI,IAAA;AACA,MAAA,OAAOI,KAAK,IAAK,CAAA,SAAA,CAAU,UAAU,CAAC,EAAE,QAAS,EAAA,GAAI,GAAM,GAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AAAA,aAE9F,CAAG,EAAA;AACN,MAAA,MAAM,IAAI,KAAA,CAAM,CAA0C,uCAAA,EAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KACjE;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,SAAwC,CAAA,gBAAA,EAAqC,MAA2B,EAAA;AAC3G,IAAA,IAAI,WAAyB,MAAO,CAAA,EAAA,CAAA;AACpC,IAAI,IAAA,OAAO,qBAAqB,QAAU,EAAA;AACtC,MAAA,gBAAA,GAAmB,CAAC,gBAAgB,CAAA,CAAA;AAAA,KACxC;AACA,IAAI,IAAA,CAAC,qBAA4B,QAAU,EAAA,MAAA,CAAO,MAAM,MAAO,CAAA,QAAA,EAAU,MAAO,CAAA,QAAQ,CAAG,EAAA;AACvF,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAoB,iBAAA,EAAA,QAAQ,CAAY,UAAA,CAAA,CAAA,CAAA;AACtD,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,IAAI,aAAsC,GAAA;AAAA,MACtC,IAAI,MAAM;AAAA,OAAE;AAAA,MACZ,EAAI,EAAA,QAAA;AAAA,MACJ,IAAA,EAAM,uBAAwB,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,MACzC,iBAAmB,EAAA,gBAAA;AAAA,MACnB,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,UAAU,MAAO,CAAA,QAAA;AAAA,KACrB,CAAA;AACA,IAAI,IAAA,EAAA,GAAK,kBAAkB,CAAA,gBAAA,CAAiB,aAAa,CAAA,CAAA;AACzD,IAAkB,kBAAA,CAAA,UAAA,CAAW,EAAI,EAAA,aAAA,EAAe,MAAM,CAAA,CAAA;AACtD,IAAA,IAAI,OAAO,QAAU,EAAA;AACjB,MAAI,IAAA,OAAA,GAAU,WAAW,MAAM;AAC3B,QAAA,kBAAA,CAAkB,wBAAwB,OAAO,CAAA,CAAA;AACjD,QAAA,IAAI,iBAAoB,GAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AACpF,QAAA,IAAI,iBAAmB,EAAA;AACnB,UAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AAAA,SACrC;AAAA,OACJ,EAAG,MAAO,CAAA,QAAA,GAAW,GAAI,CAAA,CAAA;AACzB,MAAA,kBAAA,CAAkB,qBAAqB,gBAAkB,EAAA,QAAA,EAAU,OAAQ,CAAA,QAAA,IAAY,IAAI,CAAA,CAAA;AAAA,KAC/F;AAAA,GACJ;AAAA,EACA,OAAe,UAAA,CAAyC,EAAY,EAAA,UAAA,EAAkC,MAA2B,EAAA;AAC7H,IAAkB,kBAAA,CAAA,2CAAA,CAA4C,UAAW,CAAA,iBAAA,EAAmB,MAAM,CAAA,CAAA;AAClG,IAAkB,kBAAA,CAAA,eAAA,CAAgB,EAAE,CAAI,GAAA,UAAA,CAAA;AACxC,IAAW,UAAA,CAAA,EAAA,GAAK,CAAC,CAAc,KAAA;AAC3B,MAAI,IAAA,IAAA,GAAO,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AAC/C,MAAA,IAAI,IAAM,EAAA;AACN,QAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,EAAG,CAAA,CAAA,EAAG,IAAK,CAAA,IAAA,EAAM,KAAK,iBAAmB,EAAA,EAAA,CAAA,CAAA;AAAA,OACrD;AAAA,KACJ,CAAA;AACA,IAAA,kBAAA,CAAkB,IAAI,MAAO,CAAA,GAAA,CAAI,WAAW,EAAI,EAAA,KAAA,CAAA,EAAW,WAAW,QAAQ,CAAA,CAAA;AAAA,GAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,eAAA,CAA8C,GAAa,EAAA,KAAA,EAAoD,oBAAoB,CAAG,EAAA;AACzI,IAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AACnB,MAAA,OAAA,CAAQ,KAAK,6CAA6C,CAAA,CAAA;AAC1D,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,kBAAA,CAAkB,gCAAgC,GAAG,CAAA,CAAA;AACrD,IAAkB,kBAAA,CAAA,oBAAA,CAAqB,GAAG,CAAI,GAAA;AAAA,MAC1C,iBAAA;AAAA,MACA,KAAO,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACvB,QAAA,IAAI,SAAS,MAAQ,EAAA;AACjB,UAAO,OAAA,IAAA,CAAA;AAAA,SACX;AACA,QAAA,IAAI,KAAK,cAAe,CAAA,MAAM,CAAM,IAAA,IAAA,CAAmB,SAAS,OAAS,EAAA;AACrE,UAAO,OAAA,IAAA,CAAA;AAAA,SACX;AACA,QAAA,IAAI,WAAY,IAAwB,CAAA,EAAA,CAAA;AACxC,QAAO,OAAA;AAAA,UACH,MAAQ,EAAA,QAAA;AAAA,UACR,IAAA,EAAM,uBAAyB,CAAA,IAAA,CAAwB,IAAI,CAAA;AAAA,UAC3D,UAAU,IAAK,CAAA,QAAA;AAAA,SACnB,CAAA;AAAA,OACH,CAAA;AAAA,KACL,CAAA;AACA,IAAA,kBAAA,CAAkB,gBAAgB,GAAG,CAAA,CAAA;AAAA,GACzC;AAAA,EACA,OAAe,oBAAoB,IAAwC,EAAA;AACvE,IAAA,KAAA,IAAS,OAAO,IAAM,EAAA;AAClB,MAAI,IAAA,KAAA,GAAQ,KAAK,GAAG,CAAA,CAAA;AACpB,MAAkB,kBAAA,CAAA,oBAAA,CAAqB,GAAG,CAAI,GAAA,KAAA,CAAA;AAC9C,MAAA,kBAAA,CAAkB,gBAAgB,GAAG,CAAA,CAAA;AAAA,KACzC;AAAA,GACJ;AAAA,EACA,OAAe,gBAA8C,GAAa,EAAA;AACtE,IAAI,IAAA,IAAA,GAAO,kBAAkB,CAAA,oBAAA,CAAqB,GAAG,CAAA,CAAE,MAAM,kBAAkB,CAAA,oBAAA,CAAqB,GAAG,CAAA,CAAE,iBAAiB,CAAA,CAAA;AAC1H,IAAA,IAAI,SAAS,MAAQ,EAAA;AACjB,MAAA,IAAA,GAAO,kBAAkB,CAAA,oBAAA,CAAqB,GAAG,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAC1D,MAAkB,kBAAA,CAAA,oBAAA,CAAqB,GAAG,CAAA,CAAE,iBAAoB,GAAA,CAAA,CAAA;AAChE,MAAA,IAAI,SAAS,MAAQ,EAAA;AACjB,QAAA,OAAA,CAAQ,MAAM,0DAA0D,CAAA,CAAA;AACxE,QAAA,OAAA;AAAA,OACJ;AAAA,KACJ;AACA,IAAA,IAAI,KAAK,cAAe,CAAA,MAAM,CAAM,IAAA,IAAA,CAAmB,SAAS,OAAS,EAAA;AACrE,MAAI,IAAA,OAAA,GAAU,WAAW,MAAM;AAC3B,QAAA,IAAI,iBAAoB,GAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AACpF,QAAA,IAAI,iBAAmB,EAAA;AACnB,UAAkB,iBAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,CAACC,IAAQ,KAAA;AACpC,YAAA,kBAAA,CAAkB,eAAeA,IAAG,CAAA,CAAA;AAAA,WACvC,CAAA,CAAA;AAAA,SACL;AACA,QAAA,kBAAA,CAAkB,wBAAwB,OAAO,CAAA,CAAA;AAAA,OACrD,EAAI,IAAmB,CAAA,QAAA,GAAW,GAAI,CAAA,CAAA;AACtC,MAAA,kBAAA,CAAkB,qBAAqB,GAAK,EAAA,OAAA,EAAS,OAAQ,CAAA,QAAA,IAAY,KAAK,CAAA,CAAA;AAC9E,MAAA,OAAA;AAAA,KACJ;AACA,IAAI,IAAA,MAAA,GAAS,qBAA6B,IAA6B,CAAA,MAAA,EAAS,KAA6B,IAAM,EAAA,IAAA,CAAK,QAAW,EAAA,IAAA,CAA6B,QAAQ,CAAA,CAAA;AACxK,IAAA,IAAI,CAAC,MAAQ,EAAA;AACT,MAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,iBAAA,EAAqB,IAA6B,CAAA,MAAM,CAAY,UAAA,CAAA,CAAA,CAAA;AAClF,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,IAAI,aAA2B,MAAO,CAAA,EAAA,CAAA;AACtC,IAAA,IAAI,aAAsC,GAAA;AAAA,MACtC,IAAI,MAAM;AAAA,OAAE;AAAA,MACZ,EAAI,EAAA,UAAA;AAAA,MACJ,IAAA,EAAM,uBAAwB,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,MACzC,iBAAA,EAAmB,CAAC,GAAG,CAAA;AAAA,MACvB,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,sBAAwB,EAAA,GAAA;AAAA,KAC5B,CAAA;AACA,IAAI,IAAA,EAAA,GAAK,kBAAkB,CAAA,gBAAA,CAAiB,aAAa,CAAA,CAAA;AACzD,IAAkB,kBAAA,CAAA,UAAA,CAAW,EAAI,EAAA,aAAA,EAAe,MAAM,CAAA,CAAA;AACtD,IAAA,IAAI,OAAO,QAAU,EAAA;AACjB,MAAI,IAAA,OAAA,GAAU,WAAW,MAAM;AAC3B,QAAA,IAAI,iBAAoB,GAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAA,CAAQ,UAAU,CAAA,CAAA;AACpF,QAAA,IAAI,iBAAmB,EAAA;AACnB,UAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AACjC,UAAkB,iBAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,CAACA,IAAQ,KAAA;AACpC,YAAA,kBAAA,CAAkB,eAAeA,IAAG,CAAA,CAAA;AAAA,WACvC,CAAA,CAAA;AAAA,SACL;AACA,QAAA,kBAAA,CAAkB,wBAAwB,OAAO,CAAA,CAAA;AAAA,OACrD,EAAG,MAAO,CAAA,QAAA,GAAW,GAAI,CAAA,CAAA;AACzB,MAAA,kBAAA,CAAkB,qBAAqB,GAAK,EAAA,UAAA,EAAY,OAAQ,CAAA,QAAA,IAAY,KAAK,CAAA,CAAA;AAAA,KACrF;AAAA,GACJ;AAAA,EACA,OAAe,eAAe,GAAa,EAAA;AACvC,IAAI,IAAA,kBAAA,CAAkB,oBAAqB,CAAA,GAAG,CAAG,EAAA;AAC7C,MAAI,IAAA,KAAA,GAAQ,kBAAkB,CAAA,oBAAA,CAAqB,GAAG,CAAA,CAAA;AACtD,MAAA,IAAI,KAAM,CAAA,iBAAA,GAAoB,CAAI,GAAA,KAAA,CAAM,MAAM,MAAQ,EAAA;AAClD,QAAM,KAAA,CAAA,iBAAA,EAAA,CAAA;AACN,QAAkB,kBAAA,CAAA,oBAAA,CAAqB,GAAG,CAAI,GAAA,KAAA,CAAA;AAC9C,QAAA,kBAAA,CAAkB,gBAAgB,GAAG,CAAA,CAAA;AAAA,OAEpC,MAAA;AACD,QAAA,kBAAA,CAAkB,gCAAgC,GAAG,CAAA,CAAA;AAAA,OACzD;AAAA,KACJ;AAAA,GACJ;AAAA,EACA,OAAc,aAAA,CAAc,iBAAsC,EAAA,MAAA,EAA2D,2BAA8C,QAAkB,EAAA;AACzL,IAAI,IAAA,UAAA,GAAa,kBAAkB,CAAA,eAAA,CAAgB,QAAQ,CAAA,CAAA;AAC3D,IAAkB,kBAAA,CAAA,2CAAA,CAA4C,mBAAmB,MAAM,CAAA,CAAA;AACvF,IAAA,kBAAA,CAAkB,oBAAoB,yBAAyB,CAAA,CAAA;AAC/D,IAAA,IAAI,UAAY,EAAA;AACZ,MAAA,kBAAA,CAAkB,aAAa,QAAQ,CAAA,CAAA;AACvC,MAAA,IAAI,UAAW,CAAA,QAAA,IAAY,KAAa,CAAA,IAAA,UAAA,CAAW,sBAAwB,EAAA;AACvE,QAAkB,kBAAA,CAAA,cAAA,CAAe,WAAW,sBAAsB,CAAA,CAAA;AAAA,OACtE;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAc,2CAA4C,CAAA,IAAA,EAAyB,MAA2D,EAAA;AAC1I,IAAI,IAAA,QAAA,CAAA;AACJ,IAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC5B,MAAW,QAAA,GAAA,MAAA,CAAA;AAAA,KACf,MAAA,IACS,kBAAkB,UAAY,EAAA;AACnC,MAAA,QAAA,GAAW,MAAO,CAAA,EAAA,CAAA;AAAA,KAEjB,MAAA;AACD,MAAA,QAAA,GAAW,OAAO,SAAU,CAAA,EAAA,CAAA;AAAA,KAChC;AACA,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAA,IAAA,GAAO,CAAC,IAAI,CAAA,CAAA;AAAA,KAChB;AACA,IAAS,KAAA,IAAA,EAAA,IAAM,mBAAkB,eAAiB,EAAA;AAC9C,MAAIC,IAAAA,OAAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AACjD,MAAIA,IAAAA,OAAAA,CAAO,OAAO,QAAU,EAAA;AACxB,QAAA,kBAAA,CAAkB,eAAgB,CAAA,EAAE,CAAE,CAAA,iBAAA,GAAoBA,OAAO,CAAA,iBAAA,CAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,CAAC,IAAK,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AAAA,OACtH;AAAA,KACJ;AACA,IAAS,KAAA,IAAA,OAAA,IAAW,mBAAkB,uBAAyB,EAAA;AAC3D,MAAI,IAAA,aAAA,GAAgB,kBAAkB,CAAA,uBAAA,CAAwB,OAAO,CAAA,CAAA;AACrE,MAAA,IAAI,aAAc,CAAA,MAAA,KAAW,QAAY,IAAA,aAAA,CAAc,qBAAuB,EAAA;AAC1E,QAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAO,CAAE,CAAA,IAAA,GAAO,aAAc,CAAA,IAAA,CAAK,MAAO,CAAA,CAAC,CAAM,KAAA,CAAC,IAAK,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AAAA,OAChH;AAAA,KACJ;AACA,IAAA,kBAAA,CAAkB,2CAA4C,EAAA,CAAA;AAAA,GAClE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAe,2CAA8C,GAAA;AACzD,IAAS,KAAA,IAAA,EAAA,IAAM,mBAAkB,eAAiB,EAAA;AAC9C,MAAI,IAAA,MAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AACjD,MAAO,MAAA,CAAA,iBAAA,GAAoB,OAAO,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,kBAAA,CAAkB,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AAChG,MAAI,IAAA,MAAA,CAAO,iBAAkB,CAAA,MAAA,KAAW,CAAG,EAAA;AACvC,QAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AAAA,OACrC;AAAA,KACJ;AACA,IAAS,KAAA,IAAA,GAAA,IAAO,mBAAkB,oBAAsB,EAAA;AACpD,MAAA,IAAI,kBAAkB,CAAA,SAAA,CAAU,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AAChD,QAAO,OAAA,kBAAA,CAAkB,qBAAqB,GAAG,CAAA,CAAA;AAAA,OACrD;AAAA,KACJ;AACA,IAAO,MAAA,CAAA,OAAA,CAAQ,kBAAkB,CAAA,uBAAuB,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,OAAS,EAAA,EAAE,IAAK,EAAC,CAAM,KAAA;AACvF,MAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACnB,QAAA,kBAAA,CAAkB,oBAAoB,OAAO,CAAA,CAAA;AAAA,OACjD;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AAAA,EACA,OAAe,oBAAA,CAAqB,IAAyB,EAAA,MAAA,EAAgB,SAAiB,qBAAgC,EAAA;AAC1H,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAA,IAAA,GAAO,CAAC,IAAI,CAAA,CAAA;AAAA,KAChB;AACA,IAAkB,kBAAA,CAAA,uBAAA,CAAwB,OAAO,CAAI,GAAA;AAAA,MACjD,IAAA;AAAA,MACA,MAAA;AAAA,MACA,qBAAA;AAAA,KACJ,CAAA;AAAA,GACJ;AAAA,EACA,OAAe,wBAAwB,OAAkC,EAAA;AACrE,IAAI,IAAA,OAAO,YAAY,QAAU,EAAA;AAC7B,MAAA,OAAA,GAAU,QAAQ,QAAS,EAAA,CAAA;AAAA,KAC/B;AACA,IAAI,IAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAO,CAAG,EAAA;AACpD,MAAO,OAAA,kBAAA,CAAkB,wBAAwB,OAAO,CAAA,CAAA;AAAA,KAC5D;AAAA,GACJ;AAAA,EACA,OAAe,oBAAoB,OAAkC,EAAA;AACjE,IAAI,IAAA,OAAO,YAAY,QAAU,EAAA;AAC7B,MAAA,OAAA,GAAU,QAAQ,QAAS,EAAA,CAAA;AAAA,KAC/B;AACA,IAAa,YAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAC5B,IAAA,kBAAA,CAAkB,wBAAwB,OAAO,CAAA,CAAA;AAAA,GACrD;AAAA,EACA,OAAe,yBAA0B,CAAA,GAAA,EAAa,0BAAqC,EAAA;AACvF,IAAS,KAAA,IAAA,OAAA,IAAW,mBAAkB,uBAAyB,EAAA;AAC3D,MAAI,IAAA,sBAAA,GAAyB,kBAAkB,CAAA,uBAAA,CAAwB,OAAO,CAAA,CAAE,KAAK,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,KAAM,GAAG,CAAA,CAAA;AAC5G,MAAI,IAAA,sBAAA,CAAuB,WAAW,CAAG,EAAA;AACrC,QAAA,IAAI,qBAAwB,GAAA,kBAAA,CAAkB,uBAAwB,CAAA,OAAO,CAAE,CAAA,qBAAA,CAAA;AAC/E,QAAI,IAAA,CAAC,8BAA8B,qBAAuB,EAAA;AACtD,UAAA,kBAAA,CAAkB,oBAAoB,OAAO,CAAA,CAAA;AAAA,SACjD;AAAA,OAEC,MAAA;AACD,QAAkB,kBAAA,CAAA,uBAAA,CAAwB,OAAO,CAAA,CAAE,IAAO,GAAA,sBAAA,CAAA;AAAA,OAC9D;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAc,gBAAmB,GAAA;AAC7B,IAAA,kBAAA,CAAkB,uBAAuB,EAAC,CAAA;AAC1C,IAAA,MAAA,CAAO,KAAK,kBAAkB,CAAA,eAAe,CAAE,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAC3D,MAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AAAA,KACpC,CAAA,CAAA;AACD,IAAA,kBAAA,CAAkB,kBAAkB,EAAC,CAAA;AACrC,IAAS,KAAA,IAAA,OAAA,IAAW,mBAAkB,uBAAyB,EAAA;AAC3D,MAAA,kBAAA,CAAkB,oBAAoB,OAAO,CAAA,CAAA;AAAA,KACjD;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,4BAA4B,GAAwB,EAAA;AAC/D,IAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AACzB,MAAA,GAAA,GAAM,CAAC,GAAG,CAAA,CAAA;AAAA,KACd;AACA,IAAI,GAAA,CAAA,OAAA,CAAQ,CAACD,IAAQ,KAAA;AACjB,MAAS,KAAA,IAAA,EAAA,IAAM,mBAAkB,eAAiB,EAAA;AAC9C,QAAI,IAAA,MAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AACjD,QAAA,IAAI,MAAO,CAAA,iBAAA,CAAkB,QAASA,CAAAA,IAAG,CAAG,EAAA;AACxC,UAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AAAA,SACrC;AAAA,OACJ;AACA,MAAI,IAAA,kBAAA,CAAkB,oBAAqBA,CAAAA,IAAG,CAAG,EAAA;AAC7C,QAAO,OAAA,kBAAA,CAAkB,qBAAqBA,IAAG,CAAA,CAAA;AAAA,OACrD;AACA,MAAkB,kBAAA,CAAA,yBAAA,CAA0BA,MAAK,KAAK,CAAA,CAAA;AACtD,MAAO,OAAA,kBAAA,CAAkB,qBAAqBA,IAAG,CAAA,CAAA;AAAA,KACpD,CAAA,CAAA;AAAA,GACL;AAAA,EACA,OAAe,gCAAgC,GAAa,EAAA;AACxD,IAAI,IAAA,kBAAA,CAAkB,oBAAqB,CAAA,GAAG,CAAG,EAAA;AAC7C,MAAO,OAAA,kBAAA,CAAkB,qBAAqB,GAAG,CAAA,CAAA;AAAA,KACrD;AACA,IAAS,KAAA,IAAA,EAAA,IAAM,mBAAkB,eAAiB,EAAA;AAC9C,MAAI,IAAA,MAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AACjD,MAAI,IAAA,MAAA,CAAO,2BAA2B,GAAK,EAAA;AACvC,QAAA,kBAAA,CAAkB,aAAa,EAAE,CAAA,CAAA;AAAA,OACrC;AAAA,KACJ;AAAA,GACJ;AAAA,EACA,OAAe,aAAa,QAAkB,EAAA;AAC1C,IAAI,IAAA,MAAA,GAAS,kBAAkB,CAAA,eAAA,CAAgB,QAAQ,CAAA,CAAA;AACvD,IAAA,IAAI,MAAQ,EAAA;AACR,MAAA,IAAI,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA,gBAAgB,CAAG,EAAA;AAC9C,QAAIL,IAAAA,iBAAAA,GAAsC,OAAO,IAAK,CAAA,gBAAA,CAAA;AACtD,QAAA,kBAAA,CAAkB,oBAAoBA,iBAAgB,CAAA,CAAA;AAAA,OAC1D;AACA,MAAA,kBAAA,CAAkB,GAAI,CAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,EAAE,CAAA,CAAA;AAC7C,MAAO,OAAA,kBAAA,CAAkB,gBAAgB,QAAQ,CAAA,CAAA;AAAA,KACrD;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAQ,GAAA;AACX,IAAA,kBAAA,CAAkB,oBAAqB,EAAA,CAAA;AAAA,GAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,UAAqB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,MAAyB,GAAA;AACnC,IAAA,IAAI,kBAAwD,EAAC,CAAA;AAC7D,IAAS,KAAA,IAAA,GAAA,IAAO,mBAAkB,SAAW,EAAA;AACzC,MAAA,eAAA,CAAgB,GAAG,CAAI,GAAA,mBAAA,CAAoB,kBAAkB,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AAAA,KAC/E;AACA,IAAO,OAAA;AAAA,MACH,cAAA,EAAgB,uBAAwB,CAAA,kBAAA,CAAkB,mCAAmC,CAAA;AAAA,MAC7F,mBAAA,EAAqB,uBAAwB,CAAA,kBAAA,CAAkB,oBAAoB,CAAA;AAAA,MACnF,eAAA,EAAiB,wBAAwB,eAAe,CAAA;AAAA,MACxD,iBAAA,EAAmB,uBAAwB,CAAA,kBAAA,CAAkB,iBAAiB,CAAA;AAAA,KAClF,CAAA;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,UAAoB,EAAA;AACzC,IAAA,kBAAA,CAAkB,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,UAAU,CAAC,CAAA,CAAA;AAAA,GACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAO,IAAc,EAAA;AAC/B,IAAA,kBAAA,CAAkB,KAAM,EAAA,CAAA;AACxB,IAAI,IAAA;AACA,MAAA,IAAI,KAAK,cAAe,CAAA,mBAAmB,KAAK,IAAK,CAAA,cAAA,CAAe,iBAAiB,CAAG,EAAA;AACpF,QAAI,IAAA,eAAA,GAAmB,KAAwB,iBAAiB,CAAA,CAAA;AAChE,QAAI,IAAA,iBAAA,GAAqB,KAAwB,mBAAmB,CAAA,CAAA;AACpE,QAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC/B,UAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,YAAA,IAAI,OAAU,GAAA,mBAAA,CAAoB,eAAgB,CAAA,GAAG,CAAC,CAAA,CAAA;AACtD,YAAkB,kBAAA,CAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA,CAAA;AAC/C,YAAkB,kBAAA,CAAA,iBAAA,CAAkB,KAAK,GAAG,CAAA,CAAA;AAAA,WAChD;AAAA,SACH,CAAA,CAAA;AAAA,OAEA,MAAA;AACD,QAAA,OAAA,CAAQ,MAAM,uFAAuF,CAAA,CAAA;AACrG,QAAA,OAAA;AAAA,OACJ;AACA,MAAI,IAAA,IAAA,CAAK,cAAe,CAAA,gBAAgB,CAAG,EAAA;AACvC,QAAI,IAAA,cAAA,GAAkB,KAAwB,gBAAgB,CAAA,CAAA;AAC9D,QAAA,KAAA,IAAS,MAAM,cAAgB,EAAA;AAC3B,UAAI,IAAA,CAAA,GAAI,eAAe,EAAE,CAAA,CAAA;AACzB,UAAA,IAAI,OAAiB,CAAE,CAAA,iBAAA,CAAA;AACvB,UAAI,IAAA,MAAA,GAAS,qBAAqB,CAAE,CAAA,EAAA,EAAI,EAAE,IAAM,EAAA,CAAA,CAAE,QAAU,EAAA,CAAA,CAAE,QAAQ,CAAA,CAAA;AACtE,UAAA,IAAI,MAAQ,EAAA;AACR,YAAkB,kBAAA,CAAA,SAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAAA,WAEvC,MAAA;AACD,YAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,iBAAA,EAAoB,CAAE,CAAA,EAAE,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,WACtD;AAAA,SACJ;AAAA,OACJ;AACA,MAAI,IAAA,IAAA,CAAK,cAAe,CAAA,qBAAqB,CAAG,EAAA;AAC5C,QAAI,IAAA,mBAAA,GAAuB,KAAwB,qBAAqB,CAAA,CAAA;AACxE,QAAA,kBAAA,CAAkB,oBAAoB,mBAAmB,CAAA,CAAA;AAAA,OAC7D;AAAA,aAEG,CAAG,EAAA;AACN,MAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,CAAC,CAAA,CAAA;AAAA,KACrD;AAAA,GACJ;AACJ,CAAA,CAAA;AAhvBqB,kBAAA,CAGF,IAAgC,GAAA,KAAA,CAAA,CAAA;AAH9B,kBAAA,CAcF,cAA0B,GAAA,KAAA,CAAA;AAdxB,kBAAA,CAuLF,YAAgD,EAAC,CAAA;AAAA;AAAA;AAAA;AAvL/C,kBAAA,CA2LF,oBAA8B,EAAC,CAAA;AA3L7B,kBAAA,CAwTF,kBAAwD,EAAC,CAAA;AAxTvD,kBAAA,CA+TF,uBAAyD,EAAC,CAAA;AA/TxD,kBAAA,CAgUF,0BAAuE,EAAC,CAAA;AAhU3F,IAAqB,iBAArB,GAAA,mBAAA;;;ACDA,IAAqB,gBAAA,GAArB,MAAqB,gBAAgB,CAAA;AAAA,EACzB,WAAc,GAAA;AAAA,GAAE;AAAA,EAKxB,WAAW,YAAe,GAAA;AACtB,IAAA,OAAO,gBAAgB,CAAA,aAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,aAAgB,GAAA;AACvB,IAAA,OAAO,gBAAgB,CAAA,cAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAe,qBAAwB,GAAA;AACnC,IAAgB,gBAAA,CAAA,cAAA,EAAA,CAAA;AAAA,GACpB;AAAA,EAEA,WAAW,YAAe,GAAA;AACtB,IAAA,OAAO,gBAAgB,CAAA,aAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA,EAIA,WAAmB,cAA0C,GAAA;AACzD,IAAI,IAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1C,MAAA,IAAI,OAAO,gBAAgB,CAAA,aAAA,CAAc,gBAAgB,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACjF,MAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,KAChB;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,YAAkC,GAAA;AACzC,IAAA,IAAI,iBAAgB,cAAgB,EAAA;AAChC,MAAO,OAAA,YAAA,CAAa,iBAAgB,cAAc,CAAA,CAAA;AAAA,KACtD;AAAA,GACJ;AAAA,EACA,WAAmB,qBAAuC,GAAA;AACtD,IAAI,IAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1C,MAAA,IAAI,OAAO,gBAAgB,CAAA,aAAA,CAAc,gBAAgB,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACjF,MAAA,OAAO,IAAK,CAAA,gBAAA,CAAA;AAAA,KAChB;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAmB,eAAuC,GAAA;AACtD,IAAI,IAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1C,MAAA,OAAO,gBAAgB,CAAA,aAAA,CAAc,gBAAgB,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AAAA,KACjF;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA,EAEA,WAAmB,gBAAqC,GAAA;AACpD,IAAI,IAAA,CAAC,iBAAgB,iBAAmB,EAAA;AACpC,MAAO,OAAA;AAAA,QACH,IAAM,EAAA,EAAA;AAAA,QACN,SAAS,EAAC;AAAA,QACV,MAAQ,EAAA;AAAA,UACJ,mBAAmB,EAAC;AAAA,UACpB,iBAAiB,EAAC;AAAA,UAClB,gBAAgB,EAAC;AAAA,UACjB,qBAAqB,EAAC;AAAA,SAC1B;AAAA,QACA,UAAY,EAAA,CAAA,CAAA;AAAA,QACZ,cAAc,EAAC;AAAA,OACnB,CAAA;AAAA,KACJ;AACA,IAAO,OAAA,uBAAA,CAAwB,iBAAgB,iBAAiB,CAAA,CAAA;AAAA,GACpE;AAAA,EACA,WAAmB,iBAAiB,KAAyB,EAAA;AACzD,IAAgB,gBAAA,CAAA,iBAAA,GAAoB,wBAAwB,KAAK,CAAA,CAAA;AAAA,GACrE;AAAA,EAEA,WAAmB,eAAoC,GAAA;AACnD,IAAA,IAAI,eAAoC,GAAA;AAAA,MACpC,IAAA,EAAM,OAAO,QAAS,CAAA,QAAA;AAAA,MACtB,OAAA,EAAS,mBAAmB,MAAO,EAAA;AAAA,MACnC,MAAA,EAAQ,kBAAkB,MAAO,EAAA;AAAA,MACjC,UAAA,EAAY,iBAAgB,qBAAyB,IAAA,CAAA;AAAA,MACrD,YAAA,EAAc,uBAAwB,CAAA,gBAAA,CAAgB,aAAa,CAAA;AAAA,KACvE,CAAA;AACA,IAAO,OAAA,eAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAe,cAAe,CAAA,IAAA,EAA0B,UAAqB,EAAA;AACzE,IAAI,IAAA,WAAA,GAAmC,YAAY,IAAI,CAAA,CAAA;AACvD,IAAA,IAAI,kBAAoC,gBAAgB,CAAA,eAAA,CAAA;AACxD,IAAA,IAAI,iBAAgB,gBAAkB,EAAA;AAClC,MAAA,IAAI,iBAAgB,gBAAiB,CAAA,YAAA,CAAa,MAAW,KAAA,eAAA,CAAgB,aAAa,MAAQ,EAAA;AAC9F,QAAI,IAAA;AACA,UAAA,IAAI,8BAAiC,GAAA,IAAA,CAAK,SAAU,CAAA,gBAAA,CAAgB,iBAAiB,YAAY,CAAA,CAAA;AACjG,UAAA,IAAI,6BAAgC,GAAA,IAAA,CAAK,SAAU,CAAA,eAAA,CAAgB,YAAY,CAAA,CAAA;AAC/E,UACI,IAAA,8BAAA,KAAmC,6BACnC,IAAA,gBAAA,CAAgB,gBAAiB,CAAA,IAAA,KAAS,eAAgB,CAAA,IAAA,IAC1D,gBAAgB,CAAA,gBAAA,CAAiB,UAAe,KAAA,eAAA,CAAgB,UAClE,EAAA;AACE,YAAA,OAAA;AAAA,WACJ;AAAA,iBAEG,CAAG,EAAA;AACN,UAAQ,OAAA,CAAA,KAAA,CAAM,0CAA0C,CAAC,CAAA,CAAA;AAAA,SAC7D;AAAA,OACJ;AAAA,KACJ;AACA,IAAA,IAAI,IAAO,GAAA,IAAA,CAAK,gBAAgB,CAAA,gBAAA,EAAkB,eAAe,CAAA,CAAA;AACjE,IAAA,IAAI,IAAM,EAAA;AACN,MAAA,IAAI,OAAyC,GAAA,KAAA,CAAA,CAAA;AAC7C,MAAA,IAAI,eAA2D,GAAA,KAAA,CAAA,CAAA;AAC/D,MAAA,IAAI,mBAAmB,WAAoB,CAAA,kBAAA,CAAmB,WAAW,sCAAsC,CAAA,KAAM,iBAAgB,aAAe,EAAA;AAChJ,QAAA,OAAA,GAAU,WAAY,EAAA,CAAA;AAAA,OAC1B;AACA,MAAA,IAAI,mBAAmB,WAAoB,CAAA,kBAAA,CAAmB,WAAW,0CAA0C,CAAA,KAAM,iBAAgB,aAAe,EAAA;AACpJ,QAAA,eAAA,GAAkB,kBAAmB,CAAA,WAAA,CAAyC,kBAAmB,CAAA,UAAA,CAAW,+BAA+B,CAAA,CAAA;AAAA,OAC/I;AACA,MAAA,gBAAA,CAAgB,cAAc,IAAK,CAAA;AAAA,QAC/B,IAAM,EAAA,IAAA;AAAA,QACN,cAAc,gBAAgB,CAAA,cAAA;AAAA,QAC9B,OAAA;AAAA,QACA,OAAS,EAAA,eAAA;AAAA,QACT,QAAU,EAAA,WAAA;AAAA,QACV,OAAO,gBAAgB,CAAA,aAAA;AAAA,QACvB,eAAiB,EAAA,UAAA;AAAA,OACpB,CAAA,CAAA;AACD,MAAA,gBAAA,CAAgB,gBAAmB,GAAA,eAAA,CAAA;AAAA,KACvC;AACA,IAAA,gBAAA,CAAgB,qBAAsB,EAAA,CAAA;AAAA,GAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,aAAa,KAAoB,EAAA;AAC5C,IAAI,IAAA,YAAA,GAAe,aAAa,KAAK,CAAA,CAAA;AACrC,IAAA,IAAI,CAAC,YAAc,EAAA;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAmB,gBAAA,EAAA,KAAK,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,KACxD;AACA,IAAA,gBAAA,CAAgB,cAAc,IAAK,CAAA;AAAA,MAC/B,KAAA;AAAA,MACA,gBAAkB,EAAA,CAAA;AAAA,KACrB,CAAA,CAAA;AAAA,GACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAoB,GAAA;AACvB,IAAI,IAAA,CAAC,iBAAgB,cAAgB,EAAA;AACjC,MAAA,OAAA,CAAQ,KAAK,6BAA6B,CAAA,CAAA;AAC1C,MAAA,OAAA;AAAA,KACJ;AACA,IAAI,IAAA,CAAC,iBAAgB,YAAc,EAAA;AAC/B,MAAA,OAAA,CAAQ,MAAM,kCAAkC,CAAA,CAAA;AAChD,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,gBAAA,CAAgB,cAAc,GAAI,EAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,cAAiB,GAAA;AACpB,IAAO,OAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7C,MAAA,gBAAA,CAAgB,iBAAkB,EAAA,CAAA;AAAA,KACtC;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAe,wBAA2B,GAAA;AACtC,IAAA,IAAI,OAAO,gBAAgB,CAAA,aAAA,CAAc,gBAAgB,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACjF,IAAA,gBAAA,CAAgB,cAAc,gBAAgB,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,GAAI,iCACnE,IADmE,CAAA,EAAA;AAAA,MAEtE,gBAAA,EAAkB,KAAK,gBAAmB,GAAA,CAAA;AAAA,KAC9C,CAAA,CAAA;AAAA,GACJ;AAAA,EACA,OAAe,mBAAsB,GAAA;AACjC,IAAgB,gBAAA,CAAA,aAAA,GAAgB,iBAAgB,gBAAiB,CAAA,YAAA,CAAA;AAAA,GACrE;AAAA;AAAA,EAIA,WAAW,SAAqB,GAAA;AAC5B,IAAA,IAAI,UAAU,oBAAqB,EAAA,CAAA;AACnC,IAAI,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AAC/B,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,OAAoB,MAAO,CAAA,KAAA,EAA2B,UAAmD,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrG,MAAI,IAAA,CAAC,iBAAgB,SAAW,EAAA;AAC5B,QAAA,OAAA,CAAQ,KAAK,yCAAyC,CAAA,CAAA;AACtD,QAAA,OAAA;AAAA,OACJ;AACA,MAAA,IAAI,gBAAgB,CAAA,YAAA,IAAgB,gBAAgB,CAAA,YAAA,CAAa,SAAW,EAAA;AACxE,QAAA,MAAM,iBAAgB,YAAa,CAAA,SAAA,CAAU,iBAAgB,qBAAyB,IAAA,CAAA,EAAG,iBAAgB,YAAY,CAAA,CAAA;AAAA,OACzH;AACA,MAAA,gBAAA,CAAgB,wBAAyB,EAAA,CAAA;AACzC,MAAA,OAAO,MAAM,gBAAA,CAAgB,cAAe,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,KACjE,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAqB,cAA6B,CAAA,KAAA,EAA8B,UAAmD,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/H,MAAA,IAAI,iBAAgB,cAAgB,EAAA;AAChC,QAAA,IAAI,wBAAwB,gBAAgB,CAAA,qBAAA,CAAA;AAC5C,QAAA,IAAI,0BAA0B,IAAM,EAAA;AAChC,UAAA,OAAA,CAAQ,MAAM,yCAAyC,CAAA,CAAA;AACvD,UAAA,OAAA;AAAA,SACJ;AACA,QAAA,IAAI,eAAe,gBAAgB,CAAA,YAAA,CAAA;AACnC,QAAA,IAAI,CAAC,YAAc,EAAA;AACf,UAAA,OAAA,CAAQ,MAAM,kCAAkC,CAAA,CAAA;AAChD,UAAA,OAAA;AAAA,SACJ;AACA,QAAI,IAAA,YAAA,CAAa,KAAM,CAAA,MAAA,GAAS,qBAAuB,EAAA;AACnD,UAAA,IAAI,YAAY,YAAa,CAAA,WAAA,CAAA;AAC7B,UAAA,IAAI,SAAW,EAAA;AACX,YAAM,MAAA,SAAA,CAAU,uBAAuB,YAAY,CAAA,CAAA;AAAA,WACvD;AACA,UAAI,IAAA,IAAA,GAAO,YAAa,CAAA,KAAA,CAAM,qBAAqB,CAAA,CAAA;AACnD,UAAI,IAAA,MAAA,GAAS,MAAM,IAAA,CAAK,KAAK,CAAA,CAAA;AAC7B,UAAgB,gBAAA,CAAA,cAAA,CAAe,MAAM,UAAU,CAAA,CAAA;AAC/C,UAAO,OAAA,MAAA,CAAA;AAAA,SAEF,MAAA,IAAA,gBAAA,CAAgB,YAAa,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,UAAA,gBAAA,CAAgB,iBAAkB,EAAA,CAAA;AAClC,UAAA,OAAO,MAAM,gBAAA,CAAgB,MAAO,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,SAEpD,MAAA;AACD,UAAA,gBAAA,CAAgB,mBAAoB,EAAA,CAAA;AACpC,UAAA,IAAI,iBAAgB,OAAS,EAAA;AACzB,YAAO,OAAA,MAAM,gBAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,WAC9C;AACA,UAAA,OAAA,CAAQ,MAAM,mNAAmN,CAAA,CAAA;AACjO,UAAA,OAAA;AAAA,SACJ;AAAA,OACJ;AAAA,KACJ,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,OAAoB,SAA6B,CAAA,KAAA,EAA+B,KAA4D,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACxI,MAAA,IAAI,UAAiC,GAAA,KAAA,CAAA,CAAA;AACrC,MAAI,IAAA,OAAA,CAAA;AACJ,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,QAAU,OAAA,GAAA,KAAA,CAAA;AAAA,OAET,MAAA;AACD,QAAA,OAAA,GAAU,KAAM,CAAA,EAAA,CAAA;AAChB,QAAI,IAAA,OAAO,KAAM,CAAA,WAAA,KAAgB,QAAU,EAAA;AACvC,UAAA,UAAA,GAAa,KAAM,CAAA,WAAA,CAAA;AAAA,SACvB;AAAA,OACJ;AACA,MAAI,IAAA;AACA,QAAA,IAAI,YAAY,cAAgB,EAAA;AAC5B,UAAI,IAAA,iBAAA,GAAoB,cAAiB,UAAU,CAAA,CAAA;AACnD,UAAA,IAAI,MAAmC,GAAA;AAAA,YACnC,KAAO,EAAA,iBAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,YACN,iBAAmB,EAAA,KAAA;AAAA,YACnB,IAAM,EAAA,OAAA;AAAA,YACN,OAAO,EAAC;AAAA,WACZ,CAAA;AACA,UAAO,OAAA,gBAAA,CAAgB,eAAgB,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAAA,SACxD;AACA,QAAI,IAAA,SAAA,GAAY,aAAuB,OAAO,CAAA,CAAA;AAC9C,QAAA,IAAI,CAAC,SAAW,EAAA;AACZ,UAAA,MAAM,IAAI,KAAA,CAAM,CAAmB,gBAAA,EAAA,OAAO,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,SAC1D;AAEA,QAAA,IAAI,gBAAgB,CAAA,YAAA,IAAgB,gBAAgB,CAAA,YAAA,CAAa,SAAW,EAAA;AACxE,UAAA,MAAM,iBAAgB,YAAa,CAAA,SAAA,CAAU,iBAAgB,qBAAyB,IAAA,CAAA,EAAG,iBAAgB,YAAY,CAAA,CAAA;AAAA,SACzH;AACA,QAAgB,gBAAA,CAAA,YAAA,CAAa,UAAU,EAAE,CAAA,CAAA;AAAA,eAEtC,CAAG,EAAA;AACN,QAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,CAAC,CAAA,CAAA;AAChD,QAAA,OAAA;AAAA,OACJ;AACA,MAAA,OAAO,MAAM,gBAAA,CAAgB,cAAkB,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,KACpE,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,OAAoB,SAAwB,CAAA,KAAA,EAA+B,KAA4D,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnI,MAAA,gBAAA,CAAgB,iBAAkB,EAAA,CAAA;AAClC,MAAA,IAAI,UAAiC,GAAA,KAAA,CAAA,CAAA;AACrC,MAAI,IAAA,OAAA,CAAA;AACJ,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC3B,QAAU,OAAA,GAAA,KAAA,CAAA;AAAA,OAET,MAAA;AACD,QAAA,OAAA,GAAU,KAAM,CAAA,EAAA,CAAA;AAChB,QAAI,IAAA,OAAO,KAAM,CAAA,WAAA,KAAgB,QAAU,EAAA;AACvC,UAAA,UAAA,GAAa,KAAM,CAAA,WAAA,CAAA;AAAA,SACvB;AAAA,OACJ;AACA,MAAI,IAAA;AACA,QAAA,IAAI,YAAY,cAAgB,EAAA;AAC5B,UAAI,IAAA,iBAAA,GAAoB,cAAiB,UAAU,CAAA,CAAA;AACnD,UAAA,IAAI,MAAmC,GAAA;AAAA,YACnC,KAAO,EAAA,iBAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,YACN,iBAAmB,EAAA,KAAA;AAAA,YACnB,IAAM,EAAA,OAAA;AAAA,YACN,OAAO,EAAC;AAAA,WACZ,CAAA;AACA,UAAO,OAAA,gBAAA,CAAgB,eAAmB,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAAA,SAC3D;AACA,QAAI,IAAA,SAAA,GAAY,aAAuB,OAAO,CAAA,CAAA;AAC9C,QAAA,IAAI,CAAC,SAAW,EAAA;AACZ,UAAA,MAAM,IAAI,KAAA,CAAM,CAAmB,gBAAA,EAAA,OAAO,CAAY,UAAA,CAAA,CAAA,CAAA;AAAA,SAC1D;AAEA,QAAA,IAAI,gBAAgB,CAAA,YAAA,IAAgB,gBAAgB,CAAA,YAAA,CAAa,SAAW,EAAA;AACxE,UAAA,MAAM,iBAAgB,YAAa,CAAA,SAAA,CAAU,iBAAgB,qBAAyB,IAAA,CAAA,EAAG,iBAAgB,YAAY,CAAA,CAAA;AAAA,SACzH;AACA,QAAgB,gBAAA,CAAA,YAAA,CAAa,UAAU,EAAE,CAAA,CAAA;AAAA,eAEtC,CAAG,EAAA;AACN,QAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,CAAC,CAAA,CAAA;AAChD,QAAA,OAAA;AAAA,OACJ;AACA,MAAA,OAAO,MAAM,gBAAA,CAAgB,cAAkB,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,KACpE,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAoB,eAAmC,CAAA,MAAA,EAAkC,KAA4D,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACjJ,MAAA,IAAI,QAAkB,MAAO,CAAA,KAAA,CAAA;AAC7B,MAAA,IAAI,UAAiC,GAAA,KAAA,CAAA,CAAA;AACrC,MAAI,IAAA,OAAO,KAAM,CAAA,WAAA,KAAgB,QAAU,EAAA;AACvC,QAAA,UAAA,GAAa,KAAM,CAAA,WAAA,CAAA;AAAA,OACvB;AACA,MAAA,IAAI,OAAO,iBAAmB,EAAA;AAC1B,QAAA,gBAAA,CAAgB,iBAAkB,EAAA,CAAA;AAAA,OACtC;AACA,MAAO,OAAA,gBAAA,CAAgB,MAAO,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2EA,OAAoB,MAAA,CAAO,QAAkC,EAAA,KAAA,GAAgB,CAAG,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5E,MAAA,IAAI,SAAS,CAAG,EAAA;AACZ,QAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA,CAAA;AACrD,QAAA,OAAA;AAAA,OACJ;AACA,MAAI,IAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,IAAU,CAAG,EAAA;AAC3C,QAAA,OAAA,CAAQ,KAAK,+BAA+B,CAAA,CAAA;AAC5C,QAAA,OAAA;AAAA,OACJ;AACA,MAAA,IAAI,YAAe,GAAA,gBAAA,CAAgB,cAAe,CAAA,KAAA,EAAO,iBAAgB,gBAAgB,CAAA,CAAA;AACzF,MAAA,IAAI,YAAc,EAAA;AACd,QAAA,gBAAA,CAAgB,iBAAoB,GAAA,YAAA,CAAA;AACpC,QAAgB,gBAAA,CAAA,aAAA,GAAgB,uBAAwB,CAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AACjF,QAAA,IAAI,gBAAgB,CAAA,YAAA,IAAgB,gBAAgB,CAAA,YAAA,CAAa,UAAY,EAAA;AACzE,UAAA,MAAM,iBAAgB,YAAa,CAAA,UAAA,CAAW,iBAAgB,qBAAyB,IAAA,CAAA,EAAG,iBAAgB,YAAY,CAAA,CAAA;AAAA,SAC1H;AACA,QAAA,kBAAA,CAAmB,MAAO,CAAA,uBAAA,CAAwB,YAAa,CAAA,OAAO,CAAC,CAAA,CAAA;AACvE,QAAA,iBAAA,CAAkB,MAAO,CAAA,uBAAA,CAAwB,YAAa,CAAA,MAAM,CAAC,CAAA,CAAA;AACrE,QAAA,QAAA,CAAS,aAAa,IAAI,CAAA,CAAA;AAAA,OAEzB,MAAA;AACD,QAAA,OAAA,CAAQ,MAAM,4BAA4B,CAAA,CAAA;AAAA,OAC9C;AAAA,KACJ,CAAA,CAAA;AAAA,GAAA;AAAA,EACA,OAAe,cAAe,CAAA,KAAA,EAAe,YAAkD,EAAA;AAC3F,IAAA,IAAI,SAAS,CAAG,EAAA;AACZ,MAAO,OAAA,YAAA,CAAA;AAAA,KACX;AACA,IAAI,IAAA,gBAAA,CAAgB,aAAc,CAAA,MAAA,IAAU,CAAG,EAAA;AAC3C,MAAO,OAAA,YAAA,CAAA;AAAA,KACX;AACA,IAAA,IAAI,kBAAkB,gBAAgB,CAAA,eAAA,CAAA;AACtC,IAAA,IAAI,eAAiB,EAAA;AACjB,MAAI,IAAA;AACA,QAAA,IAAI,MAAS,GAAA,sBAAA,CAAuB,YAAc,EAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AACtE,QAAA,gBAAA,CAAgB,iBAAiB,eAAgB,CAAA,KAAA,CAAA;AACjD,QAAA,gBAAA,CAAgB,cAAc,GAAI,EAAA,CAAA;AAClC,QAAA,OAAO,gBAAgB,CAAA,cAAA,CAAe,KAAQ,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,eAEpD,CAAG,EAAA;AACN,QAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,CAAC,CAAA,CAAA;AAChD,QAAO,OAAA,YAAA,CAAA;AAAA,OACX;AAAA,KAEC,MAAA;AACD,MAAO,OAAA,YAAA,CAAA;AAAA,KACX;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA,EAKA,WAAkB,SAAqB,GAAA;AACnC,IAAO,OAAA,gBAAA,CAAgB,cAAc,MAAS,GAAA,CAAA,CAAA;AAAA,GAClD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,KAAQ,GAAA;AAClB,IAAA,gBAAA,CAAgB,gBAAgB,EAAC,CAAA;AACjC,IAAA,gBAAA,CAAgB,gBAAgB,EAAC,CAAA;AAAA,GACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,UAAqB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,MAAuB,GAAA;AACjC,IAAO,OAAA;AAAA,MACH,cAAc,gBAAgB,CAAA,aAAA;AAAA,MAC9B,cAAc,gBAAgB,CAAA,aAAA;AAAA,MAC9B,eAAe,gBAAgB,CAAA,cAAA;AAAA,MAC/B,kBAAkB,gBAAgB,CAAA,iBAAA;AAAA,KACtC,CAAA;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAoB,WAAW,UAAoB,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/C,MAAA,MAAM,gBAAgB,CAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA;AAAA,KACvD,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAoB,OAAO,IAAc,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrC,MAAA,gBAAA,CAAgB,KAAM,EAAA,CAAA;AACtB,MAAI,IAAA;AACA,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,cAAc,CAAG,EAAA;AACrC,UAAgB,gBAAA,CAAA,aAAA,GAAiB,KAAsB,cAAc,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAA,OAAA,CAAQ,KAAK,kEAAkE,CAAA,CAAA;AAAA,SACnF;AACA,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,cAAc,CAAG,EAAA;AACrC,UAAgB,gBAAA,CAAA,aAAA,GAAiB,KAAsB,cAAc,CAAA,CAAA;AAAA,SAEpE,MAAA;AACD,UAAA,OAAA,CAAQ,KAAK,kEAAkE,CAAA,CAAA;AAAA,SACnF;AACA,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,eAAe,CAAG,EAAA;AACtC,UAAgB,gBAAA,CAAA,cAAA,GAAkB,KAAsB,eAAe,CAAA,CAAA;AAAA,SAEtE,MAAA;AACD,UAAA,OAAA,CAAQ,KAAK,mEAAmE,CAAA,CAAA;AAAA,SACpF;AACA,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,kBAAkB,CAAG,EAAA;AACzC,UAAgB,gBAAA,CAAA,iBAAA,GAAqB,KAAsB,kBAAkB,CAAA,CAAA;AAAA,SAE5E,MAAA;AACD,UAAA,OAAA,CAAQ,KAAK,sEAAsE,CAAA,CAAA;AAAA,SACvF;AAEA,QAAA,IAAI,gBAAgB,CAAA,YAAA,IAAgB,gBAAgB,CAAA,YAAA,CAAa,UAAY,EAAA;AACzE,UAAA,MAAM,iBAAgB,YAAa,CAAA,UAAA,CAAW,iBAAgB,qBAAyB,IAAA,CAAA,EAAG,iBAAgB,YAAY,CAAA,CAAA;AAAA,SAC1H;AAAA,eAEG,CAAG,EAAA;AACN,QAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,CAAC,CAAA,CAAA;AAAA,OACrD;AAAA,KACJ,CAAA,CAAA;AAAA,GAAA;AAYJ,CAAA,CAAA;AAAA;AAAA;AAAA;AAroBqB,gBAAA,CAKF,gBAAgC,EAAC,CAAA;AAL/B,gBAAA,CASF,cAAyB,GAAA,CAAA,CAAA;AATvB,gBAAA,CAsBF,gBAAgC,EAAC,CAAA;AAtB/B,gBAAA,CA4DF,iBAAkD,GAAA,KAAA,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA5DhD,gBAAA,CAooBV,OAAqC,GAAA,KAAA,CAAA,CAAA;AApoBhD,IAAqB,eAArB,GAAA,iBAAA;;;ACSA,IAAqB,mBAArB,MAAsC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlC,WAAA,CAAY,YAAoB,EAAY,EAAA;AACxC,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAClB,IAAA,IAAA,CAAK,GAAM,GAAA,EAAA,CAAA;AAAA,GACf;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,EAAa,GAAA;AACb,IAAA,OAAO,IAAK,CAAA,GAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,kBAAA,CAAsB,cAAsB,KAA4B,EAAA;AAC9E,IAAA,IAAI,OAAU,GAAA,kBAAA,CAAmB,WAAiB,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AACjE,IAAA,IAAI,CAAC,OAAS,EAAA;AACV,MAAA,OAAA,GAAU,EAAC,CAAA;AAAA,KACf;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,cAAe,CAAA,IAAA,CAAK,EAAE,CAAG,EAAA;AAClC,MAAQ,OAAA,CAAA,IAAA,CAAK,EAAE,CAAA,GAAI,EAAC,CAAA;AAAA,KACxB;AAEA,IAAI,IAAA,KAAA,KAAU,KAAa,CAAA,IAAA,KAAA,KAAU,IAAM,EAAA;AACvC,MAAA,IAAI,QAAQ,IAAK,CAAA,EAAE,CAAE,CAAA,cAAA,CAAe,YAAY,CAAG,EAAA;AAC/C,QAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA,CAAE,YAAY,CAAA,CAAA;AAAA,OACxC;AAAA,KAEC,MAAA;AACD,MAAA,OAAA,CAAQ,IAAK,CAAA,EAAE,CAAI,GAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA,EAApB,EAAuB,CAAC,YAAY,GAAG,KAAM,EAAA,CAAA,CAAA;AAAA,KACpE;AAEA,IAAI,IAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,WAAW,CAAG,EAAA;AAC5C,MAAO,OAAA,OAAA,CAAQ,KAAK,EAAE,CAAA,CAAA;AAAA,KAC1B;AAEA,IAAmB,kBAAA,CAAA,WAAA,CAAY,IAAK,CAAA,UAAA,EAAY,OAAO,CAAA,CAAA;AAAA,GAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,mBAAsB,YAAqC,EAAA;AACjE,IAAA,IAAI,OAAU,GAAA,kBAAA,CAAmB,WAAiB,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AACjE,IAAA,IAAI,OAAW,IAAA,OAAA,CAAQ,cAAe,CAAA,IAAA,CAAK,EAAE,CAAA,IAAK,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA,CAAE,cAAe,CAAA,YAAY,CAAG,EAAA;AAC7F,MAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA,CAAE,YAAY,CAAA,CAAA;AAAA,KACxC;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACX;AACJ,EAAA;;;AC7DqBO,IAAAA,mBAAAA,GAArB,cAAgD,gBAAoD,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhG,WAAA,CAAY,IAAY,KAAgC,EAAA;AACpD,IAAM,KAAA,CAAA,kBAAA,CAAmB,UAAW,CAAA,sBAAA,EAAwB,EAAE,CAAA,CAAA;AAOlE,IAAA,IAAA,CAAQ,WAAsB,GAAA,EAAA,CAAA;AAN1B,IAAA,IAAA,CAAK,cAAc,KAAM,CAAA,IAAA,CAAA;AACzB,IAAA,IAAA,CAAK,iBAAiB,KAAM,CAAA,OAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,aAAa,KAAM,CAAA,GAAA,CAAA;AACxB,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,IAAA,CAAA;AACnB,IAAA,IAAA,CAAK,SAAS,KAAM,CAAA,KAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAe,GAAA;AACf,IAAA,OAAO,IAAK,CAAA,kBAAA,CAA2B,MAAM,CAAA,IAAK,IAAK,CAAA,WAAA,CAAA;AAAA,GAC3D;AAAA,EACA,IAAI,KAAK,KAA2B,EAAA;AAChC,IAAK,IAAA,CAAA,kBAAA,CAA2B,QAAQ,KAAK,CAAA,CAAA;AAAA,GACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAA8B,GAAA;AAC9B,IAAA,OAAO,IAAK,CAAA,kBAAA,CAA2B,SAAS,CAAA,IAAK,IAAK,CAAA,cAAA,CAAA;AAAA,GAC9D;AAAA,EACA,IAAI,QAAQ,KAA2B,EAAA;AACnC,IAAK,IAAA,CAAA,kBAAA,CAA2B,WAAW,KAAK,CAAA,CAAA;AAAA,GACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,GAA0B,GAAA;AAC1B,IAAA,OAAO,IAAK,CAAA,kBAAA,CAA2B,KAAK,CAAA,IAAK,IAAK,CAAA,UAAA,CAAA;AAAA,GAC1D;AAAA,EACA,IAAI,IAAI,KAA2B,EAAA;AAC/B,IAAK,IAAA,CAAA,kBAAA,CAA2B,OAAO,KAAK,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAA2B,GAAA;AAC3B,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAA4B,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;AAAA,GAChB;AACJ,EAAA;;;AC9DA,IAAqB,oBAArB,MAA2H;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvH,WAAY,CAAA,IAAA,EAA6B,SAAiC,EAAA,YAAA,GAAsD,EAAI,EAAA;AAsBpI;AAAA;AAAA;AAAA,IAAe,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA;AAQf;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,YAAA,GAAsD,EAAC,CAAA;AA7BnD,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC1B,MAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,MAAI,IAAA,OAAO,cAAc,QAAU,EAAA;AAC/B,QAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAAA,OAEhB,MAAA;AACD,QAAA,IAAA,CAAK,YAAY,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA;AAAA,OAChC;AACA,MAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AAAA,KAEnB,MAAA;AACD,MAAA,IAAA,CAAK,OAAO,IAAK,CAAA,IAAA,CAAA;AACjB,MAAA,IAAI,KAAK,SAAW,EAAA;AAChB,QAAA,IAAA,CAAK,YAAY,IAAK,CAAA,SAAA,CAAA;AAAA,OAC1B;AACA,MAAK,IAAA,CAAA,YAAA,GAAe,IAAK,CAAA,YAAA,IAAgB,EAAC,CAAA;AAAA,KAC9C;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAuB,GAAA;AACnB,IAAO,OAAA;AAAA,MACH,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,WAAW,IAAK,CAAA,SAAA;AAAA,MAChB,cAAc,IAAK,CAAA,YAAA;AAAA,KACvB,CAAA;AAAA,GACJ;AACJ,EAAA;;;AClEqBN,IAAAA,UAAAA,GAArB,cAA0D,aAA+B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrF,WAAA,CAAY,EAAiB,EAAA,KAAA,EAA0D,KAAkC,EAAA;AACrH,IAAA,KAAA,CAAM,IAAI,KAAK,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAMA,IAAW,KAA4B,GAAA;AACnC,IAAI,IAAA,OAAO,IAAK,CAAA,MAAA,KAAW,UAAY,EAAA;AACnC,MAAA,OAAO,IAAK,CAAA,MAAA,EAAS,CAAA,GAAA,CAAI,KAAK,aAAa,CAAA,CAAA;AAAA,KAC/C;AACA,IAAA,OAAO,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAAA,GAC7C;AAAA,EAEQ,cAAc,IAA2C,EAAA;AAC7D,IAAA,OAAO,CAAC,KAAU,KAAA;AACd,MAAA,IAAI,KAAK,OAAS,EAAA;AACd,QAAA,IAAI,OAAU,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACvC,UAAA,IAAI,IAAe,GAAA,EAAA,CAAA;AACnB,UAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAI,CAAG,EAAA;AAC5B,YAAO,IAAA,GAAA,MAAA,CAAO,KAAK,IAAK,EAAA,CAAA;AAAA,WAEvB,MAAA;AACD,YAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAA;AAAA,WAClB;AACA,UAAO,OAAA,IAAI,iBAAiB,IAAM,EAAA,MAAA,CAAO,OAAO,MAAO,CAAA,KAAA,EAAO,OAAO,IAAI,CAAA,CAAA;AAAA,SAC5E,CAAA,CAAA;AACD,QAAA,oBAAA,CAAqB,OAAO,CAAA,CAAA;AAAA,OAE3B,MAAA;AACD,QAAuB,sBAAA,EAAA,CAAA;AAAA,OAC3B;AAEA,MAAA,IAAI,KAAK,WAAa,EAAA;AAClB,QAAQ,OAAA,CAAA,kBAAA,CAAmB,UAAW,CAAA,qDAAA,EAAuD,IAAI,CAAA,CAAA;AAAA,OACrG,MAAA,IACS,IAAK,CAAA,WAAA,KAAgB,KAAO,EAAA;AACjC,QAAQ,OAAA,CAAA,kBAAA,CAAmB,UAAW,CAAA,qDAAA,EAAuD,KAAK,CAAA,CAAA;AAAA,OACtG;AACA,MAAA,IAAI,KAAK,MAAQ,EAAA;AACb,QAAA,WAAA,CAAY,KAAK,MAAM,CAAA,CAAA;AAAA,OAC3B;AAEA,MAAA,IAAI,KAAK,WAAa,EAAA;AAClB,QAAI,IAAA,IAAA,CAAK,WAAY,CAAA,IAAA,KAAS,MAAQ,EAAA;AAClC,UAAA,eAAA,CAAgB,SAAU,CAAA,IAAA,CAAK,WAAY,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAAA,SAExD,MAAA;AACD,UAAA,eAAA,CAAgB,SAAU,CAAA,IAAA,CAAK,WAAY,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAAA,SAC7D;AAAA,OACJ;AAEA,MAAA,IAAI,KAAK,UAAY,EAAA;AACjB,QAAA,eAAA,CAAgB,OAAO,KAAK,CAAA,CAAA;AAAA,OAChC;AAEA,MAAI,IAAA,IAAA,CAAK,QAAQ,UAAY,EAAA;AACzB,QAAA,eAAA,CAAgB,cAAe,EAAA,CAAA;AAC/B,QAAA,eAAA,CAAgB,OAAO,KAAK,CAAA,CAAA;AAAA,OAChC,MAAA,IACS,IAAK,CAAA,GAAA,KAAQ,WAAa,EAAA;AAC/B,QAAA,eAAA,CAAgB,iBAAkB,EAAA,CAAA;AAAA,OACtC;AAAA,KACJ,CAAA;AAAA,GACJ;AACJ,EAAA;;;AC/Ea,IAAA,QAAA,GAAW,IAAIM,mBAAAA,CAAmB,uBAAyB,EAAA;AAAA,EACpE,IAAM,EAAA,UAAA;AAAA,EACN,GAAK,EAAA,EAAA;AAAA,EACL,IAAM,EAAA,wHAAA;AAAA,EACN,KAAO,EAAA,SAAA;AACX,CAAC,EAAA;AAED,aAAA,CAAc,QAAQ,CAAA,CAAA;AAEf,IAAM,YAAe,GAAA,uCAAA,CAAA;AACrB,IAAM,WAAc,GAAA,CAAA,0CAAA,CAAA,CAAA;AACpB,IAAM,cAAiB,GAAA,yCAAA,CAAA;AACvB,IAAM,aAAgB,GAAA,CAAA,2CAAA,CAAA,CAAA;AACtB,IAAM,YAAe,GAAA,uCAAA,CAAA;AACrB,IAAM,WAAc,GAAA,CAAA,uCAAA,CAAA,CAAA;AACpB,IAAM,WAAc,GAAA,sCAAA,CAAA;AACpB,IAAM,UAAa,GAAA,CAAA,qCAAA,CAAA,CAAA;AACnB,IAAM,UAAa,GAAA,qCAAA,CAAA;AACnB,IAAM,SAAY,GAAA,CAAA,KAAA,CAAA,CAAA;;;ACbzB,IAAM,yBAA4B,GAAA,yCAAA,CAAA;AAE3B,IAAM,0BAA6B,GAAA,QAAA;AAAA,EAAS,yBAAA;AAAA,EAC/C;AAAA,IACI,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,MAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,MAAY,WAAA,CAAA;AAAA,QACR,SAAW,EAAA,QAAA;AAAA,QACX,IAAA,EAAM,sDAAsD,MAAM,CAAA,2DAAA,CAAA;AAAA,OACrE,CAAA,CAAA;AAGD,MAAM,MAAA,SAAA,GAAY,IAAI,eAAgB,EAAA,CAAA;AAEtC,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,aAAa,SAAS,CAAA,CAAA;AAGzD,MAAA,MAAM,OAAU,GAAA,MAAMC,MAAO,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAG5C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC7B,QAAM,MAAA,KAAA,GAAQ,IAAI,YAAA,CAAa,OAAO,CAAA,CAAA;AAEtC,QAAM,KAAA,CAAA,CAAA,GAAK,IAAI,CAAK,GAAA,EAAA,CAAA;AACpB,QAAA,KAAA,CAAM,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,GAAI,CAAC,CAAI,GAAA,EAAA,CAAA;AAC9B,QAAA,SAAA,CAAU,SAAS,KAAK,CAAA,CAAA;AAAA,OAC5B;AAGA,MAAU,SAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,CAAA;AAC/C,MAAU,SAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA;AAGhD,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,SAAA,CAAU,KAAQ,GAAA,CAAA,CAAA;AACtC,MAAU,SAAA,CAAA,KAAA,CAAM,CAAI,GAAA,SAAA,CAAU,MAAS,GAAA,CAAA,CAAA;AAEvC,MAAkB,iBAAA,CAAA,SAAA,CAAU,aAAa,IAAI,YAAA,CAAa,EAAE,KAAO,EAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KAC3E,CAAA;AAAA,IACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,MAAA,mBAAA,CAAoB,WAAW,CAAA,CAAA;AAC/B,MAAY,WAAA,CAAA;AAAA,QACR,SAAW,EAAA,QAAA;AAAA,QACX,IAAM,EAAA,CAAA;AAAA,wOAAA,CAAA;AAAA,OAET,CAAA,CAAA;AAED,MAAM,MAAA,UAAA,GAAa,IAAIC,SAAU,CAAA;AAAA,QAC7B,IAAM,EAAA,SAAA;AAAA,OACT,CAAA,CAAA;AACD,MAAM,MAAA,SAAA,GAAY,IAAI,UAAW,CAAA;AAAA,QAC7B,IAAM,EAAA,oBAAA;AAAA,QACN,KAAO,EAAA,UAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAA,SAAA,CAAU,CAAI,GAAA,EAAA,CAAA;AACd,MAAA,SAAA,CAAU,CAAI,GAAA,GAAA,CAAA;AAEd,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,aAAa,SAAS,CAAA,CAAA;AAGzD,MAAM,MAAA,IAAA,GAAO,IAAIC,YAAa,CAAA,CAAA,EAAG,GAAG,CAAG,EAAA,EAAA,GAAK,MAAM,CAAC,CAAA,CAAA;AAEnD,MAAA,MAAM,MAAS,GAAA,CAAC,QAAU,EAAA,KAAQ,EAAE,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,MAAO,CAAA,QAAA,CAAS,KAAK,CAAA,CAAE,UAAU,CAAA,CAAA;AAE1F,MAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAU,KAAA;AAC9B,QAAM,MAAA,KAAA,GAAQ,QAAQ,MAAO,CAAA,MAAA,CAAA;AAE7B,QAAK,IAAA,CAAA,YAAA,CAAa,OAAO,MAAM,CAAA,CAAA;AAAA,OAClC,CAAA,CAAA;AAED,MAAM,MAAA,KAAA,GAAQ,IAAID,SAAU,CAAA;AAAA,QACxB,UAAY,EAAA,OAAA;AAAA,QACZ,QAAU,EAAA,EAAA;AAAA,QACV,SAAW,EAAA,QAAA;AAAA,QACX,UAAY,EAAA,MAAA;AAAA,QACZ,IAAA,EAAM,EAAE,IAAK,EAAA;AAAA,QACb,QAAQ,EAAE,KAAA,EAAO,WAAW,KAAO,EAAA,CAAA,EAAG,MAAM,OAAQ,EAAA;AAAA,QACpD,UAAY,EAAA;AAAA,UACR,KAAO,EAAA,SAAA;AAAA,UACP,IAAM,EAAA,CAAA;AAAA,UACN,KAAA,EAAO,KAAK,EAAK,GAAA,CAAA;AAAA,UACjB,QAAU,EAAA,CAAA;AAAA,SACd;AAAA,QACA,QAAU,EAAA,IAAA;AAAA,QACV,aAAe,EAAA,GAAA;AAAA,OAClB,CAAA,CAAA;AAED,MAAM,MAAA,QAAA,GAAW,IAAI,UAAW,CAAA;AAAA,QAC5B,IAAM,EAAA,2DAAA;AAAA,QACN,KAAA;AAAA,OACH,CAAA,CAAA;AAED,MAAA,QAAA,CAAS,CAAI,GAAA,EAAA,CAAA;AACb,MAAA,QAAA,CAAS,CAAI,GAAA,GAAA,CAAA;AAEb,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,YAAY,QAAQ,CAAA,CAAA;AAEvD,MAAM,MAAA,SAAA,GAAY,IAAIA,SAAU,CAAA;AAAA,QAC5B,UAAY,EAAA,OAAA;AAAA,QACZ,UAAY,EAAA;AAAA,UACR,KAAO,EAAA,GAAA;AAAA,UACP,KAAO,EAAA,GAAA;AAAA,UACP,IAAM,EAAA,CAAA;AAAA,UACN,KAAO,EAAA,UAAA;AAAA,UACP,QAAU,EAAA,EAAA;AAAA,SACd;AAAA,QACA,IAAM,EAAA,SAAA;AAAA,QACN,QAAQ,EAAE,KAAA,EAAO,WAAW,KAAO,EAAA,EAAA,EAAI,MAAM,OAAQ,EAAA;AAAA,QACrD,QAAU,EAAA,EAAA;AAAA,QACV,UAAY,EAAA,SAAA;AAAA,OACf,CAAA,CAAA;AAED,MAAM,MAAA,QAAA,GAAW,IAAI,UAAW,CAAA;AAAA,QAC5B,IAAM,EAAA,cAAA;AAAA,QACN,KAAO,EAAA,SAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAS,QAAA,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,CAAI,GAAA,CAAA,CAAA;AAC5B,MAAS,QAAA,CAAA,MAAA,CAAO,GAAI,CAAA,GAAA,EAAK,GAAG,CAAA,CAAA;AAC5B,MAAA,QAAA,CAAS,CAAI,GAAA,GAAA,CAAA;AACb,MAAA,QAAA,CAAS,CAAI,GAAA,GAAA,CAAA;AAEb,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,YAAY,QAAQ,CAAA,CAAA;AAAA,KAC3D,CAAA;AAAA,GACJ;AACJ,CAAA,CAAA;AC3HO,IAAM,UAAA,GAAN,cAAyB,WAA0B,CAAA;AAAA,EAC7C,EAAA,CAAG,OAA6B,MAA4B,EAAA;AACjE,IAAA,IAAI,UAAU,aAAe,EAAA;AACzB,MAAA,MAAA,CAAO,MAAM,CAAK,IAAA,IAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,CAAK,IAAA,IAAA,CAAA;AAAA,KACtB;AAAA,GACJ;AACJ,CAAA,CAAA;AAPa,UAAN,GAAA,eAAA,CAAA;AAAA,EADN,eAAe,yCAAyC,CAAA;AAAA,CAC5C,EAAA,UAAA,CAAA,CAAA;AASN,IAAM,UAAA,GAAN,cAAyB,WAA0B,CAAA;AAAA,EAC7C,EAAA,CAAG,OAA6B,MAA4B,EAAA;AACjE,IAAA,IAAI,UAAU,aAAe,EAAA;AACzB,MAAC,OAAe,MAAS,GAAA,IAAA,CAAA;AACzB,MAAO,MAAA,CAAA,OAAA,GAAUE,OAAQ,CAAA,IAAA,CAAK,2CAA2C,CAAA,CAAA;AACzE,MAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,CAAA;AAAA,KAEV,MAAA,IAAA,KAAA,KAAU,WAAe,IAAA,KAAA,KAAU,kBAAoB,EAAA;AAC5D,MAAC,OAAe,MAAS,GAAA,KAAA,CAAA;AACzB,MAAA,IAAK,OAAe,MAAQ,EAAA;AACxB,QAAO,MAAA,CAAA,OAAA,GAAUA,OAAQ,CAAA,IAAA,CAAK,2CAA2C,CAAA,CAAA;AAAA,OAExE,MAAA;AACD,QAAO,MAAA,CAAA,OAAA,GAAUA,OAAQ,CAAA,IAAA,CAAK,sCAAsC,CAAA,CAAA;AAAA,OACxE;AAAA,KACJ,MAAA,IACS,UAAU,aAAe,EAAA;AAC9B,MAAC,OAAe,MAAS,GAAA,IAAA,CAAA;AACzB,MAAA,IAAK,OAAe,MAAQ,EAAA;AACxB,QAAA,OAAA;AAAA,OACJ;AACA,MAAO,MAAA,CAAA,OAAA,GAAUA,OAAQ,CAAA,IAAA,CAAK,2CAA2C,CAAA,CAAA;AAAA,KAC7E,MAAA,IACS,UAAU,YAAc,EAAA;AAC7B,MAAC,OAAe,MAAS,GAAA,KAAA,CAAA;AACzB,MAAA,IAAK,OAAe,MAAQ,EAAA;AACxB,QAAA,OAAA;AAAA,OACJ;AACA,MAAO,MAAA,CAAA,OAAA,GAAUA,OAAQ,CAAA,IAAA,CAAK,sCAAsC,CAAA,CAAA;AAAA,KACxE;AAAA,GACJ;AACJ,CAAA,CAAA;AA/Ba,UAAN,GAAA,eAAA,CAAA;AAAA,EADN,eAAe,yCAAyC,CAAA;AAAA,CAC5C,EAAA,UAAA,CAAA,CAAA;AAiCb,IAAM,wBAA2B,GAAA,kCAAA,CAAA;AAE1B,IAAM,qBAAwB,GAAA,QAAA;AAAA,EAAS,wBAAA;AAAA,EAC1C;AAAA,IACI,MAAM,WAAY,CAAA;AAAA,MACd,SAAW,EAAA,QAAA;AAAA,MACX,IAAM,EAAA,qDAAA;AAAA,KACT,CAAA;AAAA,IACD,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,MAAY,WAAA,CAAA;AAAA,QACR,SAAW,EAAA,QAAA;AAAA,QACX,IAAA,EAAM,sBAAsB,SAAS,CAAA,kLAAA,CAAA;AAAA,OACxC,CAAA,CAAA;AAGD,MAAA,MAAM,OAAU,GAAA,MAAMH,MAAO,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAG5C,MAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AACxC,MAAO,MAAA,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAGlB,MAAO,MAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AACrB,MAAO,MAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,CAAA;AAC5C,MAAO,MAAA,CAAA,CAAA,GAAI,iBAAkB,CAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA;AAG7C,MAAA,MAAA,CAAO,SAAY,GAAA,QAAA,CAAA;AAGnB,MAAA,MAAA,CAAO,MAAS,GAAA,SAAA,CAAA;AAGhB,MAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,UAAU,CAAA,CAAA;AAMxC,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM,CAAA,CAAA;AAAA,KACtD,CAAA;AAAA,IACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,MAAA,iBAAA,CAAkB,KAAM,EAAA,CAAA;AACxB,MAAY,WAAA,CAAA;AAAA,QACR,SAAW,EAAA,QAAA;AAAA,QACX,IAAM,EAAA,CAAA,oJAAA,CAAA;AAAA,OACT,CAAA,CAAA;AAGD,MAAA,MAAM,WAAc,GAAA,MAAMA,MAAO,CAAA,IAAA,CAAK,yCAAyC,CAAA,CAAA;AAC/E,MAAM,MAAA,UAAA,GAAa,IAAI,YAAA,CAAa,WAAW,CAAA,CAAA;AAE/C,MAAW,UAAA,CAAA,KAAA,GAAQ,kBAAkB,MAAO,CAAA,KAAA,CAAA;AAC5C,MAAW,UAAA,CAAA,MAAA,GAAS,kBAAkB,MAAO,CAAA,MAAA,CAAA;AAG7C,MAAkB,iBAAA,CAAA,gBAAA,CAAiB,MAAM,UAAU,CAAA,CAAA;AAGnD,MAAA,MAAM,aAAgB,GAAA,MAAMA,MAAO,CAAA,IAAA,CAAK,sCAAsC,CAAA,CAAA;AAE9E,MAAA,MAAM,UAAU,EAAC,CAAA;AAEjB,MAAM,MAAA,eAAA,GAAkB,CAAC,GAAA,EAAK,EAAI,EAAA,GAAA,EAAK,EAAI,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,GAAG,CAAA,CAAA;AAEvE,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AACxB,QAAM,MAAA,MAAA,GAAS,IAAI,YAAA,CAAa,aAAa,CAAA,CAAA;AAE7C,QAAO,MAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AACrB,QAAO,MAAA,CAAA,CAAA,GAAI,eAAgB,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAChC,QAAA,MAAA,CAAO,CAAI,GAAA,eAAA,CAAgB,CAAI,GAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAGpC,QAAA,MAAA,CAAO,SAAY,GAAA,QAAA,CAAA;AACnB,QAAA,MAAA,CAAO,MAAS,GAAA,SAAA,CAAA;AAEhB,QAAA,MAAA,CAIK,QAAQ,aAAe,EAAA,UAAU,EACjC,OAAQ,CAAA,WAAA,EAAa,UAAU,CAC/B,CAAA,OAAA,CAAQ,kBAAoB,EAAA,UAAU,EACtC,OAAQ,CAAA,aAAA,EAAe,UAAU,CACjC,CAAA,OAAA,CAAQ,cAAc,UAAU,CAAA,CAAA;AAGrC,QAAkB,iBAAA,CAAA,gBAAA,CAAiB,QAAW,GAAA,CAAA,EAAG,MAAM,CAAA,CAAA;AAGvD,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,OACvB;AAGA,MAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAM,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACxB,MAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAW,GAAA,IAAA,CAAK,EAAK,GAAA,EAAA,CAAA;AAChC,MAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAM,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACxB,MAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAM,CAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAC7B,MAAQ,OAAA,CAAA,CAAC,CAAE,CAAA,QAAA,GAAW,IAAK,CAAA,EAAA,CAAA;AAAA,KAC/B,CAAA;AAAA,GACJ;AAAA,EACA;AAAA,IACI,YAAY,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACpB,MAAA,MAAMA,OAAO,IAAK,CAAA;AAAA,QACd,yCAAA;AAAA,QACA,sCAAA;AAAA,QACA,2CAAA;AAAA,QACA,2CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KACL,CAAA;AAAA,GACJ;AACJ,CAAA,CAAA;ACnJA,IAAM,gBAAA,GAAN,cAA+B,YAAkC,CAAA;AAAA,EAAjE,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAeI,IAAoB,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA;AACpB,IAAuB,IAAA,CAAA,YAAA,GAAA,CAAA,CAAA;AACvB,IAAgB,IAAA,CAAA,KAAA,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAhBhB,IAAa,MAAS,GAAA;AAClB,IAAO,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACA,MAAM,MADN,CAAA,EAAA;AAAA,MAEH,WAAW,IAAK,CAAA,SAAA;AAAA,MAChB,cAAc,IAAK,CAAA,YAAA;AAAA,MACnB,OAAO,IAAK,CAAA,KAAA;AAAA,KAChB,CAAA,CAAA;AAAA,GACJ;AAAA,EACA,IAAa,OAAO,MAA6B,EAAA;AAC7C,IAAA,KAAA,CAAM,MAAS,GAAA,MAAA,CAAA;AACf,IAAA,IAAA,CAAK,YAAY,MAAO,CAAA,SAAA,CAAA;AACxB,IAAA,IAAA,CAAK,eAAe,MAAO,CAAA,YAAA,CAAA;AAC3B,IAAA,IAAA,CAAK,QAAQ,MAAO,CAAA,KAAA,CAAA;AAAA,GACxB;AAAA,EAIA,OAAgB,IAAK,CAAA,MAAA,EAAqC,SAAqB,EAAA;AAC3E,IAAA,IAAI,MAAST,GAAAA,MAAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAC1C,IAAI,IAAA,QAAA,GAAW,IAAI,gBAAiB,EAAA,CAAA;AACpC,IAAA,QAAA,CAAS,UAAU,MAAO,CAAA,OAAA,CAAA;AAC1B,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AACJ,CAAA,CAAA;AAxBM,gBAAN,GAAA,eAAA,CAAA;AAAA,EADC,uBAAuB,qCAAqC,CAAA;AAAA,CACvD,EAAA,gBAAA,CAAA,CAAA;AA2BC,IAAM,iBAAA,GAAN,cAAgC,UAAe,CAAA;AAAA,EAClD,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAAA,GACZ;AAAA,EACS,EAAA,CAAG,EAAY,EAAA,KAAA,EAAW,IAAsB,EAAA;AACrD,IAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAElB,MAAA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAC1B,MAAA,MAAM,aAAa,IAAI,SAAA;AAAA,QAAU,CAAC,iBAAA;AAAA,QAC9B,CAAC,iBAAA;AAAA,QACD,iBAAA,CAAkB,MAAO,CAAA,KAAA,GAAQ,iBAAoB,GAAA,CAAA;AAAA,QACrD,iBAAA,CAAkB,MAAO,CAAA,MAAA,GAAS,iBAAoB,GAAA,CAAA;AAAA,OAAC,CAAA;AAC3D,MAAI,IAAA,IAAA,GAAO,iBAAkB,CAAA,gBAAA,CAAiB,GAAG,CAAA,CAAA;AACjD,MAAI,IAAA,IAAA,IAAQ,gBAAgB,gBAAkB,EAAA;AAE1C,QAAK,IAAA,CAAA,SAAA,IAAa,KAAK,YAAe,GAAA,IAAA,CAAA;AACtC,QAAA,IAAA,CAAK,KAAK,IAAK,CAAA,GAAA,CAAI,IAAK,CAAA,SAAS,IAAI,IAAK,CAAA,KAAA,CAAA;AAC1C,QAAA,IAAA,CAAK,KAAK,IAAK,CAAA,GAAA,CAAI,IAAK,CAAA,SAAS,IAAI,IAAK,CAAA,KAAA,CAAA;AAC1C,QAAA,IAAA,CAAK,QAAW,GAAA,CAAC,IAAK,CAAA,SAAA,GAAY,KAAK,EAAK,GAAA,CAAA,CAAA;AAG5C,QAAI,IAAA,IAAA,CAAK,CAAI,GAAA,UAAA,CAAW,CAAG,EAAA;AACvB,UAAA,IAAA,CAAK,KAAK,UAAW,CAAA,KAAA,CAAA;AAAA,mBAEhB,IAAK,CAAA,CAAA,GAAI,UAAW,CAAA,CAAA,GAAI,WAAW,KAAO,EAAA;AAC/C,UAAA,IAAA,CAAK,KAAK,UAAW,CAAA,KAAA,CAAA;AAAA,SACzB;AAEA,QAAI,IAAA,IAAA,CAAK,CAAI,GAAA,UAAA,CAAW,CAAG,EAAA;AACvB,UAAA,IAAA,CAAK,KAAK,UAAW,CAAA,MAAA,CAAA;AAAA,mBAEhB,IAAK,CAAA,CAAA,GAAI,UAAW,CAAA,CAAA,GAAI,WAAW,MAAQ,EAAA;AAChD,UAAA,IAAA,CAAK,KAAK,UAAW,CAAA,MAAA,CAAA;AAAA,SACzB;AAAA,OACJ;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AACJ,CAAA,CAAA;AArCa,iBAAN,GAAA,eAAA,CAAA;AAAA,EADN,gBAAgB,6BAA6B,CAAA;AAAA,CACjC,EAAA,iBAAA,CAAA,CAAA;AAuCb,IAAM,uCAA0C,GAAA,iDAAA,CAAA;AAKzC,IAAM,kCAAqC,GAAA,QAAA;AAAA,EAAS,uCAAA;AAAA,EACvD;AAAA,IACI,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,MAAA,MAAM,UAAa,GAAA,GAAA,CAAA;AAEnB,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,EAAY,CAAK,EAAA,EAAA;AAEjC,QAAA,MAAM,OAAU,GAAA,MAAMS,MAAO,CAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAC9C,QAAM,MAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAG1C,QAAK,IAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AAGnB,QAAA,IAAA,CAAK,MAAM,GAAI,CAAA,GAAA,GAAM,IAAK,CAAA,MAAA,KAAW,GAAG,CAAA,CAAA;AAGxC,QAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,MAAO,EAAA,GAAI,kBAAkB,MAAO,CAAA,KAAA,CAAA;AAClD,QAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,MAAO,EAAA,GAAI,kBAAkB,MAAO,CAAA,MAAA,CAAA;AAElD,QAAK,IAAA,CAAA,IAAA,GAAO,IAAK,CAAA,MAAA,EAAW,GAAA,QAAA,CAAA;AAI5B,QAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAK,MAAO,EAAA,GAAI,KAAK,EAAK,GAAA,CAAA,CAAA;AAG3C,QAAK,IAAA,CAAA,YAAA,GAAe,IAAK,CAAA,MAAA,EAAW,GAAA,GAAA,CAAA;AAGpC,QAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAW,GAAA,CAAA,CAAA;AAEjC,QAAkB,iBAAA,CAAA,gBAAA,CAAiB,OAAU,GAAA,CAAA,EAAG,IAAI,CAAA,CAAA;AACpD,QAAA,iBAAA,CAAkB,SAAU,CAAA,OAAA,GAAU,CAAG,EAAA,IAAI,mBAAmB,CAAA,CAAA;AAAA,OACpE;AACA,MAAY,WAAA,CAAA;AAAA,QACR,SAAW,EAAA,QAAA;AAAA,QACX,IAAM,EAAA,CAAA,kFAAA,EAAqF,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,2QAAA,CAAA;AAAA,OACvH,CAAA,CAAA;AAAA,KACL,CAAA;AAAA,GACJ;AACJ,CAAA,CAAA;;;ACvHA,IAAM,0BAA6B,GAAA,sCAAA,CAAA;AAC5B,IAAM,oBAAA,GAAuB,SAAS,0BAA4B,EAAA;AAAA,EACrE,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,CAA2B,wBAAA,EAAA,WAAW,CAAK,EAAA,EAAA,aAAa,CAAK,EAAA,EAAA,WAAW,CAAQ,KAAA,EAAA,UAAU,wDAAwD,CAAA,CAAA;AAC3L,IAAI,IAAA,OAAA,GAAU,QAAS,CAAA,SAAA,EAAW,YAAY,CAAA,CAAA;AAC9C,IAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACnB,IAAA,OAAA,CAAQ,CAAI,GAAA,GAAA,CAAA;AACZ,IAAA,OAAA,CAAQ,CAAI,GAAA,GAAA,CAAA;AACZ,IAAI,IAAA,SAAA,GAAY,QAAS,CAAA,WAAA,EAAa,cAAc,CAAA,CAAA;AACpD,IAAA,SAAA,CAAU,CAAI,GAAA,GAAA,CAAA;AACd,IAAA,SAAA,CAAU,CAAI,GAAA,GAAA,CAAA;AACd,IAAA,SAAA,CAAU,IAAK,EAAA,CAAA;AACf,IAAI,IAAA,OAAA,GAAU,QAAS,CAAA,SAAA,EAAW,YAAY,CAAA,CAAA;AAC9C,IAAA,OAAA,CAAQ,CAAI,GAAA,GAAA,CAAA;AACZ,IAAA,OAAA,CAAQ,CAAI,GAAA,GAAA,CAAA;AACZ,IAAI,IAAA,MAAA,GAAS,QAAS,CAAA,QAAA,EAAU,WAAW,CAAA,CAAA;AAC3C,IAAA,MAAA,CAAO,CAAI,GAAA,GAAA,CAAA;AACX,IAAA,MAAA,CAAO,CAAI,GAAA,GAAA,CAAA;AACX,IAAA,MAAM,SAAU,CAAA,CAAC,OAAS,EAAA,MAAM,CAAC,CAAA,CAAA;AAAA,GACrC,CAAA;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,4BAA4B,CAAA,CAAA;AACrE,IAAqB,oBAAA,CAAA;AAAA,MACjB,IAAI,gBAAA,CAAiB,iBAAmB,EAAA,kBAAA,EAAoB,EAAE,CAAA;AAAA,MAC9D,IAAI,gBAAA,CAAiB,aAAe,EAAA,cAAA,EAAgB,EAAE,CAAA;AAAA,MACtD,IAAI,gBAAA,CAAiB,QAAU,EAAA,gBAAA,EAAkB,EAAE,CAAA;AAAA,MACnD,IAAI,gBAAA,CAAiB,MAAQ,EAAA,cAAA,EAAgB,EAAE,CAAA;AAAA,MAC/C,IAAI,gBAAA,CAAiB,MAAQ,EAAA,cAAA,EAAgB,EAAE,CAAA;AAAA,MAC/C,IAAI,gBAAA,CAAiB,aAAe,EAAA,mBAAA,EAAqB,EAAE,CAAA;AAAA,MAC3D,IAAI,gBAAA,CAAiB,aAAe,EAAA,mBAAA,EAAqB,EAAE,CAAA;AAAA,MAC3D,IAAI,qBAAsB,CAAA,QAAA,EAAU,IAAI,CAAA;AAAA,KAC3C,CAAA,CAAA;AAAA,GACL,CAAA;AAAA,EACA,CAAC,KAAA,KAAU,eAAgB,CAAA,SAAA,CAAU,4BAA4B,KAAK,CAAA;AAC1E,CAAC,CAAA,CAAA;AAED,IAAM,kBAAA,GAAqB,SAAS,oCAAsC,EAAA;AAAA,EACtE,MAAM;AACF,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EACnC,EAAA,WAAW,2DAA2D,WAAW,CAAA;AAAA,EACjF,EAAA,WAAW,2BAA2B,aAAa,CAAA;AAAA,EAAA,EACnD,WAAW,CAAA;AAAA,EAAA,EACX,UAAU,CAAA,0FAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAA,4BAAA,CAA6B,CAAC,SAAS,CAAA,EAAG,EAAE,QAAA,EAAU,GAAG,CAAA,CAAA;AACzD,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAA,0BAAA,CAA2B,WAAa,EAAA,OAAA,EAAS,EAAE,QAAA,EAAU,GAAG,CAAA,CAAA;AAChE,IAAkB,iBAAA,CAAA,eAAA;AAAA,MAAgB,SAAA;AAAA,MAC9B;AAAA,QACI,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,WACP,CAAC,CAAA;AAAA,QACJ,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,WACP,CAAC,CAAA;AAAA,QACJ,MAAA;AAAA,OACJ;AAAA,KACJ,CAAA;AACA,IAAkB,iBAAA,CAAA,eAAA;AAAA,MAAgB,QAAA;AAAA,MAC9B;AAAA,QACI,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,UACN,KAAO,EAAA,GAAA;AAAA,WACR,CAAC,CAAA;AAAA,QACJ,MAAM,GAAG,CAAA;AAAA,QACT,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,WACP,CAAC,CAAA;AAAA,OACR;AAAA,KACJ,CAAA;AAAA,GACJ;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,0BAAA,CAA2B,SAAW,EAAA,YAAA,EAAc,EAAE,QAAA,EAAU,KAAK,CAAA,CAAA;AAAA,GACzE,CAAA;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,cAAA,GAAiB,SAAS,gCAAkC,EAAA;AAAA,EAC9D,MAAM;AACF,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EACnC,EAAA,WAAW,2DAA2D,WAAW,CAAA;AAAA,EACjF,EAAA,WAAW,2BAA2B,aAAa,CAAA;AAAA,EAAA,EACnD,WAAW,CAAA;AAAA,EAAA,EACX,UAAU,CAAA,0FAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAA,wBAAA,CAAyB,CAAC,SAAS,CAAA,EAAG,EAAE,QAAA,EAAU,GAAG,CAAA,CAAA;AACrD,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAA,sBAAA,CAAuB,WAAa,EAAA,OAAA,EAAS,EAAE,QAAA,EAAU,GAAG,CAAA,CAAA;AAC5D,IAAkB,iBAAA,CAAA,eAAA;AAAA,MAAgB,SAAA;AAAA,MAC9B;AAAA,QACI,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,SACT,CAAA;AAAA,QACD,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,SACT,CAAA;AAAA,QACD,MAAA;AAAA,OACJ;AAAA,KACJ,CAAA;AACA,IAAkB,iBAAA,CAAA,eAAA;AAAA,MAAgB,QAAA;AAAA,MAC9B;AAAA,QACI,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,UACN,KAAO,EAAA,GAAA;AAAA,SACV,CAAA;AAAA,QACD,MAAM,GAAG,CAAA;AAAA,QACT,IAAI,eAAgB,CAAA;AAAA,UAChB,QAAU,EAAA,CAAA;AAAA,UACV,IAAM,EAAA,MAAA;AAAA,SACT,CAAA;AAAA,OACL;AAAA,KACJ,CAAA;AAAA,GACJ;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAI,IAAA,UAAA,GAAa,iBAAkB,CAAA,gBAAA,CAA8B,SAAS,CAAA,CAAA;AAC1E,IAAI,IAAA,UAAA;AACA,MAAA,UAAA,CAAW,KAAQ,GAAA,CAAA,CAAA;AACvB,IAAA,sBAAA,CAAuB,SAAW,EAAA,YAAA,EAAc,EAAE,QAAA,EAAU,KAAK,CAAA,CAAA;AAAA,GACrE,CAAA;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,gBAAA,GAAmB,SAAS,kCAAoC,EAAA;AAAA,EAClE,MAAM;AACF,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EAAA,EACnC,WAAW,CAAA;AAAA,EAAA,EACX,aAAa,CAAA;AAAA,EAAA,EACb,WAAW,CAAA;AAAA,EAAA,EACX,UAAU,CAAA,6HAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAA8B,SAAS,CAAA,CAAA;AACvE,IAAI,IAAA,OAAA;AACA,MAAQ,OAAA,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACxB,IAAI,IAAA,SAAA,GAAY,iBAAkB,CAAA,gBAAA,CAA8B,WAAW,CAAA,CAAA;AAC3E,IAAI,IAAA,SAAA;AACA,MAAU,SAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AAC5B,IAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAA8B,SAAS,CAAA,CAAA;AACvE,IAAI,IAAA,OAAA;AACA,MAAQ,OAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AAC1B,IAAI,IAAA,MAAA,GAAS,iBAAkB,CAAA,gBAAA,CAA8B,QAAQ,CAAA,CAAA;AACrE,IAAI,IAAA,MAAA;AACA,MAAO,MAAA,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACvB,IAAkB,iBAAA,CAAA,SAAA,CAAU,SAAW,EAAA,IAAI,YAAa,CAAA;AAAA,MACpD,KAAO,EAAA,CAAA;AAAA,MACP,SAAW,EAAA,IAAA;AAAA,KACd,CAAC,CAAA,CAAA;AACF,IAAkB,iBAAA,CAAA,SAAA,CAAU,WAAa,EAAA,IAAI,YAAa,CAAA;AAAA,MACtD,KAAO,EAAA,CAAA;AAAA,MACP,SAAW,EAAA,KAAA;AAAA,MACX,kBAAkB,EAAE,IAAA,EAAM,eAAe,UAAY,EAAA,IAAA,EAAM,OAAO,GAAI,EAAA;AAAA,KACzE,CAAC,CAAA,CAAA;AACF,IAAA,iBAAA,CAAkB,gBAAgB,SAAW,EAAA;AAAA,MACzC,IAAI,YAAa,CAAA;AAAA,QACb,KAAO,EAAA,CAAA;AAAA,QACP,SAAW,EAAA,IAAA;AAAA,SACZ,CAAC,CAAA;AAAA,MACJ,IAAI,YAAa,CAAA;AAAA,QACb,KAAO,EAAA,GAAA;AAAA,QACP,SAAW,EAAA,KAAA;AAAA,QACX,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,CAAM,IAAA,EAAA;AAAA,OAC9D,CAAA;AAAA,MACD,MAAA;AAAA,KACH,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkB,gBAAgB,QAAU,EAAA;AAAA,MACxC,IAAI,YAAa,CAAA;AAAA,QACb,KAAO,EAAA,CAAA;AAAA,QACP,SAAW,EAAA,IAAA;AAAA,SACZ,CAAC,CAAA;AAAA,MACJ,MAAM,GAAG,CAAA;AAAA,MACT,IAAI,YAAa,CAAA;AAAA,QACb,KAAO,EAAA,CAAA;AAAA,QACP,SAAW,EAAA,KAAA;AAAA,SACZ,CAAC,CAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACL;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,cAAA,GAAiB,SAAS,gCAAkC,EAAA;AAAA,EAC9D,MAAM;AACF,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EAAA,EACnC,WAAW,CAAA;AAAA,EAAA,EACX,aAAa,CAAA;AAAA,EAAA,EACb,WAAW,CAAA;AAAA,EAAA,EACX,UAAU,CAAA,6HAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAkB,iBAAA,CAAA,SAAA,CAAU,SAAW,EAAA,IAAI,UAAW,CAAA;AAAA,MAClD,WAAa,EAAA,EAAE,CAAG,EAAA,GAAA,EAAK,GAAG,GAAI,EAAA;AAAA,MAC9B,KAAO,EAAA,EAAA;AAAA,KACV,CAAC,CAAA,CAAA;AACF,IAAkB,iBAAA,CAAA,SAAA,CAAU,WAAa,EAAA,IAAI,UAAW,CAAA;AAAA,MACpD,WAAa,EAAA,EAAE,CAAG,EAAA,GAAA,EAAK,GAAG,GAAI,EAAA;AAAA,MAC9B,KAAO,EAAA,EAAA;AAAA,KACV,CAAC,CAAA,CAAA;AACF,IAAA,iBAAA,CAAkB,gBAAgB,SAAW,EAAA;AAAA,MACzC,IAAI,UAAW,CAAA;AAAA,QACX,WAAa,EAAA,EAAE,CAAG,EAAA,GAAA,EAAK,GAAG,GAAI,EAAA;AAAA,QAC9B,KAAO,EAAA,GAAA;AAAA,QACP,kBAAkB,EAAE,IAAA,EAAM,UAAU,GAAK,EAAA,CAAA,CAAA,EAAI,OAAO,EAAG,EAAA;AAAA,OAC1D,CAAA;AAAA,MACD,IAAI,UAAW,CAAA;AAAA,QACX,WAAa,EAAA,EAAE,CAAG,EAAA,IAAA,EAAM,GAAG,GAAI,EAAA;AAAA,QAC/B,KAAO,EAAA,EAAA;AAAA,QACP,kBAAkB,EAAE,IAAA,EAAM,UAAU,GAAK,EAAA,CAAA,EAAG,OAAO,GAAI,EAAA;AAAA,OAC1D,CAAA;AAAA,MACD,MAAA;AAAA,KACH,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkB,gBAAgB,QAAU,EAAA;AAAA,MACxC,IAAI,UAAW,CAAA;AAAA,QACX,WAAa,EAAA,EAAE,CAAG,EAAA,GAAA,EAAK,GAAG,GAAI,EAAA;AAAA,QAC9B,KAAO,EAAA,EAAA;AAAA,OACV,CAAA;AAAA,MACD,MAAM,GAAG,CAAA;AAAA,MACT,IAAI,UAAW,CAAA;AAAA,QACX,WAAa,EAAA,EAAE,CAAG,EAAA,GAAA,EAAK,GAAG,GAAI,EAAA;AAAA,QAC9B,KAAO,EAAA,EAAA;AAAA,OACV,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACL;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,cAAA,GAAiB,SAAS,gCAAkC,EAAA;AAAA,EAC9D,MAAM;AACF,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EAAA,EACnC,WAAW,CAAA;AAAA,EAAA,EACX,aAAa,CAAA;AAAA,EAAA,EACb,WAAW,CAAA;AAAA,EAAA,EACX,UAAU,CAAA,0HAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACD,IAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAA8B,SAAS,CAAA,CAAA;AACvE,IAAI,IAAA,OAAA;AACA,MAAQ,OAAA,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AACvB,IAAI,IAAA,OAAA,GAAU,iBAAkB,CAAA,gBAAA,CAA8B,SAAS,CAAA,CAAA;AACvE,IAAI,IAAA,OAAA;AACA,MAAQ,OAAA,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,CAAA;AAC1B,IAAkB,iBAAA,CAAA,SAAA,CAAU,SAAW,EAAA,IAAI,UAAW,CAAA;AAAA,MAClD,KAAO,EAAA,CAAA;AAAA,MACP,KAAO,EAAA,CAAA,GAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,KACT,CAAC,CAAA,CAAA;AACF,IAAkB,iBAAA,CAAA,SAAA,CAAU,WAAa,EAAA,IAAI,UAAW,CAAA;AAAA,MACpD,KAAO,EAAA,CAAA;AAAA,MACP,KAAO,EAAA,CAAA;AAAA,KACV,CAAC,CAAA,CAAA;AACF,IAAA,iBAAA,CAAkB,gBAAgB,SAAW,EAAA;AAAA,MACzC,IAAI,UAAW,CAAA;AAAA,QACX,KAAO,EAAA,CAAA;AAAA,QACP,KAAO,EAAA,CAAA,CAAA;AAAA,QACP,IAAM,EAAA,QAAA;AAAA,OACT,CAAA;AAAA,MACD,IAAI,UAAW,CAAA;AAAA,QACX,KAAO,EAAA,CAAA;AAAA,QACP,KAAO,EAAA,CAAA;AAAA,OACV,CAAA;AAAA,MACD,MAAA;AAAA,KACH,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkB,gBAAgB,QAAU,EAAA;AAAA,MACxC,IAAI,UAAW,CAAA;AAAA,QACX,KAAO,EAAA,GAAA;AAAA,QACP,KAAO,EAAA,CAAA;AAAA,QACP,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,OAC7D,CAAA;AAAA,MACD,MAAM,GAAG,CAAA;AAAA,MACT,IAAI,UAAW,CAAA;AAAA,QACX,MAAQ,EAAA,QAAA;AAAA,QACR,KAAO,EAAA,CAAA;AAAA,QACP,KAAO,EAAA,CAAA;AAAA,OACV,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACL;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,mBAAA,GAAsB,SAAS,uCAAyC,EAAA;AAAA,EAC1E,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EACnC,EAAA,WAAW,kEAAkE,WAAW,CAAA;AAAA,EACxF,EAAA,aAAa,oGAAoG,aAAa,CAAA;AAAA,EAC9H,EAAA,WAAW,mEAAmE,WAAW,CAAA;AAAA,EACzF,EAAA,UAAU,qGAAqG,UAAU,CAAA,+EAAA,CAAA;AAAA,KACpH,CAAA,CAAA;AACD,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAI,IAAA,SAAA,GAAY,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,cAAc,CAAA,CAAA;AAClE,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAI,IAAA,MAAA,GAAS,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,WAAW,CAAA,CAAA;AAC5D,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA,EAAE,OAAO,EAAI,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAC3D,IAAA,MAAA,CAAO,aAAa,SAAW,EAAA;AAAA,MAC3B,KAAO,EAAA,EAAA;AAAA,MAAI,SAAW,EAAA,MAAA;AAAA,MACtB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AACD,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA,EAAE,OAAO,EAAI,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAC5D,IAAA,MAAA,CAAO,UAAU,MAAQ,EAAA;AAAA,MACrB,KAAO,EAAA,EAAA;AAAA,MAAI,SAAW,EAAA,IAAA;AAAA,MACtB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AAAA,GACL,CAAA;AAAA,EACA,MAAM;AACF,IAAA,OAAA,CAAQ,WAAW,EAAE,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACnD,IAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACrD,IAAA,OAAA,CAAQ,WAAW,EAAE,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AACpD,IAAA,OAAA,CAAQ,UAAU,EAAE,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AAAA,GACpD;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,mBAAA,GAAsB,SAAS,uCAAyC,EAAA;AAAA,EAC1E,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA,EACnC,EAAA,WAAW,oDAAoD,WAAW,CAAA;AAAA,EAC1E,EAAA,aAAa,oFAAoF,aAAa,CAAA;AAAA,EAC9G,EAAA,WAAW,oDAAoD,WAAW,CAAA;AAAA,EAC1E,EAAA,UAAU,oFAAoF,UAAU,CAAA,iEAAA,CAAA;AAAA,KACnG,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkB,oBAAqB,EAAA,CAAA;AACvC,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAI,IAAA,SAAA,GAAY,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,cAAc,CAAA,CAAA;AAClE,IAAI,IAAA,OAAA,GAAU,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,YAAY,CAAA,CAAA;AAC9D,IAAI,IAAA,MAAA,GAAS,IAAI,WAAY,CAAA,EAAE,GAAG,GAAK,EAAA,CAAA,EAAG,GAAI,EAAA,EAAG,WAAW,CAAA,CAAA;AAC5D,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA,EAAE,OAAO,CAAG,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAC1D,IAAA,MAAA,CAAO,aAAa,SAAW,EAAA;AAAA,MAC3B,KAAO,EAAA,CAAA;AAAA,MAAG,SAAW,EAAA,MAAA;AAAA,MACrB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AACD,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA,EAAE,OAAO,CAAG,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAC3D,IAAA,MAAA,CAAO,UAAU,MAAQ,EAAA;AAAA,MACrB,KAAO,EAAA,CAAA;AAAA,MAAG,SAAW,EAAA,IAAA;AAAA,MACrB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AAAA,GACL,CAAA;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,OAAA,CAAQ,SAAW,EAAA;AAAA,MACf,KAAO,EAAA,CAAA;AAAA,MAAG,SAAW,EAAA,MAAA;AAAA,MACrB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AACD,IAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,CAAG,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACpD,IAAA,OAAA,CAAQ,WAAW,EAAE,KAAA,EAAO,CAAG,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AACnD,IAAA,OAAA,CAAQ,QAAU,EAAA;AAAA,MACd,KAAO,EAAA,CAAA;AAAA,MAAG,SAAW,EAAA,IAAA;AAAA,MACrB,gBAAkB,EAAA,EAAE,IAAM,EAAA,aAAA,EAAe,YAAY,IAAK,EAAA;AAAA,KAC7D,CAAA,CAAA;AAAA,GACL,CAAA;AACJ,CAAC,CAAA,CAAA;;;ACnWD,IAAM,mBAAsB,GAAA,6BAAA,CAAA;AACrB,IAAM,YAAA,GAAe,SAAS,mBAAqB,EAAA;AAAA,EACtD,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAY,WAAA,CAAA;AAAA,MACR,SAAW,EAAA,QAAA;AAAA,MAAU,IAAM,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,KA8DpC,CAAA,CAAA;AAAA,GACC,CAAA;AACJ,CAAC,CAAA,CAAA;;;ACpED,IAAM,qBAAwB,GAAA,+BAAA,CAAA;AACvB,IAAM,kBAAA,GAAqB,SAAS,qBAAuB,EAAA;AAAA,EAC9D,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,6GAA+G,CAAA,CAAA;AAAA,GAC5J,CAAA;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,iKAAiK,CAAA,CAAA;AAAA,GAC9M,CAAA;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,2DAA2D,CAAA,CAAA;AAAA,GACxG,CAAA;AAAA,EACA,MAAY,OAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,aAAA;AACR,IAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,gFAAgF,CAAA,CAAA;AAAA,GAC7H,CAAA;AACJ,CAAC,CAAA,CAAA;;;ACLM,IAAM,oBAAuB,GAAA,QAAA;AAAA,EAAS,mCAAA;AAAA,EACzC;AAAA,IACI,MAAM;AACF,MAAA,IAAI,eAAkB,GAAA,EAAA,CAAA;AACtB,MAAA,MAAM,IAAO,GAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,QAAS,EAAA,CAAA;AACjC,MAAI,IAAA,IAAA,IAAQ,CAAK,IAAA,IAAA,GAAO,EAAI,EAAA;AACxB,QAAkB,eAAA,GAAA,kBAAA,CAAA;AAAA,OACX,MAAA,IAAA,IAAA,IAAQ,EAAM,IAAA,IAAA,GAAO,EAAI,EAAA;AAChC,QAAkB,eAAA,GAAA,oBAAA,CAAA;AAAA,OACX,MAAA,IAAA,IAAA,IAAQ,EAAM,IAAA,IAAA,GAAO,EAAI,EAAA;AAChC,QAAkB,eAAA,GAAA,eAAA,CAAA;AAAA,OACf,MAAA;AACH,QAAkB,eAAA,GAAA,gBAAA,CAAA;AAAA,OACtB;AACA,MAAY,WAAA,CAAA,EAAE,SAAW,EAAA,QAAA,EAAU,IAAM,EAAA,CAAA,KAAA,EAAQ,eAAe,CAAS,MAAA,EAAA,QAAA,CAAS,IAAI,CAAA,+DAAA,CAAA,EAAmE,CAAA,CAAA;AAAA,KAC7J;AAAA,IACA,MAAM,YAAY,EAAE,SAAA,EAAW,UAAU,IAAM,EAAA,CAAA,kCAAA,EAAgC,cAAc,CAAA,8EAAA,CAAA,EAAkF,CAAA;AAAA,IAC/K,CAAC,KAAA,KAAU,eAAgB,CAAA,SAAA,CAAU,uBAAuB,KAAK,CAAA;AAAA,GACrE;AACJ,EAAA;AAEA,IAAM,QAAW,GAAA,QAAA;AAAA,EAEd,yBAAA;AAAA,EACC;AAAA,IACI,CAAC,KAAU,KAAA;AACP,MAAO,MAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AACtB,MAAA,eAAA,CAAgB,OAAO,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,GACJ;AACJ,CAAA,CAAA;AAGA,IAAM,kBAAqB,GAAA,kCAAA,CAAA;AACpB,IAAM,qBAAwB,GAAA,QAAA;AAAA,EAAS,kBAAA;AAAA,EAC1C;AAAA,IACI,MAAM;AACF,MAAA,iBAAA,CAAkB,KAAM,EAAA,CAAA;AACxB,MAAA,WAAA,CAAY,EAAE,SAAA,EAAW,QAAU,EAAA,IAAA,EAAM,4CAA4C,CAAA,CAAA;AACrF,MAAqB,oBAAA,CAAA;AAAA,QACjB,IAAI,gBAAiB,CAAA,wBAAA,EAAqB,UAAU,EAAE,IAAA,EAAM,4BAA4B,CAAA;AAAA,QACxF,IAAI,gBAAA,CAAiB,yCAA2C,EAAA,oBAAA,EAAsB,EAAE,CAAA;AAAA,QACxF,IAAI,gBAAA,CAAiB,oBAAsB,EAAA,qBAAA,EAAuB,EAAE,CAAA;AAAA,QACpE,IAAI,gBAAA,CAAiB,0BAA4B,EAAA,0BAAA,EAA4B,EAAE,CAAA;AAAA,QAC/E,IAAI,gBAAA,CAAiB,mCAAqC,EAAA,kCAAA,EAAoC,EAAE,CAAA;AAAA,QAChG,IAAI,gBAAA,CAAiB,uBAAyB,EAAA,kBAAA,EAAoB,EAAE,CAAA;AAAA,QACpE,IAAI,gBAAA,CAAiB,eAAiB,EAAA,YAAA,EAAc,EAAE,CAAA;AAAA,QACtD,IAAI,gBAAiB,CAAA,iCAAA,EAA8B,UAAU,EAAE,IAAA,EAAM,wDAAwD,CAAA;AAAA,OAChI,CAAA,CAAA;AAAA,KACL;AAAA,IACA,CAAC,KAAA,KAAU,eAAgB,CAAA,SAAA,CAAU,oBAAoB,KAAK,CAAA;AAAA,GAClE;AACJ,CAAA","file":"index.mjs","sourcesContent":["import { eventDecorator } from \"../decorators\";\nimport { getEventInstanceById } from \"../decorators/EventDecorator\";\nimport { CanvasEventNamesType } from \"../types\";\nimport { EventIdType } from \"../types/EventIdType\";\n\n/**\n * CanvasEvent is a class that is used to create a pixi event, and connect it to a canvas element, with on().\n * This class should be extended and the fn method should be overridden.\n * You must use the {@link eventDecorator} to register the event in the game.\n * @example\n * ```typescript\n * \\@eventDecorator() // this is equivalent to eventDecorator(\"EventTest\")\n * export class EventTest extends CanvasEvent<CanvasSprite> {\n * override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n * if (event === 'pointerdown') {\n * sprite.scale.x *= 1.25;\n * sprite.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n */\nexport default class CanvasEvent<C> {\n constructor() {\n this.id = this.constructor.prototype.id\n }\n fn(_event: CanvasEventNamesType, _element: C) { throw new Error(\"[Pixi'VN] The method CanvasEvent.fn() must be overridden\") }\n /**\n * Get the id of the event. This variable is used in the system to get the event by id, {@link getEventInstanceById}\n */\n id: EventIdType = 'event_id_not_set'\n}\n","import sha1 from 'crypto-js/sha1';\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\";\nimport { StepLabelType } from \"../types/StepLabelType\";\n\n/**\n * Convert StepLabel to StepHistoryData\n * @param step\n * @returns\n */\nexport function getStepSha1(step: StepLabelType): StepHistoryDataType {\n let sha1String = sha1(step.toString().toLocaleLowerCase())\n return sha1String.toString()\n}\n/**\n * Check if two steps are equal\n * @param step1\n * @param step2\n * @returns\n */\nexport function checkIfStepsIsEqual(step1: StepHistoryDataType | StepLabelType<any>, step2: StepHistoryDataType | StepLabelType<any>): boolean {\n return step1 === step2\n}\n","import { getLabelById } from \"../decorators\"\nimport { checkIfStepsIsEqual } from \"../functions/StepLabelUtility\"\nimport { LabelProps } from \"../interface\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\n\nexport default abstract class LabelAbstract<TLabel, TProps extends {} = {}> {\n /**\n * @param id is the id of the label\n * @param props is the properties of the label\n */\n constructor(id: LabelIdType, props?: LabelProps<TLabel>) {\n this._id = id\n this._onStepStart = props?.onStepStart\n this._onLoadStep = props?.onLoadStep\n this._onStepEnd = props?.onStepEnd\n this._choiseIndex = props?.choiseIndex\n }\n\n private _id: LabelIdType\n /**\n * Get the id of the label. This variable is used in the system to get the label by id, {@link getLabelById}\n */\n public get id(): LabelIdType {\n return this._id\n }\n\n /**\n * Get the steps of the label.\n */\n public abstract get steps(): StepLabelType<TProps>[]\n\n /**\n * Get the corresponding steps number\n * @param externalSteps\n * @returns Numer of corresponding steps, for example, if externalSteps is [ABC, DEF, GHI] and the steps of the label is [ABC, GHT], the result will be 1\n */\n protected getCorrespondingStepsNumber(externalSteps: StepHistoryDataType[] | StepLabelType[]): number {\n if (externalSteps.length === 0) {\n return 0\n }\n let res: number = 0\n externalSteps.forEach((step, index) => {\n if (checkIfStepsIsEqual(step, this.steps[index])) {\n res = index\n }\n })\n return res\n }\n\n private _onStepStart: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Is a function that will be executed in {@link Label#onStepStart} and when the user goes back to it or when the user laods a save file.\n * @returns Promise<void> or void\n */\n public get onStepStart(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return async (stepIndex: number, label: TLabel) => {\n if (this._onLoadStep) {\n await this._onLoadStep(stepIndex, label)\n }\n if (this._onStepStart) {\n return await this._onStepStart(stepIndex, label)\n }\n }\n }\n\n private _onLoadStep: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Get the function that will be executed a old step is reloaded. A step is reloaded when the user goes back to it or when the user laods a save file.\n * @returns Promise<void> or void\n */\n public get onLoadStep(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return this._onLoadStep\n }\n\n private _onStepEnd: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Is a function that will be executed when the step ends.\n * @returns Promise<void> or void\n */\n public get onStepEnd(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return this._onStepEnd\n }\n\n private _choiseIndex: number | undefined\n public get choiseIndex(): number | undefined {\n return this._choiseIndex\n }\n}\n","import { LabelProps } from \"../interface\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\nimport LabelAbstract from \"./LabelAbstract\"\n\n/**\n * Label is a class that contains a list of steps, which will be performed as the game continues.\n * For Ren'py this is the equivalent of a label.\n * @example\n * ```typescript\n * const START_LABEL_ID = \"StartLabel\"\n * \n * export const startLabel = newLabel(START_LABEL_ID,\n * [\n * (props) => {\n * GameWindowManager.clear()\n * setDialogue({ character: liam, text: \"Which test do you want to perform?\" })\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", eventsTestLabel),\n * new ChoiceMenuOption(\"Show Image Test\", showImageTest),\n * ])\n * },\n * (props) => GameStepManager.jumpLabel(START_LABEL_ID, props),\n * ]\n * )\n * \n * GameStepManager.callLabel(StartLabel)\n * ```\n */\nexport default class Label<T extends {} = {}> extends LabelAbstract<Label<T>, T> {\n /**\n * @param id is the id of the label\n * @param steps is the list of steps that the label will perform\n * @param props is the properties of the label\n */\n constructor(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), props?: LabelProps<Label<T>>) {\n super(id, props)\n this._steps = steps\n }\n\n private _steps: StepLabelType<T>[] | (() => StepLabelType<T>[])\n /**\n * Get the steps of the label.\n */\n public get steps(): StepLabelType<T>[] {\n if (typeof this._steps === \"function\") {\n return this._steps()\n }\n return this._steps\n }\n}\n","import Label from \"./Label\"\n\nexport const CLOSE_LABEL_ID = \"__close-label-id__\"\n\n/**\n * CloseLabel is a label used for closing the menu.\n */\nexport default function newCloseLabel<T extends {} = {}>(choiseIndex?: number) {\n return new Label<T>(CLOSE_LABEL_ID, [], {\n choiseIndex: choiseIndex,\n })\n}\n","import { Label, LabelJson } from \"../classes\"\nimport LabelAbstract from \"../classes/LabelAbstract\"\nimport { LabelProps } from \"../interface\"\nimport { StepLabelType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\n\nexport const registeredLabels: { [key: LabelIdType]: (LabelAbstract<any> | Label<any> | LabelJson<any>) } = {}\n\n/**\n * Creates a new label and registers it in the system.\n * **This function must be called at least once at system startup to register the label, otherwise the system cannot be used.**\n * @param id The id of the label, it must be unique\n * @param steps The steps of the label\n * @param props The properties of the label\n * @returns The created label\n */\nexport function newLabel<T extends {} = {}>(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), props?: Omit<LabelProps<Label<T>>, \"choiseIndex\">): Label<T> {\n if (registeredLabels[id]) {\n console.info(`[Pixi'VN] Label ${id} already exists, it will be overwritten`)\n }\n let label = new Label<T>(id, steps, props)\n registeredLabels[id] = label\n return label\n}\n\n/**\n * Gets a label by its id\n * @param id The id of the label\n * @returns The label or undefined if it does not exist\n */\nexport function getLabelById<T = Label<any>>(id: LabelIdType): T | undefined {\n let label = registeredLabels[id]\n if (!label) {\n console.error(`[Pixi'VN] Label ${id} not found`)\n return\n }\n return label as T\n}\n\n/**\n * Saves a label in the system\n * @param label The label to be saved\n */\nexport function saveLabel<T extends LabelAbstract<any>>(label: T) {\n registeredLabels[label.id] = label\n}\n","import { Container } from \"pixi.js\";\nimport { canvasElementDecorator } from \"../../decorators\";\nimport { getCanvasElementInstanceById } from \"../../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory } from \"../../interface/canvas\";\n\n/**\n * This class is used to create a canvas element to add into a Pixi Application.\n * You can use GameWindowManager.addCanvasElement() to add this element into the application.\n * This class should be implemented and the memory method should be overridden.\n * You must use the {@link canvasElementDecorator} to register the canvas in the game.\n * In Ren'Py is a displayable.\n * @example\n * ```typescript\n * \\@canvasElementDecorator() // this is equivalent to canvasElementDecorator(\"CanvasExample\")\n * export class CanvasExample extends Container implements CanvasBase<ICanvasExampleMemory> {\n * get memory(): ICanvasExampleMemory {\n * return {\n * pixivnId: \"CanvasExample\",\n * // ... other properties\n * }\n * }\n * set memory(value: ICanvasExampleMemory) {\n * // ... set other properties\n * }\n * }\n * ```\n */\nexport default class CanvasBase<T2 extends ICanvasBaseMemory> extends Container {\n /**\n * This method return the memory of the canvas element.\n */\n get memory(): T2 { throw new Error(\"[Pixi'VN] The method CanvasBase.memory must be overridden\") }\n /**\n * This method set the memory of the canvas element.\n */\n set memory(_value: T2) { throw new Error(\"[Pixi'VN] The method CanvasBase.memory must be overridden\") }\n /**\n * Get the id of the canvas element. This variable is used in the system to get the canvas element by id, {@link getCanvasElementInstanceById}\n */\n pixivnId: string = \"canvas_element_id_not_set\"\n}\n","import { Texture } from \"pixi.js\";\nimport { CanvasBase } from \"../classes/canvas\";\nimport { getCanvasElementInstanceById } from \"../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory, ITextureMemory } from \"../interface/canvas\";\n\n/**\n * Get the memory object of the PixiJS texture\n * @param texture PixiJS Texture object\n * @returns Memory object of the texture\n */\nexport function getTextureMemory(texture: Texture): ITextureMemory {\n let sourceTexture = texture.source\n let textureMemory: ITextureMemory = {\n image: sourceTexture.label\n }\n return textureMemory\n}\n\n/**\n * Export a Canvas element to a memory object\n * @param element Canvas element\n * @returns Memory object of the canvas\n */\nexport function exportCanvasElement<T extends CanvasBase<any>>(\n element: T,\n): ICanvasBaseMemory {\n return element.memory\n}\n\n/**\n * Import a Canvas element from a memory object\n * @param memory Memory object of the canvas\n * @returns Canvas element\n */\nexport function importCanvasElement<T extends CanvasBase<any>>(\n memory: ICanvasBaseMemory,\n): T {\n let element = getCanvasElementInstanceById<T>(memory.pixivnId)\n if (element) {\n element.memory = memory\n }\n else {\n throw new Error(\"[Pixi'VN] The element \" + memory.pixivnId + \" could not be created\")\n }\n\n return element\n}\n","import { Container, ContainerOptions } from \"pixi.js\";\nimport { exportCanvasElement, importCanvasElement } from \"../../functions/CanvasUtility\";\nimport ICanvasContainerMemory from \"../../interface/canvas/ICanvasContainerMemory\";\nimport CanvasBase from \"./CanvasBase\";\n\nexport const CANVAS_CONTAINER_ID = \"CanvasContainer\"\n\n/**\n * This class is a extension of the [PIXI.Container class](https://pixijs.com/8.x/examples/basic/container), it has the same properties and methods, \n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const container = new CanvasContainer();\n * GameWindowManager.addCanvasElement(container);\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * for (let i = 0; i < 25; i++)\n * {\n * const bunny = new CanvasSprite(texture);\n * bunny.x = (i % 5) * 40;\n * bunny.y = Math.floor(i / 5) * 40;\n * container.addChild(bunny);\n * }\n * ```\n */\nexport default class CanvasContainer extends Container implements CanvasBase<ICanvasContainerMemory> {\n constructor(options?: ContainerOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_CONTAINER_ID\n }\n pixivnId: string = CANVAS_CONTAINER_ID\n get memory(): ICanvasContainerMemory {\n let memory = getMemoryContainer(this)\n this.children.forEach(child => {\n memory.elements.push(exportCanvasElement(child as CanvasBase<any>))\n })\n return memory\n }\n set memory(value: ICanvasContainerMemory) {\n setMemoryContainer(this, value)\n value.elements.forEach(child => {\n this.addChild(importCanvasElement(child))\n })\n }\n}\n\nexport function getMemoryContainer<T extends Container>(element: T): ICanvasContainerMemory {\n let className = \"CanvasContainer\"\n if (element.hasOwnProperty(\"pixivnId\")) {\n className = (element as any).pixivnId\n }\n return {\n pixivnId: className,\n elements: [],\n\n width: element.width,\n height: element.height,\n\n isRenderGroup: element.isRenderGroup,\n blendMode: element.blendMode,\n tint: element.tint,\n alpha: element.alpha,\n angle: element.angle,\n renderable: element.renderable,\n rotation: element.rotation,\n scale: { x: element.scale.x, y: element.scale.y },\n pivot: { x: element.pivot.x, y: element.pivot.y },\n position: { x: element.position.x, y: element.position.y },\n skew: { x: element.skew.x, y: element.skew.y },\n visible: element.visible,\n x: element.x,\n y: element.y,\n boundsArea: element.boundsArea,\n\n cursor: element.cursor,\n eventMode: element.eventMode,\n interactive: element.interactive,\n interactiveChildren: element.interactiveChildren,\n hitArea: element.hitArea\n }\n}\n\nexport function setMemoryContainer<T extends Container>(element: T | Container, memory: ContainerOptions) {\n memory.isRenderGroup && (element.isRenderGroup = memory.isRenderGroup)\n memory.blendMode && (element.blendMode = memory.blendMode)\n memory.tint && (element.tint = memory.tint)\n memory.alpha && (element.alpha = memory.alpha)\n memory.angle && (element.angle = memory.angle)\n memory.renderable && (element.renderable = memory.renderable)\n memory.rotation && (element.rotation = memory.rotation)\n if (memory.scale) {\n if (typeof memory.scale === \"number\") {\n element.scale.set(memory.scale, memory.scale)\n }\n else {\n element.scale.set(memory.scale.x, memory.scale.y)\n }\n }\n if (memory.pivot) {\n if (typeof memory.pivot === \"number\") {\n element.pivot.set(memory.pivot, memory.pivot)\n }\n else {\n element.pivot.set(memory.pivot.x, memory.pivot.y)\n }\n }\n memory.position && (element.position.set(memory.position.x, memory.position.y))\n memory.skew && (element.skew.set(memory.skew.x, memory.skew.y))\n memory.visible && (element.visible = memory.visible)\n memory.x && (element.x = memory.x)\n memory.y && (element.y = memory.y)\n memory.boundsArea && (element.boundsArea = memory.boundsArea)\n\n memory.cursor && (element.cursor = memory.cursor)\n memory.eventMode && (element.eventMode = memory.eventMode)\n memory.interactive && (element.interactive = memory.interactive)\n memory.interactiveChildren && (element.interactiveChildren = memory.interactiveChildren)\n memory.hitArea && (element.hitArea = memory.hitArea)\n\n // end\n // width and height must be set after the scale\n memory.width && (element.width = memory.width)\n memory.height && (element.height = memory.height)\n}\n","import { Assets, ColorSource, FillGradient, FillPattern, StrokeStyle, TextStyle, TextStyleOptions, Texture } from 'pixi.js';\n\n/**\n * Get a texture from a url.\n * @param imageUrl is the url of the image.\n * @returns the texture of the image, or a text with the error.\n */\nexport async function getTexture(imageUrl: string): Promise<Texture | void> {\n if (Assets.cache.has(imageUrl)) {\n return Assets.get(imageUrl)\n }\n return Assets.load(imageUrl)\n .then((texture) => {\n if (!texture) {\n console.error(\"[Pixi'VN] Texture not found\", imageUrl)\n return\n }\n // if texture not is a Texture, then it is a TextureResource\n if (!(texture instanceof Texture)) {\n console.error(\"[Pixi'VN] File not is a image\", imageUrl)\n return\n }\n\n return texture\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error loading image\", e)\n return\n })\n}\n\nfunction getFillGradientFillPattern(prop: ColorSource | FillGradient | FillPattern | StrokeStyle, propName: keyof TextStyle) {\n if (!(prop instanceof Object)) {\n return prop\n }\n // TODO: FillGradient and FillPattern are not supported yet\n console.warn(`[Pixi'VN] CanvasText.style.${propName} is a FillGradient or FillPattern, this is not supported yet.`, prop)\n return undefined\n}\n\nexport function getTextStyle(style: TextStyle): TextStyleOptions {\n return {\n align: style.align,\n breakWords: style.breakWords,\n dropShadow: style.dropShadow,\n fill: getFillGradientFillPattern(style.stroke, \"fill\"),\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontStyle: style.fontStyle,\n fontVariant: style.fontVariant,\n fontWeight: style.fontWeight,\n leading: style.leading,\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n padding: style.padding,\n stroke: getFillGradientFillPattern(style.stroke, \"stroke\"),\n textBaseline: style.textBaseline,\n trim: style.trim,\n whiteSpace: style.whiteSpace,\n wordWrap: style.wordWrap,\n wordWrapWidth: style.wordWrapWidth,\n }\n}\n","import { CanvasEvent } from \"../classes\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CanvasEventNamesType } from \"../types\"\nimport { EventIdType } from \"../types/EventIdType\"\n\n/**\n * Canvas Event Register\n */\nexport const registeredEvents: { [name: EventIdType]: typeof CanvasEvent<CanvasEventNamesType> } = {}\n/**\n * Is a decorator that register a event in the game.\n * Is a required decorator for use the event in the game.\n * Thanks to this decoration the game has the possibility of updating the events to the latest modification and saving the game.\n * @param name is th identifier of the event, by default is the name of the class\n * @returns \n */\nexport default function eventDecorator(name?: EventIdType) {\n return function (target: typeof CanvasEvent<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredEvents[name]) {\n console.info(`[Pixi'VN] Event ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredEvents[name] = target\n }\n}\n\n/**\n * Get an event by the id.\n * @param eventId The id of the event.\n * @returns The event type.\n */\nexport function getEventTypeById<T = typeof CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n\n/**\n * Get an event instance by the id.\n * @param eventId The id of the event.\n * @returns The event instance.\n */\nexport function getEventInstanceById<T = CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n let event = new eventType()\n return event as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextureMemory } from \"../../functions/CanvasUtility\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasBaseMemory from \"../../interface/canvas/ICanvasBaseMemory\";\nimport ICanvasSpriteMemory, { ICanvasSpriteBaseMemory } from \"../../interface/canvas/ICanvasSpriteMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_SPRITE_ID = \"CanvasSprite\"\n\n/**\n * This class is a extension of the [PIXI.Sprite class](https://pixijs.com/8.x/examples/sprite/basic), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n *\n * sprite.anchor.set(0.5);\n * sprite.x = GameWindowManager.screen.width / 2;\n * sprite.y = GameWindowManager.screen.height / 2;\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\nexport default class CanvasSprite<Memory extends SpriteOptions & ICanvasBaseMemory = ICanvasSpriteMemory> extends Sprite implements CanvasBase<Memory | ICanvasSpriteMemory> {\n constructor(options?: SpriteOptions | Texture) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_SPRITE_ID\n }\n pixivnId: string = CANVAS_SPRITE_ID\n get memory(): Memory | ICanvasSpriteMemory {\n return getMemorySprite(this)\n }\n set memory(value: ICanvasSpriteMemory) {\n setMemorySprite(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasSprite> {\n * override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n * if (event === 'pointerdown') {\n * sprite.scale.x *= 1.25;\n * sprite.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * let sprite = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * await sprite.load()\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean): CanvasSprite<any> {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasSprite()\n mySprite.texture = sprite.texture\n return mySprite\n }\n}\n\nexport function getMemorySprite<T extends CanvasSprite<any>>(element: T | CanvasSprite<any>): ICanvasSpriteMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n textureImage: getTextureMemory((element as any).texture),\n anchor: { x: element.anchor.x, y: element.anchor.y },\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemorySprite<Memory extends ICanvasSpriteBaseMemory>(element: CanvasSprite<any>, memory: Memory) {\n setMemoryContainer(element, memory)\n getTexture(memory.textureImage.image).then((texture) => {\n if (texture) {\n element.texture = texture\n }\n })\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event, instance)\n }\n }\n}\n","import { Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { addImage, loadImage, showWithDissolveTransition } from \"../../functions\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasImageMemory from \"../../interface/canvas/ICanvasImageMemory\";\nimport CanvasSprite, { getMemorySprite, setMemorySprite } from \"./CanvasSprite\";\n\nexport const CANVAS_IMAGE_ID = \"CanvasImage\"\n\n/**\n * This class is a extension of the CanvasSprite class, it has the same properties and methods,\n * but it has some features that make texture management easier.\n * You need to use CanvasImage.load() to show the image in the canvas.\n * This class is used for functions like {@link addImage}, {@link loadImage} and {@link showWithDissolveTransition}.\n * @example\n * ```typescript\n * let alien = new CanvasImage({\n * anchor: { x: 0.5, y: 0.5 },\n * x: 100,\n * y: 100,\n * }, 'https://pixijs.com/assets/eggHead.png')\n * await alien.load()\n * GameWindowManager.addCanvasElement(\"alien\", alien)\n * ```\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * alien.x = 100\n * alien.y = 100\n * await alien.load()\n * ```\n */\nexport default class CanvasImage extends CanvasSprite<ICanvasImageMemory> {\n pixivnId: string = CANVAS_IMAGE_ID\n constructor(options?: SpriteOptions | Texture | undefined, imageLink?: string) {\n super(options)\n if (imageLink) {\n this.imageLink = imageLink\n }\n }\n override get memory(): ICanvasImageMemory {\n return {\n ...getMemorySprite(this),\n pixivnId: this.pixivnId,\n imageLink: this.imageLink,\n }\n }\n override set memory(memory: ICanvasImageMemory) {\n setMemorySprite(this, memory)\n this.imageLink = memory.imageLink\n }\n imageLink: string = \"\"\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasImage()\n mySprite.texture = sprite.texture\n return mySprite\n }\n /** \n * Load the image from the link and set the texture of the sprite.\n * @param image The link of the image. If it is not set, it will use the imageLink property.\n * @returns A promise that resolves when the image is loaded.\n */\n async load(image?: string) {\n if (!image) {\n image = this.imageLink\n }\n return getTexture(this.imageLink)\n .then((texture) => {\n if (texture) {\n this.texture = texture\n }\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error into CanvasImage.load()\", e)\n })\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Text, TextOptions } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextStyle } from \"../../functions/TextureUtility\";\nimport ICanvasTextMemory from \"../../interface/canvas/ICanvasTextTextMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_TEXT_ID = \"CanvasText\"\n\n/**\n * This class is a extension of the [PIXI.Text class](https://pixijs.com/8.x/examples/text/pixi-text), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\nexport default class CanvasText extends Text implements CanvasBase<ICanvasTextMemory> {\n constructor(options?: TextOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_TEXT_ID\n }\n pixivnId: string = CANVAS_TEXT_ID\n get memory(): ICanvasTextMemory {\n return getMemoryText(this)\n }\n set memory(value: ICanvasTextMemory) {\n setMemoryText(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasText> {\n * override fn(event: CanvasEventNamesType, text: CanvasText): void {\n * if (event === 'pointerdown') {\n * text.scale.x *= 1.25;\n * text.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n *\n * text.eventMode = 'static';\n * text.cursor = 'pointer';\n * text.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n}\n\nexport function getMemoryText<T extends CanvasText>(element: T | CanvasText): ICanvasTextMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n anchor: { x: element.anchor.x, y: element.anchor.y },\n text: element.text,\n resolution: element.resolution,\n style: getTextStyle(element.style),\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemoryText(element: CanvasText, memory: ICanvasTextMemory) {\n setMemoryContainer(element, memory)\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.text && (element.text = memory.text)\n memory.resolution && (element.resolution = memory.resolution)\n memory.style && (element.style = memory.style)\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event as CanvasEventNamesType, instance)\n }\n }\n}\n","import { CanvasContainer, CanvasImage, CanvasSprite, CanvasText } from \"../classes/canvas\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CANVAS_CONTAINER_ID } from \"../classes/canvas/CanvasContainer\"\nimport { CANVAS_IMAGE_ID } from \"../classes/canvas/CanvasImage\"\nimport { CANVAS_SPRITE_ID } from \"../classes/canvas/CanvasSprite\"\nimport { CANVAS_TEXT_ID } from \"../classes/canvas/CanvasText\"\nimport { CanvasElementTagType } from \"../types/CanvasElementTagType\"\n\nexport const registeredCanvasElement: { [name: CanvasElementTagType]: typeof CanvasBase<any> } = {}\n/**\n * Is a decorator that register a canvas element in the game.\n * @param name Name of the canvas element, by default it will use the class name. If the name is already registered, it will show a warning\n * @returns \n */\nexport default function canvasElementDecorator(name?: CanvasElementTagType) {\n return function (target: typeof CanvasBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredCanvasElement[name]) {\n console.warn(`[Pixi'VN] CanvasElement ${name} already registered`)\n }\n target.prototype.pixivnId = name\n registeredCanvasElement[name] = target\n }\n}\n\nexport function getCanvasElementTypeById<T extends typeof CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n\nexport function getCanvasElementInstanceById<T extends CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n if (canvasId === CANVAS_CONTAINER_ID) {\n eventType = CanvasContainer\n }\n else if (canvasId === CANVAS_IMAGE_ID) {\n eventType = CanvasImage\n }\n else if (canvasId === CANVAS_SPRITE_ID) {\n eventType = CanvasSprite\n }\n else if (canvasId === CANVAS_TEXT_ID) {\n eventType = CanvasText\n }\n }\n\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n let canvasElement = new eventType()\n return canvasElement as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n","import { CharacterBaseModel } from \"../classes\"\n\nexport const registeredCharacters: { [id: string]: CharacterBaseModel } = {}\n/**\n * Is a function that saves the character. If the character already exists, it will be overwritten.\n * @param character is the character to save\n * @returns \n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', { name: 'Liam'});\n * export const alice = new CharacterBaseModel('alice', { name: 'Alice'});\n * saveCharacter([liam, alice]);\n * ```\n */\nexport function saveCharacter<T extends CharacterBaseModel = CharacterBaseModel>(character: T | T[]) {\n if (Array.isArray(character)) {\n character.forEach(c => saveCharacter(c))\n return\n }\n if (registeredCharacters[character.id]) {\n console.info(`[Pixi'VN] Character id ${character.id} already exists, it will be overwritten`)\n }\n registeredCharacters[character.id] = character\n}\n\n/**\n * is a function that returns the character by the id\n * @param id is the id of the character\n * @returns the character\n * @example\n * ```typescript\n * const liam = getCharacterById('liam');\n * ```\n */\nexport function getCharacterById<T extends CharacterBaseModel>(id: string): T | undefined {\n try {\n let character = registeredCharacters[id]\n if (!character) {\n console.error(`[Pixi'VN] Character ${id} not found`)\n return\n }\n return character as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Character ${id}`, e)\n return\n }\n}\n\n/**\n * is a function that returns all characters\n * @returns all characters\n * @example\n * ```typescript\n * const allCharacters = getAllCharacters();\n * ```\n */\nexport function getAllCharacters<T extends CharacterBaseModel>(): T[] {\n return Object.values(registeredCharacters) as T[]\n}\n","import { UPDATE_PRIORITY } from \"pixi.js\"\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\"\nimport { TickerIdType } from \"../types/TickerIdType\"\n\n/**\n * A dictionary that contains all tickers registered and avvailable to be used.\n */\nexport const registeredTickers: { [name: TickerIdType]: typeof TickerBase } = {}\n/**\n * Is a decorator that register a ticker in the game.\n * Is a required decorator for use the ticker in the game.\n * Thanks to this decoration the game has the possibility of updating the tickers to the latest modification and saving the game.\n * @param name is th identifier of the label, by default is the name of the class\n * @returns \n */\nexport default function tickerDecorator(name?: TickerIdType) {\n return function (target: typeof TickerBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredTickers[name]) {\n console.info(`[Pixi'VN] Ticker ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredTickers[name] = target\n }\n}\n\n/**\n * Get a ticker instance by the id.\n * @param tickerId The id of the ticker.\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker. If is undefined, the ticker will be called every frame.\n * @param priority The priority of the ticker. If is undefined, the priority will be UPDATE_PRIORITY.NORMAL.\n * @returns The instance of the ticker\n */\nexport function geTickerInstanceById<TArgs extends TickerArgsType>(tickerId: TickerIdType, args: TArgs, duration?: number, priority?: UPDATE_PRIORITY): TickerBase<TArgs> | undefined {\n try {\n let ticker = registeredTickers[tickerId]\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n return new ticker(args, duration, priority)\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Ticker ${tickerId}`, e)\n return\n }\n}\n","export type CloseType = \"close\"\nexport const Close: CloseType = \"close\"","import { getLabelById } from \"../decorators\"\nimport { Close, CloseType, LabelRunModeType, StorageObjectType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport newCloseLabel from \"./CloseLabel\"\nimport Label from \"./Label\"\n\n/**\n * ChoiceMenuOption is a class that contains a Label and a text that will be displayed in the menu.\n * @example\n * ```typescript\n * new ChoiceMenuOption(\"Hello\", HelloLabel, {})\n * ```\n */\nexport default class ChoiceMenuOption<T extends StorageObjectType> {\n /**\n * Text to be displayed in the menu\n */\n text: string\n private _label: Label<T> | LabelIdType\n /**\n * Label to be opened when the option is selected\n */\n get label(): Label<T> {\n let label = this._label\n if (typeof label === \"string\") {\n let res = getLabelById(label)\n if (res) {\n label = res\n }\n else {\n console.error(`Label ${label} not found, so it will be closed`)\n label = newCloseLabel()\n }\n }\n return label\n }\n /**\n * Type of the label to be opened\n */\n type: LabelRunModeType\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType = {}\n /**\n * @param text Text to be displayed in the menu\n * @param label Label to be opened when the option is selected or the id of the label\n * @param props Properties to be passed to the label and olther parameters that you can use when get all the choice menu options. It be converted to a JSON string, so it cannot contain functions or classes.\n * @param type Type of the label to be opened. @default \"call\"\n */\n constructor(text: string, label: Label<T> | LabelIdType, props: T, type: LabelRunModeType = \"call\") {\n this.text = text\n this._label = label\n this.type = type\n if (props) {\n this.props = props\n }\n }\n}\n\n/**\n * ChoiceMenuOptionClose is a class that contains a text that will be displayed in the menu.\n * It is used to close the menu.\n * @example\n * ```typescript\n * new ChoiceMenuOptionClose(\"Return\")\n * ```\n */\nexport class ChoiceMenuOptionClose<T extends {} = {}> {\n /**\n * Label to be opened when the option is selected\n */\n label: Label<T> = newCloseLabel()\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * If true, the current label will be closed\n */\n closeCurrentLabel: boolean\n /**\n * Type of the label to be opened\n */\n type: CloseType = Close\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType = {}\n /**\n * @param text Text to be displayed in the menu\n * @param closeCurrentLabel If true, the current label will be closed. @default false\n */\n constructor(text: string, closeCurrentLabel: boolean = false) {\n this.text = text\n this.closeCurrentLabel = closeCurrentLabel\n }\n}\n\nexport type IStoratedChoiceMenuOption = {\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * Label Id to be opened when the option is selected\n */\n label: LabelIdType\n /**\n * Type of the label to be opened\n */\n type: LabelRunModeType\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType\n} | {\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * Type of the label to be opened\n */\n type: CloseType\n /**\n * If true, the current label will be closed\n */\n closeCurrentLabel: boolean\n}\n\n","import { GameStorageManager } from \"../managers\"\n\n/**\n * Set a flag to true or false. \n * @param name The name of the flag\n * @param value The value of the flag.\n */\nexport function setFlag(name: string, value: boolean) {\n let flags = GameStorageManager.getVariable<string[]>(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY) || []\n if (value) {\n if (!flags.includes(name)) {\n flags.push(name)\n }\n } else {\n let index = flags.indexOf(name)\n if (index > -1) {\n flags.splice(index, 1)\n }\n }\n GameStorageManager.setVariable(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY, flags)\n}\n\n/**\n * Get the value of a flag\n * @param name The name of the flag\n * @returns The value of the flag\n */\nexport function getFlag(name: string): boolean {\n let flags = GameStorageManager.getVariable<string[]>(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY) || []\n return flags.includes(name)\n}\n","import { CharacterBaseModel, DialogueBaseModel, Label } from \"../classes\";\nimport ChoiceMenuOption, { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\";\nimport newCloseLabel from \"../classes/CloseLabel\";\nimport { DialogueData } from \"../classes/DialogueBaseModel\";\nimport { getLabelById } from \"../decorators\";\nimport { DialogueHistory } from \"../interface\";\nimport { GameStepManager, GameStorageManager } from \"../managers\";\nimport { Close, HistoryChoiceMenuOption } from \"../types\";\nimport { ChoiceMenuOptionsType } from \"../types/ChoiceMenuOptionsType\";\nimport { getFlag, setFlag } from \"./FlagsUtility\";\n\n/**\n * Set the dialogue to be shown in the game\n * @param text Text of the dialogue\n * @example\n * ```typescript\n * setDialogue(\"Hello World\")\n * setDialogue({\n * character: \"character\",\n * text: \"Hello World\"\n * })\n * setDialogue(new DialogueBaseModel(\"Hello World\", character))\n * ```\n */\nexport function setDialogue<TCharacter extends CharacterBaseModel = CharacterBaseModel, TDialogue extends DialogueBaseModel = DialogueBaseModel>(props: {\n character: string | TCharacter,\n text: string | string[],\n} | string | string[] | TDialogue): void {\n let text = ''\n let character: string | undefined = undefined\n let dialogue: TDialogue | DialogueBaseModel\n if (typeof props === 'string') {\n text = props\n dialogue = new DialogueBaseModel(text, character)\n }\n else if (Array.isArray(props)) {\n text = props.join()\n dialogue = new DialogueBaseModel(text, character)\n }\n else if (!(props instanceof DialogueBaseModel)) {\n if (Array.isArray(props.text)) {\n text = props.text.join()\n }\n else {\n text = props.text\n }\n if (props.character) {\n if (typeof props.character === 'string') {\n character = props.character\n }\n else {\n character = props.character.id\n }\n }\n dialogue = new DialogueBaseModel(text, character)\n }\n else {\n dialogue = props\n }\n\n if (getFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY)) {\n let glueDialogue = getDialogue<TDialogue>()\n if (glueDialogue) {\n dialogue.text = `${glueDialogue.text}${dialogue.text}`\n }\n setFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY, false)\n }\n\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, dialogue as DialogueData)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the dialogue to be shown in the game\n * @returns Dialogue to be shown in the game\n */\nexport function getDialogue<T extends DialogueBaseModel = DialogueBaseModel>(): T | undefined {\n return GameStorageManager.getVariable<DialogueData>(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY) as T\n}\n\n/**\n * Clear the dialogue to be shown in the game\n */\nexport function clearDialogue(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, undefined)\n}\n\n/**\n * Set the options to be shown in the game\n * @param options Options to be shown in the game\n * @example\n * ```typescript\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", EventsTestLabel, {}),\n * new ChoiceMenuOption(\"Show Image Test\", ShowImageTest, { image: \"imageId\" }, \"call\"),\n * new ChoiceMenuOption(\"Ticker Test\", TickerTestLabel, {}),\n * new ChoiceMenuOption(\"Tinting Test\", TintingTestLabel, {}, \"jump\"),\n * new ChoiceMenuOption(\"Base Canvas Element Test\", BaseCanvasElementTestLabel, {})\n * ])\n * ```\n */\nexport function setChoiceMenuOptions(options: ChoiceMenuOptionsType<any>): void {\n let value: IStoratedChoiceMenuOption[] = options.map((option) => {\n if (option instanceof ChoiceMenuOptionClose) {\n return {\n text: option.text,\n type: Close,\n closeCurrentLabel: option.closeCurrentLabel,\n }\n }\n return {\n ...option,\n label: option.label.id,\n }\n })\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, value)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the options to be shown in the game\n * @returns Options to be shown in the game\n */\nexport function getChoiceMenuOptions<TChoice extends ChoiceMenuOptionsType = ChoiceMenuOptionsType<{ [key: string | number | symbol]: any }>>(): TChoice | undefined {\n let d = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n if (d) {\n let options: ChoiceMenuOptionsType = []\n d.forEach((option, index) => {\n if (option.type === Close) {\n let itemLabel = newCloseLabel(index)\n let choice = new ChoiceMenuOptionClose(option.text, option.closeCurrentLabel)\n choice.label = itemLabel\n options.push(choice)\n return\n }\n let label = getLabelById(option.label)\n if (label) {\n let itemLabel = new Label(label.id, label.steps, {\n onStepStart: label.onStepStart,\n choiseIndex: index\n })\n options.push(new ChoiceMenuOption(option.text, itemLabel, option.props, option.type))\n }\n })\n return options as TChoice\n }\n return undefined\n}\n\n/**\n * Clear the options to be shown in the game\n */\nexport function clearChoiceMenuOptions(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, undefined)\n}\n\n/**\n * Get the history of the dialogues\n * @returns the history of the dialogues\n */\nexport function getDialogueHistory<T extends DialogueBaseModel = DialogueBaseModel>(): DialogueHistory<T>[] {\n let list: DialogueHistory<T>[] = []\n GameStepManager.stepsHistory.forEach((step) => {\n let dialoge = step.dialoge\n let requiredChoices = step.choices\n if (\n list.length > 0 &&\n list[list.length - 1].choices &&\n !list[list.length - 1].playerMadeChoice &&\n step.currentLabel\n ) {\n let oldChoices = list[list.length - 1].choices\n if (oldChoices) {\n let choiceMade = false\n if (step.choiceIndexMade !== undefined && oldChoices.length > step.choiceIndexMade) {\n oldChoices[step.choiceIndexMade].isResponse = true\n choiceMade = true\n }\n list[list.length - 1].playerMadeChoice = choiceMade\n list[list.length - 1].choices = oldChoices\n }\n }\n if (dialoge || requiredChoices) {\n let choices: HistoryChoiceMenuOption[] | undefined = requiredChoices?.map((choice) => {\n return {\n text: choice.text,\n type: choice.type,\n isResponse: false\n }\n })\n list.push({\n dialoge: dialoge as T,\n playerMadeChoice: false,\n choices: choices,\n stepIndex: step.index\n })\n }\n })\n return list\n}\n","import { GameStepManager, GameStorageManager, GameWindowManager } from \"../managers\";\n\n/**\n * Clear all game data. This function is used to reset the game.\n */\nexport function clearAllGameDatas() {\n GameStorageManager.clear();\n GameWindowManager.clear();\n GameStepManager.clear();\n}","import { Ticker, UPDATE_PRIORITY } from \"pixi.js\"\nimport { tickerDecorator } from \"../../decorators\"\nimport { geTickerInstanceById } from \"../../decorators/TickerDecorator\"\nimport ITicker from \"../../interface/ITicker\"\nimport { GameWindowManager } from \"../../managers\"\nimport { StorageElementType } from \"../../types/StorageElementType\"\nimport { TickerIdType } from \"../../types/TickerIdType\"\n\nexport type TickerArgsType = { [id: string]: StorageElementType } | {\n tagToRemoveAfter?: string[] | string,\n [id: string]: StorageElementType\n}[]\n\n/**\n * A class is used to create a ticker element to add into a Pixi Application.\n * You can use GameWindowManager.addTicker() to add this element into the application.\n * This class should be extended and the fn method should be overridden.\n * You must use the {@link tickerDecorator} to register the ticker in the game.\n * In Ren'Py is a transform.\n * @example\n * ```typescript\n * \\@tickerDecorator() // this is equivalent to tickerDecorator(\"RotateTicker\")\n * export class RotateTicker extends TickerBase<{ speed?: number }> {\n * override fn(\n * t: Ticker, // the ticker that is calling this method\n * args: { // the arguments that you passed when you added the ticker\n * speed?: number,\n * },\n * tags: string[], // the tags of the canvas elements that are connected to this ticker\n * tickerId: string, // the id of the ticker. You can use this to get the ticker from the GameWindowManager.currentTickers\n * ): void {\n * let speed = args.speed === undefined ? 0.1 : args.speed\n * tags.forEach((tag) => {\n * let element = GameWindowManager.getCanvasElement(tag)\n * if (element && element instanceof Container) {\n * if (clockwise)\n * element.rotation += speed * t.deltaTime\n * else\n * element.rotation -= speed * t.deltaTime\n * }\n * })\n * }\n * }\n * ```\n */\nexport default class TickerBase<TArgs extends TickerArgsType> implements ITicker<TArgs> {\n /**\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker in seconds. If is undefined, the step will end only when the animation is finished (if the animation doesn't have a goal to reach then it won't finish). @default undefined\n * @param priority The priority of the ticker. @default UPDATE_PRIORITY.NORMAL\n */\n constructor(args: TArgs, duration?: number, priority?: UPDATE_PRIORITY) {\n this.args = args\n this.duration = duration\n this.priority = priority\n this.id = this.constructor.prototype.id\n }\n /**\n * Get the id of the ticker. This variable is used in the system to get the ticker by id, {@link geTickerInstanceById}\n */\n id: TickerIdType = 'ticker_id_not_set'\n args: TArgs\n duration?: number\n priority?: UPDATE_PRIORITY\n /**\n * The method that will be called every frame.\n * This method should be overridden and you can use GameWindowManager.addCanvasElement() to get the canvas element of the canvas, and edit them.\n * @param _ticker The ticker that is calling this method\n * @param _args The arguments that you passed when you added the ticker\n * @param _tags The tags of the canvas elements that are connected to this ticker\n * @param _tickerId The id of the ticker. You can use this to get the ticker from the {@link GameWindowManager.currentTickers}\n */\n fn(_ticker: Ticker, _args: TArgs, _tags: string | string[], _tickerId: string): void { throw new Error(\"[Pixi'VN] The method TickerBase.fn() must be overridden\") }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { GameWindowManager } from \"../../managers\";\nimport { FadeAlphaTickerProps } from \"../../types/ticker/FadeAlphaTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that fades the alpha of the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let bunny = addImage(\"bunny1\", \"https://pixijs.com/assets/eggHead.png\")\n * await bunny.load()\n * GameWindowManager.addCanvasElement(\"bunny\", bunny);\n * // ...\n * const ticker = new FadeAlphaTicker({\n * duration: 4, // 4 seconds\n * type: \"hide\",\n * }),\n * GameWindowManager.addTicker(\"bunny\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class FadeAlphaTicker extends TickerBase<FadeAlphaTickerProps> {\n override fn(\n ticker: Ticker,\n args: FadeAlphaTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let type = args.type === undefined ? \"hide\" : args.type\n let duration = args.duration === undefined ? 1 : args.duration\n let speed = 1 / (duration * 60)\n let limit = args.limit === undefined ? type === \"hide\" ? 0 : 1 : args.limit\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (type === \"hide\" && limit < 0) {\n limit = 0\n }\n if (type === \"show\" && limit > 1) {\n limit = 1\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (type === \"show\" && element.alpha < limit) {\n element.alpha += speed * ticker.deltaTime\n }\n else if (type === \"hide\" && element.alpha > limit) {\n element.alpha -= speed * ticker.deltaTime\n }\n if (type === \"show\" && element.alpha >= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n else if (type === \"hide\" && element.alpha <= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n }\n}\n","import { ITickerProgrationExponential, ITickerProgrationLinear, TickerProgrationType } from \"../interface/TickerProgrationType\";\n\n/**\n * This function updates the progression of the ticker.\n * For example, if the speed of the ticker is 0.1 and the progression is 0.01, then the speed will be 0.11.\n * @param args The arguments that are passed to the ticker\n * @param propertyName The property name that will be updated \n * @param progression The progression of the ticker\n * @param valueConvert The function that converts the amount and limit of progression\n * @returns \n */\nexport function updateTickerProgression<T extends {}>(args: T, propertyName: keyof T, progression: TickerProgrationType, valueConvert?: (value: number) => number) {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n if (args[propertyName] === undefined\n || !progression\n || args[propertyName] === limit\n ) {\n return\n }\n if (typeof args[propertyName] === \"number\") {\n if (progression.type === \"linear\") {\n (args as any)[propertyName] = getLinearProgression(args[propertyName], progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName] = getExponentialProgression(args[propertyName], progression)\n }\n }\n // args[propertyName] is { x: number, y: number }\n else if (\n args[propertyName] !== undefined &&\n typeof args[propertyName] === \"object\" &&\n (args as any)[propertyName].haveOwnProperty(\"x\") &&\n (args as any)[propertyName].haveOwnProperty(\"y\") &&\n typeof (args as any)[propertyName].x === \"number\" &&\n typeof (args as any)[propertyName].y === \"number\"\n ) {\n if (progression.type === \"linear\") {\n (args as any)[propertyName].x = getLinearProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getLinearProgression((args as any)[propertyName].y, progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName].x = getExponentialProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getExponentialProgression((args as any)[propertyName].y, progression)\n }\n }\n}\n\nfunction getLinearProgression(number: number, progression: ITickerProgrationLinear, valueConvert?: (value: number) => number): number {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n let amt = valueConvert ? valueConvert(progression.amt) : progression.amt\n if (limit !== undefined) {\n if (number > limit && amt > 0) {\n return limit\n }\n else if (number < limit && amt < 0) {\n return limit\n }\n }\n return number + amt\n}\n\nfunction getExponentialProgression(number: number, progression: ITickerProgrationExponential, valueConvert?: (value: number) => number): number {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n if (limit !== undefined) {\n if (number > limit && progression.percentage > 0) {\n return limit\n }\n else if (number < limit && progression.percentage < 0) {\n return limit\n }\n }\n return number + number * progression.percentage\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { MoveTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that moves the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new MoveTicker({\n * speed: 0.1,\n * destination: { x: 100, y: 100 },\n * }),\n * ```\n */\n@tickerDecorator()\nexport default class MoveTicker extends TickerBase<MoveTickerProps> {\n override fn(\n ticker: Ticker,\n args: MoveTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 1\n let ySpeed = 1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = this.speedConvert(args.speed)\n ySpeed = this.speedConvert(args.speed)\n }\n else {\n xSpeed = this.speedConvert(args.speed.x)\n ySpeed = this.speedConvert(args.speed.y)\n }\n }\n let destination = args.destination\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n let xDistance = (destination.x - element.x) > 0 ? 1 : -1\n if (xDistance != 0) {\n element.x += xDistance * xSpeed * ticker.deltaTime\n let newDistance = destination.x - element.x\n if (xDistance < 0 && newDistance > 0 ||\n xDistance > 0 && newDistance < 0\n ) {\n element.x = destination.x\n }\n }\n let yDistance = (destination.y - element.y) > 0 ? 1 : -1\n if (yDistance != 0) {\n element.y += yDistance * ySpeed * ticker.deltaTime\n let newDistance = destination.y - element.y\n if (yDistance < 0 && newDistance > 0 ||\n yDistance > 0 && newDistance < 0\n ) {\n element.y = destination.y\n }\n }\n if (element.x == destination.x && element.y == destination.y) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 6\n }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { RotateTickerProps } from \"../../types/ticker/RotateTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that rotates the canvas element of the canvas. For centre rotation, set the anchor of the canvas element to 0.5.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new RotateTicker({\n * speed: 0.1,\n * clockwise: true,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class RotateTicker extends TickerBase<RotateTickerProps> {\n override fn(\n ticker: Ticker,\n args: RotateTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let speed = this.speedConvert(args.speed === undefined ? 1 : args.speed)\n let clockwise = args.clockwise === undefined ? true : args.clockwise\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (clockwise)\n element.rotation += speed * ticker.deltaTime\n else\n element.rotation -= speed * ticker.deltaTime\n if (speed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 60\n }\n}\n","import { Container, ContainerChild, Sprite, Ticker, UPDATE_PRIORITY } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { ZoomTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that zooms the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new ZoomTicker({\n * speed: 0.1,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class ZoomTicker extends TickerBase<ZoomTickerProps> {\n override fn(\n ticker: Ticker,\n args: ZoomTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 0.1\n let ySpeed = 0.1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = this.speedConvert(args.speed)\n ySpeed = this.speedConvert(args.speed)\n }\n else {\n xSpeed = this.speedConvert(args.speed.x)\n ySpeed = this.speedConvert(args.speed.y)\n }\n }\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n let type = args.type || \"zoom\"\n let xLimit = type === \"zoom\" ? Infinity : 0\n let yLimit = type === \"zoom\" ? Infinity : 0\n if (args.limit) {\n if (typeof args.limit === \"number\") {\n xLimit = args.limit\n yLimit = args.limit\n }\n else {\n xLimit = args.limit.x\n yLimit = args.limit.y\n }\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (\n type === \"zoom\"\n && (element.scale.x < xLimit || element.scale.y < yLimit)\n ) {\n element.scale.x += xSpeed * ticker.deltaTime\n element.scale.y += ySpeed * ticker.deltaTime\n }\n else if (\n type === \"unzoom\"\n && (element.scale.x > xLimit || element.scale.y > yLimit)\n ) {\n element.scale.x -= xSpeed * ticker.deltaTime\n element.scale.y -= ySpeed * ticker.deltaTime\n }\n if (type === \"zoom\") {\n if (element.scale.x > xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y > yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x >= xLimit && element.scale.y >= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n else if (type === \"unzoom\") {\n if (element.scale.x < xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y < yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x <= xLimit && element.scale.y <= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n if (xSpeed < 0.00001 && ySpeed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 60\n }\n\n onEndOfTicker<T extends Container = Container>(\n tag: string,\n tickerId: string,\n _element: T,\n tagToRemoveAfter: string[] | string,\n ): void {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n}\n\n\nexport class ZoomInOutTicker extends ZoomTicker {\n constructor(props: ZoomTickerProps, duration?: number, priority?: UPDATE_PRIORITY) {\n super(props, duration, priority)\n }\n override onEndOfTicker<T extends Container = Container<ContainerChild>>(tag: string, tickerId: string, element: T, tagToRemoveAfter: string[] | string): void {\n if (element.children.length > 0) {\n let elementChild = element.children[0]\n GameWindowManager.addCanvasElement(tag, elementChild as any)\n }\n super.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n}\n","import { PauseType, RepeatType } from \"./types\"\n\nexport const PIXIVN_VERSION = '0.6.14'\nexport const Repeat: RepeatType = \"repeat\"\n/**\n * Pause the tickers for a duration.\n * @param duration Duration in seconds\n * @returns The pause object\n */\nexport function Pause(duration: number): PauseType {\n return {\n type: \"pause\",\n duration: duration,\n }\n}\n","import { Texture, UPDATE_PRIORITY } from 'pixi.js';\nimport { CanvasBase, CanvasContainer, CanvasImage, CanvasSprite } from '../classes/canvas';\nimport { FadeAlphaTicker, MoveTicker } from '../classes/ticker';\nimport { ZoomInOutTicker } from '../classes/ticker/ZoomTicker';\nimport { Pause } from '../constants';\nimport { GameWindowManager } from '../managers';\nimport { FadeAlphaTickerProps, MoveTickerProps, ZoomTickerProps } from '../types/ticker';\nimport { tagToRemoveAfterType } from '../types/ticker/TagToRemoveAfterType';\nimport { getTexture } from './TextureUtility';\n\n/**\n * Add a image in the canvas.\n * Is the same that showImage, but the image is not shown.\n * If you want to show the image, then you need to use the function CanvasImage.load().\n * @param tag is the unique tag of the image. You can use this tag to refer to this image\n * @param imageUrl is the url of the image.\n * @returns the container of the image.\n * @example\n * ```typescript\n * let alien = addImage(\"bunny1\", \"https://pixijs.com/assets/eggHead.png\")\n * await alien.load()\n * ```\n */\nexport function addImage(tag: string, imageUrl: string): CanvasImage {\n let image = new CanvasImage()\n image.imageLink = imageUrl\n GameWindowManager.addCanvasElement(tag, image)\n return image\n}\n\n/**\n * Show a list of images in the canvas, at the same time.\n * @param canvasImages is a list of images to show.\n * @returns the list of images.\n */\nexport async function loadImage(canvasImages: CanvasImage[] | CanvasImage): Promise<CanvasImage[]> {\n if (!Array.isArray(canvasImages)) {\n return [canvasImages]\n }\n let promises: Promise<void | Texture>[] = Array<Promise<void | Texture>>(canvasImages.length)\n for (let i = 0; i < canvasImages.length; i++) {\n promises[i] = getTexture(canvasImages[i].imageLink)\n }\n // wait for all promises\n return Promise.all(promises).then((textures) => {\n return textures.map((texture, index) => {\n if (texture) {\n canvasImages[index].texture = texture\n return canvasImages[index]\n }\n canvasImages[index].load()\n return canvasImages[index]\n })\n })\n}\n\n/**\n * Add and show a image in the canvas. This function is a combination of {@link addImage} and {@link loadImage}.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param imageUrl The url of the image.\n * @returns A promise that is resolved when the image is loaded.\n */\nexport async function showImage(tag: string, imageUrl: string): Promise<CanvasImage> {\n let image = addImage(tag, imageUrl)\n await image.load()\n return image\n}\n\n/**\n * Remove a image from the canvas.\n * @param tag is the unique tag of the image. You can use this tag to refer to this image\n */\nexport function removeCanvasElement(tag: string | string[]) {\n GameWindowManager.removeCanvasElement(tag)\n}\n\n/**\n * Show a image in the canvas with a disolve effect.\n * Disolve effect is a effect that the image is shown with a fade in.\n * If exist a image with the same tag, then the image is replaced and the first image is removed after the effect is done.\n * This transition is done with a {@link FadeAlphaTicker} effect.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param image The imageUrl or the canvas element\n * @param props The properties of the effect\n * @param priority The priority of the effect\n * @returns A promise that is resolved when the image is loaded.\n */\nexport async function showWithDissolveTransition<T extends CanvasBase<any> | string = string>(\n tag: string,\n image: T,\n props: Omit<FadeAlphaTickerProps, \"type\" | tagToRemoveAfterType | \"startOnlyIfHaveTexture\"> = {},\n priority?: UPDATE_PRIORITY,\n): Promise<void> {\n let oldCanvasTag: string | undefined = undefined\n if (GameWindowManager.getCanvasElement(tag)) {\n oldCanvasTag = tag + \"_temp_disolve\"\n GameWindowManager.editCanvasElementTag(tag, oldCanvasTag)\n }\n\n let canvasElement: CanvasBase<any>\n if (typeof image === \"string\") {\n canvasElement = addImage(tag, image)\n }\n else {\n canvasElement = image\n GameWindowManager.addCanvasElement(tag, canvasElement)\n }\n if (canvasElement instanceof CanvasImage && canvasElement.texture?.label == \"EMPTY\") {\n await canvasElement.load()\n }\n canvasElement.alpha = 0\n\n let effect = new FadeAlphaTicker({\n ...props,\n type: \"show\",\n tagToRemoveAfter: oldCanvasTag,\n startOnlyIfHaveTexture: true,\n }, 10, priority)\n GameWindowManager.addTicker(tag, effect)\n return\n}\n\n/**\n * Remove a image from the canvas with a disolve effect.\n * Disolve effect is a effect that the image is removed with a fade out.\n * This transition is done with a {@link FadeAlphaTicker} effect.\n * This function is equivalent to {@link removeWithFadeTransition}.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param props The properties of the effect\n * @param priority The priority of the effect\n */\nexport function removeWithDissolveTransition(\n tag: string | string[],\n props: Omit<FadeAlphaTickerProps, \"type\" | tagToRemoveAfterType | \"startOnlyIfHaveTexture\"> = {},\n priority?: UPDATE_PRIORITY,\n): void {\n if (typeof tag === \"string\") {\n tag = [tag]\n }\n let effect = new FadeAlphaTicker({\n ...props,\n type: 'hide',\n tagToRemoveAfter: tag,\n startOnlyIfHaveTexture: true,\n }, 10, priority)\n GameWindowManager.addTicker(tag, effect)\n}\n\n/**\n * Show a image in the canvas with a fade effect.\n * Fade effect is a effect that the image is shown with a fade in.\n * If exist a image with the same tag, the existing image is removed with a fade transition, and after the effect is done, the new image is shown with a fade transition.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param image The imageUrl or the canvas element\n * @param props The properties of the effect\n * @param priority The priority of the effect\n * @returns A promise that is resolved when the image is loaded.\n */\nexport async function showWithFadeTransition<T extends CanvasBase<any> | string = string>(\n tag: string,\n image: T,\n props: Omit<FadeAlphaTickerProps, \"type\" | tagToRemoveAfterType | \"startOnlyIfHaveTexture\"> = {},\n priority?: UPDATE_PRIORITY,\n): Promise<void> {\n if (!GameWindowManager.getCanvasElement(tag)) {\n return showWithDissolveTransition(tag, image, props, priority)\n }\n\n let oldCanvasTag = tag + \"_temp_fade\"\n GameWindowManager.editCanvasElementTag(tag, oldCanvasTag)\n\n let canvasElement: CanvasBase<any>\n if (typeof image === \"string\") {\n canvasElement = addImage(tag, image)\n }\n else {\n canvasElement = image\n GameWindowManager.addCanvasElement(tag, canvasElement)\n }\n if (canvasElement instanceof CanvasImage && canvasElement.texture?.label == \"EMPTY\") {\n await canvasElement.load()\n }\n canvasElement.alpha = 0\n\n GameWindowManager.addTickersSteps(oldCanvasTag, [\n new FadeAlphaTicker({\n ...props,\n type: \"hide\",\n startOnlyIfHaveTexture: true,\n }),\n ])\n GameWindowManager.addTickersSteps(tag, [\n Pause(props.duration || 1),\n new FadeAlphaTicker({\n ...props,\n type: \"show\",\n startOnlyIfHaveTexture: true,\n })\n ])\n}\n\n/**\n * Remove a image from the canvas with a fade effect.\n * Fade effect is a effect that the image is removed with a fade out.\n * This transition is done with a {@link FadeAlphaTicker} effect.\n * This function is equivalent to {@link removeWithDissolveTransition}.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param props The properties of the effect\n * @param priority The priority of the effect\n */\nexport function removeWithFadeTransition(\n tag: string | string[],\n props: Omit<FadeAlphaTickerProps, \"type\" | tagToRemoveAfterType | \"startOnlyIfHaveTexture\"> = {},\n priority?: UPDATE_PRIORITY,\n): void {\n return removeWithDissolveTransition(tag, props, priority)\n}\n\ntype MoveInOutProps = {\n /**\n * The direction of the movement.\n */\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n} & Omit<MoveTickerProps, tagToRemoveAfterType | \"startOnlyIfHaveTexture\" | \"destination\">\n\n/**\n * Show a image in the canvas with a move effect. The image is moved from outside the canvas to the x and y position of the image.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param image The imageUrl or the canvas element\n * @param props The properties of the effect\n * @param priority The priority of the effect\n * @returns A promise that is resolved when the image is loaded.\n */\nexport async function moveIn<T extends CanvasBase<any> | string = string>(\n tag: string,\n image: T,\n props: MoveInOutProps = { direction: \"right\" },\n priority?: UPDATE_PRIORITY,\n): Promise<void> {\n let canvasElement: CanvasBase<any>\n if (typeof image === \"string\") {\n canvasElement = addImage(tag, image)\n }\n else {\n canvasElement = image\n GameWindowManager.addCanvasElement(tag, canvasElement)\n }\n if (canvasElement instanceof CanvasImage && canvasElement.texture?.label == \"EMPTY\") {\n await canvasElement.load()\n }\n\n let destination = { x: canvasElement.x, y: canvasElement.y }\n\n if (props.direction == \"up\") {\n canvasElement.y = GameWindowManager.canvasHeight + canvasElement.height\n }\n else if (props.direction == \"down\") {\n canvasElement.y = -(canvasElement.height)\n }\n else if (props.direction == \"left\") {\n canvasElement.x = GameWindowManager.canvasWidth + canvasElement.width\n }\n else if (props.direction == \"right\") {\n canvasElement.x = -(canvasElement.width)\n }\n\n let effect = new MoveTicker({\n ...props,\n destination,\n startOnlyIfHaveTexture: true,\n }, priority)\n\n GameWindowManager.addTicker(tag, effect)\n}\n\n/**\n * Remove a image from the canvas with a move effect. The image is moved from the x and y position of the image to outside the canvas.\n * @param tag The unique tag of the image. You can use this tag to refer to this image\n * @param props The properties of the effect\n * @param priority The priority of the effect\n */\nexport function moveOut(\n tag: string,\n props: MoveInOutProps = { direction: \"right\" },\n priority?: UPDATE_PRIORITY,\n): void {\n let canvasElement = GameWindowManager.getCanvasElement(tag)\n if (!canvasElement) {\n console.warn(\"[Pixi'VN] The canvas element is not found.\")\n return\n }\n\n let destination = { x: canvasElement.x, y: canvasElement.y }\n if (props.direction == \"up\") {\n destination.y = -(canvasElement.height)\n }\n else if (props.direction == \"down\") {\n destination.y = GameWindowManager.canvasHeight + canvasElement.height\n }\n else if (props.direction == \"left\") {\n destination.x = -(canvasElement.width)\n }\n else if (props.direction == \"right\") {\n destination.x = GameWindowManager.canvasWidth + canvasElement.width\n }\n\n let effect = new MoveTicker({\n ...props,\n destination,\n startOnlyIfHaveTexture: true,\n tagToRemoveAfter: tag,\n }, priority)\n\n GameWindowManager.addTicker(tag, effect)\n}\n\ntype ZoomInOutProps = {\n /**\n * The direction of the zoom effect.\n */\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n} & Omit<ZoomTickerProps, tagToRemoveAfterType | \"startOnlyIfHaveTexture\" | \"type\">\n\nexport async function zoomIn<T extends CanvasSprite | string = string>(\n tag: string,\n image: T,\n props: ZoomInOutProps = { direction: \"right\" },\n priority?: UPDATE_PRIORITY,\n) {\n let canvasElement: CanvasSprite\n if (typeof image === \"string\") {\n canvasElement = new CanvasImage({}, image)\n }\n else {\n canvasElement = image\n }\n\n let container = new CanvasContainer()\n container.addChild(canvasElement)\n container.height = GameWindowManager.canvasHeight\n container.width = GameWindowManager.canvasWidth\n GameWindowManager.addCanvasElement(tag, container)\n\n if (canvasElement instanceof CanvasImage && canvasElement.texture?.label == \"EMPTY\") {\n await canvasElement.load()\n }\n\n if (props.direction == \"up\") {\n container.pivot.y = GameWindowManager.canvasHeight\n container.pivot.x = GameWindowManager.canvasWidth / 2\n container.y = GameWindowManager.canvasHeight\n container.x = GameWindowManager.canvasWidth / 2\n }\n else if (props.direction == \"down\") {\n container.pivot.y = 0\n container.pivot.x = GameWindowManager.canvasWidth / 2\n container.y = 0\n container.x = GameWindowManager.canvasWidth / 2\n }\n else if (props.direction == \"left\") {\n container.pivot.x = GameWindowManager.canvasWidth\n container.pivot.y = GameWindowManager.canvasHeight / 2\n container.x = GameWindowManager.canvasWidth\n container.y = GameWindowManager.canvasHeight / 2\n }\n else if (props.direction == \"right\") {\n container.pivot.x = 0\n container.pivot.y = GameWindowManager.canvasHeight / 2\n container.x = 0\n container.y = GameWindowManager.canvasHeight / 2\n }\n container.scale.set(0)\n\n let effect = new ZoomInOutTicker({\n ...props,\n startOnlyIfHaveTexture: true,\n type: \"zoom\",\n limit: 1,\n }, priority)\n\n GameWindowManager.addTicker(tag, effect)\n}\n\nexport function zoomOut(\n tag: string,\n props: ZoomInOutProps = { direction: \"right\" },\n priority?: UPDATE_PRIORITY,\n) {\n let canvasElement = GameWindowManager.getCanvasElement(tag)\n if (!canvasElement) {\n console.warn(\"[Pixi'VN] The canvas element is not found.\")\n return\n }\n\n let container = new CanvasContainer()\n container.addChild(canvasElement)\n container.height = GameWindowManager.canvasHeight\n container.width = GameWindowManager.canvasWidth\n GameWindowManager.addCanvasElement(tag, container)\n\n if (props.direction == \"up\") {\n container.pivot.y = GameWindowManager.canvasHeight\n container.pivot.x = GameWindowManager.canvasWidth / 2\n container.y = GameWindowManager.canvasHeight\n container.x = GameWindowManager.canvasWidth / 2\n }\n else if (props.direction == \"down\") {\n container.pivot.y = 0\n container.pivot.x = GameWindowManager.canvasWidth / 2\n container.y = 0\n container.x = GameWindowManager.canvasWidth / 2\n }\n else if (props.direction == \"left\") {\n container.pivot.x = GameWindowManager.canvasWidth\n container.pivot.y = GameWindowManager.canvasHeight / 2\n container.x = GameWindowManager.canvasWidth\n container.y = GameWindowManager.canvasHeight / 2\n }\n else if (props.direction == \"right\") {\n container.pivot.x = 0\n container.pivot.y = GameWindowManager.canvasHeight / 2\n container.x = 0\n container.y = GameWindowManager.canvasHeight / 2\n }\n container.scale.set(1)\n\n let effect = new ZoomInOutTicker({\n ...props,\n startOnlyIfHaveTexture: true,\n type: \"unzoom\",\n limit: 0,\n tagToRemoveAfter: tag,\n }, priority)\n\n GameWindowManager.addTicker(tag, effect)\n}\n","import { LabelJson } from \"../classes\";\nimport { saveLabel } from \"../decorators/LabelDecorator\";\nimport { PixiVNJson } from \"../interface\";\nimport { StepLabelJsonType } from \"../types\";\n\n/**\n * Import a Pixi'VN JSON to the system.\n * This feature was created to give other developers the ability to create tools that can generate Pixi'VN labels or that generate Pixi'VN after extracting information from a programming language designed for writing narratives.\n * @param data The Pixi'VN JSON to be imported\n * @returns\n */\nexport function importPixiVNJson(data: PixiVNJson | string) {\n try {\n if (typeof data === \"string\") {\n data = JSON.parse(data) as PixiVNJson\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error parsing imported Pixi'VN JSON\", e)\n return\n }\n if (typeof data !== \"object\") {\n console.error(\"[Pixi'VN] Error parsing imported Pixi'VN JSON: data is not an object\")\n return\n }\n if (data.labels) {\n let labels = data.labels\n for (const labelId in labels) {\n try {\n const steps: StepLabelJsonType[] = labels[labelId]\n let label = new LabelJson(labelId, steps)\n saveLabel(label)\n }\n catch (e) {\n console.error(`[Pixi'VN] Error creating JSON label ${labelId}`, e)\n }\n }\n }\n}\n","import { PIXIVN_VERSION } from \"../constants\";\nimport ISaveData from \"../interface/ISaveData\";\nimport { GameStepManager, GameStorageManager, GameWindowManager } from \"../managers\";\n\n/**\n * Get the save data\n * @returns The save data\n */\nexport function getSaveData(): ISaveData {\n return {\n pixivn_version: PIXIVN_VERSION,\n stepData: GameStepManager.export(),\n storageData: GameStorageManager.export(),\n canvasData: GameWindowManager.export(),\n path: window.location.pathname,\n };\n}\n\n/**\n * Get the save data as a JSON string\n * @returns The save data as a JSON string\n * @example\n * ```typescript\n * export function saveGame() {\n * const jsonString = getSaveJson()\n * const blob = new Blob([jsonString], { type: \"application/json\" });\n * const url = URL.createObjectURL(blob);\n * const a = document.createElement('a');\n * a.href = url;\n * a.download = \"save.json\";\n * a.click();\n * }\n * ```\n */\nexport function getSaveJson() {\n const saveData = getSaveData();\n return JSON.stringify(saveData);\n}\n\n/**\n * Load the save data\n * @param data The save data\n * @param navigate The function to navigate to a path\n */\nexport async function loadSaveData(data: ISaveData, navigate: (path: string) => void) {\n await GameStepManager.import(data.stepData);\n GameStorageManager.import(data.storageData);\n GameWindowManager.import(data.canvasData);\n navigate(data.path);\n}\n\n/**\n * Load the save data from a JSON string\n * @param dataString The save data as a JSON string\n * @param navigate The function to navigate to a path\n * @example\n * ```typescript\n * export function loadGameSave(navigate: (path: string) => void, afterLoad?: () => void) {\n * // load the save data from a JSON file\n * const input = document.createElement('input');\n * input.type = 'file';\n * input.accept = 'application/json';\n * input.onchange = (e) => {\n * const file = (e.target as HTMLInputElement).files?.[0];\n * if (file) {\n * const reader = new FileReader();\n * reader.onload = (e) => {\n * const jsonString = e.target?.result as string;\n * // load the save data from the JSON string\n * loadSaveJson(jsonString, navigate);\n * afterLoad && afterLoad();\n * };\n * reader.readAsText(file);\n * }\n * };\n * input.click();\n * }\n * ```\n */\nexport async function loadSaveJson(dataString: string, navigate: (path: string) => void) {\n await loadSaveData(jsonToSaveData(dataString), navigate);\n}\n\n/**\n * Convert a JSON string to a save data\n * @param json The JSON string\n * @returns The save data\n */\nexport function jsonToSaveData(json: string): ISaveData {\n return JSON.parse(json);\n}\n","/**\n * This function is used to create a deep copy of the element\n * @param element The element to be copied\n * @returns The copied element\n */\nexport function createExportableElement<T>(element: T): T {\n try {\n let elementString = JSON.stringify(element)\n return JSON.parse(elementString)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error creating exportable element\", e)\n throw new Error(\"[Pixi'VN] Error creating exportable element\")\n }\n}\n","import deepDiff from \"deep-diff\"\nimport { createExportableElement } from \"./ExportUtility\"\n\nexport function restoreDeepDiffChanges<T extends object = object>(data: T, differences: deepDiff.Diff<T, T>[]): T {\n let result = createExportableElement(data)\n differences.forEach((diff) => {\n let dataToEdit: any = result\n if (diff.path && diff.path.length > 0) {\n diff.path.forEach((path, index) => {\n if (diff.path && index === diff.path.length - 1) {\n if (diff.kind === \"E\" || diff.kind === \"D\") {\n dataToEdit[path] = diff.lhs\n }\n else if (diff.kind === \"N\") {\n // if path is a number, dataToEdit is an array\n if (Number.isInteger(path)) {\n // remove index from array\n if (Array.isArray(dataToEdit)) {\n dataToEdit.splice(path, 1)\n }\n }\n // if path is a string, dataToEdit is an object\n else if (typeof path === \"string\") {\n // remove key from object\n delete dataToEdit[path]\n }\n }\n else if (diff.kind === \"A\") {\n let index = diff.index\n if (diff.item.kind === \"N\") {\n // remove index from array\n (dataToEdit[path] as any[]).splice(index, 1)\n }\n else if (diff.item.kind === \"E\" || diff.item.kind === \"D\") {\n // edit index in array\n (dataToEdit[path] as any[])[index] = diff.item.lhs\n }\n else if (diff.item.kind === \"A\") {\n console.warn(\"[Pixi'VN] Nested array found, skipping diff\", diff)\n }\n else {\n console.warn(\"[Pixi'VN] No array found, skipping diff\", diff)\n }\n }\n }\n else {\n dataToEdit = dataToEdit[path]\n }\n })\n }\n else {\n console.warn(\"[Pixi'VN] No path found, skipping diff\", diff)\n }\n })\n return result\n}","import { createExportableElement } from \"../functions/ExportUtility\"\nimport { ExportedStorage } from \"../interface/export\"\nimport { StorageElementType } from \"../types/StorageElementType\"\n\nexport default class GameStorageManager {\n private static storage: { [key: string]: StorageElementType } = {}\n private constructor() { }\n public static get keysSystem() {\n return {\n /**\n * The key of the current dialogue memory\n */\n CURRENT_DIALOGUE_MEMORY_KEY: \"___current_dialogue_memory___\",\n /**\n * The key of the last dialogue added in the step memory\n */\n LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY: \"___last_dialogue_added_in_step_memory___\",\n /**\n * The key of the current menu options memory\n */\n CURRENT_MENU_OPTIONS_MEMORY_KEY: \"___current_menu_options_memory___\",\n /**\n * The key of the last menu options added in the step memory\n */\n LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY: \"___last_menu_options_added_in_step_memory___\",\n /**\n * The key of the characters memory\n */\n CHARACTER_CATEGORY_KEY: \"___character___\",\n /**\n * The key of the flags memory\n */\n FLAGS_CATEGORY_KEY: \"___flags___\",\n /**\n * This variable is used to add the next dialog text into the current dialog memory.\n * This value was added to introduce Ink Glue functionality https://github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md#glue\n */\n ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY: \"___glue___\",\n }\n }\n /**\n * Set a variable in the storage\n * @param key The key of the variable\n * @param value The value of the variable. If undefined, the variable will be removed\n * @returns\n */\n public static setVariable(key: string, value: StorageElementType) {\n key = key.toLowerCase()\n if (value === undefined || value === null) {\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n return\n }\n GameStorageManager.storage[key] = value\n }\n /**\n * Get a variable from the storage\n * @param key The key of the variable\n * @returns The value of the variable. If the variable does not exist, it will return undefined\n */\n public static getVariable<T extends StorageElementType>(key: string): T | undefined {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n return GameStorageManager.storage[key] as T\n }\n return undefined\n }\n /**\n * Remove a variable from the storage\n * @param key The key of the variable\n * @returns\n */\n public static removeVariable(key: string) {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n }\n /**\n * Clear the storage and the oidsUsed\n * @returns\n */\n public static clear() {\n GameStorageManager.storage = {}\n }\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n public static export(): ExportedStorage {\n return createExportableElement(GameStorageManager.storage)\n }\n public static importJson(dataString: string) {\n GameStorageManager.import(JSON.parse(dataString))\n }\n public static import(data: object) {\n GameStorageManager.clear()\n try {\n if (data) {\n GameStorageManager.storage = (data as ExportedStorage)\n }\n else {\n console.warn(\"[Pixi'VN] No storage data found\")\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","export function asciiArtLog() {\n console.info(`\n ____ _ _ ___ ___ _ \n | _ \\\\(_)_ _(_| ) \\\\ / / \\\\ | |\n | |_) | \\\\ \\\\/ / |/ \\\\ \\\\ / /| \\\\| |\n | __/| |> <| | \\\\ V / | |\\\\ |\n |_| |_/_/\\\\_\\\\_| \\\\_/ |_| \\\\_|\n `)\n}","export const tagToRemoveAfter = \"tagToRemoveAfter\";\nexport type tagToRemoveAfterType = \"tagToRemoveAfter\";\n","import { initDevtools } from '@pixi/devtools';\nimport sha1 from 'crypto-js/sha1';\nimport { Application, ApplicationOptions, Container, Ticker } from \"pixi.js\";\nimport CanvasBase from \"../classes/canvas/CanvasBase\";\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\";\nimport { Repeat } from \"../constants\";\nimport { geTickerInstanceById } from \"../decorators/TickerDecorator\";\nimport { exportCanvasElement, importCanvasElement } from \"../functions/CanvasUtility\";\nimport { asciiArtLog } from \"../functions/EasterEgg\";\nimport { createExportableElement } from \"../functions/ExportUtility\";\nimport { ITicker, ITickersSteps, TickerHistory, TickerTimeoutHistory } from \"../interface\";\nimport { ITickersStep } from \"../interface/ITickersSteps\";\nimport { ICanvasBaseMemory } from \"../interface/canvas\";\nimport { ExportedCanvas } from \"../interface/export\";\nimport { PauseType } from \"../types/PauseType\";\nimport { RepeatType } from \"../types/RepeatType\";\nimport { TickerIdType } from \"../types/TickerIdType\";\nimport { tagToRemoveAfter } from '../types/ticker/TagToRemoveAfterType';\n\n/**\n * This class is responsible for managing the canvas, the tickers, the events, and the window size and the children of the window.\n */\nexport default class GameWindowManager {\n private constructor() { }\n\n private static _app: Application | undefined = undefined\n /**\n * The PIXI Application instance.\n * It not recommended to use this property directly.\n */\n static get app() {\n if (!GameWindowManager._app) {\n throw new Error(\"[Pixi'VN] GameWindowManager.app is undefined\")\n }\n return GameWindowManager._app\n }\n private static _isInitialized: boolean = false\n /**\n * If the manager is initialized.\n */\n static get isInitialized() {\n return GameWindowManager._isInitialized\n }\n /**\n * This is the div that have same size of the canvas.\n * This is useful to put interface elements.\n * You can use React or other framework to put elements in this div.\n */\n static htmlLayout: HTMLElement\n static canvasWidth: number\n static canvasHeight: number\n static get screen() {\n return GameWindowManager.app.screen\n }\n\n /**\n * Initialize the PIXI Application and the interface div.\n * This method should be called before any other method.\n * @param element The html element where I will put the canvas. Example: document.body\n * @param width The width of the canvas\n * @param height The height of the canvas\n * @param options The options of PIXI Application\n * @example\n * ```typescript\n * const body = document.body\n * if (!body) {\n * throw new Error('body element not found')\n * }\n * await GameWindowManager.initialize(body, 1920, 1080, {\n * backgroundColor: \"#303030\"\n * })\n * ```\n */\n public static async initialize(element: HTMLElement, width: number, height: number, options?: Partial<ApplicationOptions>): Promise<void> {\n GameWindowManager.canvasWidth = width\n GameWindowManager.canvasHeight = height\n GameWindowManager._app = new Application()\n return GameWindowManager.app.init({\n resolution: window.devicePixelRatio || 1,\n autoDensity: true,\n width: width,\n height: height,\n ...options\n }).then(() => {\n initDevtools({ app: GameWindowManager._app });\n\n GameWindowManager._isInitialized = true\n // Manager.app.ticker.add(Manager.update)\n this.addCanvasIntoHTMLElement(element)\n // listen for the browser telling us that the screen size changed\n window.addEventListener(\"resize\", GameWindowManager.resize)\n\n // call it manually once so we are sure we are the correct size after starting\n GameWindowManager.resize()\n\n asciiArtLog()\n });\n }\n\n /**\n * Add the canvas into a html element.\n * @param element it is the html element where I will put the canvas. Example: document.body\n */\n private static addCanvasIntoHTMLElement(element: HTMLElement) {\n if (GameWindowManager.isInitialized) {\n element.appendChild(GameWindowManager.app.canvas as HTMLCanvasElement)\n }\n else {\n console.error(\"[Pixi'VN] GameWindowManager is not initialized\")\n }\n }\n /**\n * Initialize the interface div and add it into a html element.\n * @param element it is the html element where I will put the interface div. Example: document.getElementById('root')\n * @example\n * ```tsx\n * const root = document.getElementById('root')\n * if (!root) {\n * throw new Error('root element not found')\n * }\n * GameWindowManager.initializeHTMLLayout(root)\n * const reactRoot = createRoot(GameWindowManager.htmlLayout)\n * reactRoot.render(\n * <App />\n * )\n * ```\n */\n public static initializeHTMLLayout(element: HTMLElement) {\n let div = document.createElement('div')\n div.style.position = 'absolute'\n div.style.pointerEvents = 'none'\n element.appendChild(div)\n GameWindowManager.htmlLayout = div\n GameWindowManager.resize()\n }\n\n /* Resize Metods */\n\n /**\n * This method returns the scale of the screen.\n */\n public static get screenScale() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return Math.min(screenWidth / GameWindowManager.canvasWidth, screenHeight / GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the width of the screen enlarged by the scale.\n */\n public static get screenWidth() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasWidth)\n }\n /**\n * This method returns the height of the screen enlarged by the scale.\n */\n public static get screenHeight() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the horizontal margin of the screen.\n */\n public static get horizontalMargin() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n return (screenWidth - GameWindowManager.screenWidth) / 2\n }\n /**\n * This method returns the vertical margin of the screen.\n */\n public static get verticalMargin() {\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return (screenHeight - GameWindowManager.screenHeight) / 2\n }\n /**\n * This method is called when the screen is resized.\n */\n private static resize(): void {\n // now we use css trickery to set the sizes and margins\n if (GameWindowManager.isInitialized) {\n let style = GameWindowManager.app.canvas.style;\n style.width = `${GameWindowManager.screenWidth}px`;\n style.height = `${GameWindowManager.screenHeight}px`;\n (style as any).marginLeft = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginRight = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginTop = `${GameWindowManager.verticalMargin}px`;\n (style as any).marginBottom = `${GameWindowManager.verticalMargin}px`;\n }\n\n if (GameWindowManager.htmlLayout) {\n GameWindowManager.htmlLayout.style.width = `${GameWindowManager.screenWidth}px`\n GameWindowManager.htmlLayout.style.height = `${GameWindowManager.screenHeight}px`\n GameWindowManager.htmlLayout.style.marginLeft = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginRight = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginTop = `${GameWindowManager.verticalMargin}px`\n GameWindowManager.htmlLayout.style.marginBottom = `${GameWindowManager.verticalMargin}px`\n }\n }\n\n /* Edit Canvas Elements Methods */\n\n /**\n * This is a dictionary that contains all Canvas Elements of Canvas, currently.\n */\n static get currentCanvasElements() {\n return GameWindowManager._children\n }\n private static _children: { [tag: string]: CanvasBase<any> } = {}\n /**\n * The order of the children tags.\n */\n private static childrenTagsOrder: string[] = []\n /**\n * Add a canvas element to the canvas.\n * If there is a canvas element with the same tag, it will be removed.\n * @param tag The tag of the canvas element.\n * @param canvasElement The canvas elements to be added.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n public static addCanvasElement(tag: string, canvasElement: CanvasBase<any>) {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.removeCanvasElement(tag)\n }\n GameWindowManager.app.stage.addChild(canvasElement)\n GameWindowManager._children[tag] = canvasElement\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n /**\n * Remove a canvas element from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n * @param tags The tag of the canvas element to be removed.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.removeCanvasElement(\"bunny\");\n * ```\n */\n public static removeCanvasElement(tags: string | string[]) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n tags.forEach((tag) => {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.app.stage.removeChild(GameWindowManager._children[tag])\n delete GameWindowManager._children[tag]\n GameWindowManager.removeTickerByCanvasElement(tag)\n }\n })\n GameWindowManager.childrenTagsOrder = GameWindowManager.childrenTagsOrder.filter((t) => !tags.includes(t))\n }\n /**\n * Get a canvas element by the tag.\n * @param tag The tag of the canvas element.\n * @returns The canvas element.\n * @example\n * ```typescript\n * const sprite = GameWindowManager.getCanvasElement<CanvasSprite>(\"bunny\");\n * ```\n */\n public static getCanvasElement<T extends CanvasBase<any>>(tag: string): T | undefined {\n return GameWindowManager._children[tag] as T | undefined\n }\n /**\n * Check if a DisplayObject is on the canvas.\n * @param pixiElement The DisplayObject to be checked.\n * @returns If the DisplayObject is on the canvas.\n */\n public static canvasElementIsOnCanvas<T extends Container>(pixiElement: T) {\n return GameWindowManager.app.stage.children.includes(pixiElement)\n }\n /**\n * Remove all canvas elements from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n */\n public static removeCanvasElements() {\n GameWindowManager.app.stage.removeChildren()\n GameWindowManager._children = {}\n GameWindowManager.childrenTagsOrder = []\n GameWindowManager.removeAllTickers()\n }\n /**\n * Edit the tag of a canvas element.\n * @param oldTag The old tag of the canvas element.\n * @param newTag The new tag of the canvas element.\n */\n public static editCanvasElementTag(oldTag: string, newTag: string) {\n if (GameWindowManager._children[oldTag]) {\n GameWindowManager._children[newTag] = GameWindowManager._children[oldTag]\n delete GameWindowManager._children[oldTag]\n }\n if (GameWindowManager._currentTickersSteps[oldTag]) {\n GameWindowManager._currentTickersSteps[newTag] = GameWindowManager._currentTickersSteps[oldTag]\n delete GameWindowManager._currentTickersSteps[oldTag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(oldTag)) {\n ticker.canvasElementTags = ticker.canvasElementTags.map((t) => t === oldTag ? newTag : t)\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (Array.isArray(tagToRemoveAfter)) {\n ticker.args.tagToRemoveAfter = tagToRemoveAfter.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.tags.includes(oldTag)) {\n TickerTimeout.tags = TickerTimeout.tags.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n\n /** Edit Tickers Methods */\n\n /**\n * Currently tickers that are running.\n */\n public static get currentTickers() {\n return GameWindowManager._currentTickers\n }\n public static get currentTickersList() {\n return Object.values(GameWindowManager._currentTickers)\n }\n private static get currentTickersWithoutCreatedBySteps() {\n return Object.fromEntries(Object.entries(GameWindowManager._currentTickers).filter(([_, ticker]) => !ticker.createdByTicketStepsId))\n }\n private static _currentTickers: { [id: string]: TickerHistory<any> } = {}\n /**\n * The steps of the tickers\n */\n public static get currentTickersSteps() {\n return GameWindowManager._currentTickersSteps\n }\n private static _currentTickersSteps: { [tag: string]: ITickersSteps } = {}\n private static _currentTickersTimeouts: { [timeout: string]: TickerTimeoutHistory } = {}\n private static generateTickerId(tickerData: TickerHistory<any>): string {\n try {\n return sha1(JSON.stringify(tickerData)).toString() + \"_\" + Math.random().toString(36).substring(7)\n }\n catch (e) {\n throw new Error(`[Pixi'VN] Error to generate ticker id: ${e}`)\n }\n }\n /**\n * Run a ticker. You can run multiple addTicker with the same tag and different tickerClasses.\n * If you run a ticker with the same tag and tickerClass, the old ticker will be removed.\n * If already exists a sequence of tickers with the same tag, it will be removed.\n * @param canvasEslementTag The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be run.\n * @param args The arguments to be used in the ticker.\n * @param duration The time to be used in the ticker. This number is in seconds. If it is undefined, the ticker will run forever.\n * @param priority The priority to be used in the ticker.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.addTicker(\"alien\", new RotateTicker({ speed: 0.2 }))\n * ```\n */\n static addTicker<TArgs extends TickerArgsType>(canvasElementTag: string | string[], ticker: TickerBase<TArgs>) {\n let tickerId: TickerIdType = ticker.id\n if (typeof canvasElementTag === \"string\") {\n canvasElementTag = [canvasElementTag]\n }\n if (!geTickerInstanceById<TArgs>(tickerId, ticker.args, ticker.duration, ticker.priority)) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerId,\n args: createExportableElement(ticker.args),\n canvasElementTags: canvasElementTag,\n priority: ticker.priority,\n duration: ticker.duration,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n }\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(canvasElementTag, tickerId, timeout.toString(), true)\n }\n }\n private static pushTicker<TArgs extends TickerArgsType>(id: string, tickerData: TickerHistory<TArgs>, ticker: TickerBase<TArgs>) {\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(tickerData.canvasElementTags, ticker)\n GameWindowManager._currentTickers[id] = tickerData\n tickerData.fn = (t: Ticker) => {\n let data = GameWindowManager._currentTickers[id]\n if (data) {\n ticker?.fn(t, data.args, data.canvasElementTags, id)\n }\n }\n GameWindowManager.app.ticker.add(tickerData.fn, undefined, tickerData.priority)\n }\n /**\n * Run a sequence of tickers. If exists a ticker steps with the same tag, it will be removed.\n * @param tag The tag of canvas element that will use the tickers.\n * @param steps The steps of the tickers.\n * @param currentStepNumber The current step number. It is used to continue the sequence of tickers.\n * @returns\n * @example\n * ```typescript\n * GameWindowManager.addTickersSteps(\"alien\", [\n * new RotateTicker({ speed: 0.1, clockwise: true }, 2), // 2 seconds\n * Pause(1), // 1 second\n * new RotateTicker({ speed: 0.2, clockwise: false }, 2),\n * Repeat,\n * ])\n * ```\n */\n static addTickersSteps<TArgs extends TickerArgsType>(tag: string, steps: (ITicker<TArgs> | RepeatType | PauseType)[], currentStepNumber = 0) {\n if (steps.length == 0) {\n console.warn(\"[Pixi'VN] The steps of the tickers is empty\")\n return\n }\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n GameWindowManager._currentTickersSteps[tag] = {\n currentStepNumber: currentStepNumber,\n steps: steps.map((step) => {\n if (step === Repeat) {\n return step\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n return step as PauseType\n }\n let tickerId = (step as ITicker<TArgs>).id\n return {\n ticker: tickerId,\n args: createExportableElement((step as ITicker<TArgs>).args),\n duration: step.duration,\n }\n })\n }\n GameWindowManager.runTickersSteps(tag)\n }\n private static restoneTickersSteps(data: { [tag: string]: ITickersSteps }) {\n for (let tag in data) {\n let steps = data[tag]\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n }\n private static runTickersSteps<TArgs extends TickerArgsType>(tag: string) {\n let step = GameWindowManager._currentTickersSteps[tag].steps[GameWindowManager._currentTickersSteps[tag].currentStepNumber]\n if (step === Repeat) {\n step = GameWindowManager._currentTickersSteps[tag].steps[0]\n GameWindowManager._currentTickersSteps[tag].currentStepNumber = 0\n if (step === Repeat) {\n console.error(\"[Pixi'VN] TikersSteps has a RepeatType in the first step\")\n return\n }\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, (step as PauseType).duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, \"steps\", timeout.toString(), false)\n return\n }\n let ticker = geTickerInstanceById<TArgs>((step as ITickersStep<TArgs>).ticker, (step as ITickersStep<TArgs>).args, step.duration, (step as ITickersStep<TArgs>).priority)\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${(step as ITickersStep<TArgs>).ticker} not found`)\n return\n }\n let tickerName: TickerIdType = ticker.id\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerName,\n args: createExportableElement(ticker.args),\n canvasElementTags: [tag],\n priority: ticker.priority,\n duration: ticker.duration,\n createdByTicketStepsId: tag,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, tickerName, timeout.toString(), false)\n }\n }\n private static nextTickerStep(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n let steps = GameWindowManager._currentTickersSteps[tag]\n if (steps.currentStepNumber + 1 < steps.steps.length) {\n steps.currentStepNumber++\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n else {\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n }\n }\n }\n public static onEndOfTicker(canvasElementTags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string, canvasElementTagsToDelete: string | string[], tickerId: string) {\n let tickerData = GameWindowManager._currentTickers[tickerId]\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(canvasElementTags, ticker)\n GameWindowManager.removeCanvasElement(canvasElementTagsToDelete)\n if (tickerData) {\n GameWindowManager.removeTicker(tickerId)\n if (tickerData.duration == undefined && tickerData.createdByTicketStepsId) {\n GameWindowManager.nextTickerStep(tickerData.createdByTicketStepsId)\n }\n }\n }\n /**\n * Remove a connection between a canvas element and a ticker.\n * And remove the ticker if there is no canvas element connected to it.\n * @param tags The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be removed.\n * @example\n * ```typescript\n * GameWindowManager.removeAssociationBetweenTickerCanvasElement(\"alien\", RotateTicker)\n * ```\n */\n public static removeAssociationBetweenTickerCanvasElement(tags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string) {\n let tickerId: TickerIdType\n if (typeof ticker === \"string\") {\n tickerId = ticker\n }\n else if (ticker instanceof TickerBase) {\n tickerId = ticker.id\n }\n else {\n tickerId = ticker.prototype.id\n }\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.id === tickerId) {\n GameWindowManager._currentTickers[id].canvasElementTags = ticker.canvasElementTags.filter((e) => !tags.includes(e))\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.ticker === tickerId && TickerTimeout.canBeDeletedBeforeEnd) {\n GameWindowManager._currentTickersTimeouts[timeout].tags = TickerTimeout.tags.filter((t) => !tags.includes(t))\n }\n }\n GameWindowManager.removeTickersWithoutAssociatedCanvasElement()\n }\n /**\n * Remove all tickers that are not connected to any existing canvas element.\n */\n private static removeTickersWithoutAssociatedCanvasElement() {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n ticker.canvasElementTags = ticker.canvasElementTags.filter((e) => GameWindowManager._children[e])\n if (ticker.canvasElementTags.length === 0) {\n GameWindowManager.removeTicker(id)\n }\n }\n for (let tag in GameWindowManager._currentTickersSteps) {\n if (GameWindowManager._children[tag] === undefined) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n }\n Object.entries(GameWindowManager._currentTickersTimeouts).forEach(([timeout, { tags }]) => {\n if (tags.length === 0) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n })\n }\n private static addTickerTimeoutInfo(tags: string | string[], ticker: string, timeout: string, canBeDeletedBeforeEnd: boolean) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n GameWindowManager._currentTickersTimeouts[timeout] = {\n tags: tags,\n ticker: ticker,\n canBeDeletedBeforeEnd: canBeDeletedBeforeEnd\n }\n }\n private static removeTickerTimeoutInfo(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n if (GameWindowManager._currentTickersTimeouts[timeout]) {\n delete GameWindowManager._currentTickersTimeouts[timeout]\n }\n }\n private static removeTickerTimeout(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n clearTimeout(Number(timeout))\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }\n private static removeTickerTimeoutsByTag(tag: string, checkCanBeDeletedBeforeEnd: boolean) {\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let tagsWithoutTagToRemove = GameWindowManager._currentTickersTimeouts[timeout].tags.filter((t) => t !== tag)\n if (tagsWithoutTagToRemove.length === 0) {\n let canBeDeletedBeforeEnd = GameWindowManager._currentTickersTimeouts[timeout].canBeDeletedBeforeEnd\n if (!checkCanBeDeletedBeforeEnd || canBeDeletedBeforeEnd) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n else {\n GameWindowManager._currentTickersTimeouts[timeout].tags = tagsWithoutTagToRemove\n }\n }\n }\n /**\n * Remove all tickers from the canvas.\n */\n public static removeAllTickers() {\n GameWindowManager._currentTickersSteps = {}\n Object.keys(GameWindowManager._currentTickers).forEach((id) => {\n GameWindowManager.removeTicker(id)\n })\n GameWindowManager._currentTickers = {}\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n /**\n * Remove all tickers from a canvas element.\n * @param tag The tag of the canvas element that will use the ticker.\n */\n private static removeTickerByCanvasElement(tag: string | string[]) {\n if (typeof tag === \"string\") {\n tag = [tag]\n }\n tag.forEach((tag) => {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(tag)) {\n GameWindowManager.removeTicker(id)\n }\n }\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n GameWindowManager.removeTickerTimeoutsByTag(tag, false)\n delete GameWindowManager._currentTickersSteps[tag]\n })\n }\n private static removeTickerStepByCanvasElement(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.createdByTicketStepsId === tag) {\n GameWindowManager.removeTicker(id)\n }\n }\n }\n private static removeTicker(tickerId: string) {\n let ticker = GameWindowManager._currentTickers[tickerId]\n if (ticker) {\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n GameWindowManager.removeCanvasElement(tagToRemoveAfter)\n }\n GameWindowManager.app.ticker.remove(ticker.fn)\n delete GameWindowManager._currentTickers[tickerId]\n }\n }\n\n /**\n * Clear the canvas and the tickers.\n */\n static clear() {\n GameWindowManager.removeCanvasElements()\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the canvas and the tickers to a JSON string.\n * @returns The JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the canvas and the tickers to an object.\n * @returns The object.\n */\n public static export(): ExportedCanvas {\n let currentElements: { [tag: string]: ICanvasBaseMemory } = {}\n for (let tag in GameWindowManager._children) {\n currentElements[tag] = exportCanvasElement(GameWindowManager._children[tag])\n }\n return {\n currentTickers: createExportableElement(GameWindowManager.currentTickersWithoutCreatedBySteps),\n currentTickersSteps: createExportableElement(GameWindowManager._currentTickersSteps),\n currentElements: createExportableElement(currentElements),\n childrenTagsOrder: createExportableElement(GameWindowManager.childrenTagsOrder),\n }\n }\n /**\n * Import the canvas and the tickers from a JSON string.\n * @param dataString The JSON string.\n */\n public static importJson(dataString: string) {\n GameWindowManager.import(JSON.parse(dataString))\n }\n /**\n * Import the canvas and the tickers from an object.\n * @param data The object.\n */\n public static import(data: object) {\n GameWindowManager.clear()\n try {\n if (data.hasOwnProperty(\"childrenTagsOrder\") && data.hasOwnProperty(\"currentElements\")) {\n let currentElements = (data as ExportedCanvas)[\"currentElements\"]\n let childrenTagsOrder = (data as ExportedCanvas)[\"childrenTagsOrder\"]\n childrenTagsOrder.forEach((tag) => {\n if (currentElements[tag]) {\n let element = importCanvasElement(currentElements[tag])\n GameWindowManager.addCanvasElement(tag, element)\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n })\n }\n else {\n console.error(\"[Pixi'VN] The data does not have the properties childrenTagsOrder and currentElements\")\n return\n }\n if (data.hasOwnProperty(\"currentTickers\")) {\n let currentTickers = (data as ExportedCanvas)[\"currentTickers\"]\n for (let id in currentTickers) {\n let t = currentTickers[id]\n let tags: string[] = t.canvasElementTags\n let ticker = geTickerInstanceById(t.id, t.args, t.duration, t.priority)\n if (ticker) {\n GameWindowManager.addTicker(tags, ticker)\n }\n else {\n console.error(`[Pixi'VN] Ticker ${t.id} not found`)\n }\n }\n }\n if (data.hasOwnProperty(\"currentTickersSteps\")) {\n let currentTickersSteps = (data as ExportedCanvas)[\"currentTickersSteps\"]\n GameWindowManager.restoneTickersSteps(currentTickersSteps)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import { diff } from \"deep-diff\"\nimport { DialogueBaseModel, Label } from \"../classes\"\nimport { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\"\nimport newCloseLabel, { CLOSE_LABEL_ID } from \"../classes/CloseLabel\"\nimport { getLabelById } from \"../decorators/LabelDecorator\"\nimport { getChoiceMenuOptions, getDialogue } from \"../functions\"\nimport { restoreDeepDiffChanges } from \"../functions/DiffUtility\"\nimport { createExportableElement } from \"../functions/ExportUtility\"\nimport { getStepSha1 } from \"../functions/StepLabelUtility\"\nimport ExportedStep from \"../interface/export/ExportedStep\"\nimport IHistoryStep, { IHistoryStepData } from \"../interface/IHistoryStep\"\nimport IOpenedLabel from \"../interface/IOpenedLabel\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelPropsType, StepLabelResultType, StepLabelType } from \"../types/StepLabelType\"\nimport GameStorageManager from \"./StorageManager\"\nimport GameWindowManager from \"./WindowManager\"\n\n/**\n * GameStepManager is a class that manages the steps and labels of the game.\n */\nexport default class GameStepManager {\n private constructor() { }\n /**\n * stepHistory is a list of label events and steps that occurred during the progression of the steps.\n */\n private static _stepsHistory: IHistoryStep[] = []\n static get stepsHistory() {\n return GameStepManager._stepsHistory\n }\n private static _lastStepIndex: number = 0\n /**\n * lastStepIndex is the last step index that occurred during the progression of the steps. **Not is the length of the stepsHistory - 1.**\n */\n static get lastStepIndex() {\n return GameStepManager._lastStepIndex\n }\n /**\n * Increase the last step index that occurred during the progression of the steps.\n */\n private static increaseLastStepIndex() {\n GameStepManager._lastStepIndex++\n }\n private static _openedLabels: IOpenedLabel[] = []\n static get openedLabels() {\n return GameStepManager._openedLabels\n }\n /**\n * currentLabelId is the current label id that occurred during the progression of the steps.\n */\n private static get currentLabelId(): LabelIdType | undefined {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.label\n }\n return undefined\n }\n /**\n * currentLabel is the current label that occurred during the progression of the steps.\n */\n static get currentLabel(): Label | undefined {\n if (GameStepManager.currentLabelId) {\n return getLabelById(GameStepManager.currentLabelId)\n }\n }\n private static get currentLabelStepIndex(): number | null {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.currentStepIndex\n }\n return null\n }\n /**\n * lastHistoryStep is the last history step that occurred during the progression of the steps.\n */\n private static get lastHistoryStep(): IHistoryStep | null {\n if (GameStepManager._stepsHistory.length > 0) {\n return GameStepManager._stepsHistory[GameStepManager._stepsHistory.length - 1]\n }\n return null\n }\n private static _originalStepData: IHistoryStepData | undefined = undefined\n private static get originalStepData(): IHistoryStepData {\n if (!GameStepManager._originalStepData) {\n return {\n path: \"\",\n storage: {},\n canvas: {\n childrenTagsOrder: [],\n currentElements: {},\n currentTickers: {},\n currentTickersSteps: {},\n },\n labelIndex: -1,\n openedLabels: [],\n }\n }\n return createExportableElement(GameStepManager._originalStepData)\n }\n private static set originalStepData(value: IHistoryStepData) {\n GameStepManager._originalStepData = createExportableElement(value)\n }\n\n private static get currentStepData(): IHistoryStepData {\n let currentStepData: IHistoryStepData = {\n path: window.location.pathname,\n storage: GameStorageManager.export(),\n canvas: GameWindowManager.export(),\n labelIndex: GameStepManager.currentLabelStepIndex || 0,\n openedLabels: createExportableElement(GameStepManager._openedLabels),\n }\n return currentStepData\n }\n\n /* Edit History Methods */\n\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static addStepHistory(step: StepLabelType<any>, choiseMade?: number) {\n let stepHistory: StepHistoryDataType = getStepSha1(step)\n let currentStepData: IHistoryStepData = GameStepManager.currentStepData\n if (GameStepManager.originalStepData) {\n if (GameStepManager.originalStepData.openedLabels.length === currentStepData.openedLabels.length) {\n try {\n let lastStepDataOpenedLabelsString = JSON.stringify(GameStepManager.originalStepData.openedLabels)\n let historyStepOpenedLabelsString = JSON.stringify(currentStepData.openedLabels)\n if (\n lastStepDataOpenedLabelsString === historyStepOpenedLabelsString &&\n GameStepManager.originalStepData.path === currentStepData.path &&\n GameStepManager.originalStepData.labelIndex === currentStepData.labelIndex\n ) {\n return\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error comparing openedLabels\", e)\n }\n }\n }\n let data = diff(GameStepManager.originalStepData, currentStepData)\n if (data) {\n let dialoge: DialogueBaseModel | undefined = undefined\n let requiredChoices: IStoratedChoiceMenuOption[] | undefined = undefined\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n dialoge = getDialogue()\n }\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n requiredChoices = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n }\n GameStepManager._stepsHistory.push({\n diff: data,\n currentLabel: GameStepManager.currentLabelId,\n dialoge: dialoge,\n choices: requiredChoices,\n stepSha1: stepHistory,\n index: GameStepManager.lastStepIndex,\n choiceIndexMade: choiseMade\n })\n GameStepManager.originalStepData = currentStepData\n }\n GameStepManager.increaseLastStepIndex()\n }\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static pushNewLabel(label: LabelIdType) {\n let currentLabel = getLabelById(label)\n if (!currentLabel) {\n throw new Error(`[Pixi'VN] Label ${label} not found`)\n }\n GameStepManager._openedLabels.push({\n label: label,\n currentStepIndex: 0,\n })\n }\n /**\n * Close the current label and add it to the history.\n * @returns \n */\n static closeCurrentLabel() {\n if (!GameStepManager.currentLabelId) {\n console.warn(\"[Pixi'VN] No label to close\")\n return\n }\n if (!GameStepManager.currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n GameStepManager._openedLabels.pop()\n }\n /**\n * Close all labels and add them to the history. **Attention: This method can cause an unhandled game ending.**\n */\n static closeAllLabels() {\n while (GameStepManager._openedLabels.length > 0) {\n GameStepManager.closeCurrentLabel()\n }\n }\n /**\n * Increase the current step index of the current label.\n */\n private static increaseCurrentStepIndex() {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1] = {\n ...item,\n currentStepIndex: item.currentStepIndex + 1,\n }\n }\n private static restorLastLabelList() {\n GameStepManager._openedLabels = GameStepManager.originalStepData.openedLabels\n }\n\n /* Run Methods */\n\n static get canGoNext(): boolean {\n let options = getChoiceMenuOptions()\n if (options && options.length > 0) {\n return false\n }\n return true\n }\n /**\n * Execute the next step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The index of the choise made by the player. (This params is used in the choice menu)\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * function nextOnClick() {\n * setLoading(true)\n * GameStepManager.goNext(yourParams)\n * .then((result) => {\n * setUpdate((p) => p + 1)\n * setLoading(false)\n * if (result) {\n * // your code\n * }\n * })\n * .catch((e) => {\n * setLoading(false)\n * console.error(e)\n * })\n * }\n * ```\n */\n public static async goNext(props: StepLabelPropsType, choiseMade?: number): Promise<StepLabelResultType> {\n if (!GameStepManager.canGoNext) {\n console.warn(\"[Pixi'VN] The player must make a choice\")\n return\n }\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.increaseCurrentStepIndex()\n return await GameStepManager.runCurrentStep(props, choiseMade)\n }\n /**\n * Execute the current step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The choise made by the player.\n * @returns StepLabelResultType or undefined.\n */\n private static async runCurrentStep<T extends {}>(props: StepLabelPropsType<T>, choiseMade?: number): Promise<StepLabelResultType> {\n if (GameStepManager.currentLabelId) {\n let currentLabelStepIndex = GameStepManager.currentLabelStepIndex\n if (currentLabelStepIndex === null) {\n console.error(\"[Pixi'VN] currentLabelStepIndex is null\")\n return\n }\n let currentLabel = GameStepManager.currentLabel as Label<T> | undefined\n if (!currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n if (currentLabel.steps.length > currentLabelStepIndex) {\n let onStepRun = currentLabel.onStepStart\n if (onStepRun) {\n await onStepRun(currentLabelStepIndex, currentLabel)\n }\n let step = currentLabel.steps[currentLabelStepIndex]\n let result = await step(props)\n GameStepManager.addStepHistory(step, choiseMade)\n return result\n }\n else if (GameStepManager.openedLabels.length > 1) {\n GameStepManager.closeCurrentLabel()\n return await GameStepManager.goNext(props, choiseMade)\n }\n else {\n GameStepManager.restorLastLabelList()\n if (GameStepManager.gameEnd) {\n return await GameStepManager.gameEnd(props)\n }\n console.error(\"[Pixi'VN] The end of the game is not managed, so the game is blocked. Read this documentation to know how to manage the end of the game: https://pixi-vn.web.app/start/labels.html#how-manage-the-end-of-the-game\")\n return\n }\n }\n }\n /**\n * Execute the label and add it to the history. (It's similar to Ren'Py's call function)\n * @param label The label to execute or the id of the label\n * @param props The props to pass to the label.\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.callLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.callLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async callLabel<T extends {} = {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error calling label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * Execute the label, close the current label, execute the new label and add the new label to the history. (It's similar to Ren'Py's jump function)\n * @param label The label to execute.\n * @param props The props to pass to the label or the id of the label\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.jumpLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.jumpLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async jumpLabel<T extends {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n GameStepManager.closeCurrentLabel()\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu<T>(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error jumping label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * When the player is in a choice menu, can use this function to exit to the choice menu.\n * @param choice\n * @param props\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.closeChoiceMenu(yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n */\n public static async closeChoiceMenu<T extends {} = {}>(choice: ChoiceMenuOptionClose<T>, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let label: Label<T> = choice.label\n let choiseMade: number | undefined = undefined\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n if (choice.closeCurrentLabel) {\n GameStepManager.closeCurrentLabel()\n }\n return GameStepManager.goNext(props, choiseMade)\n }\n\n /* After Update Methods */\n\n // /**\n // * After the update or code edit, some steps or labels may no longer match.\n // * - In case of step mismatch, the game will be updated to the last matching step.\n // * - In case of label mismatch, the game gives an error.\n // * @returns \n // */\n // private static afterUpdate() {\n // // TODO: implement\n // if (!GameStepManager.currentLabel) {\n // // TODO: implement\n // return\n // }\n // let currentLabel = getLabelInstanceByClassName(GameStepManager.currentLabel)\n // if (!currentLabel) {\n // console.error(\"Label not found\")\n // return\n // }\n // let oldSteps = GameStepManager.stepsAfterLastHistoryLabel\n // let currentStepIndex = currentLabel.getCorrespondingStepsNumber(oldSteps)\n // let stepToRemove = oldSteps.length - currentStepIndex\n // GameStepManager.removeLastHistoryNodes(stepToRemove)\n // GameStepManager.loadLastStep()\n // }\n // private static loadLastStep() {\n // // TODO: implement\n // }\n // /**\n // * Remove a number of items from the last of the history.\n // * @param itemNumber The number of items to remove from the last of the history.\n // */\n // private static removeLastHistoryNodes(itemNumber: number) {\n // // TODO: implement\n // for (let i = 0; i < itemNumber; i++) {\n // GameStepManager._stepsHistory.pop()\n // }\n // }\n // /**\n // * stepsAfterLastHistoryLabel is a list of steps that occurred after the last history label.\n // */\n // private static get stepsAfterLastHistoryLabel(): StepHistoryDataType[] {\n // let length = GameStepManager._stepsHistory.length\n // let steps: StepHistoryDataType[] = []\n // for (let i = length - 1; i >= 0; i--) {\n // let element = GameStepManager._stepsHistory[i]\n // if (typeof element === \"object\" && \"stepSha1\" in element) {\n // steps.push(element.stepSha1)\n // }\n // else {\n // break\n // }\n // }\n\n // steps = steps.reverse()\n // return steps\n // }\n\n /* Go Back & Refresh Methods */\n\n /**\n * Go back to the last step and add it to the history.\n * @param navigate The navigate function.\n * @param steps The number of steps to go back.\n * @returns \n * @example\n * ```typescript\n * export function goBack(navigate: (path: string) => void, afterBack?: () => void) {\n * GameStepManager.goBack(navigate)\n * afterBack && afterBack()\n * }\n * ```\n */\n public static async goBack(navigate: (path: string) => void, steps: number = 1) {\n if (steps <= 0) {\n console.warn(\"[Pixi'VN] Steps must be greater than 0\")\n return\n }\n if (GameStepManager._stepsHistory.length <= 1) {\n console.warn(\"[Pixi'VN] No steps to go back\")\n return\n }\n let restoredStep = GameStepManager.goBackInternal(steps, GameStepManager.originalStepData)\n if (restoredStep) {\n GameStepManager._originalStepData = restoredStep\n GameStepManager._openedLabels = createExportableElement(restoredStep.openedLabels)\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onLoadStep) {\n await GameStepManager.currentLabel.onLoadStep(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStorageManager.import(createExportableElement(restoredStep.storage))\n GameWindowManager.import(createExportableElement(restoredStep.canvas))\n navigate(restoredStep.path)\n }\n else {\n console.error(\"[Pixi'VN] Error going back\")\n }\n }\n private static goBackInternal(steps: number, restoredStep: IHistoryStepData): IHistoryStepData {\n if (steps <= 0) {\n return restoredStep\n }\n if (GameStepManager._stepsHistory.length == 0) {\n return restoredStep\n }\n let lastHistoryStep = GameStepManager.lastHistoryStep\n if (lastHistoryStep) {\n try {\n let result = restoreDeepDiffChanges(restoredStep, lastHistoryStep.diff)\n GameStepManager._lastStepIndex = lastHistoryStep.index\n GameStepManager._stepsHistory.pop()\n return GameStepManager.goBackInternal(steps - 1, result)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error applying diff\", e)\n return restoredStep\n }\n }\n else {\n return restoredStep\n }\n }\n\n /**\n * Return true if it is possible to go back.\n */\n public static get canGoBack(): boolean {\n return GameStepManager._stepsHistory.length > 1\n }\n\n /**\n * Add a label to the history.\n */\n public static clear() {\n GameStepManager._stepsHistory = []\n GameStepManager._openedLabels = []\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the history to a JSON string.\n * @returns The history in a JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the history to an object.\n * @returns The history in an object.\n */\n public static export(): ExportedStep {\n return {\n stepsHistory: GameStepManager._stepsHistory,\n openedLabels: GameStepManager._openedLabels,\n lastStepIndex: GameStepManager._lastStepIndex,\n originalStepData: GameStepManager._originalStepData,\n }\n }\n /**\n * Import the history from a JSON string.\n * @param dataString The history in a JSON string.\n */\n public static async importJson(dataString: string) {\n await GameStepManager.import(JSON.parse(dataString))\n }\n /**\n * Import the history from an object.\n * @param data The history in an object.\n */\n public static async import(data: object) {\n GameStepManager.clear()\n try {\n if (data.hasOwnProperty(\"stepsHistory\")) {\n GameStepManager._stepsHistory = (data as ExportedStep)[\"stepsHistory\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import stepsHistory data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"openedLabels\")) {\n GameStepManager._openedLabels = (data as ExportedStep)[\"openedLabels\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import openedLabels data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"lastStepIndex\")) {\n GameStepManager._lastStepIndex = (data as ExportedStep)[\"lastStepIndex\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import lastStepIndex data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"originalStepData\")) {\n GameStepManager._originalStepData = (data as ExportedStep)[\"originalStepData\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import originalStepData data, so will be ignored\")\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onLoadStep) {\n await GameStepManager.currentLabel.onLoadStep(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n\n /**\n * Function to be executed at the end of the game. It should be set in the game initialization.\n * @example\n * ```typescript\n * GameStepManager.gameEnd = async (props) => {\n * props.navigate(\"/end\")\n * }\n * ```\n */\n static gameEnd: StepLabelType | undefined = undefined\n}\n","import { GameStorageManager } from \"../managers\"\n\n/**\n * StoredClassModel is a abstract class that contains the methods to store a class in the game.\n * I suggest you extend this class to create your own stored class.\n * @example\n * ```typescript\n * export class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n * constructor(id: string, props: CharacterBaseModelProps) {\n * super(\"___character___\", id)\n * this.defaultName = props.name\n * this.defaultSurname = props.surname\n * }\n * private defaultName: string = \"\"\n * get name(): string {\n * return this.getStorageProperty<string>(\"name\") || this.defaultName\n * }\n * set name(value: string) {\n * this.setStorageProperty<string>(\"name\", value)\n * }\n * private defaultSurname?: string\n * get surname(): string | undefined {\n * return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n * }\n * set surname(value: string | undefined) {\n * this.setStorageProperty<string>(\"surname\", value)\n * }\n * }\n * ```\n */\nexport default class StoredClassModel {\n /**\n * @param categoryId The id of the category. For example if you are storing a character class, you can use \"characters\" as categoryId. so all instances of the character class will be stored in the \"characters\" category.\n * @param id The id of instance of the class. This id must be unique for the category.\n */\n constructor(categoryId: string, id: string) {\n this.categoryId = categoryId\n this._id = id\n }\n private _id: string\n /**\n * Is id of the stored class. is unique for this class.\n */\n get id(): string {\n return this._id\n }\n private categoryId: string\n /**\n * Update a property in the storage.\n * @param propertyName The name of the property to set.\n * @param value The value to set. If is undefined, the property will be removed from the storage.\n */\n protected setStorageProperty<T>(propertyName: string, value: T | undefined): void {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (!storage) {\n storage = {}\n }\n // if storage not have a key with the id\n if (!storage.hasOwnProperty(this.id)) {\n storage[this.id] = {}\n }\n\n if (value === undefined || value === null) {\n if (storage[this.id].hasOwnProperty(propertyName)) {\n delete storage[this.id][propertyName]\n }\n }\n else {\n storage[this.id] = { ...storage[this.id], [propertyName]: value }\n }\n\n if (Object.keys(storage[this.id]).length === 0) {\n delete storage[this.id]\n }\n\n GameStorageManager.setVariable(this.categoryId, storage)\n }\n /**\n * Get a property from the storage.\n * @param propertyName The name of the property to get.\n * @returns The value of the property. If the property is not found, returns undefined.\n */\n protected getStorageProperty<T>(propertyName: string): T | undefined {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (storage && storage.hasOwnProperty(this.id) && storage[this.id].hasOwnProperty(propertyName)) {\n return storage[this.id][propertyName]\n }\n return undefined\n }\n}\n","import { saveCharacter } from \"../decorators\"\nimport { CharacterBaseModelProps } from \"../interface\"\nimport { GameStorageManager } from \"../managers\"\nimport StoredClassModel from \"./StoredClassModel\"\n\n/**\n * CharacterBaseModel is a class that is used to create a character model.\n * I suggest you extend this class to create your own character models.\n * You must use the {@link saveCharacter} function to save the character in the game.\n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', {\n * name: 'Liam',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * export const alice = new CharacterBaseModel('alice', {\n * name: 'Alice',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * saveCharacter([liam, alice]);\n * ```\n */\nexport default class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n /**\n * @param id The id of the character.\n * @param props The properties of the character.\n */\n constructor(id: string, props: CharacterBaseModelProps) {\n super(GameStorageManager.keysSystem.CHARACTER_CATEGORY_KEY, id)\n this.defaultName = props.name\n this.defaultSurname = props.surname\n this.defaultAge = props.age\n this._icon = props.icon\n this._color = props.color\n }\n private defaultName: string = \"\"\n /***\n * The name of the character.\n * If you set undefined, it will return the default name.\n */\n get name(): string {\n return this.getStorageProperty<string>(\"name\") || this.defaultName\n }\n set name(value: string | undefined) {\n this.setStorageProperty<string>(\"name\", value)\n }\n private defaultSurname?: string\n /**\n * The surname of the character.\n * If you set undefined, it will return the default surname.\n */\n get surname(): string | undefined {\n return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n }\n set surname(value: string | undefined) {\n this.setStorageProperty<string>(\"surname\", value)\n }\n private defaultAge?: number | undefined\n /**\n * The age of the character.\n * If you set undefined, it will return the default age.\n */\n get age(): number | undefined {\n return this.getStorageProperty<number>(\"age\") || this.defaultAge\n }\n set age(value: number | undefined) {\n this.setStorageProperty<number>(\"age\", value)\n }\n private _icon?: string\n /**\n * The icon of the character.\n */\n get icon(): string | undefined {\n return this._icon\n }\n private _color?: string | undefined\n /**\n * The color of the character.\n */\n get color(): string | undefined {\n return this._color\n }\n}\n","import { StorageElementType } from \"../types\"\nimport CharacterBaseModel from \"./CharacterBaseModel\"\n\nexport type DialogueData = {\n /**\n * The text of the dialogue.\n */\n text: string\n /**\n * The id of the character that is speaking.\n */\n character?: string\n /**\n * Other parameters that can be stored in the dialogue.\n */\n oltherParams?: Record<string | number | symbol, StorageElementType>\n}\n\n/**\n * Base class for all dialogue models.\n * You can extend this class, but it is not reccomended. You can use the oltherParams property to store any other data you need.\n * @example\n * ```typescript\n * setDialogue(new DialogueBaseModel(\"Hello World\", character))\n * ```\n */\nexport default class DialogueBaseModel<TCharacter extends CharacterBaseModel = CharacterBaseModel> implements DialogueData {\n /**\n * @param text The text of the dialogue.\n * @param character The id of the character that is speaking. \n * @param oltherParams Other parameters that can be stored in the dialogue.\n */\n constructor(text: string | DialogueData, character?: string | TCharacter, oltherParams: { [key: string]: StorageElementType } = {}) {\n if (typeof text === \"string\") {\n this.text = text\n if (typeof character === \"string\") {\n this.character = character\n }\n else {\n this.character = character?.id\n }\n this.oltherParams = oltherParams\n }\n else {\n this.text = text.text\n if (text.character) {\n this.character = text.character\n }\n this.oltherParams = text.oltherParams || {}\n }\n }\n /**\n * The text of the dialogue.\n */\n text: string = \"\"\n /**\n * The id of the character that is speaking.\n */\n character?: string\n /**\n * Other parameters that can be stored in the dialogue.\n */\n oltherParams: { [key: string]: StorageElementType } = {}\n /**\n * Export the dialogue to a DialogueBaseData object.\n * \n * @returns The data of the dialogue.\n */\n export(): DialogueData {\n return {\n text: this.text,\n character: this.character,\n oltherParams: this.oltherParams\n }\n }\n}\n","import { clearChoiceMenuOptions, setChoiceMenuOptions, setDialogue, setFlag } from \"../functions\"\nimport { LabelProps } from \"../interface\"\nimport { GameStepManager, GameStorageManager } from \"../managers\"\nimport { StepLabelJsonType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\nimport ChoiceMenuOption from \"./ChoiceMenuOption\"\nimport LabelAbstract from \"./LabelAbstract\"\n\nexport default class LabelJson<T extends {} = {}> extends LabelAbstract<LabelJson<T>, T> {\n /**\n * @param id is the id of the label\n * @param steps is the list of steps that the label will perform\n * @param props is the properties of the label\n */\n constructor(id: LabelIdType, steps: StepLabelJsonType[] | (() => StepLabelJsonType[]), props?: LabelProps<LabelJson<T>>) {\n super(id, props)\n this._steps = steps\n }\n\n private _steps: StepLabelJsonType[] | (() => StepLabelJsonType[])\n /**\n * Get the steps of the label.\n */\n public get steps(): StepLabelType<T>[] {\n if (typeof this._steps === \"function\") {\n return this._steps().map(this.stepConverter)\n }\n return this._steps.map(this.stepConverter)\n }\n\n private stepConverter(step: StepLabelJsonType): StepLabelType<T> {\n return (props) => {\n if (step.choices) {\n let options = step.choices.map((option) => {\n let text: string = \"\"\n if (Array.isArray(option.text)) {\n text = option.text.join()\n }\n else {\n text = option.text\n }\n return new ChoiceMenuOption(text, option.label, option.props, option.type)\n })\n setChoiceMenuOptions(options)\n }\n else {\n clearChoiceMenuOptions()\n }\n\n if (step.glueEnabled) {\n setFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY, true)\n }\n else if (step.glueEnabled === false) {\n setFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY, false)\n }\n if (step.dialog) {\n setDialogue(step.dialog)\n }\n\n if (step.labelToOpen) {\n if (step.labelToOpen.type === \"jump\") {\n GameStepManager.jumpLabel(step.labelToOpen.labelId, props)\n }\n else {\n GameStepManager.callLabel(step.labelToOpen.labelId, props)\n }\n }\n\n if (step.goNextStep) {\n GameStepManager.goNext(props)\n }\n\n if (step.end === \"game_end\") {\n GameStepManager.closeAllLabels()\n GameStepManager.goNext(props)\n }\n else if (step.end === \"label_end\") {\n GameStepManager.closeCurrentLabel()\n }\n }\n }\n}\n","import { CharacterBaseModel } from \"../classes\";\nimport { saveCharacter } from \"../decorators\";\n\nexport const juliette = new CharacterBaseModel('___pixivn_juliette___', {\n name: 'Juliette',\n age: 25,\n icon: \"https://firebasestorage.googleapis.com/v0/b/pixi-vn.appspot.com/o/public%2Fcharacters%2Fjuliette-square.webp?alt=media\",\n color: \"#ac0086\"\n});\n\nsaveCharacter(juliette);\n\nexport const eggHeadImage = \"https://pixijs.com/assets/eggHead.png\"\nexport const eggHeadName = `<span style=\"color:purple\">Egg Head</span>`\nexport const flowerTopImage = \"https://pixijs.com/assets/flowerTop.png\"\nexport const flowerTopName = `<span style=\"color:green\">Flower Top</span>`\nexport const helmlokImage = \"https://pixijs.com/assets/helmlok.png\"\nexport const helmlokName = `<span style=\"color:blue\">Helmlok</span>`\nexport const skullyImage = \"https://pixijs.com/assets/skully.png\"\nexport const skullyName = `<span style=\"color:red\">Skully</span>`\nexport const bunnyImage = \"https://pixijs.com/assets/bunny.png\"\nexport const bunnyName = `Bunny`\n","import { Assets, Color, FillGradient, TextStyle } from \"pixi.js\";\nimport { CanvasContainer, CanvasSprite, CanvasText } from \"../classes/canvas\";\nimport { RotateTicker } from \"../classes/ticker\";\nimport { newLabel } from \"../decorators\";\nimport { removeCanvasElement, setDialogue } from \"../functions\";\nimport { GameWindowManager } from \"../managers\";\nimport { bunnyImage, juliette } from \"./TestConstant\";\n\nconst BASE_CANVAS_ELEMENT_LABEL = \"___pixi_vn_base_canvas_element_label___\"\n\nexport const baseCanvasElementTestLabel = newLabel(BASE_CANVAS_ELEMENT_LABEL,\n [\n async () => {\n let number = 25\n setDialogue({\n character: juliette,\n text: `Here's what's going to happen: I'm going to create ${number} bunnies (CanvasSprites) and put them in a CanvasContainer.`\n })\n\n // Create and add a container to the stage\n const container = new CanvasContainer();\n\n GameWindowManager.addCanvasElement(\"container\", container);\n\n // Load the bunny texture\n const texture = await Assets.load(bunnyImage);\n\n // Create a 5x5 grid of bunnies in the container\n for (let i = 0; i < number; i++) {\n const bunny = new CanvasSprite(texture);\n\n bunny.x = (i % 5) * 40;\n bunny.y = Math.floor(i / 5) * 40;\n container.addChild(bunny);\n }\n\n // Move the container to the center\n container.x = GameWindowManager.screen.width / 2;\n container.y = GameWindowManager.screen.height / 2;\n\n // Center the bunny sprites in local container coordinates\n container.pivot.x = container.width / 2;\n container.pivot.y = container.height / 2;\n\n GameWindowManager.addTicker(\"container\", new RotateTicker({ speed: 1 }));\n },\n async () => {\n removeCanvasElement(\"container\");\n setDialogue({\n character: juliette,\n text: `Here's what's going to happen: I'm going to create some CanvasText with different styles and put them on the stage.\nBut it will generate a warn message, because the FillGradient or FillPattern has not yet been supported by the Pixi’VN ( you can see the status of the issue here: [#76](https://github.com/DRincs-Productions/pixi-vn/issues/76)).`\n })\n\n const basicStyle = new TextStyle({\n fill: '#ffffff',\n });\n const basicText = new CanvasText({\n text: 'Basic text in pixi',\n style: basicStyle\n });\n\n basicText.x = 50;\n basicText.y = 100;\n\n GameWindowManager.addCanvasElement(\"basicText\", basicText);\n\n // Create gradient fill\n const fill = new FillGradient(0, 0, 0, 36 * 1.7 * 7);\n\n const colors = [0xffffff, 0x00ff99].map((color) => Color.shared.setValue(color).toNumber());\n\n colors.forEach((number, index) => {\n const ratio = index / colors.length;\n\n fill.addColorStop(ratio, number);\n });\n\n const style = new TextStyle({\n fontFamily: 'Arial',\n fontSize: 36,\n fontStyle: 'italic',\n fontWeight: 'bold',\n fill: { fill },\n stroke: { color: '#4a1850', width: 5, join: 'round' },\n dropShadow: {\n color: '#ff5f74',\n blur: 4,\n angle: Math.PI / 6,\n distance: 6,\n },\n wordWrap: true,\n wordWrapWidth: 440,\n });\n\n const richText = new CanvasText({\n text: 'Rich text with a lot of options and across multiple lines',\n style,\n });\n\n richText.x = 50;\n richText.y = 220;\n\n GameWindowManager.addCanvasElement(\"richText\", richText);\n\n const skewStyle = new TextStyle({\n fontFamily: 'Arial',\n dropShadow: {\n alpha: 0.8,\n angle: 2.1,\n blur: 4,\n color: '0x111111',\n distance: 10,\n },\n fill: '#ffffff',\n stroke: { color: '#004620', width: 12, join: 'round' },\n fontSize: 60,\n fontWeight: 'lighter',\n });\n\n const skewText = new CanvasText({\n text: 'SKEW IS COOL',\n style: skewStyle,\n });\n\n skewText.skew.set(0.65, -0.3);\n skewText.anchor.set(0.5, 0.5);\n skewText.x = 300;\n skewText.y = 480;\n\n GameWindowManager.addCanvasElement(\"skewText\", skewText);\n }\n ]\n)\n","import { Assets, Texture } from \"pixi.js\";\nimport { CanvasEvent } from \"../classes\";\nimport { CanvasSprite } from \"../classes/canvas\";\nimport { eventDecorator, newLabel } from \"../decorators\";\nimport { setDialogue } from \"../functions\";\nimport { GameWindowManager } from \"../managers\";\nimport { CanvasEventNamesType } from \"../types\";\nimport { bunnyImage, bunnyName, juliette } from \"./TestConstant\";\n\n@eventDecorator(\"___pixi_vn_canvas_events_test_event1___\")\nexport class EventTest1 extends CanvasEvent<CanvasSprite> {\n override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n if (event === 'pointerdown') {\n sprite.scale.x *= 1.25;\n sprite.scale.y *= 1.25;\n }\n }\n}\n@eventDecorator(\"___pixi_vn_canvas_events_test_event2___\")\nexport class EventTest2 extends CanvasEvent<CanvasSprite> {\n override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n if (event === 'pointerdown') {\n (sprite as any).isdown = true;\n sprite.texture = Texture.from('https://pixijs.com/assets/button_down.png');\n sprite.alpha = 1;\n }\n else if (event === 'pointerup' || event === 'pointerupoutside') {\n (sprite as any).isdown = false;\n if ((sprite as any).isOver) {\n sprite.texture = Texture.from('https://pixijs.com/assets/button_over.png');\n }\n else {\n sprite.texture = Texture.from('https://pixijs.com/assets/button.png');\n }\n }\n else if (event === 'pointerover') {\n (sprite as any).isOver = true;\n if ((sprite as any).isdown) {\n return;\n }\n sprite.texture = Texture.from('https://pixijs.com/assets/button_over.png');\n }\n else if (event === 'pointerout') {\n (sprite as any).isOver = false;\n if ((sprite as any).isdown) {\n return;\n }\n sprite.texture = Texture.from('https://pixijs.com/assets/button.png');\n }\n }\n}\n\nconst CANVAS_EVENTS_TEST_LABEL = \"___pixi_vn_canvas_events_test___\"\n\nexport const canvasEventsTestLabel = newLabel(CANVAS_EVENTS_TEST_LABEL,\n [\n () => setDialogue({\n character: juliette,\n text: \"This is the test of clickable elements in a canvas.\"\n }),\n async () => {\n setDialogue({\n character: juliette,\n text: `This is my friend, ${bunnyName}. It's small now, but if you try to click on it it will get bigger and bigger. (This example is from the official [PixiJS website](https://pixijs.com/8.x/examples/events/click).)`\n });\n\n // Load the bunny texture\n const texture = await Assets.load(bunnyImage);\n\n // Create the bunny sprite\n const sprite = CanvasSprite.from(texture);\n sprite.scale.set(3);\n\n // Set the initial position\n sprite.anchor.set(0.5);\n sprite.x = GameWindowManager.screen.width / 2;\n sprite.y = GameWindowManager.screen.height / 2;\n\n // Opt-in to interactivity\n sprite.eventMode = 'static';\n\n // Shows hand cursor\n sprite.cursor = 'pointer';\n\n // Pointers normalize touch and mouse (good for mobile and desktop)\n sprite.onEvent('pointerdown', EventTest1);\n\n // Alternatively, use the mouse & touch events:\n // sprite.on('click', onClick); // mouse-only\n // sprite.on('tap', onClick); // touch-only\n\n GameWindowManager.addCanvasElement(\"bunny\", sprite);\n },\n async () => {\n GameWindowManager.clear();\n setDialogue({\n character: juliette,\n text: `This is the test of buttons in a canvas. (This example is from the official [PixiJS website](https://pixijs.com/8.x/examples/events/interactivity).)`\n });\n\n // Create a background...\n const backgroundT = await Assets.load('https://pixijs.com/assets/bg_button.jpg');\n const background = new CanvasSprite(backgroundT);\n\n background.width = GameWindowManager.screen.width;\n background.height = GameWindowManager.screen.height;\n\n // Add background to stage...\n GameWindowManager.addCanvasElement(\"bg\", background);\n\n // Create some textures from an image path\n const textureButton = await Assets.load('https://pixijs.com/assets/button.png');\n\n const buttons = [];\n\n const buttonPositions = [175, 75, 655, 75, 410, 325, 150, 465, 685, 445];\n\n for (let i = 0; i < 5; i++) {\n const button = new CanvasSprite(textureButton);\n\n button.anchor.set(0.5);\n button.x = buttonPositions[i * 2];\n button.y = buttonPositions[i * 2 + 1];\n\n // Make the button interactive...\n button.eventMode = 'static';\n button.cursor = 'pointer';\n\n button\n // Mouse & touch events are normalized into\n // the pointer* events for handling different\n // button events.\n .onEvent('pointerdown', EventTest2)\n .onEvent('pointerup', EventTest2)\n .onEvent('pointerupoutside', EventTest2)\n .onEvent('pointerover', EventTest2)\n .onEvent('pointerout', EventTest2);\n\n // Add it to the stage\n GameWindowManager.addCanvasElement(\"button\" + i, button);\n\n // Add button to array\n buttons.push(button);\n }\n\n // Set some silly values...\n buttons[0].scale.set(1.2);\n buttons[2].rotation = Math.PI / 10;\n buttons[3].scale.set(0.8);\n buttons[4].scale.set(0.8, 1.2);\n buttons[4].rotation = Math.PI;\n }\n ],\n {\n onLoadStep: async () => {\n await Assets.load([\n 'https://pixijs.com/assets/bg_button.jpg',\n 'https://pixijs.com/assets/button.png',\n 'https://pixijs.com/assets/button_down.png',\n 'https://pixijs.com/assets/button_over.png',\n ]);\n }\n }\n)\n","import { Assets, Rectangle, Sprite, Texture, TextureSourceLike, Ticker } from \"pixi.js\";\nimport { CanvasSprite } from \"../classes/canvas\";\nimport { TickerBase } from \"../classes/ticker\";\nimport { canvasElementDecorator, newLabel, tickerDecorator } from \"../decorators\";\nimport { setDialogue } from \"../functions\";\nimport { ICanvasSpriteBaseMemory, ICanvasSpriteMemory } from \"../interface/canvas\";\nimport { GameWindowManager } from \"../managers\";\nimport { eggHeadImage, eggHeadName, juliette } from \"./TestConstant\";\n\ninterface IAlienTintingMemory extends ICanvasSpriteBaseMemory {\n direction: number\n turningSpeed: number\n speed: number\n}\n\n@canvasElementDecorator(\"___pixi_vn_custom_canvas_element___\")\nclass AlienTintingTest extends CanvasSprite<IAlienTintingMemory> {\n override get memory() {\n return {\n ...super.memory,\n direction: this.direction,\n turningSpeed: this.turningSpeed,\n speed: this.speed,\n }\n }\n override set memory(memory: IAlienTintingMemory) {\n super.memory = memory as ICanvasSpriteMemory\n this.direction = memory.direction\n this.turningSpeed = memory.turningSpeed\n this.speed = memory.speed\n }\n direction: number = 0\n turningSpeed: number = 0\n speed: number = 0\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new AlienTintingTest()\n mySprite.texture = sprite.texture\n return mySprite\n }\n}\n\n@tickerDecorator(\"___pixi_vn_custom_ticker___\")\nexport class TintingTestTicker extends TickerBase<{}> {\n constructor() {\n super({})\n }\n override fn(_t: Ticker, _args: {}, tags: string[]): void {\n tags.forEach((tag) => {\n // create a bounding box for the little dudes\n const dudeBoundsPadding = 100;\n const dudeBounds = new Rectangle(-dudeBoundsPadding,\n -dudeBoundsPadding,\n GameWindowManager.screen.width + dudeBoundsPadding * 2,\n GameWindowManager.screen.height + dudeBoundsPadding * 2);\n let dude = GameWindowManager.getCanvasElement(tag)\n if (dude && dude instanceof AlienTintingTest) {\n\n dude.direction += dude.turningSpeed * 0.01;\n dude.x += Math.sin(dude.direction) * dude.speed;\n dude.y += Math.cos(dude.direction) * dude.speed;\n dude.rotation = -dude.direction - Math.PI / 2;\n\n // wrap the dudes by testing their bounds...\n if (dude.x < dudeBounds.x) {\n dude.x += dudeBounds.width;\n }\n else if (dude.x > dudeBounds.x + dudeBounds.width) {\n dude.x -= dudeBounds.width;\n }\n\n if (dude.y < dudeBounds.y) {\n dude.y += dudeBounds.height;\n }\n else if (dude.y > dudeBounds.y + dudeBounds.height) {\n dude.y -= dudeBounds.height;\n }\n }\n })\n }\n}\n\nconst CUSTOM_TICKER_CANVAS_ELEMENT_TEST_LABEL = \"___pixi_vn_custom_ticker_canvas_element_test___\"\n\n/**\n * https://pixijs.com/examples/basic/tinting\n */\nexport const customTickerCanvasElementTestLabel = newLabel(CUSTOM_TICKER_CANVAS_ELEMENT_TEST_LABEL,\n [\n async () => {\n const totalDudes = 100;\n\n for (let i = 0; i < totalDudes; i++) {\n // create a new Sprite that uses the image name that we just generated as its source\n const texture = await Assets.load(eggHeadImage);\n const dude = AlienTintingTest.from(texture);\n\n // set the anchor point so the texture is centered on the sprite\n dude.anchor.set(0.5);\n\n // set a random scale for the dude - no point them all being the same size!\n dude.scale.set(0.8 + Math.random() * 0.3);\n\n // finally lets set the dude to be at a random position..\n dude.x = Math.random() * GameWindowManager.screen.width;\n dude.y = Math.random() * GameWindowManager.screen.height;\n\n dude.tint = Math.random() * 0xFFFFFF;\n\n // create some extra properties that will control movement :\n // create a random direction in radians. This is a number between 0 and PI*2 which is the equivalent of 0 - 360 degrees\n dude.direction = Math.random() * Math.PI * 2;\n\n // this number will be used to modify the direction of the dude over time\n dude.turningSpeed = Math.random() - 0.8;\n\n // create a random speed for the dude between 2 - 4\n dude.speed = 2 + Math.random() * 2;\n\n GameWindowManager.addCanvasElement(\"alien\" + i, dude);\n GameWindowManager.addTicker(\"alien\" + i, new TintingTestTicker());\n }\n setDialogue({\n character: juliette,\n text: `This is a test of custom ticker and canvas element. In this test, we have created ${totalDudes} ${eggHeadName} with random tint, scale, position, direction, turning speed, and speed. With the custom ticker, we are moving the custom canvas element in a random direction. (This example is from the official [PixiJS website](https://pixijs.com/8.x/examples/events/interactivity).)`\n });\n },\n ]\n)\n","import { ChoiceMenuOption, ChoiceMenuOptionClose } from \"../classes\"\nimport { CanvasImage } from \"../classes/canvas\"\nimport { FadeAlphaTicker, MoveTicker, RotateTicker, ZoomTicker } from \"../classes/ticker\"\nimport { Pause, Repeat } from \"../constants\"\nimport { newLabel } from \"../decorators\"\nimport { addImage, loadImage, moveIn, moveOut, removeWithDissolveTransition, removeWithFadeTransition, setChoiceMenuOptions, setDialogue, showWithDissolveTransition, showWithFadeTransition, zoomIn, zoomOut } from \"../functions\"\nimport { GameStepManager, GameWindowManager } from \"../managers\"\nimport { eggHeadImage, eggHeadName, flowerTopImage, flowerTopName, helmlokImage, helmlokName, juliette, skullyImage, skullyName } from \"./TestConstant\"\n\nconst IMAGE_ANIMAIONS_TEST_LABEL = \"___pixi_vn_images_animations_test___\"\nexport const imagesAnimationsTest = newLabel(IMAGE_ANIMAIONS_TEST_LABEL, [\n async () => {\n setDialogue({ character: juliette, text: `These are my 4 puppets: ${eggHeadName}, ${flowerTopName}, ${helmlokName} and ${skullyName}. They can appear, disappear and animate at my will.` })\n let eggHead = addImage(\"eggHead\", eggHeadImage)\n await eggHead.load()\n eggHead.x = 100\n eggHead.y = 100\n let flowerTop = addImage(\"flowerTop\", flowerTopImage)\n flowerTop.x = 300\n flowerTop.y = 100\n flowerTop.load()\n let helmlok = addImage(\"helmlok\", helmlokImage)\n helmlok.x = 100\n helmlok.y = 300\n let skully = addImage(\"skully\", skullyImage)\n skully.x = 300\n skully.y = 300\n await loadImage([helmlok, skully])\n },\n async () => {\n setDialogue({ character: juliette, text: \"Here's what they can do.\" })\n setChoiceMenuOptions([\n new ChoiceMenuOption(\"Dissolve effect\", imagesDissolveTest, {}),\n new ChoiceMenuOption(\"Fade effect\", imagesFadeTest, {}),\n new ChoiceMenuOption(\"Rotate\", imagesRotateTest, {}),\n new ChoiceMenuOption(\"Move\", imagesMoveTest, {}),\n new ChoiceMenuOption(\"Zoom\", imagesZoomTest, {}),\n new ChoiceMenuOption(\"Move in/out\", imagesMoveInOutTest, {}),\n new ChoiceMenuOption(\"Zoom in/out\", imagesZoomInOutTest, {}),\n new ChoiceMenuOptionClose(\"Cancel\", true),\n ])\n },\n (props) => GameStepManager.jumpLabel(IMAGE_ANIMAIONS_TEST_LABEL, props),\n])\n\nconst imagesDissolveTest = newLabel(\"___pixi_vn_images_dissolve_test___\", [\n () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will disappear with a dissolve effect. If you go next, ${eggHeadName} reappears with a dissolve effect without stopping the dissolve effect\n- ${eggHeadName} will appear instead of ${flowerTopName}.\n- ${helmlokName} will disappear with a fade effect and reappear with a fade effect, and repeat.\n- ${skullyName} will disappear with a fade effect, wait for 0.5 seconds, and reappear with a fade effect.`\n })\n removeWithDissolveTransition([\"eggHead\"], { duration: 2 })\n let eggHead = new CanvasImage({ x: 300, y: 100 }, eggHeadImage)\n showWithDissolveTransition('flowerTop', eggHead, { duration: 1 })\n GameWindowManager.addTickersSteps(\"helmlok\",\n [\n new FadeAlphaTicker({\n duration: 1,\n type: \"hide\",\n }, 1),\n new FadeAlphaTicker({\n duration: 1,\n type: \"show\"\n }, 1),\n Repeat,\n ]\n )\n GameWindowManager.addTickersSteps(\"skully\",\n [\n new FadeAlphaTicker({\n duration: 0.5,\n type: \"hide\",\n limit: 0.3,\n }, 1),\n Pause(0.5),\n new FadeAlphaTicker({\n duration: 1,\n type: \"show\",\n }, 1),\n ]\n )\n },\n async () => {\n showWithDissolveTransition('eggHead', eggHeadImage, { duration: 0.5 })\n }\n])\n\nconst imagesFadeTest = newLabel(\"___pixi_vn_images_fade_test___\", [\n () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will disappear with a dissolve effect. If you go next, ${eggHeadName} reappears with a dissolve effect with stopping the dissolve effect\n- ${eggHeadName} will appear instead of ${flowerTopName}.\n- ${helmlokName} will disappear with a fade effect and reappear with a fade effect, and repeat.\n- ${skullyName} will disappear with a fade effect, wait for 0.5 seconds, and reappear with a fade effect.`\n })\n removeWithFadeTransition([\"eggHead\"], { duration: 2 })\n let eggHead = new CanvasImage({ x: 300, y: 100 }, eggHeadImage)\n showWithFadeTransition('flowerTop', eggHead, { duration: 1 })\n GameWindowManager.addTickersSteps(\"helmlok\",\n [\n new FadeAlphaTicker({\n duration: 1,\n type: \"hide\",\n }),\n new FadeAlphaTicker({\n duration: 1,\n type: \"show\"\n }),\n Repeat,\n ]\n )\n GameWindowManager.addTickersSteps(\"skully\",\n [\n new FadeAlphaTicker({\n duration: 0.5,\n type: \"hide\",\n limit: 0.3,\n }),\n Pause(0.5),\n new FadeAlphaTicker({\n duration: 1,\n type: \"show\",\n }),\n ]\n )\n },\n async () => {\n let eggHeadOld = GameWindowManager.getCanvasElement<CanvasImage>(\"eggHead\")\n if (eggHeadOld)\n eggHeadOld.alpha = 0\n showWithFadeTransition('eggHead', eggHeadImage, { duration: 0.5 })\n }\n])\n\nconst imagesRotateTest = newLabel(\"___pixi_vn_images_rotate_test___\", [\n () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will rotate with a anchor set to 0.\n- ${flowerTopName} will rotate with a anchor set to 0.5 and a exponential speed progression.\n- ${helmlokName} will rotate with a anchor set to 0.5, rotate clockwise for 2 seconds, rotate counterclockwise with a exponential (-0.05) speed progression, and when it reaches 0, it will repeat.\n- ${skullyName} will rotate with a anchor set to 1, rotate 3 seconds clockwise, wait for 0.5 seconds, and rotate 7 seconds counterclockwise.`\n })\n let eggHead = GameWindowManager.getCanvasElement<CanvasImage>(\"eggHead\")\n if (eggHead)\n eggHead.anchor.set(0);\n let flowerTop = GameWindowManager.getCanvasElement<CanvasImage>(\"flowerTop\")\n if (flowerTop)\n flowerTop.anchor.set(0.5);\n let helmlok = GameWindowManager.getCanvasElement<CanvasImage>(\"helmlok\")\n if (helmlok)\n helmlok.anchor.set(0.5);\n let skully = GameWindowManager.getCanvasElement<CanvasImage>(\"skully\")\n if (skully)\n skully.anchor.set(1);\n GameWindowManager.addTicker(\"eggHead\", new RotateTicker({\n speed: 6,\n clockwise: true,\n }))\n GameWindowManager.addTicker(\"flowerTop\", new RotateTicker({\n speed: 6,\n clockwise: false,\n speedProgression: { type: \"exponential\", percentage: 0.01, limit: 300 }\n }))\n GameWindowManager.addTickersSteps(\"helmlok\", [\n new RotateTicker({\n speed: 6,\n clockwise: true,\n }, 2),\n new RotateTicker({\n speed: 100,\n clockwise: false,\n speedProgression: { type: \"exponential\", percentage: -0.05 }\n }),\n Repeat,\n ])\n GameWindowManager.addTickersSteps(\"skully\", [\n new RotateTicker({\n speed: 6,\n clockwise: true,\n }, 3),\n Pause(0.5),\n new RotateTicker({\n speed: 6,\n clockwise: false,\n }, 7),\n ])\n }\n])\n\nconst imagesMoveTest = newLabel(\"___pixi_vn_images_move_test___\", [\n () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will move to { x: 500, y: 100 } with a speed of 24.\n- ${flowerTopName} will move to { x: 500, y: 300 } with a speed of 18.\n- ${helmlokName} will move to { x: 100, y: 500 } with a speed of 150 and a linear speed progression of -2 ( limit 10 ), and then move to { x: 1700, y: 500 } with a speed of 10 and a linear speed progression of 2 ( limit 150 ), and repeat.\n- ${skullyName} will move to { x: 500, y: 500 } with a speed of 40, wait for 0.5 seconds, and move to { x: 100, y: 100 } with a speed of 40.`\n })\n GameWindowManager.addTicker(\"eggHead\", new MoveTicker({\n destination: { x: 500, y: 100 },\n speed: 24,\n }))\n GameWindowManager.addTicker(\"flowerTop\", new MoveTicker({\n destination: { x: 500, y: 300 },\n speed: 18,\n }))\n GameWindowManager.addTickersSteps(\"helmlok\", [\n new MoveTicker({\n destination: { x: 100, y: 500 },\n speed: 150,\n speedProgression: { type: \"linear\", amt: -2, limit: 10 }\n }),\n new MoveTicker({\n destination: { x: 1700, y: 500 },\n speed: 10,\n speedProgression: { type: \"linear\", amt: 2, limit: 150 }\n }),\n Repeat,\n ])\n GameWindowManager.addTickersSteps(\"skully\", [\n new MoveTicker({\n destination: { x: 500, y: 500 },\n speed: 40,\n }),\n Pause(0.5),\n new MoveTicker({\n destination: { x: 100, y: 100 },\n speed: 40,\n }),\n ])\n }\n])\n\nconst imagesZoomTest = newLabel(\"___pixi_vn_images_zoom_test___\", [\n () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will zoom out with a speed of 3 and a limit of -0.5.\n- ${flowerTopName} will zoom in with a speed of 3 and a limit of 2.\n- ${helmlokName} will unzoom with a speed of 3 and a limit of -1, and zoom in with a speed of 3 and a limit of 1, and repeat.\n- ${skullyName} will zoom in with a speed of 0.1 and a limit of 5, wait for 0.5 seconds, and zoom out with a speed of 3 and a limit of 1.`\n })\n let eggHead = GameWindowManager.getCanvasElement<CanvasImage>(\"eggHead\")\n if (eggHead)\n eggHead.scale.set(2)\n let helmlok = GameWindowManager.getCanvasElement<CanvasImage>(\"helmlok\")\n if (helmlok)\n helmlok.anchor.set(0.5);\n GameWindowManager.addTicker(\"eggHead\", new ZoomTicker({\n speed: 3,\n limit: -0.5,\n type: \"unzoom\"\n }))\n GameWindowManager.addTicker(\"flowerTop\", new ZoomTicker({\n speed: 3,\n limit: 2,\n }))\n GameWindowManager.addTickersSteps(\"helmlok\", [\n new ZoomTicker({\n speed: 3,\n limit: -1,\n type: \"unzoom\"\n }),\n new ZoomTicker({\n speed: 3,\n limit: 1,\n }),\n Repeat,\n ])\n GameWindowManager.addTickersSteps(\"skully\", [\n new ZoomTicker({\n speed: 0.1,\n limit: 5,\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n }),\n Pause(0.5),\n new ZoomTicker({\n \"type\": \"unzoom\",\n speed: 3,\n limit: 1,\n }),\n ])\n }\n])\n\nconst imagesMoveInOutTest = newLabel(\"___pixi_vn_images_move_in_out_test___\", [\n async () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will move in from the top with a speed of 80. If you go next, ${eggHeadName} will move out from the bottom with a speed of 80.\n- ${flowerTopName} will move in from the right with a speed of 80 and a speed progression of 0.02. If you go next, ${flowerTopName} will move out from the left with a speed of 80 and a speed progression of 0.02.\n- ${helmlokName} will move in from the left with a speed of 80. If you go next, ${helmlokName} will move out from the right with a speed of 80.\n- ${skullyName} will move in from the bottom with a speed of 80 and a speed progression of 0.02. If you go next, ${skullyName} will move out from the top with a speed of 80 and a speed progression of 0.02.`\n })\n let eggHead = new CanvasImage({ x: 100, y: 100 }, eggHeadImage)\n let flowerTop = new CanvasImage({ x: 300, y: 100 }, flowerTopImage)\n let helmlok = new CanvasImage({ x: 100, y: 300 }, helmlokImage)\n let skully = new CanvasImage({ x: 300, y: 300 }, skullyImage)\n moveIn(\"eggHead\", eggHead, { speed: 80, direction: \"down\" })\n moveIn(\"flowerTop\", flowerTop, {\n speed: 80, direction: \"left\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n moveIn(\"helmlok\", helmlok, { speed: 80, direction: \"right\" })\n moveIn(\"skully\", skully, {\n speed: 80, direction: \"up\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n },\n () => {\n moveOut(\"eggHead\", { speed: 80, direction: \"down\" })\n moveOut(\"flowerTop\", { speed: 80, direction: \"left\" })\n moveOut(\"helmlok\", { speed: 80, direction: \"right\" })\n moveOut(\"skully\", { speed: 80, direction: \"up\" })\n }\n])\n\nconst imagesZoomInOutTest = newLabel(\"___pixi_vn_images_zoom_in_out_test___\", [\n async () => {\n setDialogue({\n character: juliette, text: `Here's what's going to happen:\n- ${eggHeadName} will zoom in with a speed of 3. If you go next, ${eggHeadName} will zoom out with a speed of 3.\n- ${flowerTopName} will zoom in with a speed of 3 and a speed progression of 0.02. If you go next, ${flowerTopName} will zoom out with a speed of 3.\n- ${helmlokName} will zoom in with a speed of 3. If you go next, ${helmlokName} will zoom out with a speed of 1.\n- ${skullyName} will zoom in with a speed of 3 and a speed progression of 0.02. If you go next, ${skullyName} will zoom out with a speed of 3 and a speed progression of 0.02.`\n })\n GameWindowManager.removeCanvasElements()\n let eggHead = new CanvasImage({ x: 100, y: 100 }, eggHeadImage)\n let flowerTop = new CanvasImage({ x: 300, y: 100 }, flowerTopImage)\n let helmlok = new CanvasImage({ x: 100, y: 300 }, helmlokImage)\n let skully = new CanvasImage({ x: 300, y: 300 }, skullyImage)\n zoomIn(\"eggHead\", eggHead, { speed: 3, direction: \"down\" })\n zoomIn(\"flowerTop\", flowerTop, {\n speed: 3, direction: \"left\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n zoomIn(\"helmlok\", helmlok, { speed: 3, direction: \"right\" })\n zoomIn(\"skully\", skully, {\n speed: 3, direction: \"up\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n },\n async () => {\n zoomOut(\"eggHead\", {\n speed: 3, direction: \"down\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n zoomOut(\"flowerTop\", { speed: 3, direction: \"left\" })\n zoomOut(\"helmlok\", { speed: 1, direction: \"right\" })\n zoomOut(\"skully\", {\n speed: 3, direction: \"up\",\n speedProgression: { type: \"exponential\", percentage: 0.02 }\n })\n },\n])\n","import { newLabel } from \"../decorators\"\nimport { setDialogue } from \"../functions\"\nimport { juliette } from \"./TestConstant\"\n\nconst MARKDOWN_TEST_LABEL = \"___pixi_vn_markdown_test___\"\nexport const markdownTest = newLabel(MARKDOWN_TEST_LABEL, [\n async () => {\n setDialogue({\n character: juliette, text: `\n# Markdown Test\n\nHello, this is a test of the markdown parser. Pixi'VN does not manage markdown, but you can implement a markdown parser to display text with markdown syntax.\n\nFor example in React, you can use the library [react-markdown](https://www.npmjs.com/package/react-markdown).\n\n## Colored Text\n\n<span style=\"color:blue\">some *blue* text</span>.\n\n<span style=\"color:red\">some *red* text</span>.\n\n<span style=\"color:green\">some *green* text</span>.\n\n## Bold Text\n\n**This is bold text.**\n\n## Italic Text\n\n*This is italic text.*\n\n## Delete Text\n\n~~This is deleted text.~~\n\n## Link Test\n\n[Link to Google](https://www.google.com)\n\n## H2 Test\n\n### H3 Test\n\n#### H4 Test\n \n## Code Test\n\n\\`Hello World\\`\n\n\\`\\`\\`js\nconsole.log(\"Hello World\")\n\\`\\`\\`\n\n## List Test\n\n- Item 1\n* Item 2\n- [x] Item 3\n\n## Table Test\n\n| Header 1 | Header 2 |\n| -------- | -------- |\n| Cell 1 | Cell 2 |\n\n## Separator Test\n\n***\nFooter\n\n` })\n },\n])\n","import { newLabel } from \"../decorators\"\nimport { setDialogue } from \"../functions\"\nimport { juliette } from \"./TestConstant\"\n\nconst STEP_LABEL_TEST_LABEL = \"___pixi_vn_step_label_test___\"\nexport const stepLabelTestLAbel = newLabel(STEP_LABEL_TEST_LABEL, [\n async () => {\n setDialogue({ character: juliette, text: \"Pixi'VN manages the succession of \\\"screens\\\" with steps. Each step is a function that can be asynchronous.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"The labels are containers of steps, they are used to organize the steps in a more readable way. For start a steps sequence, you must call or jump to a label.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"It is also possible to ask the player to make a choice.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"Browsing through available tests is one way to test the steps/labels system.\" })\n },\n])\n","import { ChoiceMenuOption } from \"../classes\";\nimport { PIXIVN_VERSION } from \"../constants\";\nimport { newLabel } from \"../decorators\";\nimport { setChoiceMenuOptions, setDialogue } from \"../functions\";\nimport { GameStepManager, GameWindowManager } from \"../managers\";\nimport { baseCanvasElementTestLabel } from \"./BaseCanvasElementTestLabel\";\nimport { canvasEventsTestLabel } from \"./CanvasEventsTestLabel\";\nimport { customTickerCanvasElementTestLabel } from \"./CustomTickerCanvasElementTestLabel\";\nimport { imagesAnimationsTest } from \"./ImagesAnimationsTestLabel\";\nimport { markdownTest } from \"./MarkdownTest\";\nimport { stepLabelTestLAbel } from \"./StepLabelTest\";\nimport { juliette } from \"./TestConstant\";\n\nexport const pixivnTestStartLabel = newLabel(\"___pixi_vn_example_start_label___\",\n [\n () => {\n let currentTimeName = \"\"\n const hour = new Date().getHours()\n if (hour >= 5 && hour < 12) {\n currentTimeName = \"morning🔅\"\n } else if (hour >= 12 && hour < 18) {\n currentTimeName = \"afternoon🔆\"\n } else if (hour >= 18 && hour < 22) {\n currentTimeName = \"evening⛅\"\n } else {\n currentTimeName = \"night🌙\"\n }\n setDialogue({ character: juliette, text: `Good ${currentTimeName}! I'm ${juliette.name}, your virtual assistant. I'm here to help you with your tests.` })\n },\n () => setDialogue({ character: juliette, text: `You are running the Pixi’VN v${PIXIVN_VERSION} test. This test will guide you through the different features of the library.` }),\n (props) => GameStepManager.jumpLabel(pixivnTestStartLabel2, props),\n ]\n)\n\nconst openLink = newLabel<{\n link: string\n}>(\"___pixi_vn_open_link___\",\n [\n (props) => {\n window.open(props.link)\n GameStepManager.goNext(props)\n },\n ]\n)\n\n\nconst RESTART_TEST_LABEL = \"___pixi_vn_restart_test_label___\"\nexport const pixivnTestStartLabel2 = newLabel(RESTART_TEST_LABEL,\n [\n () => {\n GameWindowManager.clear()\n setDialogue({ character: juliette, text: \"Which test would you like to start with?\" })\n setChoiceMenuOptions([\n new ChoiceMenuOption(\"Open Pixi’VN Wiki\", openLink, { link: \"https://pixi-vn.web.app/\" }),\n new ChoiceMenuOption(\"Images, Transitions and Animations Test\", imagesAnimationsTest, {}),\n new ChoiceMenuOption(\"Canvas Events Test\", canvasEventsTestLabel, {}),\n new ChoiceMenuOption(\"Base Canvas Element Test\", baseCanvasElementTestLabel, {}),\n new ChoiceMenuOption(\"Custom Ticker Canvas Element Test\", customTickerCanvasElementTestLabel, {}),\n new ChoiceMenuOption(\"Steps and Labels Test\", stepLabelTestLAbel, {}),\n new ChoiceMenuOption(\"Markdown Test\", markdownTest, {}),\n new ChoiceMenuOption(\"Open Pixi’VN Github Issues\", openLink, { link: \"https://github.com/DRincs-Productions/pixi-vn/issues\" }),\n ])\n },\n (props) => GameStepManager.jumpLabel(RESTART_TEST_LABEL, props),\n ]\n)\n"]}