@lovelace_lol/embody 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -23
- package/dist/index.js +1617 -5898
- package/dist/index.js.map +1 -1
- package/dist/three/annotations/DOMControls.d.ts +5 -1
- package/dist/three/annotations/HtmlAnnotationMarkers.d.ts +5 -0
- package/dist/three/annotations/OverlayAnnotationMarkers.d.ts +1 -0
- package/dist/three/annotations/ThreeAnnotationController.d.ts +145 -0
- package/dist/three/annotations/ThreeAnnotationControls.d.ts +42 -0
- package/dist/three/annotations/ThreeAnnotationMarkers.d.ts +42 -0
- package/dist/three/annotations/ThreeAnnotationRenderer.d.ts +35 -0
- package/dist/three/annotations/{DPthree.d.ts → ThreeAnnotations.d.ts} +18 -27
- package/dist/three/annotations/adapter.d.ts +2 -8
- package/dist/three/annotations/annotationAnchorModel.d.ts +0 -4
- package/dist/three/annotations/index.d.ts +9 -8
- package/dist/three/annotations/lifecycleBridge.d.ts +26 -0
- package/dist/three/annotations/markerVisibilityLifecycle.d.ts +8 -7
- package/dist/three/annotations/modelObservation.d.ts +44 -0
- package/dist/three/annotations/runtime.d.ts +46 -0
- package/dist/three/annotations/runtimeAnnotationPreview.d.ts +2 -2
- package/dist/three/annotations/runtimeAnnotationPreviewSide.d.ts +0 -4
- package/dist/three/annotations/runtimeAnnotationSidePreview.d.ts +2 -1
- package/dist/three/annotations/types.d.ts +7 -8
- package/dist/three/characterHost.d.ts +5 -5
- package/dist/three.js +1617 -5898
- package/dist/three.js.map +1 -1
- package/dist/wasm/README.md +94 -23
- package/dist/wasm/embody_wasm.d.ts +191 -85
- package/dist/wasm/embody_wasm.js +455 -2
- package/dist/wasm/embody_wasm_bg.wasm +0 -0
- package/dist/wasm/embody_wasm_bg.wasm.d.ts +116 -83
- package/dist/wasm/index.d.ts +1 -1
- package/dist/wasm.js.map +1 -1
- package/package.json +2 -2
- package/dist/three/annotations/DPthree3DMarkers.d.ts +0 -320
- package/dist/three/annotations/DPthreeCameraController.d.ts +0 -415
- package/dist/three/annotations/DPthreeHTMLMarkers.d.ts +0 -131
- package/dist/three/annotations/DPthreeMarkers.d.ts +0 -52
- package/dist/three/annotations/animationFrameTaskScheduler.d.ts +0 -18
package/dist/three.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../three/annotations/boneResolutionProfile.ts","../three/annotations/adapter.ts","../three/annotations/annotationCameraCore.ts","../three/sceneRenderingBinding.ts","../three/modelSkinning.ts","../three/annotations/modelRenderPreparation.ts","../three/playbackRendering.ts","../three/annotations/DOMControls.ts","../three/annotations/markerSurfaceRaycast.ts","../three/annotations/loadFrame.ts","../three/annotations/animationFrameTaskScheduler.ts","../three/annotations/annotationAnchorModel.ts","../three/annotations/runtimeAnnotationSidePreview.ts","../three/annotations/DPthree3DMarkers.ts","../three/annotations/DPthreeHTMLMarkers.ts","../three/annotations/DPthreeCameraController.ts","../three/annotations/DPthree.ts","../three/annotations/DPthreeMarkers.ts","../three/annotations/markerVisibilityLifecycle.ts","../three/annotations/runtimeAnnotationPreview.ts","../three/annotations/runtimeAnnotationPreviewSide.ts","../three/authoring.ts","../three/reference-pose.ts","../three/clipBindings.ts","../three/nativePlayback.ts","../three/character.ts","../three/sceneInkBackgroundStyle.ts","../three/sceneInkBackground.ts","../three/characterTexturePalette.ts","../three/model.ts","../three/modelMorphLayout.ts","../three/scene.ts","../three/characterHost.ts","../three/editor/SkeletonOverlay.ts","../three/editor/morphVertexPreview.ts","../three/index.ts"],"names":["core","snapshot","target","THREE","document","THREE2","point","hasParent","dir","center","materials","getAnnotationRegionLabel","THREE4","framing","THREE5","cleaned","bindings","request","vec","THREE6","dx","dy","isPlainRecord","requireInitializedEmbodyCore","Matrix4","Vector3","Quaternion","resource","action","json","finite","DEFAULT_HAIR_COLOR_APPEARANCE","initEmbodyCore","PropertyBinding","AdditiveAnimationBlendMode","NormalAnimationBlendMode","progress","LoopOnce","LoopPingPong","THREE7","THREE8","Box3","MathUtils","Mesh","prepare","Color","background","preset","coordinates","PerspectiveCamera","THREE9","isBone","getMorphPositionAttribute","intensity","THREE10","createNeutralMorphAttribute","BufferAttribute","Euler","InterpolateDiscrete","AnimationClip"],"mappings":";;;;;;;;;;;;;;;AAOO,SAAS,sBACd,OAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO;AAAA,IACL,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,eAAe,OAAA,CAAQ;AAAA,GACzB;AACF;ACRA,IAAM,GAAA,GAAM,CAAC,CAAA,KAAa,IAAI,YAAA,CAAa,CAAC,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAC1D,IAAM,OAAO,CAAC,CAAA,KAAwB,IAAI,YAAA,CAAa,IAAI,CAAC,CAAA,CAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,EAAE,CAAA;AACpF,IAAM,MAAA,GAAS,CAAC,CAAA,KAAsB,IAAI,YAAA,CAAa,CAAA,GAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,GAAI,EAAE,CAAA;AAClI,IAAM,QAAQ,CAAC,MAAA,EAA2B,SAAS,CAAA,MAAc,EAAE,GAAG,MAAA,CAAO,MAAM,GAAG,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,GAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAE,CAAA;AACnI,IAAM,UAAU,CAAC,CAAA,MAA0B,EAAE,QAAA,EAAU,MAAM,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,QAAA,EAAU,CAAA,CAAE,CAAC,CAAA,EAAE,CAAA;AAG9F,IAAM,wBAAA,GAAN,MAAM,yBAAA,CAAyB;AAAA,EACpC,YAA6BA,KAAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAAA,KAAAA;AAAA,EAAmB;AAAA,EAChD,aAAa,MAAA,GAAS;AAAE,IAAA,OAAO,IAAI,yBAAA,CAAyB,MAAM,cAAA,EAAgB,CAAA;AAAA,EAAG;AAAA,EACrF,qBAAqB,KAAA,EAAe;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,8BAAA,CAA+B,KAAK,CAAA;AAAA,EAAG;AAAA,EAC9F,4BAAA,CAA6B,GAAyB,KAAA,EAAe;AAAE,IAAA,OAAO,KAAA,CAAM,KAAK,IAAA,CAAK,gCAAA,CAAiC,KAAK,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EAAG;AAAA,EACjJ,2BAAA,CAA4B,CAAA,EAAyB,cAAA,EAAwB,WAAA,EAAsB,aAAa,OAAA,EAAS;AACvH,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,8BAAA,CAA+B,IAAA,CAAK,CAAC,CAAA,EAAG,cAAA,EAAgB,WAAA,IAAe,IAAA,EAAM,UAAA,KAAe,OAAO,CAAC,CAAA;AAAA,EAC7H;AAAA,EACA,uBAAA,CAAwB,MAAA,EAAgB,SAAA,EAAkB,SAAA,EAAkB;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,0BAAA,CAA2B,MAAA,EAAQ,IAAI,SAAS,CAAA,EAAG,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,EAAG;AAAA,EACnK,kBAAA,CAAmB,IAAA,EAAc,OAAA,EAAiB,IAAA,EAAc,QAAA,EAAkB;AAAE,IAAA,OAAO,KAAK,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,OAAA,EAAS,MAAM,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC1J,kBAAkB,CAAA,EAA4S;AAC5T,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,mBAAA,CAAoB,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG,MAAA,CAAO,EAAE,WAAW,CAAA,EAAG,IAAA,CAAK,CAAA,CAAE,eAAe,CAAA,EAAG,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,QAAQ,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,oBAAA,EAAsB,EAAE,iBAAA,EAAmB,CAAA,CAAE,qBAAA,EAAuB,CAAA,CAAE,iBAAiB,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,UAAA,KAAe,OAAO,CAAC,CAAA;AAAA,EAC9R;AAAA,EACA,qBAAqB,CAAA,EAA8N;AACjP,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,EAAG,KAAK,CAAA,CAAE,eAAe,CAAA,EAAG,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,aAAa,CAAA,CAAE,qBAAA,EAAuB,CAAA,CAAE,eAAA,EAAiB,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,UAAA,KAAe,OAAO,CAAC,CAAA;AAAA,EACrO;AAAA,EACA,4BAA4B,CAAA,EAAiF;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,+BAAA,CAAgC,CAAA,CAAE,aAAa,CAAA,CAAE,kBAAA,EAAoB,EAAE,YAAY,CAAA;AAAA,EAAG;AAAA,EACtN,iBAAiB,CAAA,EAA0H;AACzI,IAAA,OAAO,KAAK,IAAA,CAAK,kBAAA,CAAmB,CAAA,CAAE,WAAA,EAAa,EAAE,IAAA,KAAS,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,SAAS,cAAA,GAAiB,CAAA,GAAI,GAAG,CAAA,CAAE,WAAA,EAAa,EAAE,kBAAkB,CAAA;AAAA,EACrJ;AAAA,EACA,oCAAoC,CAAA,EAAwH;AAC1J,IAAA,MAAM,IAAI,IAAA,CAAK,IAAA,CAAK,wCAAwC,IAAI,YAAA,CAAa,EAAE,SAAS,CAAA,EAAG,IAAI,YAAA,CAAa,CAAA,CAAE,OAAO,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,CAAE,KAAA,EAAO,EAAE,cAAc,CAAA;AAC1J,IAAA,OAAO,EAAE,SAAS,CAAA,CAAE,CAAC,KAAK,CAAA,EAAG,SAAA,EAAW,CAAA,CAAE,CAAC,CAAA,EAAE;AAAA,EAC/C;AAAA,EACA,0BAA0B,CAAA,EAA4K;AACpM,IAAA,MAAM,IAAI,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA6B,CAAA,CAAE,aAAa,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,gBAAA,EAAkB,EAAE,gBAAA,EAAkB,CAAA,CAAE,eAAe,CAAA,CAAE,cAAA,EAAgB,EAAE,aAAa,CAAA;AACzK,IAAA,OAAO,EAAE,OAAO,CAAA,CAAE,CAAC,GAAG,KAAA,EAAO,CAAA,CAAE,CAAC,CAAA,EAAE;AAAA,EACpC;AAAA,EACA,uBAAA,CAAwB,KAAA,EAAc,GAAA,EAAY,QAAA,GAAW,EAAA,EAAI;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,0BAAA,CAA2B,GAAA,CAAI,KAAK,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAG,QAAQ,CAAA;AAAA,EAAG;AAAA,EAChJ,oBAAA,CAAqB,KAAA,EAAc,GAAA,EAAY,QAAA,GAAW,EAAA,EAAI;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,uBAAA,CAAwB,GAAA,CAAI,KAAK,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAG,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC1I,gCAAA,CAAiC,SAAkB,CAAA,EAAW;AAC5D,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,mCAAA,CAAoC,SAAS,CAAC,CAAA;AAClE,IAAA,OAAO,EAAE,iBAAA,EAAmB,CAAA,CAAE,CAAC,CAAA,EAAG,gBAAA,EAAkB,CAAA,CAAE,CAAC,CAAA,EAAG,iBAAA,EAAmB,CAAA,CAAE,CAAC,CAAA,EAAE;AAAA,EACpF;AAAA,EACA,mCAAmC,CAAA,EAAoG;AAAE,IAAA,OAAO,KAAK,IAAA,CAAK,qCAAA,CAAsC,IAAI,YAAA,CAAa,CAAA,CAAE,MAAM,CAAA,EAAG,IAAI,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA,EAAG,GAAA,CAAI,EAAE,WAAW,CAAA,EAAG,EAAE,WAAW,CAAA;AAAA,EAAG;AAAA,EAC1R,kBAAA,CAAmB,KAAA,EAAc,WAAA,EAAoB,GAAA,EAAY,WAAkB,QAAA,EAAkB;AAAE,IAAA,OAAO,gBAAgB,IAAI,IAAA,CAAK,KAAK,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,IAAI,GAAG,CAAA,EAAG,IAAI,SAAS,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,EAAG;AAAA,EAC7N,iBAAA,CAAkB,MAAA,EAAe,MAAA,EAAgB,MAAA,EAAgB,QAAA,EAAkB;AAAE,IAAA,OAAO,eAAA,CAAgB,IAAI,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,EAAG;AACjL;AAEA,SAAS,gBAAgB,MAAA,EAAoC;AAC3D,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,OAAO;AAAA,IACL,OAAO,OAAA,EAAiB;AACtB,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAC/B,MAAA,OAAO,EAAE,QAAA,EAAU,KAAA,CAAM,CAAC,GAAG,MAAA,EAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,CAAC,KAAK,CAAA,EAAE;AAAA,IACpE,CAAA;AAAA,IACA,IAAI,UAAA,GAAa;AAAE,MAAA,OAAO,OAAO,WAAA,EAAY;AAAA,IAAG,CAAA;AAAA,IAChD,OAAA,GAAU;AAAE,MAAA,IAAI,CAAC,QAAA,EAAU;AAAE,QAAA,QAAA,GAAW,IAAA;AAAM,QAAA,MAAA,CAAO,IAAA,EAAK;AAAA,MAAG;AAAA,IAAE;AAAA,GACjE;AACF;AACO,IAAM,8BAAA,GAAiC,MAAM,wBAAA,CAAyB,MAAA;AAE7E,SAAS,OAAA,CAAW,IAAY,OAAA,EAAqB;AACnD,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,4BAAA,EAA6B,CAAE,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,EAAE,EAAA,EAAI,OAAA,EAAS,CAAC,CAAC,CAAA;AAClG;AAGA,eAAsB,iCAAsE,MAAA,EAAuB;AACjH,EAAA,MAAM,cAAA,EAAe;AACrB,EAAA,MAAM,OAAO,CAAC,iBAAA,EAAmB,YAAY,eAAA,EAAiB,cAAA,EAAgB,qBAAqB,SAAA,EAAW,iBAAA,EAAmB,WAAA,EAAa,YAAA,EAAc,cAAc,eAAA,EAAiB,YAAA,EAAc,aAAa,aAAA,EAAe,cAAA,EAAgB,gBAAgB,gBAAgB,CAAA;AACrR,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,MAAA,EAAW,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAC9E,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,KAAA,CAAM,OAAA,GAAU,OAAO,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA,CAAA,KAAK,MAAA,CAAO,UAAU,CAAC,CAAA,KAAM,MAAS,CAAA,CAAE,GAAA,CAAI,OAAK,CAAC,CAAA,EAAG,OAAO,OAAA,CAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EAC1H;AACA,EAAA,MAAM,WAAW,OAAA,CAAiC,sBAAA,EAAwB,EAAE,MAAA,EAAQ,OAAO,CAAA;AAC3F,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,MAAA,EAAO;AAC7B,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,IAAI,QAAA,CAAS,GAAG,CAAA,KAAM,MAAA,EAAY,QAAA,CAAqC,GAAG,CAAA,GAAI,QAAA,CAAS,GAAG,CAAA;AAClH,EAAA,QAAA,CAAS,OAAA,KAAT,QAAA,CAAS,OAAA,GAAY,QAAA,CAAS,qBAAqB,EAAC,CAAA;AACpD,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,gBAAA,CAAiB,OAA6B,OAAA,EAAkD;AAC9G,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,EAAC;AAC5B,EAAA,OAAO,OAAA,GAAU,OAAA,CAAQ,0BAAA,EAA4B,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,GAAI,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC/F;AACO,SAAS,cAAA,CAAe,UAAA,EAAoB,UAAA,EAAoB,aAAA,EAAiC;AAAE,EAAA,OAAO,QAAQ,iBAAA,EAAmB,EAAE,UAAA,EAAY,UAAA,EAAY,eAAe,CAAA;AAAG;AACjL,SAAS,8BAAA,GAAuD;AAAE,EAAA,OAAO,EAAE,WAAW,EAAA,EAAI,UAAA,EAAY,GAAG,QAAA,EAAU,CAAC,iBAAiB,CAAA,EAAE;AAAG;AACjJ,SAAS,aAAa,IAAA,EAAc;AAAE,EAAA,OAAO,sCAAsC,IAAA,CAAK,IAAI,CAAA,GAAI,CAAC,EAAE,WAAA,EAAY;AAAmC;AAC3I,SAAS,gCAAA,CAAiC,MAAwB,UAAA,EAA0C;AAAE,EAAA,OAAO,SAAS,MAAA,GAAS,UAAA,CAAW,YAAY,UAAA,CAAW,SAAA,KAAc,IAAI,EAAA,GAAK,CAAA;AAAG;AACnM,SAAS,yBAAA,CAA0B,MAAc,UAAA,EAAkC;AAAE,EAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAAG,EAAA,OAAO,IAAA,GAAO,gCAAA,CAAiC,IAAA,EAAM,UAAU,CAAA,GAAI,IAAA;AAAM;AAC/L,SAAS,wBAAA,CAAyB,QAAgB,UAAA,EAAkC;AACzF,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,IAAA,EAAM,OAAO,MAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,4BAAA,EAA6B,CAAE,8BAAA,CAA+B,OAAO,WAAW,CAAA;AAC9F,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA;AACrC,EAAA,OAAO,IAAA,KAAS,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,GAAA,CAAA,GAAO,gCAAA,CAAiC,IAAA,EAAM,UAAU,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,KAAA;AACvH;AACO,SAAS,kCAAA,CAAmC,QAAgB,UAAA,EAAkC;AACnG,EAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,MAAA,EAAQ,UAAU,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA;AACrC,EAAA,OAAO,KAAA,KAAU,MAAA,CAAO,MAAA,IAAU,IAAA,GAAO,gCAAA,CAAiC,MAAM,UAAU,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,MAAA,CAAA;AAC/G;AACA,SAAS,gBAAgB,KAAA,EAAwB;AAAE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAAW,EAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAG,EAAA,OAAO,KAAA,CAAM,kBAAA,CAAmB,IAAI,UAAA,EAAY,CAAA;AAAG;AAC5J,SAAS,gBAAA,CAAiB,OAAwB,KAAA,EAAgB;AAAE,EAAA,MAAM,CAAA,GAAI,gBAAgB,KAAK,CAAA;AAAG,EAAA,MAAM,SAAA,GAAY,MAAM,KAAA,EAAM;AAAG,EAAA,OAAA,CAAQ,IAAI,SAAA,CAAU,eAAA,CAAgB,CAAC,CAAA,GAAI,WAAW,SAAA,EAAU;AAAG;AAC1M,SAAS,+BAAA,CAAgC,OAAwB,KAAA,EAAe;AAAE,EAAA,MAAM,CAAA,GAAI,8BAA6B,CAAE,gCAAA,CAAiC,KAAK,eAAA,CAAgB,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA;AAAG,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAG;AACxO,SAAS,uBAAA,CAAwB,KAAA,EAAwB,MAAA,EAAiB,QAAA,EAAmB;AAClG,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAM,CAAE,IAAI,MAAM,CAAA;AAAG,EAAA,MAAM,CAAA,GAAI,gBAAgB,KAAK,CAAA;AAAG,EAAA,IAAI,CAAA,EAAG,KAAA,CAAM,eAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA;AAAG,EAAA,KAAA,CAAM,SAAA,EAAU;AACxI,EAAA,OAAO,4BAAA,EAA6B,CAAE,8BAAA,CAA+B,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,EAAE,CAAA;AACnH;AACO,SAAS,4BAA4B,CAAA,EAAiF;AAAE,EAAA,OAAO,4BAAA,GAA+B,+BAAA,CAAgC,CAAA,CAAE,aAAa,CAAA,CAAE,kBAAA,EAAoB,EAAE,YAAY,CAAA;AAAG;AAE3P,IAAM,UAAU,CAAC,IAAA,EAAc,MAAA,EAAgB,MAAA,KAAoB,eAAe,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,IAAK,KAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAA,CAAO,aAAa,CAAA;AAC3J,SAAS,cAAA,CAAe,KAAA,EAAiB,MAAA,EAAgB,MAAA,EAAuC;AAC9F,EAAA,IAAI,KAAA;AACJ,EAAA,KAAA,CAAM,SAAS,CAAA,MAAA,KAAU;AAAE,IAAA,IAAI,CAAC,SAAS,OAAA,CAAQ,MAAA,CAAO,MAAM,MAAA,EAAQ,MAAM,GAAG,KAAA,GAAQ,MAAA;AAAA,EAAQ,CAAC,CAAA;AAChG,EAAA,OAAO,KAAA;AACT;AACA,SAAS,kBAAA,CAAmB,KAAA,EAAiB,OAAA,EAAmB,MAAA,EAAiB;AAAE,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAAE,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA;AAAG,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EAAQ;AAAE;AAG/L,SAAS,iBAAA,CAAkB,KAAA,EAAiB,MAAA,EAAgB,OAAA,EAAwC;AACzG,EAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAI,IAAA,EAAK,CAAE,cAAc,KAAK,CAAA;AAAG,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,IAAI,SAAS,CAAA;AACnF,EAAA,MAAM,SAAS,OAAA,EAAS,aAAA;AACxB,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA,CAAE,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACxG,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,KAAA,EAAO,KAAA,CAAM,MAAA,GAAS,KAAA,GAAQ,CAAC,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,YAAY,CAAA,EAAG,MAAM,CAAA;AACpH,EAAA,MAAM,IAAA,GAAO,mBAAmB,KAAA,EAAO,CAAC,iBAAiB,SAAA,EAAW,OAAA,EAAS,OAAO,CAAA,EAAG,MAAM,CAAA;AAC7F,EAAA,MAAM,KAAA,GAAQ,mBAAmB,KAAA,EAAO,CAAC,iBAAiB,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA,EAAG,MAAM,CAAA;AAC/F,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,MAAA,KAAU;AAAE,IAAA,IAAK,MAAA,CAAe,MAAA,IAAU,MAAA,CAAO,MAAA,CAAQ,IAAA,CAAK,CAAA,IAAA,KAAQ,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAM,CAAC,CAAA,EAAG;AAAE,MAAA,MAAM,CAAA,GAAI,IAAI,IAAA,EAAK,CAAE,cAAc,MAAM,CAAA;AAAG,MAAA,IAAI,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IAAG;AAAA,EAAE,CAAC,CAAA;AAC1O,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAQ,IAAK,OAAA,CAAQ,OAAA,CAAQ,IAAI,OAAA,EAAS,CAAA,CAAE,CAAA,IAAK,IAAA,CAAK,CAAA,GAAI,GAAA,EAAK,OAAO,EAAE,MAAA,EAAQ,OAAA,CAAQ,SAAA,CAAU,IAAI,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,aAAA,EAAe,SAAA,EAAW,EAAC,EAAc;AAChL,EAAA,MAAM,gBAAA,GAAmB,IAAA,EAAM,gBAAA,CAAiB,IAAI,SAAS,CAAA;AAC7D,EAAA,IAAI,IAAA,IAAQ,KAAA,EAAO,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,gBAAA,CAAiB,IAAI,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,gBAAA,CAAiB,IAAI,OAAA,EAAS,CAAC,CAAA,CAAE,cAAA,CAAe,GAAG,CAAA,EAAG,gBAAA,EAAkB,MAAA,EAAQ,kBAAA,EAAoB,SAAA,EAAW,EAAC,EAAc;AACjN,EAAA,IAAI,gBAAA,EAAkB,OAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,KAAA,EAAM,CAAE,eAAA,CAAgB,gBAAA,CAAiB,KAAA,EAAO,IAAI,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,GAAG,CAAA,EAAG,gBAAA,EAAkB,MAAA,EAAQ,kBAAA,EAAoB,SAAA,EAAW,EAAC,EAAc;AAC7N,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,SAAA,CAAU,IAAI,SAAS,CAAA;AAAG,EAAA,MAAA,CAAO,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAA,GAAI,KAAK,CAAA,GAAI,GAAA;AAC7E,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,SAAA,EAAW,EAAC,EAAc;AACjE;AACO,SAAS,0BAAA,CAA2B,KAAA,EAAwB,OAAA,EAAmB,OAAA,EAA6D;AACjJ,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,CAAQ,MAAA,SAAe,8BAAA,EAA+B;AACrE,EAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAG,EAAA,IAAI,MAAA,GAAS,CAAA;AAAG,EAAA,IAAI,KAAA,GAAQ,CAAA;AAC3D,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA;AAAG,IAAA,IAAI,CAAC,IAAA,EAAM;AACnD,IAAA,MAAM,MAAA,GAAS,mBAAmB,KAAA,EAAO,gBAAA,CAAiB,OAAO,KAAA,EAAO,OAAO,CAAA,EAAG,OAAA,EAAS,aAAa,CAAA;AAAG,IAAA,IAAI,CAAC,MAAA,EAAQ;AACxH,IAAA,MAAM,CAAA,GAAI,MAAM,YAAA,CAAa,MAAA,CAAO,iBAAiB,IAAI,OAAA,EAAS,CAAC,CAAA,CAAE,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,EAAO;AAAE,MAAA,MAAA,IAAU,IAAA,KAAS,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA;AAAG,MAAA,KAAA,IAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IAAG;AAAA,EACvF;AACA,EAAA,OAAO,QAAQ,CAAA,GAAI,EAAE,WAAW,MAAA,GAAS,CAAA,GAAI,IAAI,EAAA,EAAI,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,EAAO,UAAU,EAAC,KAAM,8BAAA,EAA+B;AAC7I;;;ACpJA,IAAI,IAAA,GAAwC,IAAA;AAC5C,IAAI,cAAA,GAA2D,IAAA;AAGxD,SAAS,uBAAA,GAA6D;AAC3E,EAAA,cAAA,KAAA,cAAA,GAAmB,gCAA+B,CAAE,IAAA;AAAA,IAClD,CAAC,WAAA,KAAgB;AACf,MAAA,IAAA,GAAO,WAAA;AACP,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAA,KAAmB;AAClB,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,GACF,CAAA;AACA,EAAA,OAAO,cAAA;AACT;AAGO,SAAS,2BAAA,GAAwD;AACtE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,oGAAoG,CAAA;AAAA,EACtH;AACA,EAAA,OAAO,IAAA;AACT;;;ACTA,IAAM,MAAA,uBAAa,OAAA,EAAkD;AAE9D,SAAS,sBAAA,CAAuB,UAAA,EAA+C,KAAA,EAAc,MAAA,EAA2B,SAAwC,aAAA,EAAmF;AACxP,EAAA,MAAM,KAAA,GAAe,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,aAAA,EAAc;AAC1G,EAAA,MAAA,CAAO,GAAA,CAAI,YAAY,KAAK,CAAA;AAC5B,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,UAAA,EAA+C,KAAA,EAAc,MAAA,EAA2B,OAAA,EAAgC;AACzJ,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AACnC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,UAAU,MAAM,IAAI,MAAM,wEAAwE,CAAA;AACtH,EAAA,IAAI,KAAA,CAAM,UAAU,KAAA,IAAS,KAAA,CAAM,WAAW,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,qEAAqE,CAAA;AAC3I,EAAA,IAAI,KAAA,CAAM,OAAA,EAAS,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAC/F,EAAA,KAAA,CAAM,OAAA,GAAU,OAAA;AAChB,EAAA,MAAMC,SAAAA,GAAW,WAAW,WAAA,EAAY;AACxC,EAAA,IAAIA,SAAAA,CAAS,QAAA,EAAU,KAAK,OAAA,CAAQ,MAAA,CAAOA,UAAS,QAAQ,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AACnF,EAAA,IAAIA,SAAAA,CAAS,MAAA,KAAW,OAAA,IAAWA,SAAAA,CAAS,MAAA,KAAW,OAAA,EAAS,KAAK,OAAA,CAAQ,OAAA,EAAQ,CAAE,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAC5G,EAAA,OAAO,MAAM;AACX,IAAA,IAAI,KAAA,CAAM,YAAY,OAAA,EAAS;AAC7B,MAAA,KAAA,CAAM,KAAA,GAAQ,QAAQ,OAAA,EAAQ;AAC9B,MAAA,KAAK,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,MAAM,MAAS,CAAA;AACtC,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,MAAS,CAAA;AAAA,IAChF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,2BAAA,CAA4B,UAAA,EAA+C,KAAA,EAAgB,QAAA,EAA0C;AACnJ,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AACnC,EAAA,IAAI,SAAS,CAAC,KAAA,CAAM,UAAU,KAAA,CAAM,aAAA,CAAc,OAAO,QAAQ,CAAA;AACnE;AC/CO,SAAS,qBAAqB,KAAA,EAA6B;AAChE,EAAA,MAAM,eAAkI,EAAC;AACzI,EAAA,KAAA,CAAM,SAAS,CAAA,MAAA,KAAU;AACvB,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACzB,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,YAAA,CAAa,WAAW,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,IAAI,QAAA,CAAS,iBAAiB,YAAA,KAAiB,EAAE,aAAa,QAAA,CAAA,IAAa,QAAA,CAAS,YAAY,SAAA,CAAA,EAAY;AAM5G,IAAA,MAAM,QAAA,GAAW,IAAI,sBAAA,CAAuB,QAAA,CAAS,QAAQ,QAAA,CAAS,QAAA,EAAU,SAAS,QAAQ,CAAA;AACjG,IAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,QAAA,CAAS,OAAO,MAAA,EAAA,EAAU;AACtD,MAAA,KAAA,IAAS,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,QAAA,CAAS,UAAU,SAAA,EAAA,EAAa;AAClE,QAAA,QAAA,CAAS,aAAa,MAAA,EAAQ,SAAA,EAAW,SAAS,YAAA,CAAa,MAAA,EAAQ,SAAS,CAAC,CAAA;AAAA,MACnF;AAAA,IACF;AACA,IAAA,QAAA,CAAS,OAAO,QAAA,CAAS,IAAA;AACzB,IAAA,QAAA,CAAS,SAAS,MAAA,IAAU,QAAA,GAAW,SAAS,IAAA,CAAK,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC3E,IAAA,QAAA,CAAS,YAAA,CAAa,aAAa,QAAQ,CAAA;AAC3C,IAAA,YAAA,CAAa,IAAA,CAAK,EAAE,QAAA,EAAU,QAAA,EAAU,UAAU,CAAA;AAAA,EACpD,CAAC,CAAA;AAGD,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,QAAA,EAAU,QAAA,MAAc,YAAA,EAAc;AAC3D,MAAA,IAAI,QAAA,CAAS,aAAa,WAAW,CAAA,KAAM,UAAU,QAAA,CAAS,YAAA,CAAa,aAAa,QAAQ,CAAA;AAAA,IAClG;AAAA,EACF,CAAA;AACF;;;AChCA,SAAS,oBAAoB,QAAA,EAA8C;AACzE,EAAA,MAAM,IAAA,GAAO,SAAS,iBAAA,EAAkB;AACxC,EAAA,MAAM,GAAA,GAAM,SAAS,oBAAA,EAAqB;AAC1C,EAAA,IAAI,sBAAsB,QAAA,EAAU;AAClC,IAAA,MAAMC,OAAAA,GAAS,SAAS,eAAA,EAAgB;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,eAAA,CAAgBA,OAAAA,EAAQ,MAAM,GAAG,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,MAAA,GAAS,SAAS,eAAA,EAAgB;AACxC,EAAA,OAAO,MAAM,QAAA,CAAS,eAAA,CAAgB,MAAA,EAAQ,MAAM,GAAG,CAAA;AACzD;AAGA,SAAS,6BAA6B,KAAA,EAA6B;AACjE,EAAA,KAAA,CAAM,eAAA,CAAgB,CAAC,MAAA,KAAW;AAChC,IAAA,IAAI,CAAC,OAAO,aAAA,EAAe;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,IAAI,EAAE,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,MAAA,IAAU,SAAS,QAAA,CAAA,EAAW;AAChE,IAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,MAAA,IAAI,QAAA,CAAS,cAAA,KAAmB,IAAA,IAAQ,uBAAA,IAA2B,QAAA,IAC5D,OAAO,QAAA,CAAS,qBAAA,KAA0B,UAAA,EAAY,QAAA,CAAS,qBAAA,EAAsB;AAAA,IAC9F,WAAW,QAAA,CAAS,QAAA,CAAS,mBAAmB,IAAA,EAAM,QAAA,CAAS,SAAS,qBAAA,EAAsB;AAAA,EAChG,CAAC,CAAA;AACH;AAGA,SAAS,kBACP,KAAA,EAAoB,KAAA,EAAuB,SAAA,EAC3C,OAAA,GAA0C,EAAC,EACxC;AACH,EAAA,IAAI,KAAA,KAAU,KAAA,EAAO,MAAM,IAAI,MAAM,gEAAgE,CAAA;AACrG,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,OAAO,SAAS,MAAA,EAAQ;AACtB,IAAA,QAAA,GAAW,QAAA,CAAS,MAAA;AACpB,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAS,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,MAAM,MAAA,IAAU,QAAA,KAAa,OAAO,MAAM,IAAI,MAAM,kFAAkF,CAAA;AAC1I,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,CAAM,MAAA;AACxB,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA6B;AACjD,EAAA,IAAI;AACF,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC7B,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAI,QAAQ,gBAAA,EAAkB;AAG5B,MAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAC5B,MAAA,4BAAA,CAA6B,KAAK,CAAA;AAAA,IACpC;AACA,IAAA,KAAA,CAAM,eAAA,CAAgB,CAAC,MAAA,KAAW;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,aAAa,CAAA;AACxC,MAAA,MAAA,CAAO,aAAA,GAAgB,KAAA;AAAA,IACzB,CAAC,CAAA;AACD,IAAA,OAAO,SAAA,EAAU;AAAA,EACnB,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AAAE,MAAA,MAAA,CAAO,aAAA,GAAgB,KAAA;AAAA,IAAO,CAAC,CAAA;AACpE,IAAA,KAAA,CAAM,OAAA,GAAU,OAAA;AAChB,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAAA,EAClC;AACF;AAGO,SAAS,qBAAA,CACd,QAAA,EAAkC,KAAA,EAAoB,MAAA,EAAsB,KAAA,EAC1D;AAClB,EAAA,IAAI,kBAAA,IAAsB,QAAA,IAAY,CAAC,QAAA,CAAS,gBAAe,EAAG;AAChE,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACrF;AAGA,EAAA,OAAO,iBAAA,CAAkB,KAAA,EAAO,KAAA,EAAO,MAAM;AAC3C,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,IAAA,OAAO,QAAA,CAAS,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,EACnD,CAAC,CAAA;AACH;AAGO,SAAS,kBAAA,CACd,QAAA,EAAkC,KAAA,EAAoB,MAAA,EAAsB,KAAA,EAChE;AACZ,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,WAAA,CAAY,IAAUC,gBAAS,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,IAAUA,gBAAS,CAAA;AACvD,EAAA,MAAM,WAAA,GAAc,SAAS,cAAA,EAAe;AAC5C,EAAA,MAAM,mBAAA,GAAsB,oBAAoB,QAAQ,CAAA;AACxD,EAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,aAAA,CAAc,MAAA,CAAO,MAAA,CAAO,IAAUA,MAAA,CAAA,KAAA,EAAM,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACpF,EAAA,MAAM,UAAA,GAAa,SAAS,aAAA,EAAc;AAC1C,EAAA,MAAM,MAAA,GAAS,kBAAA,IAAsB,QAAA,GAAW,QAAA,GAAW,IAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,QAAQ,uBAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAO;AAC3B,EAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,EAAA,MAAM,oBAAoB,gBAAA,IAAoB,KAAA;AAC9C,EAAA,MAAM,cAAA,GAAiB,iBAAA,GAAoB,KAAA,CAAM,cAAA,GAAiB,MAAA;AAClE,EAAA,MAAM,mBAAmB,KAAA,CAAM,gBAAA;AAC/B,EAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,EAAA,MAAM,YAAA,GAAe,YAAA,IAAgB,QAAA,CAAS,SAAA,GAAY,SAAS,SAAA,GAAY,IAAA;AAC/E,EAAA,MAAM,mBAAmB,YAAA,EAAc,UAAA;AACvC,EAAA,MAAM,oBAAoB,YAAA,EAAc,WAAA;AACxC,EAAA,MAAM,UAAiI,EAAC;AACxI,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI;AACF,IAAA,iBAAA,CAAkB,KAAA,EAAO,OAAO,MAAM;AACpC,MAAA,IAAI,QAAA,CAAS,UAAU,OAAA,EAAS;AAC9B,QAAA,KAAA,CAAM,eAAA,CAAgB,CAAC,MAAA,KAAW;AAChC,UAAA,MAAM,KAAA,GAAQ,MAAA;AACd,UAAA,IAAI,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG;AACzF,YAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,YAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,UAAA,EAAY,MAAA,CAAO,UAAA,EAAY,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA;AAC1H,YAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AAAA,UACvB;AAAA,QACF,CAAC,CAAA;AACD,QAAA,IAAI,YAAA,eAA2B,WAAA,GAAc,IAAA;AAAA,MAC/C;AACA,MAAA,QAAA,CAAS,SAAA,GAAY,KAAA;AAGrB,MAAA,IAAI,MAAM,UAAA,IAAc,SAAA,IAAa,KAAA,CAAM,UAAA,QAAkB,UAAA,GAAa,IAAA;AAC1E,MAAA,QAAA,CAAS,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,MAAA,QAAA,CAAS,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,KAAA,MAAW,KAAA,IAAS,OAAA,EAAS,KAAA,CAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,WAAA;AAAA,IACpE,CAAA,EAAG,EAAE,gBAAA,EAAkB,IAAA,EAAM,CAAA;AAAA,EAC/B,CAAA,SAAE;AAGA,IAAA,mBAAA,EAAoB;AACpB,IAAA,QAAA,CAAS,YAAY,QAAQ,CAAA;AAC7B,IAAA,QAAA,CAAS,WAAW,OAAO,CAAA;AAC3B,IAAA,QAAA,CAAS,eAAe,WAAW,CAAA;AACnC,IAAA,QAAA,CAAS,aAAA,CAAc,YAAY,UAAU,CAAA;AAC7C,IAAA,QAAA,CAAS,SAAA,GAAY,SAAA;AACrB,IAAA,IAAI,MAAA,EAAQ;AAAE,MAAA,MAAA,CAAO,uBAAA,CAAwB,gBAAgB,IAAI,CAAA;AAAG,MAAA,MAAA,CAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IAAG;AAChG,IAAA,KAAA,CAAM,UAAA,GAAa,UAAA;AACnB,IAAA,IAAI,mBAAmB,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,SACzD,OAAA,CAAQ,cAAA,CAAe,KAAA,EAAO,gBAAgB,CAAA;AACnD,IAAA,KAAA,CAAM,gBAAA,GAAmB,gBAAA;AACzB,IAAA,KAAA,CAAM,IAAA,GAAO,SAAA;AACb,IAAA,KAAA,MAAW,EAAE,MAAA,EAAQ,MAAA,EAAQ,YAAY,WAAA,EAAa,eAAA,MAAqB,OAAA,EAAS;AAClF,MAAA,MAAA,CAAO,MAAA,CAAO,OAAO,IAAA,GAAO,MAAA;AAC5B,MAAA,MAAA,CAAO,UAAA,GAAa,UAAA;AACpB,MAAA,MAAA,CAAO,WAAA,GAAc,QAAA,GAAW,WAAA,IAAe,CAAC,CAAC,eAAA,GAAkB,IAAA;AAAA,IACrE;AACA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,UAAA,GAAa,gBAAA;AAC1B,MAAA,YAAA,CAAa,WAAA,GAAc,WAAW,iBAAA,GAAqB,IAAA;AAAA,IAC7D;AAAA,EACF;AAGA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,EAAE,MAAA,EAAO,IAAK,OAAA,SAAgB,WAAA,GAAc,IAAA;AACvD,IAAA,IAAI,YAAA,IAAgB,QAAA,CAAS,SAAA,CAAU,OAAA,eAAsB,WAAA,GAAc,IAAA;AAAA,EAC7E,CAAA;AACF;ACxJA,IAAM,QAAA,uBAAe,OAAA,EAAgC;AAG9C,SAAS,qBAAA,CAAsB,KAAA,EAAiB,KAAA,EAAuB,UAAA,EAAwB;AACpG,EAAA,MAAM,OAAA,GAAmB,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,UAAA,EAAW;AAC5D,EAAA,MAAM,UAAU,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,wBAAS,GAAA,EAAa;AACxD,EAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,EAAA,QAAA,CAAS,GAAA,CAAI,OAAO,OAAO,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,WAAW,OAAA,EAAkB;AAAE,MAAA,OAAA,CAAQ,OAAA,GAAU,OAAA;AAAA,IAAS,CAAA;AAAA,IAC1D,OAAA,GAAU;AACR,MAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AACtB,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,IAC1C;AAAA,GACF;AACF;AAGO,SAAS,mBAAA,CAAoB,OAAiB,KAAA,EAAoB;AACvE,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAW;AACzB,IAAA,KAAA,MAAW,WAAW,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,IAAK,EAAC,EAAG;AAChD,MAAA,IAAI,QAAQ,OAAA,EAAS;AAAE,QAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AAAG,QAAA,MAAA,CAAO,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,MAAG;AAAA,IAC1E;AAAA,EACF,CAAC,CAAA;AACD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAGzD,EAAA,KAAA,MAAW,OAAA,IAAW,MAAA,EAAQ,OAAA,CAAQ,UAAA,EAAW;AACnD;AAGO,SAAS,wBAAA,CAAyB,OAAiBC,SAAAA,EAAqB;AAC7E,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,EAAA,IAAIA,SAAAA,EAAU,KAAA,CAAM,OAAA,CAAQA,SAAQ,CAAA;AACpC,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,OAAO;AAAA,IACL,QAAQ,SAAA,EAAoB;AAC1B,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAEtB,MAAA,IAAI,CAAC,WAAA,EAAa;AAAE,QAAA,WAAA,GAAc,IAAA;AAAM,QAAA;AAAA,MAAQ;AAChD,MAAA,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,IAClC,CAAA;AAAA,IACA,OAAA,GAAU;AAAE,MAAA,IAAI,CAAC,QAAA,EAAU;AAAE,QAAA,QAAA,GAAW,IAAA;AAAM,QAAA,KAAA,CAAM,OAAA,EAAQ;AAAA,MAAG;AAAA,IAAE;AAAA,GACnE;AACF;;;AC1BO,IAAM,gCAAA,GAAmC;AAEzC,SAAS,8BAA8B,IAAA,EAAuB;AACnE,EAAA,OAAO,IAAA,CAAK,WAAW,gCAAgC,CAAA;AACzD;AAEO,SAAS,wBAAoD,OAAA,EAAmB;AACrF,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,MAAA,KAAW,CAAC,6BAAA,CAA8B,MAAA,CAAO,IAAI,CAAC,CAAA;AAC/E;AAMA,IAAM,MAAA,GAAS;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;AAAA;AAAA;AAAA,CAAA;AAmFf,IAAI,cAAA,GAAiB,KAAA;AAErB,SAAS,YAAA,GAAqB;AAC5B,EAAA,IAAI,cAAA,IAAkB,OAAO,QAAA,KAAa,WAAA,EAAa;AACvD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,YAAA,CAAa,mBAAmB,MAAM,CAAA;AAC5C,EAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,EAAA,cAAA,GAAiB,IAAA;AACnB;AAMA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,eACP,MAAA,EACA,YAAA,EACA,IAAA,mBAAoB,IAAI,KAAI,EACpB;AACR,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,KAAK,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAC3C,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAA,CAAK,GAAA,CAAI,OAAO,IAAI,CAAA;AACpB,EAAA,OAAO,cAAA,CAAe,MAAA,EAAQ,YAAA,EAAc,IAAI,CAAA,GAAI,CAAA;AACtD;AAEO,SAAS,0BACd,OAAA,EACwC;AACxC,EAAA,MAAM,WAAA,GAAc,wBAAwB,OAAO,CAAA;AACnD,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AAE/E,EAAA,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW;AACjC,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,MAAA,EAAQ,YAAY,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAA,GAAI,CAAA,EAAG,MAAM,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,GAAK,EAAA;AACtD,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,OAAO,CAAA,EAAG,MAAM,GAAG,UAAA,CAAW,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,KAC5C;AAAA,EACF,CAAC,CAAA;AACH;AAKO,IAAM,oBAAN,MAAwB;AAAA,EAQ7B,YAAY,MAAA,EAA2B;AAPvC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAA2C,IAAA,CAAA;AACnD,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,wBAAA,CAAA;AAIN,IAAA,YAAA,EAAa;AAEb,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,IAAA,IAAA,CAAK,yBAAyB,MAAA,CAAO,sBAAA;AAGrC,IAAA,IAAA,CAAK,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAQ,SAAA,GAAY,cAAA;AAGzB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC3C,IAAA,KAAA,CAAM,SAAA,GAAY,WAAA;AAClB,IAAA,KAAA,CAAM,WAAA,GAAc,OAAA;AACpB,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,KAAK,CAAA;AAG9B,IAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,YAAA;AACxB,IAAA,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,aAAa,CAAA;AAGxD,IAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,MAAM;AAC3C,MAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACvC,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAEpC,IAAA,IAAI,KAAK,sBAAA,EAAwB;AAC/B,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACnD,MAAA,YAAA,CAAa,SAAA,GAAY,aAAA;AAEzB,MAAA,IAAA,CAAK,eAAA,GAAkB,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACrD,MAAA,IAAA,CAAK,gBAAgB,IAAA,GAAO,UAAA;AAC5B,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA;AAC5D,MAAA,IAAA,CAAK,eAAA,CAAgB,YAAA,CAAa,YAAA,EAAc,yBAAyB,CAAA;AACzE,MAAA,IAAA,CAAK,eAAA,CAAgB,gBAAA,CAAiB,QAAA,EAAU,MAAM;AACpD,QAAA,IAAA,CAAK,sBAAA,GAAyB,IAAA,CAAK,eAAA,CAAiB,OAAO,CAAA;AAAA,MAC7D,CAAC,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AACjD,MAAA,WAAA,CAAY,WAAA,GAAc,SAAA;AAE1B,MAAA,YAAA,CAAa,WAAA,CAAY,KAAK,eAAe,CAAA;AAC7C,MAAA,YAAA,CAAa,YAAY,WAAW,CAAA;AACpC,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,YAAY,CAAA;AAAA,IACvC;AAIA,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC7D,IAAA,IAAI,cAAA,CAAe,aAAa,QAAA,EAAU;AACxC,MAAA,IAAA,CAAK,SAAA,CAAU,MAAM,QAAA,GAAW,UAAA;AAAA,IAClC;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,SAA6B,OAAA,EAAwB;AAC1E,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,EAAA;AAExB,IAAA,MAAM,WAAA,GAAc,wBAAwB,OAAO,CAAA;AAEnD,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,GAAQ,EAAA;AACf,MAAA,MAAA,CAAO,WAAA,GAAc,YAAA;AACrB,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,YAAY,MAAM,CAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,yBAAA,CAA0B,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAM,OAAM,KAAM;AAClE,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,MAAA,CAAO,WAAA,GAAc,KAAA;AACrB,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAAA,MACpB;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,IAChC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,CAAc,SAA6B,OAAA,EAAwB;AACjE,IAAA,IAAA,CAAK,cAAA,CAAe,SAAS,OAAO,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,OAAA,EAAwB;AACxC,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,eAAA,CAAgB,YAAY,OAAA,EAAS;AACvE,IAAA,IAAA,CAAK,gBAAgB,OAAA,GAAU,OAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,IAAA,EAAoB;AACnC,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,IAAA,EAAM;AAC9B,MAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,IAAA;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,OAAA,GAAU,MAAA,GAAS,MAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,OAAA,KAAY,MAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,QAAQ,MAAA,EAAO;AAAA,EACtB;AACF;;;AChUA,IAAM,eAAA,GAAkB,CAAA;AAOxB,eAAsB,uBAAA,CACpB,SAAA,EACA,MAAA,EACA,OAAA,EACsC;AACtC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,KAAQ,MAAM,YAAY,GAAA,EAAI,CAAA;AAClD,EAAA,IAAI,aAAa,GAAA,EAAI;AACrB,EAAA,MAAM,OAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,MAAA,CAAO,SAAQ,EAAG;AAC5C,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAU,EAAG,OAAO,IAAA;AAGjC,IAAA,KAAA,MAAW,GAAA,IAAO,UAAU,eAAA,CAAgB,IAAA,EAAM,KAAK,CAAA,EAAG,IAAA,CAAK,KAAK,GAAG,CAAA;AACvE,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAU,EAAG,OAAO,IAAA;AACjC,IAAA,IAAI,QAAQ,MAAA,CAAO,MAAA,GAAS,KAAK,GAAA,EAAI,GAAI,cAAc,eAAA,EAAiB;AACtE,MAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,MAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAU,EAAG,OAAO,IAAA;AACjC,MAAA,UAAA,GAAa,GAAA,EAAI;AAAA,IACnB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAU,EAAG,OAAO,IAAA;AAEjC,EAAA,OAAO,IAAA,CAAK,KAAK,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,QAAA,GAAW,MAAM,QAAQ,CAAA;AAClE;;;AC/BO,SAAS,yBAAA,GAA2C;AACzD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,IAAA;AACJ,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,YAAA,CAAa,IAAI,CAAA;AACzC,MAAA,IAAI,UAAU,MAAA,IAAa,OAAO,oBAAA,KAAyB,UAAA,uBAAiC,KAAK,CAAA;AACjG,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,MAAA,EAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,OAAO,0BAA0B,UAAA,KAChC,OAAO,aAAa,WAAA,IAAe,QAAA,CAAS,oBAAoB,QAAA,CAAA,EAAW;AAC9E,MAAA,KAAA,GAAQ,sBAAsB,MAAM;AAAE,QAAA,IAAA,GAAO,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,MAAG,CAAC,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAA,IAAA,GAAO,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAC,CAAA;AACH;;;ACbO,IAAM,8BAAN,MAAkC;AAAA,EAAlC,WAAA,GAAA;AACL,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAyB,IAAA,CAAA;AACjC,IAAA,aAAA,CAAA,IAAA,EAAiB,OAAA,sBAAY,GAAA,EAAgC,CAAA;AAuC7D,IAAA,aAAA,CAAA,IAAA,EAAiB,MAAA,EAAO,CAAC,GAAA,KAAsB;AAC7C,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,MAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAG;AAChD,QAAA,IAAI,CAAC,KAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,GAAG,CAAA,EAAG;AACtC,UAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,QACvB;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACpB,CAAA,CAAA;AAAA,EAAA;AAAA,EA/CA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA,EAEA,IAAI,GAAA,EAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAAA,EAC3B;AAAA,EAEA,QAAA,CAAS,GAAA,EAAa,IAAA,EAA0B,cAAA,GAAiB,IAAA,EAAY;AAC3E,IAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AAEf,IAAA,IAAI,kBAAkB,CAAC,IAAA,CAAK,WAAA,CAAY,GAAA,EAAK,CAAA,EAAG;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AACxB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,OAAO,GAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEA,SAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,KAAK,OAAA,KAAY,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AAAA,EAChD;AAAA,EAcQ,iBAAA,GAA0B;AAChC,IAAA,IAAI,KAAK,KAAA,CAAM,IAAA,GAAO,CAAA,IAAK,IAAA,CAAK,YAAY,IAAA,EAAM;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,oBAAA,CAAqB,KAAK,OAAO,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AACF,CAAA;;;ACpDA,SAAS,YAAY,MAAA,EAA0C;AAC7D,EAAA,OAAO;AAAA,IACL,GAAI;AAAA,GACN;AACF;AAEA,SAAS,WAAA,CACP,QACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,IAAA,GAAO,YAAY,MAAM,CAAA;AAE/B,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAC,GAAG,MAAA,CAAO,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,CAAC,GAAG,MAAA,CAAO,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,CAAC,GAAG,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,wBAAwB,MAAA,EAA+C;AAC9E,EAAA,OAAQ,OAAoC,YAAA,IAAgB,IAAA;AAC9D;AAEA,SAAS,0BAA0B,MAAA,EAA4D;AAC7F,EAAA,IAAI,MAAA,CAAO,qBAAqB,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA,CAAO,mBAAmB,SAAA,GAAY,MAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,SAAS,MAAA,EAAQ;AACrD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAMO,SAAS,0BAA0B,MAAA,EAA4C;AACpF,EAAA,MAAM,MAAA,GAAS,wBAAwB,MAAM,CAAA;AAC7C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,eAAA;AAAA,MACR,UAAA,EAAY,QAAA;AAAA,MACZ,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,eAAA;AAAA,MACR,YAAY,MAAA,CAAO,gBAAA,KAAqB,SACpC,QAAA,GACA,MAAA,CAAO,mBACL,SAAA,GACA,MAAA;AAAA,MACN,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,QAAA,EAAU;AAC9C,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,GAAG,YAAY,MAAM,CAAA;AAAA,QACrB,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,cAAA,EAAgB,EAAE,GAAG,MAAA,CAAO,QAAA;AAAS,OACvC;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,eAAA;AAAA,MACR,UAAA,EAAY,0BAA0B,MAAM,CAAA;AAAA,MAC5C,wBAAA,EAA0B;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX;AAAA,MACE,GAAG,YAAY,MAAM,CAAA;AAAA,MACrB,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,IAAU,CAAC,KAAK,KAAA,EAAO;AACzC,IAAA,IAAA,CAAK,QAAS,MAAA,CAAoC,KAAA;AAAA,EACpD,WAAW,MAAA,CAAO,IAAA,KAAS,MAAA,IAAU,CAAC,KAAK,MAAA,EAAQ;AACjD,IAAA,IAAA,CAAK,SAAU,MAAA,CAAoC,MAAA;AAAA,EACrD,WAAW,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,CAAC,KAAK,OAAA,EAAS;AACpD,IAAA,IAAA,CAAK,UAAW,MAAA,CAAoC,OAAA;AAAA,EACtD,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,aAAA,EAAe;AACxC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAU,MAAA,CAAoC,KAAA;AAChE,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,IAAW,MAAA,CAAoC,MAAA;AAAA,EACpE;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,IAAA;AAAA,IACR,MAAA;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,UAAA,EAAY,0BAA0B,MAAM,CAAA;AAAA,IAC5C,wBAAA,EAA0B;AAAA,GAC5B;AACF;AAEO,SAAS,mCACd,QAAA,EACS;AACT,EAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,IAAA,KAAS,aAAA,EAAe;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA,CAAS,4BAA4B,QAAA,CAAS,MAAA,CAAO,KAAK,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA;AAChG;AAEO,SAAS,kCAAA,CACd,UACA,aAAA,EACS;AACT,EAAA,IAAI,QAAA,CAAS,eAAe,QAAA,EAAU;AACpC,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAS,UAAA,KAAe,SAAA;AACjC;ACtJA,IAAM,0BAAA,GAA6B,IAAA;AACnC,IAAM,kCAAA,GAAqC,IAAA;AAC3C,IAAM,oCAAA,GAAuC,IAAA;AAC7C,IAAM,oCAAA,GAAuC,CAAA;AAYtC,SAAS,yBAAyB,MAAA,EAAgE;AACvG,EAAA,MAAM,IAAA,GAAO,OAAO,iBAAA,EAAmB,IAAA;AACvC,EAAA,OAAO,SAAS,MAAA,IAAU,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA;AAC3E;AAEA,SAAS,yBAAA,CACP,MACA,SAAA,EACiE;AACjE,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,GAAwB,SAAS,CAAA;AACzD,EAAA,IAAI,UAAA,IAAc,MAAM,OAAO,IAAA;AAE/B,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,QAAA;AACrD,EAAA,OAAO,cAAA,GAAiB,UAAU,CAAA,IAAK,IAAA;AACzC;AAEA,SAAS,6BAAA,CACP,IAAA,EACA,aAAA,EACA,cAAA,EACA,KAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,CAAS,oBAAA;AAC/B,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAC9B;AAEA,SAAS,+BAA+B,MAAA,EAA0C;AAChF,EAAA,OAAO;AAAA,IACL,MAAA,CAAO,IAAA;AAAA,IACP,MAAA,CAAO,KAAA;AAAA,IACP,GAAI,MAAA,CAAO,iBAAA,EAAmB,UAAA,IAAc;AAAC,GAC/C,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,EAAY;AAC1B;AAEA,SAAS,+BAA+B,MAAA,EAAkE;AACxG,EAAA,MAAM,IAAA,GAAO,+BAA+B,MAAM,CAAA;AAElD,EAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAA,EAAG;AACxC,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,CAAA,EAAE;AAAA,EAC7B;AACA,EAAA,IAAI,8CAAA,CAA+C,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7D,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAI;AAAA,EAC/B;AACA,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AACjC,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAI;AAAA,EAC/B;AACA,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAI;AAAA,EAC/B;AACA,EAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,GAAA,EAAI;AAAA,EAC5B;AACA,EAAA,IAAI,2EAAA,CAA4E,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1F,IAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,IAAA,EAAK;AAAA,EAC7B;AACA,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,GAAA,EAAI;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,cAAwB,KAAA,EAA8B;AACzE,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,IACjB,aAAa,MAAA,GAAS,CAAA;AAAA,IACtB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,OAAO,YAAA,CAAa,MAAA,GAAS,CAAA,IAAK,KAAK,CAAC;AAAA,GAC3D;AACA,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,IAAK,IAAA;AAChC;AAEA,SAAS,mCAAA,CACP,QACA,UAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,GAAO,+BAA+B,MAAM,CAAA;AAClD,EAAA,IAAI,CAAC,IAAA,IAAQ,UAAA,CAAW,MAAA,GAAS,oCAAA,EAAsC;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,UAAA,CACb,GAAA,CAAI,CAAC,cAAc,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA,CACpC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACvB,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAC1C,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,IAAQ,IAAA,EAAM,OAAO,IAAA;AAEzC,EAAA,MAAM,WAAW,UAAA,CAAW,MAAA;AAAA,IAAO,CAAC,SAAA,KAClC,SAAA,CAAU,KAAA,CAAM,CAAA,IAAK,OAAO,0BAAA,IAC5B,SAAA,CAAU,KAAA,CAAM,CAAA,IAAK,IAAA,GAAO;AAAA,GAC9B;AAEA,EAAA,OAAO,QAAA,CAAS,MAAA,IAAU,oCAAA,GAAuC,QAAA,GAAW,IAAA;AAC9E;AAEA,SAAS,6BAA6B,UAAA,EAA0D;AAC9F,EAAA,MAAM,cAAA,GAAiB,IAAUC,MAAA,CAAA,OAAA,EAAQ;AACzC,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,cAAA,CAAe,eAAA,CAAgB,SAAA,CAAU,KAAA,EAAO,SAAA,CAAU,SAAS,CAAA;AACnE,IAAA,WAAA,IAAe,SAAA,CAAU,SAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,cAAc,CAAA,GACjB,cAAA,CAAe,cAAA,CAAe,CAAA,GAAI,WAAW,CAAA,GAC7C,IAAA;AACN;AAEO,SAAS,4BAAA,CACd,QACA,IAAA,EACsB;AACtB,EAAA,MAAM,oBAAoB,MAAA,CAAO,iBAAA;AACjC,EAAA,MAAM,aAAa,iBAAA,EAAmB,UAAA;AACtC,EAAA,IACE,iBAAA,EAAmB,UAAA,KAAe,IAAA,IAClC,CAAC,KAAA,CAAM,QAAQ,UAAU,CAAA,IACzB,UAAA,CAAW,MAAA,KAAW,CAAA,EACtB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AAC3D,EAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAE3B,EAAA,MAAM,eAAA,GAAkB,UAAA,CACrB,GAAA,CAAI,CAAC,cAAc,yBAAA,CAA0B,IAAA,EAAM,SAAS,CAAC,EAC7D,MAAA,CAAO,CAAC,SAAA,KAAqF,OAAA,CAAQ,SAAS,CAAC,CAAA;AAElH,EAAA,IAAI,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEzC,EAAA,MAAM,cAAc,aAAA,CAAc,KAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,YAAA,CAAa,WAAW,CAAA;AAC/C,EAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,EAAA,KAAA,MAAW,kBAAkB,eAAA,EAAiB;AAC5C,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,WAAA,EAAa,SAAS,CAAA,EAAG;AACnD,MAAA,MAAM,SAAA,GAAY,6BAAA,CAA8B,IAAA,EAAM,aAAA,EAAe,gBAAgB,KAAK,CAAA;AAC1F,MAAA,IAAI,SAAA,IAAa,UAAA,CAAW,KAAK,CAAA,EAAG;AAEpC,MAAA,UAAA,CAAW,KAAK,CAAA,GAAI,SAAA;AACpB,MAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,SAAS,CAAA;AAAA,IACjD;AAAA,EACF;AAEA,EAAA,IAAI,YAAA,IAAgB,4BAA4B,OAAO,IAAA;AAEvD,EAAA,MAAM,uBAAuB,IAAA,CAAK,GAAA;AAAA,IAChC,0BAAA;AAAA,IACA,YAAA,GAAe;AAAA,GACjB;AACA,EAAA,MAAM,qBAAqB,IAAA,CAAK,GAAA;AAAA,IAC9B,0BAAA;AAAA,IACA,YAAA,GAAe;AAAA,GACjB;AACA,EAAA,MAAM,WAAA,GAAc,IAAA;AACpB,EAAA,IAAA,CAAK,iBAAA,CAAkB,MAAM,KAAK,CAAA;AAClC,EAAA,IAAI,WAAA,CAAY,aAAA,IAAiB,WAAA,CAAY,QAAA,EAAU;AACrD,IAAA,WAAA,CAAY,SAAS,MAAA,EAAO;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACjC,EAAA,MAAM,aAAqC,EAAC;AAC5C,EAAA,MAAM,qBAA6C,EAAC;AACpD,EAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,EAAA,IAAI,kBAAA,GAAqB,CAAA;AAEzB,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,WAAA,EAAa,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAK,CAAA,IAAK,CAAA;AACvC,IAAA,IAAI,YAAY,kBAAA,EAAoB;AAClC,MAAA,kBAAA,GAAqB,SAAA;AACrB,MAAA,cAAA,GAAiB,KAAA;AAAA,IACnB;AACA,IAAA,IAAI,YAAY,kBAAA,EAAoB;AAEpC,IAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,MAAM,CAAA;AACpC,IAAA,MAAA,CAAO,YAAA,CAAa,KAAK,WAAW,CAAA;AACpC,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,MACpB;AAAA,KACF;AACA,IAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,IAAA,IAAI,aAAa,oBAAA,EAAsB;AACrC,MAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,MAAM,kBAAA,GAAqB,oCAAoC,MAAA,EAAQ,UAAU,MAC3E,kBAAA,CAAmB,MAAA,GAAS,IAAI,kBAAA,GAAqB,UAAA,CAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,6BAA6B,kBAAkB,CAAA;AACtE,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAE3B,EAAA,IAAI,cAAA,GAAiB,GAAG,OAAO,IAAA;AAC/B,EAAA,IAAA,CAAK,iBAAA,CAAkB,gBAAgB,MAAM,CAAA;AAC7C,EAAA,OAAO,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,WAAW,EAAE,KAAA,EAAM;AACrD;AAEO,SAAS,0BAAA,CACd,MAAA,EACA,QAAA,EACA,SAAA,EACsB;AACtB,EAAA,MAAM,IAAA,GAAO,yBAAyB,MAAM,CAAA;AAC5C,EAAA,IACE,OAAO,iBAAA,EAAmB,UAAA,KAAe,QACxC,IAAA,KAAS,MAAA,IAAU,SAAS,OAAA,EAC7B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,UAAU,CAAA,IAAK,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,CAAA,IAAK,MAAA,GAAS,IAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,CAAA,IAAK,MAAA,GAAS,IAAA;AACtC,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,MAAA,CAAO,IAAA;AAAA,IACP,MAAA,CAAO,KAAA;AAAA,IACP,GAAI,MAAA,CAAO,iBAAA,CAAkB,UAAA,IAAc;AAAC,GAC9C,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,EAAY;AAExB,EAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA;AAAA,IAC5B,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,IACpC,MAAA,GAAS;AAAA,GACX;AACA,EAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,IAAA,EAAM,SAAS,KAAK,CAAA;AACzD,EAAA,IAAI,iBAAiB,MAAA,GAAS,IAAA;AAE9B,EAAA,IAAI,8CAAA,CAA+C,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7D,IAAA,cAAA,GAAiB,MAAA,GAAS,GAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AACxC,IAAA,cAAA,GAAiB,MAAA,GAAS,IAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,sDAAA,CAAuD,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5E,IAAA,cAAA,GAAiB,CAAC,MAAA,GAAS,IAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,IAAUA,MAAA,CAAA,OAAA;AAAA,IACf,QAAA,GAAW,gBAAA;AAAA,IACX,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC3MA,IAAM,cAAA,GAAyC;AAAA,EAC7C,YAAA,EAAc,IAAA;AAAA;AAAA,EACd,WAAA,EAAa,OAAA;AAAA,EACb,SAAA,EAAW,OAAA;AAAA,EACX,UAAA,EAAY,GAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,eAAA,EAAiB,qBAAA;AAAA,EACjB,aAAA,EAAe,EAAA;AAAA,EACf,UAAA,EAAY;AACd,CAAA;AAGA,IAAM,sBAAA,GAAyB,GAAA;AAI/B,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,sBAAA,GAAyB,IAAA;AAC/B,IAAM,qBAAA,GAAwB,IAAA;AAC9B,IAAM,oBAAA,GAAuB,GAAA;AAE7B,IAAM,6BAAA,GAAgC,GAAA;AACtC,IAAM,wBAAA,GAA2B,IAAA;AACjC,IAAM,8BAAA,GAAiC,cAAA;AAEvC,SAAS,sBAAA,GAAwC;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,IAAI,OAAO,0BAA0B,UAAA,EAAY;AAC/C,MAAA,qBAAA,CAAsB,MAAM,SAAS,CAAA;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,UAAA,CAAW,SAAS,CAAC,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AASO,SAAS,mBAAmB,MAAA,EAMvB;AACV,EAAA,OAAO,2BAAA,GAA8B,gBAAA,CAAiB;AAAA,IACpD,WAAA,EAAa,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,OAAO,IAAI,CAAA;AAAA,IAClD,IAAA,EAAM,OAAO,YAAA,KAAiB,IAAA,GAC1B,SACA,MAAA,CAAO,YAAA,KAAiB,MAAA,CAAO,IAAA,GAAO,QAAA,GAAW,cAAA;AAAA,IACrD,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,oBAAoB,MAAA,CAAO;AAAA,GAC5B,CAAA;AACH;AAEA,SAAS,yBAAyB,MAAA,EAAoC;AACpE,EAAA,MAAM,QAAS,MAAA,CAAoC,KAAA;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEA,SAAS,kBAAkBC,MAAAA,EAA+B;AACxD,EAAA,OAAO,OAAO,QAAA,CAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,MAAA,CAAO,SAASA,MAAAA,CAAM,CAAC,CAAA,IACxD,MAAA,CAAO,SAASA,MAAAA,CAAM,CAAC,KAAK,MAAA,CAAO,QAAA,CAASA,OAAM,CAAC,CAAA;AACvD;AAoBO,SAAS,0BAA0B,MAAA,EAQL;AACnC,EAAA,OAAO,2BAAA,EAA4B,CAAE,yBAAA,CAA0B,MAAM,CAAA;AACvE;AASO,IAAM,mBAAN,MAAuB;AAAA,EAyF5B,YAAY,WAAA,EAMT;AA9FH,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAoB,EAAC,CAAA;AAC7B,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAER,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,sBAA0C,GAAA,EAAI,CAAA;AACtD,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,sBAAyG,GAAA,EAAI,CAAA;AACrH,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,sBAA8C,GAAA,EAAI,CAAA;AAC1D,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,sBAAyD,GAAA,EAAI,CAAA;AAGrE;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,qBAAA,sBAA+C,GAAA,EAAI,CAAA;AAE3D;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,sBAA+C,GAAA,EAAI,CAAA;AAG3D;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,EAAc,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AACtC,IAAA,aAAA,CAAA,IAAA,EAAQ,eAA4B,EAAC,CAAA;AACrC,IAAA,aAAA,CAAA,IAAA,EAAQ,4BAAA,EAA6B,KAAA,CAAA;AAGrC;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAAa,KAAA,CAAA;AACrB,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAAgB,CAAA,CAAA;AACxB;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,CAAA,CAAA;AAChC;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,EAAqB,EAAA,CAAA;AAC7B;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,EAAoB,KAAA,CAAA;AAC5B,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAAA,EAA4B,KAAA,CAAA;AACpC,IAAA,aAAA,CAAA,IAAA,EAAiB,8BAAA,EAA+B,IAAI,2BAAA,EAA4B,CAAA;AAChF,IAAA,aAAA,CAAA,IAAA,EAAQ,6BAA8D,EAAC,CAAA;AACvE,IAAA,aAAA,CAAA,IAAA,EAAQ,kCAAA,sBAAuC,GAAA,EAAY,CAAA;AAC3D,IAAA,aAAA,CAAA,IAAA,EAAQ,iCAAA,sBAAmF,GAAA,EAAI,CAAA;AAC/F,IAAA,aAAA,CAAA,IAAA,EAAQ,wBAAA,sBAAmD,GAAA,EAAI,CAAA;AAC/D,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAAA,sBAAsD,GAAA,EAAI,CAAA;AAClE,IAAA,aAAA,CAAA,IAAA,EAAQ,0BAAA,sBAAqD,GAAA,EAAI,CAAA;AACjE,IAAA,aAAA,CAAA,IAAA,EAAQ,8BAAA,EAA+B,KAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,+BAAA,EAAgC,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAC1D,IAAA,aAAA,CAAA,IAAA,EAAQ,iCAAA,EAAkC,IAAU,MAAA,CAAA,UAAA,EAAW,CAAA;AAE/D,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,IAAU,MAAA,CAAA,SAAA,EAAU,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAAQ,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAClC,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAmB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAC7C,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAiB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAC3C,IAAA,aAAA,CAAA,IAAA,EAAiB,wBAAA,EAAyB,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAiB,sBAAA,EAAuB,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACnD,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAkB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAC5C,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAmB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAC7C,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,IAAU,MAAA,CAAA,OAAA,EAAQ,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,wBAAA,EAAyB,IAAU,MAAA,CAAA,UAAA,EAAW,CAAA;AACtD,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAI3C;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAA+B,EAAC,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAoD,EAAC,CAAA;AAG7D;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,sBAAkE,GAAA,EAAI,CAAA;AAG9E;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAA8C,GAAA,EAAI,CAAA;AAC1D;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,sBAAkC,GAAA,EAAI,CAAA;AAG9C;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAA8B,IAAA,CAAA;AAGtC;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAA8B,EAAC,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,sBAAgD,GAAA,EAAI,CAAA;AAG5D;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,sBAA2C,GAAA,EAAI,CAAA;AAGvD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAA0C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAmC,8BAAA,EAA+B,CAAA;AAC1E,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAA,EAAuB,CAAA,CAAA;AAm/C/B,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,CAAC,KAAA,KAA4B;AAC7C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,qBAAA,EAAsB;AACnD,MAAA,IAAA,CAAK,KAAA,CAAM,KAAM,KAAA,CAAM,OAAA,GAAU,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAS,CAAA,GAAI,CAAA;AAChE,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,EAAA,CAAG,KAAA,CAAM,UAAU,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,MAAA,CAAA,GAAU,CAAA,GAAI,CAAA;AAEjE,MAAA,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM,CAAA;AAEpD,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG,GAAG,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,CAAA;AAChF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,YAAY,KAAK,CAAA;AAE9D,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,CAAO,SAAS,UAAA,EAAY;AACzD,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,CAAE,OAAO,QAAA,CAAS,UAAA;AAG3C,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AACrD,QAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,UAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAC3D,UAAA,MAAM,SAAA,GAAY,QAAQ,eAAA,IAAmB,WAAA;AAC7C,UAAA,IAAA,CAAK,YAAA,CAAa,YAAY,SAAS,CAAA;AAAA,QACzC;AAGA,QAAA,IAAA,CAAK,SAAS,UAAU,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA,CAAA;AAlgDE,IAAA,IAAA,CAAK,QAAQ,WAAA,CAAY,KAAA;AACzB,IAAA,IAAA,CAAK,SAAS,WAAA,CAAY,MAAA;AAC1B,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,UAAA;AAC9B,IAAA,IAAA,CAAK,WAAW,WAAA,CAAY,QAAA;AAC5B,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,cAAA,EAAgB,GAAG,YAAY,YAAA,EAAa;AAE/D,IAAA,IAAA,CAAK,WAAA,GAAc,IAAU,MAAA,CAAA,KAAA,EAAM;AACnC,IAAA,IAAA,CAAK,YAAY,IAAA,GAAO,kBAAA;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,WAAW,CAAA;AAE/B,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,EACxD;AAAA;AAAA,EAGA,cAAc,OAAA,EAA4B;AACxC,IAAA,IAAI,OAAA,KAAY,KAAK,UAAA,EAAY;AACjC,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAA,CAAoB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA;AAClB,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,EACxD;AAAA,EAEA,SAAS,KAAA,EAA6B;AACpC,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,0BAAA,GAA6B,KAAA;AAClC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAEb,IAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAW;AACzB,MAAA,IAAK,OAAsB,MAAA,EAAQ;AACjC,QAAA,IAAA,CAAK,WAAA,CAAY,KAAK,MAAoB,CAAA;AAAA,MAC5C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAU,MAAA,CAAA,IAAA,EAAK,CAAE,cAAc,KAAK,CAAA;AAChD,IAAA,GAAA,CAAI,SAAA,CAAU,KAAK,WAAW,CAAA;AAC9B,IAAA,GAAA,CAAI,OAAA,CAAQ,KAAK,SAAS,CAAA;AAG1B,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,oBAAA;AAExC,IAAA,IAAA,CAAK,qBAAA,GAAwB,KAAK,aAAA,GAAgB,GAAA;AAClD,IAAA,IAAA,CAAK,kBAAA,GAAqB,EAAA;AAC1B,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,4BAAA,GAA+B,KAAA;AACpC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEA,MAAM,WAAA,CAAY,MAAA,EAAyB,OAAA,GAA6C,EAAC,EAAkB;AACzG,IAAA,MAAM,cAAA,GAAiB,EAAE,IAAA,CAAK,oBAAA;AAC9B,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA;AACvB,IAAA,MAAM,oBAAA,GAAuB,MAAM,uBAAA,EAAwB;AAC3D,IAAA,IAAI,cAAA,KAAmB,IAAA,CAAK,oBAAA,IAAwB,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5E,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,MAAA,CAAO,WAAW,MAAM,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG,MAAM,CAAA,wBAAA,EAA2B,CAAC,CAAC,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AACrI,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,MAAM,uBAAuB,IAAA,CAAK,oBAAA;AAClC,IAAA,MAAM,YAAY,MAAM,oBAAA,KAAyB,IAAA,CAAK,oBAAA,IAAwB,KAAK,KAAA,KAAU,SAAA;AAC7F,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAClC,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,KAAA,EAAO,kBAAkB,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,0BAAA,GAA6B,IAAA;AAClC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA,CAAO,YAAA,IAAgB,EAAC;AAChD,IAAA,IAAA,CAAK,kBAAA,GAAqB,MAAA,CAAO,cAAA,IAAkB,EAAC;AACpD,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,EAAC;AAG5C,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAW,MAAA,CAAO,OAAA,IAAW,EAAC,EAAI;AAC3C,MAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AACjD,QAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,OAAO,QAAQ,CAAA;AACtD,QAAA,KAAA,MAAW,SAAA,IAAa,OAAO,QAAA,EAAU;AACvC,UAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,IAAI,CAAA;AAChD,UAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAS,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAW,MAAA,CAAO,OAAA,IAAW,EAAC,EAAI;AAC3C,MAAA,IAAA,CAAK,eAAe,GAAA,CAAI,MAAA,CAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,IACtE;AAGA,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,MAAA,IAAA,CAAK,gBAAgB,GAAA,CAAI,KAAA,CAAM,OAAA,kBAAS,IAAI,KAAK,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI;AAEF,MAAA,KAAA,MAAW,CAAC,OAAO,MAAM,CAAA,IAAA,CAAM,OAAO,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC9D,QAAA,IAAI,CAAC,WAAU,EAAG;AAChB,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,IAAI,CAAA;AAGvD,QAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,UAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU,IAAK,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,QACvG,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,SAAS,CAAA;AAAA,QACrC;AACA,QAAA,IAAI,CAAC,WAAU,EAAG;AAKlB,QAAA,IAAI,SAAS,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG,SAAS,CAAA,EAAG;AAC7C,UAAA,MAAM,sBAAA,EAAuB;AAAA,QAC/B;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,WAAU,EAAG;AAChB,QAAA;AAAA,MACF;AAGA,MAAA,IAAA,CAAK,2BAA2B,oBAAoB,CAAA;AACpD,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,MAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,MAAA,OAAA,CAAQ,GAAA,CAAI,0DAA0D,KAAA,CAAM,IAAA,CAAK,KAAK,YAAA,CAAa,IAAA,EAAM,CAAC,CAAA;AAC1G,MAAA,OAAA,CAAQ,GAAA,CAAI,8BAA8B,KAAA,CAAM,IAAA,CAAK,KAAK,aAAA,CAAc,IAAA,EAAM,CAAC,CAAA;AAC/E,MAAA,OAAA,CAAQ,GAAA,CAAI,+BAA+B,KAAA,CAAM,IAAA,CAAK,KAAK,cAAA,CAAe,IAAA,EAAM,CAAC,CAAA;AAAA,IACnF,CAAA,SAAE;AACA,MAAA,IAAI,WAAU,EAAG;AACf,QAAA,IAAA,CAAK,0BAAA,GAA6B,KAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,YAAoB,MAAA,EAA+B;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,0BAAA,EAA6B,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA;AAG7D,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,MAAM,SAAA,GAAoB,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,MAAA,EAAO;AACxD,MAAA,IAAA,CAAK,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,SAAS,SAAS,CAAA;AAC1C,MAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,UACrB,GAAG,IAAA,CAAK,eAAA;AAAA,UACR,OAAA,EAAS,CAAC,GAAI,IAAA,CAAK,gBAAgB,OAAA,IAAW,IAAK,SAAS;AAAA,SAC9D;AAAA,MACF;AACA,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAA,CAAK,eAAe,GAAA,CAAI,UAAA,EAAY,IAAA,CAAK,kBAAA,CAAmB,SAAS,CAAC,CAAA;AACtE,MAAA,MAAMC,UAAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,IAAI,CAAA;AAC1D,MAAA,IAAA,CAAK,YAAA,CAAa,WAAWA,UAAS,CAAA;AACtC,MAAA,IAAA,CAAK,4BAAA,GAA+B,KAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,UAAU,CAAA,gBAAA,CAAkB,CAAA;AAC/D,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,GAAI;AAAA,MAC1B,GAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAAA,MAC3B,GAAG;AAAA,KACL;AAGA,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,MAAM,iBAAA,GAAoB,KAAK,eAAA,CAAgB,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAC3F,MAAA,IAAI,sBAAsB,EAAA,EAAI;AAC5B,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,iBAAiB,CAAA,GAAI;AAAA,UAChD,GAAG,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,iBAAiB,CAAA;AAAA,UACjD,GAAG;AAAA,SACL;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,UAAA,EAAY,IAAA,CAAK,mBAAmB,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAC,CAAC,CAAA;AAGtF,IAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAGtC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,SAAS,CAAA;AACnC,IAAA,IAAA,CAAK,4BAAA,GAA+B,KAAA;AAEpC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,UAAU,CAAA,sCAAA,CAAwC,CAAA;AAAA,EACvF;AAAA,EAEA,aAAa,UAAA,EAA0B;AACrC,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,QACrB,GAAG,IAAA,CAAK,eAAA;AAAA,QACR,OAAA,EAAS,KAAK,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,UAAU;AAAA,OACrF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,UAAU,CAAA;AACrC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACvC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,UAAU,CAAA;AACrC,IAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AACtC,IAAA,IAAA,CAAK,4BAAA,GAA+B,KAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,UAAA,EAA0B;AAEvD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAClD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,SAAS,CAAA;AACjC,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,UAAU,CAAA;AAAA,IACrC;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,OAAO,CAAA;AAC/B,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,UAAU,CAAA;AAAA,IACnC;AAGA,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,UAAU,CAAA;AACpC,IAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,UAAU,CAAA;AAG1C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AACjD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,QAAQ,CAAA;AAChC,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,UAAU,CAAA;AACnC,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,UAAU,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,QAAQ,CAAA;AAChC,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,UAAU,CAAA;AAAA,IACpC;AAGA,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,UAAU,CAAA;AAC/B,IAAA,IAAA,CAAK,YAAA,CAAa,OAAO,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,sBAAA,CAAuB,OAAO,UAAU,CAAA;AAC7C,IAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,UAAU,CAAA;AAChD,IAAA,IAAA,CAAK,wBAAA,CAAyB,OAAO,UAAU,CAAA;AAAA,EACjD;AAAA,EAEA,kBAAA,CAAmB,YAAoB,SAAA,EAA2B;AAChE,IAAA,OAAA,CAAQ,GAAA,CAAI,mCAAmC,UAAU,CAAA,IAAA,EAAO,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACtF,IAAA,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAA,CAAiB,YAAoB,WAAA,EAAkC;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,iCAAiC,UAAU,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAEpJ,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAE/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mDAAA,EAAsD,UAAU,CAAA,CAAA,CAAG,CAAA;AAChF,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,QAAA,CAAS,KAAK,WAAW,CAAA;AAChC,IAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAEtC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,UAAU,CAAA,cAAA,CAAgB,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,UAAA,EAA0C;AAC1D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC/C,IAAA,OAAO,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,KAAA,EAAM,GAAI,IAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAmB,MAAA,EAAgD;AACzE,IAAA,MAAM,QAAA,GAA2C;AAAA,MAC/C,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,MACzB,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,MAC1B,SAAA,EAAW,KAAK,MAAA,CAAO,SAAA;AAAA,MACvB,UAAA,EAAY,KAAK,MAAA,CAAO,UAAA;AAAA,MACxB,eAAA,EAAiB,KAAK,MAAA,CAAO,eAAA;AAAA,MAC7B,aAAA,EAAe,KAAK,MAAA,CAAO,aAAA;AAAA,MAC3B,OAAA,EAAS,CAAA;AAAA,MACT,aAAA,EAAe,QAAA;AAAA;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,UAAA;AAAA,QACP,SAAA,EAAW,KAAA;AAAA,QACX,SAAA,EAAW,CAAA;AAAA,QACX,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA;AACtB,KACF;AAGA,IAAA,MAAM,eAAe,IAAA,CAAK,kBAAA;AAC1B,IAAA,IAAI,YAAA,CAAa,WAAA,KAAgB,MAAA,EAAW,QAAA,CAAS,cAAc,YAAA,CAAa,WAAA;AAChF,IAAA,IAAI,YAAA,CAAa,YAAA,KAAiB,MAAA,EAAW,QAAA,CAAS,eAAe,YAAA,CAAa,YAAA;AAClF,IAAA,IAAI,YAAA,CAAa,SAAA,KAAc,MAAA,EAAW,QAAA,CAAS,YAAY,YAAA,CAAa,SAAA;AAC5E,IAAA,IAAI,YAAA,CAAa,UAAA,KAAe,MAAA,EAAW,QAAA,CAAS,aAAa,YAAA,CAAa,UAAA;AAC9E,IAAA,IAAI,YAAA,CAAa,eAAA,KAAoB,MAAA,EAAW,QAAA,CAAS,kBAAkB,YAAA,CAAa,eAAA;AACxF,IAAA,IAAI,YAAA,CAAa,aAAA,KAAkB,MAAA,EAAW,QAAA,CAAS,gBAAgB,YAAA,CAAa,aAAA;AACpF,IAAA,IAAI,YAAA,CAAa,OAAA,KAAY,MAAA,EAAW,QAAA,CAAS,UAAU,YAAA,CAAa,OAAA;AACxE,IAAA,IAAI,YAAA,CAAa,aAAA,KAAkB,MAAA,EAAW,QAAA,CAAS,gBAAgB,YAAA,CAAa,aAAA;AACpF,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,QAAA,CAAS,OAAO,EAAE,GAAG,SAAS,IAAA,EAAM,GAAG,aAAa,IAAA,EAAK;AAAA,IAC3D;AAGA,IAAA,IAAI,IAAA,CAAK,iBAAiB,KAAA,KAAU,MAAA,WAAoB,IAAA,CAAK,KAAA,GAAQ,KAAK,gBAAA,CAAiB,KAAA;AAC3F,IAAA,IAAI,IAAA,CAAK,iBAAiB,KAAA,KAAU,MAAA,WAAoB,IAAA,CAAK,KAAA,GAAQ,KAAK,gBAAA,CAAiB,KAAA;AAC3F,IAAA,IAAI,IAAA,CAAK,iBAAiB,SAAA,KAAc,MAAA,WAAoB,IAAA,CAAK,SAAA,GAAY,KAAK,gBAAA,CAAiB,SAAA;AACnG,IAAA,IAAI,IAAA,CAAK,iBAAiB,SAAA,KAAc,MAAA,WAAoB,IAAA,CAAK,SAAA,GAAY,KAAK,gBAAA,CAAiB,SAAA;AACnG,IAAA,IAAI,IAAA,CAAK,iBAAiB,MAAA,KAAW,MAAA,WAAoB,IAAA,CAAK,MAAA,GAAS,KAAK,gBAAA,CAAiB,MAAA;AAG7F,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,IAAS,EAAC;AACrC,IAAA,IAAI,WAAA,CAAY,WAAA,KAAgB,MAAA,EAAW,QAAA,CAAS,cAAc,WAAA,CAAY,WAAA;AAC9E,IAAA,IAAI,WAAA,CAAY,YAAA,KAAiB,MAAA,EAAW,QAAA,CAAS,eAAe,WAAA,CAAY,YAAA;AAChF,IAAA,IAAI,WAAA,CAAY,SAAA,KAAc,MAAA,EAAW,QAAA,CAAS,YAAY,WAAA,CAAY,SAAA;AAC1E,IAAA,IAAI,WAAA,CAAY,UAAA,KAAe,MAAA,EAAW,QAAA,CAAS,aAAa,WAAA,CAAY,UAAA;AAC5E,IAAA,IAAI,WAAA,CAAY,eAAA,KAAoB,MAAA,EAAW,QAAA,CAAS,kBAAkB,WAAA,CAAY,eAAA;AACtF,IAAA,IAAI,WAAA,CAAY,aAAA,KAAkB,MAAA,EAAW,QAAA,CAAS,gBAAgB,WAAA,CAAY,aAAA;AAClF,IAAA,IAAI,WAAA,CAAY,OAAA,KAAY,MAAA,EAAW,QAAA,CAAS,UAAU,WAAA,CAAY,OAAA;AACtE,IAAA,IAAI,WAAA,CAAY,aAAA,KAAkB,MAAA,EAAW,QAAA,CAAS,gBAAgB,WAAA,CAAY,aAAA;AAClF,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,QAAA,CAAS,OAAO,EAAE,GAAG,SAAS,IAAA,EAAM,GAAG,YAAY,IAAA,EAAK;AAAA,IAC1D;AAGA,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG;AACpD,MAAA,QAAA,CAAS,KAAK,KAAA,GAAQ,QAAA;AAAA,IACxB;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,oBAAA,CACN,WACA,QAAA,EACe;AACf,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,OAAO,IAAU,eAAQ,SAAA,CAAU,CAAA,EAAG,UAAU,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,CAAE,SAAA,EAAU;AAAA,IAC5E;AAEA,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,QAAA;AACH,QAAA,OAAO,IAAU,gBAAQ,CAAE,UAAA,CAAW,UAAU,IAAA,CAAK,WAAW,EAAE,SAAA,EAAU;AAAA,MAC9E,KAAK,QAAA;AACH,QAAA,OAAO,IAAU,gBAAQ,CAAE,UAAA,CAAW,KAAK,MAAA,CAAO,QAAA,EAAU,QAAQ,CAAA,CAAE,SAAA,EAAU;AAAA,MAClF,KAAK,IAAA;AACH,QAAA,OAAO,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,MAClC,KAAK,MAAA;AACH,QAAA,OAAO,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,MACnC,KAAK,MAAA;AACH,QAAA,OAAO,gBAAA;AAAA,UACL,IAAA,CAAK,KAAA;AAAA,UACL,IAAU,eAAQ,gCAAA,CAAiC,MAAA,EAAQ,KAAK,UAAU,CAAA,EAAG,GAAG,CAAC;AAAA,SACnF;AAAA,MACF,KAAK,OAAA;AACH,QAAA,OAAO,gBAAA;AAAA,UACL,IAAA,CAAK,KAAA;AAAA,UACL,IAAU,eAAQ,gCAAA,CAAiC,OAAA,EAAS,KAAK,UAAU,CAAA,EAAG,GAAG,CAAC;AAAA,SACpF;AAAA,MACF,KAAK,SAAA;AACH,QAAA,OAAO,gBAAA,CAAiB,KAAK,KAAA,EAAO,IAAU,eAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MAChE,KAAK,UAAA;AACH,QAAA,OAAO,gBAAA,CAAiB,KAAK,KAAA,EAAO,IAAU,eAAQ,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,MACjE;AACE,QAAA,OAAO,gBAAA,CAAiB,KAAK,KAAA,EAAO,IAAU,eAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA;AAClE,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,KAAA,EAAsB,GAAA,EAAoB,QAAA,GAAW,EAAA,EAAqB;AAClG,IAAA,MAAM,SAAS,2BAAA,EAA4B,CAAE,uBAAA,CAAwB,KAAA,EAAO,KAAK,QAAQ,CAAA;AACzF,IAAA,OAAO,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,KAAA,EAAsB,GAAA,EAAoB,QAAA,GAAW,EAAA,EAAqB;AAC/F,IAAA,MAAM,SAAS,2BAAA,EAA4B,CAAE,oBAAA,CAAqB,KAAA,EAAO,KAAK,QAAQ,CAAA;AACtF,IAAA,OAAO,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA,EACtC;AAAA,EAEQ,kBAAkB,MAAA,EAAuC;AAC/D,IAAA,MAAM,SAA0B,EAAC;AACjC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAU,MAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,EAAG,MAAA,CAAO,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBACN,KAAA,EACA,GAAA,EACA,UAAA,EACA,KAAA,EACA,SACA,UAAA,EACY;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAAiC,UAAU,CAAA,CAAA,EAAI;AAAA,MACzD,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAGD,IAAA,IAAI,MAAA;AACJ,IAAA,QAAQ,WAAW,KAAA;AAAO,MACxB,KAAK,QAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,GAAG,CAAA;AAC1C,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,GAAG,CAAA;AACvC,QAAA;AAAA,MACF;AACE,QAAA,MAAA,GAAS,CAAC,KAAA,CAAM,KAAA,EAAM,EAAG,GAAA,CAAI,OAAO,CAAA;AAAA;AAGxC,IAAA,OAAA,CAAQ,GAAA,CAAI,iCAAiC,UAAU,CAAA,KAAA,EAAQ,OAAO,MAAM,CAAA,gBAAA,EAAmB,UAAA,CAAW,KAAK,CAAA,CAAA,CAAG,CAAA;AAElH,IAAA,MAAM,QAAA,GAAW,IAAU,MAAA,CAAA,cAAA,EAAe,CAAE,cAAc,MAAM,CAAA;AAGhE,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,UAAA,CAAW,KAAA,KAAU,QAAA,IAAY,UAAA,CAAW,UAAU,QAAA,EAAU;AAClE,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,KAAU,QAAA,GAAW,IAAA,GAAQ,IAAA;AACzD,MAAA,MAAM,OAAA,GAAU,UAAA,CAAW,KAAA,KAAU,QAAA,GAAW,IAAA,GAAO,IAAA;AAEvD,MAAA,OAAA,CAAQ,IAAI,CAAA,8BAAA,EAAiC,UAAU,uCAAuC,QAAQ,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,CAAG,CAAA;AAE7H,MAAA,QAAA,GAAW,IAAU,MAAA,CAAA,kBAAA,CAAmB;AAAA,QACtC,KAAA;AAAA,QACA,WAAA,EAAa,IAAA;AAAA,QACb,OAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAAiC,UAAU,CAAA,wBAAA,CAA0B,CAAA;AACjF,MAAA,QAAA,GAAW,IAAU,MAAA,CAAA,iBAAA,CAAkB;AAAA,QACrC,KAAA;AAAA,QACA,WAAA,EAAa,IAAA;AAAA,QACb;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,IAAA,GAAO,IAAU,MAAA,CAAA,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AAG9C,IAAA,IAAI,UAAA,CAAW,KAAA,KAAU,QAAA,IAAY,UAAA,CAAW,UAAU,QAAA,EAAU;AAClE,MAAA,IAAA,CAAK,oBAAA,EAAqB;AAC1B,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,cAAc,CAAA;AAC/D,MAAA,OAAA,CAAQ,IAAI,CAAA,8BAAA,EAAiC,UAAU,CAAA,gCAAA,EAAmC,aAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AAAA,IAClH;AAGA,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC1C,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAChD,MAAA,MAAM,cAAA,GAAiB,IAAU,MAAA,CAAA,OAAA,EAAQ,CACtC,WAAW,SAAA,EAAW,eAAe,EACrC,SAAA,EAAU;AAEb,MAAA,MAAM,YAAY,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,cAAA,EAAgB,OAAO,OAAO,CAAA;AAChF,MAAA,SAAA,CAAU,IAAA,GAAO,SAAS,UAAU,CAAA,CAAA;AACpC,MAAA,SAAA,CAAU,SAAS,UAAA,GAAa,UAAA;AAChC,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,SAAS,CAAA;AAC9B,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAA,EAAY,SAAS,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,CACN,QAAA,EACA,SAAA,EACA,KAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,sBAAA;AACjC,IAAA,MAAM,cAAc,IAAA,GAAO,KAAA;AAC3B,IAAA,MAAM,cAAc,IAAA,GAAQ,KAAA;AAE5B,IAAA,MAAM,QAAA,GAAW,IAAU,MAAA,CAAA,YAAA,CAAa,WAAA,EAAa,aAAa,CAAC,CAAA;AACnE,IAAA,MAAM,QAAA,GAAW,IAAU,MAAA,CAAA,iBAAA,CAAkB;AAAA,MAC3C,KAAA;AAAA,MACA,WAAA,EAAa,IAAA;AAAA,MACb;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,IAAU,MAAA,CAAA,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AAC9C,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,QAAQ,CAAA;AAG3B,IAAA,MAAM,EAAA,GAAK,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AACpC,IAAA,MAAM,aAAa,IAAU,MAAA,CAAA,UAAA,EAAW,CAAE,kBAAA,CAAmB,IAAI,SAAS,CAAA;AAC1E,IAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAEzC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAiB,IAAA,EAA2B;AAC1C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYQ,uBAAuB,MAAA,EAAgB;AAC7C,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8CAAA,EAAiD,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC3E,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,OAAO,IAAI,CAAA;AACjD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8CAAA,EAAiD,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC3E,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,qBAAA,CAAsB,MAAM,CAAA;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8DAAA,EAAiE,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC3F,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,gBAAA,EAAkB,sBAAA,EAAuB,GAAI,MAAA;AAC7D,IAAA,MAAM,qBAAA,GAAwB,kCAAA,CAAmC,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AAGxF,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAM/C,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,KAAA,CAAM,aAAA,IAAiB,KAAA,CAAM,aAAA,KAAkB,QAAA,EAAU;AAE3D,MAAA,UAAA,GAAa,IAAA,CAAK,oBAAA,CAAqB,KAAA,CAAM,aAAA,EAAe,gBAAgB,CAAA;AAAA,IAC9E,CAAA,MAAO;AAEL,MAAA,UAAA,GAAa,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,cAAA,GAAiB,0BAA0B,MAAM,CAAA;AACvD,IAAA,MAAM,eAAe,cAAA,CAAe,MAAA;AAIpC,IAAA,MAAM,UAAA,GACJ,YAAA,CAAa,MAAA,IACb,YAAA,CAAa,MAAA,CAAO,MAAA,GAAS,CAAA,IAC7B,CAAC,YAAA,CAAa,KAAA,IACd,CAAC,YAAA,CAAa,OAAA;AAEhB,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MAAO,gBAAA;AAAA,MAAkB,UAAA;AAAA,MAAY,WAAA;AAAA,MAAa,qBAAA;AAAA,MAClD,kBAAkB,CAAC,sBAAA,IAA0B,kCAAA,CAAmC,cAAA,EAAgB,CAAC,UAAU;AAAA,KAC7G;AAAA,EACF;AAAA,EAEQ,YAAA,CAAa,MAAA,EAAgB,WAAA,GAAc,KAAA,EAAa;AAC9D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAA;AACpD,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,gBAAA,GAC3B,IAAA,CAAK,gBAAA,CAAiB,SAAA,CAAU,gBAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,GACtE,SAAA,CAAU,gBAAA,CAAiB,KAAA,EAAM;AACrC,IAAA,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,YAAY,CAAA;AAAA,EAChE;AAAA,EAEA,MAAc,oBAAA,CAAqB,MAAA,EAAgB,WAAA,EAAsB,SAAA,EAAyC;AAChH,IAAA,IAAI,CAAC,WAAU,EAAG;AAClB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAA;AACpD,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,gBAAA,GAC3B,MAAM,KAAK,wBAAA,CAAyB,SAAA,CAAU,gBAAA,EAAkB,SAAA,CAAU,UAAA,EAAY,SAAS,CAAA,GAC/F,SAAA,CAAU,iBAAiB,KAAA,EAAM;AACrC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,SAAA,EAAU,EAAG;AACnC,IAAA,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,YAAY,CAAA;AAAA,EAChE;AAAA,EAEQ,YAAA,CACN,MAAA,EACA,WAAA,EACA,SAAA,EACA,YAAA,EACM;AACN,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,UAAA,EAAY,uBAAsB,GAAI,SAAA;AAClE,IAAA,IAAI,aAAa,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,WAAW,CAAA;AAG3D,IAAA,MAAM,WAAA,GAAc,KAAK,SAAA,CAAU,CAAA;AACnC,IAAA,MAAM,QAAQ,WAAA,GAAc,sBAAA;AAC5B,IAAA,MAAM,YAAA,GAAe,MAAM,YAAA,GAAe,KAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,KAAK,MAAA,CAAO,UAAA;AACpD,IAAA,MAAM,mBAAmB,UAAA,GAAa,KAAA;AACtC,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AAGtB,IAAA,IAAI,WAAA,EAAa;AAEf,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,WAAA,CAAY,KAAA,GAAQ,MAAA,EAAO;AAC3D,MAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,KAAA,EAAM,CAAE,aAAa,WAAW,CAAA;AACvE,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,iBAAiB,CAAA;AAAA,IACtD;AAGA,IAAA,MAAM,SAAS,IAAU,MAAA,CAAA,IAAA;AAAA,MACvB,IAAU,MAAA,CAAA,cAAA,CAAe,YAAA,EAAc,EAAA,EAAI,EAAE,CAAA;AAAA,MAC7C,IAAU,MAAA,CAAA,iBAAA,CAAkB;AAAA,QAC1B,OAAO,KAAA,CAAM,WAAA;AAAA,QACb,WAAA,EAAa,IAAA;AAAA,QACb,SAAS,IAAA,GAAO;AAAA,OACjB;AAAA,KACH;AACA,IAAA,MAAA,CAAO,QAAA,CAAS,KAAK,YAAY,CAAA;AACjC,IAAA,MAAA,CAAO,IAAA,GAAO,CAAA,OAAA,EAAU,MAAA,CAAO,IAAI,CAAA,CAAA;AACnC,IAAA,MAAA,CAAO,QAAA,CAAS,aAAa,MAAA,CAAO,IAAA;AACpC,IAAA,MAAA,CAAO,SAAS,WAAA,GAAc,qBAAA;AAC9B,IAAA,MAAA,CAAO,QAAA,CAAS,UAAU,MAAA,CAAO,OAAA;AACjC,IAAA,MAAA,CAAO,QAAA,CAAS,aAAa,MAAA,CAAO,UAAA;AACpC,IAAA,MAAA,CAAO,OAAA,GAAU,CAAC,WAAA,IAAe,CAAC,MAAA,CAAO,UAAA;AACzC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,MAAM,CAAA;AAC3B,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAGzC,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,EAAM,CAAE,GAAA;AAAA,MACnC,UAAA,CAAW,KAAA,EAAM,CAAE,cAAA,CAAe,gBAAgB;AAAA,KACpD;AAGA,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM;AAAA,MAClC,KAAA,EAAO,aAAa,KAAA,EAAM;AAAA,MAC1B,GAAA,EAAK,QAAQ,KAAA,EAAM;AAAA,MACnB,SAAA,EAAW,WAAW,KAAA;AAAM,KAC7B,CAAA;AAGD,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,gBAAgB,CAAA;AAG1D,IAAA,MAAM,UAAA,GAAmC;AAAA,MACvC,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,OAAA;AAAA,MAC3B,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,UAAA;AAAA,MAC3B,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,KAAA;AAAA,MACnC,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,CAAA;AAAA,MACnC,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,gBAAA;AAAA,MAChB,YAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA,CAAM,SAAA;AAAA,MACN,GAAA,GAAM,OAAA;AAAA,MACN,MAAA,CAAO;AAAA,KACT;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,MAAA,CAAO,IAAA;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,CAAC,WAAA,IAAe,CAAC,MAAA,CAAO,UAAA;AACvC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,IAAI,CAAA;AACzB,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA;AAGrC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,KAAK,CAAA;AAClD,IAAA,KAAA,CAAM,QAAA,CAAS,KAAK,OAAO,CAAA;AAC3B,IAAA,KAAA,CAAM,IAAA,GAAO,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA;AACjC,IAAA,KAAA,CAAM,QAAA,CAAS,aAAa,MAAA,CAAO,IAAA;AACnC,IAAA,KAAA,CAAM,OAAA,GAAU,CAAC,WAAA,IAAe,CAAC,MAAA,CAAO,UAAA;AACxC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,KAAK,CAAA;AAC1B,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AACxC,IAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,EAAE,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAGxE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,OAAO,IAAI,CAAA;AAC9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,OAAA,GAAU,CAAC,WAAA,IAAe,CAAC,MAAA,CAAO,UAAA;AAAA,IAC1C;AACA,IAAA,IAAA,CAAK,sBAAA,CAAuB,IAAI,MAAA,CAAO,IAAA,EAAM,CAAC,WAAA,IAAe,CAAC,OAAO,UAAU,CAAA;AAC/E,IAAA,IAAA,CAAK,yBAAA,CAA0B,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA;AAInD,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,IAAA,IAAI,KAAK,yBAAA,EAA2B;AAElC,MAAA,IAAA,CAAK,uBAAA,CAAwB,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,2BAA2B,oBAAA,EAAsD;AACvF,IAAA,MAAM,cAAc,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA;AACxD,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,WAAA,CAAY,SAAS,CAAC,CAAA;AACtD,IAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,WAAA,CAAY,SAAS,CAAC,CAAA;AACpD,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,MAAA,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA;AACzC,MAAA,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,IACvC,CAAC,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB,qBAAqB,kCAAA,CAAmC;AAAA,MAC5E,MAAA;AAAA,MACA,IAAA;AAAA,MACA,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,WAAA,EAAa,KAAK,SAAA,CAAU;AAAA,KAC7B,CAAA;AACD,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ;AACxC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,oCAAA,EAAuC,aAAA,CAAc,MAAM,CAAA,YAAA,EAAe,YAAY,MAAM,CAAA,QAAA;AAAA,OAC9F;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,MAAA,MAAM,SAAS,IAAU,MAAA,CAAA,OAAA,GAAU,SAAA,CAAU,aAAA,EAAe,QAAQ,CAAC,CAAA;AACrE,MAAA,SAAA,CAAU,UAAU,UAAA,CAAW,MAAA,EAAQ,SAAA,CAAU,KAAK,EAAE,SAAA,EAAU;AAClE,MAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,SAAA,CAAU,KAAA,EAAO,MAAM,CAAA;AAAA,IACzD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaQ,mBAAA,CAAoB,QAAgB,gBAAA,EAAgD;AAC1F,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,WAAA,EAAY;AACrC,IAAA,MAAM,KAAA,GAAQ,gCAAA,CAAiC,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AACtE,IAAA,MAAM,MAAA,GAAS,gCAAA,CAAiC,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA;AAExE,IAAA,MAAM,OAAA,GAAU,CAAC,QAAA,KAA2C;AAC1D,MAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC9C,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,wBAAA,CAAyB,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AAG5E,IAAA,IAAI,mBAAA,KAAwB,MAAA,IAAa,mBAAA,KAAwB,CAAA,EAAG;AAClE,MAAA,OAAO,+BAAA,CAAgC,IAAA,CAAK,KAAA,EAAO,mBAAmB,CAAA;AAAA,IACxE;AAIA,IAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,MAAA,CAAO,IAAA,EAAM,KAAK,UAAU,CAAA;AAC7E,IAAA,IAAI,cAAA,KAAmB,SAAS,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI;AAC9E,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,cAAA,EAAgB,KAAK,GAAG,CAAA,CAAE,WAAW,CAAA;AAAA,IACxE;AAGA,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,MAAMC,OAAM,IAAU,MAAA,CAAA,OAAA,GAAU,UAAA,CAAW,gBAAA,EAAkB,KAAK,WAAW,CAAA;AAC7E,MAAAA,KAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAOA,IAAAA,CAAI,MAAA,EAAO,GAAI,IAAA,GAAQA,IAAAA,CAAI,SAAA,EAAU,GAAI,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACpF;AAGA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5E,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,IAAI,KAAK,QAAA,CAAS,WAAW,KAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC5D,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AACnF,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,IAAI,KAAK,QAAA,CAAS,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,MAAM,GAAG,CAAA,CAAE,WAAW,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AAC7B,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACzB,QAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,KAAA,EAAO,MAAM,GAAG,CAAA,CAAE,WAAW,CAAA;AAAA,MAChE,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,MAAA,EAAQ,MAAM,GAAG,CAAA,CAAE,WAAW,CAAA;AAAA,MACjE;AAAA,IACF;AACA,IAAA,IAAI,KAAK,QAAA,CAAS,SAAS,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvD,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,MAAM,IAAI,CAAA,CAAE,WAAW,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAEzB,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,MAAM,IAAI,CAAA,CAAE,WAAW,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,GAAG,IAAI,CAAA,CAAE,WAAW,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACzB,QAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MAChD;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,QAAA,CAAS,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACpD,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,KAAK,QAAA,CAAS,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACvD,MAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AACpE,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,YAAA,IAAgB,QAAQ,CAAA,EAAG,GAAG,CAAA,CAAE,SAAA,EAAW,CAAA;AAAA,IAC9E;AAGA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAO,OAAA,CAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,KAAA,EAAO,GAAG,GAAG,CAAA,CAAE,WAAW,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,MAAM,IAAU,MAAA,CAAA,OAAA,GAAU,UAAA,CAAW,gBAAA,EAAkB,KAAK,WAAW,CAAA;AAC7E,IAAA,IAAI,GAAA,CAAI,MAAA,EAAO,GAAI,IAAA,EAAO;AACxB,MAAA,OAAO,QAAQ,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,IAAI,SAAA,EAAU;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAA,CAAiB,QAAuB,UAAA,EAA0C;AACxF,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,OAAO,KAAA,EAAM;AAErC,IAAA,IAAI,KAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,OAAO,KAAA,EAAM;AAEvD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAChF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,sBAAA;AAGjC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,EAAM,CAAE,GAAA,CAAI,UAAA,CAAW,KAAA,EAAM,CAAE,cAAA,CAAe,UAAA,GAAa,CAAC,CAAC,CAAA;AACtF,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,EAAM,CAAE,MAAA,EAAO;AAEzC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,SAAA,EAAW,MAAM,CAAA;AACpC,IAAA,IAAA,CAAK,SAAA,CAAU,MAAM,UAAA,GAAa,CAAA;AAElC,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,IAAA,CAAK,aAAa,KAAK,CAAA;AAGpE,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAC,CAAA,CAAE,MAAM,KAAA,EAAM;AAEhC,MAAA,GAAA,CAAI,GAAA,CAAI,WAAW,KAAA,EAAM,CAAE,eAAe,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,KAAK,CAAC,CAAA;AAC3E,MAAA,OAAO,GAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,KAAA,EAAM;AAC1C,IAAA,MAAM,OAAA,GAAU,WAAW,KAAA,EAAM;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAA,EAAY,OAAO,CAAA;AACtC,IAAA,IAAA,CAAK,SAAA,CAAU,MAAM,UAAA,GAAa,CAAA;AAElC,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,IAAA,CAAK,aAAa,KAAK,CAAA;AACrE,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAEpB,MAAA,MAAM,MAAM,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,MAAM,KAAA,EAAM;AAChD,MAAA,GAAA,CAAI,GAAA,CAAI,WAAW,KAAA,EAAM,CAAE,eAAe,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,KAAK,CAAC,CAAA;AAC3E,MAAA,OAAO,GAAA;AAAA,IACT;AAGA,IAAA,OAAO,MAAA,CAAO,KAAA,EAAM,CAAE,GAAA,CAAI,UAAA,CAAW,OAAM,CAAE,cAAA,CAAe,IAAA,GAAO,KAAK,CAAC,CAAA;AAAA,EAC3E;AAAA,EAEA,MAAc,wBAAA,CACZ,MAAA,EACA,UAAA,EACA,SAAA,EAC+B;AAC/B,IAAA,IAAI,CAAC,SAAA,EAAU,EAAG,OAAO,IAAA;AACzB,IAAA,IAAI,CAAC,KAAK,KAAA,IAAS,IAAA,CAAK,YAAY,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA,CAAO,KAAA,EAAM;AACtE,IAAA,MAAM,SAAS,IAAA,CAAK,WAAA;AACpB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,KAAA,EAAM;AAC3C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAChF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,sBAAA;AACjC,IAAA,MAAM,SAAA,GAAY,IAAU,MAAA,CAAA,SAAA,EAAU;AACtC,IAAA,MAAM,OAAA,GAAU,EAAE,SAAA,EAAW,YAAA,EAAc,yBAAA,EAA0B;AACrE,IAAA,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,KAAA,EAAM,CAAE,eAAA,CAAgB,UAAA,EAAY,UAAA,GAAa,CAAC,CAAA,EAAG,UAAA,CAAW,KAAA,EAAM,CAAE,QAAQ,CAAA;AACrG,IAAA,SAAA,CAAU,MAAM,UAAA,GAAa,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,SAAA,EAAW,QAAQ,OAAO,CAAA;AACzE,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,SAAA,IAAa,OAAO,IAAA;AACtC,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,OAAO,QAAA,CAAS,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,EAAM,CAAE,eAAA,CAAgB,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,KAAK,CAAA;AAAA,IAC/F;AAIA,IAAA,MAAM,yBAAA,EAA0B;AAChC,IAAA,IAAI,CAAC,SAAA,EAAU,EAAG,OAAO,IAAA;AACzB,IAAA,SAAA,CAAU,GAAA,CAAI,WAAA,EAAa,UAAA,CAAW,KAAA,EAAO,CAAA;AAC7C,IAAA,SAAA,CAAU,MAAM,UAAA,GAAa,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,SAAA,EAAW,QAAQ,OAAO,CAAA;AACzE,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,SAAA,IAAa,OAAO,IAAA;AACtC,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,OAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,EAAM,CAAE,eAAA,CAAgB,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,IACjH;AACA,IAAA,OAAO,OAAO,KAAA,EAAM,CAAE,eAAA,CAAgB,UAAA,EAAY,OAAO,KAAK,CAAA;AAAA,EAChE;AAAA,EAEQ,gBAAA,GAAuC;AAC7C,IAAA,OAAO,KAAK,eAAA,EAAiB,aAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,sBACN,MAAA,EACqF;AACrF,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,cAAA,GAAiB,0BAA0B,MAAM,CAAA;AACvD,IAAA,MAAM,eAAe,cAAA,CAAe,MAAA;AAIpC,IAAA,IAAI,CAAC,KAAK,0BAAA,EAA4B;AACpC,MAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAU,MAAA,CAAA,OAAA,EAAQ;AACxC,IAAA,aAAA,CAAc,eAAA,CAAgB,MAAM,WAAW,CAAA;AAC/C,IAAA,MAAM,aAAA,GAAgB,CAAC,WAAA,KAA8C;AACnE,MAAA,OAAO,WAAA,CAAY,KAAA,EAAM,CAAE,YAAA,CAAa,aAAa,CAAA;AAAA,IACvD,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,gCAAA,CAAiC,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AACtE,IAAA,MAAM,MAAA,GAAS,gCAAA,CAAiC,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA;AAExE,IAAA,MAAM,GAAA,GAAM,IAAU,MAAA,CAAA,IAAA,EAAK;AAC3B,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,IAAI,sBAAA,GAAyB,KAAA;AAC7B,IAAA,MAAM,aAAuB,EAAC;AAG9B,IAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,MAAA,MAAM,eAAe,IAAU,MAAA,CAAA,OAAA;AAAA,QAC7B,aAAa,cAAA,CAAe,CAAA;AAAA,QAC5B,aAAa,cAAA,CAAe,CAAA;AAAA,QAC5B,aAAa,cAAA,CAAe;AAAA,OAC9B;AACA,MAAA,GAAA,CAAI,cAAc,YAAY,CAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,uBAAuB,YAAA,CAAa,IAAI,4BAA4B,YAAA,CAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACxK,MAAA,OAAO,EAAE,MAAA,EAAQ,YAAA,EAAc,GAAA,EAAI;AAAA,IACrC;AAGA,IAAA,IAAI,YAAA,CAAa,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACvC,MAAA,GAAA,CAAI,cAAc,KAAK,CAAA;AACvB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,UAAA,CAAW,KAAK,YAAY,CAAA;AAAA,IAC9B,CAAA,MAAO;AAIL,MAAA,MAAM,YAAA,GAAe,mCAAmC,cAAc,CAAA;AAEtE,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,SAAA,GAAY,YAAA,CAAa,MAAA,IAAU,YAAA,CAAa,OAAO,MAAA,GAAS,CAAA;AACtE,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,YAAA,CAAa,IAAI,CAAA,YAAA,EAAe,SAAA,GAAY,YAAA,CAAa,MAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,4BAA4B,CAAA,CAAE,CAAA;AAIpJ,QAAA,MAAM,gBAAA,GAAmB,kBAAkB,KAAA,EAAO,YAAA,EAAc,sBAAsB,IAAA,CAAK,eAAe,KAAK,MAAS,CAAA;AAExH,QAAA,OAAA,CAAQ,IAAI,CAAA,yBAAA,EAA4B,YAAA,CAAa,IAAI,CAAA,YAAA,EAAe,gBAAA,CAAiB,MAAM,CAAA,CAAE,CAAA;AACjG,QAAA,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA,IAAA,KAAQ,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,IAAI,EAAE,CAAC,CAAA;AAG/E,QAAA,MAAM,aAAa,IAAU,MAAA,CAAA,OAAA;AAAA,UAC3B,iBAAiB,MAAA,CAAO,CAAA;AAAA,UACxB,iBAAiB,MAAA,CAAO,CAAA;AAAA,UACxB,iBAAiB,MAAA,CAAO;AAAA,SAC1B;AAEA,QAAA,GAAA,CAAI,cAAc,UAAU,CAAA;AAC5B,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,UAAA,CAAW,IAAA,CAAK,gBAAgB,gBAAA,CAAiB,MAAM,QAAQ,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAEjJ,QAAA,MAAMC,OAAAA,GAAS,IAAU,MAAA,CAAA,OAAA,EAAQ;AACjC,QAAA,GAAA,CAAI,UAAUA,OAAM,CAAA;AACpB,QAAA,OAAA,CAAQ,IAAI,CAAA,oCAAA,EAAuCA,OAAAA,CAAO,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAKA,OAAAA,CAAO,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAKA,OAAAA,CAAO,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACzH,QAAA,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAQ,GAAA,EAAI;AAAA,MACvB;AAGA,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA,MAAM,OAAA,GAAU,IAAU,MAAA,CAAA,OAAA,EAAQ;AAClC,QAAA,MAAM,oBAAoB,gBAAA,CAAiB,YAAA,CAAa,OAAO,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AAE1G,QAAA,KAAA,MAAW,YAAY,iBAAA,EAAmB;AACxC,UAAA,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AACtB,YAAA,IAAI,eAAe,GAAA,CAAI,IAAA,EAAM,UAAU,IAAA,CAAK,gBAAA,EAAkB,CAAA,EAAG;AAC/D,cAAA,GAAA,CAAI,iBAAiB,OAAO,CAAA;AAC5B,cAAA,GAAA,CAAI,cAAc,OAAO,CAAA;AACzB,cAAA,KAAA,GAAQ,IAAA;AACR,cAAA,UAAA,CAAW,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAA,CAAI,IAAI,CAAA,UAAA,EAAa,QAAQ,CAAA,MAAA,EAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,KAAK,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,YACzI;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,KAAA,MAAW,QAAA,IAAY,aAAa,MAAA,EAAQ;AAC1C,UAAA,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AACtB,YAAA,IAAI,cAAA,CAAe,IAAI,IAAA,EAAM,QAAA,EAAU,KAAK,gBAAA,EAAkB,CAAA,IAAM,GAAA,CAAmB,MAAA,EAAQ;AAC7F,cAAA,MAAM,IAAA,GAAO,GAAA;AACb,cAAA,MAAM,uBAAA,GAA0B,4BAAA;AAAA,gBAC9B,YAAA;AAAA,gBACA;AAAA,eACF;AACA,cAAA,IAAI,uBAAA,EAAyB;AAC3B,gBAAA,GAAA,CAAI,cAAc,uBAAuB,CAAA;AACzC,gBAAA,KAAA,GAAQ,IAAA;AACR,gBAAA,sBAAA,GAAyB,IAAA;AACzB,gBAAA,UAAA,CAAW,IAAA,CAAK,iBAAiB,QAAQ,CAAA,KAAA,EAAQ,wBAAwB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,wBAAwB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,wBAAwB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1K,gBAAA;AAAA,cACF;AAIA,cAAA,IAAI,UAAA,GAAa,IAAU,MAAA,CAAA,OAAA,EAAQ;AAInC,cAAA,MAAM,OAAA,GAAU,IAAU,MAAA,CAAA,IAAA,EAAK,CAAE,cAAc,IAAI,CAAA;AACnD,cAAA,OAAA,CAAQ,UAAU,UAAU,CAAA;AAI5B,cAAA,IAAI,UAAA,CAAW,MAAA,EAAO,GAAI,GAAA,EAAK;AAE7B,gBAAA,IAAI,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,EAAG;AACpC,kBAAA,MAAM,MAAA,GAAS,CAAC,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA;AACtC,kBAAA,MAAM,WAAA,GAAc,SAAS,eAAA,GAAkB,eAAA;AAC/C,kBAAA,KAAA,CAAM,QAAA,CAAS,CAAC,OAAA,KAAY;AAC1B,oBAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,EAAa;AAChC,sBAAA,OAAA,CAAQ,iBAAiB,UAAU,CAAA;AAAA,oBACrC;AAAA,kBACF,CAAC,CAAA;AAAA,gBACH,CAAA,MAAA,IAAW,aAAa,QAAA,EAAU;AAKhC,kBAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,IAAA,CAAK,WAAA,EAAY;AACtD,kBAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,QAAA,CAAS,MAAM,CAAA;AACjD,kBAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA;AAEnD,kBAAA,MAAM,aAAa,SAAA,GAAY,KAAA,GAAQ,KAAA,GAAQ,UAAA,GAAa,QAAQ,MAAA,GAAS,CAAA;AAE7E,kBAAA,KAAA,CAAM,QAAA,CAAS,CAAC,OAAA,KAAY;AAE1B,oBAAA,IAAI,QAAQ,IAAA,KAAS,mBAAA,IAAuB,QAAQ,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AACjF,sBAAA,OAAA,CAAQ,iBAAiB,UAAU,CAAA;AAInC,sBAAA,UAAA,CAAW,GAAA,CAAI,cAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,YAAY,IAAA,EAAM,GAAG,CAAC,CAAC,CAAA;AAAA,oBACxE;AAAA,kBACF,CAAC,CAAA;AAAA,gBACH,CAAA,MAAA,IAAW,SAAS,QAAA,CAAS,QAAQ,KAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAEpE,kBAAA,KAAA,CAAM,QAAA,CAAS,CAAC,OAAA,KAAY;AAC1B,oBAAA,IAAI,OAAA,CAAQ,SAAS,iBAAA,EAAmB;AACtC,sBAAA,OAAA,CAAQ,iBAAiB,UAAU,CAAA;AAAA,oBACrC;AAAA,kBACF,CAAC,CAAA;AAAA,gBACH,CAAA,MAAO;AAEL,kBAAA,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAAA,gBAClC;AAAA,cACF;AAEA,cAAA,MAAM,WAAA,GAAc,yBAAyB,YAAY,CAAA;AACzD,cAAA,MAAM,kBAAkB,WAAA,KAAgB,MAAA,GACpC,KAAA,GACA,WAAA,KAAgB,UACd,MAAA,GACA,CAAA;AACN,cAAA,MAAM,oBAAoB,eAAA,GACtB,0BAAA,CAA2B,cAAc,eAAA,EAAiB,IAAA,CAAK,SAAS,CAAA,GACxE,IAAA;AACJ,cAAA,IAAI,iBAAA,EAAmB;AACrB,gBAAA,UAAA,CAAW,GAAA,CAAI,aAAA,CAAc,iBAAiB,CAAC,CAAA;AAC/C,gBAAA,UAAA,CAAW,IAAA,CAAK,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE,CAAA;AAAA,cAC/C;AAEA,cAAA,GAAA,CAAI,cAAc,UAAU,CAAA;AAC5B,cAAA,KAAA,GAAQ,IAAA;AACR,cAAA,UAAA,CAAW,IAAA,CAAK,QAAQ,QAAQ,CAAA,YAAA,EAAe,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,YACnI;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,IAAS,GAAA,CAAI,OAAA,EAAQ,EAAG;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,IAAU,MAAA,CAAA,OAAA,EAAQ;AACjC,IAAA,GAAA,CAAI,UAAU,MAAM,CAAA;AAIpB,IAAA,IAAI,CAAC,eAAe,wBAAA,EAA0B;AAC5C,MAAA,OAAO,EAAE,QAAQ,GAAA,EAAI;AAAA,IACvB;AAEA,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,CAAK,WAAA,EAAY;AAC3C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAChF,IAAA,MAAM,YAAY,UAAA,GAAa,IAAA;AAE/B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AAC7B,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,MACvF,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,MACxF;AAAA,IACF,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,SAAS,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,MAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,IAAA,EAAM,IAAI,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,IACtF,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,IAAA,EAAM,IAAI,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,IACtF,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,QAAQ,KAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3D,MAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,IACnF,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,GAAA,EAAK,IAAI,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,IACrF,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,GAAA,CAAI,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC,CAAC,CAAA;AAAA,IAClF,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,WAAW,KAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAE9D,MAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AACpE,MAAA,MAAA,CAAO,GAAA;AAAA,QACL,aAAA,CAAc,IAAU,MAAA,CAAA,OAAA,CAAQ,GAAA,IAAO,YAAA,IAAgB,MAAA,CAAA,EAAS,CAAA,EAAG,CAAC,CAAA,CAAE,cAAA,CAAe,SAAS,CAAC;AAAA,OACjG;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,sBAAA,EAAuB;AAAA,EAC/C;AAAA,EAEQ,gBAAgB,YAAA,EAAuC;AAC7D,IAAA,MAAM,IAAA,GAAO,OAAO,YAAA,KAAiB,QAAA,GAAW,eAAe,YAAA,CAAa,IAAA;AAC5E,IAAA,MAAM,gBAAgB,OAAO,YAAA,KAAiB,QAAA,GAC1C,MAAA,GACA,yBAAyB,YAAY,CAAA;AACzC,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACtF,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,IAAI,CAAA;AAC/C,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAChD,MAAA,OAAO,GAAG,aAAA,IAAiB,IAAI,CAAA,CAAA,EAAI,UAAA,GAAa,MAAM,GAAG,CAAA,CAAA;AAAA,IAC3D;AACA,IAAA,OAAO,aAAA,IAAiB,IAAA;AAAA,EAC1B;AAAA,EAEQ,iBAAA,CACN,MACA,KAAA,EACkD;AAClD,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAGlC,IAAA,MAAM,QAAA,GAAW,KAAA,EAAO,aAAA,IAAiB,IAAA,CAAK,MAAA,CAAO,aAAA;AACrD,IAAA,MAAM,UAAA,GAAa,KAAA,EAAO,UAAA,IAAc,IAAA,CAAK,MAAA,CAAO,UAAA;AACpD,IAAA,MAAM,eAAA,GAAkB,KAAA,EAAO,eAAA,IAAmB,IAAA,CAAK,MAAA,CAAO,eAAA;AAE9D,IAAA,MAAM,IAAA,GAAO,QAAQ,QAAQ,CAAA,oEAAA,CAAA;AAC7B,IAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AAEX,IAAA,MAAM,UAAU,QAAA,GAAW,GAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,CAAE,KAAA;AACxC,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,UAAU,CAAC,CAAA;AAChD,IAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,QAAA,GAAW,UAAU,GAAG,CAAA;AAGlD,IAAA,GAAA,CAAI,SAAA,GAAY,eAAA;AAChB,IAAA,MAAM,IAAI,QAAA,GAAW,GAAA;AACrB,IAAA,GAAA,CAAI,SAAA,EAAU;AACd,IAAA,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,EAAG,OAAO,KAAA,EAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AAClD,IAAA,GAAA,CAAI,IAAA,EAAK;AAGT,IAAA,MAAM,cAAc,KAAA,GAAQ,CAAA,KAAA,EAAS,KAAA,CAAM,SAAA,IAAa,KAAM,GAAI,CAAA,EAAA,EAAM,KAAA,CAAM,SAAA,IAAa,IAAK,GAAI,CAAA,EAAA,EAAK,KAAA,CAAM,SAAA,GAAY,GAAI,CAAA,MAAA,CAAA,GAAW,yBAAA;AAC1I,IAAA,GAAA,CAAI,WAAA,GAAc,WAAA;AAClB,IAAA,GAAA,CAAI,SAAA,GAAY,CAAA;AAChB,IAAA,GAAA,CAAI,SAAA,EAAU;AACd,IAAA,GAAA,CAAI,SAAA,CAAU,GAAG,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAC,CAAA;AAC1D,IAAA,GAAA,CAAI,MAAA,EAAO;AAGX,IAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AACX,IAAA,GAAA,CAAI,SAAA,GAAY,UAAA;AAChB,IAAA,GAAA,CAAI,SAAA,GAAY,QAAA;AAChB,IAAA,GAAA,CAAI,YAAA,GAAe,QAAA;AACnB,IAAA,GAAA,CAAI,SAAS,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA;AAEtD,IAAA,MAAM,OAAA,GAAU,IAAU,MAAA,CAAA,aAAA,CAAc,MAAM,CAAA;AAC9C,IAAA,OAAA,CAAQ,SAAA,GAAkB,MAAA,CAAA,YAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAA;AAErC,IAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,EAC3B;AAAA,EAEQ,iBAAA,CAAkB,cAA+B,KAAA,EAAsD;AAC7G,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,YAAY,CAAA;AAC9C,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,KAAW,IAAA,CAAK,iBAAA,CAAkB,MAAM,KAAK,CAAA;AAE9D,IAAA,MAAM,SAAS,IAAU,MAAA,CAAA,MAAA;AAAA,MACvB,IAAU,MAAA,CAAA,cAAA,CAAe;AAAA,QACvB,GAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAa,IAAA;AAAA,QACb,eAAA,EAAiB;AAAA;AAAA,OAClB;AAAA,KACH;AAIA,IAAA,MAAM,SAAA,GAAY,KAAA;AAClB,IAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,SAAA,GAAY,MAAA,EAAQ,WAAW,CAAC,CAAA;AAEjD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,kBAAkB,IAAA,EAAoB;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AACtC,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,KAAW,IAAA,CAAK,iBAAA,CAAkB,MAAM,KAAK,CAAA;AAC9D,IAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,IAAA,IAAI,QAAA,CAAS,GAAA,EAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAQ;AACvC,IAAA,QAAA,CAAS,GAAA,GAAM,OAAA;AACf,IAAA,QAAA,CAAS,WAAA,GAAc,IAAA;AAEvB,IAAA,MAAM,SAAA,GAAY,KAAA;AAClB,IAAA,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,SAAA,GAAY,MAAA,EAAQ,WAAW,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,IAAA,EAAM,EAAE,GAAG,SAAA,GAAY,MAAA,EAAQ,CAAA,EAAG,SAAA,EAAW,CAAA;AAAA,EACpE;AAAA,EAEQ,kBAAA,GAA2B;AAEjC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,GAAa,qBAAA,GAAwB,CAAA;AAE7D,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,KAAK,YAAA,EAAc;AAC9C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACrC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAC3C,MAAA,MAAM,UAAA,GAAa,SAAS,IAAA,CAAK,aAAA;AAGjC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC1C,MAAA,MAAM,WAAA,GAAc,KAAA,EAAO,WAAA,IAAe,IAAA,CAAK,MAAA,CAAO,WAAA;AACtD,MAAA,MAAM,SAAA,GAAY,KAAA,EAAO,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,SAAA;AAElD,MAAC,MAAA,CAAO,SAAqC,KAAA,CAAM,MAAA;AAAA,QACjD,aAAa,OAAA,GAAW;AAAA,OAC1B;AAEA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,YAAA,GAAe,OAAO,KAAA,CAAM,CAAA;AAClC,QAAA,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,YAAA,GAAe,GAAG,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAI,IAAA,EAAM;AACR,QAAC,IAAA,CAAK,SAAqC,KAAA,CAAM,MAAA;AAAA,UAC/C,aAAa,OAAA,GAAW;AAAA,SAC1B;AACA,QAAC,KAAK,QAAA,CAAqC,OAAA,GAAU,aAAa,CAAA,GAAK,IAAA,CAAK,aAAa,GAAA,GAAM,GAAA;AAAA,MACjG;AAEA,MAAA,IAAI,SAAS,SAAA,EAAW;AACtB,QAAA,MAAM,CAAA,GAAI,aAAa,GAAA,GAAM,CAAA;AAE7B,QAAA,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,SAAA,CAAU,CAAA,GAAI,CAAA,GAAI,YAAY,SAAA,CAAU,CAAA,GAAI,CAAA,GAAI,UAAA,EAAY,CAAC,CAAA;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAAsB,IAAA,EAAoC;AAChE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC1C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,OAAA;AAAA,MAC5B,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,UAAA;AAAA,MAC5B,SAAA,EAAW,KAAA,EAAO,IAAA,CAAK,SAAA,IAAa,KAAA;AAAA,MACpC,SAAA,EAAW,KAAA,EAAO,IAAA,CAAK,SAAA,IAAa,CAAA;AAAA,MACpC,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,MAAA,IAAU,KAAK,MAAA,CAAO;AAAA,KAC5C;AAAA,EACF;AAAA,EAEQ,sBAAsB,KAAA,EAAuD;AACnF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,qBAAA,EAAsB;AACnD,IAAA,OAAO,yBAAA,CAA0B;AAAA,MAC/B,WAAA,EAAa,MAAM,KAAA,CAAM,CAAA;AAAA,MACzB,WAAA,EAAa,MAAM,KAAA,CAAM,CAAA;AAAA,MACzB,kBAAkB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA;AAAA,MAC9D,kBAAkB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA;AAAA,MAC9D,aAAA,EAAe,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,WAAA;AAAA,MAC7C,cAAA,EAAgB,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,UAAA,CAAW;AAAA,KAChD,CAAA;AAAA,EACH;AAAA,EAEQ,oBAAA,CAAqB,IAAA,EAAc,KAAA,EAAsB,GAAA,EAA0B;AACzF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,IAAS,CAAC,SAAA,EAAW;AAEnC,IAAA,SAAA,CAAU,KAAA,CAAM,KAAK,KAAK,CAAA;AAC1B,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AAEtB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,CAAsB,IAAI,CAAA;AAClD,IAAA,IAAI,MAAA,GAAiC,IAAA;AAErC,IAAA,IAAI,UAAA,CAAW,UAAU,UAAA,EAAY;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AACvD,MAAA,IAAI,SAAA,EAAW,UAAU,CAAA,EAAG;AAC1B,QAAA,SAAA,CAAU,OAAO,CAAA,EAAG,KAAA,CAAM,GAAG,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AAC7C,QAAA,SAAA,CAAU,OAAO,CAAA,EAAG,GAAA,CAAI,GAAG,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AACvC,QAAA,SAAA,CAAU,WAAA,GAAc,IAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,CAAC,KAAA,CAAM,KAAA,EAAM,EAAG,GAAA,CAAI,OAAO,CAAA;AACpC,QAAA,IAAA,CAAK,QAAA,CAAS,cAAc,MAAM,CAAA;AAAA,MACpC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,UAAA,CAAW,KAAA,KAAU,QAAA,GAC1B,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,GAAG,CAAA,GACjC,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,GAAG,CAAA;AAClC,MAAA,IAAA,CAAK,QAAA,CAAS,cAAc,MAAM,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,IAAA,CAAK,oBAA0B,MAAA,CAAA,kBAAA,EAAoB;AACrD,MAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,IAC5B;AAEA,IAAA,KAAA,CAAM,QAAA,CAAS,KAAK,GAAG,CAAA;AAEvB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,GAAA;AACjD,MAAA,MAAM,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA;AAClD,MAAA,KAAA,CAAM,QAAA,CAAS,KAAK,GAAG,CAAA;AACvB,MAAA,IAAA,CAAK,qBAAA,CAAsB,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA;AAC/C,MAAA,IAAI,IAAA,CAAK,qBAAA,CAAsB,QAAA,EAAS,GAAI,wBAAA,EAA0B;AACpE,QAAA,IAAA,CAAK,sBAAA,CAAuB,kBAAA;AAAA,UAC1B,IAAA,CAAK,OAAA;AAAA,UACL,IAAA,CAAK,sBAAsB,SAAA;AAAU,SACvC;AACA,QAAA,KAAA,CAAM,yBAAA,CAA0B,KAAK,sBAAsB,CAAA;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,uBAAuB,IAAA,EAAuB;AACpD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA;AAExD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAS,CAAC,SAAA,IAAa,mBAAmB,MAAA,EAAW;AACnE,MAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,UAAA,GAAa,oBAAA,GAAuB,CAAA;AACjE,IAAA,MAAM,aAAa,cAAA,GAAiB,eAAA;AACpC,IAAA,MAAM,QAAQ,MAAA,CAAO,QAAA;AAErB,IAAA,IAAA,CAAK,eAAA,CACF,KAAK,SAAA,CAAU,SAAS,EACxB,cAAA,CAAe,UAAU,CAAA,CACzB,GAAA,CAAI,KAAK,CAAA;AAEZ,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,IAAA,CAAK,sBAAsB,KAAK,CAAA;AACzD,IAAA,IAAA,CAAK,iBACF,GAAA,CAAI,KAAA,CAAM,GAAG,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,EAAG,CAAC,CAAA,CAChC,YAAA,CAAa,KAAK,MAAA,CAAO,kBAAkB,EAC3C,YAAA,CAAa,IAAA,CAAK,OAAO,gBAAgB,CAAA;AAC5C,IAAA,IAAA,CAAK,cAAA,CACF,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAG,IAAA,CAAK,eAAA,CAAgB,GAAG,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAC,CAAA,CAC7E,aAAa,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA,CAC3C,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,gBAAgB,CAAA;AAE5C,IAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,cAAc,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,2BAAA,GAA8B,mCAAA,CAAoC;AAAA,MAC/F,SAAA,EAAW,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,KAAK,sBAAsB,CAAA;AAAA,MACpE,OAAA,EAAS,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAAA,MAC9D,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAE/C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,qBAAA,CACF,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CACxB,eAAe,UAAA,GAAa,SAAS,CAAA,CACrC,GAAA,CAAI,KAAK,CAAA;AAEZ,IAAA,IACE,KAAA,CAAM,iBAAA,CAAkB,SAAA,CAAU,KAAK,CAAA,GAAI,wBAAA,IAC3C,IAAA,CAAK,qBAAA,CAAsB,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA,GAAI,wBAAA,EAC9D;AACA,MAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,qBAAqB,CAAA;AAAA,IACnE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCQ,qBAAA,GAA8B;AACpC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,QAAA,EAAU;AACxC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACzC,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAE9C,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAA,EAAa;AAG7B,MAAA,MAAM,eAAA,GAAkB,KAAK,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA,CAAE,YAAA,CAAa,KAAK,WAAW,CAAA;AAC7F,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,eAAe,CAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,MAAA,EAAuC;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AAGxB,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,GAAG,GAAG,OAAO,IAAA;AAG1C,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,EAAE,CAAC,CAAA;AAC1G,MAAA,IAAI,SAAA,GAAmC,IAAA;AAEvC,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,QAAA,IAAI,CAAC,aAAa,cAAA,CAAe,GAAA,CAAI,MAAM,eAAA,EAAiB,IAAA,CAAK,gBAAA,EAAkB,CAAA,EAAG;AACpF,UAAA,SAAA,GAAY,GAAA;AAAA,QACd;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,SAAA;AAAA,IACT;AAGA,IAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AACvC,MAAA,IAAI,SAAA,GAAmC,IAAA;AAEvC,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,QAAA,IAAI,CAAC,SAAA,IAAa,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,eAAA,EAAiB,IAAA,CAAK,gBAAA,EAAkB,CAAA,IAAM,GAAA,CAAmB,MAAA,EAAQ;AAClH,UAAA,SAAA,GAAY,GAAA;AAAA,QACd;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,GAAe;AACb,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAGjB,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,OAAA,IAAW,CAAC,KAAK,yBAAA,EAA2B;AAChE,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAG3B,IAAA,IAAI,KAAK,yBAAA,EAA2B;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AACrD,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AACrD,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AAErD,IAAA,MAAM,cAAA,GAAiB,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAG5D,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,kBAAA,GAAqB,CAAA,IAC1E,IAAA,CAAK,GAAA,CAAI,cAAA,GAAiB,IAAA,CAAK,kBAAkB,CAAA,GAAI,KAAK,kBAAA,GAAqB,IAAA;AAEjF,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,mBAAmB,IAAA,CAAK,kBAAA;AAC9B,MAAA,IAAA,CAAK,kBAAA,GAAqB,cAAA;AAI1B,MAAA,MAAM,oBAAoB,IAAA,CAAK,aAAA;AAC/B,MAAA,MAAM,gBAAgB,cAAA,GAAiB,iBAAA;AAGvC,MAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAK,aAAa,CAAC,CAAA;AAG/D,MAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC/C,QAAA,MAAA,CAAO,KAAA,CAAM,UAAU,YAAY,CAAA;AAAA,MACrC;AAGA,MAAA,MAAM,gBAAA,GAAmB,iBAAiB,IAAA,CAAK,aAAA;AAC/C,MAAA,MAAM,WAAA,GAAc,qBAAqB,IAAA,CAAK,UAAA;AAC9C,MAAA,IAAI,IAAA,CAAK,qBAAqB,WAAA,EAAa;AACzC,QAAA,IAAA,CAAK,UAAA,GAAa,gBAAA;AAElB,QAAA,IAAA,CAAK,cAAA;AAAA,UACH,mBAAmB,oBAAA,GAAuB,CAAA;AAAA,UAC1C,WAAA,IAAe;AAAA,SACjB;AAAA,MACF;AAGA,MAAA,MAAM,+BACJ,gBAAA,IAAoB,CAAA,IACpB,oBAAoB,IAAA,CAAK,qBAAA,IACzB,iBAAiB,IAAA,CAAK,qBAAA;AACxB,MAAA,IAAI,4BAAA,EAA8B;AAChC,QAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GACJ,IAAA,CAAK,iBAAA,IAAqB,CAAC,IAAA,CAAK,gCAChC,IAAA,CAAK,6BAAA,CAA8B,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAI,IAAA,IAC7E,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,+BAAA,CAAgC,IAAI,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,GAAI,IAAA;AACnF,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,6BAAA,CAA8B,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAC5D,IAAA,IAAA,CAAK,+BAAA,CAAgC,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAChE,IAAA,IAAA,CAAK,4BAAA,GAA+B,IAAA;AACpC,IAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AAUzB,IAAA,MAAM,WAAA,GAAc,wBAAwB,IAAA,CAAK,KAAA,EAAO,KAAK,WAAA,EAAa,IAAA,CAAK,OAAO,QAAQ,CAAA;AAE9F,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,KAAK,YAAA,EAAc;AAC9C,MAAA,MAAM,WAAA,GAAc,OAAO,QAAA,CAAS,WAAA;AACpC,MAAA,MAAM,wBAAwB,kBAAA,CAAmB;AAAA,QAC/C,IAAA;AAAA,QACA,gBAAgB,IAAA,CAAK,cAAA;AAAA,QACrB,cAAc,IAAA,CAAK;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,mBAAA,GAAsB,2BAAA,EAA4B,CAAE,2BAAA,CAA4B;AAAA,QACpF,WAAA;AAAA,QACA,kBAAA,EAAoB;AAAA,OACrB,CAAA;AACD,MAAA,MAAM,kBAAA,GAAqB,qBAAA,IAAyB,mBAAA,GAChD,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAA,GAC/B,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,IAAI,CAAA,IAAK,IAAA;AAChD,MAAA,MAAM,OAAA,GAAU,yBAAyB,mBAAA,IAAuB,kBAAA;AAEhE,MAAA,MAAM,YAAA,GAAe,WAAA,KAAgB,MAAA,IAAa,WAAA,KAAgB,CAAA;AAClE,MAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,yBAAA,CAA0B,GAAA,CAAI,IAAI,CAAA;AACjE,MAAA,IAAA,CAAK,yBAAA,CAA0B,GAAA,CAAI,IAAA,EAAM,mBAAmB,CAAA;AAC5D,MAAA,MAAM,gBAAA,GACJ,YAAA,IACA,iBAAA,KAAsB,MAAA,IACtB,iBAAA,KAAsB,mBAAA;AAExB,MAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,QAAA,IAAA,CAAK,6BAAA,CAA8B,MAAM,IAAI,CAAA;AAC7C,QAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,KAAK,CAAA;AACxC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,OAAA,EAAS,6BAA6B,CAAA;AACzE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,gCAAA,CAAiC,GAAA,CAAI,IAAI,CAAA,EAAG;AACpD,QAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,2BAA2B,IAAA,CAAK,KAAA,EAAO,KAAK,OAAA,EAAS,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,EACpH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,cAAA,CAAe,WAAA,EAAqB,YAAA,GAAe,IAAA,EAAY;AACrE,IAAA,MAAM,WAAW,WAAA,GAAc,CAAA;AAC/B,IAAA,MAAM,iBAAA,GAAoB,WAAW,sBAAA,GAAyB,CAAA;AAC9D,IAAA,MAAM,gBAAA,GAAmB,WAAW,qBAAA,GAAwB,CAAA;AAI5D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC/C,QAAA,MAAA,CAAO,KAAA,CAAM,UAAU,iBAAiB,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC3C,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,QAAA,CAAS,OAAA,GAAU,WAAW,GAAA,GAAM,GAAA;AAAA,IACtC;AAGA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,KAAK,YAAA,EAAc;AAC7C,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAC3C,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,KAAA,CAAM,GAAA;AAAA,UACV,UAAU,CAAA,GAAI,gBAAA;AAAA,UACd,UAAU,CAAA,GAAI,gBAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,EAChC;AAAA,EAEQ,kBAAkB,MAAA,EAAkE;AAC1F,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,OAAO,CAAA;AAC7B,IAAA,MAAMC,UAAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,MAAA,CAAO,QAAQ,CAAA;AACrF,IAAA,MAAM,sBAAsBA,UAAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,aAAa,QAAQ,CAAA;AAC9E,IAAA,OAAO,mBAAA,IAAuB,SAAA,IAAa,mBAAA,GACvC,mBAAA,CAAoB,OAAA,GACpB,CAAA;AAAA,EACN;AAAA,EAEQ,gBAAA,CAAiB,QAA0D,OAAA,EAAuB;AACxG,IAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACtB,IAAA,MAAMA,UAAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,MAAA,CAAO,QAAQ,CAAA;AACrF,IAAA,KAAA,MAAW,YAAYA,UAAAA,EAAW;AAChC,MAAA,IAAI,aAAa,QAAA,EAAU;AAGzB,QAAA,IAAI,CAAC,SAAS,WAAA,EAAa;AACzB,UAAA,QAAA,CAAS,WAAA,GAAc,IAAA;AACvB,UAAA,QAAA,CAAS,WAAA,GAAc,IAAA;AAAA,QACzB;AACA,QAAA,QAAA,CAAS,OAAA,GAAU,OAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gCAAA,GAAqE;AAC3E,IAAA,MAAM,SAA2C,EAAC;AAElD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,KAAK,YAAA,EAAc;AAC9C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACrC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAEvC,MAAA,MAAM,QAAwC,EAAC;AAE/C,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,KAAA,CAAM,MAAA,GAAS;AAAA,UACb,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,IAAA,CAAK,iBAAA,CAAkB,MAAM;AAAA,SACxC;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,KAAA,CAAM,IAAA,GAAO;AAAA,UACX,MAAA,EAAQ,IAAA;AAAA,UACR,OAAA,EAAS,IAAA,CAAK,iBAAA,CAAkB,IAAI;AAAA,SACtC;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,UACZ,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAA;AAAA,UACrC,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA;AAAM,SAC3B;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,UACZ,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS,IAAA,CAAK,iBAAA,CAAkB,KAAK;AAAA,SACvC;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,MAAA,IAAU,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,IAAS,MAAM,KAAA,EAAO;AAC5D,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,6BAAA,CAA8B,SAAkB,CAAA,EAItD;AACA,IAAA,OAAO,2BAAA,EAA4B,CAAE,gCAAA,CAAiC,OAAA,EAAS,CAAC,CAAA;AAAA,EAClF;AAAA,EAEQ,8BAAA,CACN,MAAA,EACA,OAAA,EACA,CAAA,EACM;AACN,IAAA,MAAM,EAAE,mBAAmB,gBAAA,EAAkB,iBAAA,KAAsB,IAAA,CAAK,6BAAA,CAA8B,SAAS,CAAC,CAAA;AAEhH,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,MAAA;AAClC,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,QAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAA,GAAU,iBAAiB,CAAA;AAAA,MAC3D;AAEA,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,IAAA;AAClC,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,QAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAA,GAAU,iBAAiB,CAAA;AAAA,MAC3D;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,KAAU,KAAA,CAAM,KAAA;AACzC,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA,GAAI,kBAAkB,KAAA,CAAM,CAAA,GAAI,gBAAA,EAAkB,KAAA,CAAM,CAAC,CAAA;AAChF,QAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAA,GAAU,iBAAiB,CAAA;AAAA,MAC3D;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,KAAA;AAClC,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,QAAA,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,OAAA,GAAU,iBAAiB,CAAA;AAAA,MAC3D;AAIA,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,UAAA;AAC1C,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAA,EAAG;AAClE,QAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iCAAiC,MAAA,EAAgD;AACvF,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,MAAA;AAClC,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,IAAA;AAClC,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,KAAU,KAAA,CAAM,KAAA;AACzC,QAAA,MAAA,CAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACvB,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA,CAAM,KAAA;AAClC,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iCAAA,CAAkC,eAAe,KAAA,EAAa;AACpE,IAAA,KAAA,MAAW,IAAA,wBAAY,GAAA,CAAI;AAAA,MACzB,GAAG,IAAA,CAAK,gCAAA;AAAA,MACR,GAAG,IAAA,CAAK,+BAAA,CAAgC,IAAA;AAAK,KAC9C,CAAA,EAAG;AACF,MAAA,IAAA,CAAK,6BAAA,CAA8B,MAAM,YAAY,CAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,6BAAA,CAA8B,IAAA,EAAc,YAAA,GAAe,KAAA,EAAa;AAC9E,IAAA,IAAA,CAAK,4BAAA,CAA6B,MAAA,CAAO,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AACzD,IAAA,IAAA,CAAK,gCAAA,CAAiC,OAAO,IAAI,CAAA;AAEjD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,+BAAA,CAAgC,GAAA,CAAI,IAAI,CAAA;AAC3D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,gCAAA,CAAiC,CAAC,KAAK,CAAC,CAAA;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,+BAAA,CAAgC,OAAO,IAAI,CAAA;AAAA,EAClD;AAAA,EAEQ,0BAA0B,IAAA,EAAuB;AACvD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,IAAI,CAAA;AACnD,IAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,GAAG,OAAA,IAAW,KAAA;AAAA,EACjD;AAAA,EAEQ,uBAAA,CAAwB,IAAA,EAAc,OAAA,EAAkB,aAAA,GAAgB,IAAA,EAAY;AAC1F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAEvC,IAAA,IAAI,MAAA,SAAe,OAAA,GAAU,OAAA;AAC7B,IAAA,IAAI,IAAA,OAAW,OAAA,GAAU,OAAA;AACzB,IAAA,IAAI,KAAA,QAAa,OAAA,GAAU,OAAA;AAC3B,IAAA,IAAI,KAAA,QAAa,OAAA,GAAU,OAAA;AAC3B,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAAA,IAC/C;AAAA,EACF;AAAA,EAEQ,wBAAA,CAAyB,MAAc,IAAA,EAAqD;AAClG,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAE1C,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,QAAA;AACH,QAAA,OAAO,IAAA,IAAQ,OAAO,OAAA,IAAW,CAAA,CAAA;AAAA,MACnC,KAAK,MAAA;AACH,QAAA,OAAO,SAAS,IAAA,CAAK,aAAA,GAAgB,CAAA,GAAK,IAAA,CAAK,aAAa,GAAA,GAAM,GAAA;AAAA,MACpE,KAAK,OAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,OAAO,OAAA,IAAW,CAAA;AAAA;AAC7B,EACF;AAAA,EAEQ,uBAAA,CAAwB,MAAc,KAAA,EAAoC;AAChF,IAAA,IAAI,MAAM,KAAA,CAAM,CAAA,GAAI,QAAS,KAAA,CAAM,KAAA,CAAM,IAAI,IAAA,EAAO;AAClD,MAAA,OAAO,KAAA,CAAM,MAAM,KAAA,EAAM;AAAA,IAC3B;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAC3C,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAU,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IAClC;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,KAAS,IAAA,CAAK,aAAA,GAAgB,GAAA,GAAM,CAAA;AAC3D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,GAAa,qBAAA,GAAwB,CAAA;AAE5D,IAAA,OAAO,IAAU,MAAA,CAAA,OAAA;AAAA,MACf,SAAA,CAAU,IAAI,cAAA,GAAiB,SAAA;AAAA,MAC/B,SAAA,CAAU,IAAI,cAAA,GAAiB,SAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,sCAAsC,IAAA,EAAqD;AACjG,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AAEvC,IAAA,MAAM,QAAwC,EAAC;AAE/C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,CAAM,MAAA,GAAS;AAAA,QACb,MAAA,EAAQ,MAAA;AAAA,QACR,SAAS,IAAA,CAAK,GAAA;AAAA,UACZ,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA,UAC7B,IAAA,CAAK,wBAAA,CAAyB,IAAA,EAAM,QAAQ;AAAA;AAC9C,OACF;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,KAAA,CAAM,IAAA,GAAO;AAAA,QACX,MAAA,EAAQ,IAAA;AAAA,QACR,SAAS,IAAA,CAAK,GAAA;AAAA,UACZ,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,UAC3B,IAAA,CAAK,wBAAA,CAAyB,IAAA,EAAM,MAAM;AAAA;AAC5C,OACF;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,QACZ,MAAA,EAAQ,KAAA;AAAA,QACR,SAAS,IAAA,CAAK,GAAA;AAAA,UACZ,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,UAC5B,IAAA,CAAK,wBAAA,CAAyB,IAAA,EAAM,OAAO;AAAA,SAC7C;AAAA,QACA,KAAA,EAAO,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,KAAK;AAAA,OACjD;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,QACZ,MAAA,EAAQ,KAAA;AAAA,QACR,SAAS,IAAA,CAAK,GAAA;AAAA,UACZ,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,UAC5B,IAAA,CAAK,wBAAA,CAAyB,IAAA,EAAM,OAAO;AAAA;AAC7C,OACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,MAAA,IAAU,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,IAAS,MAAM,KAAA,EAAO;AAC5D,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CAAwB,IAAA,EAAc,OAAA,EAAkB,QAAA,EAAwB;AACtF,IAAA,IAAI,IAAA,CAAK,yBAAA,CAA0B,IAAI,CAAA,KAAM,OAAA,EAAS;AACpD,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAE7C,IAAA,IAAA,CAAK,6BAAA,CAA8B,MAAM,IAAI,CAAA;AAE7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qCAAA,CAAsC,IAAI,CAAA;AAC7D,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,+BAAA,CAAgC,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AACpD,IAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAE9C,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,IAAA,CAAK,gCAAA,CAAiC,IAAI,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,6BAA6B,QAAA,CAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,CAAC,GAAA,KAAiB;AAC7E,MAAA,MAAM,UAAU,GAAA,GAAM,SAAA;AACtB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,UAAU,CAAC,CAAA;AACxC,MAAA,IAAA,CAAK,8BAAA,CAA+B,CAAC,KAAK,CAAA,EAAG,SAAS,CAAC,CAAA;AAEvD,MAAA,IAAI,IAAI,CAAA,EAAG;AACT,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,gCAAA,CAAiC,OAAO,IAAI,CAAA;AACjD,MAAA,IAAA,CAAK,+BAAA,CAAgC,OAAO,IAAI,CAAA;AAChD,MAAA,IAAA,CAAK,gCAAA,CAAiC,CAAC,KAAK,CAAC,CAAA;AAC7C,MAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AACjD,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,uBAAA,CAAwB,eAAe,KAAA,EAAa;AAC1D,IAAA,IAAA,CAAK,4BAAA,CAA6B,OAAO,8BAA8B,CAAA;AACvE,IAAA,IAAA,CAAK,yBAAA,GAA4B,KAAA;AAEjC,IAAA,IAAI,YAAA,IAAgB,IAAA,CAAK,yBAAA,CAA0B,MAAA,GAAS,CAAA,EAAG;AAC7D,MAAA,IAAA,CAAK,YAAY,OAAA,GAAU,IAAA;AAC3B,MAAA,IAAA,CAAK,gCAAA,CAAiC,KAAK,yBAAyB,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,kBAAkB,OAAA,EAAwB;AAChD,IAAA,IAAI,YAAY,IAAA,CAAK,WAAA,CAAY,OAAA,IAAW,CAAC,KAAK,yBAAA,EAA2B;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,kCAAkC,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAEjC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,YAAY,OAAA,GAAU,IAAA;AAG3B,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,yBAAA,GAA4B,KAAK,gCAAA,EAAiC;AACvE,IAAA,IAAI,IAAA,CAAK,yBAAA,CAA0B,MAAA,KAAW,CAAA,EAAG;AAC/C,MAAA,IAAA,CAAK,YAAY,OAAA,GAAU,OAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,IAAA,CAAK,yBAAA,GAA4B,IAAA;AACjC,IAAA,IAAA,CAAK,4BAAA,CAA6B,QAAA,CAAS,8BAAA,EAAgC,CAAC,GAAA,KAAiB;AAC3F,MAAA,MAAM,UAAU,GAAA,GAAM,SAAA;AACtB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,+BAA+B,CAAC,CAAA;AAC7D,MAAA,IAAA,CAAK,8BAAA,CAA+B,IAAA,CAAK,yBAAA,EAA2B,OAAA,EAAS,CAAC,CAAA;AAE9E,MAAA,IAAI,IAAI,CAAA,EAAG;AACT,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,yBAAA,GAA4B,KAAA;AACjC,MAAA,IAAA,CAAK,gCAAA,CAAiC,KAAK,yBAAyB,CAAA;AACpE,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAA,CAAK,YAAY,OAAA,GAAU,KAAA;AAAA,MAC7B;AACA,MAAA,IAAA,CAAK,4BAA4B,EAAC;AAClC,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,0BAAA,GAA6B,KAAA;AAClC,IAAA,IAAA,CAAK,kCAAkC,KAAK,CAAA;AAC5C,IAAA,IAAA,CAAK,wBAAwB,KAAK,CAAA;AAClC,IAAA,IAAA,CAAK,4BAA4B,EAAC;AAClC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC3C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA;AACzC,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAE7B,MAAA,MAAM,IAAA,GAAO,KAAA;AACb,MAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ;AACzC,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,QAAA,IAAK,IAA6B,GAAA,EAAK;AACrC,UAAC,GAAA,CAA6B,IAAK,OAAA,EAAQ;AAAA,QAC7C;AACA,QAAA,GAAA,CAAI,OAAA,EAAQ;AAAA,MACd;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,uBAAuB,KAAA,EAAM;AAClC,IAAA,IAAA,CAAK,0BAA0B,KAAA,EAAM;AACrC,IAAA,IAAA,CAAK,yBAAyB,KAAA,EAAM;AACpC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AACzB,IAAA,IAAA,CAAK,4BAAA,GAA+B,KAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAAA,EAAiC;AAC7C,IAAA,IAAA,CAAK,YAAA,GAAe,UAAA;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAI,CAAA,IAAK,IAAA,CAAK,YAAA,EAAc;AACtC,MAAA,MAAM,UAAA,GAAa,UAAA,KAAe,IAAA,IAAQ,IAAA,KAAS,UAAA;AACnD,MAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AAGrD,MAAA,IAAI,QAAQ,UAAA,EAAY;AAExB,MAAA,IAAA,CAAK,6BAAA,CAA8B,MAAM,IAAI,CAAA;AAC7C,MAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,UAAU,CAAA;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,CACJ,UAAA,EACA,SAAA,GAA6B,SAAA,EAC7B,WAAW,6BAAA,EACI;AACf,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAGxC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAE1C,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,kBAAkB,UAAU,CAAA;AAGjC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,QAAA,CAAS,KAAA,EAAM;AAG9C,IAAA,MAAM,YAAA,GAAe,SAAA,KAAc,WAAA,GAAc,EAAA,GAAK,CAAA;AAEtD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,MAAM,SAAA,GAAY,SAAS,CAAC,CAAA;AAC5B,MAAA,MAAM,QAAQ,CAAA,GAAI,YAAA;AAClB,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,SAAS,CAAA;AAGpC,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAA;AAAA,MACrD,GAAG,KAAK,CAAA;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,UAAA,EACA,QAAA,GAAW,6BAAA,EACI;AACf,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAGxC,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAE3C,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAA,EAAY,KAAK,CAAA;AAC1C,IAAA,IAAA,CAAK,kBAAkB,UAAU,CAAA;AAGjC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,QAAA,CAAS,KAAA,EAAM;AAG9C,IAAA,KAAA,MAAW,aAAa,QAAA,EAAU;AAChC,MAAA,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAA;AACpD,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAS,CAAA;AAAA,MACnC,GAAG,QAAQ,CAAA;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CACE,UAAA,EACA,SAAA,GAA6B,SAAA,EAC7B,WAAW,6BAAA,EACL;AACN,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,QAAA,GAAW,IAAI,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAA;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAA4C;AAC1C,IAAA,MAAM,SAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,CAAA,IAAK,KAAK,eAAA,EAAiB;AAC3D,MAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,KAAK,EAAC;AAC3D,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAA,CAAmB,WAAW,6BAAA,EAAqC;AAEzE,IAAA,MAAM,YAAA,GAAe,CAAC,GAAG,IAAA,CAAK,gBAAgB,OAAA,EAAS,CAAA,CACpD,MAAA,CAAO,CAAC,CAAC,GAAG,UAAU,CAAA,KAAM,UAAU,CAAA,CACtC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,KAAM,IAAI,CAAA;AAE1B,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAG/B,IAAA,KAAA,MAAW,cAAc,YAAA,EAAc;AACrC,MAAA,IAAA,CAAK,cAAA,CAAe,YAAY,QAAQ,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,CAAgB,IAAA,EAAc,QAAA,EAAyB,QAAA,EAAwB;AACrF,IAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CAAiB,IAAA,EAAc,MAAA,EAAuB,QAAA,EAAwB;AACpF,IAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAA,CAAgB,YAAoB,UAAA,EAAuC;AACzE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA;AAC3E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,uDAAA,EAA0D,UAAU,CAAA,CAAE,CAAA;AACnF,MAAA;AAAA,IACF;AAGA,IAAA,KAAA,CAAM,OAAO,EAAE,GAAG,KAAA,CAAM,IAAA,EAAM,GAAG,UAAA,EAAW;AAG5C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,UAAU,CAAA;AACnD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qDAAA,EAAwD,UAAU,CAAA,YAAA,CAAA,EAAgB,KAAA,CAAM,KAAK,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,CAAC,CAAA;AACpI,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iDAAA,EAAoD,UAAU,CAAA,iBAAA,CAAmB,CAAA;AAG7F,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAEhD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,OAAO,CAAA;AAC/B,MAAA,OAAA,CAAQ,SAAS,OAAA,EAAQ;AACzB,MAAC,OAAA,CAAQ,SAA4B,OAAA,EAAQ;AAAA,IAC/C;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,QAAQ,CAAA;AAChC,MAAA,QAAA,CAAS,SAAS,OAAA,EAAQ;AAC1B,MAAC,QAAA,CAAS,SAA4B,OAAA,EAAQ;AAC9C,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,UAAU,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,aAAA,GAAsC;AAAA,MAC1C,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,OAAA;AAAA,MAC3B,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,UAAA;AAAA,MAC3B,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,KAAA;AAAA,MACnC,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,CAAA;AAAA,MACnC,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,KAAK,MAAA,CAAO;AAAA,KAC3C;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,gBAAA;AAAA,MAChB,SAAA,CAAU,KAAA;AAAA,MACV,SAAA,CAAU,GAAA;AAAA,MACV,aAAA;AAAA,MACA,KAAA,CAAM,SAAA;AAAA,MACN,MAAM,KAAA,CAAM,OAAA;AAAA,MACZ;AAAA,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,UAAU,CAAA,CAAA;AAC9B,IAAA,IAAA,CAAK,SAAS,UAAA,GAAa,UAAA;AAG3B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AAElC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,IAAI,CAAA;AACzB,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAGpC,IAAA,IAAI,aAAA,CAAc,KAAA,KAAU,QAAA,IAAY,aAAA,CAAc,UAAU,QAAA,EAAU;AACxE,MAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,IAC5B;AAEA,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kDAAA,EAAqD,UAAU,CAAA,CAAA,EAAI;AAAA,MAC7E,OAAO,aAAA,CAAc,KAAA;AAAA,MACrB,OAAO,aAAA,CAAc,KAAA;AAAA,MACrB,WAAW,aAAA,CAAc,SAAA;AAAA,MACzB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,YAAA,EAAe,KAAK,QAAA,CAA4B,IAAA;AAAA,MAChD,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,MAChD,aAAA,EAAe,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAA;AAAA,MACzC,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,YAAA,EAAa;AAAA,MAC/B,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAA,EAAU,UAAA,IAAc,GAAA,GAAM,GAAA,CAAI,QAAA,GAAW,KAAA;AAAA,MAC7C,OAAA,EAAS,SAAA,IAAa,GAAA,GAAM,GAAA,CAAI,OAAA,GAAU,KAAA;AAAA,MAC1C,kBAAkB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,cAAc,GAAG,KAAA,IAAS;AAAA,KACxE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,CAAkB,YAAoB,cAAA,EAAqD;AACzF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sCAAA,EAAyC,UAAU,CAAA,CAAA,EAAI,cAAc,CAAA;AACjF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAA6C,UAAU,CAAA,oBAAA,CAAA,EAAwB,KAAA,CAAM,KAAK,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,CAAC,CAAA;AAClI,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,cAAc,cAAA,CAAe,WAAA;AACjF,IAAA,IAAI,cAAA,CAAe,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,eAAe,cAAA,CAAe,YAAA;AACnF,IAAA,IAAI,cAAA,CAAe,SAAA,KAAc,MAAA,EAAW,KAAA,CAAM,YAAY,cAAA,CAAe,SAAA;AAC7E,IAAA,IAAI,cAAA,CAAe,OAAA,KAAY,MAAA,EAAW,KAAA,CAAM,UAAU,cAAA,CAAe,OAAA;AACzE,IAAA,IAAI,eAAe,IAAA,EAAM;AACvB,MAAA,KAAA,CAAM,OAAO,EAAE,GAAG,MAAM,IAAA,EAAM,GAAG,eAAe,IAAA,EAAK;AAAA,IACvD;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6BAAA,EAAgC,UAAU,CAAA,CAAA,CAAA,EAAK,CAAC,CAAC,MAAA,EAAQ,cAAA,EAAgB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,CAAC,CAAA;AACzH,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,MAAM,MAAA,CAAO,QAAA;AACnB,MAAA,OAAA,CAAQ,IAAI,CAAA,oCAAA,CAAA,EAAwC,KAAA,CAAM,WAAA,EAAa,QAAA,CAAS,EAAE,CAAC,CAAA;AACnF,MAAA,GAAA,CAAI,MAAM,GAAA,CAAI,IAAU,MAAA,CAAA,KAAA,CAAM,KAAA,CAAM,WAAW,CAAC,CAAA;AAChD,MAAA,GAAA,CAAI,OAAA,GAAU,OAAO,KAAA,CAAM,OAAA;AAC3B,MAAA,GAAA,CAAI,WAAA,GAAc,IAAA;AAAA,IACpB;AAGA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA,2BAAA,EAA8B,UAAU,CAAA,CAAA,CAAA,EAAK,CAAC,CAAC,IAAI,CAAA;AAC/D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,MAAA,GAAA,CAAI,MAAM,GAAA,CAAI,IAAU,MAAA,CAAA,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AAC9C,MAAA,GAAA,CAAI,OAAA,GAAU,MAAM,KAAA,CAAM,OAAA;AAC1B,MAAA,GAAA,CAAI,WAAA,GAAc,IAAA;AAAA,IACpB;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC7C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAM,KAAA,CAAM,QAAA;AAClB,MAAA,GAAA,CAAI,MAAM,GAAA,CAAI,IAAU,MAAA,CAAA,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AAC9C,MAAA,GAAA,CAAI,UAAU,KAAA,CAAM,OAAA;AACpB,MAAA,GAAA,CAAI,WAAA,GAAc,IAAA;AAAA,IACpB;AAGA,IAAA,IAAI,eAAe,IAAA,EAAM;AACvB,MAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,EAAY,cAAA,CAAe,IAAI,CAAA;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAA,CAAoB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AAAA,EACpC;AACF;ACzqFA,IAAM,6BAAA,GAAgC,mBAAA;AAQtC,SAASC,0BAAyB,MAAA,EAAoC;AACpE,EAAA,MAAM,QAAS,MAAA,CAAoC,KAAA;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEA,SAAS,0BAA0B,IAAA,EAAsB;AACvD,EAAA,OAAO,KAAK,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAClF;AAcO,IAAM,qBAAN,MAAyB;AAAA,EA8C9B,YAAY,MAAA,EAKT;AAlDH,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAoB,EAAC,CAAA;AAC7B,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAA0C,IAAA,CAAA;AAGlD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,sBAA2C,GAAA,EAAI,CAAA;AAGvD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,sBAA+C,GAAA,EAAI,CAAA;AAG3D;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,sBAAqC,GAAA,EAAI,CAAA;AACjD,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,CAAA,CAAA;AAClB,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,sBAA0C,GAAA,EAAI,CAAA;AACtD,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAAA,EAA4B,KAAA,CAAA;AACpC,IAAA,aAAA,CAAA,IAAA,EAAiB,8BAAA,EAA+B,IAAI,2BAAA,EAA4B,CAAA;AAChF,IAAA,aAAA,CAAA,IAAA,EAAQ,0BAAA,EAA2B,CAAA,CAAA;AAGnC;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,EAAc,IAAUC,MAAA,CAAA,OAAA,EAAQ,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,IAAUA,MAAA,CAAA,OAAA,EAAQ,CAAA;AACtC,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,CAAA,CAAA;AAChC;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,EAAqB,EAAA,CAAA;AAG7B;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAyD,IAAA,CAAA;AACjE,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAwC,IAAA,CAAA;AAGhD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAA8C,GAAA,EAAI,CAAA;AAC1D;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAA4C,GAAA,EAAI,CAAA;AACxD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,sBAAkC,GAAA,EAAI,CAAA;AAG9C;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,sBAAyD,GAAA,EAAI,CAAA;AACrE,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAmC,8BAAA,EAA+B,CAAA;AAQxE,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AAGvB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAUA,MAAA,CAAA,KAAA,EAAM;AACtC,IAAA,IAAA,CAAK,eAAe,IAAA,GAAO,8BAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,cAAc,CAAA;AAGlC,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACnD,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAcrC,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAC/B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,gBAAA,CAAiB,MAAM,CAAA;AAC5C,MAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EAAU;AAC/B,QAAA,MAAA,CAAO,MAAM,QAAA,GAAW,UAAA;AAAA,MAC1B;AACA,MAAA,MAAA,CAAO,WAAA,CAAY,KAAK,eAAe,CAAA;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,CAAe,MAAM;AAC7C,QAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,MAC1B,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA,EAGA,cAAc,OAAA,EAA4B;AACxC,IAAA,IAAI,OAAA,KAAY,KAAK,UAAA,EAAY;AACjC,IAAA,IAAA,CAAK,gBAAgB,UAAA,EAAW;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA;AAClB,IAAA,MAAM,SAAS,OAAA,CAAQ,aAAA;AACvB,IAAA,IAAI,MAAA,IAAU,KAAK,eAAA,CAAgB,aAAA,KAAkB,QAAQ,MAAA,CAAO,WAAA,CAAY,KAAK,eAAe,CAAA;AACpG,IAAA,IAAA,CAAK,cAAA,EAAgB,QAAQ,OAAO,CAAA;AACpC,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA,EAEA,SAAS,KAAA,EAA6B;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,cAAc,KAAK,CAAA;AAChD,IAAA,GAAA,CAAI,SAAA,CAAU,KAAK,WAAW,CAAA;AAC9B,IAAA,GAAA,CAAI,OAAA,CAAQ,KAAK,SAAS,CAAA;AAG1B,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,SAAA,CAAU,CAAA,GAAI,GAAA;AAChD,IAAA,IAAA,CAAK,kBAAA,GAAqB,EAAA;AAC1B,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA,EAEA,YAAY,MAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAClC,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAW,MAAA,CAAO,OAAA,IAAW,EAAC,EAAI;AAC3C,MAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AACjD,QAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,OAAO,QAAQ,CAAA;AACtD,QAAA,KAAA,MAAW,SAAA,IAAa,OAAO,QAAA,EAAU;AACvC,UAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,IAAI,CAAA;AAChD,UAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAS,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,CAAC,OAAO,OAAA,IAAW,IAAI,OAAA,CAAQ,CAAC,QAAQ,KAAA,KAAU;AAChD,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,iBAAiB,IAAA,EAA2B;AAC1C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,YAAoB,MAAA,EAA+B;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4BAAA,EAA+B,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA;AAG/D,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,MAAM,SAAA,GAAoB,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,MAAA,EAAO;AACxD,MAAA,IAAA,CAAK,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,SAAS,SAAS,CAAA;AAC1C,MAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,UACrB,GAAG,IAAA,CAAK,eAAA;AAAA,UACR,OAAA,EAAS,CAAC,GAAI,IAAA,CAAK,gBAAgB,OAAA,IAAW,IAAK,SAAS;AAAA,SAC9D;AAAA,MACF;AACA,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,UAAU,CAAA;AACtC,MAAA,IAAA,CAAK,YAAA,CAAa,SAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,UAAU,CAAA,gBAAA,CAAkB,CAAA;AACjE,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,GAAI;AAAA,MAC1B,GAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAAA,MAC3B,GAAG;AAAA,KACL;AAGA,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,MAAM,iBAAA,GAAoB,KAAK,eAAA,CAAgB,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAC3F,MAAA,IAAI,sBAAsB,EAAA,EAAI;AAC5B,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,iBAAiB,CAAA,GAAI;AAAA,UAChD,GAAG,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,iBAAiB,CAAA;AAAA,UACjD,GAAG;AAAA,SACL;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,UAAU,CAAA;AAGtC,IAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAGtC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACvC,IAAA,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,WAAA,GAAc,CAAC,CAAA;AAEzC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,UAAU,CAAA,sCAAA,CAAwC,CAAA;AAAA,EACzF;AAAA,EAEA,aAAa,UAAA,EAA0B;AACrC,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,QACrB,GAAG,IAAA,CAAK,eAAA;AAAA,QACR,OAAA,EAAS,KAAK,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,UAAU;AAAA,OACrF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACvC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,UAAU,CAAA;AACrC,IAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,UAAA,EAA0B;AACvD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAC7C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,MAAA,EAAO;AACjB,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAC5D,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,gBAAA,CAAiB,iBAAiB,MAAM;AAAA,MAAC,CAAA;AACzC,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,gBAAgB,CAAA;AAC3C,MAAA,IAAI,gBAAA,CAAiB,QAAA,EAAU,gBAAA,CAAiB,QAAA,CAAS,OAAA,EAAQ;AACjE,MAAA,IAAI,gBAAA,CAAiB,QAAA,EAAW,gBAAA,CAAiB,SAA4B,OAAA,EAAQ;AACrF,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,UAAU,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,UAAU,CAAA;AACrC,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,UAAU,CAAA;AAAA,EACxC;AAAA,EAEA,kBAAA,CAAmB,YAAoB,SAAA,EAA2B;AAChE,IAAA,OAAA,CAAQ,GAAA,CAAI,qCAAqC,UAAU,CAAA,IAAA,EAAO,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxF,IAAA,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,YAAoB,WAAA,EAAkC;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,mCAAmC,UAAU,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAEtJ,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AACzD,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,QAAA,CAAS,KAAK,WAAW,CAAA;AACvC,MAAA,aAAA,CAAc,QAAA,CAAS,QAAA,GAAW,WAAA,CAAY,KAAA,EAAM;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,UAAA,EAA0C;AAC1D,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AACzD,IAAA,OAAO,aAAA,GAAgB,aAAA,CAAc,QAAA,CAAS,KAAA,EAAM,GAAI,IAAA;AAAA,EAC1D;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,WAAA,IAAe,KAAK,UAAA,CAAW,WAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,YAAA,IAAgB,KAAK,UAAA,CAAW,YAAA;AAE/D,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,YAAA,GAAe,EAAE,KAAA,EAAO,MAAA,EAAO;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,qBAAA,EAAsB;AACnD,IAAA,IAAA,CAAK,eAAe,EAAE,KAAA,EAAO,KAAK,KAAA,EAAO,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,EAC/D;AAAA,EAEQ,eAAA,GAAqD;AAC3D,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,IAC1B;AAEA,IAAA,OAAO,KAAK,YAAA,IAAgB,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,EACpD;AAAA,EAEQ,gBAAA,CAAiB,QAAwB,OAAA,EAAwB;AACvE,IAAA,MAAM,WAAA,GAAc,UAAU,MAAA,GAAS,MAAA;AACvC,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,OAAA,KAAY,WAAA,EAAa;AACxC,MAAA,MAAA,CAAO,MAAM,OAAA,GAAU,WAAA;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,cAAA,CAAe,QAAwB,KAAA,EAAqB;AAClE,IAAA,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,gBAAA,EAAkB,CAAA,EAAG,KAAK,CAAA,CAAE,CAAA;AAAA,EACvD;AAAA,EAEQ,uBAAA,CAAwB,MAAA,EAAwB,CAAA,EAAW,CAAA,EAAiB;AAClF,IAAA,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,YAAA,EAAc,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AAC/C,IAAA,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,YAAA,EAAc,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACjD;AAAA,EAEQ,YAAA,CAAa,QAAgB,MAAA,EAAsB;AACzD,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAEjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAC5C,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,qBAAA,GAAwB,kCAAA,CAAmC,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AAExF,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,SAAS,MAAA,GAAS,CAAA;AAKhE,IAAA,MAAM,gBAAgB,IAAUA,MAAA,CAAA,IAAA;AAAA,MAC9B,IAAUA,MAAA,CAAA,cAAA,CAAe,IAAA,EAAO,CAAA,EAAG,CAAC,CAAA;AAAA,MACpC,IAAUA,MAAA,CAAA,iBAAA,CAAkB;AAAA,QAC1B,KAAA,EAAO,QAAA;AAAA,QACP,WAAA,EAAa,IAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA;AAAA,QACT,SAAA,EAAW,IAAA;AAAA,QACX,UAAA,EAAY;AAAA,OACb;AAAA,KACH;AACA,IAAA,aAAA,CAAc,QAAA,CAAS,KAAK,QAAQ,CAAA;AACpC,IAAA,aAAA,CAAc,IAAA,GAAO,aAAa,IAAI,CAAA,CAAA;AACtC,IAAA,aAAA,CAAc,aAAA,GAAgB,IAAA;AAG9B,IAAA,aAAA,CAAc,SAAS,UAAA,GAAa,IAAA;AACpC,IAAA,aAAA,CAAc,SAAS,WAAA,GAAc,qBAAA;AACrC,IAAA,aAAA,CAAc,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,KAAA,EAAM;AAGjD,IAAA,aAAA,CAAc,iBAAiB,MAAM;AACnC,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,aAAa,CAAA;AAAA,IAC1C,CAAA;AAEA,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,aAAa,CAAA;AACrC,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,aAAa,CAAA;AAG5C,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC3C,IAAA,MAAA,CAAO,SAAA,GAAY,wBAAA;AACnB,IAAA,MAAA,CAAO,QAAQ,UAAA,GAAa,IAAA;AAC5B,IAAA,MAAA,CAAO,KAAA,GAAQD,yBAAAA,CAAyB,MAAM,CAAA,IAAK,0BAA0B,IAAI,CAAA;AACjF,IAAA,MAAA,CAAO,YAAA,CAAa,YAAA,EAAc,MAAA,CAAO,KAAK,CAAA;AAE9C,IAAA,MAAA,CAAO,SAAA,GAAY,CAAA,MAAA,EAAS,WAAA,GAAc,GAAA,GAAM,MAAM,CAAA,OAAA,CAAA;AACtD,IAAA,MAAA,CAAO,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAyBvB,IAAA,MAAA,CAAO,gBAAA,CAAiB,cAAc,MAAM;AAC1C,MAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,GAAG,CAAA;AAC/B,MAAA,MAAA,CAAO,MAAM,UAAA,GAAa,uBAAA;AAAA,IAC5B,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,gBAAA,CAAiB,cAAc,MAAM;AAC1C,MAAA,IAAI,IAAA,CAAK,kBAAkB,IAAA,EAAM;AAC/B,QAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAC7B,QAAA,MAAA,CAAO,MAAM,UAAA,GAAa,yBAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,CAAC,CAAA,KAAM;AACtC,MAAA,CAAA,CAAE,eAAA,EAAgB;AAGlB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,IAAI,CAAA;AAC/C,MAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,QAAA,MAAM,YAAY,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AACxD,QAAA,MAAM,SAAA,GAAY,WAAW,eAAA,IAAmB,WAAA;AAChD,QAAA,IAAA,CAAK,YAAA,CAAa,MAAM,SAAS,CAAA;AAAA,MACnC;AAEA,MAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,eAAA,CAAgB,YAAY,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAA,CAAgB,MAAc,IAAA,EAAwB;AAC5D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AACnC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,KAAK,QAAA,CAAS,WAAA;AAClC,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,WAAA,KAAgB,CAAA,EAAG;AAClD,MAAA,MAAM,YAAA,GAAe,wBAAwB,IAAA,CAAK,KAAA,EAAO,KAAK,WAAA,EAAa,IAAA,CAAK,OAAO,QAAQ,CAAA;AAC/F,MAAA,IAAI,CAAC,4BAA4B,EAAE,WAAA,EAAa,aAAa,kBAAA,EAAoB,YAAA,EAAc,CAAA,EAAG;AAChG,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AACnC,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAE1C,IAAA,MAAM,YAAA,GAAe,KAAK,eAAA,EAAgB;AAG1C,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,QAAA;AAC1B,IAAA,MAAM,YAAY,GAAA,CAAI,KAAA,EAAM,CAAE,OAAA,CAAQ,KAAK,MAAM,CAAA;AAGjD,IAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AACnC,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,CAAA,GAAA,CAAK,SAAA,CAAU,CAAA,GAAI,GAAA,GAAM,OAAO,YAAA,CAAa,KAAA;AACnD,IAAA,MAAM,KAAK,CAAC,SAAA,CAAU,CAAA,GAAI,GAAA,GAAM,OAAO,YAAA,CAAa,MAAA;AAEpD,IAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,uBAAA,CAAwB,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,EAC3C;AAAA,EAEQ,gBAAA,GAAuC;AAC7C,IAAA,OAAO,KAAK,eAAA,EAAiB,aAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,gBAAgB,MAAA,EAAsC;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AAExB,IAAA,MAAM,cAAA,GAAiB,0BAA0B,MAAM,CAAA;AACvD,IAAA,MAAM,eAAe,cAAA,CAAe,MAAA;AACpC,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAGjC,IAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,MAAA,OAAO,IAAUC,MAAA,CAAA,OAAA;AAAA,QACf,aAAa,cAAA,CAAe,CAAA;AAAA,QAC5B,aAAa,cAAA,CAAe,CAAA;AAAA,QAC5B,aAAa,cAAA,CAAe;AAAA,OAC9B;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,mCAAmC,cAAc,CAAA;AAEtE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,WAAW,YAAA,CAAa,IAAA;AAC9B,MAAA,IAAI,gBAAA,GAAmB,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA;AAGxD,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,MAAM,gBAAA,GAAmB,kBAAkB,IAAA,CAAK,KAAA,EAAc,cAAqB,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAA,IAAK,MAAS,CAAA;AAG3I,QAAA,MAAM,YAA8B,EAAC;AACrC,QAAA,MAAM,gBAAgB,gBAAA,CAAiB,YAAA,CAAa,KAAA,EAAO,qBAAA,CAAsB,KAAK,eAAe,CAAC,CAAA,CACnG,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACvD,QAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,UAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,aAAA,CAAc,KAAK,CAAC,IAAA,KAAS,cAAA,CAAe,GAAA,CAAI,MAAM,IAAA,EAAM,IAAA,CAAK,gBAAA,EAAkB,CAAC,CAAA,EAAG;AACnH,YAAA,SAAA,CAAU,KAAK,GAAG,CAAA;AAAA,UACpB;AAAA,QACF,CAAC,CAAA;AAED,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,CAAC,CAAA,IAAK,IAAA;AACjC,QAAA,MAAMH,UAAS,IAAUG,MAAA,CAAA,OAAA;AAAA,UACvB,iBAAiB,MAAA,CAAO,CAAA;AAAA,UACxB,iBAAiB,MAAA,CAAO,CAAA;AAAA,UACxB,iBAAiB,MAAA,CAAO;AAAA,SAC1B;AACA,QAAA,MAAM,sBAAsB,QAAA,GACxB,QAAA,CAAS,aAAaH,OAAAA,CAAO,KAAA,EAAO,CAAA,GACpC,IAAA;AAEJ,QAAA,gBAAA,GAAmB;AAAA,UACjB,MAAA,EAAAA,OAAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,gBAAgB,CAAA;AAAA,MACrD;AAGA,MAAA,IAAI,gBAAA,CAAiB,QAAA,IAAY,gBAAA,CAAiB,mBAAA,EAAqB;AACrE,QAAA,OAAO,iBAAiB,QAAA,CAAS,YAAA;AAAA,UAC/B,gBAAA,CAAiB,oBAAoB,KAAA;AAAM,SAC7C;AAAA,MACF;AAGA,MAAA,OAAO,gBAAA,CAAiB,OAAO,KAAA,EAAM;AAAA,IACvC;AAGA,IAAA,MAAM,GAAA,GAAM,IAAUG,MAAA,CAAA,IAAA,EAAK;AAC3B,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI,sBAAA,GAAyB,KAAA;AAE7B,IAAA,IAAI,YAAA,CAAa,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACvC,MAAA,GAAA,CAAI,cAAA,CAAe,KAAK,KAAK,CAAA;AAC7B,MAAA,UAAA,GAAa,IAAA;AAAA,IACf,CAAA,MAAO;AACP,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA,MAAM,oBAAoB,gBAAA,CAAiB,YAAA,CAAa,OAAO,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AAC1G,QAAA,KAAA,MAAW,YAAY,iBAAA,EAAmB;AACxC,UAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,YAAA,IAAI,eAAe,GAAA,CAAI,IAAA,EAAM,UAAU,IAAA,CAAK,gBAAA,EAAkB,CAAA,EAAG;AAC/D,cAAA,MAAM,QAAA,GAAW,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACnC,cAAA,GAAA,CAAI,iBAAiB,QAAQ,CAAA;AAC7B,cAAA,GAAA,CAAI,cAAc,QAAQ,CAAA;AAC1B,cAAA,UAAA,GAAa,IAAA;AAAA,YACf;AAAA,UACA,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAEF,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,KAAA,MAAW,QAAA,IAAY,aAAa,MAAA,EAAQ;AAC1C,UAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,YAAA,IAAI,cAAA,CAAe,IAAI,IAAA,EAAM,QAAA,EAAU,KAAK,gBAAA,EAAkB,CAAA,IAAM,GAAA,CAAmB,MAAA,EAAQ;AAC7F,cAAA,MAAM,uBAAA,GAA0B,4BAAA;AAAA,gBAC9B,YAAA;AAAA,gBACA;AAAA,eACF;AACA,cAAA,IAAI,uBAAA,EAAyB;AAC3B,gBAAA,GAAA,CAAI,cAAc,uBAAuB,CAAA;AACzC,gBAAA,sBAAA,GAAyB,IAAA;AAAA,cAC3B,CAAA,MAAO;AACL,gBAAA,GAAA,CAAI,eAAe,GAAG,CAAA;AAAA,cACxB;AACA,cAAA,UAAA,GAAa,IAAA;AAAA,YACf;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,GAAA,CAAI,OAAA,IAAW,OAAO,IAAA;AAEzC,IAAA,MAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACjC,IAAA,GAAA,CAAI,UAAU,MAAM,CAAA;AACpB,IAAA,MAAM,WAAA,GAAc,yBAAyB,YAAY,CAAA;AACzD,IAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,MAAA,GACpC,gCAAA,CAAiC,QAAQ,IAAA,CAAK,UAAU,CAAA,GACxD,WAAA,KAAgB,OAAA,GACd,gCAAA,CAAiC,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA,GACzD,CAAA;AACN,IAAA,MAAM,iBAAA,GAAoB,mBAAmB,CAAC,sBAAA,GAC1C,2BAA2B,YAAA,EAAc,eAAA,EAAiB,IAAA,CAAK,SAAS,CAAA,GACxE,IAAA;AACJ,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,aAAA,GAAgB,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACxC,MAAA,aAAA,CAAc,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AACpD,MAAA,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAkB,YAAA,CAAa,aAAa,CAAC,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,KAAK,OAAA,EAAS;AAC1C,MAAA,MAAM,UAAA,GAAa,SAAS,IAAA,CAAK,aAAA;AACjC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAA,CAAK,cAAA,CAAe,SAAS,GAAG,CAAA;AAChC,QAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,uBAAA;AAC3B,QAAA,OAAA,CAAQ,MAAM,SAAA,GAAY,kCAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,cAAA,CAAe,SAAS,CAAC,CAAA;AAC9B,QAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,yBAAA;AAC3B,QAAA,OAAA,CAAQ,MAAM,SAAA,GAAY,8BAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,GAAe;AACb,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAGjB,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS;AAChC,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,OAAA,EAAA;AACL,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,IAC1B;AAGA,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AACrD,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AACrD,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,GAAI,KAAK,WAAA,CAAY,CAAA;AACrD,IAAA,MAAM,cAAA,GAAiB,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAG5D,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,kBAAA,GAAqB,CAAA,IAChD,IAAA,CAAK,GAAA,CAAI,cAAA,GAAiB,IAAA,CAAK,kBAAkB,CAAA,GAAI,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAEjF,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,mBAAmB,IAAA,CAAK,kBAAA;AAC9B,MAAA,IAAA,CAAK,kBAAA,GAAqB,cAAA;AAG1B,MAAA,MAAM,+BACJ,gBAAA,IAAoB,CAAA,IACpB,oBAAoB,IAAA,CAAK,qBAAA,IACzB,iBAAiB,IAAA,CAAK,qBAAA;AACxB,MAAA,IAAI,4BAAA,EAA8B;AAChC,QAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,MAC1B;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAK,eAAA,EAAiB;AAC/C,MAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AACrD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAC1C,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAA,CAAK,QAAA,CAAS,KAAK,MAAM,CAAA;AACzB,UAAA,IAAA,CAAK,QAAA,CAAS,QAAA,GAAW,MAAA,CAAO,KAAA,EAAM;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,KAAK,OAAA,EAAS;AACzC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,IAAK,CAAA;AAGnD,MAAA,IAAI,SAAA,GAAY,IAAA,CAAK,OAAA,GAAU,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,EAChC;AAAA,EAEQ,uBAAA,GAAgC;AACtC,IAAA,IAAA,CAAK,4BAAA,CAA6B,OAAO,6BAA6B,CAAA;AACtE,IAAA,IAAA,CAAK,yBAAA,GAA4B,KAAA;AACjC,IAAA,IAAA,CAAK,wBAAA,IAA4B,CAAA;AAAA,EACnC;AAAA,EAEQ,kBAAkB,OAAA,EAAwB;AAChD,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAE7B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,OAAA,KAAY,MAAA;AAC1D,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU,OAAA;AACrC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU,GAAA;AACrC,QAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,SAAA,GAAY,aAAA;AAAA,MACzC;AACA,MAAA,IAAA,CAAK,eAAe,OAAA,GAAU,IAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,eAAe,OAAA,GAAU,KAAA;AAAA,IAChC;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,wBAAA;AACnB,IAAA,MAAM,kBAAA,GAAqB,OAAO,UAAA,CAAW,MAAA,CAAO,iBAAiB,IAAA,CAAK,eAAe,CAAA,CAAE,OAAA,IAAW,GAAG,CAAA;AACzG,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,QAAA,CAAS,kBAAkB,IAAI,kBAAA,GAAqB,CAAA;AAChF,IAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAAA,MACxB,IAAA,CAAK,gBAAgB,KAAA,CAAM,SAAA,CAAU,MAAM,kBAAkB,CAAA,GAAI,CAAC,CAAA,IAAK;AAAA,KACzE,IAAK,CAAA;AACL,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,QAAA,GAAW,GAAA;AACjB,IAAA,MAAM,aAAA,GAAgB,UAAU,CAAA,GAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,UAAU,CAAA,GAAI,IAAA;AAElC,IAAA,IAAA,CAAK,yBAAA,GAA4B,IAAA;AACjC,IAAA,IAAA,CAAK,4BAAA,CAA6B,QAAA,CAAS,6BAAA,EAA+B,CAAC,GAAA,KAAiB;AAC1F,MAAA,IAAI,KAAA,KAAU,IAAA,CAAK,wBAAA,EAA0B,OAAO,KAAA;AAEpD,MAAA,MAAM,UAAU,GAAA,GAAM,SAAA;AACtB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,UAAU,CAAC,CAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,OAAA,GACV,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GACrB,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA;AAErB,MAAA,MAAM,OAAA,GAAU,YAAA,GAAA,CAAgB,aAAA,GAAgB,YAAA,IAAgB,KAAA;AAChE,MAAA,MAAM,KAAA,GAAQ,UAAA,GAAA,CAAc,WAAA,GAAc,UAAA,IAAc,KAAA;AACxD,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,CAAA;AAC/C,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,SAAA,GAAY,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA;AAErD,MAAA,IAAI,IAAI,CAAA,EAAG;AACT,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,yBAAA,GAA4B,KAAA;AACjC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU,MAAA;AAAA,MACvC;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,OAAA,GAAU,OAAA,GAAU,GAAA,GAAM,GAAA;AACrD,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,SAAA,GAAY,UAAA;AACvC,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAC7B,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU,OAAA;AACrC,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU,GAAA;AACrC,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,SAAA,GAAY,UAAA;AAEvC,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,EAAG;AAC3C,MAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,IACjB;AACA,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAGnB,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,QAAA,CAAS,CAAC,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,KAAA;AACb,MAAA,IAAA,CAAK,iBAAiB,MAAM;AAAA,MAAC,CAAA;AAC7B,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,MAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ;AACzC,MAAA,IAAI,IAAA,CAAK,QAAA,EAAW,IAAA,CAAK,SAA4B,OAAA,EAAQ;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAA,CAAa,UAAA,EAAoB,SAAA,GAA6B,SAAA,EAAW,WAAW,GAAA,EAAW;AAC7F,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAGxC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAE1C,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAGzC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,SAAA,GAAY,qBAAA;AAAA,IAC3B;AAGA,IAAA,MAAM,YAAA,GAAe,SAAA,KAAc,WAAA,GAAc,EAAA,GAAK,CAAA;AAEtD,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AACrC,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAA,CAAK,cAAA,CAAe,OAAO,SAAS,CAAA;AACpC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACzC,QAAA,IAAI,MAAA,EAAQ;AAEV,UAAA,MAAA,CAAO,KAAA,CAAM,UAAA,GAAa,CAAA,UAAA,EAAa,QAAQ,wBAAwB,QAAQ,CAAA,WAAA,CAAA;AAC/E,UAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAC7B,UAAA,MAAA,CAAO,MAAM,OAAA,GAAU,GAAA;AACvB,UAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAI,CAAA;AAClC,UAAA,qBAAA,CAAsB,MAAM;AAC1B,YAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAC7B,YAAA,MAAA,CAAO,MAAM,OAAA,GAAU,GAAA;AAAA,UACzB,CAAC,CAAA;AAAA,QACH;AAAA,MACF,CAAA,EAAG,QAAQ,YAAY,CAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,UAAA,EAAoB,QAAA,GAAW,GAAA,EAAW;AACvD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AACrD,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAGxC,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAE3C,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAA,EAAY,KAAK,CAAA;AAG1C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,SAAA,GAAY,gBAAA;AAAA,IAC3B;AAGA,IAAA,KAAA,MAAW,aAAa,QAAA,EAAU;AAChC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACzC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,UAAA,GAAa,CAAA,UAAA,EAAa,QAAQ,uBAAuB,QAAQ,CAAA,UAAA,CAAA;AAC9E,QAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AAC7B,QAAA,MAAA,CAAO,MAAM,OAAA,GAAU,GAAA;AAAA,MACzB;AAGA,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAS,CAAA;AACjC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAAA,QACrC;AAAA,MACF,GAAG,QAAQ,CAAA;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,UAAA,EAAoB,SAAA,GAA6B,SAAA,EAAW,WAAW,GAAA,EAAW;AAC7F,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,QAAA,GAAW,IAAI,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAA;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAA4C;AAC1C,IAAA,MAAM,SAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,CAAA,IAAK,KAAK,eAAA,EAAiB;AAC3D,MAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,KAAK,EAAC;AAC3D,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAA,CAAmB,WAAW,GAAA,EAAW;AAE/C,IAAA,MAAM,YAAA,GAAe,CAAC,GAAG,IAAA,CAAK,gBAAgB,OAAA,EAAS,CAAA,CACpD,MAAA,CAAO,CAAC,CAAC,GAAG,UAAU,CAAA,KAAM,UAAU,CAAA,CACtC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,KAAM,IAAI,CAAA;AAE1B,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAG/B,IAAA,KAAA,MAAW,cAAc,YAAA,EAAc;AACrC,MAAA,IAAA,CAAK,cAAA,CAAe,YAAY,QAAQ,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,gBAAgB,UAAA,EAAW;AAChC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,IAAA,IAAA,CAAK,gBAAgB,MAAA,EAAO;AAC5B,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA;AAAA,EACvC;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,2BAA2B,IAAA,CAAK,KAAA,EAAO,KAAK,OAAA,EAAS,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,EACpH;AACF;;;AC72BA,SAAS,wBAAA,GAAkC;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,yCAAyC,CAAA;AACjE,EAAA,KAAA,CAAM,IAAA,GAAO,YAAA;AACb,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgBC,QAAAA,EAA2D;AAClF,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAUC,MAAA,CAAA,OAAA,CAAQD,QAAAA,CAAQ,QAAA,CAAS,CAAA,EAAGA,QAAAA,CAAQ,QAAA,CAAS,CAAA,EAAGA,QAAAA,CAAQ,QAAA,CAAS,CAAC,CAAA;AAAA,IACtF,MAAA,EAAQ,IAAUC,MAAA,CAAA,OAAA,CAAQD,QAAAA,CAAQ,MAAA,CAAO,CAAA,EAAGA,QAAAA,CAAQ,MAAA,CAAO,CAAA,EAAGA,QAAAA,CAAQ,MAAA,CAAO,CAAC,CAAA;AAAA,IAC9E,UAAUA,QAAAA,CAAQ;AAAA,GACpB;AACF;AAUA,IAAM,QAAA,GAAW;AAAA,EACf,aAAA,EAAe,IAAA;AAAA,EACf,aAAA,EAAe,IAAA;AAAA,EACf,WAAA,EAAa,GAAA;AAAA,EACb,WAAA,EAAa,EAAA;AAAA,EACb,kBAAA,EAAoB,IAAA;AAAA;AAAA,EACpB,iBAAA,EAAmB,GAAA;AAAA,EACnB,oBAAA,EAAsB,GAAA;AAAA,EACtB,qBAAA,EAAuB,CAAA;AAAA,EACvB,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAM,0BAAA,GAA6B,IAAA;AACnC,IAAM,4BAAA,GAA+B,IAAA;AACrC,IAAM,kCAAA,GAAqC,KAAA;AAC3C,IAAM,gCAAA,GAAmC,KAAA;AAiCzC,SAAS,cAAc,KAAA,EAAkD;AACvE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,+BAA+B,KAAA,EAAwB;AAC9D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,IAAA,KAAS,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,IAAA,EAAK;AAC7E;AAEA,SAAS,0BAA0B,KAAA,EAAmD;AACpF,EAAA,OAAO,UAAU,MAAA,IAAU,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,WAAW,KAAA,GAAQ,MAAA;AAC/E;AAEA,SAAS,mCAAmC,KAAA,EAAkD;AAC5F,EAAA,MAAM,aAAa,KAAA,CAChB,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAClC,WAAA,EAAY;AACf,EAAA,MAAM,SAAS,UAAA,CAAW,KAAA,CAAM,YAAY,CAAA,CAAE,OAAO,OAAO,CAAA;AAC5D,EAAA,MAAM,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AAC9D,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AAEhE,EAAA,IAAI,OAAA,KAAY,UAAU,OAAO,MAAA;AACjC,EAAA,OAAO,UAAU,MAAA,GAAS,OAAA;AAC5B;AAEA,SAAS,+BAA+B,KAAA,EAAuB;AAC7D,EAAA,OAAO,kBAAA,CAAmB,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACpD;AAEA,SAAS,gCAAgC,MAAA,EAA0C;AACjF,EAAA,OAAO,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAChC;AAEA,SAAS,sCAAsC,MAAA,EAA0C;AACvF,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,mBAAmB,MAAA,CAAO;AAAA,GAC3B,CAAA;AACH;AAEA,SAAS,4BACP,OAAA,EAC+C;AAC/C,EAAA,MAAM,QAAwD,EAAC;AAE/D,EAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,cAAc,OAAA,CAAQ,WAAA;AACnE,EAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW,KAAA,CAAM,YAAY,OAAA,CAAQ,SAAA;AAC/D,EAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,eAAe,OAAA,CAAQ,YAAA;AACrE,EAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,aAAa,OAAA,CAAQ,UAAA;AACjE,EAAA,IAAI,OAAA,CAAQ,eAAA,KAAoB,MAAA,EAAW,KAAA,CAAM,kBAAkB,OAAA,CAAQ,eAAA;AAC3E,EAAA,IAAI,OAAA,CAAQ,aAAA,KAAkB,MAAA,EAAW,KAAA,CAAM,gBAAgB,OAAA,CAAQ,aAAA;AACvE,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAW,KAAA,CAAM,UAAU,OAAA,CAAQ,OAAA;AAE3D,EAAA,OAAO,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjD;AAEA,SAAS,qCAAA,CACP,iBACA,eAAA,EACkC;AAClC,EAAA,MAAM,aAA+C,EAAC;AAEtD,EAAA,IAAI,aAAA,CAAc,eAAe,CAAA,EAAG;AAClC,IAAA,UAAA,CAAW,KAAK,eAAe,CAAA;AAC/B,IAAA,IAAI,aAAA,CAAc,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC1C,MAAA,UAAA,CAAW,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,UAAA,CAAW,KAAK,eAAe,CAAA;AAC/B,IAAA,IAAI,aAAA,CAAc,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC1C,MAAA,UAAA,CAAW,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,gCAAgC,KAAA,EAAoD;AAC3F,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAME,QAAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAOA,QAAAA,CAAQ,MAAA,GAAS,CAAA,GACpB,EAAE,QAAA,EAAUA,UAAS,IAAA,EAAM,kCAAA,CAAmCA,QAAO,CAAA,EAAE,GACvE,IAAA;AAAA,EACN;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAY,KAAA,CAAM,IAAA,IAAQ,MAAM,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAA,CAAM,IAAA;AACtE,EAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,GACpB;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,MAAM,yBAAA,CAA0B,KAAA,CAAM,IAAI,CAAA,IAAK,mCAAmC,OAAO;AAAA,GAC3F,GACE,IAAA;AACN;AAEA,SAAS,iCAAiC,KAAA,EAA0B;AAClE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,EAAC;AAEnC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC9B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,EAAC;AACvC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,CAAC,OAAO,IAAI,EAAC;AAAA,EAC3C,CAAC,CAAA;AACH;AAEA,SAAS,kCAAA,CACP,SACA,UAAA,EAC+B;AAC/B,EAAA,IAAI,CAAC,YAAY,OAAO,OAAA;AAExB,EAAA,MAAM,mBAAmB,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAC9E,EAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG,OAAO,gBAAA;AAExC,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,KAAS,QAAQ,CAAA;AAC5E;AAEA,SAAS,qCAAA,CACP,IAAA,EACA,UAAA,EACA,UAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,cAA6C,EAAC;AAEpD,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,CAAC,aAAA,CAAc,SAAA,CAAU,SAAS,CAAA,EAAG;AACzC,IAAA,MAAMC,SAAAA,GAAW,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQA,SAAQ,CAAA,EAAG;AAE9B,IAAA,KAAA,MAAW,WAAWA,SAAAA,EAAU;AAC9B,MAAA,MAAM,MAAA,GAAS,gCAAgC,OAAO,CAAA;AACtD,MAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC1C,MAAA,IAAA,CAAK,GAAA,CAAI,OAAO,QAAQ,CAAA;AACxB,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO,kCAAA,CAAmC,aAAa,UAAU,CAAA;AACnE;AAEA,SAAS,iCAAA,CACP,OACA,IAAA,EACgC;AAChC,EAAA,OAAO,gCAAA,CAAiC,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,MAAe;AAAA,IACjE,SAAA;AAAA,IACA,IAAA,EAAM,IAAA,IAAQ,kCAAA,CAAmC,SAAS;AAAA,GAC5D,CAAE,CAAA;AACJ;AAEA,SAAS,wCAAA,CACP,IAAA,EACA,UAAA,EACA,UAAA,EACiC;AACjC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,eAA+C,EAAC;AAEtD,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,CAAC,aAAA,CAAc,SAAA,CAAU,UAAU,CAAA,EAAG;AAC1C,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAO,CAAA,GACjC;AAAA,MACA,GAAG,iCAAA,CAAkC,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,MACzD,GAAG,iCAAA,CAAkC,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC3D,GAAG,iCAAA,CAAkC,OAAA,CAAQ,MAAA,EAAQ,QAAQ;AAAA,KAC/D,GACE,kCAAkC,OAAO,CAAA;AAE7C,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,GAAA,CAAI,OAAO,SAAS,CAAA;AACzB,MAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,cACnB,MAAM;AACP,IAAA,MAAM,mBAAmB,YAAA,CAAa,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AACnF,IAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG,OAAO,gBAAA;AACxC,IAAA,OAAO,YAAA,CAAa,OAAO,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,KAAS,QAAQ,CAAA;AAAA,EACjF,IAAG,GACD,YAAA;AAEJ,EAAA,MAAM,gBAAA,GAAmB,cAAc,eAAA,CAAgB,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAClG,EAAA,MAAM,iBAAA,GAAoB,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,eAAA,CAAgB,MAAM,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,QAAQ,CAAA;AAElH,EAAA,OAAO;AAAA,IACL,YAAY,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,SAAS,CAAA;AAAA,IAC5D,IAAA,EAAM,mBACF,UAAA,GACA,iBAAA,GACE,WACA,UAAA,IAAc,eAAA,CAAgB,MAAA,GAAS,CAAA,GACrC,UAAA,GACA;AAAA,GACV;AACF;AAEA,SAAS,mCAAA,CACP,UAAA,EACA,kBAAA,EACA,IAAA,EAC+B;AAC/B,EAAA,IAAI,CAAC,aAAA,CAAc,kBAAkB,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AACjE,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAoB;AACrD,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,oBAAA,CAAqB,GAAA,CAAI,SAAA,CAAU,WAAA,EAAY,EAAG,SAAS,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,EAAG;AACpE,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,UAAA,IAAc,gCAAA,CAAiC,OAAO,CAAA,EAAG;AAClE,MAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,GAAA,CAAI,UAAA,CAAW,aAAa,CAAA;AACvE,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AAAA,MAC3B;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpB,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,QAAA,EAAU,UAAA,EAAY,MAAM,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA;AAAA,IACtE;AAAA,EACF;AAEA,EAAA,OAAO,WAAA,CAAY,KAAK,mCAAmC,CAAA;AAC7D;AAEA,SAAS,oCAAoC,MAAA,EAA6C;AACxF,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY;AAC7C,EAAA,MAAM,YAAY,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,GAAG,EAAE,WAAA,EAAY;AAC1D,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,SAAS,CAAA,EAAG;AAC7C,IAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,GAAA;AAClD,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AAC9C,IAAA,IAAI,uBAAA,CAAwB,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AAAA,EACvD,CAAA,MAAA,IAAW,oFAAA,CAAqF,IAAA,CAAK,SAAS,CAAA,EAAG;AAC/G,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,GAAA;AAC9C,IAAA,IAAI,+CAAA,CAAgD,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AAAA,EAC/E,CAAA,MAAA,IAAW,2BAAA,CAA4B,IAAA,CAAK,SAAS,CAAA,EAAG;AACtD,IAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AACzD,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AAC9C,IAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,EAAA;AAAA,EACzD,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AACnC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,GAAA;AAAA,EACxC;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mCAAA,CACP,MACA,KAAA,EACQ;AACR,EAAA,MAAM,UAAA,GAAa,mCAAA,CAAoC,IAAI,CAAA,GAAI,oCAAoC,KAAK,CAAA;AACxG,EAAA,IAAI,UAAA,KAAe,GAAG,OAAO,UAAA;AAE7B,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA;AACnD;AAEA,SAAS,oCACP,OAAA,EACe;AACf,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,EAAA,IAAI,OAAO,eAAe,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,UAAU,CAAA,IAAK,UAAA,GAAa,CAAA,EAAG;AACpF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAC9B;AAEA,SAAS,6BAAA,CACP,KAAA,EACA,WAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,UAAA,GAAa,oCAAoC,OAAO,CAAA;AAC9D,EAAA,IAAI,eAAe,IAAA,IAAQ,KAAA,CAAM,MAAA,GAAS,WAAA,CAAY,UAAU,UAAA,EAAY;AAC1E,IAAA,OAAO,EAAE,OAAO,WAAA,EAAY;AAAA,EAC9B;AAEA,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,MAAM,qBAAoD,EAAC;AAE3D,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,KAAA,MAAW,YAAY,KAAA,EAAO;AAC5B,MAAA,IAAI,YAAA,CAAa,MAAA,GAAS,kBAAA,CAAmB,MAAA,IAAU,UAAA,EAAY;AACnE,MAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA;AACA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,MAAA,IAAI,YAAA,CAAa,MAAA,GAAS,kBAAA,CAAmB,MAAA,IAAU,UAAA,EAAY;AACnE,MAAA,kBAAA,CAAmB,KAAK,UAAU,CAAA;AAAA,IACpC;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,OAAA,CAAQ,qBAAqB,MAAA,EAAQ;AACvC,IAAA,eAAA,EAAgB;AAChB,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,MAAO;AACL,IAAA,SAAA,EAAU;AACV,IAAA,eAAA,EAAgB;AAAA,EAClB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AACF;AAcO,IAAM,0BAAN,MAA8B;AAAA,EA2EnC,YAAY,WAAA,EAA4C;AAzExD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAS,QAAA,CAAA;AACT,IAAA,aAAA,CAAA,IAAA,EAAS,UAAA,CAAA;AACT,IAAA,aAAA,CAAA,IAAA,EAAS,OAAA,CAAA;AAET,IAAA,aAAA,CAAA,IAAA,EAAiB,wBAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,cAAA,CAAA;AAGjB;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAcR,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAsC,EAAC,CAAA;AAC/C,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAA0C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,8BAAA,sBAAmC,GAAA,EAAY,CAAA;AAGvD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,6BAAA,EAA8B,CAAA,CAAA;AACtC,IAAA,aAAA,CAAA,IAAA,EAAQ,yBAAA,EAA0B,CAAA,CAAA;AAClC,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAA,EAAuB,CAAA,CAAA;AAC/B,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,EAAW,KAAA,CAAA;AACnB,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAIG,IAAA,CAAA;AAGX;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,EAAwC,IAAA,CAAA;AAGhD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAiC,IAAA,CAAA;AACzC,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,EAAkC,IAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAAgB,KAAA,CAAA;AACxB,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAiB,KAAA,CAAA;AACzB,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAA,sBAA2B,GAAA,EAA0C,CAAA;AAC7E,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,EAA0C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAiB,eAAA,EAAgB,IAAUF,MAAA,CAAA,KAAA,EAAM,CAAA;AACjD,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,EAAqB,KAAA,CAAA;AAC7B,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAuD,IAAA,CAAA;AAC/D,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAsD,IAAA,CAAA;AAC9D,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAe,KAAA,CAAA;AACvB,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAwC,IAAA,CAAA;AAChD,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAkD,IAAA,CAAA;AAC1D,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAe,KAAA,CAAA;AACvB,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAwC,IAAA,CAAA;AAChD,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,EAA0C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAmC,8BAAA,EAA+B,CAAA;AAG1E;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAAkD,EAAC,CAAA;AAGzD,IAAA,IAAA,CAAK,sBAAA,GAAyB,YAAY,sBAAA,IAA0B,gCAAA;AACpE,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA,CAAY,cAAA,KAAmB,CAAC,IAAA,KAAS;AAAE,MAAA,KAAK,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAAG,CAAA,CAAA;AAC5F,IAAA,IAAA,CAAK,SAAS,WAAA,CAAY,MAAA;AAC1B,IAAA,IAAA,CAAK,QAAQ,WAAA,CAAY,KAAA;AACzB,IAAA,IAAA,CAAK,aAAa,WAAA,CAAY,UAAA;AAC9B,IAAA,IAAA,CAAK,iBAAA,GAAoB,WAAA,CAAY,iBAAA,KAAsB,WAAA,CAAY,aAAa,WAAA,CAAY,UAAA,CAAW,OAAA,KAAY,QAAA,GACnH,WAAA,CAAY,UAAA,CAAW,aAAA,IAAiB,WAAA,CAAY,aAAa,WAAA,CAAY,UAAA,CAAA;AAGjF,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,aAAA,EAAe,WAAA,CAAY,aAAA,IAAiB,QAAA,CAAS,aAAA;AAAA,MACrD,aAAA,EAAe,WAAA,CAAY,aAAA,IAAiB,QAAA,CAAS,aAAA;AAAA,MACrD,WAAA,EAAa,WAAA,CAAY,WAAA,IAAe,QAAA,CAAS,WAAA;AAAA,MACjD,WAAA,EAAa,WAAA,CAAY,WAAA,IAAe,QAAA,CAAS,WAAA;AAAA,MACjD,kBAAA,EAAoB,WAAA,CAAY,kBAAA,IAAsB,QAAA,CAAS,kBAAA;AAAA,MAC/D,iBAAA,EAAmB,WAAA,CAAY,iBAAA,IAAqB,QAAA,CAAS,iBAAA;AAAA,MAC7D,oBAAA,EAAsB,WAAA,CAAY,oBAAA,IAAwB,QAAA,CAAS,oBAAA;AAAA,MACnE,qBAAA,EAAuB,WAAA,CAAY,qBAAA,IAAyB,QAAA,CAAS,qBAAA;AAAA,MACrE,eAAA,EAAiB,WAAA,CAAY,eAAA,IAAmB,QAAA,CAAS;AAAA,KAC3D;AAIA,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAGhC,IAAA,IAAA,CAAK,WAAW,IAAI,aAAA,CAAc,IAAA,CAAK,MAAA,EAAQ,YAAY,UAAU,CAAA;AACrE,IAAA,IAAA,CAAK,QAAA,CAAS,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,aAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,CAAS,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,aAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,WAAA;AACxC,IAAA,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,WAAA;AAGxC,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AAGrB,IAAA,IAAI,IAAA,CAAK,OAAO,eAAA,EAAiB;AAC/B,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB;AAEA,IAAA,IAAA,CAAK,cAAc,WAAA,CAAY,WAAA;AAC/B,IAAA,IAAA,CAAK,iBAAiB,WAAA,CAAY,cAAA;AAClC,IAAA,IAAA,CAAK,gBAAgB,WAAA,CAAY,aAAA;AACjC,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,MAAM,YAAY,WAAA,CAAY,SAAA;AAC9B,MAAA,IAAA,CAAK,mBAAmB,CAAC,KAAA,KAAU,4BAA4B,SAAA,EAAW,KAAA,EAAO,KAAK,QAAQ,CAAA;AAC9F,MAAA,IAAA,CAAK,kBAAkB,kBAAA,CAAmB,WAAA,CAAY,WAAW,IAAA,CAAK,KAAA,EAAO,KAAK,MAAA,EAAQ;AAAA,QACxF,SAAS,YAAY;AACnB,UAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,UAAA,MAAM,cAAc,IAAA,CAAK,gBAAA;AACzB,UAAA,IAAA,CAAK,sBAAA,EAAuB;AAG5B,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI;AAAE,YAAA,QAAA,GAAW,QAAQ,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,UAAG,SAClE,OAAA,EAAS;AAAE,YAAA,QAAA,GAAW,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,UAAG;AACtD,UAAA,MAAM,CAAC,OAAO,CAAA,GAAI,MAAM,QAAQ,UAAA,CAAW;AAAA,YACzC,QAAA;AAAA,YACA,IAAA,CAAK,eAAA;AAAA,YACL,WAAA,EAAa;AAAA,WACd,CAAA;AACD,UAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY,MAAM,OAAA,CAAQ,MAAA;AAAA,QACnD,CAAA;AAAA,QACA,OAAA,EAAS,OAAO,QAAA,KAAa;AAC3B,UAAA,IAAI,IAAA,CAAK,QAAA,EAAU,MAAM,wBAAA,EAAyB;AAClD,UAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,sBAAsB,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AACpE,YAAA,IAAI,KAAK,QAAA,IAAY,KAAA,KAAU,IAAA,CAAK,KAAA,QAAa,wBAAA,EAAyB;AAC1E,YAAA,kBAAA,CAAmB,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,UAC7D,OAAO,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,MAAA,EAAQ,OAAO,QAAA,KAAa;AAC1B,UAAA,IAAI,IAAA,CAAK,QAAA,EAAU,MAAM,wBAAA,EAAyB;AAClD,UAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,UAAA,IAAA,CAAK,SAAS,UAAA,EAAW;AACzB,UAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA;AACzC,UAAA,IAAA,CAAK,aAAa,QAAA,CAAS,UAAA;AAC3B,UAAA,IAAA,CAAK,OAAA,EAAS,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA;AAC/C,UAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,UAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,UAAA,IAAA,CAAK,kBAAA,GAAqB,KAAA;AAC1B,UAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,UAAA,IAAA,CAAK,kBAAA,IAAqB;AAC1B,UAAA,MAAM,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAC/B,UAAA,IAAI,KAAK,QAAA,EAAU;AAAE,YAAA,IAAA,CAAK,cAAA,EAAe;AAAG,YAAA,MAAM,wBAAA,EAAyB;AAAA,UAAG;AAAA,QAChF,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,KAAA,KAAU,IAAA,CAAK,kBAAkB,KAAK;AAAA,OACjD,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,YAAY,QAAA,EAAU;AAC/B,MAAA,IAAA,CAAK,WAAW,WAAA,CAAY,QAAA;AAC5B,MAAA,KAAK,KAAK,eAAA,EAAgB;AAC1B,MAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,IAC3B;AAAA,EAIF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,CAAgB,mBAAmB,KAAA,EAA6B;AACtE,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACpB,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,IAAA,CAAK,cAAc,UAAA,EAAW;AAC9B,IAAA,MAAM,aAAA,GAAgB,SAAS,UAAA,EAAY,aAAA;AAC3C,IAAA,IAAI,aAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,aAAa,CAAA;AAC3D,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,gBAAA,CAAiB,CAAC,SAAA,KAAuB;AAChE,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,QAAA,KAAa,IAAA,CAAK,QAAA,EAAU;AACjD,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,SAAS,CAAA;AACnC,QAAA,MAAM,cAAA,GAAiB,eAAA;AACvB,QAAA,eAAA,GAAkB,IAAA;AAClB,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,kBAAA,IAAsB,KAAK,YAAA,EAAc;AACvE,QAAA,IAAI;AAGF,UAAA,MAAM,eAAA,GAAkB,KAAK,gBAAA,EAAkB,IAAA;AAC/C,UAAA,IAAI,eAAA,EAAiB;AAAE,YAAA,eAAA,EAAgB;AAAG,YAAA;AAAA,UAAQ;AAClD,UAAA,IAAI,cAAA,EAAgB,mBAAA,CAAoB,IAAA,CAAK,KAAA,EAAO,KAAK,aAAa,CAAA;AACtE,UAAA,IAAA,CAAK,MAAA,EAAO;AACZ,UAAA,MAAM,QAAQ,IAAA,CAAK,WAAA,GACf,KAAK,WAAA,CAAY,IAAA,CAAK,UAAW,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,IACxD,IAAA,CAAK,QAAA,CAAU,OAAO,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM,CAAA;AACjD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,YAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAA;AAAA,cAC5C,MAAM;AAAE,gBAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AAAA,cAAO,CAAA;AAAA,cACnC,CAAC,KAAA,KAAU;AAAE,gBAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AAAO,gBAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,cAAG;AAAA,aACzE;AAAA,UACF;AAAA,QACF,SAAS,KAAA,EAAO;AAAE,UAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,QAAG;AAAA,MACnD,CAAC,CAAA;AACD,MAAA,IAAI,OAAA,EAAS,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,KAAA,KAAU;AAC3C,QAAA,IAAI,kBAAkB,MAAM,KAAA;AAC5B,QAAA,IAAI,QAAA,KAAa,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,MAC9D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,kBAAkB,MAAM,KAAA;AAC5B,MAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AAAA,EAEQ,kBAAkB,KAAA,EAAsB;AAC9C,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,YAAA,EAAc;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,sBAAA,CAAuB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AACrF,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,MAAM,OAAA,GAAU,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACxE,IAAA,IAAI,KAAK,gBAAA,EAAkB;AAAE,MAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAG,MAAA;AAAA,IAAQ;AACrE,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,aAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAAA,WAC7C,OAAA,CAAQ,KAAA,CAAM,sCAAA,EAAwC,OAAO,CAAA;AAAA,IACpE,SAAS,aAAA,EAAe;AACtB,MAAA,OAAA,CAAQ,KAAA,CAAM,kDAAkD,aAAa,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAuB;AAC7B,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAU,gBAAA,CAAiB,IAAI,CAAA;AACpD,MAAA,IAAI,OAAA,EAAS,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAC,UAAU,OAAA,CAAQ,KAAA,CAAM,2CAAA,EAA6C,KAAK,CAAC,CAAA;AAAA,IAC9G,SAAS,KAAA,EAAO;AAAE,MAAA,OAAA,CAAQ,KAAA,CAAM,6CAA6C,KAAK,CAAA;AAAA,IAAG;AAAA,EACvF;AAAA,EAEQ,iCAAA,GAA6C;AACnD,IAAA,OAAO,CAAC,IAAA,CAAK,QAAA;AAAA,EACf;AAAA,EAEQ,8BAAA,GAAyC;AAC/C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,+BAA+B,mBAAA,EAA0C;AAC/E,IAAA,IAAI,CAAC,IAAA,CAAK,iCAAA,EAAkC,EAAG;AAE/C,IAAA,MAAM,KAAA,GAAQ,EAAE,IAAA,CAAK,2BAAA;AACrB,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,IAAI,KAAA,KAAU,IAAA,CAAK,2BAAA,IAA+B,CAAC,qBAAoB,EAAG;AAE1E,MAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,MAAA,IAAI,KAAA,KAAU,IAAA,CAAK,2BAAA,IAA+B,mBAAA,EAAoB,EAAG;AACvE,QAAA,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,8BAAA,EAAgC,CAAA;AAAA,MACxD;AAAA,IACF,CAAA;AAEA,IAAA,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,8BAAA,EAAgC,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAEpB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,aAAA,IAAiB,IAAA,CAAK,UAAA;AAGxD,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,WAAA,IAAe,MAAA,CAAO,UAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,YAAA,IAAgB,MAAA,CAAO,WAAA;AAEhD,MAAA,IAAA,CAAK,MAAA,CAAO,SAAS,KAAA,GAAQ,MAAA;AAC7B,MAAA,IAAA,CAAK,OAAO,sBAAA,EAAuB;AAEnC,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAAA,QAClD,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,QAAA,CAAS,cAAc,IAAA,CAAK,GAAA,CAAI,OAAO,gBAAA,IAAoB,CAAA,EAAG,CAAC,CAAC,CAAA;AACrE,UAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,CAAA;AAGA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,CAAe,IAAA,CAAK,kBAAkB,CAAA;AAChE,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,SAAS,CAAA;AAGrC,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,IAAA,CAAK,kBAAkB,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAA,GAA8B;AACpC,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,eAAe,UAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AACA,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,IAAA,CAAK,kBAAkB,CAAA;AAC5D,MAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAA,CAAsB,KAAA,EAAuB,OAAA,GAAoC,EAAC,EAAkB;AAClG,IAAA,IAAI,IAAA,CAAK,YAAY,OAAA,CAAQ,MAAA,EAAQ,SAAS,OAAO,OAAA,CAAQ,MAAA,CAAO,wBAAA,EAA0B,CAAA;AAC9F,IAAA,IAAI,IAAA,CAAK,oBAAoB,OAAO,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,sEAAsE,CAAC,CAAA;AACpI,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,YAAA,EAAc,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,wEAAwE,CAAC,CAAA;AAClJ,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,MAAM,WAAW,IAAA,CAAK,gBAAA;AACtB,IAAA,QAAA,EAAU,MAAA,CAAO,0BAA0B,CAAA;AAC3C,IAAA,IAAI,SAAA,GAA0B,IAAA;AAC9B,IAAA,IAAI,yBAAA,GAAiD,IAAA;AACrD,IAAA,IAAI,UAAA,GAA8C,IAAA;AAClD,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,MAAA;AACJ,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAc,CAAC,KAAK,EAAA,KAAO;AAAE,MAAA,OAAA,GAAU,GAAA;AAAK,MAAA,MAAA,GAAS,EAAA;AAAA,IAAI,CAAC,CAAA;AAC9E,IAAA,MAAMG,QAAAA,GAAkC;AAAA,MACtC,OAAA;AAAA,MAAS,IAAA,EAAM,IAAA;AAAA,MACf,MAAA,EAAQ,CAAC,MAAA,KAAW;AAClB,QAAA,SAAA,KAAA,SAAA,GAAc,MAAA,CAAA;AACd,QAAA,yBAAA,IAA4B;AAC5B,QAAAA,SAAQ,IAAA,GAAO,IAAA;AACf,QAAA,UAAA,GAAa,SAAS,CAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmBA,QAAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAMA,QAAAA,CAAQ,MAAA,CAAO,0BAA0B,CAAA;AAC7D,IAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAC/D,IAAA,MAAM,iBAAiB,MAAM;AAAE,MAAA,IAAI,WAAW,MAAM,SAAA;AAAA,IAAW,CAAA;AAC/D,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AAEF,QAAA,IAAI,UAAU,MAAM,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AAG1D,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,eAAA,QAAuB,IAAA,CAAK,eAAA;AAC1D,QAAA,cAAA,EAAe;AACf,QAAA,MAAM,cAAc,qBAAA,CAAsB,QAAA,EAAU,KAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClF,QAAA,IAAI;AAAE,UAAA,MAAM,WAAA;AAAA,QAAa,SAClB,KAAA,EAAO;AAAE,UAAA,MAAM,SAAA,IAAa,KAAA;AAAA,QAAO;AAC1C,QAAA,cAAA,EAAe;AACf,QAAA,MAAM,IAAI,OAAA,CAAc,CAAC,IAAA,EAAM,MAAA,KAAW;AACxC,UAAA,UAAA,GAAa,MAAA;AACb,UAAAA,QAAAA,CAAQ,OAAO,MAAM;AACnB,YAAAA,SAAQ,IAAA,GAAO,IAAA;AACf,YAAA,IAAI;AACF,cAAA,cAAA,EAAe;AACf,cAAA,yBAAA,GAA4B,mBAAmB,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AACvF,cAAA,cAAA,EAAe;AACf,cAAA,IAAA,EAAK;AAAA,YACP,SAAS,KAAA,EAAO;AAAE,cAAA,yBAAA,IAA4B;AAAG,cAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AAAA,YAAG;AAAA,UAC/E,CAAA;AAAA,QACF,CAAC,CAAA;AACD,QAAA,cAAA,EAAe;AAAA,MACjB,CAAA,SAAE;AACA,QAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAClD,QAAA,IAAI,IAAA,CAAK,gBAAA,KAAqBA,QAAAA,EAAS,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,MACjE;AAAA,IACF,CAAA,GAAG,CAAE,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AACzB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,sBAAA,CAAuB,MAAA,GAAS,wBAAA,EAAyB,EAAS;AACxE,IAAA,IAAA,CAAK,gBAAA,EAAkB,OAAO,MAAM,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,KAAA,EAA6B;AACpC,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,uBAAA,IAA2B,CAAA;AAChC,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAA,EAAS,SAAS,KAAK,CAAA;AAG5B,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AACjC,IAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AACnD,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB;AAAA,EACF;AAAA;AAAA,EAGA,UAAA,GAAmB;AACjB,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,MAAA,EAAwC;AACxD,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,MAAMA,QAAAA,GAAU,EAAE,IAAA,CAAK,oBAAA;AACvB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAA;AAC9D,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoBA,QAAAA,EAAS,KAAK,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAA,CAAK,kCAAkC,aAAa,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwB,MAAA,EAA+B;AACrD,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAC9B,IAAA,IAAA,CAAK,8BAA8B,MAAM,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iCAAA,CACJ,MAAA,EACA,YAAA,EACe;AACf,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAC9B,IAAA,MAAMA,WAAU,IAAA,CAAK,oBAAA;AACrB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAGnB,IAAA,MAAM,IAAA,CAAK,6BAA6B,IAAI,CAAA;AAE5C,IAAA,IAAI,CAAC,KAAK,mBAAA,CAAoBA,QAAAA,EAAS,KAAK,CAAA,IAAK,IAAA,CAAK,oBAAoB,MAAA,EAAQ;AAClF,IAAA,IAAI,YAAA,IAAgB,CAAC,MAAM,YAAA,EAAa,EAAG;AAC3C,IAAA,IAAI,KAAK,mBAAA,CAAoBA,QAAAA,EAAS,KAAK,CAAA,IAAK,IAAA,CAAK,oBAAoB,MAAA,EAAQ;AAC/E,MAAA,IAAA,CAAK,8BAA8B,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEQ,mBAAmB,MAAA,EAA+B;AACxD,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,uBAAA,IAA2B,CAAA;AAChC,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAClC,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,6BAA6B,KAAA,EAAM;AACxC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,WAAA,IAAe,IAAI,CAAA;AAAA,EACrD;AAAA,EAEQ,8BAA8B,MAAA,EAA+B;AAEnE,IAAA,IAAI,OAAO,eAAA,EAAiB;AAE1B,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,IAC1B,CAAA,MAAA,IAAW,OAAO,aAAA,EAAe;AAE/B,MAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,aAAA,EAAe,CAAC,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,4BAAA,CAA6B,mBAAA,GAAsB,KAAA,EAAsB;AAC7E,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,CAAK,eAAA,EAAiB;AAC1C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,kBAAkB,IAAA,CAAK,eAAA;AAC7B,IAAA,MAAMA,WAAU,IAAA,CAAK,oBAAA;AACrB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,IAAA,CAAK,4BAAA,EAA6B;AAClC,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,UAAA,CAAW,KAAK,cAAc,CAAA;AACtC,IAAA,MAAM,OAAA,CAAQ,WAAA,CAAY,eAAA,EAAiB,EAAE,qBAAqB,CAAA;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoBA,QAAAA,EAAS,KAAK,CAAA,IAAK,OAAA,KAAY,IAAA,CAAK,OAAA,IAAW,eAAA,KAAoB,IAAA,CAAK,eAAA,EAAiB;AACrH,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,OAAA,CAAQ,gBAAA,CAAiB,KAAK,aAAa,CAAA;AAAA,IAC7C;AACA,IAAA,OAAA,CAAQ,UAAA,CAAW,KAAK,cAAc,CAAA;AACtC,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,IAAA,EAAc,QAAA,EAAkC;AAChE,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AACvD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAE5B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,0BAAA,CAA2B,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AACtE,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AACtE,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,IAAA,CAAK,cAAc,QAAA,CAAS,QAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA;AAAA,EACzG;AAAA,EAEQ,2BAA2B,MAAA,EAAsC;AACvE,IAAA,MAAM,cAAe,MAAA,CAAoC,WAAA;AACzD,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,QAAA,EAAU;AACjD,MAAA,OAAO,IAAA,CAAK,gCAAA;AAAA,QACV,MAAA;AAAA,QACA,WAAA,EAAa,aAAA;AAAA,QACb,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,aAAA,IAAiB,MAAA,CAAO,aAAA;AAC1D,IAAA,MAAM,cAAc,WAAA,CAAY,WAAA,IAAe,wBAAA,CAAyB,MAAA,EAAQ,KAAK,UAAU,CAAA;AAE/F,IAAA,IAAI,WAAA,CAAY,SAAS,OAAA,EAAS;AAChC,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,EAAU,OAAO,IAAA;AAClC,MAAA,OAAO,IAAA,CAAK,2BAAA;AAAA,QACV,IAAUH,MAAA,CAAA,OAAA;AAAA,UACR,YAAY,QAAA,CAAS,CAAA;AAAA,UACrB,YAAY,QAAA,CAAS,CAAA;AAAA,UACrB,YAAY,QAAA,CAAS;AAAA,SACvB;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,CAAY,SAAS,aAAA,EAAe;AACtC,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AACxB,MAAA,MAAM,UAAA,GAAqB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,WAAA,CAAY,KAAA,IAAS,MAAA,CAAO,KAAA;AAAA,QACnC,MAAA,EAAQ,WAAA,CAAY,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,QACrC,OAAA,EAAS,WAAA,CAAY,OAAA,IAAW,MAAA,CAAO;AAAA,OACzC;AACA,MAAA,MAAM,UAAA,GAAa,kBAAkB,IAAA,CAAK,KAAA,EAAc,YAAmB,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAA,IAAK,MAAS,CAAA;AACnI,MAAA,OAAO,IAAA,CAAK,2BAAA;AAAA,QACV,IAAUA,MAAA,CAAA,OAAA;AAAA,UACR,WAAW,MAAA,CAAO,CAAA;AAAA,UAClB,WAAW,MAAA,CAAO,CAAA;AAAA,UAClB,WAAW,MAAA,CAAO;AAAA,SACpB;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,yBAAA,CAA0B,MAAA,EAAQ,WAAW,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,OAAA,EAAS,aAAA,EAAe,WAAW,CAAA;AAAA,EACxE;AAAA,EAEQ,gCAAA,CACN,MAAA,EACA,eAAA,EACA,mBAAA,EACsB;AACtB,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA,EAAG;AACjC,MAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA,CAAK,8BAAA;AAAA,QACV,mBAAmB,MAAA,CAAO,aAAA;AAAA,QAC1B;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA;AAChD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,sBAAA;AAAA,MACV,OAAA;AAAA,MACA,mBAAmB,MAAA,CAAO,aAAA;AAAA,MAC1B,mBAAA,IAAuB,wBAAA,CAAyB,MAAA,EAAQ,IAAA,CAAK,UAAU;AAAA,KACzE;AAAA,EACF;AAAA,EAEQ,yBAAA,CACN,QACA,WAAA,EACkB;AAClB,IAAA,IAAI,WAAA,CAAY,SAAS,MAAA,EAAQ;AAC/B,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,KAAA,IAAS,MAAA,CAAO,SAAS,EAAC;AACxD,MAAA,OAAO,IAAA,CAAK,mBAAmB,gBAAA,CAAiB,SAAA,EAAW,sBAAsB,IAAA,CAAK,eAAe,CAAC,CAAA,EAAG,MAAM,CAAA;AAAA,IACjH;AAEA,IAAA,IAAI,WAAA,CAAY,SAAS,MAAA,EAAQ;AAC/B,MAAA,OAAO,IAAA,CAAK,mBAAmB,WAAA,CAAY,MAAA,IAAU,OAAO,MAAA,IAAU,IAAI,MAAM,CAAA;AAAA,IAClF;AAEA,IAAA,IAAI,WAAA,CAAY,SAAS,QAAA,EAAU;AACjC,MAAA,OAAO,KAAK,oBAAA,CAAqB;AAAA,QAC/B,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,WAAA,CAAY,OAAA,IAAW,MAAA,CAAO;AAAA,OACxC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,SAAA,EAAqB,QAAA,EAAkC;AACtE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW,MAAM,CAAA;AACzD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,sBAAA,CAAuB,OAAO,CAAA;AACpD,IAAA,MAAM,IAAA,CAAK,cAAc,QAAA,CAAS,QAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,SAAA,EAAqB,QAAA,EAAkC;AACvE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW,MAAM,CAAA;AACzD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,sBAAA,CAAuB,OAAO,CAAA;AACpD,IAAA,MAAM,IAAA,CAAK,cAAc,QAAA,CAAS,QAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,QAAA,EAAkC;AACpD,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,MAAM,QAAA,GAAW,KAAK,8BAAA,EAA+B;AACrD,IAAA,MAAM,IAAA,CAAK,cAAc,QAAA,CAAS,QAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,OAAA,EAA2B,QAAA,EAAkC;AAC9E,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,sBAAA,CAAuB,OAAO,CAAA;AACpD,IAAA,MAAM,IAAA,CAAK,cAAc,QAAA,CAAS,QAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,kBAAkB,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBAAA,CAAmB,aAAA,GAAgB,GAAA,EAAM,eAAe,IAAA,EAAqB;AACjF,IAAA,MAAMG,QAAAA,GAAU,MAAM,IAAA,CAAK,kBAAA,EAAmB;AAC9C,IAAA,IAAIA,aAAY,IAAA,EAAM;AAEtB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAGjC,IAAA,MAAM,MAAM,IAAUH,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA;AACrD,IAAA,MAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACjC,IAAA,MAAM,IAAA,GAAO,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAC/B,IAAA,GAAA,CAAI,UAAU,MAAM,CAAA;AACpB,IAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAIhB,IAAA,MAAM,mBAAmB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAChD,IAAA,MAAM,iBAAiB,IAAA,CAAK,CAAA;AAI5B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,cAAc,CAAA,GAAI,GAAA;AAGjE,IAAA,MAAM,cAAc,MAAA,CAAO,CAAA;AAG3B,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,WAAA,EAAa,aAAa,aAAa,CAAA;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,CAAuBG,QAAO,CAAA,EAAG;AAE3C,IAAA,MAAM,aAAA,GAAgB,KAAK,sBAAA,EAAuB;AAClD,IAAA,MAAM,YAAA,GAAe,aAAA,GACjB,IAAA,CAAK,kCAAA,CAAmC,aAAa,CAAA,GACrD,IAAA;AACJ,IAAA,IAAI,gBAAgB,aAAA,EAAe;AACjC,MAAA,MAAM,KAAK,aAAA,CAAc,YAAA,CAAa,QAAA,EAAU,YAAA,CAAa,QAAQ,YAAY,CAAA;AACjF,MAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,CAAuBA,QAAO,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,gBAAgB,aAAA,CAAc,IAAA;AACnC,MAAA,IAAA,CAAK,kBAAA,CAAmB,cAAc,IAAI,CAAA;AAC1C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,GAAA;AACnB,IAAA,MAAM,cAAA,GAAiB,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAClF,IAAA,MAAM,WAAW,IAAA,CAAK,8BAAA,CAA+B,cAAA,EAAgB,aAAA,EAAe,YAAY,OAAO,CAAA;AAEvG,IAAA,MAAM,KAAK,aAAA,CAAc,QAAA,CAAS,QAAA,EAAU,QAAA,CAAS,QAAQ,YAAY,CAAA;AACzE,IAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,CAAuBA,QAAO,CAAA,EAAG;AAE3C,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAA,CAAK,gBAAgB,cAAA,CAAe,IAAA;AACpC,MAAA,IAAA,CAAK,kBAAA,CAAmB,eAAe,IAAI,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAA,CACN,MAAA,EACA,MAAA,EACA,MAAA,EACA,QAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,MACV,6BAA4B,CAAE,iBAAA,CAAkB,MAAA,EAAQ,MAAA,EAAQ,QAAQ,QAAQ;AAAA,KAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,GAA2B;AACzB,IAAA,OAAO,KAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAA8B;AAC5B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,MACjF,MAAA,EAAQ,CAAC,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC;AAAA,KACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,KAAA,EAA0B;AACvC,IAAA,IAAA,CAAK,uBAAA,IAA2B,CAAA;AAChC,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAG,MAAM,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,GAAG,MAAM,MAAM,CAAA;AACxC,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,CAAqB,KAAA,EAAoB,QAAA,EAAkC;AAC/E,IAAA,IAAI,MAAM,IAAA,CAAK,kBAAA,EAAmB,KAAM,IAAA,EAAM;AAE9C,IAAA,MAAM,cAAA,GAAiB,IAAUH,MAAA,CAAA,OAAA,CAAQ,GAAG,MAAM,QAAQ,CAAA;AAC1D,IAAA,MAAM,YAAA,GAAe,IAAUA,MAAA,CAAA,OAAA,CAAQ,GAAG,MAAM,MAAM,CAAA;AACtD,IAAA,MAAM,KAAK,aAAA,CAAc,cAAA,EAAgB,cAAc,QAAA,IAAY,IAAA,CAAK,OAAO,kBAAkB,CAAA;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,OAAA,EAAwB;AACxC,IAAA,IAAI,KAAK,QAAA,EAAU;AAGnB,IAAA,IAAI,OAAA,IAAW,CAAC,IAAA,CAAK,aAAA,IAAiB,KAAK,eAAA,EAAiB;AAC1D,MAAA,KAAK,KAAK,4BAAA,EAA6B;AAAA,IACzC;AAEA,IAAA,IAAI,IAAA,CAAK,mBAAmB,OAAA,EAAS;AACrC,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,IAAA,IAAA,CAAK,OAAA,EAAS,WAAW,OAAO,CAAA;AAChC,IAAA,IAAA,CAAK,WAAA,EAAa,kBAAkB,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAqB;AACnB,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,uBAAA,IAA2B,CAAA;AAChC,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,IAAA,CAAK,6BAA6B,KAAA,EAAM;AACxC,IAAA,IAAI,IAAA,CAAK,uBAAuB,IAAA,EAAM;AACpC,MAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB;AACA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,KAAA,EAA0B;AACvC,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,OAAA,CAAQ,IAAI,CAAA,mCAAA,EAAsC,IAAA,CAAK,kBAAkB,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AACvF,IAAA,IAAI,KAAA,KAAU,KAAK,kBAAA,EAAoB;AAEvC,IAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAI9B,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AACtB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,KAAK,KAAK,4BAAA,EAA6B;AAAA,EACzC;AAAA,EAEQ,oBAAoB,KAAA,EAA0B;AACpD,IAAA,IAAI,KAAA,KAAU,KAAK,kBAAA,EAAoB;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,kBAAA,GAAqB,KAAA;AAC1B,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEQ,4BAAA,GAAqC;AAC3C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,QAAQ,OAAA,EAAQ;AACrB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAEA,IAAA,IAAI,IAAA,CAAK,uBAAuB,MAAA,EAAQ;AACtC,MAAA,IAAA,CAAK,OAAA,GAAU,IAAI,kBAAA,CAAmB;AAAA,QACpC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,UAAU,IAAA,CAAK;AAAA,OAChB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,GAAU,IAAI,gBAAA,CAAiB;AAAA,QAClC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,UAAU,IAAA,CAAK;AAAA,OAChB,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2BAAA,EAA8B,IAAA,CAAK,kBAAkB,wBAAwB,CAAC,CAAC,IAAA,CAAK,KAAK,CAAA,cAAA,EAAiB,CAAC,CAAC,IAAA,CAAK,eAAe,CAAA,CAAE,CAAA;AAE9I,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,qBAAqB,QAAA,EAA4D;AAC/E,IAAA,IAAA,CAAK,oBAAA,CAAqB,IAAI,QAAQ,CAAA;AACtC,IAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,CAAA;AAC9B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,oBAAA,CAAqB,OAAO,QAAQ,CAAA;AAAA,IAC3C,CAAA;AAAA,EACF;AAAA,EAEQ,cAAA,GAAsC;AAC5C,IAAA,OAAO;AAAA,MACL,OAAO,IAAA,CAAK,kBAAA;AAAA,MACZ,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,MAAMb,SAAAA,GAAW,KAAK,cAAA,EAAe;AACrC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,oBAAA,EAAsB;AAChD,MAAA,QAAA,CAASA,SAAQ,CAAA;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,UAAA,EAAiC;AAC1C,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,eAAA,IAAmB,IAAA,CAAK,OAAA,EAAS;AACnD,MAAC,IAAA,CAAK,OAAA,CAA6B,aAAA,CAAc,UAAU,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAiC;AAC/B,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,iBAAA,IAAqB,IAAA,CAAK,OAAA,EAAS;AACrD,MAAA,OAAQ,IAAA,CAAK,QAA6B,eAAA,EAAgB;AAAA,IAC5D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAA,CAAa,YAAoB,QAAA,EAAyB;AACxD,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,cAAA,IAAkB,IAAA,CAAK,OAAA,EAAS;AAClD,MAAC,IAAA,CAAK,OAAA,CAA6B,YAAA,CAAa,UAAA,EAAY,WAAW,QAAQ,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,CAAe,YAAoB,QAAA,EAAyB;AAC1D,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,gBAAA,IAAoB,IAAA,CAAK,OAAA,EAAS;AACpD,MAAC,IAAA,CAAK,OAAA,CAA6B,cAAA,CAAe,UAAA,EAAY,QAAQ,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAA,CAAa,UAAA,EAAoB,SAAA,GAAqC,SAAA,EAAW,QAAA,EAAyB;AACxG,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,cAAA,IAAkB,IAAA,CAAK,OAAA,EAAS;AAClD,MAAC,IAAA,CAAK,OAAA,CAA6B,YAAA,CAAa,UAAA,EAAY,WAAW,QAAQ,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAAwF;AACtF,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,oBAAA,IAAwB,IAAA,CAAK,OAAA,EAAS;AACxD,MAAA,OAAQ,IAAA,CAAK,QAA6B,kBAAA,EAAmB;AAAA,IAC/D;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,CAAmB,YAAoB,UAAA,EAA8J;AACnM,IAAA,OAAA,CAAQ,IAAI,CAAA,8CAAA,EAAiD,UAAU,iBAAiB,IAAA,CAAK,kBAAkB,IAAI,UAAU,CAAA;AAC7H,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,iBAAA,IAAqB,IAAA,CAAK,OAAA,EAAS;AACrD,MAAC,IAAA,CAAK,OAAA,CAA6B,eAAA,CAAgB,UAAA,EAAY,UAAU,CAAA;AAAA,IAC3E,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2DAAA,EAA8D,CAAC,CAAC,IAAA,CAAK,OAAO,CAAA,UAAA,EAAa,iBAAA,KAAsB,IAAA,CAAK,OAAA,IAAW,EAAC,CAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IACpJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,YAAoB,KAAA,EAA2K;AAC5M,IAAA,OAAA,CAAQ,IAAI,CAAA,0CAAA,EAA6C,UAAU,iBAAiB,IAAA,CAAK,kBAAkB,IAAI,KAAK,CAAA;AACpH,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,mBAAA,IAAuB,IAAA,CAAK,OAAA,EAAS;AACvD,MAAC,IAAA,CAAK,OAAA,CAA6B,iBAAA,CAAkB,UAAA,EAAY,KAAK,CAAA;AAAA,IACxE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,6DAAA,EAAgE,CAAC,CAAC,IAAA,CAAK,OAAO,CAAA,UAAA,EAAa,mBAAA,KAAwB,IAAA,CAAK,OAAA,IAAW,EAAC,CAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IACxJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAA,CAAmB,YAAoB,SAAA,EAA2B;AAChE,IAAA,OAAA,CAAQ,GAAA,CAAI,iDAAiD,UAAU,CAAA,SAAA,EAAY,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACzG,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,oBAAA,IAAwB,IAAA,CAAK,OAAA,EAAS;AACxD,MAAC,IAAA,CAAK,OAAA,CAA6B,kBAAA,CAAmB,UAAA,EAAY,SAAS,CAAA;AAAA,IAC7E,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8DAAA,EAAiE,CAAC,CAAC,IAAA,CAAK,OAAO,CAAA,UAAA,EAAa,oBAAA,KAAyB,IAAA,CAAK,OAAA,IAAW,EAAC,CAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1J;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAA,CAAiB,YAAoB,QAAA,EAAqD;AACxF,IAAA,OAAA,CAAQ,GAAA,CAAI,wCAAwC,UAAU,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAClJ,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,kBAAA,IAAsB,IAAA,CAAK,OAAA,EAAS;AACtD,MAAA,MAAMiB,IAAAA,GAAM,IAAUJ,MAAA,CAAA,OAAA,CAAQ,QAAA,CAAS,GAAG,QAAA,CAAS,CAAA,EAAG,SAAS,CAAC,CAAA;AAChE,MAAC,IAAA,CAAK,OAAA,CAA6B,gBAAA,CAAiB,UAAA,EAAYI,IAAG,CAAA;AAAA,IACrE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,CAAA,iDAAA,CAAmD,CAAA;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,UAAA,EAAgE;AAChF,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,mBAAA,IAAuB,IAAA,CAAK,OAAA,EAAS;AACvD,MAAA,MAAM,GAAA,GAAO,IAAA,CAAK,OAAA,CAA6B,iBAAA,CAAkB,UAAU,CAAA;AAC3E,MAAA,OAAO,GAAA,GAAM,EAAE,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,CAAA,EAAE,GAAI,IAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,UAAA,EAA0B;AAC/C,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,4BAAA,CAA6B,OAAO,UAAU,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,KAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,UAAU,CAAA;AAC9E,IAAA,IAAI,WAAA,CAAY,MAAA,KAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,OAAA,GAAU,WAAA;AACf,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,QACrB,GAAG,IAAA,CAAK,eAAA;AAAA,QACR,OAAA,EAAA,CAAU,IAAA,CAAK,eAAA,CAAgB,OAAA,IAAW,EAAC,EAAG,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,UAAU;AAAA,OAC7F;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,kBAAkB,UAAA,EAAY;AACrC,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AACA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAEvB,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,aAAa,UAAU,CAAA;AAAA,IACtC,CAAA,MAAA,IAAW,KAAK,aAAA,EAAe;AAC7B,MAAA,KAAK,KAAK,4BAAA,EAA6B;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBAAA,CAAuB,YAAoB,MAAA,EAAiD;AAC1F,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2CAAA,EAA8C,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA;AAG9E,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,MAAM,SAAA,GAAsC,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,MAAA,EAAO;AAC1E,MAAA,IAAA,CAAK,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,SAAS,SAAS,CAAA;AAC1C,MAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,UACrB,GAAG,IAAA,CAAK,eAAA;AAAA,UACR,OAAA,EAAS,CAAC,GAAI,IAAA,CAAK,gBAAgB,OAAA,IAAW,IAAK,SAAS;AAAA,SAC9D;AAAA,MACF;AACA,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAI,KAAK,aAAA,EAAe;AACtB,QAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,UAAA,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,UAAA,EAAY,SAAS,CAAA;AAAA,QACjD,CAAA,MAAO;AACL,UAAA,KAAK,KAAK,4BAAA,EAA6B;AAAA,QACzC;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2BAAA,EAA8B,UAAU,CAAA,oBAAA,CAAsB,CAAA;AAC1E,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,IAAA,CAAK,QAAQ,WAAW,CAAA,EAAG,GAAG,MAAA,EAAO;AAChE,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,GAAI,aAAA;AAG5B,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,MAAM,WAAA,GAAc,KAAK,eAAA,CAAgB,OAAA,CAAQ,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrF,MAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,WAAW,CAAA,GAAI,aAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAGvB,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,cAAA,IAAkB,IAAA,CAAK,OAAA,EAAS;AAClD,MAAC,IAAA,CAAK,OAAA,CAA6B,YAAA,CAAa,UAAA,EAAY,MAAM,CAAA;AAAA,IACpE,WAAW,IAAA,CAAK,OAAA,IAAW,wBAAwB,IAAA,CAAK,OAAA,IAAW,OAAO,MAAA,EAAQ;AAEhF,MAAC,IAAA,CAAK,OAAA,CAA6B,kBAAA,CAAmB,UAAA,EAAY,OAAO,MAAM,CAAA;AAAA,IACjF;AAEA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,2BAAA,EAA8B,UAAU,CAAA,sBAAA,CAAwB,CAAA;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,UAAA,EAA0D;AAC5E,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAA,GAAmD;AACjD,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAO,CAAA;AAAA,EACzB;AAAA,EAEQ,gCAAA,CACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,IAAA,EACQ;AACR,IAAA,OAAO;AAAA,MACL,gCAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,+BAA+B,MAAM,CAAA;AAAA,MACrC,GAAI,OAAO,CAAC,GAAA,EAAK,+BAA+B,IAAI,CAAC,IAAI,EAAC;AAAA,MAC1D,QAAA;AAAA,MACA,+BAA+B,QAAQ;AAAA,KACzC,CAAE,KAAK,EAAE,CAAA;AAAA,EACX;AAAA,EAEQ,gCAAA,CACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,SACA,IAAA,EAC0B;AAC1B,IAAA,MAAM,aAAa,IAAA,CAAK,gCAAA,CAAiC,UAAA,EAAY,MAAA,EAAQ,UAAU,IAAI,CAAA;AAC3F,IAAA,MAAM,YAAA,GAAe,eAAe,IAAA,GAAO,CAAA,GAAA,EAAM,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,GAAK,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA;AAC1F,IAAA,MAAM,KAAA,GAAQ,4BAA4B,OAAO,CAAA;AAEjD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,QAAQ,KAAA,IAAS,YAAA;AAAA,MACxB,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,MAChB,aAAA,EAAe,QAAQ,aAAA,IAAiB,GAAA;AAAA,MACxC,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,QAChB,kBAAkB,OAAA,CAAQ;AAAA,OAC5B;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,QAChB,aAAA,EAAe,QAAQ,aAAA,IAAiB,GAAA;AAAA,QACxC,aAAa,OAAA,CAAQ;AAAA,OACvB;AAAA,MACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,MACzB,iBAAA,EAAmB;AAAA,QACjB,UAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC;AACzB,KACF;AAAA,EACF;AAAA,EAEQ,oCAAA,CACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,IAAA,EACQ;AACR,IAAA,OAAO;AAAA,MACL,gCAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,+BAA+B,MAAM,CAAA;AAAA,MACrC,GAAI,OAAO,CAAC,GAAA,EAAK,+BAA+B,IAAI,CAAC,IAAI,EAAC;AAAA,MAC1D,QAAA;AAAA,MACA,+BAA+B,QAAQ;AAAA,KACzC,CAAE,KAAK,EAAE,CAAA;AAAA,EACX;AAAA,EAEQ,iCACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,UAAA,EACA,SACA,IAAA,EAC0B;AAC1B,IAAA,MAAM,aAAa,IAAA,CAAK,oCAAA,CAAqC,UAAA,EAAY,MAAA,EAAQ,UAAU,IAAI,CAAA;AAC/F,IAAA,MAAM,YAAA,GAAe,eAAe,IAAA,GAAO,CAAA,GAAA,EAAM,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,GAAK,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA;AAC1F,IAAA,MAAM,KAAA,GAAQ,4BAA4B,OAAO,CAAA;AAEjD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,QAAQ,KAAA,IAAS,YAAA;AAAA,MACxB,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,MACjB,aAAA,EAAe,QAAQ,aAAA,IAAiB,GAAA;AAAA,MACxC,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,QACjB,kBAAkB,OAAA,CAAQ;AAAA,OAC5B;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,QACjB,aAAA,EAAe,QAAQ,aAAA,IAAiB,GAAA;AAAA,QACxC,aAAa,OAAA,CAAQ;AAAA,OACvB;AAAA,MACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,MACzB,iBAAA,EAAmB;AAAA,QACjB,UAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC;AACzB,KACF;AAAA,EACF;AAAA,EAEQ,iCAAA,CACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,SACA,IAAA,EACgC;AAChC,IAAA,MAAM,SAAS,IAAA,CAAK,gCAAA,CAAiC,YAAY,MAAA,EAAQ,QAAA,EAAU,SAAS,IAAI,CAAA;AAChG,IAAA,IAAA,CAAK,4BAAA,CAA6B,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AACjD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,IAAI,CAAA;AAC3D,IAAA,IACE,CAAC,cAAA,IACD,qCAAA,CAAsC,cAAc,CAAA,KAAM,qCAAA,CAAsC,MAAM,CAAA,EACtG;AACA,MAAA,IAAA,CAAK,sBAAA,CAAuB,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,KAAA,EAAO,gCAAgC,MAAM,CAAA;AAAA,MAC7C,UAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,MAChB,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC,KACzB;AAAA,EACF;AAAA,EAEQ,kCACN,UAAA,EACA,MAAA,EACA,QAAA,EACA,UAAA,EACA,SACA,IAAA,EACgC;AAChC,IAAA,MAAM,MAAA,GAAS,KAAK,gCAAA,CAAiC,UAAA,EAAY,QAAQ,QAAA,EAAU,UAAA,EAAY,SAAS,IAAI,CAAA;AAC5G,IAAA,IAAA,CAAK,4BAAA,CAA6B,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AACjD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,IAAI,CAAA;AAC3D,IAAA,IACE,CAAC,cAAA,IACD,qCAAA,CAAsC,cAAc,CAAA,KAAM,qCAAA,CAAsC,MAAM,CAAA,EACtG;AACA,MAAA,IAAA,CAAK,sBAAA,CAAuB,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,KAAA,EAAO,gCAAgC,MAAM,CAAA;AAAA,MAC7C,UAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,MACjB,MAAA,EAAQ,CAAC,GAAG,UAAU,CAAA;AAAA,MACtB,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC,KACzB;AAAA,EACF;AAAA,EAEQ,iCACN,UAAA,EACA,MAAA,EACA,eAAA,mBAAkB,IAAI,KAAY,EACxB;AACV,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,4BAA4B,CAAA,EAAG;AACtE,MAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAErC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAA;AAClD,MAAA,MAAM,oBAAoB,MAAA,EAAQ,iBAAA;AAClC,MAAA,IACE,iBAAA,EAAmB,UAAA,KAAe,UAAA,IAC/B,iBAAA,CAAkB,WAAW,MAAA,EAChC;AACA,QAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AACtC,QAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,8BAA8B,eAAA,EAAwC;AAC5E,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,4BAA4B,CAAA,EAAG;AACtE,MAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAErC,MAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AACtC,MAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,IACzB;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,yBAAA,CACE,QAAA,EACA,OAAA,GAAoC,EAAC,EACL;AAChC,IAAA,MAAM,kBAAA,GAAqB,+BAA+B,QAAQ,CAAA;AAClE,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,iCAAA;AAAA,MACnB,MAAA;AAAA,MACA,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAC3B,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,yBACE,IAAA,EACA,eAAA,EACA,OAAA,GAAoC,IACpC,kBAAA,EACkC;AAClC,IAAA,MAAM,cAAA,GAAiB,+BAA+B,IAAI,CAAA;AAC1D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,iBAAA,GAAoB,qCAAA,CAAsC,IAAA,CAAK,eAAA,EAAiB,eAAe,CAAA;AACrG,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,IAAA,MAAM,WAAA,GAAc,qCAAA;AAAA,MAClB,cAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,cAAA,GAAiB,wCAAA,CAAyC,cAAA,EAAgB,iBAAA,EAAmB,UAAU,CAAA;AAC7G,IAAA,MAAM,WAAA,GAAc,mCAAA;AAAA,MAClB,cAAA,CAAe,UAAA;AAAA,MACf,kBAAA;AAAA,MACA,cAAA,CAAe;AAAA,KACjB;AAEA,IAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,WAAA,CAAY,WAAW,CAAA,EAAG;AACxD,MAAA,IAAI,cAAA,CAAe,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACxC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,GAAA,EAAM,cAAc,CAAA,mEAAA,CAAqE,CAAA;AAAA,MAC3G;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,GAAA,EAAM,cAAc,CAAA,0CAAA,CAA4C,CAAA;AAAA,IAClF;AAEA,IAAA,MAAM,QAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,QAAQ,CAAA;AACzD,IAAA,MAAM,cAAA,GAAiB,6BAAA,CAA8B,KAAA,EAAO,WAAA,EAAa,OAAO,CAAA;AAEhF,IAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAY;AAC3C,IAAA,KAAA,MAAW,QAAA,IAAY,eAAe,KAAA,EAAO;AAC3C,MAAA,MAAM,aAAa,WAAA,CAAY,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,aAAa,QAAQ,CAAA;AAC5E,MAAA,kBAAA,CAAmB,IAAI,IAAA,CAAK,gCAAA;AAAA,QAC1B,IAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA,GAAa,UAAA,EAAY,IAAA,IAAQ,UAAA,GAAa;AAAA,OAC/C,CAAA;AAAA,IACH;AACA,IAAA,KAAA,MAAW,UAAA,IAAc,eAAe,WAAA,EAAa;AACnD,MAAA,kBAAA,CAAmB,IAAI,IAAA,CAAK,oCAAA;AAAA,QAC1B,IAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAA,CAAW,QAAA;AAAA,QACX,UAAA,CAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,MAAA,IAAA,CAAK,8BAA8B,kBAAkB,CAAA;AAAA,IACvD,WAAW,UAAA,EAAY;AACrB,MAAA,IAAA,CAAK,gCAAA,CAAiC,IAAA,EAAM,cAAA,EAAgB,kBAAkB,CAAA;AAAA,IAChF;AAEA,IAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,KAAA,CAAM,GAAA,CAAI,CAAC,QAAA,KAAa;AAC3D,MAAA,MAAM,aAAa,WAAA,CAAY,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,aAAa,QAAQ,CAAA;AAC5E,MAAA,OAAO,IAAA,CAAK,iCAAA;AAAA,QACV,IAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA,CAAQ,KAAA,GACJ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,EAAG,GACrD,OAAA;AAAA,QACJ,UAAA,GAAa,UAAA,EAAY,IAAA,IAAQ,UAAA,GAAa;AAAA,OAChD;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,eAAe,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,EAAE,QAAA,EAAU,YAAY,gBAAA,EAAkB,IAAA,OAC9F,IAAA,CAAK,iCAAA;AAAA,QACH,IAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA,CAAQ,KAAA,GACJ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,EAAG,GACrD,OAAA;AAAA,QACJ;AAAA;AACF,KACF;AACA,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,aAAA,EAAe,GAAG,aAAa,CAAA;AACrD,IAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAC3B,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAA,GAAoC;AAClC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,4BAA4B,CAAA;AAC5D,IAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,MAAA,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAsB,OAAA,EAAwB;AAC5C,IAAA,IAAA,CAAK,WAAA,EAAa,WAAW,OAAO,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,GAA0B;AACxB,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AAGvB,IAAA,IAAA,CAAK,WAAA,CAAY,aAAA;AAAA,MACf,uBAAA,CAAwB,IAAA,CAAK,oBAAA,EAAsB,CAAA;AAAA,MACnD,KAAK,aAAA,IAAiB;AAAA,KACxB;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,iBAAA,CAAkB,IAAA,CAAK,cAAc,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,QAAA,EAA4C;AACzD,IAAA,IAAA,CAAK,uBAAA,CAAwB,KAAK,QAAQ,CAAA;AAC1C,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,uBAAA,CAAwB,OAAA,CAAQ,QAAQ,CAAA;AAC3D,MAAA,IAAI,QAAQ,EAAA,EAAI,IAAA,CAAK,uBAAA,CAAwB,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,GAAe;AACb,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,MAAM,YAAY,IAAA,CAAK,gBAAA;AACvB,MAAA,MAAM,MAAA,GAAS,UAAU,OAAA,CAAQ,MAAA,CAAO,YAAY,GAAA,EAAI,GAAI,UAAU,SAAS,CAAA;AAC/E,MAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAC3B,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,SAAA,CAAU,QAAQ,OAAA,EAAQ;AAC1B,QAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AACrB,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAC5B,IAAA,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,uBAAA,IAA2B,CAAA;AAGhC,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,cAAc,OAAA,EAAQ;AAC3B,IAAA,MAAM,gBAAA,GAAmB,KAAK,eAAA,IAAkB;AAChD,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAGvB,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAE3B,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAG3B,IAAA,IAAA,CAAK,aAAa,OAAA,EAAQ;AAC1B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAGnB,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAI,kBAAkB,KAAK,gBAAA,CAAiB,KAAK,MAAM,OAAA,EAAS,SAAS,CAAA;AAAA,kBAC3D,OAAA,EAAQ;AAGtB,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AAGtB,IAAA,IAAA,CAAK,0BAA0B,EAAC;AAAA,EAClC;AAAA;AAAA,EAIQ,eAAA,GAAwB;AAC9B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,iBAAA,CAAkB;AAAA,MACvC,WAAW,IAAA,CAAK,iBAAA;AAAA,MAChB,OAAA,EAAS,uBAAA,CAAwB,IAAA,CAAK,oBAAA,EAAsB,CAAA;AAAA,MAC5D,aAAA,EAAe,KAAK,aAAA,IAAiB,MAAA;AAAA,MACrC,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,gBAAgB,IAAA,CAAK,YAAA;AAAA,MACrB,sBAAA,EAAwB,CAAC,OAAA,KAAY,IAAA,CAAK,kBAAkB,OAAO;AAAA,KACpE,CAAA;AAAA,EACH;AAAA,EAEQ,mBAAmB,IAAA,EAAoB;AAC7C,IAAA,IAAA,CAAK,wBAAwB,OAAA,CAAQ,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AACrD,IAAA,IAAA,CAAK,WAAA,EAAa,iBAAiB,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,EAAS,iBAAiB,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,MAAA,EAAkC;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,EAAC;AAEzB,IAAA,MAAM,UAA4B,EAAC;AAGnC,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACjC,MAAA,MAAM,SAA2B,EAAC;AAClC,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,QAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,UAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,QACjB;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,OAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,CAAC,KAAK,KAAK,CAAA;AAAA,IACjD;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,oBAAoB,gBAAA,CAAiB,MAAA,CAAO,OAAO,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AACpG,MAAA,OAAA,CAAQ,KAAK,GAAG,IAAA,CAAK,kBAAA,CAAmB,iBAAA,EAAmB,MAAM,CAAC,CAAA;AAAA,IACpE;AAGA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,OAAA,CAAQ,KAAK,GAAG,IAAA,CAAK,mBAAmB,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IAChE;AAGA,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,KAAK,GAAG,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,kBAAA,CAAmB,OAAiB,IAAA,EAAiC;AAC3E,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,EAAC;AAEzB,IAAA,MAAM,QAA0B,EAAC;AACjC,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAE7B,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAE3B,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA,IAAI,CAAC,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,IAAA,EAAM;AAC9B,UAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,QAChB;AACA,QAAA;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,QAAA,IAAI,eAAe,GAAA,CAAI,IAAA,EAAM,QAAQ,IAAA,CAAK,eAAA,EAAiB,aAAa,CAAA,EAAG;AACzE,UAAA,IAAI,CAAC,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,IAAA,EAAM;AAC9B,YAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAChB;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,6BAA6B,IAAA,EAAqC;AACxE,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AAExB,IAAA,MAAM,GAAA,GAAM,IAAUJ,MAAA,CAAA,IAAA,EAAK;AAG3B,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,IAAI,QAAA,GAAkC,IAAA;AAEtC,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,GAAA;AACb,MAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,QAAA,EAAU;AACvC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC5C,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,SAAA,GAAY,GAAA;AACZ,UAAA,QAAA,GAAW,IAAA,CAAK,QAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,SAAA,KAAc,EAAA,IAAM,CAAC,QAAA,EAAU;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACrC,IAAA,MAAM,OAAA,GAAU,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAClC,IAAA,MAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAErC,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,GAAA;AACb,MAAA,IAAI,CAAC,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,aAAa,QAAA,EAAU;AACvD,MAAA,MAAM,YAAA,GAAe,KAAK,QAAA,CAAS,YAAA;AACnC,MAAA,IAAI,CAAC,YAAA,EAAc;AAGnB,MAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AAErB,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AACrD,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,YAAA,CAAa,WAAW,CAAA;AACvD,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,YAAA,CAAa,YAAY,CAAA;AAEzD,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,aAAA,IAAiB,CAAC,cAAA,EAAgB;AAGxD,MAAA,MAAM,oBAAoB,IAAA,CAAK,iBAAA;AAG/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,OAAO,CAAA,EAAA,EAAK;AAE3C,QAAA,IAAI,YAAA,GAAe,KAAA;AACnB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,UAAA,MAAM,OAAA,GAAU,aAAA,CAAc,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAC/C,UAAA,MAAM,MAAA,GAAS,cAAA,CAAe,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAC/C,UAAA,IAAI,OAAA,KAAY,SAAA,IAAa,MAAA,GAAS,GAAA,EAAK;AACzC,YAAA,YAAA,GAAe,IAAA;AACf,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,YAAA,EAAc;AAEhB,UAAA,UAAA,CAAW,mBAAA,CAAoB,cAAc,CAAC,CAAA;AAI9C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAEnB,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,YAAA,MAAM,OAAA,GAAU,aAAA,CAAc,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAC/C,YAAA,MAAM,MAAA,GAAS,cAAA,CAAe,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAE/C,YAAA,IAAI,SAAS,CAAA,EAAG;AAEd,cAAA,UAAA,CAAW,SAAA,CAAU,YAAA,EAAc,OAAA,GAAU,EAAE,CAAA;AAG/C,cAAA,MAAM,WAAA,GAAc,WAAW,KAAA,EAAM;AACrC,cAAA,WAAA,CAAY,aAAa,iBAAiB,CAAA;AAC1C,cAAA,WAAA,CAAY,aAAa,UAAU,CAAA;AACnC,cAAA,WAAA,CAAY,eAAe,MAAM,CAAA;AAEjC,cAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AAAA,YACzB;AAAA,UACF;AAGA,UAAA,OAAA,CAAQ,YAAA,CAAa,KAAK,WAAW,CAAA;AACrC,UAAA,GAAA,CAAI,cAAc,OAAO,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,GAAA,CAAI,OAAA,EAAQ,GAAI,IAAA,GAAO,GAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,sBAAA,CACN,OAAA,EACA,eAAA,EACA,WAAA,EACA,aAAgC,OAAA,EACjB;AAEf,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAGjC,IAAA,MAAM,GAAA,GAAM,IAAUA,MAAA,CAAA,IAAA,EAAK;AAE3B,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AAEzB,MAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ;AACvB,QAAA,MAAM,IAAA,GAAO,GAAA;AACb,QAAA,MAAM,QAAA,GAAW,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACnC,QAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAG9B,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,4BAAA,CAA6B,IAAI,CAAA;AACtD,QAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,EAAQ,EAAG;AACjC,UAAA,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,QACnB,CAAA,MAAO;AAEL,UAAA,GAAA,CAAI,cAAc,QAAQ,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,cAAc,GAAG,CAAA;AACjD,QAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAQ,EAAG;AACrB,UAAA,GAAA,CAAI,MAAM,MAAM,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,IAAS,WAAA,KAAgB,CAAA,GAC3C,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,GACzC,IAAA;AACJ,IAAA,OAAO,eAAA,CAAgB,2BAAA,EAA4B,CAAE,iBAAA,CAAkB;AAAA,MACrE,WAAA,EAAa,GAAA,CAAI,OAAA,EAAQ,GAAI,MAAA,GAAY;AAAA,QACvC,MAAA,EAAQ,GAAA,CAAI,SAAA,CAAU,IAAUA,gBAAS,CAAA;AAAA,QACzC,IAAA,EAAM,GAAA,CAAI,OAAA,CAAQ,IAAUA,gBAAS;AAAA,OACvC;AAAA,MACA,WAAA,EAAa,QAAA,IAAY,CAAC,QAAA,CAAS,SAAQ,GAAI;AAAA,QAC7C,MAAA,EAAQ,QAAA,CAAS,SAAA,CAAU,IAAUA,gBAAS,CAAA;AAAA,QAC9C,IAAA,EAAM,QAAA,CAAS,OAAA,CAAQ,IAAUA,gBAAS;AAAA,OAC5C,GAAI,MAAA;AAAA,MACJ,iBAAiB,IAAA,CAAK,KAAA,EAAO,kBAAA,CAAmB,IAAUA,mBAAY,CAAA;AAAA,MACtE,UAAA,EAAY,KAAK,MAAA,CAAO,GAAA;AAAA,MACxB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,MACzB,oBAAA,EAAsB,KAAK,MAAA,CAAO,oBAAA;AAAA,MAClC,iBAAA,EAAmB,KAAK,MAAA,CAAO,iBAAA;AAAA,MAC/B,qBAAA,EAAuB,KAAK,MAAA,CAAO,qBAAA;AAAA,MACnC,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAC,CAAA;AAAA,EACJ;AAAA,EAEQ,2BAAA,CACN,MAAA,EACA,eAAA,EACA,WAAA,EACe;AACf,IAAA,MAAM,SAAA,GAAY,KAAK,qBAAA,EAAsB;AAC7C,IAAA,MAAM,aAAa,IAAUA,MAAA,CAAA,IAAA;AAAA,MAC3B,IAAUA,MAAA,CAAA,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAS;AAAA,KACvD;AACA,IAAA,UAAA,CAAW,QAAA,CAAS,KAAK,MAAM,CAAA;AAC/B,IAAA,UAAA,CAAW,kBAAkB,IAAI,CAAA;AAEjC,IAAA,MAAM,gBAAgB,IAAA,CAAK,sBAAA,CAAuB,CAAC,UAAU,CAAA,EAAG,iBAAiB,WAAW,CAAA;AAC5F,IAAA,UAAA,CAAW,SAAS,OAAA,EAAQ;AAC5B,IAAA,OAAO,aAAA;AAAA,EACT;AAAA,EAEQ,qBAAA,GAAgC;AACtC,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAM,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA;AACrD,IAAA,IAAI,GAAA,CAAI,SAAQ,EAAG;AACjB,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAC/B,IAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAChB,IAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AACpD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,YAAA,GAAe,IAAA,EAAM,IAAI,CAAA;AAAA,EAC3C;AAAA,EAEQ,wBAAA,GAA0C;AAChD,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,IAAUA,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,MACvC,MAAA,EAAQ,IAAUA,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAA,EAAyB;AAChD,IAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,IAAA,GAAO,WAAA,EAAY,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAC3E,IAAA,OAAO,cAAA,KAAmB,eACrB,cAAA,KAAmB,UAAA,IACnB,OAAO,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,KAAM,IAAA;AAAA,EACzC;AAAA,EAEQ,gBAAgB,MAAA,EAAyB;AAC/C,IAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,IAAA,GAAO,WAAA,EAAY,CAAE,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AAC9E,IAAA,OAAO,cAAA,KAAmB,UAAA,IACrB,cAAA,KAAmB,SAAA,IACnB,mBAAmB,OAAA,IACnB,cAAA,KAAmB,OAAA,IAClB,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA,IAAK,cAAA,CAAe,SAAS,KAAK,CAAA;AAAA,EACxE;AAAA,EAEQ,sBAAA,GAA6C;AACnD,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,CAAC,WAAW,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAC,CAAA;AAAA,EACnE;AAAA,EAEQ,2BAA2B,MAAA,EAAwB;AACzD,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,aAAA,IAAiB,IAAA,CAAK,MAAA,CAAO,oBAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,gBAAA,GAAmB,4BAAA,EAA8B,0BAA0B,CAAA;AAAA,EAC7F;AAAA,EAEQ,mCAAmC,MAAA,EAAsC;AAC/E,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA;AAChD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,sBAAA;AAAA,MACpB,OAAA;AAAA,MACA,IAAA,CAAK,2BAA2B,MAAM,CAAA;AAAA,MACtC,wBAAA,CAAyB,MAAA,EAAQ,IAAA,CAAK,UAAU;AAAA,KAClD;AAEA,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AACtE,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AACtE,MAAA,IAAI,OAAO,YAAA,CAAa,CAAA,WAAY,QAAA,CAAS,CAAA,IAAK,OAAO,YAAA,CAAa,CAAA;AAAA,IACxE;AAEA,IAAA,OAAO,IAAA,CAAK,iCAAiC,QAAQ,CAAA;AAAA,EACvD;AAAA,EAEQ,iCAAiC,QAAA,EAAwC;AAC/E,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA;AAC1D,IAAA,IAAI,QAAA,CAAS,SAAQ,EAAG;AACtB,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACpC,IAAA,QAAA,CAAS,QAAQ,SAAS,CAAA;AAC1B,IAAA,MAAM,eAAe,IAAA,CAAK,GAAA;AAAA,MACxB,UAAU,CAAA,GAAI,kCAAA;AAAA,MACd;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,KAAA,EAAM;AACzC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,KAAA,EAAM;AACrC,IAAA,QAAA,CAAS,CAAA,IAAK,YAAA;AACd,IAAA,MAAA,CAAO,CAAA,IAAK,YAAA;AAEZ,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA,EAAU,QAAA,CAAS,UAAA,CAAW,MAAM;AAAA,KACtC;AAAA,EACF;AAAA,EAEQ,8BAAA,CACN,eAAA,EACA,WAAA,EACA,UAAA,GAAgC,OAAA,EACjB;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,KAAK,wBAAA,EAAyB;AAEtD,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AACjC,IAAA,MAAM,MAAM,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA;AACrD,IAAA,IAAI,GAAA,CAAI,OAAA,EAAQ,EAAG,OAAO,KAAK,wBAAA,EAAyB;AAExD,IAAA,OAAO,eAAA,CAAgB,2BAAA,EAA4B,CAAE,oBAAA,CAAqB;AAAA,MACxE,QAAQ,GAAA,CAAI,GAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,GAAA;AAAA,MACZ,iBAAiB,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,IAAUA,mBAAY,CAAA;AAAA,MACrE,UAAA,EAAY,KAAK,MAAA,CAAO,GAAA;AAAA,MACxB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,MACzB,qBAAA,EAAuB,KAAK,MAAA,CAAO,qBAAA;AAAA,MACnC,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAC,CAAA;AAAA,EACJ;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,2BAA2B,IAAA,CAAK,KAAA,EAAO,KAAK,OAAA,EAAS,qBAAA,CAAsB,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,EACpH;AAAA;AAAA,EAGQ,mBAAA,CAAoBG,UAAiB,KAAA,EAAuC;AAClF,IAAA,OAAO,CAAC,IAAA,CAAK,QAAA,IAAYA,aAAY,IAAA,CAAK,oBAAA,IAAwB,UAAU,IAAA,CAAK,KAAA;AAAA,EACnF;AAAA;AAAA,EAGA,MAAc,kBAAA,GAA6C;AACzD,IAAA,MAAMA,QAAAA,GAAU,EAAE,IAAA,CAAK,uBAAA;AACvB,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,IAAA;AAC1B,IAAA,MAAM,uBAAA,EAAwB;AAC9B,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuBA,QAAO,CAAA,GAAIA,QAAAA,GAAU,IAAA;AAAA,EAC1D;AAAA,EAEQ,uBAAuBA,QAAAA,EAA0B;AACvD,IAAA,OAAO,CAAC,IAAA,CAAK,QAAA,IAAYA,QAAAA,KAAY,IAAA,CAAK,uBAAA;AAAA,EAC5C;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAA,CAAK,2BAAA,IAA+B,CAAA;AACpC,IAAA,MAAM,YAAY,IAAA,CAAK,gBAAA;AACvB,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,QAAQ,OAAA,EAAQ;AAC1B,MAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,gBAAgB,IAAA,EAAwB;AAC9C,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC1E,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAAA,EACtE;AAAA,EAEQ,mBAAmB,OAAA,EAA6C;AACtE,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,SAAS,MAAA,EAAO;AACrB,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAChB,MAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB;AAEA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,IAAA,CAAK,mBAAmB,EAAE,SAAA,EAAW,YAAY,GAAA,EAAI,EAAG,SAAS,OAAA,EAAQ;AACzE,MAAA,IAAA,CAAK,8BAAA,CAA+B,MAAM,IAAA,CAAK,gBAAA,KAAqB,IAAI,CAAA;AAAA,IAC1E,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,aAAA,CACN,cAAA,EACA,YAAA,EACA,QAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,2BAAA,EAA4B,CAAE,kBAAA;AAAA,MAC3D,KAAK,MAAA,CAAO,QAAA;AAAA,MACZ,KAAK,QAAA,CAAS,MAAA;AAAA,MACd,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACpiFO,IAAM,UAAN,MAAc;AAAA,EAKnB,YAAY,OAAA,EAAwB;AAJpC,IAAA,aAAA,CAAA,IAAA,EAAiB,kBAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAQ,aAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAA+B,IAAA,CAAA;AAGrC,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,WAAA,IAAe,IAAA;AAC1C,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,uBAAA,CAAwB;AAAA,MAClD,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,eAAA,EAAiB,QAAQ,YAAA,IAAgB,KAAA;AAAA,MACzC,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,GAAG,OAAA,CAAQ;AAAA,KACZ,CAAA;AACD,IAAA,IAAA,CAAK,gBAAA,CAAiB,kBAAkB,IAAI,CAAA;AAAA,EAC9C;AAAA,EAEA,SAAS,KAAA,EAA6B;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,KAAK,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,MAAA,EAAwC;AAC1D,IAAA,IAAA,CAAK,WAAA,GAAc,MAAA,CAAO,WAAA,IAAe,IAAA,CAAK,WAAA;AAC9C,IAAA,MAAM,IAAA,CAAK,iBAAiB,WAAA,CAAY,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,CAAA;AACpF,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,KAAA,CAAM,YAAoB,QAAA,EAAkC;AAAE,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,WAAA,CAAY,UAAA,EAAY,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC9H,UAAA,GAAuB;AAAE,IAAA,OAAO,IAAA,CAAK,iBAAiB,cAAA,EAAe;AAAA,EAAG;AAAA,EACxE,gBAAA,GAAkC;AAAE,IAAA,OAAO,IAAA,CAAK,iBAAiB,gBAAA,EAAiB;AAAA,EAAG;AAAA,EACrF,eAAe,KAAA,EAA0B;AAAE,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAAO,IAAA,IAAA,CAAK,gBAAA,CAAiB,eAAe,KAAK,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC/H,kBAAkB,OAAA,EAAwB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,kBAAkB,OAAO,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC3G,mBAAmB,OAAA,EAAwB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,sBAAsB,OAAO,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAChH,cAAA,GAAiB;AAAE,IAAA,OAAO,IAAA,CAAK,iBAAiB,cAAA,EAAe;AAAA,EAAG;AAAA,EAClE,cAAA,CAAe,QAAA,EAAoC,MAAA,EAAkC,QAAA,EAA0B;AAC7G,IAAA,IAAA,CAAK,gBAAA,CAAiB,cAAA,CAAe,EAAE,QAAA,EAAU,QAAQ,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EACrE;AAAA,EACA,IAAI,UAAA,GAAsC;AAAE,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EAAkB;AAAA,EAC1E,MAAA,GAAe;AAAE,IAAA,IAAA,CAAK,iBAAiB,MAAA,EAAO;AAAA,EAAG;AAAA,EACjD,YAAA,CAAa,MAAc,QAAA,EAAyB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,YAAA,CAAa,IAAA,EAAM,QAAQ,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EACvH,cAAA,CAAe,MAAc,QAAA,EAAyB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,cAAA,CAAe,IAAA,EAAM,QAAQ,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC3H,YAAA,CAAa,IAAA,EAAc,SAAA,GAA6B,SAAA,EAAW,QAAA,EAAyB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,YAAA,CAAa,IAAA,EAAM,SAAA,EAAW,QAAQ,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC1K,kBAAA,GAA4C;AAAE,IAAA,OAAO,IAAA,CAAK,iBAAiB,kBAAA,EAAmB;AAAA,EAAG;AAAA,EACjG,WAAW,IAAA,EAA2B;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,IAAI,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC7F,eAAA,GAAiC;AAAE,IAAA,OAAO,IAAA,CAAK,iBAAiB,eAAA,EAAgB;AAAA,EAAG;AAAA,EACnF,kBAAA,CAAmB,MAAc,IAAA,EAAiC;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,kBAAA,CAAmB,IAAA,EAAM,IAAI,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EACvI,cAAA,CAAe,MAAc,KAAA,EAA4C;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC3I,OAAA,GAAgB;AAAE,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAAG,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtE,iBAAA,CACE,eACA,cAAA,EAC2B;AAC3B,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,EAAC,EAAG,SAAS,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AAAA,QAChD,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAC,EAAG,SAAS,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AAAA,QACjD,QAAQ,EAAE,KAAA,EAAO,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,QAC9B,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAGA,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,MAAM,YAAA,uBAA0C,GAAA,EAAI;AACpD,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,MAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,QAAA,WAAA,CAAY,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,MAC3B;AACA,MAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,QAAA,MAAM,IAAA,GAAO,GAAA;AACb,QAAA,SAAA,CAAU,IAAA,CAAK,KAAK,IAAI,CAAA;AACxB,QAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,UAAA,YAAA,CAAa,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,MAAA,KAAW,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAG9E,IAAA,MAAM,UAAA,GAAiC,EAAE,KAAA,EAAO,EAAC,EAAG,SAAS,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AAChF,IAAA,MAAM,iBAAA,GAAoB,IAAI,GAAA,CAAI,aAAA,GAAgB,OAAO,MAAA,CAAO,aAAa,CAAA,GAAI,EAAE,CAAA;AACnF,IAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,WAAW,CAAA;AAEzC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AAChE,QAAA,IAAI,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC/B,UAAA,UAAA,CAAW,MAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,QAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,CAAA;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAChC,QAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,MAC3C;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAkC,EAAE,KAAA,EAAO,EAAC,EAAG,SAAS,EAAC,EAAG,UAAA,EAAY,EAAC,EAAE;AACjF,IAAA,MAAM,gBAAA,GAAmB,IAAI,GAAA,CAAI,cAAA,IAAkB,EAAE,CAAA;AAErD,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,KAAA,MAAW,aAAa,cAAA,EAAgB;AACtC,QAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAA,EAAG;AAClC,UAAA,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,QAC5C,CAAA,MAAO;AACL,UAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,MAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA,EAAG;AAChC,QAAA,WAAA,CAAY,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,MAAA,KAAW,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,MAAA,KAAW,CAAA;AACnD,IAAA,MAAM,QAAQ,UAAA,IAAc,WAAA;AAG5B,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,cAAA,CAAgB,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA,eAAA,CAAiB,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACpC,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,UAAA,CAAW,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,IACjE;AACA,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,OAAA,GAAU,KAAA,GACZ,CAAA,OAAA,EAAU,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,QAAA,EAAW,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA,OAAA,CAAA,GACpE,YAAA,CAAa,KAAK,IAAI,CAAA;AAE1B,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,WAAA;AAAA,MACR,QAAQ,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAU,MAAA,EAAO;AAAA,MACpD;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAyB;AACvB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAA,CAAK,KAAA,EAAO,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC5B,MAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,QAAA,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,MACrB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAA0B;AACxB,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,IAAA,IAAA,CAAK,KAAA,EAAO,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC5B,MAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,QAAA,MAAM,IAAA,GAAO,GAAA;AACb,QAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,UAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,qBAAqB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,QACtE;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAyB;AACvB,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAA,CAAK,KAAA,EAAO,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC5B,MAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;ACtQO,IAAM,iBAAN,MAAqB;AAAA,EAc1B,YAAY,MAAA,EAKT;AAlBH,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,sBAAyC,GAAA,EAAI,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,sBAA0C,GAAA,EAAI,CAAA;AACtD,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAA+B,IAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAoB,EAAC,CAAA;AAC7B,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAA0C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,EAA+B,IAAA,CAAA;AAuNvC,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,CAAC,KAAA,KAA4B;AAAA,IAG/C,CAAA,CAAA;AAlNE,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACvB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAUE,MAAA,CAAA,SAAA,EAAU;AAGrC,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACnD,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAWrC,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAC/B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,gBAAA,CAAiB,MAAM,CAAA;AAC5C,MAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EAAU;AAC/B,QAAA,MAAA,CAAO,MAAM,QAAA,GAAW,UAAA;AAAA,MAC1B;AACA,MAAA,MAAA,CAAO,WAAA,CAAY,KAAK,eAAe,CAAA;AAAA,IACzC;AAGA,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,EACxD;AAAA,EAEA,SAAS,KAAA,EAA6B;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,YAAY,MAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAElC,IAAA,KAAA,MAAW,MAAA,IAAW,MAAA,CAAO,OAAA,IAAW,EAAC,EAAI;AAC3C,MAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,iBAAiB,IAAA,EAA2B;AAC1C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA,EAEQ,aAAa,MAAA,EAAsB;AACzC,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAGjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAC5C,IAAA,IAAI,CAAC,QAAA,EAAU;AAGf,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,SAAA,GAAY,mBAAA;AAClB,IAAA,KAAA,CAAM,OAAA,CAAQ,aAAa,MAAA,CAAO,IAAA;AAClC,IAAA,KAAA,CAAM,SAAA,GAAY;AAAA;AAAA,gCAAA,EAEY,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAAA,CAAA;AAE1D,IAAA,KAAA,CAAM,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAqBtB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,aAAA,CAAc,aAAa,CAAA;AAC7C,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,GAAA,CAAI,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA;AAAA,IAOtB;AAGA,IAAA,KAAA,CAAM,gBAAA,CAAiB,cAAc,MAAM;AACzC,MAAA,KAAA,CAAM,MAAM,UAAA,GAAa,yBAAA;AACzB,MAAA,KAAA,CAAM,MAAM,WAAA,GAAc,SAAA;AAAA,IAC5B,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,gBAAA,CAAiB,cAAc,MAAM;AACzC,MAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,MAAA,CAAO,IAAA,EAAM;AACtC,QAAA,KAAA,CAAM,MAAM,UAAA,GAAa,oBAAA;AACzB,QAAA,KAAA,CAAM,MAAM,WAAA,GAAc,0BAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,KAAA,CAAM,gBAAA,CAAiB,OAAA,EAAS,CAAC,CAAA,KAAM;AACrC,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,IAAA,CAAK,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IAC3B,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,eAAA,CAAgB,YAAY,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAGlC,IAAC,KAAA,CAAc,UAAA,GAAa,QAAA,CAAS,KAAA,EAAM;AAAA,EAC7C;AAAA,EAEQ,gBAAgB,MAAA,EAAsC;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AAExB,IAAA,MAAM,GAAA,GAAM,IAAUA,MAAA,CAAA,IAAA,EAAK;AAC3B,IAAA,IAAI,UAAA,GAAa,KAAA;AAGjB,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACjC,MAAA,GAAA,CAAI,cAAA,CAAe,KAAK,KAAK,CAAA;AAC7B,MAAA,UAAA,GAAa,IAAA;AAAA,IACf,CAAA,MAAO;AAEL,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAM,iBAAA,GAAoB,iBAAiB,MAAA,CAAO,KAAA,EAAO,sBAAsB,IAAA,CAAK,eAAe,KAAK,MAAS,CAAA;AACjH,QAAA,KAAA,MAAW,YAAY,iBAAA,EAAmB;AACxC,UAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,YAAA,IAAI,eAAe,GAAA,CAAI,IAAA,EAAM,UAAU,IAAA,CAAK,eAAA,EAAiB,aAAa,CAAA,EAAG;AAC3E,cAAA,MAAM,QAAA,GAAW,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACnC,cAAA,GAAA,CAAI,iBAAiB,QAAQ,CAAA;AAC7B,cAAA,GAAA,CAAI,cAAc,QAAQ,CAAA;AAC1B,cAAA,UAAA,GAAa,IAAA;AAAA,YACf;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAIA,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,KAAA,MAAW,QAAA,IAAY,OAAO,MAAA,EAAQ;AACpC,UAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AAC3B,YAAA,IAAI,GAAA,CAAI,IAAA,KAAS,QAAA,IAAa,GAAA,CAAmB,MAAA,EAAQ;AACvD,cAAA,GAAA,CAAI,eAAe,GAAG,CAAA;AACtB,cAAA,UAAA,GAAa,IAAA;AAAA,YACf;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,UAAA,IAAc,GAAA,CAAI,OAAA,IAAW,OAAO,IAAA;AAEzC,IAAA,MAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACjC,IAAA,GAAA,CAAI,UAAU,MAAM,CAAA;AAIpB,IAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,IAAa,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAEhE,MAAA,MAAM,WAAW,IAAUA,MAAA,CAAA,IAAA,EAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACpC,MAAA,QAAA,CAAS,QAAQ,SAAS,CAAA;AAG1B,MAAA,MAAM,cAAA,GAAiB,UAAU,CAAA,GAAI,GAAA;AAGrC,MAAA,MAAM,QAAA,GAAY,MAAA,CAAO,WAAA,GAAc,IAAA,CAAK,EAAA,GAAM,GAAA;AAClD,MAAA,MAAA,CAAO,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,cAAA;AACjC,MAAA,MAAA,CAAO,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,cAAA;AAAA,IACnC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,WAAW,IAAA,EAAsB;AACvC,IAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,KAAK,GAAG,CAAA;AAAA,EACb;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,KAAK,MAAA,EAAQ;AACvC,MAAA,IAAI,IAAA,KAAS,KAAK,aAAA,EAAe;AAC/B,QAAA,KAAA,CAAM,MAAM,UAAA,GAAa,yBAAA;AACzB,QAAA,KAAA,CAAM,MAAM,WAAA,GAAc,SAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,MAAM,UAAA,GAAa,oBAAA;AACzB,QAAA,KAAA,CAAM,MAAM,WAAA,GAAc,0BAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAA,GAAe;AACb,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAEjB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,qBAAA,EAAsB;AAInD,IAAA,MAAM,WAAA,GAAc,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACtC,IAAA,IAAUA,aAAK,CAAE,aAAA,CAAc,KAAK,KAAK,CAAA,CAAE,UAAU,WAAW,CAAA;AAGhE,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,WAAA,CAAY,CAAA;AAChD,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,WAAA,CAAY,CAAA;AAChD,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,WAAA,CAAY,CAAA;AAChD,IAAA,MAAM,cAAA,GAAiB,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAC5D,IAAA,MAAM,aAAa,EAAA,GAAK,cAAA;AACxB,IAAA,MAAM,aAAa,EAAA,GAAK,cAAA;AACxB,IAAA,MAAM,aAAa,EAAA,GAAK,cAAA;AAExB,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,IAAI,EAAE,CAAA,IAAK,MAAM,IAAA,CAAK,EAAA,CAAA;AAGrD,IAAA,MAAM,gBAAsF,EAAC;AAE7F,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,KAAK,MAAA,EAAQ;AACvC,MAAA,MAAM,WAAY,KAAA,CAAc,UAAA;AAChC,MAAA,IAAI,CAAC,QAAA,EAAU;AAGf,MAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AACrD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAC1C,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,QACtB;AAAA,MACF;AAGA,MAAA,MAAM,YAAY,QAAA,CAAS,KAAA,EAAM,CAAE,OAAA,CAAQ,KAAK,MAAM,CAAA;AAGtD,MAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,QAAA,KAAA,CAAM,MAAM,OAAA,GAAU,MAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,GAAU,IAAA;AAId,MAAA,IAAI,MAAA,EAAQ,WAAA,KAAgB,MAAA,IAAa,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACjE,QAAA,OAAA,GAAU,2BAAA,CAA4B;AAAA,UACpC,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,kBAAA,EAAoB;AAAA,SACrB,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,GAAI,WAAA,CAAY,CAAA;AAC5C,QAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,GAAI,WAAA,CAAY,CAAA;AAC5C,QAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,GAAI,WAAA,CAAY,CAAA;AAG5C,QAAA,MAAM,GAAA,GAAM,UAAA,GAAa,UAAA,GAAa,UAAA,GAAa,aAAa,UAAA,GAAa,UAAA;AAC7E,QAAA,OAAA,GAAU,GAAA,GAAM,KAAA;AAAA,MAClB;AAEA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,KAAA,CAAM,MAAM,OAAA,GAAU,MAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,MAAM,OAAA,GAAU,MAAA;AAGtB,MAAA,MAAM,CAAA,GAAA,CAAK,SAAA,CAAU,CAAA,GAAI,GAAA,GAAM,OAAO,IAAA,CAAK,KAAA;AAC3C,MAAA,MAAM,KAAK,CAAC,SAAA,CAAU,CAAA,GAAI,GAAA,GAAM,OAAO,IAAA,CAAK,MAAA;AAE5C,MAAA,aAAA,CAAc,KAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,WAAA,GAAc,EAAA;AACpB,IAAA,MAAM,UAAA,GAAa,EAAA;AACnB,IAAA,MAAM,cAAA,GAAiB,CAAA;AACvB,IAAA,MAAM,gBAAA,GAAmB,EAAA;AAGzB,IAAA,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AAGnD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AACjD,QAAA,MAAM,CAAA,GAAI,cAAc,CAAC,CAAA;AACzB,QAAA,MAAM,CAAA,GAAI,cAAc,CAAC,CAAA;AAEzB,QAAA,MAAMC,MAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAC,CAAA;AAC7B,QAAA,MAAMC,MAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAC,CAAA;AAG7B,QAAA,IAAID,GAAAA,GAAK,UAAA,IAAcC,GAAAA,GAAK,WAAA,GAAc,cAAA,EAAgB;AAExD,UAAA,MAAM,QAAA,GAAY,cAAc,cAAA,GAAkBA,GAAAA;AAClD,UAAA,MAAM,QAAA,GAAY,aAAa,gBAAA,GAAoBD,GAAAA;AAGnD,UAAA,IAAI,WAAW,CAAA,EAAG;AAEhB,YAAA,MAAM,OAAA,GAAU,WAAW,CAAA,GAAI,cAAA;AAC/B,YAAA,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,EAAG;AACb,cAAA,CAAA,CAAE,CAAA,IAAK,OAAA;AACP,cAAA,CAAA,CAAE,CAAA,IAAK,OAAA;AAAA,YACT,CAAA,MAAO;AACL,cAAA,CAAA,CAAE,CAAA,IAAK,OAAA;AACP,cAAA,CAAA,CAAE,CAAA,IAAK,OAAA;AAAA,YACT;AAAA,UACF;AAGA,UAAA,IAAIA,GAAAA,GAAK,UAAA,GAAa,GAAA,IAAO,QAAA,GAAW,CAAA,EAAG;AACzC,YAAA,MAAM,OAAA,GAAU,WAAW,CAAA,GAAI,gBAAA;AAC/B,YAAA,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,EAAG;AACb,cAAA,CAAA,CAAE,KAAK,OAAA,GAAU,GAAA;AACjB,cAAA,CAAA,CAAE,KAAK,OAAA,GAAU,GAAA;AAAA,YACnB,CAAA,MAAO;AACL,cAAA,CAAA,CAAE,KAAK,OAAA,GAAU,GAAA;AACjB,cAAA,CAAA,CAAE,KAAK,OAAA,GAAU,GAAA;AAAA,YACnB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,MAAO,aAAA,EAAe;AAC3C,MAAA,KAAA,CAAM,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA;AACvB,MAAA,KAAA,CAAM,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,OAAA,GAAU,OAAA,GAAU,OAAA,GAAU,MAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO,EAAG;AACxC,MAAA,KAAA,CAAM,MAAA,EAAO;AAAA,IACf;AACA,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAClB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAA,CAAoB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,gBAAgB,MAAA,EAAO;AAAA,EAC9B;AACF;;;ACxZO,IAAM,2BAAA,GAA8B;AAC3C,IAAM,4BAAA,GAA+B,IAAA;AACrC,IAAM,gCAAA,GAAmC,GAAA;AAelC,SAAS,mCACd,MAAA,EAC8B;AAC9B,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA;AAAA,IACpC,aAAA,EAAe,MAAA,EAAQ,eAAA,GAAkB,4BAAA,GAA+B;AAAA,GAC1E;AACF;AAEO,SAAS,+BAAA,CACd,aAAA,EACA,iBAAA,GAAoB,2BAAA,EACpB;AACA,EAAA,IAAI,WAAA,GAAoD,IAAA;AACxD,EAAA,IAAI,aAAA,GAAsD,IAAA;AAE1D,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,YAAA,CAAa,WAAW,CAAA;AACxB,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,oBAAoB,OAAA,EAAwB;AAC1C,MAAA,WAAA,EAAY;AACZ,MAAA,aAAA,EAAc,EAAG,kBAAkB,OAAO,CAAA;AAAA,IAC5C,CAAA;AAAA,IAEA,uBAAA,GAAgC;AAC9B,MAAA,WAAA,EAAY;AACZ,MAAA,aAAA,EAAc,EAAG,kBAAkB,KAAK,CAAA;AAAA,IAC1C,CAAA;AAAA,IAEA,oBAAA,CAAqB,OAAA,GAAwC,EAAC,EAAS;AACrE,MAAA,WAAA,EAAY;AAEZ,MAAA,MAAM,aAAa,aAAA,EAAc;AACjC,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,MAAM,SAAS,MAAM;AACnB,QAAA,WAAA,GAAc,IAAA;AAEd,QAAA,IAAI,aAAA,OAAoB,UAAA,EAAY;AAClC,UAAA;AAAA,QACF;AAEA,QAAA,UAAA,CAAW,cAAA,CAAe,OAAA,CAAQ,WAAA,IAAe,IAAI,CAAA;AACrD,QAAA,UAAA,CAAW,kBAAkB,IAAI,CAAA;AAEjC,QAAA,aAAA,GAAgB,WAAW,MAAM;AAC/B,UAAA,aAAA,GAAgB,IAAA;AAEhB,UAAA,IAAI,aAAA,OAAoB,UAAA,EAAY;AAClC,YAAA;AAAA,UACF;AAEA,UAAA,UAAA,CAAW,kBAAkB,KAAK,CAAA;AAAA,QACpC,CAAA,EAAG,OAAA,CAAQ,UAAA,IAAc,iBAAiB,CAAA;AAAA,MAC5C,CAAA;AAEA,MAAA,IAAI,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,aAAA,GAAgB,CAAA,EAAG;AACtD,QAAA,WAAA,GAAc,UAAA,CAAW,MAAA,EAAQ,OAAA,CAAQ,aAAa,CAAA;AACtD,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,EAAO;AAAA,IACT,CAAA;AAAA,IAEA,OAAA,GAAgB;AACd,MAAA,WAAA,EAAY;AAAA,IACd;AAAA,GACF;AACF;;;AClGO,IAAM,6BAAA,GAAgC;AAUtC,SAAS,wCAAwC,OAAA,EAAmD;AACzG,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,KAAA,GAA8C,IAAA;AAClD,EAAA,MAAM,aAAa,MAAM;AAAE,IAAA,IAAI,KAAA,KAAU,IAAA,EAAM,YAAA,CAAa,KAAK,CAAA;AAAG,IAAA,KAAA,GAAQ,IAAA;AAAA,EAAM,CAAA;AAClF,EAAA,MAAM,MAAM,MAAM;AAChB,IAAA,UAAA,EAAW;AACX,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAA,GAAS,KAAA;AACT,IAAA,OAAA,CAAQ,YAAA,IAAe;AAAA,EACzB,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,UAAA,EAAW;AACX,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,cAAA,IAAiB,IAAK,6BAAA;AAC/C,IAAA,IAAI,QAAA,IAAY,CAAA,IAAK,CAAC,MAAA,EAAQ;AAC9B,IAAA,KAAA,GAAQ,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,EAClC,CAAA;AACA,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,eAAe,KAAA,EAAO;AAC1B,MAAA,IAAI,OAAA,CAAQ,eAAc,EAAG;AAC7B,MAAA,MAAM,SAAA,GAAY,MAAA;AAClB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAI,CAAC,SAAA,IAAa,YAAA,EAAc,OAAA,CAAQ,cAAA,IAAiB;AACzD,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAU,MAAM,MAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACX;AACF;;;ACrCA,SAASE,eAAc,KAAA,EAAkD;AACvE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,gBAAgB,KAAA,EAA0B;AACjD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,EAAC;AACnC,EAAA,OAAO,MAAM,OAAA,CAAQ,CAAC,KAAA,KAAU,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,GAAI,CAAC,KAAA,CAAM,IAAA,EAAM,CAAA,GAAI,EAAE,CAAA;AACjG;AAEA,SAAS,kBAAkB,KAAA,EAAkD;AAC3E,EAAA,MAAM,aAAa,KAAA,CAChB,OAAA,CAAQ,iBAAA,EAAmB,OAAO,EAClC,WAAA,EAAY;AACf,EAAA,MAAM,SAAS,UAAA,CAAW,KAAA,CAAM,YAAY,CAAA,CAAE,OAAO,OAAO,CAAA;AAC5D,EAAA,MAAM,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AAC9D,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AAEhE,EAAA,IAAI,OAAA,KAAY,UAAU,OAAO,MAAA;AACjC,EAAA,OAAO,UAAU,MAAA,GAAS,OAAA;AAC5B;AAEA,SAAS,OAAA,CAAQ,OAAmC,IAAA,EAAqB;AACvE,EAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAA,IAAW,SAAS,QAAA,EAAU;AAC5D,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,EAChB;AACF;AAEO,SAAS,iCAAA,CACd,MACA,OAAA,EACmC;AACnC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,EAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,EAAA,MAAM,aAAaA,cAAAA,CAAc,aAAA,CAAc,UAAU,CAAA,GAAI,aAAA,CAAc,aAAa,EAAC;AACzF,EAAA,MAAM,YAAYA,cAAAA,CAAc,aAAA,CAAc,SAAS,CAAA,GAAI,aAAA,CAAc,YAAY,EAAC;AACtF,EAAA,MAAM,YAAA,GAAe,WAAW,KAAK,CAAA;AAErC,EAAA,IAAIA,cAAAA,CAAc,YAAY,CAAA,EAAG;AAC/B,IAAA,IAAI,eAAA,CAAgB,aAAa,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA;AACnE,IAAA,IAAI,eAAA,CAAgB,aAAa,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG,KAAA,CAAM,IAAI,OAAO,CAAA;AACrE,IAAA,IAAI,eAAA,CAAgB,aAAa,MAAM,CAAA,CAAE,SAAS,CAAA,EAAG,KAAA,CAAM,IAAI,QAAQ,CAAA;AAAA,EACzE,CAAA,MAAO;AACL,IAAA,KAAA,MAAW,SAAA,IAAa,eAAA,CAAgB,YAAY,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,KAAA,EAAO,iBAAA,CAAkB,SAAS,CAAC,CAAA;AAAA,IAC7C;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,UAAU,KAAK,CAAA;AACpC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC/B,IAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,MAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,OAAA,CAAQ,KAAA,EAAO,iBAAA,CAAkB,OAAO,CAAC,CAAA;AAAA,MAC3C,CAAA,MAAA,IAAWA,cAAAA,CAAc,OAAO,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,KAAA,EAAO,QAAQ,IAAI,CAAA;AAC3B,QAAA,MAAM,OAAO,OAAA,CAAQ,IAAA,IAAQ,QAAQ,QAAA,IAAY,OAAA,CAAQ,QAAQ,OAAA,CAAQ,IAAA;AACzE,QAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAA,CAAQ,KAAA,EAAO,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAO,CAAA;AACpF,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,aAAa,CAAC,CAAA;AACpD,EAAA,IAAI,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,OAAO,MAAA;AACpC,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,GAAI,QAAA,GAAW,MAAA;AAC1C;AAMO,SAAS,2BAAA,CACd,KAAA,EACA,KAAA,EACA,KAAA,EACA,QAAA,EACQ;AACR,EAAA,IAAI,QAAA,KAAa,KAAA,IAAS,QAAA,KAAa,KAAA,EAAO;AAC5C,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,KAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,KAAA;AACtB,EAAA,OAAO,KAAA;AACT;AC1EA,IAAM,OAAO,CAAC,KAAA,KAAmB,KAAK,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AAC3D,SAASL,QAAAA,CAAW,EAAA,EAAY,OAAA,GAAmB,EAAC,EAAM;AACxD,EAAA,OAAO,IAAA,CAAK,KAAA,CAAMM,4BAAAA,EAA6B,CAAE,cAAA,CAAe,IAAA,CAAK,EAAE,EAAA,EAAI,OAAA,EAAS,CAAC,CAAC,CAAA;AACxF;AAEO,IAAM,YAAY,CAAC,EAAA,KAAwCN,SAAQ,YAAA,EAAc,EAAE,IAAI;AACvF,IAAM,kCAAkC,CAAuC,MAAA,KAAiBA,SAAQ,sBAAA,EAAwB,EAAE,QAAQ;AAC1I,IAAM,0BAA0B,CAAC,MAAA,KAA+DA,SAAQ,0BAAA,EAA4B,EAAE,QAAQ;AAC9I,IAAM,2BAAA,GAA8B,CAAC,IAAA,EAAiB,QAAA,KAAkCA,SAAQ,sBAAA,EAAwB,EAAE,IAAA,EAAM,QAAA,EAAU;AAC1I,IAAM,wBAAA,GAA2B,CAAC,OAAA,EAAwB,IAAA,KAA2BA,SAAQ,2BAAA,EAA6B,EAAE,OAAA,EAAS,IAAA,EAAM;AAC3I,IAAM,wBAAA,GAA2B,MAAmCA,QAAAA,CAAQ,2BAA2B;AACvG,IAAM,iBAAA,GAAoB,CAAC,OAAA,EAAwB,IAAA,EAAc,IAAA,EAAmC,OAAA,KAAmDA,QAAAA,CAAQ,2BAAA,EAA6B,EAAE,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,SAAS;AAC5N,IAAM,sBAAA,GAAyB,CAAC,OAAA,EAAwB,IAAA,EAA6B,QAAA,KAA2CA,QAAAA,CAAQ,gCAAA,EAAkC,EAAE,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU;AACrM,IAAM,kCAAkC,CAAC,OAAA,KAAqEA,SAAQ,yCAAA,EAA2C,EAAE,SAAS;AAE5K,IAAM,kBAAA,GAAqB,CAAC,OAAA,EAAwB,IAAA,KAA0BA,SAAQ,4BAAA,EAA8B,EAAE,OAAA,EAAS,IAAA,EAAM;AACrI,IAAM,SAAA,GAAY,CAAC,OAAA,EAAwB,IAAA,KAA0BA,SAAQ,mBAAA,EAAqB,EAAE,OAAA,EAAS,IAAA,EAAM;AACnH,IAAM,uBAAuB,CAAC,OAAA,KAAiEA,SAAQ,wBAAA,EAA0B,EAAE,SAAS;AAE5I,IAAM,oCAAoC,CAAC,MAAA,KAAiDA,SAAQ,6BAAA,EAA+B,EAAE,QAAQ;AAC7I,IAAM,kBAAA,GAAqB,CAAC,QAAA,EAAkB,OAAA,KAAiD,OAAA,GAAUA,QAAAA,CAAQ,kBAAA,EAAoB,EAAE,OAAA,EAAS,QAAA,EAAU,CAAA,GAAI;AAC9J,IAAM,iBAAA,GAAoB,CAAC,OAAA,EAAwB,QAAA,KAA6EA,SAAQ,oBAAA,EAAsB,EAAE,OAAA,EAAS,QAAA,EAAU;AACnL,IAAM,2BAAA,GAA8B,CAAC,OAAA,EAAwB,YAAA,EAAsB,aAAA,KAAyCA,QAAAA,CAAQ,8BAAA,EAAgC,EAAE,OAAA,EAAS,YAAA,EAAc,aAAA,EAAe;AAC5M,IAAM,yBAAA,GAA4B,CAAC,OAAA,EAAwB,OAAA,KAAmCA,SAAQ,sBAAA,EAAwB,EAAE,OAAA,EAAS,OAAA,EAAS;AAClJ,IAAM,0BAAA,GAA6B,CAAC,OAAA,EAA8E,QAAA,KAA6BA,QAAAA,CAAQ,mBAAA,EAAqB,EAAE,OAAA,EAAS,OAAA,IAAW,EAAC,EAAG,QAAA,EAAU;AAChN,IAAM,uBAAA,GAA0B,CAAC,SAAA,EAAqB,gBAAA,KAA8DA,SAAQ,sBAAA,EAAwB,EAAE,SAAA,EAAW,gBAAA,EAAkB;AACnL,IAAM,kBAAkB,CAAC,IAAA,KAAoCA,SAAQ,sBAAA,EAAwB,EAAE,MAAM;AACrG,IAAM,wBAAA,GAA2B,CAAC,IAAA,EAAyB,SAAA,KAA+CA,SAAQ,2BAAA,EAA6B,EAAE,IAAA,EAAM,SAAA,EAAW;AAClK,IAAM,kBAAA,GAAqB,CAAC,OAAA,KAA+C,OAAA,GAAUA,SAAQ,yBAAA,EAA2B,EAAE,OAAA,EAAS,CAAA,GAAI;AACvI,IAAM,uBAAA,GAA0B,CAAC,OAAA,EAAwB,QAAA,EAAkB,IAAA,KAA+DA,QAAAA,CAAQ,mBAAA,EAAqB,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM;AAClM,IAAM,sBAAA,GAAyB,CAAC,OAAA,EAAwB,QAAA,EAAkB,IAAA,KAAmDA,QAAAA,CAAQ,yBAAA,EAA2B,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM;AAC3L,IAAM,4BAAA,GAA+B,CAAC,OAAA,EAAwB,QAAA,EAAkB,IAAA,KAAoEA,QAAAA,CAAQ,4BAAA,EAA8B,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM;AACrN,IAAM,qBAAA,GAAwB,CAAC,OAAA,EAAwB,IAAA,KAA2CA,SAAQ,wBAAA,EAA0B,EAAE,OAAA,EAAS,IAAA,EAAM;AACrJ,IAAM,oBAAA,GAAuB,CAAC,OAAA,EAA2C,OAAA,KAA0HA,SAAQ,oBAAA,EAAsB,EAAE,OAAA,EAAS,OAAA,EAAS;AACrP,IAAM,wBAAwB,CAAC,OAAA,KAAkGA,SAAQ,qBAAA,EAAuB,EAAE,SAAS;AAC3K,IAAM,0BAAA,GAA6B,CAAC,OAAA,EAAwB,QAAA,EAAkB,IAAA,EAAyB,MAAA,KAAuDA,QAAAA,CAAQ,sBAAA,EAAwB,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,QAAQ;AACjO,IAAM,+BAAA,GAAkC,CAAC,OAAA,EAAwB,QAAA,EAAkB,MAAyB,KAAA,EAAqC,MAAA,KAAuDA,QAAAA,CAAQ,+BAAA,EAAiC,EAAE,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,QAAQ;AAC3R,IAAM,wBAAA,GAA2B,CAAC,OAAA,EAAwB,IAAA,EAAc,MAAA,KAA+IA,QAAAA,CAAQ,2BAAA,EAA6B,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ;AACrR,IAAM,mBAAmB,CAAC,OAAA,EAAwB,UAAkB,IAAA,EAAyB,SAAA,EAAoC,UAA6B,EAAC,KAA+BA,SAAQ,mBAAA,EAAqB,EAAE,SAAS,QAAA,EAAU,IAAA,EAAM,WAAW,IAAA,EAAM,OAAA,CAAQ,MAAM;AACrR,IAAM,yBAAA,GAA4B,CAAC,OAAA,EAAwB,QAAA,EAAkB,MAAyB,KAAA,EAAqC,SAAA,EAAoC,UAA6B,EAAC,KAA+BA,SAAQ,4BAAA,EAA8B,EAAE,SAAS,QAAA,EAAU,IAAA,EAAM,OAAO,SAAA,EAAW,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM;AACnV,IAAM,qBAAqB,CAAC,OAAA,KAAqFA,SAAQ,qBAAA,EAAuB,EAAE,SAAS;AAC3J,IAAM,uBAAuB,CAAC,IAAA,KAA0DA,SAAQ,yBAAA,EAA2B,EAAE,MAAM;AACnI,IAAM,2BAA2B,CAAC,OAAA,EAAwB,MAAc,OAAA,GAAiE,OAAsBA,QAAAA,CAAQ,2BAAA,EAA6B,EAAE,OAAA,EAAS,MAAM,QAAA,EAAU,OAAA,CAAQ,UAAU,OAAA,EAAS,OAAA,CAAQ,SAAS;AAC3Q,IAAM,+BAA+B,CAAC,OAAA,EAA2H,YAAA,EAAsB,YAAA,KAAiCA,SAAuB,4BAAA,EAA8B,EAAE,OAAA,EAAS,YAAA,EAAc,cAAc,CAAA,IAAK,CAAA,GAAA,EAAM,YAAY,WAAW,YAAY,CAAA;AAEzW,SAAS,YAAA,CAAa,KAAA,EAAiB,MAAA,EAAiB,OAAA,EAAyB;AAC/E,EAAA,OAAO,IAAI,qBAAoB,CAAE,YAAA,CAAa,OAAO,EAAE,MAAA,EAAQ,SAAS,CAAA;AAC1E;AAEO,SAAS,gBAAA,CAAiB,KAAA,EAAiB,MAAA,EAAiB,UAAA,GAA8B,EAAC,EAAoB;AACpH,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAC7C,EAAA,OAAO,KAAK,KAAA,CAAMM,4BAAAA,EAA6B,CAAE,uBAAA,CAAwB,KAAK,UAAA,CAAW,UAAU,CAAA,EAAG,IAAA,CAAK,wBAAwB,KAAA,EAAO,UAAA,EAAY,UAAU,CAAC,CAAC,CAAC,CAAA;AACrK;AACA,eAAsB,aAAa,OAAA,EAGI;AACrC,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,KAAS,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,KAAA;AAC3F,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,KAAS,MAAA,GAAS,OAAO,IAAA,CAAK,UAAA,GAAa,MAAA,CAAO,UAAA,IAAc,EAAC;AAC3F,EAAA,MAAM,UAAA,GAAa,aAAa,KAAA,EAAO,MAAA,CAAO,SAAS,SAAA,GAAY,MAAA,CAAO,SAAS,MAAS,CAAA;AAC5F,EAAA,OAAO,IAAA,CAAK,KAAA,CAAMA,4BAAAA,EAA6B,CAAE,yBAAyB,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG,IAAA,CAAK,uBAAA,CAAwB,KAAA,EAAO,UAAA,EAAY,UAAU,CAAC,CAAA,EAAG,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,EAAE,kBAAA,EAAoB,OAAA,CAAQ,OAAA,CAAQ,kBAAkB,CAAA,EAAG,CAAC,CAAC,CAAA;AACrR;AAEO,SAAS,iBAAiB,MAAA,EAAmB,QAAA,EAAmB,OAAA,EAAiC,OAAA,GAAmC,EAAC,EAA2B;AACrK,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,MAAM,eAAuF,EAAC;AAC9F,EAAA,MAAM,oBAAoB,MAAA,IAAU,IAAI,GAAA,CAAI,CAAC,OAAO,KAAA,KAAU;AAC5D,IAAA,MAAM,IAAA,GAAO,KAAA;AACb,IAAA,MAAM,KAAK,KAAA,GAAQ,CAAA;AACnB,IAAA,MAAM,iBAAiB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,qBAAA,IAAyB,KAAK,QAAA,EAAU,qBAAA,IAAyB,EAAE,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,SAAS,CAAA,KAAM;AACzI,MAAA,MAAM,OAAA,GAAU,WAAA,EAAA;AAChB,MAAA,YAAA,CAAa,IAAA,CAAK,EAAE,EAAA,EAAI,OAAA,EAAS,QAAQ,EAAA,EAAI,IAAA,EAAM,WAAW,CAAA;AAC9D,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,IAAI,IAAA,EAAM,IAAA,CAAK,QAAQ,EAAA,EAAI,cAAA,EAAgB,SAAS,IAAA,EAAK;AAAA,EACpE,CAAC,CAAA;AACD,EAAA,MAAM,KAAA,GAAA,CAAU,UAAmE,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW,EAAE,IAAI,KAAA,GAAQ,CAAA,EAAG,MAAM,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAA,EAAG,CAAE,CAAA;AACjM,EAAA,OAAO,IAAA,CAAK,MAAMA,4BAAAA,EAA6B,CAAE,uBAAuB,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,EAAE,MAAA,EAAQ,kBAAkB,YAAA,EAAc,KAAA,EAAO,SAAS,EAAC,EAAG,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,CAAC,CAAA;AAC7K;AACO,SAAS,gCAAA,CAAiC,OAAiB,OAAA,EAAkE;AAClI,EAAA,OAAO,KAAK,KAAA,CAAMA,4BAAAA,EAA6B,CAAE,kCAAA,CAAmC,KAAK,OAAO,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,OAAO,MAAA,EAAW,OAAO,CAAA,CAAE,UAAU,CAAC,CAAC,CAAA;AAC9J;AACO,SAAS,4BAAA,CAA6B,KAAA,EAA2C,QAAA,GAAsC,6BAAA,EAA0D;AACtL,EAAA,OAAO,IAAA,CAAK,KAAA,CAAMA,4BAAAA,EAA6B,CAAE,oCAAA,CAAqC,IAAA,CAAK,KAAK,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AACpH;AACO,IAAM,2BAAA,GAA8B,CAAC,EAAA,KAAuD,2BAAA,CAA4B,KAAK,CAAA,QAAA,KAAY,QAAA,CAAS,EAAA,KAAO,EAAE,CAAA,IAAK;AAChK,SAAS,oCAAA,CAAqC,WAA2C,8BAAA,EAAuF;AACrL,EAAA,OAAO,IAAA,CAAK,MAAMA,4BAAAA,EAA6B,CAAE,sCAAsC,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AACxG;AACO,SAAS,4CAAA,CAA6C,WAA2C,8BAAA,EAAiH;AACvN,EAAA,OAAO,IAAA,CAAK,MAAMA,4BAAAA,EAA6B,CAAE,gCAAgC,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AAClG;AACO,SAAS,0CAA0C,QAAA,EAAgF;AACxI,EAAA,OAAO,KAAA,CAAM,KAAKA,4BAAAA,EAA6B,CAAE,+CAA+C,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AACjH;AACO,SAAS,wCAAA,CAAyC,OAAiB,OAAA,EAAmI;AAC3M,EAAA,OAAO,IAAA,CAAK,KAAA,CAAMA,4BAAAA,EAA6B,CAAE,wCAAwC,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,CAAE,UAAU,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,CAAC,CAAA;AAC/I;AC3EA,IAAM,MAAA,GAAS,CAAC,MAAA,KAAqB,CAAC,EAAG,MAAA,CAA2C,MAAA,IAAU,OAAO,IAAA,KAAS,MAAA,CAAA;AAE9G,IAAM,MAAA,GAAS,CAAC,MAAA,EAA2B,WAAA,KAAwB;AACjE,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,WAAW,CAAA,2BAAA,CAA6B,CAAA;AAAA,EAC5F;AACF,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,MAAA,EAAiB,WAAA,KAA2C;AAChF,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,KAAA,EAAM;AACrC,EAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAC1B,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B,CAAA;AAEA,IAAM,cAAc,CAAC,MAAA,KAAqB,OAAO,gBAAA,GAC7C,IAAIC,SAAQ,CAAE,OAAA,CAAQ,MAAA,CAAO,QAAA,EAAU,OAAO,UAAA,EAAY,MAAA,CAAO,KAAK,CAAA,GACtE,MAAA,CAAO,OAAO,KAAA,EAAM;AAExB,IAAM,kBAAA,GAAqB,CAAC,MAAA,EAAkB,MAAA,KAAyD;AAGrG,EAAA,MAAM,WAAW,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,QAAA,GAAW,IAAIC,OAAAA,EAAQ;AACzE,EAAA,MAAM,WAAW,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,UAAA,GAAa,IAAIC,UAAAA,EAAW;AAC9E,EAAA,MAAM,QAAQ,MAAA,CAAO,gBAAA,GAAmB,MAAA,CAAO,KAAA,GAAQ,IAAID,OAAAA,EAAQ;AACnE,EAAA,IAAI,CAAC,OAAO,gBAAA,EAAkB;AAG5B,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,IAAA,IAAI,CAAC,GAAG,CAAA,EAAG,CAAC,EAAE,IAAA,CAAK,CAAC,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,EAAG,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAA,EAAG,QAAA,CAAS,QAAQ,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG;AAC1G,MAAA,MAAM,IAAI,MAAM,CAAA,oDAAA,EAAuD,IAAA,CAAK,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAAA,IACnI;AACA,IAAA,MAAA,CAAO,SAAA,CAAU,QAAA,EAAU,QAAA,EAAU,KAAK,CAAA;AAAA,EAC5C;AACA,EAAA,MAAA,CAAO,CAAC,GAAG,QAAA,CAAS,OAAA,IAAW,GAAG,QAAA,CAAS,SAAQ,EAAG,GAAG,MAAM,OAAA,EAAS,GAAG,CAAA,cAAA,EAAiB,IAAA,CAAK,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AACzH,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,QAAA,CAAS,GAAG,CAAA;AAAA,IACvE,UAAU,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,SAAS,CAAA,EAAG,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAG,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,QAAA,CAAS,GAAG,CAAA;AAAA,IACtF,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,GAAG;AAAA,GAC5D,CAAA;AACH,CAAA;AAEA,IAAM,iBAAiB,CACrB,MAAA,EACA,IAAA,EACA,UAAA,EACA,cACA,KAAA,KACG;AACH,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,aAAa,KAAA,EAAO,CAAA,gBAAA,EAAmB,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AACjF,EAAA,MAAM,QAAQ,IAAID,OAAAA,EAAQ,CAAE,gBAAA,CAAiB,cAAc,KAAK,CAAA;AAChE,EAAA,MAAM,WAAA,GAAc,aAAa,KAAA,EAAO,CAAA,gBAAA,EAAmB,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AACjF,EAAA,MAAM,aAAc,MAAA,CAAoE,qBAAA;AACxF,EAAA,MAAM,kBAAkB,UAAA,KAAe,MAAA,GAAY,MAAA,GAAY,KAAA,CAAM,KAAK,UAAU,CAAA;AACpF,EAAA,IAAI,eAAA,SAAwB,eAAA,EAAiB,CAAA,oBAAA,EAAuB,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,EAAA,MAAM,gBAAgB,MAAA,CAAO,gBAAA,GACzB,EAAE,CAAA,EAAG,OAAO,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,MAAA,CAAO,SAAS,CAAA,EAAG,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,GAAE,GACnE,MAAA;AACJ,EAAA,IAAI,aAAA,EAAe,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAG,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AACnG,EAAA,KAAA,CAAM,IAAA,CAAK,OAAO,MAAA,CAAO;AAAA,IACvB,IAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,MAAA,EAAQ,OAAO,MAAM,CAAA;AAAA,IACrB,aAAA,EAAe,OAAO,QAAA,CAAS,KAAA;AAAA,IAC/B,GAAI,gBAAgB,EAAE,aAAA,EAAe,OAAO,MAAA,CAAO,aAAa,CAAA,EAAE,GAAI,EAAC;AAAA,IACvE,UAAA,EAAY,OAAO,QAAA,CAAS,MAAA;AAAA,IAC5B,SAAA,EAAW,kBAAA,CAAmB,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC3C,WAAA,EAAa,WAAA;AAAA,IACb,WAAA,EAAa,WAAA;AAAA,IACb,eAAe,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG,YAAY,EAAE,CAAA,EAAG,CAAA,EAAG,WAAA,CAAY,EAAE,CAAA,EAAG,CAAA,EAAG,WAAA,CAAY,EAAE,GAAG,CAAA;AAAA,IAC3F,GAAI,kBAAkB,EAAE,eAAA,EAAiB,OAAO,MAAA,CAAO,eAAe,CAAA,EAAE,GAAI;AAAC,GAC9E,CAAC,CAAA;AACF,EAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAU,cAAA,CAAe,KAAA,EAAO,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,CAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,CAAA;AACzG,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,MAAA,EAAkB,IAAA,EAA0C,IAAA,EAAc,eAC7F,IAAA,KAAS,MAAA,IACJ,IAAA,CAAK,IAAA,KAAS,IAAA,IACd,IAAA,CAAK,eAAe,UAAA,IACpB,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,IACrB,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,IACrB,IAAA,CAAK,MAAA,KAAW,MAAA,CAAO,MAAM,CAAA;AAEpC,IAAM,eAAe,CAAC,MAAA,EAAkB,IAAA,KACtC,IAAI,MAAM,CAAA,yCAAA,EAA4C,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAYxG,SAAS,0BAA0B,KAAA,EAA0C;AAClF,EAAA,MAAM,YAAwB,EAAC;AAC/B,EAAA,KAAA,IAAS,QAAA,GAAW,MAAM,MAAA,EAAQ,QAAA,EAAU,WAAW,QAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAC/F,EAAA,MAAM,WAAA,GAAc,IAAIA,OAAAA,EAAQ;AAChC,EAAA,KAAA,MAAW,QAAA,IAAY,UAAU,OAAA,EAAQ,cAAe,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAC,CAAA;AACtF,EAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,WAAA,EAAa,qBAAqB,CAAA;AACzE,EAAA,MAAM,QAAkC,EAAC;AAEzC,EAAA,cAAA,CAAe,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,WAAA,EAAa,KAAK,CAAA;AAClD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,OAAA,EAAS,CAAA,EAAG,iBAAA,EAAmB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AACrF;AAYO,SAAS,wBAAA,CACd,OACA,QAAA,EACyB;AACzB,EAAA,IAAI,SAAS,OAAA,KAAY,CAAA,EAAG,MAAM,IAAI,MAAM,0CAA0C,CAAA;AACtF,EAAA,MAAM,QAAkC,EAAC;AACzC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,MAAA,GAAS,CAAC,MAAA,EAAkB,IAAA,EAAc,UAAA,KAA8B;AAC5E,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,CAAA;AACnC,IAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,UAAA,EAAY;AAC5F,MAAA,MAAM,YAAA,CAAa,QAAQ,IAAI,CAAA;AAAA,IACjC;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,MAAA,CAAO;AAAA,MACvB,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,OAAO,QAAA,CAAS,MAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,MAAA,CAAO;AAAA,QACvB,QAAA,EAAU,OAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,QACtD,QAAA,EAAU,OAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,QACtD,KAAA,EAAO,OAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,OACjD,CAAA;AAAA,MACD,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,MAChD,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,MAChD,eAAe,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,eAAe,CAAA;AAAA,MACtD,GAAI,IAAA,CAAK,aAAA,GAAgB,EAAE,eAAe,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,aAAA,EAAe,CAAA,KAAM,EAAC;AAAA,MACxF,GAAI,IAAA,CAAK,eAAA,GAAkB,EAAE,iBAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAA,CAAK,eAAe,CAAC,CAAA,KAAM;AAAC,KAC7F,CAAC,CAAA;AACF,IAAA,KAAA,IAAS,aAAa,CAAA,EAAG,UAAA,GAAa,IAAA,CAAK,UAAA,EAAY,cAAc,CAAA,EAAG;AACtE,MAAA,MAAA,CAAO,MAAA,CAAO,SAAS,UAAU,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,cAAc,IAAIA,OAAAA,EAAQ,CAAE,SAAA,CAAU,KAAK,WAAW,CAAA;AAC5D,IAAA,KAAA,IAAS,UAAA,GAAa,KAAK,UAAA,EAAY,UAAA,GAAa,OAAO,QAAA,CAAS,MAAA,EAAQ,cAAc,CAAA,EAAG;AAC3F,MAAA,cAAA,CAAe,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,IAAA,EAAM,WAAA,EAAa,KAAK,CAAA;AAAA,IAC/F;AAAA,EACF,CAAA;AACA,EAAA,MAAA,CAAO,KAAA,EAAO,IAAI,IAAI,CAAA;AACtB,EAAA,IAAI,UAAU,QAAA,CAAS,KAAA,CAAM,QAAQ,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAClH,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,OAAA,EAAS,CAAA;AAAA,IACT,mBAAmB,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,QAAA,CAAS,iBAAiB,CAAC,CAAA;AAAA,IAChE,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAK;AAAA,GAC3B,CAAA;AACH;AASO,SAAS,sBAAA,CACd,OACA,aAAA,EAC+C;AAC/C,EAAA,IAAI,cAAc,OAAA,KAAY,CAAA,EAAG,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC3F,EAAA,MAAMR,SAAAA,uBAAe,GAAA,EAAsC;AAC3D,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,EAAkB,IAAA,EAAc,UAAA,KAA8B;AAC1E,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,CAAA;AACxC,IAAA,IAAI,CAAC,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA,IAAK,IAAA,CAAK,UAAA,KAAe,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ;AAC9F,MAAA,MAAM,YAAA,CAAa,QAAQ,IAAI,CAAA;AAAA,IACjC;AACA,IAAAA,SAAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AACzB,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAA,KAAe,IAAA,CAAK,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA;AAAA,EAC3F,CAAA;AACA,EAAA,IAAA,CAAK,KAAA,EAAO,IAAI,IAAI,CAAA;AACpB,EAAA,IAAI,UAAU,aAAA,CAAc,KAAA,CAAM,QAAQ,MAAM,IAAI,MAAM,6DAA6D,CAAA;AACvH,EAAA,OAAOA,SAAAA;AACT;AC5NO,SAAS,oBAAoB,IAAA,EAAoC;AACtE,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC5C,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AACxD,IAAA,MAAM,KAAA,GAAQ,OAAO,YAAA,KAAiB,UAAA;AACtC,IAAA,IAAK,CAAC,KAAA,IAAS,CAAC,CAAC,uBAAA,EAAyB,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,YAAY,KAAM,MAAA,CAAO,aAAA,KAAkB,MAAA,EAAW,OAAO,CAAC,KAAK,CAAA;AACxI,IAAA,MAAM,KAAA,GAAS,KAAA,CAEZ,iBAAA,CAAkB,yCAAA,KAA8C,IAAA;AACnE,IAAA,MAAM,KAAA,GAAQ,QAAQ,CAAA,GAAI,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,YAAA,EAAa,GAAI,KAAA;AACrC,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,KAAM,KAAA,IAAS,KAAA,KAAU,GAAI,MAAM,IAAI,MAAM,CAAA,wBAAA,EAA2B,IAAA,CAAK,UAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7I,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,SAAA,KAAc;AACrD,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,EAAM;AAC3B,MAAA,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAA,GAAQ,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE,SAAS,IAAI,SAAS,CAAA,CAAA,CAAA;AAE7E,MAAA,MAAA,CAAO,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAM,GAAG,KAAA,CAAM,KAAA,CAAM,SAAS,KAAK,CAAA;AAChE,MAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,QAAQ,MAAA,IAAU,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChI,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,EAAM;AAC3B,EAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,iBAAA,CAAkB,QAA2C,UAAA,EAAsD;AACjI,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,IAAI,MAAA,CAAO,SAAS,aAAA,EAAe;AACjC,IAAA,MAAM,UAAU,UAAA,CAAW,aAAA,CAAc,IAAI,MAAA,CAAO,MAAA,CAAO,aAAa,CAAC,CAAA;AACzE,IAAA,OAAO,WAAW,CAAA,EAAG,OAAA,CAAQ,KAAK,IAAI,CAAA,uBAAA,EAA0B,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,eAAA,IAAmB,MAAA,CAAO,SAAS,iBAAA,EAAmB;AACxE,IAAA,MAAM,SAAS,MAAA,CAAO,IAAA,KAAS,kBAC3B,UAAA,CAAW,YAAA,CAAa,IAAI,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,IACjD,UAAA,CAAW,cAAA,CAAe,IAAI,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,UAAA;AACpC,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAI,aAAa,UAAA,IAAc,QAAA,KAAa,cAAc,OAAO,CAAA,EAAG,OAAO,IAAI,CAAA,WAAA,CAAA;AAC/E,IAAA,IAAI,aAAa,QAAA,IAAY,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,UAAU,OAAO,CAAA,EAAG,MAAA,CAAO,IAAI,aAAa,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,CAAE,aAAa,CAAA,CAAA,CAAA;AAC/I,IAAA,IAAI,QAAA,KAAa,cAAc,QAAA,KAAa,OAAA,SAAgB,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,gBAAA,EAAkB;AACpC,IAAA,MAAM,OAAO,UAAA,CAAW,YAAA,CAAa,IAAI,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC9D,IAAA,OAAO,IAAA,IAAQ,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,QAAA,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,2BAAA,CAA4B,IAAA,EAAqB,MAAA,EAAgC,UAAA,EAAiD;AAChJ,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAC1B,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,MAAM,OAAO,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA,CAAE,QAAQ,UAAU,CAAA;AAC/D,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,8DAA8D,CAAA;AACzF,IAAA,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,GAAO,IAAA;AAAA,EAC9B;AACA,EAAA,OAAO,MAAA;AACT;;;ACPA,IAAM,UAAA,GAAa,CAAC,KAAA,KAAyB,KAAA,CAAM,cAAa,IAAM,KAAA,CAAsB,iBAAA,CAAkB,yCAAA,GAA4C,CAAA,GAAI,CAAA,CAAA;AAE9J,IAAM,OAAA,GAAU,CAAC,KAAA,KAA0B,KAAA,YAAiB,KAAA,GAAQ,QAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACnG,IAAM,SAAA,GAAY,CAAC,IAAA,KAAgC,IAAA,KAAS,aAAa,0BAAA,GAA6B,wBAAA;AACtG,IAAM,QAAA,GAAW,CAAC,IAAA,KAAkC,IAAA,KAAS,SAAS,QAAA,GAAW,IAAA,KAAS,WAAW,UAAA,GAAa,YAAA;AAElH,SAAS,gBAAgB,OAAA,EAA2C;AAClE,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,UAAA,IAAe,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAQ,KAAM,OAAA,CAAQ,KAAA,EAAQ;AAC9F,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AACA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAc;AAClC,EAAA,OAAA,CAAQ,MAAM,QAAA,CAAS,CAAC,WAAW,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAC,CAAA;AACtD,EAAA,MAAM,EAAE,YAAW,GAAI,OAAA;AACvB,EAAA,KAAA,MAAW,MAAA,IAAU;AAAA,IACnB,GAAG,UAAA,CAAW,YAAA,CAAa,MAAA,EAAO;AAAA,IAAG,GAAG,UAAA,CAAW,YAAA,CAAa,MAAA,EAAO;AAAA,IACvE,GAAG,UAAA,CAAW,cAAA,CAAe,MAAA,EAAO;AAAA,IAAG,GAAG,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,aAAA,CAAc,QAAO,EAAG,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI;AAAA,GAC/G,EAAG;AACD,IAAA,IAAI,CAAC,QAAQ,GAAA,CAAI,MAAM,GAAG,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,EACpH;AACF;AAUO,IAAM,+BAAN,MAAmC;AAAA,EAiBxC,WAAA,CACmB,SACjB,OAAA,EACA;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAjBnB,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAmB,IAAA,CAAA;AAC3B,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,sBAAgB,GAAA,EAAsB,CAAA;AACvD,IAAA,aAAA,CAAA,IAAA,EAAiB,eAAA,sBAAoB,GAAA,EAA6B,CAAA;AAClE,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,sBAAgB,GAAA,EAA+C,CAAA;AAChF,IAAA,aAAA,CAAA,IAAA,EAAiB,WAA0B,EAAC,CAAA;AAC5C,IAAA,aAAA,CAAA,IAAA,EAAiB,iBAAsC,EAAC,CAAA;AACxD,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,EAAQ,CAAA,CAAA;AAChB,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,KAAA,CAAA;AAChC,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,KAAA,CAAA;AAChC,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAkB,KAAA,CAAA;AAC1B,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,EAAW,KAAA,CAAA;AACnB,IAAA,aAAA,CAAA,IAAA,EAAiB,SAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,CAAA;AAwUjB,IAAA,aAAA,CAAA,IAAA,EAAiB,UAAA,EAAW,CAAC,KAAA,KAA6C;AACxE,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,MAAM,MAAM,CAAA;AAClD,MAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,SAAA,GAAY,WAAA,GAAc,WAAA,EAAa,QAAQ,CAAA;AAG3G,MAAA,IAAI,KAAK,qBAAA,EAAuB;AAChC,MAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA;AAC7B,MAAA,cAAA,CAAe,MAAM;AACnB,QAAA,IAAA,CAAK,qBAAA,GAAwB,KAAA;AAC7B,QAAA,IAAI,KAAK,QAAA,EAAU;AACnB,QAAA,IAAI;AAAE,UAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,QAAG,SAAS,KAAA,EAAO;AAC/C,UAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,UAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAAA,eACjC,MAAM,OAAA;AAAA,QACb;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,CAAA;AAnVE,IAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAI,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA,EAAE;AACvF,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,gBAAA,CAAiB,UAAA,EAAY,KAAK,QAAQ,CAAA;AAC7D,IAAA,IAAA,CAAK,SAAA,GAAY,qBAAA,CAAsB,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAA,EAAO,MAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,EACpG;AAAA;AAAA,EAGA,MAAA,CAAO,QAAA,EAAkB,UAAA,EAAoB,OAAA,GAAsC,KAAK,OAAA,EAAe;AACrG,IAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAA,CAAQ,MAAA,CAAO,UAAU,UAAU,CAAA,EAAG,QAAW,MAAM;AACxE,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,mBAAA,CAAoB,UAAA,EAAY,KAAK,QAAQ,CAAA;AAChE,MAAA,IAAA,CAAK,UAAU,OAAA,EAAQ;AACvB,MAAA,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAI,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA,EAAE;AACvF,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,gBAAA,CAAiB,UAAA,EAAY,KAAK,QAAQ,CAAA;AAC7D,MAAA,IAAA,CAAK,SAAA,GAAY,qBAAA,CAAsB,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,QAAQ,KAAA,EAAO,MAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AAClG,MAAA,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,gBAAgB,CAAA;AAAA,IACjD,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,IAAA,CAAK,IAAA,EAAc,OAAA,GAAsC,EAAC,EAAW;AACnE,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,MAAM,MAAA,GAAS,6BAAA,CAA8B,IAAA,EAAM,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC1E,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,IAAA,CAAK,OAAO,MAAA,EAAQ;AAC/C,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG,KAAK,SAAA,CAAU,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,MAAA;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,CAAe,IAAA,EAAqB,OAAA,GAAsC,EAAC,EAAW;AACpF,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,GAAO,oBAAoB,IAAI,CAAA;AAC/B,IAAA,MAAM,CAAC,EAAE,CAAA,GAAI,uBAAA,CAAwB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,CAAC,IAAI,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACxF,IAAA,IAAI,EAAA,CAAG,MAAA,CAAO,MAAA,KAAW,IAAA,CAAK,OAAO,MAAA,EAAQ;AAC3C,MAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,IACvF;AACA,IAAA,MAAM,SAAS,2BAAA,CAA4B,IAAA,EAAM,GAAG,MAAA,EAAQ,IAAA,CAAK,QAAQ,UAAU,CAAA;AACnF,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAG,OAAA;AAAA,MACH,WAAW,OAAA,CAAQ,SAAA,KAAc,IAAA,CAAK,SAAA,KAAc,6BAA6B,UAAA,GAAa,QAAA;AAAA,KAChG;AACA,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAA,EAAG,KAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,MAAA;AAAA,EAChG;AAAA,EAEA,OAAA,CAAQ,QAAgB,OAAA,EAA2C;AACjE,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA;AAAA,EACrE;AAAA,EAEA,aAAa,OAAA,EAAwB;AACnC,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAI,OAAA,KAAY,KAAK,gBAAA,EAAkB;AACvC,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAA;AACxB,IAAA,IAAA,CAAK,SAAA,CAAU,WAAW,OAAO,CAAA;AACjC,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACtB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,QAAA,CAAS,eAAA,GAAkB,SAAS,MAAA,CAAO,MAAA;AAC3C,QAAA,IAAA,CAAK,UAAU,QAAQ,CAAA;AACvB,QAAA,QAAA,CAAS,OAAO,MAAA,GAAS,IAAA;AAAA,MAC3B,CAAA,MAAA,IAAW,QAAA,CAAS,eAAA,KAAoB,MAAA,EAAW;AACjD,QAAA,QAAA,CAAS,MAAA,CAAO,SAAS,QAAA,CAAS,eAAA;AAClC,QAAA,IAAI,CAAC,QAAA,CAAS,gBAAA,EAAkB,IAAA,CAAK,WAAW,QAAQ,CAAA;AACxD,QAAA,QAAA,CAAS,eAAA,GAAkB,MAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,KAAA,EAAqB;AAChC,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAI,CAAC,OAAO,QAAA,CAAS,KAAK,GAAG,MAAM,IAAI,MAAM,oCAAoC,CAAA;AACjF,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,SAAA,GAAY,KAAA;AAAA,EACjC;AAAA,EAEA,MAAA,CAAO,QAAgB,OAAA,EAAuB;AAAE,IAAA,IAAA,CAAK,QAAQ,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,EAAG;AAAA,EACnG,OAAA,CAAQ,QAAgB,OAAA,EAAuB;AAAE,IAAA,IAAA,CAAK,QAAQ,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,CAAA;AAAA,EAAG;AAAA;AAAA,EAGrG,WAAA,CAAY,QAAgB,IAAA,EAA2B;AACrD,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,GAAO,oBAAoB,IAAI,CAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAC3E,IAAA,MAAM,CAAC,EAAE,CAAA,GAAI,uBAAA,CAAwB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,CAAC,IAAI,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACxF,IAAA,IAAI,EAAA,CAAG,OAAO,MAAA,KAAW,IAAA,CAAK,OAAO,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,qDAAqD,CAAA;AAClH,IAAA,MAAM,SAAS,2BAAA,CAA4B,IAAA,EAAM,GAAG,MAAA,EAAQ,IAAA,CAAK,QAAQ,UAAU,CAAA;AACnF,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,EAAO,KAAA,KAAU;AAC/F,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AACtC,MAAA,OAAO,KAAA,CAAM,IAAA,KAAS,GAAA,CAAI,IAAA,IAAQ,KAAA,CAAM,aAAA,KAAkB,GAAA,CAAI,aAAA,IAAiB,UAAA,CAAW,KAAK,CAAA,KAAM,UAAA,CAAW,GAAG,CAAA;AAAA,IACrH,CAAC,CAAA,EAAG,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAC3G,IAAA,MAAM,WAAW,QAAA,CAAS,MAAA;AAC1B,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA,IAAK,QAAA,CAAS,aAAA,CAAc,MAAA,KAAW,MAAA,CAAO,OAAO,MAAA,EAAQ;AACjH,MAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,IACtF;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,MAAA,EAAQ,KAAK,SAAA,CAAU,EAAE,CAAC,CAAA,EAAG,MAAM,CAAA;AAAA,EAC7E;AAAA;AAAA,EAGA,UAAU,MAAA,EAA6C;AACrD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,MAAA;AAAA,EACrC;AAAA;AAAA,EAGA,WAAA,GAAoB;AAClB,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,qBAAA,GAAwB,KAAA;AAC7B,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,CAAA,IAAK,KAAK,SAAA,EAAW;AAG/C,MAAA,IAAI,SAAS,SAAA,IAAa,QAAA,CAAS,MAAA,EAAQ,kBAAA,OAAyB,CAAA,EAAG;AACrE,QAAA,QAAA,CAAS,SAAA,GAAY,KAAA;AACrB,QAAA,IAAA,CAAK,cAAc,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,QAAQ,CAAA;AAAA,MACvD;AAAA,IACF;AACA,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA,EAEA,UAAU,QAAA,EAAiE;AACzE,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAC3E,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC3B,IAAA,OAAO,MAAM;AAAE,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,EAClD;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AACnC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,IACrB;AAGA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,mBAAA,CAAoB,UAAA,EAAY,KAAK,QAAQ,CAAA;AAChE,IAAA,IAAA,CAAK,UAAU,OAAA,EAAQ;AACvB,IAAA,IAAA,CAAK,cAAc,MAAA,GAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,QAAQ,IAAA,EAAK;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EAClB;AAAA,EAEQ,UAAU,QAAA,EAA0B;AAC1C,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,IAAA,MAAM,OAAO,MAAA,EAAQ,kBAAA;AACrB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AAEtB,IAAA,QAAA,CAAS,UAAA,GAAa;AAAA,MACpB,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAAA,MAC7E,IAAA,EAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA;AAAA,MAAG,EAAA,EAAI,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AAAA,MAAG,QAAQ,MAAA,CAAO;AAAA,KAChG;AACA,IAAA,MAAA,CAAO,UAAA,EAAW;AAClB,IAAA,MAAA,CAAO,mBAAmB,QAAA,CAAS,UAAA,CAAW,MAAA,GAAS,QAAA,CAAS,WAAW,IAAI,CAAA;AAAA,EACjF;AAAA,EAEQ,WAAW,QAAA,EAA0B;AAC3C,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,IAAA,MAAM,OAAO,QAAA,CAAS,UAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACtB,IAAA,QAAA,CAAS,UAAA,GAAa,MAAA;AACtB,IAAA,MAAA,CAAO,kBAAA,CAAmB,KAAK,MAAM,CAAA;AACrC,IAAA,MAAA,CAAO,MAAA,CAAO,KAAK,OAAO,CAAA;AAC1B,IAAA,MAAM,cAAc,MAAA,CAAO,kBAAA;AAC3B,IAAA,WAAA,CAAY,YAAA,CAAa,CAAC,CAAA,GAAI,IAAA,CAAK,IAAA;AACnC,IAAA,WAAA,CAAY,YAAA,CAAa,CAAC,CAAA,GAAI,IAAA,CAAK,EAAA;AAAA,EACrC;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAI,KAAK,QAAA,IAAY,IAAA,CAAK,iBAAiB,MAAM,IAAI,MAAM,wCAAwC,CAAA;AACnG,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAM;AAAA,EACtC;AAAA,EAEQ,QAAA,CAAS,UAAA,EAAoB,IAAA,EAAsB,aAAA,EAAmC;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,aAAa,CAAA,EAAG,IAAA,EAAM,eAAe,CAAA;AAChE,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,KAAA,GAAc;AACpB,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AACd,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ;AAC1B,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAC9B,QAAA,OAAO,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,SAAS,MAAA,EAAQ;AAC1D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,QAAQ,WAAW,CAAA;AAC1D,UAAA,IAAI;AACF,YAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA;AAAA,UACpC,SAAS,KAAA,EAAO;AAGd,YAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,SAAA,EAAW,MAAM,QAAQ,KAAK,CAAA;AACnD,YAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,YAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,YAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,0BAAA,EAA4B,CAAA;AAAA,UAC3H;AACA,UAAA,OAAA,CAAQ,WAAA,IAAe,CAAA;AAAA,QACzB;AACA,QAAA,OAAA,CAAQ,aAAA,IAAgB;AACxB,QAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAEnB,QAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ;AACxC,UAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA,EAAG;AAG1C,YAAA,IAAI;AAAE,cAAA,QAAA,CAAS,KAAK,CAAA;AAAA,YAAG,SAAS,KAAA,EAAO;AACrC,cAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,cAAA,cAAA,CAAe,MAAM;AAAE,gBAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAAA,qBAAQ,MAAM,OAAA;AAAA,cAAS,CAAC,CAAA;AAAA,YACvF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,KAAK,KAAA,KAAU,CAAA,IAAK,CAAC,IAAA,CAAK,qBAAA,OAA4B,kBAAA,EAAmB;AAC7E,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,MAAM,MAAA,CAAO,CAAC,CAAA;AAAA,EACnC;AAAA,EAEQ,OAAA,CAAQ,SAAkB,YAAA,EAAoC;AACpE,IAAA,IAAI,OAAA,CAAQ,SAAS,SAAA,EAAW;AAC9B,MAAA,MAAMW,SAAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AAClD,MAAA,IAAI,CAACA,SAAAA,EAAU;AACf,MAAAA,SAAAA,CAAS,QAAQ,IAAA,EAAK;AACtB,MAAAA,SAAAA,CAAS,QAAQ,KAAA,CAAM,aAAA,CAAcA,UAAS,IAAA,EAAMA,SAAAA,CAAS,QAAQ,KAAK,CAAA;AAC1E,MAAAA,SAAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAYA,UAAS,IAAI,CAAA;AAChD,MAAA,IAAIA,UAAS,MAAA,EAAQ,IAAA,CAAK,aAAA,CAAc,MAAA,CAAOA,UAAS,MAAM,CAAA;AAC9D,MAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAGpC,MAAA,IAAI;AAAE,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,MAAM,CAAA;AAAA,MAAG,SAAS,KAAA,EAAO;AACtD,QAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,QAAA,cAAA,CAAe,MAAM;AAAE,UAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAAA,eAAQ,MAAM,OAAA;AAAA,QAAS,CAAC,CAAA;AAAA,MACvF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,aAAA,EAAe;AAClC,MAAA,MAAMA,SAAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AAClD,MAAA,IAAI,CAACA,SAAAA,IAAY,CAAC,cAAc,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAIzF,MAAA,MAAMC,UAASD,SAAAA,CAAS,MAAA;AACxB,MAAA,MAAM,MAAA,GAAS,aAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA;AAC/D,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,KAAA,KAAU;AAChD,QAAA,MAAM,cAAe,KAAA,CAAsB,iBAAA,CAAkBC,QAAO,aAAA,CAAc,KAAK,EAAE,YAAY,CAAA;AACrG,QAAA,IAAI,YAAY,QAAA,EAAU,MAAA,CAAO,OAAOA,OAAAA,CAAO,oBAAA,EAAgC,YAAY,QAAQ,CAAA;AACnG,QAAA,WAAA,CAAY,WAAWA,OAAAA,CAAO,oBAAA;AAC9B,QAAA,OAAO,WAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAAD,SAAAA,CAAS,KAAK,MAAA,GAAS,MAAA;AACvB,MAAAC,QAAO,aAAA,GAAgB,YAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,IAAI,CAAC,YAAA,EAAc,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC1E,MAAA,MAAMD,YAAqB,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,KAAK,OAAA,EAAQ;AACvE,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQA,SAAQ,CAAA;AAC3C,MAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,MAAA,MAAMC,OAAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,YAAA,EAAc,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,SAAA,CAAU,QAAA,CAAS,SAAS,CAAC,CAAA;AAC5G,MAAAD,UAAS,MAAA,GAASC,OAAAA;AAClB,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAIA,OAAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA;AAC7C,MAAAA,OAAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,KAAA,IAAS,QAAQ,CAAA;AAC5E,MAAAA,OAAAA,CAAO,iBAAA,GAAoB,QAAA,CAAS,SAAA,KAAc,MAAA;AAClD,MAAAA,OAAAA,CAAO,qBAAA,CAAsB,QAAA,CAAS,KAAK,CAAA;AAC3C,MAAAA,OAAAA,CAAO,kBAAA,CAAmB,QAAA,CAAS,MAAM,CAAA;AACzC,MAAAA,OAAAA,CAAO,OAAO,QAAA,CAAS,YAAA;AACvB,MAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAAE,QAAAD,UAAS,eAAA,GAAkB,KAAA;AAAO,QAAAC,QAAO,MAAA,GAAS,IAAA;AAAA,MAAM;AACtF,MAAAA,QAAO,IAAA,EAAK;AACZ,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AAClD,IAAA,MAAM,SAAS,QAAA,EAAU,MAAA;AACzB,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAQ,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAClF,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,QAAQ,QAAQ,IAAA;AAAM,MACpB,KAAK,OAAA;AACH,QAAA,QAAA,CAAS,gBAAA,GAAmB,IAAA;AAC5B,QAAA,IAAA,CAAK,UAAU,QAAQ,CAAA;AACvB,QAAA,MAAA,CAAO,MAAA,GAAS,IAAA;AAChB,QAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB,IAAA,CAAK,UAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,CAAG,eAAA,GAAkB,IAAA;AAClF,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,QAAA,CAAS,gBAAA,GAAmB,KAAA;AAC5B,QAAA,IAAI,KAAK,gBAAA,EAAkB;AAAE,UAAA,MAAA,CAAO,MAAA,GAAS,KAAA;AAAO,UAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AAAA,QAAG,OAC1E,IAAA,CAAK,SAAA,CAAU,IAAI,OAAA,CAAQ,MAAM,EAAG,eAAA,GAAkB,KAAA;AAC3D,QAAA;AAAA,MACF,KAAK,MAAA;AAAQ,QAAA,MAAA,CAAO,OAAO,OAAA,CAAQ,OAAA;AAAS,QAAA;AAAA,MAC5C,KAAK,UAAA;AAAY,QAAA,MAAA,CAAO,qBAAA,CAAsB,QAAQ,KAAK,CAAA;AAAG,QAAA;AAAA,MAC9D,KAAK,WAAA;AACH,QAAA,QAAA,CAAS,UAAA,GAAa,MAAA;AACtB,QAAA,MAAA,CAAO,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AACxC,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,CAAQ,MAAM,EAAG,SAAA,GAAY,KAAA;AAChD,QAAA;AAAA,MACF,KAAK,cAAA;AAAgB,QAAA,MAAA,CAAO,SAAA,GAAY,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AAAG,QAAA;AAAA,MACtE,KAAK,SAAA;AAAW,QAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,KAAA,IAAS,QAAQ,CAAA;AAAG,QAAA;AAAA,MAC7F,KAAK,cAAA;AAAgB,QAAA,MAAA,CAAO,iBAAA,GAAoB,QAAQ,SAAA,KAAc,MAAA;AAAQ,QAAA;AAAA,MAC9E,KAAK,QAAA;AACH,QAAA,QAAA,CAAS,UAAA,GAAa,MAAA;AACtB,QAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAG,QAAA,QAAA,CAAS,SAAA,GAAY,KAAA;AACrD,QAAA,IAAI,SAAS,gBAAA,IAAoB,CAAC,KAAK,gBAAA,EAAkB,IAAA,CAAK,UAAU,QAAQ,CAAA;AAChF,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,QAAA,CAAS,UAAA,GAAa,MAAA;AACtB,QAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,CAAA,EAAG,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,aAC3F;AAAE,UAAA,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAAG,UAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAAM,UAAA,IAAI,SAAS,gBAAA,IAAoB,CAAC,KAAK,gBAAA,EAAkB,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,QAAG;AACtJ,QAAA;AAAA,MACF,KAAK,MAAA;AAAQ,QAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA;AAClF,EACF;AAAA,EAqBQ,kBAAA,GAA2B;AACjC,IAAA,IAAI,IAAA,CAAK,yBAAyB,IAAA,CAAK,KAAA,GAAQ,KAAK,IAAA,CAAK,QAAA,IAAY,KAAK,qBAAA,EAAuB;AACjG,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,cAAc,MAAA,EAAQ;AAChC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,EAAM;AACvC,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,qBAAA,GAAwB,KAAA;AAAA,IAC/B;AAAA,EACF;AACF;;;ACvYA,IAAMC,QAAO,CAAC,KAAA,KAA2B,KAAK,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AACnE,IAAM,YAAY,CAAC,MAAA,KAA0C,KAAK,SAAA,CAAU,CAAC,OAAO,IAAA,EAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,eAAe,MAAA,CAAO,MAAA,EAAQ,OAAO,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAC,CAAA;AAC/K,IAAM,IAAA,GAAO,CAAI,KAAA,KAAgB,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACjE,IAAM,KAAA,GAAQ,CAAU,KAAA,KAAqB,IAAA,CAAK,MAAM,KAAK,CAAA;AAC7D,IAAMC,OAAAA,GAAS,CAAC,KAAA,KAAoC,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA;AACtG,IAAM,SAAA,GAAY,CAAC,OAAA,EAAmC,QAAA,GAAW,CAAA,KAAc;AAC7E,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,aAAa,OAAA,CAAQ,MAAA;AACrE,EAAA,OAAOA,OAAAA,CAAO,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,QAAA;AAC3D,CAAA;AACA,IAAM,WAAW,CAAC,KAAA,KAA2B,OAAO,IAAA,EAAK,CAAE,aAAY,IAAK,KAAA;AAErE,SAAS,yBAAyB,KAAA,EAAyB;AAChE,EAAA,OAAOP,4BAAAA,EAA6B,CAAE,UAAA,CAAW,QAAA,CAAS,KAAK,CAAC,CAAA;AAClE;AAGO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAqClB,WAAA,CAA6B,MAAA,GAA+B,EAAC,EAAG;AAAnC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AApC7B,IAAA,aAAA,CAAA,IAAA,EAAS,UAAiB,EAAC,CAAA;AAC3B,IAAA,aAAA,CAAA,IAAA,EAAA,YAAA,sBAAiB,GAAA,EAAkB,CAAA;AACnC,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,EAAuC,EAAC,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAiB,QAAOA,4BAAAA,EAA6B,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,EAAY,IAAI,mBAAA,EAAoB,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAiB,SAAA,EAAU,IAAI,iBAAA,EAAkB,CAAA;AACjD,IAAA,aAAA,CAAA,IAAA,EAAiB,YAAA,sBAAiB,OAAA,EAA2C,CAAA;AAC7E,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,sBAAuE,GAAA,EAAI,CAAA;AACnF,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AAER,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,QAAA,CAAA;AACjB,IAAA,aAAA,CAAA,IAAA,EAAiB,SAAA,sBAAc,GAAA,EAAoB,CAAA;AACnD,IAAA,aAAA,CAAA,IAAA,EAAiB,WAAA,sBAAgB,GAAA,EAAsB,CAAA;AACvD,IAAA,aAAA,CAAA,IAAA,EAAiB,SAAA,sBAAc,GAAA,EAAsB,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,CAAA,CAAA;AACpB,IAAA,aAAA,CAAA,IAAA,EAAiB,iBAA4C,EAAC,CAAA;AAC9D,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,EAAoB,CAAA,CAAA;AAC5B,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,EAAW,KAAA,CAAA;AACnB,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,IAAA,CAAA;AACpB,IAAA,aAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,CAAA,CAAA;AACpB,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAAiB,CAAA,CAAA;AACzB,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAA,sBAAkB,GAAA,EAAyF,CAAA;AAC5H,IAAA,aAAA,CAAA,IAAA,EAAiB,aAAA,sBAAkB,GAAA,EAAkB,CAAA;AACrD,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAyB,EAAC,CAAA;AAClC,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,EAA6B;AAAA,MACnC,SAAA,EAAW,KAAKQ,6BAA6B,CAAA;AAAA,MAC7C,YAAA,EAAc,KAAKA,6BAA6B,CAAA;AAAA,MAChD,WAAA,EAAa,KAAA;AAAA,MAAO,YAAA,EAAc,SAAA;AAAA,MAAW,cAAA,EAAgB;AAAA,KAC/D,CAAA;AAGE,IAAA,MAAM,IAAA,GAAO,OAAO,WAAA,IAAe,QAAA;AACnC,IAAA,IAAI,IAAA,KAAS,aAAa,IAAA,KAAS,QAAA,QAAgB,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAE,CAAA;AAC5F,IAAA,IAAI,IAAA,KAAS,aAAa,CAAC,MAAA,CAAO,SAAS,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAC7G,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,QAAA,IAAY,OAAO,UAAU,CAAA;AAC3D,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,CAAC,IAAA,CAAK,KAAK,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AACpH,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA;AAC9D,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,aAAa,CAAA;AACrD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,CAAK,YAAY,CAAC,CAAA;AAAA,EACzC;AAAA,EApCA,IAAI,KAAA,GAA8B;AAAE,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAAY;AAAA,EAsC5D,aAAa,MAAA,CAAO,MAAA,GAA+B,EAAC,EAAoB;AACtE,IAAA,MAAMC,cAAAA,EAAe;AACrB,IAAA,OAAO,IAAI,QAAO,MAAM,CAAA;AAAA,EAC1B;AAAA,EAEQ,WAAA,GAAoB;AAAE,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAAG;AAAA,EACpF,YAAA,GAAyB;AAC/B,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,MAAM,kEAAkE,CAAA;AACxG,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EACQ,gBAAA,GAAiD;AACvD,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,MAAM,IAAI,MAAM,kCAAkC,CAAA;AACvE,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EACQ,gBAAgB,KAAA,EAA+B;AACrD,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA;AACxH,IAAA,OAAO,KAAK,KAAK,CAAA;AAAA,EACnB;AAAA,EACQ,eAAe,KAAA,EAA+B;AACpD,IAAA,OAAO,IAAA,CAAK,WAAA,KAAgB,SAAA,GAAY,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,sBAAsB,IAAA,CAAK,MAAA,EAAQH,KAAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EACvH;AAAA,EAEA,QAAQ,OAAA,EAA4H;AAClI,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO,UAAA,EAAY,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAClF,IAAA,MAAM,YAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,KAAK,OAAA,CAAQ,aAAA,KAAkB,CAAC,IAAA,CAAK,aAAa,IAAA,CAAK,MAAA,CAAO,aAAA,GAAgB,MAAA,CAAA,IAAc,0BAA0B,KAAK,CAAA;AACtK,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,OAAO,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,aAAA,EAAe,WAAW,CAAA;AACjI,IAAA,IAAA,CAAK,KAAK,KAAA,EAAO,SAAA,EAAW,YAAY,IAAA,CAAK,aAAA,EAAe,KAAK,OAAO,CAAA;AACxE,IAAA,IAAI,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,kBAAA,CAAmB,QAAQ,UAAU,CAAA;AAAA,EACpE;AAAA,EAEQ,KAAK,KAAA,EAAiB,SAAA,EAAoC,YAAkC,MAAA,EAAoB,OAAA,EAAqB,oBAAoB,IAAA,EAAY;AAE3K,IAAA,MAAM,iBAAA,GAAoB,sBAAA,CAAuB,KAAA,EAAO,SAAS,CAAA;AAEjE,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,GAAG,UAAA,CAAW,UAAA;AAAA,MACd,cAAc,UAAA,CAAW,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,KAAU;AAC9D,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,aAAA,CAAc,GAAA,CAAI,MAAM,EAAE,CAAA;AACrD,QAAA,MAAM,QAAA,GAAW,WAAW,iBAAA,CAAkB,GAAA,CAAI,QAAQ,IAAI,CAAA,EAAG,eAAA,GAAkB,OAAA,CAAQ,KAAK,CAAA;AAChG,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAc,QAAA,IAAY,MAAM,YAAA,EAAa;AAAA,MAClE,CAAC;AAAA,KACH;AACA,IAAA,MAAM,iBAAiB,CAAC,CAAC,IAAA,CAAK,UAAA,IAAc,KAAK,UAAA,KAAe,KAAA;AAChE,IAAA,MAAM7B,KAAAA,GAAO,IAAI,IAAA,CAAK,IAAA,CAAK,YAAY,CAAC,CAAA;AACxC,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,SAAA,EAAWA,KAAAA,CAAK,sBAAA,CAAuB6B,KAAAA,CAAK,MAAM,CAAA,EAAGA,KAAAA,CAAK,iBAAiB,CAAC,CAAA;AAAA,WAChG7B,KAAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,MAAA,EAAQ6B,MAAK,MAAM,CAAA,EAAGA,KAAAA,CAAK,iBAAiB,CAAC,CAAA;AAClF,MAAA,IAAI,qBAAqB,IAAA,CAAK,UAAA,EAAY7B,KAAAA,CAAK,oBAAA,CAAqB,KAAK,IAAI,CAAA;AAC7E,MAAA,KAAA,MAAW,cAAc,cAAA,GAAiB,KAAK,IAAA,CAAK,OAAA,CAAQ,QAAO,EAAG;AACpE,QAAA,IAAI,UAAA,CAAW,SAAS,QAAA,EAAU;AAChC,UAAA,MAAM,CAAC,IAAI,CAAA,GAAI,uBAAA,CAAwB,OAAO,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,UAAU,CAAA;AAC3E,UAAAA,KAAAA,CAAK,uBAAA,CAAwB6B,KAAAA,CAAK,IAAI,GAAG,OAAO,CAAA;AAAA,QAClD;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AAAE,MAAA7B,MAAK,IAAA,EAAK;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AAC5C,IAAA,IAAI;AAAE,MAAA,IAAA,CAAK,WAAW,OAAA,EAAQ;AAAA,IAAG,SAC1B,KAAA,EAAO;AAAE,MAAAA,MAAK,IAAA,EAAK;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AAC1C,IAAA,IAAA,CAAK,KAAK,IAAA,EAAK;AACf,IAAA,IAAA,CAAK,IAAA,GAAOA,KAAAA;AACZ,IAAA,IAAI,cAAA,EAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAM;AACvC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,iBAAA,GAAoB,iBAAA;AACzB,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,SAAS,CAAA;AACpC,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,iBAAA,IAAqB,CAAA;AAC1B,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,GAAI,UAAA,CAAW,WAAA,CAAY,MAAA,GAAS,UAAA,CAAW,WAAA,GAAc,WAAW,SAAU,CAAA;AAC5H,IAAA,IAAA,CAAK,aAAa,UAAA,CAAW,UAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,UAAA,CAAW,KAAA;AACxB,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,QAAQ,wBAAA,CAAyB,KAAA,EAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAA,CAAK,qBAAA,EAAsB;AACpD,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,4BAAA,CAA6B,OAAA,EAAS;AAAA,QACzD,KAAA;AAAA,QAAO,UAAA;AAAA,QACP,SAAA,EAAW,CAAC,EAAA,KAAO;AACjB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA;AACtC,UAAA,IAAI,QAAA,EAAU,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,QAC9C;AAAA,OACD,CAAA;AAAA,IACH,SACO,KAAA,EAAO;AAAE,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAG,MAAA,MAAM,KAAA;AAAA,IAAO;AAC7C,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAC,CAAA;AAChE,IAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AAC1C,IAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AAC1C,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,CAAC,UAAU,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,sBAAsB,CAAA;AACxD,IAAA,IAAA,CAAK,oBAAoB,UAAA,CAAW,SAAA,CAAU,MAAA,CAAO,CAAC,SAAS,CAAC,MAAA,EAAQ,SAAS,CAAA,CAAE,SAAS,IAAA,CAAK,YAAA,CAAa,IAAI,CAAC,CAAC,CAAC,CAAA;AACrH,IAAA,IAAI,iBAAA,OAAwB,UAAA,EAAW;AAAA,EACzC;AAAA,EAEA,UAAU,MAAA,EAAuB;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,aAAA,EAAe,SAAA,EAAW,CAAA;AACjH,IAAA,IAAA,CAAK,KAAK,KAAA,EAAO,SAAA,EAAW,YAAY,IAAA,CAAK,aAAA,EAAe,KAAK,OAAO,CAAA;AAAA,EAC1E;AAAA,EACA,mBAAA,GAA+C;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,MAAM,YAAY,wBAAA,CAAyB,KAAA,EAAO,KAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAE,CAAA;AAC7E,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,aAAA,EAAe,SAAA,EAAW,CAAA;AACzG,IAAA,IAAA,CAAK,KAAK,KAAA,EAAO,SAAA,EAAW,YAAY,IAAA,CAAK,aAAA,EAAe,KAAK,OAAO,CAAA;AACxE,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EACA,WAAW,KAAA,EAAyB;AAClC,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AAAE,MAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAAQ,MAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAS,MAAA;AAAA,IAAQ;AACrF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,UAAU,CAAA;AACrD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,YAAY,EAAE,OAAA,EAAS,aAAA,EAAe,SAAA,EAAW,CAAA;AACrG,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,UAAA,EAAY,WAAW,UAAA,EAAY,MAAA,EAAQ,SAAS,KAAK,CAAA;AAAA,EAC1E;AAAA,EACA,UAAA,GAAyB;AAAE,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAAS;AAAA,EAChD,cAAA,GAAuC;AAAE,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EAAa;AAAA,EAClE,WAAA,GAA6B;AAAE,IAAA,OAAO,IAAA,CAAK,WAAA,KAAgB,QAAA,GAAW,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAAM;AAAA,EAC1F,eAAe,KAAA,EAAyB;AAAE,IAAA,OAAO,yBAAyB,KAAK,CAAA;AAAA,EAAG;AAAA,EAE1E,gBAAgB,KAAA,EAAuC;AAC7D,IAAA,IAAI,KAAK,SAAA,EAAW;AAAE,MAAA,IAAA,CAAK,aAAA,CAAc,KAAK,KAAK,CAAA;AAAG,MAAA;AAAA,IAAQ;AAC9D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAM,MAAM,CAAA;AAChD,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,QAAA,CAAS,QAAA,GAAW,IAAA;AACpB,IAAA,IAAI,CAAC,QAAA,CAAS,SAAA,CAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG;AAC9C,MAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AACjC,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,KAAM,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACnG;AACA,IAAA,QAAA,CAAS,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,EACtF;AAAA,EACQ,OAAA,CAAQ,QAAgB,OAAA,EAA2C;AACzE,IAAA,MAAM,YAAA,GAAe,EAAE,GAAI,SAAA,IAAa,SAAS,MAAA,CAAO,OAAA,GAAU,EAAC,EAAI,GAAG,OAAA,EAAS,cAAA,EAAgB,SAAA,CAAU,OAAO,CAAA,EAAE;AACtH,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,QAAA;AAAU,QAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM6B,KAAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAGA,KAAAA,CAAK,YAAY,CAAC,CAAC,CAAA;AAAA,MACrG,KAAK,OAAA;AAAS,QAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,IAAA,EAAMA,KAAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAGA,KAAAA,CAAK,YAAY,CAAC,CAAC,CAAA;AAAA,MAC1G,KAAK,UAAA;AAAY,QAAA,OAAO,MAAA,CAAO,IAAA;AAAA,MAC/B,KAAK,QAAA;AAAU,QAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA;AAC1F,EACF;AAAA,EAEQ,WAAW,KAAA,EAA4C;AAC7D,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,MAAM,MAAA,GAASI,eAAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AACxD,IAAA,IAAI,MAAA,GAASA,eAAAA,CAAgB,QAAA,CAAS,KAAA,EAAO,OAAO,QAAQ,CAAA;AAC5D,IAAA,IAAI,MAAA,CAAO,UAAA,KAAe,OAAA,IAAW,MAAA,EAAQ;AAC3C,MAAA,MAAM,WAAY,MAAA,CAA2D,QAAA;AAC7E,MAAA,MAAA,GAAS,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,IAAA,KAAS,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC,CAAA,IAC9E,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA;AACnD,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,IAAA,QAAQ,OAAO,YAAA;AAAc,MAC3B,KAAK,YAAA;AAAc,QAAA,OAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,QAAQ,CAAA;AAAA,MACpE,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,QAAA,GAAW,UAAU,SAAA,CAAU,QAAA;AACrC,QAAA,MAAM,QAAQ,SAAA,CAAU,aAAA,IAAiB,IAAI,KAAA,EAAM,CAAE,kBAAkB,IAAIP,UAAAA,CAAW,SAAS,CAAA,EAAG,QAAA,CAAS,GAAG,QAAA,CAAS,CAAA,EAAG,SAAS,CAAC,CAAA,EAAG,UAAU,aAAa,CAAA;AAC9J,QAAA,MAAM,OAAO,MAAA,CAAO,aAAA;AACpB,QAAA,OAAO,SAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,MAAM,CAAC,KAAA,CAAM,IAAI,CAAC,IAAI,CAAC,KAAA,CAAM,GAAG,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,MAClG;AAAA,MACA,KAAK,UAAA;AAAY,QAAA,OAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,QAAQ,CAAA;AAAA,MAClE,KAAK,OAAA;AAAS,QAAA,OAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA;AAAA,MAC5D,KAAK,SAAA;AAAA,MACL,KAAK,uBAAA,EAAyB;AAC5B,QAAA,MAAM,IAAA,GAAO,MAAA;AACb,QAAA,MAAM,QAAQ,OAAO,MAAA,CAAO,kBAAkB,QAAA,IAAY,CAAC,QAAQ,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA,GACxF,KAAK,qBAAA,GAAwB,MAAA,CAAO,aAAa,CAAA,GAAI,MAAA,CAAO,OAAO,aAAa,CAAA;AACpF,QAAA,OAAO,CAAC,SAAA,CAAU,eAAA,GAAkB,KAAA,IAAS,EAAE,KAAK,CAAC,CAAA;AAAA,MACvD;AAAA,MACA;AAAS,QAAA,OAAO,MAAA;AAAA;AAClB,EACF;AAAA,EAEQ,YAAY,MAAA,EAAgB,OAAA,EAAmC,eAAA,mBAAkB,IAAI,KAAsB,EAAkB;AACnI,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAC1E,IAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAAS,QAAA;AACrC,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,IAAA,GAAO,YAAA,GAAe,mBAAA,CAAoB,MAAA,CAAO,IAAI,CAAA,CAAE,KAAA,EAAM,GAAI,6BAAA,CAA8B,EAAA,EAAK,IAAA,CAAK,UAAU,CAAA;AACzH,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAI,CAAA;AAChD,MAAA,MAAM,QAAA,GAAW,WAAA,EAAa,SAAA,CAAU,SAAA,CAAU,YAAY,EAAE,CAAA;AAChE,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,GAAG,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;AACxD,QAAA,IAAI,CAAC,EAAA,CAAG,MAAA,CAAO,KAAK,EAAE,YAAA,EAAc;AACpC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAC/E,QAAA,MAAM,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AACvC,QAAA,IAAI,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA;AAC3C,QAAA,IAAI,CAAC,QAAA,IAAY,OAAA,CAAQ,SAAA,KAAc,UAAA,EAAY;AAGjD,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAClC,UAAA,MAAM,UAAA,GAAa,QAAA,EAAU,OAAA,EAAQ,CAAE,MAAA;AACvC,UAAA,MAAM,WAAW,UAAA,GAAa,KAAK,CAAA,EAAG,IAAA,KAAS,MAAM,IAAA,GAAO,UAAA,CAAW,KAAK,CAAA,GAAI,YAAY,IAAA,CAAK,CAAC,cAAc,SAAA,CAAU,IAAA,KAAS,MAAM,IAAI,CAAA;AAC7I,UAAA,IAAI,YAAY,QAAA,EAAU;AACxB,YAAA,QAAA,GAAW,KAAA,CAAM,KAAM,QAAA,CAAyB,iBAAA,GAAoB,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA;AAC3F,YAAA,IAAI,QAAA,CAAS,SAAA,KAAcQ,0BAAAA,IAA8B,IAAA,EAAM;AAC7D,cAAA,QAAA,GAAW,KAAA,CAAM,aAAA,KAAkB,YAAA,GAC/B,IAAIR,UAAAA,EAAW,CAAE,SAAA,CAAU,IAAI,CAAA,CAAE,QAAA,CAAS,IAAIA,UAAAA,EAAW,CAAE,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,OAAA,EAAQ,GACxF,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,EAAO,IAAA,KAAS,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,YACtD;AAAA,UACF,CAAA,MAAA,IAAW,MAAM,QAAA,GAAW,IAAA;AAAA,QAC9B;AACA,QAAA,IAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,UAAU,CAAC,CAAA;AAC1C,QAAA,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,QAAA,IAAY,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,KAAA,CAAM,YAAA,EAAc,CAAC,CAAC,CAAA;AAAA,MACtG;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,GAAmB,KAAK,SAAA,KAAcQ,0BAAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,UAAU,OAAO,CAAA;AAC/B,IAAA,MAAM,WAAW,OAAA,CAAQ,SAAA,KAAc,UAAA,IAAe,OAAA,CAAQ,cAAc,MAAA,IAAa,gBAAA;AAIzF,IAAA,IAAA,CAAK,WAAA,CAAY,MAAM,OAAA,CAAQ,MAAA,IAAU,UAAU,YAAA,KAAiB,KAAA,KAAU,CAAA,IAAK,QAAA,KAAa,gBAAA,CAAiB,CAAA;AACjH,IAAA,IAAI,YAAA,IAAgB,UAAU,CAAA,EAAG;AAC/B,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,QAAA,MAAM,IAAA,GAAO,mBAAoB,KAAA,CAAM,aAAA,KAAkB,eAAe,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,IAAI,KAAA,CAAM,KAAA,CAAM,cAAc,CAAA,CAAE,KAAK,CAAC,CAAA,GAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AACnJ,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,MAAM,MAAA,GAAS,MAAM,YAAA,EAAa;AAClC,QAAA,MAAM,KAAA,GAAS,KAAA,CAAsB,iBAAA,CAAkB,yCAAA,KAA8C,IAAA;AACrG,QAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,MAAA,GAAS,CAAA,GAAI,MAAA;AACnC,QAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,MAAM,MAAA,CAAO,MAAA,EAAQ,UAAU,MAAA,EAAQ;AACnE,UAAA,MAAM,MAAA,GAAS,MAAA,IAAU,KAAA,GAAQ,KAAA,GAAQ,CAAA,CAAA;AACzC,UAAA,IAAI,KAAA,CAAM,kBAAkB,YAAA,EAAc;AACxC,YAAA,MAAM,OAAA,GAAU,IAAIR,UAAAA,EAAW,CAAE,UAAU,IAAI,CAAA;AAC/C,YAAA,MAAM,QAAQ,IAAIA,UAAAA,GAAa,SAAA,CAAU,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC7D,YAAA,OAAA,CAAQ,MAAM,KAAA,EAAO,KAAK,EAAE,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,UAC1D,CAAA,MAAO;AACL,YAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,KAAA,EAAO,QAAQ,CAAA,EAAG;AAC1C,cAAA,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,IAAI,CAAA,GAAI,KAAK,IAAI,CAAA,GAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,IAAI,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,IAAK,KAAA;AACxF,cAAA,IAAI,KAAA,EAAO;AACT,gBAAA,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,IAAI,CAAA,IAAK,KAAA;AAC/B,gBAAA,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,IAAI,CAAA,IAAK,KAAA;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,QAAA,IAAY,CAAC,gBAAA,EAAkB;AACjC,MAAA,MAAM,SAAA,GAAY,KAAK,KAAA,EAAM;AAC7B,MAAA,KAAA,MAAW,KAAA,IAAS,UAAU,MAAA,EAAQ;AACpC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAClC,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,EAAa;AACjC,QAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,IAAU,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAAA,MACnG;AACA,MAAA,MAAM,oBAAoB,OAAA,CAAQ,wBAAA;AAClC,MAAA,IAAII,OAAAA,CAAO,iBAAiB,CAAA,EAAG,cAAA,CAAe,gBAAA,CAAiB,IAAA,EAAM,iBAAA,GAAoB,EAAA,EAAI,IAAA,CAAK,KAAA,EAAM,EAAG,EAAE,CAAA;AAAA,WACxG,cAAA,CAAe,gBAAA,CAAiB,IAAA,EAAM,CAAA,EAAG,WAAW,EAAE,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,CAAC,YAAY,gBAAA,EAAkB;AAEjC,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAClC,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,EAAa;AACjC,QAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,MAAM,MAAA,CAAO,MAAA,EAAQ,UAAU,KAAA,EAAO;AAClE,UAAA,IAAI,KAAA,CAAM,kBAAkB,YAAA,EAAc,IAAIJ,YAAW,CAAE,SAAA,CAAU,IAAI,CAAA,CAAE,QAAA,CAAS,IAAIA,YAAW,CAAE,SAAA,CAAU,MAAM,MAAA,EAAQ,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,eAC7J,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,KAAA,EAAO,IAAA,IAAQ,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,IAAI,CAAA,IAAK,KAAK,IAAI,CAAA;AAAA,QAC3F;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,WAAWQ,0BAAAA,GAA6BC,wBAAAA;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,WAAA,CAAY,IAAA,EAAqB,MAAA,EAAgB,cAAA,GAAiB,KAAA,EAAa;AACrF,IAAA,IAAI,MAAA,KAAW,QAAA,IAAY,CAAC,cAAA,EAAgB;AAC5C,IAAA,MAAM,KAAA,GAAQ,CAACC,SAAAA,KAA6B;AAC1C,MAAA,QAAQ,MAAA;AAAQ,QACd,KAAK,QAAA;AAAU,UAAA,OAAOA,SAAAA,GAAWA,SAAAA;AAAA,QACjC,KAAK,SAAA;AAAW,UAAA,OAAO,CAAA,GAAA,CAAK,IAAIA,SAAAA,KAAa,CAAA;AAAA,QAC7C,KAAK,WAAA;AAAa,UAAA,OAAOA,SAAAA,GAAW,MAAM,CAAA,GAAIA,SAAAA,GAAWA,YAAW,CAAA,GAAA,CAAK,EAAA,GAAKA,SAAAA,GAAW,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,QACnG,KAAK,gBAAA;AAAkB,UAAA,OAAOA,SAAAA,GAAW,MAAM,CAAA,GAAIA,SAAAA,IAAY,IAAI,CAAA,GAAA,CAAK,EAAA,GAAKA,SAAAA,GAAW,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,QAClG;AAAS,UAAA,OAAOA,SAAAA;AAAA;AAClB,IACF,CAAA;AACA,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,MAAA,IAAI,MAAM,gBAAA,EAAiB,KAAM,uBAAuB,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA,EAAG;AAClF,MAAA,MAAM,iBAAA,GAAqB,KAAA,CAAsB,iBAAA,CAAkB,yCAAA,KAA8C,IAAA;AACjH,MAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,QAAA,IAAI,qBAAqB,cAAA,EAAgB;AACvC,UAAA,KAAA,CAAM,MAAA,GAAS,IAAI,YAAA,CAAc,KAAA,CAAsB,iBAAA,EAAkB,CAAE,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AACnG,UAAA,KAAA,CAAM,iBAAiB,iBAAiB,CAAA;AAAA,QAC1C;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,iBAAA,IAAqB,MAAM,gBAAA,EAAiB,KAAM,sBAAsB,MAAA,KAAW,QAAA,IAAY,CAAC,cAAA,EAAgB;AACrH,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,EAAa;AAClC,MAAA,MAAM,KAAA,GAAQ,iBAAA,GAAoB,MAAA,GAAS,CAAA,GAAI,MAAA;AAC/C,MAAA,MAAM,WAAA,GAAe,MAAsB,iBAAA,EAAkB;AAC7D,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAc,KAAA,KAA6B;AAAE,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAG,QAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,KAAA,EAAO,IAAA,IAAQ,GAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,MAAG,CAAA;AACrJ,MAAA,KAAA,IAAS,KAAA,GAAQ,GAAG,KAAA,GAAQ,KAAA,CAAM,MAAM,MAAA,GAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AAC9D,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAEjC,QAAA,MAAM,MAAA,GAAS,KAAA,GAAQ,MAAA,IAAU,iBAAA,GAAoB,KAAA,GAAQ,CAAA,CAAA;AAC7D,QAAA,MAAA,CAAO,OAAO,KAAA,CAAM,MAAA,CAAO,SAAS,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAC,CAAA;AAC3D,QAAA,IAAI,OAAO,KAAA,EAAO;AAClB,QAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,EAAA,EAAI,QAAQ,CAAA,EAAG;AACvC,UAAA,MAAMA,YAAW,IAAA,GAAO,EAAA;AACxB,UAAA,MAAA,CAAO,KAAA,GAAA,CAAS,GAAA,GAAM,KAAA,IAASA,SAAAA,EAAU,WAAA,CAAY,QAAA,CAAS,KAAA,GAAA,CAAS,GAAA,GAAM,KAAA,IAAS,KAAA,CAAMA,SAAQ,CAAC,CAAC,CAAA;AAAA,QACxG;AAAA,MACF;AACA,MAAA,MAAM,cAAc,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,IAAK,MAAA,IAAU,oBAAoB,KAAA,GAAQ,CAAA,CAAA;AACpF,MAAA,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,UAAA,EAAY,UAAA,GAAa,KAAK,CAAC,CAAA;AACjG,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAI,YAAA,CAAa,KAAK,CAAA;AACpC,MAAA,KAAA,CAAM,MAAA,GAAS,IAAI,YAAA,CAAa,MAAM,CAAA;AACtC,MAAA,IAAI,qBAAqB,KAAA,CAAM,gBAAA,OAAuB,iBAAA,EAAmB,KAAA,CAAM,iBAAiB,iBAAiB,CAAA;AAAA,IACnH;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,SAAmC,IAAA,EAAiD;AACxG,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,KAAa,CAAA,GAAI,MAAA,GAAS,QAAQ,QAAA,KAAa,OAAA,CAAQ,IAAA,KAAS,IAAA,GAAO,QAAA,GAAW,MAAA,CAAA;AACpG,IAAA,MAAM,KAAA,GAAQN,QAAO,OAAA,CAAQ,WAAW,KAAK,OAAA,CAAQ,WAAA,GAAc,CAAA,GAAI,OAAA,CAAQ,WAAA,GAAc,IAAA;AAC7F,IAAA,IAAI,KAAA,GAAQ,QAAQ,KAAA,IAAS,OAAA,CAAQ,gBAAgB,OAAA,CAAQ,IAAA,IAAQ,QAAQ,SAAA,IAAa,CAAA;AAC1F,IAAA,IAAI,QAAQ,OAAA,KAAY,IAAA,UAAc,CAAC,IAAA,CAAK,IAAI,KAAK,CAAA;AACrD,IAAA,OAAO;AAAA,MACL,cAAcA,OAAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,GAAI,QAAQ,IAAA,GAAOA,OAAAA,CAAO,OAAA,CAAQ,SAAS,IAAI,OAAA,CAAQ,SAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,KAAK,QAAA,GAAW,CAAA;AAAA,MAChI,KAAA;AAAA,MACA,QAAQA,OAAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,GAAI,QAAQ,WAAA,GAAc,CAAA;AAAA,MAC5D,SAAA,EAAW,IAAA,CAAK,SAAA,KAAcI,0BAAAA,GAA6B,UAAA,GAAa,QAAA;AAAA,MACxE,MAAM,EAAE,IAAA,EAAM,IAAA,KAAS,MAAA,GAAS,SAAS,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,UAAA,GAAa,aAAa,QAAA,EAAU,KAAA,EAAO,IAAA,KAAS,MAAA,GAAS,IAAI,KAAA,EAAM;AAAA,MAChJ,WAAW,OAAA,CAAQ,SAAA,KAAc,aAAa,OAAA,CAAQ,iBAAA,KAAsB,QAAQ,SAAA,GAAY;AAAA,KAClG;AAAA,EACF;AAAA,EACQ,eAAe,OAAA,EAAyC;AAC9D,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,IAAa,CAAC,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,WAAA,EAAa,gBAAgB,EAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,EAC5L;AAAA,EAEQ,MAAA,CAAO,MAAA,EAAgB,OAAA,EAAmC,QAAA,EAA4C;AAC5G,IAAA,OAAA,GAAU,EAAE,GAAI,SAAA,IAAa,MAAA,GAAS,OAAO,OAAA,GAAU,EAAC,EAAI,GAAG,OAAA,EAAQ;AACvE,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAA6C;AACnE,IAAA,MAAM,aAAa,IAAA,CAAK,iBAAA;AACxB,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,iBAA0D,MAAM;AAAA,IAAC,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAK;AACnC,IAAA,MAAA,CAAO,cAAA,CAAe,MAAA,EAAQ,UAAA,EAAY,EAAE,GAAA,EAAK,MAAM,MAAA,CAAO,OAAA,EAAS,UAAA,EAAY,IAAA,EAAM,CAAA;AACzF,IAAA,MAAM,aAAa,MAAM;AAAE,MAAA,MAAA,CAAO,OAAA,GAAU,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAAE,QAAA,cAAA,GAAiB,OAAA;AAAA,MAAS,CAAC,CAAA;AAAA,IAAG,CAAA;AACrG,IAAA,UAAA,EAAW;AACX,IAAA,MAAA,CAAO,SAAA,GAAY,CAAC,QAAA,KAAa;AAC/B,MAAA,MAAM,QAAA,GAAW,OAAO,QAAA,KAAa,UAAA,GAAa,WAAW,CAAC,KAAA,KAAkC,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACnH,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM;AAAE,QAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,MAAG,CAAA;AAAA,IAC7C,CAAA;AACA,IAAA,MAAM,QAAQ,MAA+B;AAC3C,MAAA,IAAI,eAAe,IAAA,CAAK,iBAAA,EAAmB,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAClH,MAAA,IAAA,CAAK,eAAe,OAAO,CAAA;AAC3B,MAAA,MAAM,SAAA,GAAY,KAAK,gBAAA,EAAiB;AACxC,MAAA,MAAM,eAAA,uBAAsB,GAAA,EAAsB;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,SAAS,eAAe,CAAA;AAC9D,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAA;AAC/C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAI,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,IAAI,CAAA;AACjD,MAAA,IAAI,QAAA,IAAY,UAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG,QAAA,CAAS,UAAU,QAAA,CAAS,EAAA;AAC9E,MAAA,IAAI,SAAS,UAAA,EAAW;AACxB,MAAA,MAAM,OAAA,GAAU,cAAA;AAChB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,IAAA,CAAK,SAAA,IAAa,CAAA;AAClB,MAAA,IAAI,EAAA;AACJ,MAAA,IAAI;AAAE,QAAA,EAAA,GAAK,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,QAAQ,CAAA;AAAA,MAAG,SAC9C,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,SAAA,IAAa,CAAA;AAClB,QAAA,OAAO,CAAC,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,KAAA,EAAQ,CAAA;AACrG,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,QAAA,GAAqB;AAAA,QACzB,EAAA;AAAA,QAAI,MAAA;AAAA,QAAQ,SAAS,EAAE,GAAG,SAAS,cAAA,EAAgB,SAAA,CAAU,OAAO,CAAA,EAAE;AAAA,QAAG,SAAA;AAAA,QAAW,QAAA,EAAU,KAAA;AAAA,QAAO,eAAA;AAAA,QACrG,MAAA,EAAQ,CAAC,IAAA,KAAS;AAAE,UAAA,OAAA,GAAU,IAAA;AAAM,UAAA,OAAO,KAAA,EAAM;AAAA,QAAG,CAAA;AAAA,QACpD,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,UAAA,IAAI,OAAA,EAAS;AACb,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,OAAA,CAAQ,KAAK,CAAA;AACb,UAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,SAAS,CAAA,EAAG;AACrC,YAAA,IAAI;AAAE,cAAA,QAAA,CAAS,KAAK,CAAA;AAAA,YAAG,SAChB,KAAA,EAAO;AAAE,cAAA,cAAA,CAAe,MAAM;AAAE,gBAAA,MAAM,KAAA;AAAA,cAAO,CAAC,CAAA;AAAA,YAAG;AAAA,UAC1D;AAAA,QACF;AAAA,OACF;AACA,MAAA,OAAA,GAAU,QAAA;AACV,MAAA,MAAA,CAAO,QAAA,GAAW,EAAA;AAClB,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAC/B,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AACtC,MAAA,MAAM,SAAS,MAAM;AACnB,QAAA,IAAA,CAAK,WAAA,EAAY;AACjB,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,SAAA,IAAa,CAAC,SAAA,CAAU,SAAA,CAAU,EAAE,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,gDAAgD,CAAA;AAAA,MAChI,CAAA;AACA,MAAA,MAAM,OAAA,GAAU,CAAC,OAAA,KAAiE;AAChF,QAAA,MAAA,EAAO;AACP,QAAA,SAAA,CAAU,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC7B,QAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAQ,IAAA,CAAK,OAAO,QAAQ,CAAA;AACjD,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AACA,MAAA,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,MAAM;AAClC,QAAA,IAAI,IAAA,CAAK,cAAc,SAAA,IAAa,CAAC,UAAU,SAAA,CAAU,EAAE,GAAG,OAAO,MAAA;AACrE,QAAA,MAAA,EAAO;AACP,QAAA,MAAM,OAAA,GAAUJ,QAAO,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA,GAAI,QAAA,CAAS,QAAQ,UAAA,GAAa,CAAA;AACpF,QAAA,IAAI,OAAA,GAAU,KAAK,CAAC,QAAA,CAAS,UAAU,SAAA,CAAU,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,aAC/D,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAC7B,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AACA,MAAA,MAAA,CAAO,QAAQ,MAAM,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAS,CAAA;AAC9C,MAAA,MAAA,CAAO,SAAS,MAAM;AACpB,QAAA,MAAA,EAAO;AACP,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,OAAA,GAAU,EAAE,GAAG,QAAA,CAAS,OAAA,EAAS,MAAM,SAAA,CAAU,SAAA,CAAU,EAAE,CAAA,CAAG,IAAA,EAAK;AACrE,UAAA,OAAO,KAAA,EAAM;AAAA,QACf;AACA,QAAA,OAAO,OAAA,CAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,MACnC,CAAA;AACA,MAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,eAAA,GAAkB,CAAC,KAAA,KAAU;AAAE,QAAA,MAAA,EAAO;AAAG,QAAA,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,EAAE,KAAA,EAAO,CAAA;AAAG,QAAA,OAAO,MAAA;AAAA,MAAQ,CAAA;AAC3H,MAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,IAAA,GAAO,CAAC,OAAA,KAAY,QAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,CAAA;AAC7E,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,YAAA,GAAe,CAAC,KAAA,KAAU;AAClD,QAAA,MAAA,EAAO;AACP,QAAA,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,EAAE,cAAA,EAAgB,OAAO,CAAA;AACvD,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AACA,MAAA,MAAA,CAAO,YAAA,GAAe,MAAA,CAAO,SAAA,GAAY,CAAC,KAAA,KAAU;AAAE,QAAA,MAAA,EAAO;AAAG,QAAA,IAAA,CAAK,cAAA,CAAe,UAAU,KAAK,CAAA;AAAG,QAAA,OAAO,MAAA;AAAA,MAAQ,CAAA;AACrH,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,iBAAA;AAC1C,QAAA,IAAIA,OAAAA,CAAO,IAAI,CAAA,IAAK,IAAA,GAAO,GAAG,SAAA,CAAU,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,MACzD,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,SAAA,IAAa,CAAA;AAClB,QAAA,OAAO,CAAC,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,KAAA,EAAQ,CAAA;AAAA,MACvG;AACA,MAAA,IAAI,UAAA,IAAc,SAAA,CAAU,SAAA,CAAU,EAAE,CAAA,EAAG;AACzC,QAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,QAAQ,CAAA;AAC/D,QAAA,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAA,CAAO,OAAO,MAAM;AAAE,MAAA,IAAI,OAAA,EAAS,OAAA,GAAU,EAAE,GAAG,QAAQ,OAAA,EAAQ;AAAG,MAAA,OAAO,KAAA,EAAM;AAAA,IAAG,CAAA;AACrF,IAAA,MAAM,aAAa,MAAM;AAAE,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IAAG,CAAA;AAEjG,IAAA,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,MAAM,MAAA;AACpC,IAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,MAAA,GAAS,UAAA;AAC/B,IAAA,MAAA,CAAO,YAAA,GAAe,MAAA,CAAO,SAAA,GAAY,CAAC,KAAA,KAAU;AAClD,MAAA,IAAA,CAAK,WAAA,EAAY;AACjB,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AACzB,MAAA,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,GAAG,KAAA,EAAM;AACjC,MAAA,IAAI,WAAA,IAAe,SAAS,EAAE,mBAAA,IAAuB,QAAQ,OAAA,CAAQ,iBAAA,GAAoB,MAAM,SAAA,KAAc,SAAA;AAC7G,MAAA,IAAI,mBAAA,IAAuB,KAAA,IAAS,EAAE,WAAA,IAAe,KAAA,CAAA,UAAgB,SAAA,GAAY,KAAA,CAAM,iBAAA,KAAsB,KAAA,GAAQ,SAAA,GAAY,MAAA;AACjI,MAAA,IAAI,MAAA,IAAU,SAAS,EAAE,UAAA,IAAc,QAAQ,OAAA,CAAQ,QAAA,GAAW,KAAA,CAAM,IAAA,GAAO,QAAA,GAAW,MAAA;AAC1F,MAAA,IAAI,cAAc,KAAA,IAAS,EAAE,aAAA,IAAiB,KAAA,CAAA,SAAe,OAAA,CAAQ,WAAA;AACrE,MAAA,IAAI,QAAA,IAAY,SAAS,WAAA,IAAe,KAAA,IAAS,oBAAoB,KAAA,EAAO,OAAA,CAAQ,cAAA,GAAiB,SAAA,CAAU,KAAK,CAAA;AACpH,MAAA,IAAI,MAAA,IAAU,SAAS,WAAA,IAAe,KAAA,UAAe,IAAA,GAAO,KAAA,CAAM,QAAQ,KAAA,CAAM,SAAA;AAChF,MAAA,IAAI,OAAA,IAAW,SAAS,cAAA,IAAkB,KAAA,IAAS,UAAU,KAAA,IAAS,WAAA,IAAe,KAAA,IAAS,SAAA,IAAa,KAAA,EAAO;AAChH,QAAA,IAAI,QAAQ,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,YAAA,IAAgB,MAAM,IAAA,IAAQ,KAAA,CAAM,SAAA,IAAa,OAAA,CAAQ,SAAS,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,IAAA,IAAQ,QAAQ,SAAA,IAAa,CAAA;AAChK,QAAA,IAAI,SAAA,IAAa,OAAO,KAAA,GAAQ,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,KAAA,CAAM,OAAA,GAAU,EAAA,GAAK,CAAA,CAAA;AACxE,QAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAChB,QAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,MACjB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,YAAA,GAAe,CAAC,KAAA,KAAU,OAAO,YAAA,CAAa,EAAE,cAAA,EAAgB,KAAA,EAAO,CAAA;AACjG,IAAA,MAAA,CAAO,QAAA,GAAW,OAAO,eAAA,GAAkB,CAAC,UAAU,MAAA,CAAO,YAAA,CAAa,EAAE,KAAA,EAAO,CAAA;AACnF,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,IAAA,GAAO,CAAC,SAAS,MAAA,CAAO,YAAA,CAAa,EAAE,IAAA,EAAM,CAAA;AACrE,IAAA,OAAO,QAAA,GAAW,OAAM,GAAI,MAAA;AAAA,EAC9B;AAAA,EAEQ,OAAO,QAAA,EAA0B;AACvC,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AACjC,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,KAAM,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,EACnG;AAAA,EACQ,cAAA,CAAe,UAAoB,KAAA,EAAuC;AAChF,IAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AACzB,IAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA;AAC9C,IAAA,IAAI,SAAA,KAAc,KAAK,SAAA,IAAa,CAAC,QAAQ,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAC7G,IAAA,MAAM,UAAU,EAAE,GAAG,QAAA,CAAS,OAAA,EAAS,GAAG,KAAA,EAAM;AAChD,IAAA,IAAI,WAAA,IAAe,SAAS,EAAE,mBAAA,IAAuB,QAAQ,OAAA,CAAQ,iBAAA,GAAoB,MAAM,SAAA,KAAc,SAAA;AAC7G,IAAA,IAAI,mBAAA,IAAuB,KAAA,IAAS,EAAE,WAAA,IAAe,KAAA,CAAA,UAAgB,SAAA,GAAY,KAAA,CAAM,iBAAA,KAAsB,KAAA,GAAQ,SAAA,GAAY,MAAA;AACjI,IAAA,IAAI,MAAA,IAAU,SAAS,EAAE,UAAA,IAAc,QAAQ,OAAA,CAAQ,QAAA,GAAW,KAAA,CAAM,IAAA,GAAO,QAAA,GAAW,MAAA;AAC1F,IAAA,IAAI,cAAc,KAAA,IAAS,EAAE,aAAA,IAAiB,KAAA,CAAA,SAAe,OAAA,CAAQ,WAAA;AACrE,IAAA,IAAI,QAAA,IAAY,SAAS,WAAA,IAAe,KAAA,IAAS,oBAAoB,KAAA,EAAO,OAAA,CAAQ,cAAA,GAAiB,SAAA,CAAU,KAAK,CAAA;AACpH,IAAA,IAAI,CAAC,QAAA,EAAU,WAAA,EAAa,gBAAA,EAAkB,aAAa,QAAA,EAAU,SAAA,EAAW,YAAA,EAAc,YAAY,EAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,IAAO,KAAK,CAAA,EAAG;AACvI,MAAA,MAAM,OAAO,IAAA,CAAK,WAAA,CAAY,SAAS,MAAA,EAAQ,OAAA,EAAS,SAAS,eAAe,CAAA;AAChF,MAAA,SAAA,CAAU,WAAA,CAAY,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA;AACvC,MAAA,IAAI,WAAA,IAAe,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,SAAS,EAAA,EAAI,EAAE,IAAA,EAAM,cAAA,EAAgB,WAAW,IAAA,CAAK,SAAA,KAAcI,0BAAAA,GAA6B,UAAA,GAAa,UAAU,CAAA;AAAA,IACrK;AACA,IAAA,IAAI,aAAA,IAAiB,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,KAAA,CAAM,WAAA,EAAa,CAAA;AAC3G,IAAA,IAAI,OAAA,IAAW,SAAS,cAAA,IAAkB,KAAA,IAAS,UAAU,KAAA,IAAS,WAAA,IAAe,KAAA,IAAS,SAAA,IAAa,KAAA,EAAO;AAChH,MAAA,IAAI,KAAA,GAAQ,MAAM,KAAA,IAAS,KAAA,CAAM,gBAAgB,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,SAAA;AACzF,MAAA,IAAI,SAAA,IAAa,OAAO,KAAA,GAAQ,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,KAAA,CAAM,OAAA,GAAU,EAAA,GAAK,CAAA,CAAA;AACxE,MAAA,SAAA,CAAU,QAAQ,QAAA,CAAS,EAAA,EAAI,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAC1D,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAChB,MAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,IACjB;AACA,IAAA,IAAI,MAAA,IAAU,KAAA,IAAS,WAAA,IAAe,KAAA,EAAO;AAC3C,MAAA,OAAA,CAAQ,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAAA;AACnC,MAAA,SAAA,CAAU,OAAA,CAAQ,SAAS,EAAA,EAAI,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,UAAA,IAAc,KAAA,IAAS,MAAA,IAAU,KAAA,IAAS,iBAAiB,KAAA,EAAO;AACpE,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,QAAA,CAAS,OAAO,EAAE,GAAG,SAAS,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AACjD,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,EAAE,MAAM,SAAA,EAAW,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,SAAS,MAAA,CAAO,OAAA,EAAS,CAAA,CAAE,MAAO,CAAA;AAAA,IAC/G;AACA,IAAA,IAAI,mBAAA,IAAuB,SAAS,WAAA,IAAe,KAAA,YAAiB,OAAA,CAAQ,QAAA,CAAS,IAAI,EAAE,IAAA,EAAM,gBAAgB,SAAA,EAAW,IAAA,CAAK,cAAc,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA,CAAE,WAAY,CAAA;AACtL,IAAA,QAAA,CAAS,OAAA,GAAU,OAAA;AACnB,IAAA,IAAI,CAAC,UAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EAC7D;AAAA,EAEA,uBAAuB,KAAA,EAA8B;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,KAAS,QAAA,IAAa,IAAA,CAAK,QAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAA8B,SAAS,IAAA,EAAM;AAC9H,MAAA,MAAM,CAAC,EAAE,CAAA,GAAI,uBAAA,CAAwB,OAAO,CAAC,IAAI,CAAA,EAAG,IAAA,CAAK,UAAW,CAAA;AACpE,MAAA,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwBL,KAAAA,CAAK,EAAE,GAAG,OAAO,CAAA;AACnD,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,IACvE;AAAA,EACF;AAAA,EACA,mBAAmB,KAAA,EAA8B;AAC/C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAG,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AAC7E,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC/B,MAAA,IAAA,CAAK,IAAA,CAAK,qBAAA,CAAsB,MAAA,CAAO,IAAI,CAAA;AAAA,IAC7C;AACA,IAAA,IAAA,CAAK,sBAAA,CAAuB,KAAA,IAAS,EAAE,CAAA;AACvC,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EACnB;AAAA,EACA,oBAAoB,IAAA,EAAuB;AACzC,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAI,CAAA;AACxB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC7C;AAAA,EACA,iBAAA,GAA2B;AAAE,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AAAA,EAAG;AAAA,EAC5E,aAAA,CAAc,IAAA,EAAc,OAAA,GAAoC,EAAC,EAA4B;AAC3F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAA;AAC9D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAC1C;AAAA,EACQ,KAAA,CAAM,MAAA,EAAgB,OAAA,EAAmC,IAAA,EAAwC;AACvG,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAA,CAAK,eAAe,OAAO,CAAA;AAC3B,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAC1C;AAAA,EACA,SAAA,CAAU,IAAA,EAAc,MAAA,EAAoB,OAAA,GAAoC,EAAC,EAA4B;AAC3G,IAAA,IAAI,OAAA,CAAQ,iBAAA,EAAmB,MAAM,IAAI,MAAM,mFAAmF,CAAA;AAClI,IAAA,OAAO,KAAK,KAAA,CAAM,EAAE,IAAA,EAAM,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,EAAG,SAAS,IAAA,CAAK,OAAO,CAAA,EAAE,EAAG,SAAS,KAAK,CAAA;AAAA,EACzG;AAAA,EACA,aAAA,CAAc,IAAA,EAAc,MAAA,EAAoB,OAAA,GAAoC,EAAC,EAA4B;AAAE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,EAAG;AAAA,EACjK,cAAA,CAAe,IAAA,EAAc,QAAA,EAAiB,OAAA,GAAoC,EAAC,EAA4B;AAC7G,IAAA,OAAO,KAAK,KAAA,CAAM,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,SAAS,IAAA,CAAK,OAAO,CAAA,EAAE,EAAG,SAAS,KAAK,CAAA;AAAA,EAC1G;AAAA,EACA,kBAAA,CAAmB,IAAA,EAAc,QAAA,EAAiB,OAAA,GAAoC,EAAC,EAA4B;AAAE,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,EAAG;AAAA,EAC1K,YAAY,OAAA,EAAwD,eAAA,GAA8B,EAAC,EAAG,OAAA,GAAoC,EAAC,EAA4B;AACrK,IAAA,OAAO,OAAO,OAAA,KAAY,QAAA,GAAW,KAAK,SAAA,CAAU,OAAA,EAAS,iBAAiB,OAAO,CAAA,CAAE,MAAK,GAAI,IAAA,CAAK,UAAU,OAAA,CAAQ,IAAA,EAAM,QAAQ,MAAA,EAAQ,eAAe,EAAE,IAAA,EAAK;AAAA,EACrK;AAAA,EACA,gBAAA,CAAiB,OAAA,EAA4C,OAAA,GAAoC,EAAC,EAA4B;AAAE,IAAA,OAAO,IAAA,CAAK,eAAe,OAAA,CAAQ,IAAA,EAAM,QAAQ,QAAA,EAAU,OAAO,EAAE,IAAA,EAAK;AAAA,EAAG;AAAA,EAC5M,SAAS,KAAA,EAAkE;AAAE,IAAA,OAAO,OAAO,UAAU,QAAA,GAAW,IAAA,CAAK,cAAc,KAAK,CAAA,GAAI,MAAM,IAAA,EAAK;AAAA,EAAG;AAAA,EAC1J,kBAAA,GAA8B;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AAAA,EAC7C,eAAe,IAAA,EAAoB;AAAE,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAG,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,EAAG;AAAA,EAC3H,WAAA,CAAY,IAAA,EAAc,OAAA,EAAiB,OAAA,GAAoC,EAAC,EAA4B;AAC1G,IAAA,MAAM,WAAW,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,aAAa,CAAC,QAAA,CAAS,OAAO,IAAA,CAAK,UAAA,CAAW,WAAW,CAAC,CAAA;AAC9G,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,CAAc,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,CAAA;AAC1E,IAAA,KAAA,MAAW,QAAA,IAAY,QAAA,EAAU,IAAI,QAAA,CAAS,UAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,IAAI,OAAO,CAAA;AAC/H,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,cAAc,IAAA,EAAoB;AAChC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,IAAI,QAAA,CAAS,SAAA,CAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,EAAE,IAAA,EAAM,QAAQ,CAAA;AACvG,IAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EACtB;AAAA,EACA,iBAAA,GAA0B;AACxB,IAAA,KAAA,MAAW,YAAY,CAAC,GAAG,KAAK,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAG;AACnD,MAAA,IAAI,QAAA,CAAS,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACzC,MAAA,IAAI,QAAA,CAAS,SAAA,CAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,EAAE,IAAA,EAAM,QAAQ,CAAA;AACvG,MAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,IACtB;AAAA,EACF;AAAA,EACA,eAAe,IAAA,EAAoB;AAAE,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAG,IAAA,IAAI,CAAA,IAAK,SAAA,CAAU,OAAA,CAAQ,EAAE,EAAA,EAAI,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,EAAG;AAAA,EAC5H,gBAAgB,IAAA,EAAoB;AAClC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,EAAE,GAAG,CAAA,CAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,IAAQ,GAAG,CAAA;AAAA,SAClF,CAAA,CAAE,UAAU,OAAA,CAAQ,CAAA,CAAE,IAAI,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EACnD;AAAA,EACA,kBAAA,GAA2B;AAAE,IAAA,KAAA,MAAW,KAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,MAAO,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,UAAU,OAAA,CAAQ,CAAA,CAAE,IAAI,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,EAAG;AAAA,EACrI,mBAAA,GAA4B;AAAE,IAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAAA,EAAG;AAAA,EACvG,gBAAA,CAAiB,MAAc,OAAA,EAAyC;AAAE,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAG,IAAA,IAAI,CAAA,EAAG,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,OAAO,CAAA;AAAA,EAAG;AAAA,EACpJ,iBAAA,CAAkB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,EAAG;AAAA,EACtG,qBAAA,CAAsB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,cAAA,EAAgB,OAAO,CAAA;AAAA,EAAG;AAAA,EACnH,gBAAA,CAAiB,MAAc,KAAA,EAAsB;AAAE,IAAA,IAAA,CAAK,iBAAiB,IAAA,EAAM,EAAE,UAAU,KAAA,GAAQ,QAAA,GAAW,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC7H,oBAAA,CAAqB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,QAAA,EAAU,OAAO,CAAA;AAAA,EAAG;AAAA,EAC5G,uBAAA,CAAwB,MAAc,KAAA,EAA4B;AAAE,IAAA,IAAA,CAAK,iBAAiB,IAAA,EAAM,EAAE,UAAU,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AAAA,EAAG;AAAA,EAC7I,mBAAA,CAAoB,MAAc,KAAA,EAAsB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EAAG;AAAA,EAC3G,qBAAA,CAAsB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,SAAA,EAAW,OAAO,CAAA;AAAA,EAAG;AAAA,EAC9G,kBAAA,CAAmB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,cAAA,CAAe,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAG,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,MAAA,EAAQ,OAAO,CAAA;AAAA,EAAG;AAAA,EAChJ,aAAA,CAAc,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAM,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EAAG;AAAA,EACjG,gBAAA,CAAiB,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,aAAA,CAAc,MAAM,KAAK,CAAA;AAAA,EAAG;AAAA,EACvF,cAAA,CAAe,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,aAAA,CAAc,MAAM,KAAK,CAAA;AAAA,EAAG;AAAA,EACrF,WAAA,CAAY,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,aAAA,CAAc,MAAM,KAAK,CAAA;AAAA,EAAG;AAAA,EAClF,IAAA,CAAK,MAAc,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,aAAA,CAAc,MAAM,KAAK,CAAA;AAAA,EAAG;AAAA,EAC3E,sBAAsB,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAA,EAAiB,CAAE,YAAA,CAAa,KAAK,CAAA;AAAG,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EAAO;AAAA,EAClH,kBAAkB,IAAA,EAA0B;AAC1C,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,SAAA,CAAU,SAAA,CAAU,EAAE,EAAE,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,CAAA,EAAG;AAAE,MAAA,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAAG,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,WAAW,KAAA,EAAM;AAAA,IAAG;AAC/F,IAAA,MAAM,OAAA,GAAU,OAAO,SAAA,EAAU;AACjC,IAAA,OAAO;AAAA,MAAE,IAAA;AAAA,MAAM,UAAU,CAAA,CAAE,EAAA;AAAA,MAAI,OAAA;AAAA,MAAS,SAAA,EAAW,OAAA;AAAA,MAAS,QAAQ,MAAA,CAAO,MAAA;AAAA,MAAQ,WAAW,CAAA,CAAE,QAAA;AAAA,MAC9F,MAAM,MAAA,CAAO,IAAA;AAAA,MAAM,QAAA,EAAU,MAAA,CAAO,OAAA,EAAQ,CAAE,QAAA;AAAA,MAAU,OAAO,MAAA,CAAO,SAAA;AAAA,MACtE,cAAA,EAAgB,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AAAA,MAAG,WAAA,EAAa,OAAO,kBAAA,EAAmB;AAAA,MAC7E,QAAA,EAAU,OAAO,IAAA,KAASQ,QAAAA,GAAW,SAAS,MAAA,CAAO,IAAA,KAASC,eAAe,UAAA,GAAa,QAAA;AAAA,MAC1F,aAAa,MAAA,CAAO,QAAA,CAAS,OAAO,WAAW,CAAA,GAAI,OAAO,WAAA,GAAc,IAAA;AAAA,MACxE,SAAA,EAAW,MAAA,CAAO,SAAA,KAAcJ,0BAAAA,GAA6B,UAAA,GAAa;AAAA,KAAU;AAAA,EACxF;AAAA,EACA,oBAAA,GAAiC;AAAE,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,iBAAA,CAAkB,IAAI,EAAE,OAAO,CAAA;AAAA,EAAG;AAAA,EAEnH,UAAA,CAAW,aAAa,CAAA,EAA8B;AAC5D,IAAA,MAAM,SAAA,GAAY,KAAK,gBAAA,EAAiB;AACxC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA,GAAI,GAAA;AAC3C,IAAA,MAAM,OAAO,KAAA,CAAc,IAAA,CAAK,KAAK,eAAA,CAAgB,eAAA,EAAiB,QAAQ,CAAC,CAAA;AAC/E,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAA+B,IAAA,CAAK,IAAA,CAAK,yBAAA,EAA2B,CAAA,CAAE,GAAA,CAAI,SAAS,CAAC,CAAA;AAC5G,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAyB,IAAA,CAAK,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,UAAU,KAAA,CAAM,MAAM,CAAA,EAAG,KAAK,CAAC,CAAC,CAAA;AACxG,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,KAAK,WAAA,EAAa;AAC9C,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,MAAA,IAAI,SAAS,SAAA,IAAa,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7C,MAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,QAAA,IAAY,UAAU,SAAA,CAAU,QAAA,CAAS,OAAO,QAAQ,CAAA;AACvF,MAAA,IAAI,CAAC,MAAA,IAAU,QAAA,KAAa,CAAA,EAAG;AAC7B,QAAA,QAAA,CAAS,OAAO,IAAA,EAAK;AACrB,QAAA,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,CAAA;AAC3B,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,EAAQ,CAAE,OAAO,CAAC,CAAA;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,mBAAkB,CAAE,QAAA,CAAS,MAAA,CAAO,IAAI,CAAC,CAAA;AAC/E,MAAA,MAAM,WAAwB,EAAE,GAAG,SAAS,KAAA,EAAO,KAAA,EAAO,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAG,MAAA,EAAQ,CAAC,GAAG,MAAA,EAAQ,GAAG,MAAM,CAAA,EAAG,cAAc,KAAA,EAAM;AAC7H,MAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,CAAC,QAAQ,CAAA,EAAE;AAC9E,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AAAA,QAAO,EAAE,IAAA,EAAM,WAAA,CAAY,MAAM,IAAA,EAAM,UAAA,EAAY,MAAM,WAAA,EAAY;AAAA,QACvF,EAAE,UAAU,MAAA,EAAQ,SAAA,EAAW,WAAW,WAAA,EAAa,MAAA,CAAO,oBAAmB,EAAE;AAAA,QAAG;AAAA,OAAI;AAC5F,MAAA,SAAA,CAAU,OAAA,CAAQ,MAAA,CAAO,QAAA,EAAW,QAAQ,CAAA;AAC5C,MAAA,MAAM,SAAS,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAW,IAAA,EAAK;AAC1D,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAChC,MAAA,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM;AAAE,QAAA,IAAI,IAAA,CAAK,YAAY,GAAA,CAAI,GAAG,MAAM,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA;AAAA,MAAG,CAAC,CAAA;AAC1G,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB;AACA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,EAAQ;AACjC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAuB,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AAG/H,MAAA,IAAI,YAAY,CAAC,QAAA,CAAS,aAAa,CAAC,OAAA,CAAQ,IAAI,GAAG,CAAA,IAAKL,MAAK,QAAA,CAAS,QAAA,CAAS,KAAK,CAAC,CAAA,KAAMA,MAAK,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG;AACtH,MAAA,MAAM,OAAO,QAAA,EAAU,MAAA,CAAO,IAAA,IAAQ,CAAA,cAAA,EAAiB,KAAK,cAAA,EAAgB,CAAA,CAAA;AAC5E,MAAA,MAAM,QAAA,GAAW,UAAU,MAAA,CAAO,QAAA,IAAY,UAAU,SAAA,CAAU,QAAA,CAAS,OAAO,QAAQ,CAAA;AAC1F,MAAA,IAAI,WAAA,GAAc,KAAA;AAClB,MAAA,IAAI,QAAA,GAAW,KAAK,QAAA,EAAU;AAC5B,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAM,QAAA,CAAS,SAAQ,CAAE,MAAA,CAAO,CAAC,CAAA,CAAkB,iBAAA,EAAkB,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA;AAClH,QAAA,WAAA,GAAc,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,CAAC,GAAG,KAAA,EAAO,GAAG,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,cAAc,KAAA,EAAM;AAAA,MACxF;AACA,MAAA,MAAM,UAAA,GAAa,EAAE,GAAG,IAAA,EAAM,MAAM,MAAA,EAAQ,CAAC,WAAW,CAAA,EAAE;AAC1D,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA,CAAO,EAAE,IAAA,EAAM,MAAM,UAAA,EAAY,IAAA,EAAM,UAAA,EAAW,EAAG,EAAE,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,MAAA,IAAU,IAAI,CAAA;AACtH,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,GAAA,EAAK,EAAE,OAAO,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAC7D,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EACQ,UAAA,CAAW,MAAA,EAAoB,UAAA,GAAa,CAAA,EAA8B;AAChF,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAA,CAAK,KAAK,kBAAA,EAAmB;AAC7B,IAAA,MAAA,EAAO;AACP,IAAA,OAAO,IAAA,CAAK,WAAW,UAAU,CAAA;AAAA,EACnC;AAAA,EACQ,WAAW,OAAA,EAA+D;AAGhF,IAAA,IAAI,OAAA,GAAU,QAAQ,MAAA,KAAW,CAAA;AACjC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM;AAAE,MAAA,OAAA,GAAU,IAAA;AAAA,IAAM,CAAC,CAAA;AACnG,IAAA,MAAM,OAAA,GAAU,CAAC,OAAA,KAA2C;AAC1D,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAM,WAAW,MAAA,CAAO,QAAA,IAAY,KAAK,SAAA,CAAU,GAAA,CAAI,OAAO,QAAQ,CAAA;AACtE,QAAA,IAAI,CAAC,YAAY,CAAC,QAAA,CAAS,UAAU,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG;AAC7D,QAAA,IAAI,YAAY,QAAA,IAAY,CAAC,SAAS,QAAA,EAAU,MAAA,CAAO,OAAO,CAAA,EAAE;AAAA,MAClE;AAAA,IACF,CAAA;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,MAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA,EAAQ,MAAM,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,EACpH;AAAA,EACA,KAAA,CAAM,IAAY,KAAA,EAAe,OAAA,GAAU,KAAK,IAAA,CAAK,cAAA,CAAe,EAAE,CAAA,EAAS;AAAE,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,EAAA,EAAI,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,EAAG;AAAA,EACrJ,MAAM,EAAA,EAAoB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAAA,EAAG;AAAA,EACzD,aAAa,EAAA,EAAoB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,EAAE,CAAA;AAAA,EAAG;AAAA,EACxE,gBAAA,GAAmC;AAAE,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,uBAAA,EAAyB,CAAA;AAAA,EAAG;AAAA,EACxF,YAAA,CAAa,QAAA,EAAkB,QAAA,EAAkB,KAAA,EAAe,UAAU,GAAA,EAAW;AAAE,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,EAAG;AAAA,EAC3K,YAAA,CAAa,UAAkB,QAAA,EAA0B;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC/G,YAAA,CAAa,EAAA,EAAY,KAAA,EAAe,UAAA,GAAa,GAAA,EAAK,UAAU,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,EAAE,CAAA,EAA8B;AAAE,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,EAAA,EAAI,KAAA,EAAO,OAAO,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,EAAG;AAAA,EACvO,SAAA,CAAU,KAAA,EAAe,KAAA,EAAe,QAAA,GAAW,CAAA,EAAS;AAAE,IAAA,IAAA,CAAK,WAAW,MAAM;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,QAAQ,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EAC/K,UAAU,KAAA,EAAuB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAAA,EAAG;AAAA,EACvE,kBAAkB,KAAA,EAAuB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAAA,EAAG;AAAA,EACzF,aAAA,CAAc,EAAA,EAAY,KAAA,EAAe,QAAA,GAAW,CAAA,EAAS;AAAE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,EAAE,CAAA;AAAG,IAAA,IAAI,QAAQ,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAE,CAAA;AAAG,IAAA,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,QAAQ,CAAA;AAAA,EAAG;AAAA,EAC/M,iBAAiB,KAAA,EAAe,KAAA,EAAe,UAAA,GAAa,EAAA,EAAI,WAAW,CAAA,EAA8B;AAAE,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,MAAM;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,QAAQ,CAAA;AAAA,IAAG,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,EAAG;AAAA,EAChQ,qBAAqB,EAAA,EAAY,KAAA,EAAe,UAAA,GAAa,EAAA,EAAI,WAAW,CAAA,EAA8B;AAAE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,EAAE,CAAA;AAAG,IAAA,IAAI,QAAQ,CAAA,EAAG,OAAO,IAAA,CAAK,UAAA,CAAW,EAAE,CAAA;AAAG,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,KAAA,EAAO,YAAY,QAAQ,CAAA;AAAA,EAAG;AAAA,EACxQ,cAAA,CAAe,IAAY,KAAA,EAAqB;AAh1BlD,IAAA,IAAA,EAAA,EAAA,EAAA;AAi1BI,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,WAAW,MAAM,IAAA,CAAK,KAAK,iBAAA,CAAkB,EAAA,EAAI,MAAM,CAAC,CAAA;AAC7D,IAAA,CAAA,CAAC,EAAA,GAAA,IAAA,CAAK,SAAQ,aAAA,KAAb,EAAA,CAAa,gBAAkB,EAAC,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA;AAC1C,IAAA,CAAA,CAAC,EAAA,GAAA,IAAA,CAAK,eAAc,aAAA,KAAnB,EAAA,CAAmB,gBAAkB,EAAC,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA;AAAA,EAClD;AAAA,EACA,eAAe,EAAA,EAAoB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,EAAE,CAAA;AAAA,EAAG;AAAA,EAC7E,kBAAkB,EAAA,EAAqB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,oBAAA,CAAqB,EAAE,CAAA;AAAA,EAAG;AAAA,EACpF,QAAA,CAAS,GAAA,EAAsB,KAAA,EAAe,SAAA,GAAsB,EAAC,EAAS;AAAE,IAAA,IAAA,CAAK,WAAW,MAAM;AAAE,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,gBAAgB,GAAA,EAAK,KAAA,EAAOA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,gBAAa,IAAA,CAAK,SAAA,CAAU,KAAK,KAAA,EAAOA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EACxP,gBAAA,CAAiB,SAAA,EAAqB,GAAA,EAAsB,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,KAAA,EAAO,SAAS,CAAA;AAAA,EAAG;AAAA,EACzH,YAAA,CAAa,GAAA,EAAsB,SAAA,GAAsB,EAAC,EAAS;AAAE,IAAA,IAAA,CAAK,WAAW,MAAM;AAAE,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU,IAAA,CAAK,KAAK,mBAAA,CAAoB,GAAA,EAAKA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,gBAAa,IAAA,CAAK,aAAA,CAAc,GAAA,EAAKA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EACvO,gBAAgB,GAAA,EAAsB,KAAA,EAAe,aAAa,GAAA,EAAK,SAAA,GAAsB,EAAC,EAA8B;AAAE,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,MAAM;AAAE,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,gBAAgB,GAAA,EAAK,KAAA,EAAOA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,gBAAa,IAAA,CAAK,SAAA,CAAU,KAAK,KAAA,EAAOA,KAAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAAG,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,EAAG;AAAA,EAE1U,eAAA,GAA4C;AAAE,IAAA,OAAO,MAAA,CAAO,YAAY,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA,CAAK,yBAAyB,EAAE,EAAE,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAAG;AAAA,EACvK,qBAAA,GAA2E;AAAE,IAAA,OAAO,OAAO,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,IAAA,CAAK,yBAAyB,EAAE,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAO,EAAE,IAAA,EAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,EAAG;AAAA,EAC9Q,cAAA,CAAe,QAA4D,OAAA,EAAsE;AAAE,IAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,cAAA,CAAe,KAAK,YAAA,EAAa,EAAG,QAAQ,OAAO,CAAA;AAAG,IAAA,IAAA,CAAK,SAAA,EAAU;AAAG,IAAA,OAAO,KAAA;AAAA,EAAO;AAAA,EACpQ,eAAA,CAAgB,SAA8D,OAAA,EAAuF;AAAE,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,eAAA,CAAgB,KAAK,YAAA,EAAa,EAAG,SAAS,OAAO,CAAA;AAAG,IAAA,IAAA,CAAK,SAAA,EAAU;AAAG,IAAA,OAAO,MAAA;AAAA,EAAQ;AAAA,EACpR,aAAa,IAAA,EAAwB;AAAE,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,IAAI,GAAG,QAAA,IAAY,OAAA;AAAA,EAAS;AAAA,EAC7G,WAAA,GAA4B;AAAE,IAAA,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAY,SAAA,IAAa,EAAC,EAAG,IAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAS,IAAA,CAAK,OAAA,EAAS,UAAA,EAAY,IAAA,CAAK,qBAAA,EAAuB,MAAA,IAAU,CAAA,EAAG,QAAA,EAAU,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,EAAE,CAAE,CAAA;AAAA,EAAG;AAAA,EAC7N,QAAA,GAA0C;AAAE,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EAAO;AAAA,EACvD,YAAY,IAAA,EAA0B;AAp2BhD,IAAA,IAAA,EAAA,EAAA,EAAA;AAo2BkD,IAAA,OAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAA,EAAQ,MAAA,KAAb,EAAA,CAAa,MAAA,GAAW,EAAC,CAAA,EAAzB,IAAA,CAAA,KAAA,EAAA,CAAA,IAAA,CAAA,GAAsC,EAAE,QAAA,EAAU,OAAA,EAAQ,CAAA;AAAA,EAAG;AAAA,EACrH,cAAA,CAAe,MAAc,OAAA,EAAwB;AAAE,IAAA,IAAA,CAAK,QAAQ,cAAA,CAAe,IAAA,CAAK,YAAA,EAAa,EAAG,MAAM,OAAO,CAAA;AAAG,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,CAAE,OAAA,GAAU,OAAA;AAAA,EAAS;AAAA,EAClK,aAAA,CAAc,IAAA,EAAqB,KAAA,EAAgB,KAAA,EAAsB;AAAE,IAAA,IAAA,CAAK,QAAQ,aAAA,CAAc,IAAA,CAAK,cAAa,EAAG,IAAA,EAAM,OAAO,KAAK,CAAA;AAAA,EAAG;AAAA,EAChJ,sBAAsB,IAAA,EAA8C;AAAE,IAAA,OAAO,KAAK,OAAA,CAAQ,qBAAA,CAAsB,IAAA,CAAK,YAAA,IAAgB,IAAI,CAAA;AAAA,EAAG;AAAA,EAC5I,qBAAA,CAAsB,MAAc,KAAA,EAAwE;AAAE,IAAA,IAAA,CAAK,QAAQ,qBAAA,CAAsB,IAAA,CAAK,YAAA,EAAa,EAAG,MAAM,KAAK,CAAA;AAAG,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAAG,IAAA,KAAA,CAAM,WAAW,EAAE,GAAG,KAAA,CAAM,QAAA,EAAU,GAAG,KAAA,EAAM;AAAA,EAAG;AAAA,EAE5Q,oBAAoB,OAAA,EAA8E;AAChG,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAA,EAAS,IAAK,MAAA,CAAgB,MAAA,OAAa,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAc,CAAA;AAC3G,IAAA,KAAA,MAAW,QAAA,IAAY,CAAC,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,YAAY,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,IAAA,CAAK,YAAA,CAAa,MAAM,MAAM,QAAQ,CAAA;AACnG,MAAA,MAAM,QAAA,GAAgB,IAAA,KAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,QAAA,CAAA;AACtF,MAAA,IAAI,UAAU,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,QAAQ,OAAO,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,eAAe,CAAA,EAAG,QAAQ,OAAO,CAAA,EAAG,SAAA,EAAW,SAAS,KAAA,GAAQ,CAAA,CAAA,EAAI,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA,CAAA,GAAK,SAAA,EAAW,QAAA,EAAU,SAAS,QAAA,GAAW,CAAA,CAAA,EAAI,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA,CAAA,GAAK,WAAW,iBAAA,EAAmB,QAAA,CAAS,qBAAqB,CAAA,EAAE;AAAA,IAC1T;AACA,IAAA,IAAA,CAAK,WAAA,EAAY;AACjB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,MAAM,IAAA,CAAK,IAAA,EAAM,QAAQ,IAAA,EAAM,SAAA,EAAW,KAAK,YAAA,CAAa,IAAI,CAAA,KAAM,SAAA,EAAU,CAAE,CAAA;AAAA,EAC3I;AAAA,EACA,wBAAA,GAAuC;AAAE,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAAA,EAAG;AAAA,EAChF,oBAAoB,IAAA,EAAyB;AAAE,IAAA,MAAM,MAAA,GAAS,IAAA,GAAO,CAAC,IAAA,CAAK,YAAY,GAAA,CAAI,IAAI,CAAC,CAAA,GAAI,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAAG,IAAA,OAAO,CAAC,GAAG,IAAI,IAAI,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAA,EAAK;AAAA,EAAG;AAAA,EAC1O,iBAAA,GAAgC;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,cAAc,CAAA;AAAA,EAAG;AAAA,EAC5D,iBAAA,CAAkB,UAA8B,KAAA,EAAkC;AACxF,IAAA,MAAM,GAAA,GAAM,GAAG,QAAQ,CAAA,KAAA,CAAA;AACvB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,qCAAqCA,KAAAA,CAAK,KAAK,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,cAAA,CAAe,GAAG,CAAC,CAAC,CAAC,CAAA;AAC9G,IAAA,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,GAAI,IAAA;AAC3B,IAAA,IAAA,CAAK,QAAQ,mBAAA,CAAoB,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,KAAM,QAAQ,GAAG,IAAI,CAAA;AAAA,EAC9H;AAAA,EACA,aAAa,KAAA,EAAkC;AAAE,IAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,EAAG;AAAA,EACxF,gBAAgB,KAAA,EAAkC;AAAE,IAAA,IAAA,CAAK,iBAAA,CAAkB,WAAW,KAAK,CAAA;AAAA,EAAG;AAAA,EAC9F,iBAAiB,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,YAAA,CAAa,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,EAAG;AAAA,EACjF,oBAAoB,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,eAAA,CAAgB,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,EAAG;AAAA,EACvF,WAAA,CAAY,OAAe,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,aAAa,EAAE,QAAA,EAAU,KAAA,EAAO,iBAAA,EAAmB,OAAO,CAAA;AAAA,EAAG;AAAA,EACpH,cAAA,CAAe,OAAe,KAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,gBAAgB,EAAE,QAAA,EAAU,KAAA,EAAO,iBAAA,EAAmB,OAAO,CAAA;AAAA,EAAG;AAAA,EAC1H,eAAe,KAAA,EAAkE;AAAE,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,cAAA,EAAgB,EAAE,WAAA,EAAa,KAAA,CAAM,IAAA,EAAK,EAAG,KAAA,CAAM,KAAA,GAAQ,EAAE,YAAA,EAAc,KAAA,CAAM,OAAM,GAAI,EAAC,EAAG,KAAA,CAAM,OAAA,KAAY,MAAA,GAAY,EAAE,cAAA,EAAgB,KAAA,CAAM,OAAA,EAAQ,GAAI,EAAE,CAAA;AAAA,EAAG;AAAA,EACpQ,WAAA,GAAoB;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,GAAG,IAAA,CAAK,QAAQ,IAAA,EAAM,CAAA,EAAG,IAAI,KAAK,UAAA,CAAW,eAAe,CAAA,EAAG,IAAA,CAAK,cAAc,IAAI,CAAA;AAC1G,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,OAAA,IAAW,CAAC,KAAK,WAAA,CAAY,IAAA,IAAQ,CAAC,IAAA,CAAK,SAAA,EAAW;AAC3E,IAAA,IAAI,KAAK,UAAA,CAAW,cAAA,GAAiB,KAAK,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,EAAG;AAC1E,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,sBAAA,CAAuBA,KAAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAC,CAAA;AAC9G,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,OAAa,WAAA,CAAY,oBAAA,EAAsB,MAAA,EAAQ,EAAE,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,CAAA;AAAA,IACvL;AAAA,EACF;AAAA,EACA,sBAAsB,KAAA,EAAsB;AAAE,IAAA,IAAA,CAAK,oBAAA,CAAqB,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EAAG;AAAA,EAC7F,oBAAA,GAAgC;AAAE,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,EAAS;AAAA,EACpE,qBAAqB,KAAA,EAAyB;AAAE,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,CAAK,qBAAqBA,KAAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAG,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EAAG;AAAA,EAC1I,oBAAA,GAAmC;AAAE,IAAA,OAAO,IAAA,CAAK,KAAK,UAAU,CAAA;AAAA,EAAG;AAAA,EACnE,wBAAA,GAAqC;AACnC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAA,CAAK,mCAAA,CAAoCA,MAAK,IAAA,CAAK,mBAAA,EAAqB,CAAC,CAAC,CAAA;AAAA,EAC9F;AAAA,EACA,sBAAA,CAAuB,MAAc,KAAA,EAAyB;AAC5D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,MAAA,EAAW,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AACtD,IAAA,IAAI,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAC3E,IAAA,IAAI,KAAA,CAAM,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,QAAA,CAAS,CAAA,EAAG,KAAA,CAAM,QAAA,CAAS,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA;AAC1F,IAAA,IAAI,KAAA,CAAM,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAoB,CAAC,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA;AAAA,EACvE;AAAA,EACQ,mBAAmB,IAAA,EAA0F;AACnH,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,OAAA,IAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,IAAK,CAAC,IAAA,CAAK,WAAA,CAAY,MAAM,OAAO,MAAA;AAGxG,IAAA,MAAM,SAAmG,EAAC;AAC1G,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,MAAA,IAAI,KAAA,CAAM,kBAAkB,YAAA,EAAc;AAC1C,MAAA,MAAM,MAAA,GAASI,eAAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AACxD,MAAA,IAAI,SAASA,eAAAA,CAAgB,QAAA,CAAS,KAAK,YAAA,EAAa,EAAG,OAAO,QAAQ,CAAA;AAC1E,MAAA,IAAI,MAAA,CAAO,UAAA,KAAe,OAAA,IAAW,MAAA,EAAQ;AAC3C,QAAA,MAAM,WAAY,MAAA,CAA2D,QAAA;AAC7E,QAAA,MAAA,GAAS,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,IAAA,KAAS,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC,CAAA,IAAK,QAAA,EAAU,MAAM,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,MACjI;AACA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAS,KAAA,CAAsB,iBAAA,CAAkB,yCAAA,KAA8C,IAAA;AACrG,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,EAAa;AAClC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AACvC,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,UAAsB,EAAC;AAC7B,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC1D,QAAA,MAAM,MAAA,GAAS,KAAA,GAAQ,MAAA,IAAU,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAA;AAC7C,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,SAAS,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAAA,MACpE;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,QAAA,EAAU,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,MAAA,CAAO,UAAA,CAAW,OAAA,EAAQ,EAAG,SAAA,EAAW,OAAA,EAAS,CAAA;AAAA,IACjG;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,wBAAA,CAAyBJ,KAAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,SAAA,KAAcK,0BAA0B,CAAC,CAAA,IAAK,MAAA;AAAA,EACnH;AAAA,EACQ,cAAA,CAAe,OAAe,eAAA,EAA+B;AACnE,IAAA,MAAM,IAAA,GAAO,MAAc,IAAA,CAAK,IAAA,CAAK,wBAAwB,uBAAA,EAAyB,KAAA,EAAO,eAAA,EAAiBL,KAAAA,CAAK,EAAE,SAAA,EAAW,CAAC,GAAG,IAAA,CAAK,YAAY,IAAA,EAAM,GAAG,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAC,CAAA;AAChL,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACzB,IAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,MAAM,UAAA,EAAY,IAAA,EAAK,EAAG,EAAE,UAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA,EAAW,UAAA,IAAc,IAAI,CAAA;AAAA,EAC/H;AAAA,EACA,eAAA,CAAgB,YAAoB,QAAA,EAAuD;AACzF,IAAA,IAAI,CAAC,KAAK,UAAA,CAAW,OAAA,IAAW,CAAC,IAAA,CAAK,WAAA,CAAY,MAAM,OAAO,MAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,0BAA0BA,KAAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,mBAAA,EAAqB,UAAA,EAAY,QAAQ,CAAC,CAAA;AAC1I,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,QAAQ,OAAO,MAAA;AACxC,IAAA,OAAO,IAAA,CAAK,YAAY,uBAAA,EAAyB,MAAA,EAAQ,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAW,SAAA,EAAW,SAAA,EAAW,CAAC,GAAG,IAAA,CAAK,YAAY,IAAA,EAAM,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,CAAA;AAAA,EACrL;AAAA,EACA,KAAA,GAAc;AAAE,IAAA,IAAA,CAAK,WAAA,EAAY;AAAG,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAM,IAAA,IAAA,CAAK,SAAA,EAAW,aAAa,IAAI,CAAA;AAAA,EAAG;AAAA,EAC/F,IAAA,GAAa;AAAE,IAAA,IAAA,CAAK,WAAA,EAAY;AAAG,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAO,IAAA,IAAA,CAAK,SAAA,EAAW,aAAa,KAAK,CAAA;AAAA,EAAG;AAAA,EAChG,KAAA,GAAc;AAAE,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,EAAG;AAAA,EAC1D,cAAA,GAAuB;AAAE,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EAAG;AAAA,EACvC,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,WAAW,OAAA,EAAQ;AACxB,IAAA,IAAA,CAAK,KAAK,IAAA,EAAK;AACf,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,QAAQ,EAAC;AACd,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EAClB;AACF;AAEO,SAAS,2BAAA,CAA4B,MAAA,GAA+B,EAAC,EAAW;AAAE,EAAA,OAAO,IAAI,OAAO,MAAM,CAAA;AAAG;AACpH,eAAsB,oBAAA,CAAqB,KAAA,EAAiB,MAAA,GAA+B,EAAC,EAAoB;AAC9G,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAC5C,EAAA,IAAI;AAAE,IAAA,SAAA,CAAU,OAAA,CAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAQ,aAAA,EAAe,MAAA,CAAO,aAAA,EAAe,CAAA;AAAG,IAAA,OAAO,SAAA;AAAA,EAAW,SAC3G,KAAA,EAAO;AAAE,IAAA,SAAA,CAAU,OAAA,EAAQ;AAAG,IAAA,MAAM,KAAA;AAAA,EAAO;AACpD;;;AC59BO,IAAM,uBAAA,GACX,yFAAA;AAIF,IAAM,eAAA,GAAsC,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA;AAErE,SAAS,2BAAA,CAA4B,UAA8B,eAAA,EAAyB;AACjG,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,OAAA;AAGlB,EAAA,OAAO;AAAA,IACL,uGAAuG,CAAC,CAAA,oCAAA,CAAA;AAAA,IACxG,uGAAuG,CAAC,CAAA,oCAAA,CAAA;AAAA,IACxG,uGAAuG,CAAC,CAAA,oCAAA,CAAA;AAAA,IACxG,uGAAuG,CAAC,CAAA,oCAAA,CAAA;AAAA,IACxG,uGAAuG,CAAC,CAAA,oCAAA,CAAA;AAAA,IACxG;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAE4C,2BAAA;;;ACT5C,IAAM,UAAA,GAAa,CAAC,IAAA,KAAoC,CAAA,CAAA,EAAI,IAAUU,MAAA,CAAA,KAAA,CAAM,IAAI,CAAA,CAAE,YAAA,EAAc,CAAA,CAAA;AAEzF,SAAS,yBACd,kBAAA,EACoB;AACpB,EAAA,IAAI,iBAAA,GAAoB,EAAA;AACxB,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAA+C;AACtE,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,SAAyC,OAAA,GAC3C,CAAC,WAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAC,CAAC,CAAC,CAAA,GACvE,MAAA;AACJ,IAAA,MAAM,UAAA,GAAa,4BAA4B,MAAM,CAAA;AACrD,IAAA,IAAI,eAAe,iBAAA,EAAmB;AACtC,IAAA,iBAAA,GAAoB,UAAA;AACpB,IAAA,kBAAA,GAAqB,UAAU,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,eAAA,EAAgB;AAEhB,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,eAAA;AAAA,IACZ,SAAS,MAAM;AACb,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AAAA,IACb;AAAA,GACF;AACF;ACrBA,IAAM,YAAA,uBAAmB,GAAA,EAA2B;AACpD,IAAM,uBAAA,GAA0B,EAAA;AAChC,IAAM,qBAAA,GAAwB,IAAA;AAC9B,IAAM,sBAAA,GAAyB,IAAA;AAQxB,SAAS,+BAAA,CACd,OACA,QAAA,EACkC;AAClC,EAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,EAAA,IAAI,MAAA,CAAO,oBAAoB,MAAA,EAAW;AACxC,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,KAAA,EAAO,KAAK,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,EAAA,MAAA,CAAO,eAAA,GAAkB,OAAA;AACzB,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,8BAAA,CACd,OACA,QAAA,EAC2C;AAC3C,EAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,EAAA,IAAI,MAAA,CAAO,mBAAmB,MAAA,EAAW;AACvC,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,OAAO,qBAAA,EAAuB;AAChC,IAAA,OAAO,MAAA,CAAO,qBAAA;AAAA,EAChB;AAEA,EAAA,MAAA,CAAO,qBAAA,GAAwB,0BAA0B,MAAM;AAC7D,IAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,KAAA,EAAO,IAAI,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,IAAA,MAAA,CAAO,cAAA,GAAiB,OAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,MAAA,CAAO,qBAAA;AAChB;AAEA,SAAS,iBAAiB,QAAA,EAAiC;AACzD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC9C,EAAA,YAAA,CAAa,GAAA,CAAI,UAAU,MAAM,CAAA;AACjC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0BACP,cAAA,EAC2C;AAC3C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,EAAgB,CAAA;AAE1C,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,qBAAA,IAAyB,MAAA,EAAQ;AACpE,MAAA,MAAA,CAAO,mBAAA,CAAoB,GAAA,EAAK,EAAE,OAAA,EAAS,KAAK,CAAA;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,EAC9B,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CAAsB,OAAuB,eAAA,EAA2C;AAC/F,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAW;AACzB,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,QAAA,EAAU;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM7B,UAAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,IAAI,IAAA,CAAK,QAAA,GAAW,CAAC,IAAA,CAAK,QAAQ,CAAA;AAC/E,IAAA,KAAA,MAAW,YAAYA,UAAAA,EAAW;AAChC,MAAA,IAAI,CAAC,QAAA,IAAY,aAAA,CAAc,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AACjD,QAAA;AAAA,MACF;AACA,MAAA,aAAA,CAAc,GAAA,CAAI,SAAS,IAAI,CAAA;AAC/B,MAAA,sBAAA,CAAuB,QAAA,EAA6B,OAAA,EAAS,YAAA,EAAc,eAAe,CAAA;AAAA,IAC5F;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,sBAAA,CACP,QAAA,EACA,OAAA,EACA,YAAA,EACA,eAAA,EACM;AACN,EAAA,eAAA,CAAgB,OAAA,EAAS,QAAA,CAAS,KAAA,EAAO,IAAI,CAAA;AAC7C,EAAA,eAAA,CAAgB,OAAA,EAAS,QAAA,CAAS,QAAA,EAAU,GAAG,CAAA;AAE/C,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,OAAO,CAAC,YAAA,CAAa,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACxD,IAAA,YAAA,CAAa,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,aAAA,CAAc,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,QAAA,CAAS,eAAe,CAAC,YAAA,CAAa,IAAI,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA,EAAG;AACxE,IAAA,YAAA,CAAa,GAAA,CAAI,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AAC1C,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,aAAA,CAAc,QAAA,CAAS,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,KAAA,EAAM,MAAO;AAAA,MAC7E,KAAA;AAAA,MACA,OAAO,KAAA,GAAQ;AAAA,MACf,CAAC,CAAA;AAAA,EACL;AACF;AAEA,SAAS,eAAA,CAAgB,OAAA,EAA0B,KAAA,EAAgC,KAAA,EAAqB;AACtG,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACnC,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,IACX,KAAA,EAAO,MAAM,KAAA,EAAM;AAAA,IACnB;AAAA,GACD,CAAA;AACH;AAEA,SAAS,cAAc,OAAA,EAAyC;AAC9D,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,EAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,SAAA,EAAW;AACxB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,UAAU,KAAK,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,UAAU,MAAM,CAAA;AACjE,EAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,EAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAEhB,EAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,EAAE,kBAAA,EAAoB,MAAM,CAAA;AACpE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,CAAA,EAAG,OAAO,MAAM,CAAA;AAC5C,IAAA,MAAM,OAAO,OAAA,CAAQ,YAAA,CAAa,GAAG,CAAA,EAAG,KAAA,EAAO,MAAM,CAAA,CAAE,IAAA;AACvD,IAAA,MAAM,UAA2B,EAAC;AAElC,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG;AACnD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,GAAI,GAAA;AAChC,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAQ,IAAU8B,MAAA,CAAA,KAAA;AAAA,QACtB,IAAA,CAAK,KAAK,CAAA,GAAI,GAAA;AAAA,QACd,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,GAAI,GAAA;AAAA,QAClB,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,GAAI;AAAA,OACpB;AACA,MAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC/B,MAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA;AAAA,QACA,KAAA,EAAO,KAAA,IAAS,GAAA,GAAM,GAAA,CAAI,CAAA,GAAI,GAAA;AAAA,OAC/B,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,SAAS,aAAa,KAAA,EAAgF;AACpG,EAAA,IAAI,CAAC,KAAA,IAAS,EAAE,WAAW,KAAA,CAAA,IAAU,EAAE,YAAY,KAAA,CAAA,EAAQ;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAChC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA,IAAS,CAAA,IAAK,UAAU,CAAA,EAAG;AACpF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,OAAO,MAAA,EAAO;AACzB;AAEA,SAAS,cAAc,KAAA,EAA6B;AAClD,EAAA,MAAM,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC/B,EAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,EAAA,OAAO,IAAI,CAAA,GAAI,IAAA,IAAQ,IAAI,CAAA,GAAI,IAAA,IAAQ,IAAI,CAAA,IAAK,qBAAA;AAClD;AAEA,SAAS,aAAa,OAAA,EAA4D;AAChF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAmD;AACvE,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC/B,IAAA,MAAA,CAAO,KAAA,CAAM,OAAO,GAAG,CAAA;AACvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,EAAE,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAK,EAAE,KAAA,EAAO,IAAUA,MAAA,CAAA,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,CAAA,EAAE;AACpF,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,KAAA;AAC1C,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,KAAA;AAC1C,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,KAAA;AAC1C,IAAA,MAAA,CAAO,SAAS,MAAA,CAAO,KAAA;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAC3C,MAAA,CAAO,CAAC,MAAA,KAAW,OAAO,KAAA,GAAQ,CAAC,CAAA,CACnC,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IAChB,KAAA,EAAO,sBAAsB,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA,GAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC1E,OAAO,MAAA,CAAO;AAAA,GAChB,CAAE,EACD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAEnC,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,KAAA,CAAM,CAAC,KAAA,KAAU,cAAc,KAAA,EAAO,SAAA,CAAU,KAAK,CAAA,IAAK,sBAAsB,CAAA;AAChH,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1B,IAAA,QAAA,CAAS,KAAK,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,CAAC,SAAS,CAAC,CAAA,EAAG,SAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAC/C;AAEA,SAAS,sBAAsB,KAAA,EAAiC;AAC9D,EAAA,MAAM,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC/B,EAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,EAAA,MAAM,UAAA,GAAmBA,MAAA,CAAA,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,CAAA,GAAI,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,IAAI,CAAA;AACjF,EAAA,MAAM,YAAkBA,MAAA,CAAA,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA,EAAM,MAAM,IAAI,CAAA;AAChE,EAAA,OAAO,IAAUA,MAAA,CAAA,KAAA,EAAM,CAAE,OAAO,GAAA,CAAI,CAAA,EAAG,YAAY,SAAS,CAAA;AAC9D;AAEA,SAAS,mBAAA,CAAoB,QAAqB,KAAA,EAA4B;AAC5E,EAAA,MAAM,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC/B,EAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AACjB,EAAA,MAAM,SAAA,GAAY,KAAA,KAAU,CAAA,GAAI,KAAA,GAAQ,MAAA;AACxC,EAAA,OAAO,IAAUA,cAAM,CAAE,MAAA;AAAA,IACjBA,MAAA,CAAA,SAAA,CAAU,eAAA,CAAgB,GAAA,CAAI,CAAA,GAAI,WAAW,CAAC,CAAA;AAAA,IAC9CA,MAAA,CAAA,SAAA,CAAU,MAAM,GAAA,CAAI,CAAA,IAAK,UAAU,CAAA,GAAI,IAAA,GAAO,IAAA,CAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAAA,IAC/DA,MAAA,CAAA,SAAA,CAAU,MAAM,GAAA,CAAI,CAAA,IAAK,UAAU,CAAA,GAAI,IAAA,GAAO,KAAA,CAAA,EAAQ,IAAA,EAAM,IAAI;AAAA,GACxE;AACF;AAEA,SAAS,aAAA,CAAc,GAAgB,CAAA,EAAwB;AAC7D,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,EAAA,OAAO,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAC9C;ACnSA,IAAI,KAAA,GAA4B,IAAA;AAChC,IAAI,SAAA,GAAY,EAAA;AAChB,IAAI,UAAA,GAAgC,IAAA;AACpC,IAAI,mBAAA,GAAsB,KAAA;AAC1B,IAAI,SAAA,GAA8B,IAAA;AAElC,IAAM,aAAA,GAAgB,CAAC,gBAAA,KAA8B;AACnD,EAAA,MAAM,UAAA,GAAa,OAAO,gBAAA,KAAqB,QAAA,IAAY,iBAAiB,MAAA,GAAS,CAAA;AACrF,EAAA,MAAM,cAAA,GAAiB,aAClB,gBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,GAAI,gBAAA,GAAoB,CAAA,EAAG,gBAAiB,CAAA,CAAA,CAAA,GAC3E,EAAA;AAIJ,EAAA,IAAI,CAAC,UAAA,IAAc,mBAAA,KAAwB,UAAA,IAAe,UAAA,IAAc,mBAAmB,SAAA,EAAY;AACrG,IAAA,KAAA,EAAO,OAAA,EAAQ;AACf,IAAA,KAAA,GAAQ,IAAA;AACR,IAAA,SAAA,GAAY,cAAA;AACZ,IAAA,mBAAA,GAAsB,UAAA;AACtB,IAAA,UAAA,GAAa,IAAI,UAAA,EAAW;AAC5B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,cAAA,CAAe,cAAc,EAAE,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAC1F,MAAA,UAAA,CAAW,eAAe,KAAK,CAAA;AAAA,IACjC;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT,CAAA;AAEA,IAAM,OAAA,GAAU,CAAC,KAAA,EAAiB,WAAA,GAAc,IAAA,KAAS;AACvD,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAgB;AAC9B,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,IAAA,IAAI,WAAA,SAAoB,UAAA,GAAa,IAAA;AACrC,IAAA,IAAI,MAAA,CAAO,qBAAA,EAAuB,MAAA,EAAQ,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,EAC9D,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,QAAA,KAA0C;AAC1D,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,OAAO,CAAC,KAAA,KAAyB;AAC/B,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,KAAA,CAAM,gBAAA,EAAkB;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAC,CAAC,CAAA;AACpF,IAAA,IAAI,SAAS,IAAA,EAAM;AAAE,MAAA,IAAA,GAAO,IAAA;AAAM,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IAAG;AAAA,EACpD,CAAA;AACF,CAAA;AAEO,SAAS,4BAAA,CAA6B,KAAA,EAAiB,KAAA,GAAiC,EAAC,EAAG;AACjG,EAAA,IAAI,MAAM,WAAA,EAAa,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,MAAM,WAAA,CAAY,CAAA,IAAK,CAAA,EAAG,KAAA,CAAM,YAAY,CAAA,IAAK,CAAA,EAAG,KAAA,CAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AACtH,EAAA,IAAI,KAAA,CAAM,eAAe,KAAA,CAAM,QAAA,CAAS,IAAI,GAAI,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAY,IAAI,CAAC,IAAA,KAAA,CAAU,MAAM,aAAA,GAAgB,IAAI,KAAK,CAAA,IAAK,IAAA,CAAK,EAAA,GAAK,GAAG,CAA6B,CAAA;AACvK,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,IAAA,CAAM,KAAA,CAAM,UAAA,IAAc,CAAA,IAAK,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,MAAM,UAAW,CAAA;AAC7G,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,oBAAoB,CAAA,EAAG;AAAE,IAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAG,IAAA,MAAM,MAAM,IAAIC,IAAAA,GAAO,aAAA,CAAc,KAAK,EAAE,GAAA,CAAI,CAAA;AAAG,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,KAAA,CAAM,oBAAA,EAAuB,KAAA,CAAM,QAAA,CAAS,CAAA,IAAK,KAAA,CAAM,oBAAA,GAAwB,GAAA;AAAA,EAAK;AAC7P;AAEO,SAAS,qBAAA,CAAsB,OAAqB,KAAA,EAAiB;AAC1E,EAAA,KAAA,EAAO,OAAO,KAAK,CAAA;AACnB,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAgB;AAC9B,IAAA,MAAA,CAAO,UAAU,OAAA,IAAU;AAC3B,IAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,QAAA,GAAY,KAAA,CAAM,QAAQ,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,WAAW,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAK,EAAC,EAAG;AACpH,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,CAAO,QAAQ,GAAY,IAAI,KAAA,EAAO,SAAA,EAAW,KAAA,CAAM,OAAA,IAAU;AAC5F,MAAA,QAAA,CAAS,OAAA,IAAU;AAAA,IACrB;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,kBAAA,CAAmB,GAAA,EAAa,OAAA,GAAqC,EAAC,EAAsC;AAC1H,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAiB,UAAA,EAA6B,UAAuB,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,WAAW,CAAA,EAAG,YAAY,IAAA,EAAK,CAAA;AAC1J,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG;AAC9B,IAAA,SAAA,KAAA,SAAA,GAAc,IAAI,SAAA,EAAU,CAAA;AAC5B,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW,UAAW,IAAA,CAAK,GAAA,EAAK,CAAC,KAAA,KAAU,OAAA,CAAQ,IAAA,CAAK,OAAO,KAAA,CAAM,UAAA,IAAc,EAAC,EAAG,IAAI,CAAC,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,EACnK;AACA,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,OAAA,CAAQ,gBAAgB,CAAA;AACrD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,UAAA,IAAc,EAAC,EAAG,IAAI,CAAC,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA,EAAG,MAAM,CAAC,CAAA;AAClK;AAEO,SAAS,oBAAoB,IAAA,EAAmB,YAAA,GAAe,EAAA,EAAI,OAAA,GAAqC,EAAC,EAAsC;AACpJ,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,OAAA,CAAQ,gBAAgB,CAAA;AACrD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,WAAW,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,YAAA,EAAc,CAAC,IAAA,KAAS,OAAA,CAAQ,EAAE,OAAO,IAAA,CAAK,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAA,CAAQ,WAAW,GAAG,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,EAAC,EAAG,IAAA,EAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AACvN;;;ACvFA,IAAM,8BAAA,GAAiC,CAAC,UAAA,EAAY,QAAA,EAAU,OAAO,CAAA;AAWrE,SAAS,wBAAwB,IAAA,EAA0B;AACzD,EAAA,MAAM,eAAA,GAAkB,KAAK,QAAA,CAAS,eAAA;AACtC,EAAA,MAAM,iBAAiB,8BAAA,CAA+B,MAAA;AAAA,IACpD,CAAC,KAAA,EAAO,QAAA,KAAa,IAAA,CAAK,GAAA,CAAI,OAAO,eAAA,CAAgB,QAAQ,CAAA,EAAG,MAAA,IAAU,CAAC,CAAA;AAAA,IAC3E;AAAA,GACF;AACA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,qBAAA,EAAuB,MAAA,IAAU,CAAA;AAC7D,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,qBAAA,IAAyB,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AAC/F,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACzC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,SAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAI,mDAAmD,KAAK,CAAA,CAAA;AAAA,OACzF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,EAClC,GAAG,CAAC,CAAA;AAEJ,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,cAAA,EAAgB,cAAA,EAAgB,eAAe,CAAA;AACjE;AAEA,SAAS,2BAAA,CACP,IAAA,EACA,QAAA,EACA,kBAAA,EACA,WAAA,EACuB;AACvB,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,YAAA,CAAa,QAAQ,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,aAAA,IAAiB,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AACjE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,MAAA,EAAS,KAAK,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,sBAAA,EAAyB,QAAQ,IAAI,WAAW,CAAA,uDAAA;AAAA,KAEjF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,SAAS,KAAA,EAAM;AAC/B,EAAA,IAAI,QAAA,CAAS,oBAAA,IAAwB,CAAC,aAAA,EAAe;AACnD,IAAA,KAAA,IAAS,cAAc,CAAA,EAAG,WAAA,GAAc,OAAA,CAAQ,KAAA,EAAO,eAAe,CAAA,EAAG;AACvE,MAAA,KAAA,IAAS,YAAY,CAAA,EAAG,SAAA,GAAY,OAAA,CAAQ,QAAA,EAAU,aAAa,CAAA,EAAG;AACpE,QAAA,OAAA,CAAQ,YAAA,CAAa,WAAA,EAAa,SAAA,EAAW,CAAC,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,qBAAA,IAAyB,EAAE,CAAA,CAC/D,IAAA,CAAK,CAAC,GAAG,KAAK,MAAM,KAAA,KAAU,WAAW,IAAI,CAAC,CAAA;AACjD,EAAA,OAAA,CAAQ,OAAO,UAAA,IAAc,EAAA;AAC7B,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,4CACd,KAAA,EAC8B;AAC9B,EAAA,MAAM,UAAwC,EAAC;AAE/C,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAW;AACzB,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,QAAA,EAAU;AAEpC,IAAA,MAAM,eAAA,GAAkB,KAAK,QAAA,CAAS,eAAA;AACtC,IAAA,MAAM,uBAAqD,EAAC;AAC5D,IAAA,KAAA,MAAW,YAAY,8BAAA,EAAgC;AACrD,MAAA,IAAI,aAAa,UAAA,IAAc,eAAA,CAAgB,QAAQ,CAAA,EAAG,WAAW,CAAA,EAAG;AACtE,QAAA,OAAO,gBAAgB,QAAQ,CAAA;AAC/B,QAAA,oBAAA,CAAqB,KAAK,QAAQ,CAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,wBAAwB,IAAI,CAAA;AAChD,IAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,MAAA,IAAI,eAAA,CAAgB,QAAA,EAAU,MAAA,KAAW,CAAA,EAAG;AAC1C,QAAA,OAAO,eAAA,CAAgB,QAAA;AACvB,QAAA,oBAAA,CAAqB,KAAK,UAAU,CAAA;AAAA,MACtC;AACA,MAAA,IAAI,oBAAA,CAAqB,SAAS,CAAA,EAAG;AACnC,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,QAAA,EAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA;AAAA,UAC5B,gBAAgB,EAAC;AAAA,UACjB,oBAAA;AAAA,UACA,gBAAA,EAAkB;AAAA,SACnB,CAAA;AAAA,MACH;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA,EAAG,KAAA;AAC9D,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,MAAA,EAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAI,CAAA,mDAAA;AAAA,OACjC;AAAA,IACF;AAEA,IAAA,MAAM,iBAAsE,EAAC;AAC7E,IAAA,KAAA,MAAW,YAAY,8BAAA,EAAgC;AACrD,MAAA,IAAI,UAAA,GAAa,gBAAgB,QAAQ,CAAA;AACzC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAI,aAAa,UAAA,EAAY;AAC7B,QAAA,UAAA,GAAa,EAAC;AACd,QAAA,eAAA,CAAgB,QAAA,GAAW,UAAA;AAAA,MAC7B;AAEA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,QAAQ,CAAA;AACzD,MAAA,MAAM,kBAAA,GAAqB,aAAA,IAAiB,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACnE,MAAA,MAAM,mBAAmB,kBAAA,EAAoB,QAAA;AAC7C,MAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,WAAA,EAAa,eAAe,CAAA,EAAG;AACrE,QAAA,MAAM,SAAA,GAAY,WAAW,WAAW,CAAA;AACxC,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,UAAA,CAAW,WAAW,CAAA,GAAI,2BAAA;AAAA,YACxB,IAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,cAAA,CAAe,QAAQ,CAAA,GAAA,CAAK,cAAA,CAAe,QAAQ,KAAK,CAAA,IAAK,CAAA;AAC7D,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,SAAA,CAAU,KAAA,KAAU,aAAA,IAAiB,SAAA,CAAU,aAAa,gBAAA,EAAkB;AAChF,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,SAAS,IAAA,CAAK,IAAA,IAAQ,KAAK,IAAI,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAA,EAAI,WAAW,CAAA,SAAA,EACpE,SAAA,CAAU,KAAK,CAAA,WAAA,EAAc,SAAA,CAAU,QAAQ,CAAA,iBAAA,EACvC,aAAa,cAAc,gBAAgB,CAAA,EAAA;AAAA,WACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,IAAyB,EAAC;AAClD,IAAA,MAAM,gBAAA,GAAmB,cAAc,UAAA,CAAW,MAAA;AAClD,IAAA,OAAO,UAAA,CAAW,SAAS,WAAA,EAAa;AACtC,MAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IACnB;AACA,IAAA,IAAA,CAAK,qBAAA,GAAwB,UAAA;AAE7B,IAAA,IACE,oBAAA,CAAqB,MAAA,GAAS,CAAA,IAC3B,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,MAAA,GAAS,CAAA,IACrC,gBAAA,GAAmB,CAAA,EACtB;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,QAAA,EAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA;AAAA,QAC5B,cAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,yCAAyC,KAAA,EAA6B;AACpF,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,MAAA,KAAW;AACzB,IAAA,MAAM,IAAA,GAAO,MAAA;AACb,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,MAAM,eAAA,GAAkB,KAAK,QAAA,EAAU,eAAA;AACvC,IAAA,MAAM,OAAA,GAAU,eAAA,EAAiB,QAAA,IAC5B,eAAA,EAAiB,UACjB,eAAA,EAAiB,KAAA;AACtB,IAAA,MAAM,WAAA,GAAc,SAAS,MAAA,IAAU,CAAA;AACvC,IAAA,IAAI,gBAAgB,CAAA,EAAG;AAEvB,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA,EAAG,KAAA;AAC9D,IAAA,MAAM,gBAAA,GAAmB,8BAAA,CAA+B,MAAA,CAAO,CAAC,QAAA,KAAa;AAC3E,MAAA,MAAM,UAAA,GAAa,gBAAgB,QAAQ,CAAA;AAC3C,MAAA,IAAI,QAAA,KAAa,UAAA,IAAc,CAAC,UAAA,EAAY,OAAO,IAAA;AACnD,MAAA,IAAI,CAAC,YAAY,OAAO,KAAA;AACxB,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,YAAA,CAAa,QAAQ,GAAG,QAAA,IAC1D,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG,QAAA;AAC/B,MAAA,OAAO,UAAA,CAAW,MAAA,KAAW,WAAA,IACxB,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,WAAA,EAAY,EAAG,CAAC,CAAA,EAAG,KAAA,KAAU,UAAA,CAAW,KAAK,CAAC,CAAA,CACnE,IAAA,CAAK,CAAC,SAAA,KACL,CAAC,SAAA,IACE,SAAA,CAAU,KAAA,KAAU,aAAA,IACpB,SAAA,CAAU,QAAA,KAAa,gBAC3B,CAAA;AAAA,IACP,CAAC,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,qBAAA,EAAuB,MAAA,IAAU,CAAA;AAE7D,IAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,IAAK,cAAA,KAAmB,WAAA,EAAa;AACjE,MAAA,MAAM,gBAAgB,8BAAA,CACnB,GAAA,CAAI,CAAC,QAAA,KAAa,GAAG,QAAQ,CAAA,CAAA,EAAI,eAAA,CAAgB,QAAQ,GAAG,MAAA,IAAU,CAAC,CAAA,CAAE,CAAA,CACzE,KAAK,IAAI,CAAA;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,MAAA,EAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAI,2CACzB,aAAa,CAAA,aAAA,EAAgB,cAAc,CAAA,WAAA,EAAc,WAAW,CAAA,EAAA;AAAA,OAC5E;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;ACvKO,IAAM,kCAAA,GAAqC;AAAA,EAChD,WAAA,EAAa,EAAE,EAAA,EAAI,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,QAAA,EAAU,EAAE,aAAA,EAAe,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAK,eAAA,EAAiB,MAAK,QAAA,EAAU,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAI,EAAE;AAAA,EAChQ,QAAA,EAAU,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,EAAE,aAAA,EAAe,IAAA,EAAM,oBAAA,EAAsB,GAAA,EAAI,eAAA,EAAiB,MAAK,QAAA,EAAU,GAAA,EAAK,gBAAA,EAAkB,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAK,YAAA,EAAc,GAAA,EAAI,aAAA,EAAe,IAAA,EAAI,EAAE;AAAA,EACrP,UAAA,EAAY,EAAE,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,EAAE,aAAA,EAAe,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAK,eAAA,EAAiB,OAAM,QAAA,EAAU,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAI,EAAE;AAAA,EAC9P,QAAA,EAAU,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,EAAE,aAAA,EAAe,IAAA,EAAM,oBAAA,EAAsB,GAAA,EAAI,eAAA,EAAiB,OAAM,QAAA,EAAU,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK,YAAA,EAAc,GAAA,EAAI,aAAA,EAAe,IAAA,EAAK,YAAA,EAAc,IAAA,EAAK,aAAA,EAAe,IAAA,EAAI;AACtP;AAGO,IAAM,oCAAA,GAAyE;AAC/E,IAAM,qCAAA,GAAwC,MAAA,CAAO,IAAA,CAAK,kCAAkC;AAC5F,IAAM,mCAAA,GAAwE,EAAE,GAAG,kCAAA,CAAmC,YAAY,QAAA;AAElI,IAAM,qBAAA,GAAwB;AAAA,EACnC,MAAA,EAAQ,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,8DAAA,EAAgE,UAAA,EAAY,IAAA,EAAM,cAAA,EAAgB,aAAA,EAAe,aAAa,IAAA,EAAK;AAAA,EACzL,QAAA,EAAU,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,uEAAA,EAAyE,UAAA,EAAY,OAAA,EAAU,cAAA,EAAgB,UAAA,EAAY,aAAa,IAAA,EAAK;AAAA,EACzM,UAAA,EAAY,EAAE,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,gEAAA,EAAkE,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,YAAA,EAAc,aAAa,IAAA,EAAK;AAAA,EAC1M,IAAA,EAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAa,+DAAA,EAAiE,UAAA,EAAY,IAAA,EAAM,cAAA,EAAgB,UAAA,EAAY,aAAa,KAAA;AAC9K;AAEO,IAAM,wBAAA,GAA2B,MAAA,CAAO,IAAA,CAAK,qBAAqB;AAClE,IAAM,+BAAA,GAAwD;AAsFrE,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,YAA+B,EAAC;AACtC,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,CAAC,QAAA,KAAyB;AAAE,MAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,IAC3D,YAAY,MAAM,QAAA;AAAA,IAClB,SAAS,MAAM;AACb,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,IAAI,UAAA;AACJ,MAAA,KAAA,MAAW,QAAA,IAAY,SAAA,CAAU,OAAA,EAAQ,EAAG;AAC1C,QAAA,IAAI;AAAE,UAAA,QAAA,EAAS;AAAA,QAAG,SAAS,KAAA,EAAO;AAChC,UAAA,IAAI,CAAC,QAAQ,UAAA,GAAa,KAAA;AAC1B,UAAA,MAAA,GAAS,IAAA;AAAA,QACX;AAAA,MACF;AACA,MAAA,SAAA,CAAU,MAAA,GAAS,CAAA;AACnB,MAAA,IAAI,QAAQ,MAAM,UAAA;AAAA,IACpB;AAAA,GACF;AACF;AAEA,SAAS,SAAS,OAAA,EAAqB;AAErC,EAAA,IAAI;AAAE,IAAA,OAAA,EAAQ;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAA,EAAwD;AACnF;AAEA,IAAMX,OAAAA,GAAS,CAAC,KAAA,EAAgB,GAAA,EAAa,KAAa,QAAA,KAAqB;AAC7E,EAAA,MAAM,SAAS,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC/D,EAAA,OAAO,MAAA,CAAO,SAAS,MAAM,CAAA,GAAIY,UAAU,KAAA,CAAM,MAAA,EAAQ,GAAA,EAAK,GAAG,CAAA,GAAI,QAAA;AACvE,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,KAAA,MAA+G;AAAA,EAChI,eAAe,OAAO,KAAA,CAAM,kBAAkB,SAAA,GAAY,KAAA,CAAM,gBAAgB,mCAAA,CAAoC,aAAA;AAAA,EACpH,sBAAsBZ,OAAAA,CAAO,KAAA,CAAM,sBAAsB,CAAA,EAAG,GAAA,EAAK,oCAAoC,oBAAoB,CAAA;AAAA,EACzH,iBAAiBA,OAAAA,CAAO,KAAA,CAAM,iBAAiB,CAAA,EAAG,IAAA,EAAK,oCAAoC,eAAe,CAAA;AAAA,EAC1G,UAAUA,OAAAA,CAAO,KAAA,CAAM,UAAU,GAAA,EAAI,GAAA,EAAK,oCAAoC,QAAQ,CAAA;AAAA,EACtF,kBAAkBA,OAAAA,CAAO,KAAA,CAAM,kBAAkB,CAAA,EAAG,GAAA,EAAK,oCAAoC,gBAAgB,CAAA;AAAA,EAC7G,cAAcA,OAAAA,CAAO,KAAA,CAAM,cAAc,CAAA,EAAG,GAAA,EAAK,oCAAoC,YAAY,CAAA;AAAA,EACjG,eAAeA,OAAAA,CAAO,KAAA,CAAM,eAAe,CAAA,EAAG,GAAA,EAAK,oCAAoC,aAAa,CAAA;AAAA,EACpG,cAAcA,OAAAA,CAAO,KAAA,CAAM,cAAc,CAAA,EAAG,GAAA,EAAK,oCAAoC,YAAY,CAAA;AAAA,EACjG,eAAeA,OAAAA,CAAO,KAAA,CAAM,eAAe,CAAA,EAAG,GAAA,EAAI,oCAAoC,aAAa;AACrG,CAAA,CAAA;AAEO,IAAM,yCAAA,GAA4C,CAAC,KAAA,KACxD,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACtD,SAAA,CAAU,KAAyE,CAAA,GACnF;AAEC,SAAS,iBAAA,CAAkB,KAAA,EAAc,OAAA,GAAmE,EAAC,EAAG;AACrH,EAAA,MAAM,KAAA,GAAQ,IAAIa,IAAAA,CAAK,IAAI,cAAc,OAAA,CAAQ,IAAA,IAAQ,IAAI,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA,EAAG,IAAI,eAAe,EAAE,OAAA,EAAS,QAAQ,OAAA,IAAW,GAAA,EAAI,CAAC,CAAA;AACxI,EAAA,KAAA,CAAM,QAAA,CAAS,CAAA,GAAI,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA;AAC9B,EAAA,KAAA,CAAM,QAAA,CAAS,CAAA,GAAI,OAAA,CAAQ,SAAA,IAAa,KAAA;AACxC,EAAA,KAAA,CAAM,aAAA,GAAgB,IAAA;AACtB,EAAA,KAAA,CAAM,IAAA,GAAO,aAAA;AACb,EAAA,KAAA,CAAM,IAAI,KAAK,CAAA;AACf,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,8BAAA,CAA+B,KAAA,EAAc,QAAA,EAAyB,OAAA,GAAqD,EAAC,EAAG;AAC7I,EAAA,OAAO,uBAAA,CAAwB,OAAO,QAAA,EAAU,MAAM,IAAI,cAAA,CAAe,QAAQ,GAAG,OAAO,CAAA;AAC7F;AAYA,SAAS,uBAAA,CAAwB,KAAA,EAAc,QAAA,EAAkC,WAAA,EAA+B,OAAA,EAAoD;AAClK,EAAA,MAAM,QAAA,GAAW,8BAAA,CAA+B,KAAA,EAAO,OAAO,CAAA;AAC9D,EAAA,IAAI;AAAE,IAAA,QAAA,CAAS,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAAG,IAAA,OAAO,QAAA,CAAS,UAAA;AAAA,EAAY,SACrF,KAAA,EAAO;AAAE,IAAA,QAAA,CAAS,QAAA,CAAS,WAAW,OAAO,CAAA;AAAG,IAAA,MAAM,KAAA;AAAA,EAAO;AACtE;AAGA,SAAS,8BAAA,CAA+B,OAAc,OAAA,EAAoD;AACxG,EAAA,MAAM,WAAW,cAAA,EAAe;AAChC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,IAAI,eAAA,CAAgB,QAAA,EAAU,SAAU,CAAC,CAAA;AACzD,IAAA,MAAM,GAAA,GAAM,IAAI,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,IAAI,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAI,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA;AAC5C,IAAA,OAAA,CAAQ,IAAA,GAAO,uCAAA;AAAyC,IAAA,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACpF,IAAA,GAAA,CAAI,IAAA,GAAO,yBAAA;AAA2B,IAAA,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAG,IAAA,GAAA,CAAI,UAAA,GAAa,IAAA;AACxF,IAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAAG,IAAA,MAAA,CAAO,OAAO,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,EAAE,MAAM,GAAA,EAAI,GAAA,EAAK,EAAA,EAAI,IAAA,EAAM,KAAK,KAAA,EAAO,EAAA,EAAI,KAAK,EAAA,EAAI,MAAA,EAAQ,KAAK,CAAA;AAAG,IAAA,GAAA,CAAI,OAAO,IAAA,GAAO,CAAA,IAAA;AAAQ,IAAA,GAAA,CAAI,OAAO,MAAA,GAAS,CAAA;AACvL,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAA4B,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,EAAM,GAAA,EAAK,GAAG,CAAA;AACxE,IAAA,GAAA,CAAI,IAAA,GAAO,yBAAA;AAA2B,IAAA,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,EAAM,GAAA,EAAK,CAAA,GAAI,CAAA;AACtE,IAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,MAAA,CAAO,SAAS,GAAA,EAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AACxD,IAAA,KAAA,MAAW,KAAA,IAAS,CAAC,GAAA,EAAK,IAAA,EAAM,GAAG,CAAA,EAAG,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,OAAA,EAAS,CAAA;AACxE,IAAA,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,GAAG,CAAA;AACjC,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAuD;AAC7E,IAAA,QAAA,CAAS,GAAA,CAAI,MAAM,SAAA,CAAU,KAAA,EAAO,CAAA;AACpC,IAAA,IAAI,MAAA,GAAkC,IAAA;AACtC,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,WAAW,SAAA,CAAU,EAAE,GAAG,mCAAA,EAAqC,GAAG,SAAS,CAAA;AAC/E,IAAA,QAAA,CAAS,IAAI,MAAM;AAAE,MAAA,KAAA,CAAM,WAAA,GAAc,IAAA;AAAM,MAAA,MAAA,EAAQ,OAAA,EAAQ;AAAG,MAAA,MAAA,GAAS,IAAA;AAAA,IAAM,CAAC,CAAA;AAClF,IAAA,MAAM,OAAA,GAAU,CAAC,MAAA,KAA6B;AAC5C,MAAA,IAAI,WAAA,GAAmC,IAAA;AACvC,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,QAAA,IAAI;AAAE,UAAA,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,IAAA,EAAM,SAAS,eAAe,CAAA;AAAA,QAAG,CAAA,SAAE;AAAU,UAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,QAAG;AAAA,MAC1G;AACA,MAAA,MAAA,CAAO,aAAa,OAAA,EAAQ;AAAG,MAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAAa,MAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,IACrF,CAAA;AACA,IAAA,MAAM,IAAA,GAAO,CAAC,MAAA,KAAoC;AAChD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,SAAS,gBAAA,GAAmB,cAAA;AACnC,QAAA,MAAA,CAAO,SAAS,WAAA,GAAc,qBAAA;AAC9B,QAAA,MAAA,CAAO,QAAA,CAAS,sBAAsB,QAAA,CAAS,QAAA;AAAA,MACjD;AACA,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA,EAAQ,WAAA,EAAa,OAAA,IAAW,IAAA;AACpD,MAAA,KAAA,CAAM,oBAAA,GAAuB,QAAA,CAAS,aAAA,GAAgB,QAAA,CAAS,oBAAA,GAAuB,CAAA;AACtF,MAAA,OAAA,CAAQ,YAAY,QAAA,CAAS,gBAAA;AAAkB,MAAA,GAAA,CAAI,YAAY,QAAA,CAAS,YAAA;AAAc,MAAA,IAAA,CAAK,YAAY,QAAA,CAAS,aAAA;AAAe,MAAA,GAAA,CAAI,YAAY,QAAA,CAAS,YAAA;AACxJ,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,eAAA,CAAgB,aAAa,CAAA;AACjD,MAAA,KAAA,MAAW,QAAA,IAAY,QAAS,KAAA,CAAM,OAAA,CAAQ,MAAM,QAAQ,CAAA,GAAI,MAAM,QAAA,GAAW,CAAC,MAAM,QAAQ,CAAA,GAAK,EAAC,EAAG,IAAI,oBAAoB,cAAA,EAAgB,QAAA,CAAS,UAAU,QAAA,CAAS,aAAA;AAAA,IAC/K,CAAA;AACA,IAAA,MAAMC,QAAAA,GAAU,CAAC,QAAA,EAAkC,WAAA,KAAoD;AACrG,MAAA,MAAM,YAAY,cAAA,EAAe;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,QAAQ,WAAA,EAAY;AAAG,QAAA,SAAA,CAAU,GAAA,CAAI,MAAM,KAAA,CAAM,OAAA,EAAS,CAAA;AAChE,QAAA,MAAM,MAAA,GAA2B,EAAE,QAAA,EAAU,KAAA,EAAO,aAAa,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,SAAA,CAAU,OAAA,EAAQ;AAC5G,QAAA,SAAA,CAAU,IAAI,MAAM;AAAE,UAAA,MAAA,CAAO,aAAa,OAAA,EAAQ;AAAG,UAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AAAA,QAAM,CAAC,CAAA;AACjF,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAG,QAAA,OAAO,MAAA;AAAA,MAC1B,SAAS,KAAA,EAAO;AAAE,QAAA,QAAA,CAAS,UAAU,OAAO,CAAA;AAAG,QAAA,MAAM,KAAA;AAAA,MAAO;AAAA,IAC9D,CAAA;AACA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAqD;AACxE,MAAA,IAAI,UAAU,QAAA,CAAS,UAAA,IAAc,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC5F,MAAA,MAAM,QAAA,GAAW,QAAA;AAAU,MAAA,QAAA,GAAW,UAAU,EAAE,GAAG,QAAA,EAAU,GAAG,OAAO,CAAA;AAAG,MAAA,QAAA,EAAA;AAC5E,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI,MAAA,KAAW,QAAA,CAAS,aAAA,KAAkB,QAAA,CAAS,aAAA,IAAiB,SAAS,eAAA,KAAoB,QAAA,CAAS,eAAA,CAAA,EAAkB,OAAA,CAAQ,MAAM,CAAA;AAC1I,QAAA,IAAA,CAAK,MAAM,CAAA;AAAA,MACb;AACA,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,CAAS,EAAE,GAAG,QAAA,EAAU,CAAC,CAAA;AAAG,MAAA,OAAO,EAAE,GAAG,QAAA,EAAS;AAAA,IACnF,CAAA;AACA,IAAA,IAAA,CAAK,IAAI,CAAA;AACT,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,WAAA,EAAa,OAAO,EAAE,GAAG,QAAA,EAAS,CAAA;AAAA,MAAI,qBAAA,EAAuB,MAAsB,MAAA,EAAQ,WAAA,EAAa,OAAA,IAAW,IAAA;AAAA,MACnH,WAAA;AAAA,MAAa,SAAA,EAAW,CAAC,EAAA,KAAyC,WAAA,CAAY,mCAAmC,EAAE,CAAA,EAAG,QAAA,IAAY,EAAE,CAAA;AAAA,MACpI,SAAA,EAAW,CAAC,QAAA,KAAgE;AAC1E,QAAA,IAAI,UAAU,QAAA,CAAS,UAAA,IAAc,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC5F,QAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,GAAG,QAAA,EAAU,CAAA;AAAG,QAAA,OAAO,MAAM;AAAE,UAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,QAAG,CAAA;AAAA,MACjG,CAAA;AAAA,MACA,SAAS,QAAA,CAAS;AAAA,KACpB;AACA,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MAAY,OAAA,EAAAA,QAAAA;AAAA,MAAS,IAAA;AAAA,MAAM,OAAO,MAAM;AAAE,QAAA,MAAA,GAAS,IAAA;AAAA,MAAM,CAAA;AAAA,MAAG,UAAU,MAAM,QAAA;AAAA,MAC5E,MAAM,MAAM;AAAE,QAAA,IAAA,GAAO,IAAA;AAAA,MAAM,CAAA;AAAA,MAC3B,SAAS,MAAM;AACb,QAAA,IAAA,GAAO,KAAA;AACP,QAAA,IAAI;AAAE,UAAA,IAAI,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,UAAkB,MAAM,CAAA;AAAA,QAAG,CAAA,SAAE;AAAU,UAAA,IAAA,CAAK,MAAM,CAAA;AAAA,QAAG;AAAA,MAC/F,CAAA;AAAA,MACA,MAAA,EAAQ,CAAC,MAAA,KAA6B;AACpC,QAAA,MAAM,QAAA,GAAW,MAAA;AAAQ,QAAA,MAAA,GAAS,MAAA;AAAQ,QAAA,IAAA,GAAO,KAAA;AAAO,QAAA,IAAA,CAAK,MAAM,CAAA;AACnE,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AAAE,IAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAG,IAAA,MAAM,KAAA;AAAA,EAAO;AAC7D;AAEA,SAAS,8BAAA,CACP,SAAA,EACA,OAAA,EACA,QAAA,EACA,iBACA,cAAA,EACA;AACA,EAAA,MAAM,WAAW,cAAA,EAAe;AAChC,EAAA,QAAA,CAAS,IAAI,eAAe,CAAA;AAC5B,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,OAAA,CAAQ,IAA4B,KAAK,qBAAA,CAAsB,MAAA;AACvG,IAAA,IAAI,mBAAmB,SAAA,CAAU,EAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,WAAA,IAAe,UAAA,CAAW,cAAc,CAAC,CAAA;AAC7E,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,YAAA,IAAgB,UAAA,CAAW,eAAe,CAAC,CAAA;AAChF,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,WAAW,gBAAA,IAAoB,CAAA,EAAG,OAAA,CAAQ,aAAA,IAAiB,GAAG,CAAA;AAC3F,IAAA,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAG,IAAA,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA;AAAG,IAAA,QAAA,CAAS,SAAA,CAAU,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,IAAA;AAAM,IAAA,QAAA,CAAS,UAAU,IAAA,GAAO,YAAA;AACxJ,IAAA,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAC5F,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AAAG,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA,KAAe,KAAA,CAAA,GAAY,SAAA,CAAU,aAAa,OAAA,CAAQ,UAAA;AAAY,IAAA,KAAA,CAAM,aAAa,UAAA,IAAc,IAAA,GAAO,IAAA,GAAO,IAAIC,MAAM,UAAU,CAAA;AAC/L,IAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,CAAkB,OAAA,CAAQ,aAAa,EAAA,EAAI,KAAA,GAAQ,MAAA,EAAQ,GAAA,EAAI,GAAI,CAAA;AACtF,IAAA,MAAM,SAAS,kCAAA,CAAoC,OAAA,CAAQ,kBAAkB,SAAA,CAAU,cAAmD,GAAG,QAAA,IAAY,mCAAA;AACzJ,IAAA,MAAM,QAAA,GAAW,eAAe,KAAA,EAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,OAAA,CAAQ,QAAA,EAAU,CAAA;AACzE,IAAA,QAAA,CAAS,GAAA,CAAI,MAAM,QAAA,CAAS,OAAA,EAAS,CAAA;AACrC,IAAA,IAAI,WAAA,GAA2D,IAAA;AAC/D,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,IAAI,aAAa,OAAO,WAAA;AACxB,MAAA,MAAM,KAAA,GAAQ,kBAAkB,KAAA,EAAO,EAAE,SAAS,QAAA,CAAS,WAAA,EAAY,CAAE,aAAA,EAAe,CAAA;AACxF,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAAG,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAAG,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAClI,MAAA,WAAA,GAAc,KAAA;AACd,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,SAAA,CAAU,WAAA,EAAa,iBAAA,EAAkB;AACpE,IAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAuC;AAC/D,MAAA,IAAI,QAAA,CAAS,YAAW,EAAG;AAC3B,MAAA,MAAM,OAAO,qBAAA,CAAsB,KAAA,CAAM,QAAQ,+BAA+B,CAAA,IAAK,sBAAsB,+BAA+B,CAAA;AAC1I,MAAA,gBAAA,GAAmB,IAAA,CAAK,EAAA;AACxB,MAAA,MAAMC,cAAa,KAAA,CAAM,UAAA,KAAe,KAAA,CAAA,GAAY,IAAA,CAAK,aAAa,KAAA,CAAM,UAAA;AAC5E,MAAA,KAAA,CAAM,aAAaA,WAAAA,IAAc,IAAA,GAAO,IAAA,GAAO,IAAID,MAAMC,WAAU,CAAA;AACnE,MAAA,MAAA,CAAO,GAAA,GAAM,MAAM,SAAA,IAAa,EAAA;AAAI,MAAA,MAAA,CAAO,sBAAA,EAAuB;AAClE,MAAA,MAAMC,OAAAA,GAAS,mCAAmC,KAAA,CAAM,cAAA,IAAkB,KAAK,cAAc,CAAA,IAAK,mCAAmC,oCAAoC,CAAA;AACzK,MAAA,QAAA,CAAS,WAAA,CAAY,EAAE,GAAGA,OAAAA,CAAO,UAAU,GAAG,KAAA,CAAM,UAAU,CAAA;AAC9D,MAAA,QAAA,CAAS,SAAA,CAAU,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,IAAA;AAC9C,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,WAAA,IAAe,IAAA,CAAK,WAAA;AAC5C,MAAA,IAAI,WAAW,iBAAA,EAAkB;AACjC,MAAA,IAAI,WAAA,cAAyB,OAAA,GAAU,SAAA;AAAA,IACzC,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,IAAI,QAAA,CAAS,YAAW,EAAG;AAC3B,MAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,WAAA,IAAe,UAAA,CAAW,cAAc,CAAC,CAAA;AACzE,MAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,YAAA,IAAgB,UAAA,CAAW,eAAe,CAAC,CAAA;AAC3E,MAAA,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAAG,MAAA,MAAA,CAAO,sBAAA,EAAuB;AACrD,MAAA,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAAG,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IAC/D,CAAA;AACA,IAAA,MAAM,MAAA,GAA4B,EAAE,SAAA,EAAW,KAAA,EAAO,UAAU,MAAA,EAAQ,QAAA,EAAU,IAAI,WAAA,GAAc;AAAE,MAAA,OAAO,WAAA;AAAA,IAAa,CAAA,EAAG,IAAI,SAAA,GAAY;AAAE,MAAA,OAAO,gBAAA;AAAA,IAAkB,GAAG,SAAA,EAAW,IAAA,EAAM,QAAQ,gBAAA,EAAkB,OAAA,EAAS,SAAS,OAAA,EAAQ;AAChP,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,QAAA,CAAS,IAAI,MAAM;AAAE,QAAA,IAAI,SAAS,UAAA,CAAW,aAAA,KAAkB,WAAW,SAAA,CAAU,WAAA,CAAY,SAAS,UAAU,CAAA;AAAA,MAAG,CAAC,CAAA;AACvH,MAAA,SAAA,CAAU,WAAA,CAAY,SAAS,UAAU,CAAA;AACzC,MAAA,IAAI,OAAA,CAAQ,iBAAiB,KAAA,EAAO;AAClC,QAAA,QAAA,CAAS,IAAI,MAAM,UAAA,CAAW,mBAAA,GAAsB,QAAA,EAAU,MAAM,CAAC,CAAA;AACrE,QAAA,UAAA,CAAW,gBAAA,GAAmB,UAAU,MAAM,CAAA;AAAA,MAChD;AAAA,IACF,CAAA;AACA,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AACzB,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAGO,SAAS,2BAAA,CAA4B,SAAA,EAAwB,OAAA,GAAwC,EAAC,EAA0B;AACrI,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,mBAAA,CAAoB,WAAW,OAAO,CAAA;AACjE,EAAA,IAAI;AAAE,IAAA,MAAA,EAAO;AAAG,IAAA,OAAO,MAAA;AAAA,EAAQ,SAAS,KAAA,EAAO;AAC7C,IAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AACvB,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,mBAAA,CAAoB,WAAwB,OAAA,EAAuC;AAC1F,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAc,EAAE,KAAA,EAAO,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,kBAAA,EAAoB,CAAA;AACxG,EAAA,OAAO,8BAAA;AAAA,IAA+B,SAAA;AAAA,IAAW,OAAA;AAAA,IAAS,QAAA;AAAA,IAAU,MAAM,SAAS,OAAA,EAAQ;AAAA,IACzF,CAAC,KAAA,EAAO,QAAA,KAAa,8BAAA,CAA+B,KAAA,EAAO,UAAU,QAAQ;AAAA,GAAC;AAClF;AAEA,SAAS,eAAe,MAAA,EAAsB;AAC5C,EAAA,IAAI,QAAQ,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,yCAAyC,YAAY,CAAA;AACnG;AAOA,SAAS,oBAAA,GAA0C;AACjD,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAc,EAAE,KAAA,EAAO,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,kBAAA,EAAoB,CAAA;AACxG,EAAA,MAAM,WAAW,cAAA,EAAe;AAAG,EAAA,QAAA,CAAS,GAAA,CAAI,MAAM,QAAA,CAAS,OAAA,EAAS,CAAA;AACxE,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,aAAa,MAAM,IAAI,cAAA,CAAe,QAAQ,CAAA,EAAG,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,MAAM,IAAA,EAAK;AAC9H;AAGA,SAAS,eAAe,OAAA,EAAiB;AACvC,EAAA,IAAI,aAAa,OAAA,IAAW,OAAO,QAAQ,OAAA,KAAY,UAAA,UAAoB,OAAA,EAAQ;AACrF;AAEA,eAAe,qBAAA,CAAsB,OAAmB,MAAA,EAA4E;AAClI,EAAA,MAAM,WAAW,cAAA,EAAe;AAChC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,cAAc,WAAA,IAAe,EAAE,SAAS,SAAA,CAAA,IAAc,CAAC,UAAU,GAAA,EAAK;AAC/E,MAAA,MAAM,IAAI,MAAM,gFAAgF,CAAA;AAAA,IAClG;AACA,IAAA,MAAM,EAAE,cAAA,EAAgB,cAAA,EAAgB,sBAAqB,GAAI,MAAM,OAAO,cAAc,CAAA;AAC5F,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,EAAE,KAAA,EAAO,MAAM,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,kBAAA,EAAoB,CAAA;AACzG,IAAA,MAAM,iBAAiB,QAAA,CAAS,OAAA;AAChC,IAAA,MAAM,SAAA,GAA+B;AAAA,MACnC,OAAA,EAAS,QAAA;AAAA,MAAU,QAAA;AAAA,MAAU,IAAA,EAAM,IAAA;AAAA,MACnC,WAAA,EAAa,MAAM,IAAI,oBAAA,CAAqB,QAAQ,CAAA;AAAA,MAAG,SAAS,QAAA,CAAS;AAAA,KAC3E;AACA,IAAA,MAAM,kBAAA,GAAqB,QAAA,CAAS,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAA;AAC9D,IAAA,QAAA,CAAS,YAAA,GAAe,CAAC,IAAA,KAAS;AAChC,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,IAAI,QAAA,CAAS,UAAA,EAAW,IAAK,SAAA,CAAU,IAAA,EAAM;AAC7C,MAAA,SAAA,CAAU,OAAO,IAAI,KAAA,CAAM,uBAAuB,IAAA,CAAK,OAAA,IAAW,gBAAgB,CAAA,CAAE,CAAA;AACpF,MAAA,MAAA,CAAO,SAAS,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,QAAA,CAAS,IAAI,MAAM;AACjB,MAAA,IAAI;AACF,QAAA,IAAI,QAAA,CAAS,cAAA,EAAe,EAAG,QAAA,CAAS,OAAA,EAAQ;AAAA,aAC3C,cAAA,CAAe,SAAS,OAAO,CAAA;AAAA,MACtC,CAAA,SAAE;AACA,QAAA,IAAI,QAAA,CAAS,OAAA,KAAY,cAAA,EAAgB,cAAA,CAAe,cAAc,CAAA;AAAA,MACxE;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAM,SAAS,IAAA,EAAK;AAAG,IAAA,KAAA,EAAM;AAC7B,IAAA,IAAI,SAAA,CAAU,IAAA,EAAM,MAAM,SAAA,CAAU,IAAA;AACpC,IAAA,IAAI,EAAE,iBAAA,IAAqB,QAAA,CAAS,YAAY,QAAA,CAAS,OAAA,CAAQ,oBAAoB,IAAA,EAAM;AACzF,MAAA,MAAM,IAAI,MAAM,oFAAoF,CAAA;AAAA,IACtG;AACA,IAAA,OAAO,SAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAAE,IAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAG,IAAA,KAAA,EAAM;AAAG,IAAA,MAAM,KAAA;AAAA,EAAO;AACtE;AAEA,SAAS,gBAAA,GAAmB;AAAE,EAAA,OAAO,IAAI,YAAA,CAAa,iDAAA,EAAmD,YAAY,CAAA;AAAG;AACxH,SAAS,mBAAmB,KAAA,EAAkD;AAC5E,EAAA,IAAI,UAAU,MAAA,IAAU,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,UAAU,OAAO,KAAA;AACxE,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1E;AAGA,SAAS,wBAAA,CAAyB,KAAA,EAAc,MAAA,EAA2B,OAAA,EAA4C;AACrH,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAA4C,CAAC,MAAM,CAAC,CAAA;AACxE,EAAA,MAAM,UAAiE,EAAC;AACxE,EAAA,KAAA,CAAM,SAAS,CAAA,MAAA,KAAU;AACvB,IAAA,MAAM,KAAA,GAAQ,MAAA;AACd,IAAA,IAAI,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAC/B,MAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC3B;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,EAAS,aAAW,CAAC,OAAA,EAAS,OAAA,CAAQ,gBAAgB,CAAU,CAAA;AAC5F,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAiDC,YAAAA,KAAkC;AAChG,IAAA,OAAA,CAAQ,gBAAA,GAAmBA,YAAAA;AAC3B,IAAA,OAAA,CAAQ,sBAAA,EAAuB;AAAA,EACjC,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,OAAA,KAAY,QAAA,GAAW,sBAAA,GAAyB,qBAAA;AACpE,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA,OAAA,KAAW,KAAA,CAAM,OAAA,EAAS,WAAW,CAAC,CAAA;AACtD,EAAA,OAAA,CAAQ,QAAQ,CAAA,MAAA,KAAU;AAAE,IAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AAAA,EAAM,CAAC,CAAA;AACxD,EAAA,OAAO,MAAM;AACX,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,OAAA,EAAS,QAAQ,CAAA,KAAM,KAAA,CAAM,OAAA,EAAS,QAAQ,CAAC,CAAA;AAClE,IAAA,OAAA,CAAQ,QAAQ,CAAA,MAAA,KAAU;AAAE,MAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AAAA,IAAM,CAAC,CAAA;AAAA,EAC1D,CAAA;AACF;AAGO,SAAS,kCAAA,CACd,SAAA,EACA,OAAA,GAA+C,EAAC,EAClB;AAC9B,EAAA,cAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,EAAA,MAAM,WAAW,cAAA,EAAe;AAChC,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,qBAAA,CAAsB,OAAA,CAAQ,IAA4B,KAAK,qBAAA,CAAsB,MAAA;AACvG,IAAA,IAAI,mBAAmB,SAAA,CAAU,EAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA,KAAe,KAAA,CAAA,GAAY,SAAA,CAAU,aAAa,OAAA,CAAQ,UAAA;AACrF,IAAA,KAAA,CAAM,aAAa,UAAA,IAAc,IAAA,GAAO,IAAA,GAAO,IAAIH,MAAM,UAAU,CAAA;AACnE,IAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,CAAkB,OAAA,CAAQ,aAAa,EAAA,EAAI,CAAA,EAAG,KAAI,GAAI,CAAA;AACzE,IAAA,MAAM,SAAS,kCAAA,CAAoC,OAAA,CAAQ,kBAAkB,SAAA,CAAU,cAAmD,GAAG,QAAA,IAAY,mCAAA;AACzJ,IAAA,MAAM,QAAA,GAAW,+BAA+B,KAAA,EAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,OAAA,CAAQ,QAAA,EAAU,CAAA;AACzF,IAAA,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA;AACxC,IAAA,IAAI,cAAA,GAAiB,QAAQ,OAAA,IAAW,IAAA;AACxC,IAAA,IAAI,WAAA,GAA2D,IAAA;AAC/D,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,IAAI,aAAa,OAAO,WAAA;AACxB,MAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAS,UAAA,CAAW,WAAA,EAAY,CAAE,aAAA,EAAe,CAAA;AACnG,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAAG,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA;AAAG,MAAA,QAAA,CAAS,GAAA,CAAI,MAAM,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAClI,MAAA,WAAA,GAAc,KAAA;AACd,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,SAAA,CAAU,WAAA,EAAa,iBAAA,EAAkB;AACpE,IAAA,IAAI,QAAA,GAA4C,EAAE,UAAA,EAAY,kBAAA,CAAmB,OAAA,CAAQ,WAAW,UAAA,IAAc,OAAA,CAAQ,QAAA,IAAY,MAAM,CAAA,EAAE;AAC9I,IAAA,IAAI,MAAA,GAAmC,IAAA;AACvC,IAAA,IAAI,cAAA,GAA2C,IAAA;AAC/C,IAAA,IAAI,MAAA,GAAwC,cAAA;AAC5C,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,QAAA,GAAiC,IAAA;AACrC,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,OAAA,GAA2D,IAAA;AAC/D,IAAA,IAAI,qBAAA,GAAyE,IAAA;AAC7E,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,uBAAA,GAA0B,CAAA;AAC9B,IAAA,IAAI,cAAA,GAAsC,IAAA;AAC1C,IAAA,IAAI,YAAA,GAAqC,IAAA;AACzC,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAyD;AAC/E,IAAA,MAAM,cAAc,MAAuC;AACzD,MAAA,MAAM,MAAA,GAAS,EAAE,QAAA,EAAU,EAAE,GAAG,QAAA,EAAS,EAAG,QAAQ,KAAA,EAAM;AAC1D,MAAA,IAAI,MAAA,EAAQ,OAAA,KAAY,OAAA,EAAS,OAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS;AACjG,MAAA,IAAI,MAAA,EAAQ,OAAA,KAAY,QAAA,EAAU,OAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS;AACnG,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,IACpD,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,MAAM5C,YAAW,WAAA,EAAY;AAC7B,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,IAAI;AAAE,UAAA,QAAA,CAASA,SAAQ,CAAA;AAAA,QAAG,SAAS,OAAA,EAAS;AAAE,UAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,OAAO,CAAA;AAAA,QAAG;AAAA,MAClH;AAAA,IACF,CAAA;AACA,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAkC,KAAA,GAAQ,KAAA,KAAU;AACxE,MAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,WAAA,IAAe,UAAA,CAAW,cAAc,CAAC,CAAA;AACzE,MAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,YAAA,IAAgB,UAAA,CAAW,eAAe,CAAC,CAAA;AAC3E,MAAA,MAAA,CAAO,SAAS,CAAA,GAAI,CAAA;AAAG,MAAA,MAAA,CAAO,sBAAA,EAAuB;AACrD,MAAA,QAAA,CAAS,aAAA,CAAc,KAAK,GAAA,CAAI,UAAA,CAAW,oBAAoB,CAAA,EAAG,OAAA,CAAQ,aAAA,IAAiB,GAAG,CAAC,CAAA;AAC/F,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IAC9B,CAAA;AACA,IAAA,MAAM,SAAS,MAAM;AAAE,MAAA,IAAI,CAAC,QAAA,IAAY,MAAA,EAAQ,YAAA,CAAa,OAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAC/E,IAAA,QAAA,CAAS,IAAI,MAAM;AAAE,MAAA,IAAI,cAAA,EAAgB,UAAA,CAAW,mBAAA,GAAsB,QAAA,EAAU,MAAM,CAAA;AAAA,IAAG,CAAC,CAAA;AAC9F,IAAA,MAAM,MAAA,GAAS,CAAC,SAAA,KAAiC;AAC/C,MAAA,IAAI,QAAA,IAAY,cAAc,MAAA,EAAQ;AACtC,MAAA,MAAA,GAAS,MAAA,KAAW,cAAc,WAAA,GAAc,MAAA;AAAQ,MAAA,KAAA,GAAQ,SAAA,CAAU,IAAA;AAC1E,MAAA,KAAK,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,MAAM,SAAA,CAAU,QAAA,CAAS,gBAAA,CAAiB,IAAI,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AAClG,MAAA,KAAK,KAAA,CAAM,OAAA,EAAS,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAC,OAAA,KAAY,OAAA,CAAQ,KAAA,CAAM,uCAAA,EAAyC,OAAO,CAAC,CAAA;AAChH,MAAA,MAAA,EAAO;AACP,MAAA,IAAI;AAAE,QAAA,OAAA,CAAQ,YAAA,GAAe,UAAU,IAAK,CAAA;AAAA,MAAG,SAAS,OAAA,EAAS;AAAE,QAAA,OAAA,CAAQ,KAAA,CAAM,gDAAgD,OAAO,CAAA;AAAA,MAAG;AAAA,IAC7I,CAAA;AACA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA8F;AACjH,MAAA,IAAI,QAAA,EAAU,OAAO,OAAA,CAAQ,MAAA,CAAO,kBAAkB,CAAA;AACtD,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI;AAAE,QAAA,UAAA,GAAa,MAAM,UAAA,KAAe,KAAA,CAAA,GAAY,SAAS,UAAA,GAAa,kBAAA,CAAmB,MAAM,UAAU,CAAA;AAAA,MAAG,SACzG,OAAA,EAAS;AAAE,QAAA,OAAO,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,MAAG;AAClD,MAAA,IAAI,qBAAA,IAAyB,eAAe,QAAA,CAAS,UAAA,KAAe,WAAW,cAAA,IAAkB,MAAA,KAAW,cAAc,OAAO,qBAAA;AACjI,MAAA,IAAI,MAAA,KAAW,WAAW,UAAA,KAAe,QAAA,CAAS,YAAY,OAAO,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,CAAA;AAClG,MAAA,QAAA,GAAW,EAAE,UAAA,EAAW;AACxB,MAAA,MAAMgB,WAAU,EAAE,UAAA;AAClB,MAAA,MAAM,QAAA,GAAW,OAAA;AACjB,MAAA,MAAA,GAAS,SAAS,WAAA,GAAc,cAAA;AAAgB,MAAA,KAAA,GAAQ,IAAA;AACxD,MAAA,MAAM,UAAU,YAAsD;AACpE,QAAA,IAAI,SAAA,GAAsC,IAAA;AAC1C,QAAA,IAAI,WAAA,GAAuC,IAAA;AAC3C,QAAA,IAAI,SAAA,GAAY,KAAA;AAChB,QAAA,IAAI,QAAA,GAAW,KAAA;AACf,QAAA,IAAI,2BAA2B,MAAM;AAAA,QAAC,CAAA;AACtC,QAAA,IAAI,uBAAuB,MAAM;AAAA,QAAC,CAAA;AAClC,QAAA,MAAM,QAAQ,MAAM;AAClB,UAAA,IAAI,QAAA,IAAY,UAAA,KAAeA,QAAAA,EAAS,MAAM,gBAAA,EAAiB;AAC/D,UAAA,IAAI,CAAC,MAAA,EAAQ,cAAA,CAAe,OAAA,CAAQ,MAAM,CAAA;AAC1C,UAAA,IAAI,SAAA,EAAW,IAAA,EAAM,MAAM,SAAA,CAAU,IAAA;AAAA,QACvC,CAAA;AACA,QAAA,IAAI;AACF,UAAA,KAAA,EAAM;AACN,UAAA,IAAI,UAAA,KAAe,OAAA,EAAS,SAAA,GAAY,oBAAA,EAAqB;AAAA,eACxD;AACH,YAAA,IAAI;AAAE,cAAA,SAAA,GAAY,MAAM,qBAAA,CAAsB,KAAA,EAAO,MAAM,CAAA;AAAA,YAAG,SACvD,OAAA,EAAS;AACd,cAAA,KAAA,EAAM;AACN,cAAA,IAAI,eAAe,MAAA,IAAW,OAAA,YAAmB,SAAS,OAAA,CAAQ,IAAA,KAAS,cAAe,MAAM,OAAA;AAChG,cAAA,SAAA,GAAY,oBAAA,EAAqB;AAAA,YACnC;AAAA,UACF;AACA,UAAA,KAAA,EAAM;AACN,UAAA,cAAA,GAAiB,SAAA;AACjB,UAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,UAAA,YAAA,CAAa,UAAU,IAAI,CAAA;AAC3B,UAAA,QAAA,CAAS,UAAU,OAAA,GAAU,cAAA;AAG7B,UAAA,QAAA,CAAS,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,OAAA,KAAY,UAAU,YAAA,GAAe,gBAAA;AACzE,UAAA,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAC5F,UAAA,IAAI,YAAY,MAAM,YAAA;AACtB,UAAA,KAAA,EAAM;AACN,UAAA,IAAI,KAAA,CAAM,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAC7B,UAAA,KAAA,EAAM;AACN,UAAA,IAAI,MAAM,OAAA,EAAS;AAAE,YAAA,SAAA,GAAY,IAAA;AAAM,YAAA,MAAM,KAAA,CAAM,QAAQ,OAAA,EAAQ;AAAA,UAAG;AACtE,UAAA,KAAA,EAAM;AACN,UAAA,wBAAA,GAA2B,wBAAA,CAAyB,KAAA,EAAO,MAAA,EAAQ,SAAA,CAAU,OAAO,CAAA;AACpF,UAAA,oBAAA,GAAuB,qBAAqB,KAAK,CAAA;AACjD,UAAA,QAAA,CAAS,IAAA,EAAK;AAGd,UAAA,GAAG;AACD,YAAA,WAAA,EAAa,OAAA,EAAQ;AAAG,YAAA,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,SAAA,CAAU,WAAW,CAAA;AACtF,YAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AACzB,YAAA,IAAI,OAAO,QAAA,CAAS,YAAA,KAAiB,YAAY,MAAM,IAAI,MAAM,qEAAqE,CAAA;AACtI,YAAA,MAAM,QAAA,CAAS,YAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAAG,YAAA,KAAA,EAAM;AAClD,YAAA,IAAI,MAAM,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA,CAAQ,QAAQ,QAAQ,CAAA;AAAA,iBAAA,IAC9C,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,MAAM,CAAA;AAC9C,YAAA,KAAA,EAAM;AAAA,UACR,CAAA,QAAS,WAAA,CAAY,QAAA,KAAa,QAAA,CAAS,QAAA,EAAS;AACpD,UAAA,YAAA,CAAa,QAAQ,CAAA;AAGrB,UAAA,QAAA,GAAW,IAAA;AAAM,UAAA,SAAA,CAAU,WAAA,CAAY,SAAS,UAAU,CAAA;AAC1D,UAAA,IAAI,CAAC,cAAA,IAAkB,OAAA,CAAQ,YAAA,KAAiB,KAAA,EAAO;AACrD,YAAA,cAAA,GAAiB,IAAA;AAAM,YAAA,UAAA,CAAW,gBAAA,GAAmB,UAAU,MAAM,CAAA;AAAA,UACvE;AACA,UAAA,KAAA,EAAM;AACN,UAAA,MAAM,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,QAAQ,CAAA;AACpC,UAAA,KAAA,EAAM;AACN,UAAA,MAAM,WAAA,GAAc,MAAA;AACpB,UAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA;AAAG,UAAA,WAAA,GAAc,IAAA;AACnE,UAAA,MAAA,GAAS,SAAA;AAAW,UAAA,SAAA,GAAY,IAAA;AAAM,UAAA,QAAA,GAAW,KAAA;AACjD,UAAA,QAAA,CAAS,MAAM;AAAE,YAAA,IAAI,WAAA,EAAa,SAAS,UAAA,CAAW,aAAA,KAAkB,WAAW,SAAA,CAAU,WAAA,CAAY,WAAA,CAAY,QAAA,CAAS,UAAU,CAAA;AAAA,UAAG,CAAC,CAAA;AAC5I,UAAA,QAAA,CAAS,MAAM,cAAA,EAAgB,OAAA,EAAS,CAAA;AACxC,UAAA,QAAA,CAAS,MAAM,WAAA,EAAa,OAAA,EAAS,CAAA;AACrC,UAAA,MAAA,GAAS,OAAA;AAAS,UAAA,KAAA,GAAQ,IAAA;AAC1B,UAAA,MAAMhB,YAAW,WAAA,EAAY;AAAG,UAAA,MAAA,EAAO;AAAG,UAAA,OAAOA,SAAAA;AAAA,QACnD,SAAS,OAAA,EAAS;AAChB,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,IAAI;AAAE,cAAA,MAAM,KAAA,CAAM,SAAS,OAAA,EAAQ;AAAA,YAAG,CAAA,CAAA,MAAQ;AAAA,YAAqC;AACnF,YAAA,IAAI,MAAM,KAAA,EAAO,MAAM,MAAM,KAAA,CAAM,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AAAA,UAC1D;AACA,UAAA,IAAI,QAAA,IAAY,SAAA,EAAW,QAAA,CAAS,UAAA,CAAW,aAAA,KAAkB,WAAW,SAAA,CAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA;AAC/H,UAAA,QAAA,CAAS,MAAM,WAAA,EAAa,OAAA,EAAS,CAAA;AACrC,UAAA,QAAA,CAAS,MAAM,SAAA,EAAW,OAAA,EAAS,CAAA;AACnC,UAAA,MAAM,WAAW,QAAA,IAAY,UAAA,KAAegB,YAAY,CAAC,MAAA,IAAU,QAAQ,MAAA,EAAQ,OAAA;AACnF,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,QAAA,CAAS,oBAAoB,CAAA;AAC7B,YAAA,QAAA,CAAS,wBAAwB,CAAA;AACjC,YAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AACzB,YAAA,IAAI,SAAA,IAAa,MAAA,IAAU,CAAC,MAAA,CAAO,IAAA,EAAM;AACvC,cAAA,IAAI;AAAE,gBAAA,MAAM,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAAA,cAAG,SAAS,WAAA,EAAa;AAAE,gBAAA,KAAA,CAAM,aAAA,CAAc,WAAA,EAAa,MAAA,CAAO,QAAQ,CAAA;AAAA,cAAG;AAAA,YACjI;AACA,YAAA,IAAI,eAAeA,QAAAA,EAAS;AAC1B,cAAA,MAAA,GAAS,MAAA,EAAQ,OAAO,MAAA,GAAS,OAAA;AACjC,cAAA,KAAA,GAAQ,mBAAmB,KAAA,GAAQ,OAAA,GAAU,IAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAG,cAAA,MAAA,EAAO;AAAA,YAClF;AAAA,UACF;AACA,UAAA,IAAI,QAAA,QAAgB,gBAAA,EAAiB;AACrC,UAAA,MAAM,OAAA;AAAA,QACR,CAAA,SAAE;AAAU,UAAA,cAAA,GAAiB,IAAA;AAAA,QAAM;AAAA,MACrC,CAAA;AACA,MAAA,MAAM,SAAA,GAAY,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA,GAAI,OAAA,CAAQ,OAAA,EAAQ,CAAE,KAAK,OAAO,CAAA;AAC3G,MAAA,OAAA,GAAU,SAAA;AACV,MAAA,qBAAA,GAAwB,SAAA;AACxB,MAAA,MAAA,EAAO;AACP,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,IAAI,OAAA,KAAY,WAAW,OAAA,GAAU,IAAA;AACrC,QAAA,IAAI,qBAAA,KAA0B,WAAW,qBAAA,GAAwB,IAAA;AAAA,MACnE,CAAA;AACA,MAAA,KAAK,SAAA,CAAU,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AACpC,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,SAAA,GAA+C;AAAA,MACnD,WAAA,EAAa,OAAO,EAAE,GAAG,QAAA,EAAS,CAAA;AAAA,MAAI,WAAA;AAAA,MAAa,WAAA;AAAA,MACnD,SAAA,EAAW,CAAC,QAAA,KAAa;AACvB,QAAA,IAAI,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA;AAC5E,QAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,QAAA,IAAI;AAAE,UAAA,QAAA,CAAS,aAAa,CAAA;AAAA,QAAG,SAAS,OAAA,EAAS;AAAE,UAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,OAAO,CAAA;AAAA,QAAG;AACrH,QAAA,OAAO,MAAM;AAAE,UAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,QAAG,CAAA;AAAA,MAC7C,CAAA;AAAA,MACA,iBAAiB,MAAM;AACrB,QAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,IAAQ,QAAA,IAAY,uBAAA,IAA4B,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,OAAA,EAAU,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACnL,QAAA,IAAI,iBAAiB,CAAA,EAAG,YAAA,GAAe,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAAE,UAAA,cAAA,GAAiB,OAAA;AAAA,QAAS,CAAC,CAAA;AACnG,QAAA,IAAI,QAAA,GAAW,KAAA;AACf,QAAA,OAAO,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,SAAS,MAAM;AACjD,UAAA,IAAI,QAAA,EAAU;AAAQ,UAAA,QAAA,GAAW,IAAA;AACjC,UAAA,IAAI,EAAE,eAAe,CAAA,EAAG;AAAE,YAAA,cAAA,IAAiB;AAAG,YAAA,cAAA,GAAiB,IAAA;AAAM,YAAA,YAAA,GAAe,IAAA;AAAA,UAAM;AAAA,QAC5F,CAAA,EAAE;AAAA,MACJ,CAAA;AAAA,MACA,qBAAA,EAAuB,CAAC,OAAA,KAAY;AAGlC,QAAA,IAAI,QAAA,EAAU,OAAO,QAAA,CAAS,IAAA,CAAK,SAAS,OAAO,CAAA;AACnD,QAAA,MAAM,QAAA,GAAW,OAAA;AACjB,QAAA,uBAAA,EAAA;AACA,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAM,MAAM,KAAA,CAAS,CAAA,CAAE,IAAA,CAAK,YAAY;AAClF,UAAA,IAAI,YAAY,MAAM,YAAA;AACtB,UAAA,IAAI,MAAM,KAAA,EAAO,MAAM,MAAM,KAAA,CAAM,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AACxD,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAA,OAAA,KAAW,KAAA,CAAM,aAAA,CAAc,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,UAC/F;AACA,UAAA,IAAI;AACF,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA,SAAE;AACA,YAAA,IAAI,CAAC,QAAA,IAAY,MAAA,IAAU,CAAC,OAAO,IAAA,EAAM;AACvC,cAAA,MAAM,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,OAAA,KAAW,KAAA,CAAM,aAAA,CAAc,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,YAC9G;AAAA,UACF;AACA,UAAA,OAAO,WAAA,EAAY;AAAA,QACrB,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM;AAAE,UAAA,uBAAA,EAAA;AAAA,QAA2B,CAAC,CAAA;AAG/C,QAAA,OAAA,GAAU,SAAA;AACV,QAAA,KAAK,SAAA,CAAU,KAAK,MAAM;AAAE,UAAA,IAAI,OAAA,KAAY,WAAW,OAAA,GAAU,IAAA;AAAA,QAAM,GAAG,MAAM;AAAE,UAAA,IAAI,OAAA,KAAY,WAAW,OAAA,GAAU,IAAA;AAAA,QAAM,CAAC,CAAA;AAC9H,QAAA,OAAO,SAAA,CAAU,IAAA,CAAK,MAAM,KAAA,CAAS,CAAA;AAAA,MACvC;AAAA,KACF;AACA,IAAA,MAAM,KAAA,GAAQ,uBAAuB,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,OAAA,EAAS,CAAC,OAAA,EAAS,QAAA,KAAa;AACnG,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,MAAM,OAAA,GAAU,mBAAmB,KAAA,GAAQ,OAAA,GAAU,IAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAC9E,MAAA,IAAI,kBAAkB,QAAA,KAAa,cAAA,CAAe,QAAA,IAAY,QAAA,KAAa,QAAQ,QAAA,EAAU;AAAE,QAAA,cAAA,CAAe,IAAA,GAAO,OAAA;AAAS,QAAA;AAAA,MAAQ;AACtI,MAAA,IAAI,MAAA,SAAe,IAAA,GAAO,OAAA;AAC1B,MAAA,MAAA,GAAS,SAAS,MAAA,GAAS,OAAA;AAAS,MAAA,KAAA,GAAQ,OAAA;AAC5C,MAAA,KAAK,MAAM,OAAA,EAAS,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AACnD,MAAA,MAAA,EAAO;AAAA,IACT,CAAC,CAAA;AACD,IAAA,MAAM,UAAU,MAAqB;AACnC,MAAA,IAAI,UAAU,OAAO,QAAA;AACrB,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,MAAA;AACJ,MAAA,QAAA,GAAW,IAAI,OAAA,CAAc,CAAC,GAAA,EAAK,EAAA,KAAO;AAAE,QAAA,OAAA,GAAU,GAAA;AAAK,QAAA,MAAA,GAAS,EAAA;AAAA,MAAI,CAAC,CAAA;AACzE,MAAA,KAAK,QAAA,CAAS,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AACnC,MAAA,QAAA,GAAW,IAAA;AAAM,MAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AAAM,MAAA,UAAA,EAAA;AAAc,MAAA,QAAA,CAAS,KAAA,EAAM;AACrE,MAAA,MAAA,GAAS,UAAA;AAAY,MAAA,MAAA,EAAO;AAAG,MAAA,SAAA,CAAU,KAAA,EAAM;AAC/C,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,EAAS,OAAA,MAAa,KAAA,CAAM,KAAA;AAChD,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,IAAI;AACF,UAAA,IAAI,MAAA,EAAQ,SAAS,UAAA,CAAW,aAAA,KAAkB,WAAW,SAAA,CAAU,WAAA,CAAY,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA;AAC7G,UAAA,IAAI;AAAE,YAAA,QAAA,CAAS,OAAA,EAAQ;AAAA,UAAG,CAAA,SAAE;AAAU,YAAA,MAAA,EAAQ,OAAA,EAAQ;AAAA,UAAG;AACzD,UAAA,OAAA,EAAQ;AAAA,QACV,SAAS,OAAA,EAAS;AAAE,UAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAAG;AAAA,MACvC,CAAA;AAGA,MAAA,IAAI,OAAA,IAAW,UAAA,IAAc,KAAA,EAAO,KAAK,OAAA,CAAQ,UAAA,CAAW,CAAC,OAAA,EAAS,KAAA,EAAO,YAAY,CAAC,CAAA,CAAE,KAAK,OAAO,CAAA;AAAA,WACnG,OAAA,EAAQ;AACb,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAuC;AAC/D,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,cAAA,GAAiB,MAAM,OAAA,IAAW,IAAA;AAClC,MAAA,MAAM,OAAO,qBAAA,CAAsB,KAAA,CAAM,QAAQ,+BAA+B,CAAA,IAAK,sBAAsB,+BAA+B,CAAA;AAC1I,MAAA,gBAAA,GAAmB,IAAA,CAAK,EAAA;AACxB,MAAA,MAAM6B,cAAa,KAAA,CAAM,UAAA,KAAe,KAAA,CAAA,GAAY,IAAA,CAAK,aAAa,KAAA,CAAM,UAAA;AAC5E,MAAA,KAAA,CAAM,aAAaA,WAAAA,IAAc,IAAA,GAAO,IAAA,GAAO,IAAID,MAAMC,WAAU,CAAA;AACnE,MAAA,MAAA,CAAO,GAAA,GAAM,MAAM,SAAA,IAAa,EAAA;AAAI,MAAA,MAAA,CAAO,sBAAA,EAAuB;AAClE,MAAA,MAAMC,OAAAA,GAAS,mCAAmC,KAAA,CAAM,cAAA,IAAkB,KAAK,cAAc,CAAA,IAAK,mCAAmC,oCAAoC,CAAA;AACzK,MAAA,QAAA,CAAS,UAAA,CAAW,YAAY,EAAE,GAAGA,QAAO,QAAA,EAAU,GAAG,KAAA,CAAM,QAAA,EAAU,CAAA;AACzE,MAAA,IAAI,QAAQ,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,OAAA,GAAU,MAAM,OAAA,IAAW,IAAA;AACjE,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,WAAA,IAAe,IAAA,CAAK,WAAA;AAC5C,MAAA,IAAI,WAAW,iBAAA,EAAkB;AACjC,MAAA,IAAI,WAAA,cAAyB,OAAA,GAAU,SAAA;AAAA,IACzC,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,YAAY,QAAQ,CAAA;AAClC,IAAA,OAAO;AAAA,MAAE,SAAA;AAAA,MAAW,KAAA;AAAA,MAAO,MAAA;AAAA,MAAQ,UAAU,QAAA,CAAS,UAAA;AAAA,MAAY,IAAI,WAAA,GAAc;AAAE,QAAA,OAAO,WAAA;AAAA,MAAa,CAAA;AAAA,MAAG,IAAI,SAAA,GAAY;AAAE,QAAA,OAAO,gBAAA;AAAA,MAAkB,CAAA;AAAA,MAAG,SAAA,EAAW,IAAA;AAAA,MACpK,SAAA;AAAA,MAAW,KAAA;AAAA,MAAO,IAAI,QAAA,GAAW;AAAE,QAAA,OAAO,QAAQ,QAAA,IAAY,IAAA;AAAA,MAAM,CAAA;AAAA,MAAG,IAAI,OAAA,GAAU;AAAE,QAAA,OAAO,QAAQ,OAAA,IAAW,IAAA;AAAA,MAAM,CAAA;AAAA,MAAG,MAAA;AAAA,MAAQ,gBAAA;AAAA,MAAkB;AAAA,KAAQ;AAAA,EAChK,SAAS,OAAA,EAAS;AAAE,IAAA,QAAA,CAAS,SAAS,OAAO,CAAA;AAAG,IAAA,MAAM,OAAA;AAAA,EAAS;AACjE;AAGA,eAAsB,gCAAA,CACpB,SAAA,EACA,OAAA,GAA6C,EAAC,EACT;AACrC,EAAA,MAAM,OAAA,GAAU,kCAAA,CAAmC,SAAA,EAAW,OAAO,CAAA;AACrE,EAAA,IAAI;AACF,IAAA,MAAM9C,SAAAA,GAAW,MAAM,OAAA,CAAQ,KAAA;AAC/B,IAAA,IAAI,CAACA,SAAAA,CAAS,QAAA,EAAU,MAAM,IAAI,MAAM,+CAA+C,CAAA;AACvF,IAAA,MAAM,MAAA,GAAqCA,UAAS,OAAA,KAAY,OAAA,GAC5D,EAAE,GAAG,OAAA,EAAS,UAAUA,SAAAA,CAAS,QAAA,EAAU,SAAS,OAAA,EAAQ,GAC5D,EAAE,GAAG,OAAA,EAAS,UAAUA,SAAAA,CAAS,QAAA,EAAU,SAAS,QAAA,EAAS;AAGjE,IAAA,MAAA,CAAO,iBAAiB,MAAA,EAAQ;AAAA,MAC9B,QAAA,EAAU,EAAE,GAAA,EAAK,MAAM,QAAQ,QAAA,EAAS;AAAA,MAAG,OAAA,EAAS,EAAE,GAAA,EAAK,MAAM,QAAQ,OAAA,EAAQ;AAAA,MACjF,WAAA,EAAa,EAAE,GAAA,EAAK,MAAM,QAAQ,WAAA,EAAY;AAAA,MAAG,SAAA,EAAW,EAAE,GAAA,EAAK,MAAM,QAAQ,SAAA;AAAU,KAC5F,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,OAAA,EAAS;AAChB,IAAA,IAAI;AAAE,MAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAsC;AAC7E,IAAA,MAAM,OAAA;AAAA,EACR;AACF;;;ACpsBA,eAAsB,oBAAoB,OAAA,EAAuD;AAC/F,EAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAC9F,EAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,UAAU,MAAM,IAAI,MAAM,iDAAiD,CAAA;AACnG,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,SAAA,GAA2B,QAAQ,OAAA,EAAQ;AAC/C,EAAA,IAAI,YAAA;AACJ,EAAA,IAAIgB,QAAAA,GAAU,CAAA;AACd,EAAA,IAAI,aAAA;AACJ,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,UAAA,IAAc,EAAA;AAClE,EAAA,IAAI,kBAAA,GAAqB,CAAA;AACzB,EAAA,MAAM,wBAAA,GAA2B,CAAC,KAAA,EAAiC,SAAA,KAA6C;AAC9G,IAAA,MAAM,WAAW,EAAE,kBAAA;AACnB,IAAA,MAAM,QAAA,GAAW,cAAc,SAAS,CAAA;AAExC,IAAA,MAAM,UAAA,GAAa,CAAC,OAAA,CAAQ,QAAA,IAAY,QAAA,CAAS,UAAA,KAAe,MAAA,KAC1D,QAAA,CAAS,IAAA,KAAS,MAAA,IAAa,QAAA,CAAS,IAAA,KAAS,QAAA,CAAA;AACvD,IAAA,IAAI,QAAQ,SAAA,CAAU,KAAA,EAAO,OAAA,CAAQ,SAAA,CAAU,MAAM,UAAA,GAAa,kBAAA;AAClE,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,UAAA,GAAa,yBAAyB,CAAA,GAAA,KAAO;AACjD,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,kBAAA,IAAsB,OAAA,CAAQ,UAAU,KAAA,EAAO,OAAA,CAAQ,SAAA,CAAU,KAAA,CAAM,UAAA,GAAa,GAAA;AAAA,IACpH,CAAC,CAAA;AACD,IAAA,MAAM,MAAM,SAAA,CAAU,QAAA;AACtB,IAAA,MAAM,eAAA,GAAkB,+BAAA,CAAgC,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACxE,IAAA,UAAA,CAAW,WAAW,eAAe,CAAA;AACrC,IAAA,KAAK,+BAA+B,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,CAAE,KAAK,CAAA,OAAA,KAAW;AACpE,MAAA,UAAA,CAAW,UAAA,CAAW,WAAW,eAAe,CAAA;AAChD,MAAA,UAAA,CAAW,OAAA,EAAQ;AAAA,IACrB,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,MAAM,UAAA,uBAAiB,OAAA,EAAoD;AAC3E,EAAA,MAAM,QAAA,GAAW,IAAI,eAAA,EAAgB;AACrC,EAAA,MAAM,OAAA,GAAU,IAAI,eAAA,EAAgB;AACpC,EAAA,YAAA,GAAe,OAAA;AACf,EAAA,MAAM,OAAA,GAAU,MAAM,IAAI,YAAA,CAAa,wCAAwC,YAAY,CAAA;AAC3F,EAAA,MAAM,SAAS,MAAM;AAAE,IAAA,QAAA,CAAS,KAAA,EAAM;AAAG,IAAA,YAAA,EAAc,KAAA,EAAM;AAAA,EAAG,CAAA;AAChE,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,KAAA,EAAM;AAC3C,EAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,gBAAgB,EAAE,IAAA,EAAM,MAAM,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe;AAC5C,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,KAAwB;AAAE,IAAA,IAAI,YAAY,QAAA,CAAS,MAAA,CAAO,WAAW,MAAA,CAAO,OAAA,QAAe,OAAA,EAAQ;AAAA,EAAG,CAAA;AACrH,EAAA,MAAM,YAAA,GAAe,OAAO,KAAA,KAAoC;AAC9D,IAAA,MAAM,UAAU,MAAM,qBAAA,CAAsB,OAAO,KAAA,IAAS,IAAA,EAAM,MAAM,KAAK,CAAA;AAC7E,IAAA,IAAI,OAAO,SAAA,EAAW,MAAM,KAAA,CAAM,SAAA,CAAU,sBAAsB,OAAO,CAAA;AAAA,SACpE,OAAA,EAAQ;AAAA,EACf,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,SAAA,EAA0C,MAAA,EAA+C,YAC5G,OAAA,CAAQ,SAAA,IAAa,kBAAA,EAAoB,SAAA,CAAU,QAAA,EAAU,EAAE,GAAG,MAAA,EAAQ,QAAQ,CAAA;AACrF,EAAA,MAAM,aAAA,GAAgB,CAAC,SAAA,KAA0E;AAC/F,IAAA,MAAM,EAAE,UAAA,EAAY,GAAG,KAAA,EAAM,GAAI,EAAE,GAAG,OAAA,CAAQ,KAAA,EAAO,GAAG,SAAA,CAAU,KAAA,EAAM;AAExE,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAI,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI;AAAA,MACrD,YAAY,UAAA,IAAc,OAAO,eAAe,QAAA,GAAW,UAAA,CAAW,QAAO,GAAI;AAAA,KACnF,EAAG;AAAA,EACL,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAO,MAAA,KAAwB;AACrD,IAAA,MAAM,YAAY,KAAA,EAAO,SAAA;AACzB,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,IAAA,IAAI;AAAE,MAAA,MAAM,SAAA,CAAU,WAAA,CAAY,SAAA,CAAU,WAAA,EAAa,CAAA;AAAA,IAAG,SACrD,KAAA,EAAO;AAAE,MAAA,IAAI,CAAC,SAAA,CAAU,WAAA,EAAY,CAAE,UAAU,MAAM,KAAA;AAAA,IAAO;AACpE,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,OAAO,UAAU,eAAA,EAAgB;AAAA,EACnC,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,EAAiC,SAAA,KAA6C;AAChG,IAAA,IAAI,OAAA,GAAU,SAAA,CAAU,OAAA,IAAW,OAAA,CAAQ,MAAA,EAAQ,OAAA;AACnD,IAAA,IAAI,mBAAmB,SAAA,CAAU,gBAAA;AACjC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,QAAiC,EAAC;AACxC,MAAA,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,MAAA,KAAU;AAAE,QAAA,IAAK,MAAA,CAAgC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,MAAG,CAAC,CAAA;AACjI,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,MAAA,EAAQ,EAAE,KAAA,EAAM,EAAG,OAAA,EAAS,EAAE,oBAAoB,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,aAAA,EAAe,KAAK,CAAA;AAC9I,MAAA,IAAI,UAAA,CAAW,mBAAmB,UAAA,CAAW,WAAA,EAAa,KAAK,CAAA,UAAA,KAAc,UAAA,CAAW,OAAO,CAAA,EAAG;AAChG,QAAA,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,GAAG,WAAW,eAAA,EAAgB;AACtD,QAAA,IAAI,kBAAkB,gBAAA,GAAmB,EAAE,GAAG,gBAAA,EAAkB,GAAG,WAAW,eAAA,EAAgB;AAAA,MAChG;AAAA,IACF;AACA,IAAA,MAAM,iBAAA,GAAoB,EAAE,GAAG,SAAA,EAAW,SAAS,gBAAA,EAAiB;AACpE,IAAA,MAAM,IAAA,GAAO,IAAI,MAAA,CAAO,EAAE,GAAG,OAAA,CAAQ,MAAA,EAAQ,UAAA,EAAY,SAAA,CAAU,UAAA,IAAc,OAAA,CAAQ,MAAA,EAAQ,UAAA,EAAY,SAAS,CAAA;AACtH,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,OAAA,CAAQ;AAAA,QAAE,OAAO,KAAA,CAAM,KAAA;AAAA,QAAO,QAAQ,KAAA,CAAM,MAAA;AAAA,QAC/C,GAAI,QAAQ,0BAAA,KAA+B,KAAA,GAAQ,EAAC,GAAI,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA;AAAW,OAAI,CAAA;AAC7F,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,iBAAA,EAAkB;AAAA,IAC9C,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AAAE,QAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAsC;AACpE,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AACA,EAAA,MAAM,UAAU,MAAqB;AACnC,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,kBAAA,IAAsB,CAAA;AACtB,IAAA,IAAI,QAAQ,SAAA,CAAU,KAAA,EAAO,OAAA,CAAQ,SAAA,CAAU,MAAM,UAAA,GAAa,kBAAA;AAClE,IAAA,MAAA,EAAO;AACP,IAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA;AAC3D,IAAA,QAAA,GAAA,CAAY,YAAY;AACtB,MAAA,IAAI,OAAA;AACJ,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,KAA2B;AAAE,QAAA,IAAI;AAAE,UAAA,MAAM,OAAA,EAAQ;AAAA,QAAG,SAAS,KAAA,EAAO;AAAE,UAAA,OAAA,KAAA,OAAA,GAAY,KAAA,CAAA;AAAA,QAAO;AAAA,MAAE,CAAA;AAElH,MAAA,MAAM,OAAA,CAAQ,MAAM,UAAA,EAAY,OAAA,EAAS,CAAA;AACzC,MAAA,MAAM,SAAA,CAAU,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAC9B,MAAA,MAAM,OAAA,CAAQ,MAAM,MAAA,EAAQ,OAAA,EAAS,CAAA;AACrC,MAAA,MAAM,aAAa,CAAC,OAAA,CAAQ,YAAY,KAAA,IAAS,SAAA,IAAa,QAAQ,KAAA,GAAQ,MAAA;AAC9E,MAAA,IAAI,YAAY,MAAM,OAAA,CAAQ,MAAM,UAAA,CAAW,SAAS,CAAA;AACxD,MAAA,IAAI,QAAQ,MAAM,OAAA,CAAQ,MAAM,YAAA,CAAa,MAAO,CAAC,CAAA;AACrD,MAAA,aAAA,EAAe,MAAA,EAAO;AACtB,MAAA,IAAI,OAAA,KAAY,QAAW,MAAM,OAAA;AAAA,IACnC,CAAA,GAAG;AACH,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM2B,QAAAA,GAAU,OAAO,KAAA,EAAiC,IAAA,EAAc,WAA0C,MAAA,KAAwB;AACtI,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,KAAA,EAAO,gBAAA,GAAmB,aAAA,CAAc,SAAS,CAAC,CAAA;AAClD,IAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,MAAM,OAAO,CAAA;AAC/C,IAAA,KAAA,CAAM,MAAM,OAAA,GAAU,KAAA;AACtB,IAAA,KAAA,CAAM,KAAA,CAAM,SAAS,oBAAA,GAAuB,IAAA;AAC5C,IAAA,MAAM,OAAA,CAAQ,mBAAmB,EAAE,GAAG,OAAO,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,CAAA;AAC9E,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,2CAAA,CAA4C,MAAM,KAAK,CAAA;AACvD,IAAA,wCAAA,CAAyC,MAAM,KAAK,CAAA;AAEpD,IAAA,IAAI,OAAA,CAAQ,gBAAA,EAAkB,IAAA,CAAK,SAAA,EAAU;AAC7C,IAAA,KAAA,CAAM,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAClC,IAAA,KAAA,CAAO,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC5B,IAAA,IAAI,UAAA,QAAkB,UAAA,CAAW,qBAAA,CAAsB,MAAM,KAAA,EAAO,EAAE,QAAQ,CAAA;AAC9E,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,EAAiC,SAAA,KAA6C;AAC1G,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,UAAA,CAAW,QAAA,CAAS,MAAM,KAAK,CAAA;AAC/B,IAAA,IAAI,SAAA,CAAU,gBAAA,EAAkB,UAAA,CAAW,uBAAA,CAAwB,UAAU,gBAAgB,CAAA;AAAA,SAAA,IACpF,QAAQ,SAAA,KAAc,KAAA,EAAO,MAAM,UAAA,CAAW,cAAc,CAAC,CAAA;AAAA,EACxE,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAiC,IAAA,EAAc,WAA0C,MAAA,KAAwB;AACpI,IAAA,MAAM,cAAA,CAAe,OAAO,SAAS,CAAA;AACrC,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,MAAM,QAAQ,gBAAA,GAAmB;AAAA,MAAE,GAAG,KAAA;AAAA,MAAO,MAAA,EAAQ,IAAA;AAAA,MAAM,SAAA;AAAA,MAAW,MAAA;AAAA,MACpE,OAAO,KAAA,CAAO,KAAA;AAAA,MAAO,QAAQ,KAAA,CAAO,MAAA;AAAA,MAAQ,kBAAkB,UAAA,IAAc,IAAA;AAAA,MAAM,SAAA,EAAW,MAAO,SAAA,IAAa;AAAA,KAAM,CAAA;AACzH,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA,EACd,CAAA;AACA,EAAA,IAAI;AACF,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpB,IAAA,MAAA,GAAS,MAAM,YAAA,CAAa,OAAA,CAAQ,WAAW,OAAA,CAAQ,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAC7E,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpB,IAAA,KAAA,GAAQ,QAAQ,QAAA,IAAY,MAAM,gCAAA,CAAiC,OAAA,CAAQ,WAAW,EAAE,GAAG,OAAA,CAAQ,KAAA,EAAO,GAAG,OAAA,CAAQ,SAAA,CAAU,OAAO,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AAC9J,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpB,IAAA,MAAMZ,cAAAA,EAAe;AACrB,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpB,IAAA,IAAI,QAAQ,QAAA,EAAU,WAAA,IAAe,CAAC,KAAA,CAAM,QAAA,CAAS,WAAW,aAAA,EAAe;AAC7E,MAAA,aAAA,GAAgB,MAAM,QAAA,CAAS,UAAA;AAC/B,MAAA,OAAA,CAAQ,SAAA,CAAU,YAAY,aAAa,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,CAAC,OAAA,CAAQ,QAAA,EAAU;AAC3C,MAAA,IAAI,EAAE,KAAA,CAAM,MAAA,YAAkBiB,oBAAoB,MAAM,IAAI,MAAM,uDAAuD,CAAA;AACzH,MAAA,UAAA,GAAa,IAAI,uBAAA,CAAwB;AAAA,QAAE,GAAG,OAAA,CAAQ,MAAA;AAAA,QACpD,OAAO,KAAA,CAAM,KAAA;AAAA,QAAO,QAAQ,KAAA,CAAM,MAAA;AAAA,QAAQ,UAAA,EAAY,MAAM,QAAA,CAAS,UAAA;AAAA,QACrE,GAAI,KAAA,CAAM,SAAA,GAAY,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAU,GAAI,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,QAClF,eAAA,EAAiB,OAAA,CAAQ,MAAA,EAAQ,eAAA,IAAmB;AAAA,OACrD,CAAA;AAAA,IACH;AACA,IAAA,4BAAA,CAA6B,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAC5D,IAAA,MAAA,CAAO,KAAA,CAAM,kBAAkB,IAAI,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,MAAA,EAAQ,OAAA,CAAQ,SAAS,CAAA;AAClD,IAAA,MAAA,GAAS,KAAA,CAAM,IAAA;AACf,IAAA,IAAI,mBAAmB,KAAA,CAAM,SAAA;AAC7B,IAAA,MAAM,YAAA,GAAe,MAAM,eAAA,CAAgB,OAAA,CAAQ,MAAM,CAAA;AACzD,IAAA,IAAI;AACF,MAAA,MAAML,SAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAA,CAAM,SAAA,EAAW,QAAQ,MAAM,CAAA;AAC7D,MAAA,MAAM,MAAM,MAAA,EAAQ,MAAA,EAAQ,KAAA,CAAM,SAAA,EAAW,QAAQ,MAAM,CAAA;AAC3D,MAAA,MAAA,CAAO,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,IAAK,IAAA;AACvD,MAAA,wBAAA,CAAyB,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,IAClD,CAAA,SAAE;AAAU,MAAA,YAAA,EAAc,OAAA,EAAQ;AAAA,IAAG;AACrC,IAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM;AAC9C,IAAA,MAAM,UAAA,GAAa,KAAA;AACnB,IAAA,MAAM,SAAA,GAAY,MAAM,SAAA,IAAa,IAAA;AACrC,IAAA,IAAA,GAAO;AAAA,MACL,MAAA;AAAA,MAAQ,OAAO,KAAA,CAAM,KAAA;AAAA,MAAO,QAAQ,KAAA,CAAM,MAAA;AAAA,MAAQ,kBAAkB,UAAA,IAAc,IAAA;AAAA,MAClF,IAAI,QAAA,GAAW;AAAE,QAAA,OAAO,SAAA,GAAY,SAAA,CAAU,WAAA,EAAY,CAAE,WAAW,UAAA,CAAW,QAAA;AAAA,MAAU,CAAA;AAAA,MAC5F,IAAI,OAAA,GAAU;AAAE,QAAA,OAAO,YAAY,SAAA,CAAU,WAAA,EAAY,CAAE,OAAA,GAAU,WAAW,OAAA,IAAW,IAAA;AAAA,MAAM,CAAA;AAAA,MACjG,SAAA;AAAA,MAAW,OAAO,MAAA,CAAO,KAAA;AAAA,MAAO,QAAQ,MAAA,CAAO,MAAA;AAAA,MAAQ,YAAY,MAAA,CAAO,UAAA;AAAA,MAAY,MAAM,MAAA,CAAO,IAAA;AAAA,MACnG,QAAA,EAAU,UAAA,IAAc,KAAA,GAAQ,KAAA,CAAM,QAAA,GAAW,IAAA;AAAA,MACjD,SAAA,EAAW,CAAC,OAAA,CAAQ,QAAA;AAAA,MAAU,WAAW,OAAA,CAAQ,SAAA;AAAA,MACjD,MAAA,GAAS;AAAE,QAAA,IAAI,QAAA,IAAY,UAAA,EAAY,UAAA,CAAW,MAAA,EAAO;AAAA,MAAG,CAAA;AAAA,MAC5D,YAAA,CAAa,SAAA,EAAW,MAAA,GAAS,OAAA,CAAQ,QAAQ,MAAA,EAAQ;AACvD,QAAA,IAAI,QAAA,IAAY,SAAS,MAAA,CAAO,OAAA,SAAgB,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AACxE,QAAA,IAAI,CAAC,UAAU,QAAA,EAAU,OAAO,QAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,0CAA0C,CAAC,CAAA;AACpG,QAAA,YAAA,EAAc,KAAA,EAAM;AACpB,QAAA,MAAM,SAAA,GAAY,IAAI,eAAA,EAAgB;AACtC,QAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,KAAA,EAAM;AACpC,QAAA,MAAA,EAAQ,iBAAiB,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AACvD,QAAA,IAAI,MAAA,EAAQ,SAAS,KAAA,EAAM;AAC3B,QAAA,YAAA,GAAe,SAAA;AACf,QAAA,MAAM,aAAa,EAAE3B,QAAAA;AACrB,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA,CAAE,IAAA,CAAK,YAAY;AACxD,UAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,UAAA,IAAI,UAAA,KAAeA,QAAAA,EAAS,MAAM,OAAA,EAAQ;AAC1C,UAAA,MAAM,OAAO,MAAM,YAAA,CAAa,SAAA,EAAW,MAAA,EAAQ,UAAU,MAAM,CAAA;AACnE,UAAA,IAAI,UAAA;AACJ,UAAA,IAAI,KAAA,GAAqD,KAAA,CAAA;AACzD,UAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI;AACF,YAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,YAAA,KAAA,GAAQ,MAAM,eAAA,CAAgB,SAAA,CAAU,MAAM,CAAA;AAC9C,YAAA,4BAAA,CAA6B,IAAA,CAAK,OAAO,SAAS,CAAA;AAClD,YAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI,CAAA;AACjC,YAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,EAAM,SAAS,CAAA;AAC3C,YAAA,UAAA,GAAa,QAAA,CAAS,IAAA;AACtB,YAAA,MAAM2B,SAAQ,IAAA,EAAM,UAAA,EAAY,QAAA,CAAS,SAAA,EAAW,UAAU,MAAM,CAAA;AACpE,YAAA,aAAA,GAAgB,IAAA;AAChB,YAAA,MAAM,MAAM,IAAA,EAAM,UAAA,EAAY,QAAA,CAAS,SAAA,EAAW,UAAU,MAAM,CAAA;AAClE,YAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,YAAA,QAAA,GAAW,MAAA;AACX,YAAA,MAAA,CAAQ,OAAA,EAAQ;AAChB,YAAA,MAAA,GAAS,UAAA;AACT,YAAA,MAAA,GAAS,IAAA;AACT,YAAA,gBAAA,GAAmB,QAAA,CAAS,SAAA;AAC5B,YAAA,wBAAA,CAAyB,MAAM,gBAAgB,CAAA;AAC/C,YAAA,IAAA,CAAM,MAAA,GAAS,MAAA;AACf,YAAA,IAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,YAAA,IAAA,CAAM,SAAS,IAAA,CAAK,MAAA;AACpB,YAAA,IAAA,CAAM,aAAa,IAAA,CAAK,UAAA;AACxB,YAAA,IAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAClB,YAAA,QAAA,CAAS,MAAM,OAAA,GAAU,KAAA;AACzB,YAAA,IAAA,CAAK,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,IAAK,IAAA;AACnD,YAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM;AAAA,UAChD,SAAS,KAAA,EAAO;AACd,YAAA,IAAI,WAAW,IAAA,EAAM;AACnB,cAAA,IAAI;AAAE,gBAAA,KAAA,EAAO,gBAAA,GAAmB,aAAA,CAAc,gBAAgB,CAAC,CAAA;AAAA,cAAG,CAAA,CAAA,MAAQ;AAAA,cAAsC;AAChH,cAAA,IAAI,aAAA,IAAiB,CAAC,QAAA,IAAY,UAAA,IAAc,MAAA,EAAQ;AACtD,gBAAA,IAAI;AAAE,kBAAA,MAAM,cAAA,CAAe,QAAQ,gBAAgB,CAAA;AAAA,gBAAG,CAAA,CAAA,MAAQ;AAAA,gBAAsC;AAAA,cACtG;AACA,cAAA,IAAI;AAAE,gBAAA,UAAA,EAAY,OAAA,EAAQ;AAAA,cAAG,CAAA,CAAA,MAAQ;AAAA,cAA0C;AAC/E,cAAA,KAAA,EAAO,OAAA,EAAQ;AACf,cAAA,KAAA,GAAQ,KAAA,CAAA;AACR,cAAA,IAAI;AAAE,gBAAA,MAAM,aAAa,IAAI,CAAA;AAAA,cAAG,CAAA,CAAA,MAAQ;AAAA,cAA0C;AAAA,YACpF;AACA,YAAA,MAAM,KAAA;AAAA,UACR,CAAA,SAAE;AAAU,YAAA,KAAA,EAAO,OAAA,EAAQ;AAAA,UAAG;AAC9B,UAAA,IAAI,QAAA,EAAU,MAAM,YAAA,CAAa,QAAQ,CAAA;AAAA,QAC3C,CAAC,CAAA;AACD,QAAA,SAAA,GAAY,OAAO,OAAA,CAAQ,MAAM,QAAQ,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAC,CAAA;AAC5E,QAAA,OAAO,SAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AAAE,MAAA,MAAM,OAAA,EAAQ;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAwC;AACvE,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AC5RA,IAAM,MAAA,GAAS;AAAA,EACb,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU,OAAA;AAAA,EACV,WAAA,EAAa,QAAA;AAAA,EACb,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,QAAA,EAAU,IAAA;AAAA,EACV,WAAA,EAAa,GAAA;AAAA,EACb,QAAA,EAAU,GAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,iBAAA,GAAoD;AAAA,EACxD,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,OAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,uBAAA,GAA0B,IAAA;AAChC,IAAM,wBAAA,GAA2B,IAAA;AACjC,IAAM,yBAAA,GAA4B,IAAA;AAClC,IAAM,wBAAA,GAA2B,IAAA;AACjC,IAAM,qBAAA,GAAwB,KAAA;AAC9B,IAAM,qBAAA,GAAwB,IAAA;AAC9B,IAAM,2BAAA,GAA8B,EAAA;AACpC,IAAM,uBAAA,GAA0B,IAAA;AAChC,IAAM,mBAAA,GAAsB,IAAA;AAC5B,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,kBAAA,GAAqB,IAAA;AAG3B,IAAM,gBAAA,GAAmB,IAAA;AAGzB,IAAM,WAAA,GAAc,GAAA;AAGpB,IAAM,YAAA,GAAe,GAAA;AAGrB,IAAM,wBAAA,GAA2B,2DAAA;AACjC,IAAM,gBAAA,GAAmB,+BAAA;AACzB,IAAM,mBAAA,GAAsB,kCAAA;AAE5B,IAAM,gBAAA,GAAmB,IAAA;AACzB,IAAM,qBAAA,GAAgF;AAAA,EACpF,KAAA,EAAO,IAAA;AAAA,EACP,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAWA,SAAS,4BAAA,GAAqD;AAC5D,EAAA,MAAM,CAAA,GAAI,WAAA;AAGV,EAAA,MAAM,SAAA,GAAY,IAAI,YAAA,CAAa;AAAA;AAAA,IAEjC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAExC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAE1C,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAE1C,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAExC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAExC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAC,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAE1C,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAC,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG,YAAA;AAAA;AAAA,IAE1C,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,CAAA;AAAA,IAAK,CAAA;AAAA,IAAG,CAAA;AAAA,IAAG,YAAA;AAAA,IAAgB,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,IAAG;AAAA,GACzC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,IAAUM,MAAA,CAAA,cAAA,EAAe;AAC1C,EAAA,QAAA,CAAS,aAAa,UAAA,EAAY,IAAUA,MAAA,CAAA,eAAA,CAAgB,SAAA,EAAW,CAAC,CAAC,CAAA;AACzE,EAAA,QAAA,CAAS,oBAAA,EAAqB;AAC9B,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,aAAa,IAAA,EAAoC;AACxD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAgB;AAClC,EAAA,IAAA,CAAK,QAAA,CAAS,CAAC,GAAA,KAAQ;AACrB,IAAA,IAAK,IAAmB,MAAA,EAAQ;AAC9B,MAAA,KAAA,CAAM,IAAI,GAAiB,CAAA;AAAA,IAC7B;AACA,IAAA,IAAK,IAA0B,aAAA,EAAe;AAC5C,MAAA,MAAM,OAAA,GAAU,GAAA;AAChB,MAAA,OAAA,CAAQ,QAAA,EAAU,OAAO,OAAA,CAAQ,CAAC,SAAS,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,IAC5D;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEA,SAASC,QAAO,GAAA,EAA2D;AACzE,EAAA,OAAO,CAAC,CAAC,GAAA,IAAQ,GAAA,CAAmB,MAAA;AACtC;AAEA,SAAS,iBAAiB,IAAA,EAA0B;AAClD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,IAAA,IAAIA,OAAAA,CAAO,KAAK,CAAA,EAAG;AACjB,MAAA,KAAA,IAAS,iBAAiB,KAAK,CAAA;AAAA,IACjC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,0BAA0B,IAAA,EAAyC;AAC1E,EAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAACA,OAAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAC9E,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEvC,EAAA,IAAI,UAAA,GAAa,cAAc,CAAC,CAAA;AAChC,EAAA,OAAO,wBAAA,CAAyB,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AACrD,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,MAAA,CAAOA,OAAM,CAAA;AACtD,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAE/B,IAAA,MAAM,SAAA,GAAY,aAAa,CAAC,CAAA;AAChC,IAAA,IAAI,CAAC,wBAAA,CAAyB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG;AACpD,IAAA,UAAA,GAAa,SAAA;AAAA,EACf;AAEA,EAAA,OAAO,wBAAA,CAAyB,IAAA,CAAK,UAAA,CAAW,IAAI,IAAI,UAAA,GAAa,IAAA;AACvE;AAEA,SAAS,uBAAuB,IAAA,EAAyC;AACvE,EAAA,MAAM,UAAA,GAAa,0BAA0B,IAAI,CAAA;AACjD,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,MAAA,CAAOA,OAAM,CAAA;AACtD,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,aAAa,CAAC,CAAA;AAIpD,EAAA,MAAM,YAAA,GAAe,aAClB,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,MAAM,gBAAA,CAAiB,KAAK,GAAE,CAAE,CAAA,CACzD,KAAK,CAAC,IAAA,EAAM,UAAU,KAAA,CAAM,IAAA,GAAO,KAAK,IAAI,CAAA;AAE/C,EAAA,MAAM,CAAC,OAAA,EAAS,aAAa,CAAA,GAAI,YAAA;AACjC,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,GAAO,GAAG,OAAO,IAAA;AACzC,EAAA,IAAI,CAAC,iBAAiB,aAAA,CAAc,IAAA,IAAQ,KAAK,OAAA,CAAQ,IAAA,IAAQ,aAAA,CAAc,IAAA,GAAO,CAAA,EAAG;AACvF,IAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,EACjB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,oBAAoB,IAAA,EAAoC;AAC/D,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,CAAOA,OAAM,CAAA;AACpC;AAEA,SAAS,uBAAA,CAAwB,YAAwB,SAAA,EAAgC;AACvF,EAAA,UAAA,CAAW,iBAAiB,UAAU,CAAA;AACtC,EAAA,SAAA,CAAU,iBAAiB,SAAS,CAAA;AACpC,EAAA,OAAO,UAAA,CAAW,iBAAA,CAAkB,SAAS,CAAA,IAAK,gBAAA,GAAmB,gBAAA;AACvE;AAEA,SAAS,sBAAsB,IAAA,EAA2B;AACxD,EAAA,IAAI,UAAiC,IAAA,CAAK,MAAA;AAC1C,EAAA,OAAOA,OAAAA,CAAO,OAAO,CAAA,EAAG;AACtB,IAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,OAAA,CAAQ,IAAI,GAAG,OAAO,IAAA;AACxD,IAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,EACpB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,8BAAA,CAA+B,YAAwB,YAAA,EAAqC;AACnG,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACtC,EAAA,MAAM,SAAA,GAAY,aAAa,CAAC,CAAA;AAEhC,EAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAClD,IAAA,IAAI,CAACA,OAAAA,CAAO,UAAA,CAAW,MAAM,GAAG,OAAO,IAAA;AAIvC,IAAA,OAAO,mBAAA,CAAoB,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,UAAA,KAAe,uBAAA,CAAwB,SAAA,EAAW,UAAU,CAAC,CAAA;AAAA,EAC3G;AAEA,EAAA,OACE,qBAAA,CAAsB,UAAU,CAAA,IAChC,gBAAA,CAAiB,KAAK,UAAA,CAAW,IAAI,CAAA,IACrC,mBAAA,CAAoB,KAAK,SAAA,CAAU,IAAI,CAAA,IACvC,uBAAA,CAAwB,YAAY,SAAS,CAAA;AAEjD;AAEA,SAAS,iBAAA,CACP,OAAA,EACA,OAAA,EACA,MAAA,EACA,UAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAO,WAAW,qBAAA,EAAsB;AAC9C,EAAA,IAAI,KAAK,KAAA,IAAS,CAAA,IAAK,IAAA,CAAK,MAAA,IAAU,GAAG,OAAO,KAAA;AAEhD,EAAA,MAAA,CAAO,KAAM,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,QAAS,CAAA,GAAI,CAAA;AACtD,EAAA,MAAA,CAAO,IAAI,EAAA,CAAG,OAAA,GAAU,KAAK,GAAA,IAAO,IAAA,CAAK,UAAU,CAAA,GAAI,CAAA;AACvD,EAAA,UAAA,CAAW,aAAA,CAAc,QAAQ,MAAM,CAAA;AACvC,EAAA,OAAO,IAAA;AACT;AAIA,IAAM,UAAA,GAAa,IAAUD,MAAA,CAAA,OAAA,EAAQ;AACrC,IAAM,SAAA,GAAY,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACpC,IAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACrC,IAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AACxC,IAAM,WAAA,GAAc,IAAUA,MAAA,CAAA,UAAA,EAAW;AACzC,IAAM,QAAA,GAAW,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACnC,IAAM,SAAA,GAAY,IAAUA,MAAA,CAAA,UAAA,EAAW;AACvC,IAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,KAAA,EAAM;AACnC,IAAM,MAAA,GAAS,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACjC,IAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,SAAA,EAAU;AACvC,IAAM,oBAAA,GAAuB,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAC/C,IAAM,YAAA,GAAe,IAAUA,MAAA,CAAA,OAAA,EAAQ;AACvC,IAAM,UAAA,GAAa,IAAUA,MAAA,CAAA,KAAA,EAAM;AACnC,IAAM,SAAA,GAAY,IAAUA,MAAA,CAAA,OAAA,EAAQ;AAE7B,SAAS,oCACd,IAAA,EACe;AACf,EAAA,OAAO,sBAAA,CAAuB,IAAI,CAAA,EAAG,IAAA,IAAQ,IAAA;AAC/C;AAIO,IAAM,kBAAN,MAAsB;AAAA,EA0C3B,YACE,KAAA,EACA,eAAA,EACA,cAAA,EACA,OAAA,GAAkC,EAAC,EACnC;AA9CF,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAsC,EAAC,CAAA;AAC/C,IAAA,aAAA,CAAA,IAAA,EAAQ,YAA2B,EAAC,CAAA;AACpC,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,sBAAiB,GAAA,EAAwB,CAAA;AAGjD;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,eAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,qBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,gBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,oBAAA,CAAA;AAGR;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAkC,IAAA,CAAA;AAG1C;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAiC,IAAA,CAAA;AACzC,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAA8B,IAAA,CAAA;AACtC,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAAoC,IAAA,CAAA;AAC5C,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAA,EAAkB,CAAA,CAAA;AAC1B,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,EAAmB,CAAA,CAAA;AAC3B,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAAA,EAAwB,CAAA,CAAA;AAQ9B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,eAAqBA,MAAA,CAAA,SAAA,CAAU,KAAA,CAAM,QAAQ,YAAA,IAAgB,CAAA,EAAG,GAAG,CAAC,CAAA;AACzE,IAAA,IAAA,CAAK,iBAAA,GAAoB,QAAQ,iBAAA,IAAqB,KAAA;AAEtD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAUA,MAAA,CAAA,KAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,MAAM,IAAA,GAAO,iBAAA;AAClB,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,GAAA;AACzB,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,KAAA;AAErB,IAAA,IAAA,CAAK,iBAAiB,4BAAA,EAA6B;AAEnD,IAAA,MAAM,YAAA,GAA2D;AAAA,MAC/D,WAAA,EAAa,IAAA;AAAA,MACb,SAAA,EAAW,KAAA;AAAA,MACX,UAAA,EAAY,KAAA;AAAA,MACZ,IAAA,EAAYA,MAAA,CAAA;AAAA,KACd;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpH,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAU,CAAA;AAC1H,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,WAAA,EAAa,OAAA,EAAS,OAAA,CAAQ,WAAA,EAAa,CAAA;AACjI,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAU,CAAA;AAC1H,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AACxH,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,CAAA;AACpH,IAAA,IAAA,CAAK,eAAe,eAAA,GAAkB,IAAA;AACtC,IAAA,IAAA,CAAK,iBAAiB,eAAA,GAAkB,IAAA;AACxC,IAAA,IAAA,CAAK,kBAAkB,eAAA,GAAkB,IAAA;AACzC,IAAA,IAAA,CAAK,iBAAiB,eAAA,GAAkB,IAAA;AACxC,IAAA,IAAA,CAAK,gBAAgB,eAAA,GAAkB,IAAA;AACvC,IAAA,IAAA,CAAK,cAAc,eAAA,GAAkB,IAAA;AAErC,IAAA,IAAA,CAAK,mBAAmB,IAAUA,MAAA,CAAA,aAAA,CAAc,CAAA,EAAG,KAAA,EAAO,IAAI,GAAG,CAAA;AACjE,IAAA,IAAA,CAAK,sBAAsB,IAAUA,MAAA,CAAA,aAAA,CAAc,CAAA,EAAG,mBAAA,EAAqB,GAAG,EAAE,CAAA;AAChF,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAUA,MAAA,CAAA,cAAA,CAAe,KAAA,EAAO,IAAI,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,uBAAA,EAAyB,CAAA;AAC1I,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,iBAAA,CAAkB,GAAA,EAAK,OAAA,EAAS,uBAAA,EAAyB,CAAA;AACtI,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,iBAAA,CAAkB,IAAA,EAAM,OAAA,EAAS,uBAAA,EAAyB,CAAA;AACxI,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,GAAG,CAAA;AAClF,IAAA,IAAA,CAAK,gBAAgB,UAAA,GAAa,KAAA;AAClC,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAUA,MAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,cAAc,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,CAAA;AAEzG,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAUA,MAAA,CAAA,KAAA,EAAM;AACtC,IAAA,IAAA,CAAK,eAAe,IAAA,GAAO,uBAAA;AAC3B,IAAA,IAAA,CAAK,eAAe,OAAA,GAAU,KAAA;AAC9B,IAAA,IAAA,CAAK,eAAe,WAAA,GAAc,GAAA;AAElC,IAAA,MAAM,YAAY,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,KAAK,iBAAiB,CAAA;AAC9E,IAAA,SAAA,CAAU,WAAA,GAAc,GAAA;AACxB,IAAA,SAAA,CAAU,SAAS,IAAA,GAAO,OAAA;AAC1B,IAAA,MAAM,WAAW,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,KAAK,eAAe,CAAA;AAC9E,IAAA,QAAA,CAAS,SAAS,IAAA,GAAO,OAAA;AAEzB,IAAA,MAAM,UAAU,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,KAAK,eAAe,CAAA;AAC1E,IAAA,OAAA,CAAQ,WAAA,GAAc,GAAA;AACtB,IAAA,OAAA,CAAQ,SAAS,IAAA,GAAO,KAAA;AACxB,IAAA,MAAM,SAAS,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,KAAK,eAAe,CAAA;AAC5E,IAAA,MAAA,CAAO,SAAS,IAAA,GAAO,KAAA;AAEvB,IAAA,MAAM,WAAW,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,KAAK,gBAAgB,CAAA;AAC5E,IAAA,QAAA,CAAS,WAAA,GAAc,GAAA;AACvB,IAAA,QAAA,CAAS,SAAS,IAAA,GAAO,MAAA;AACzB,IAAA,MAAM,UAAU,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,KAAK,eAAe,CAAA;AAC7E,IAAA,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACvC,IAAA,OAAA,CAAQ,SAAS,IAAA,GAAO,MAAA;AAExB,IAAA,MAAM,SAAS,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,kBAAA,EAAoB,KAAK,kBAAkB,CAAA;AAC9E,IAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AAErB,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,KAAA,EAAO,SAAA;AAAA,MACP,GAAA,EAAK,OAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACR;AACA,IAAA,IAAA,CAAK,kBAAA,GAAqB;AAAA,MACxB,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,MAAA,CAAO,OAAO,IAAA,CAAK,eAAe,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACpD,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,MAAA,IAAA,CAAK,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,OAAO,IAAA,CAAK,kBAAkB,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvD,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,MAAA,IAAA,CAAK,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,aAAA,GAAgB,KAAA;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,MAAM,CAAA;AAC9B,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,IAAA,EAA4B;AACvC,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,iBAAA,CAAkB,MAAM,IAAI,CAAA;AAGjC,IAAA,MAAM,QAAA,GAAW,qBAAqB,IAAI,CAAA;AAC1C,IAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,QAAQ,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AAEnE,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAG3B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AACrC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAK,IAAI,CAAA;AACnD,MAAA,MAAM,cAAc,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA;AAC1D,MAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CACvB,OAAO,CAAC,CAAA,KAAuBC,QAAO,CAAC,CAAA,IAAK,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAA,CAChE,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACpB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,IAAUA,OAAAA,CAAO,KAAK,MAAM,CAAA,IAAK,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,GAClF,IAAA,CAAK,OAAO,IAAA,GACZ,IAAA;AAGJ,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,UAAiC,IAAA,CAAK,MAAA;AAC1C,MAAA,OAAO,WAAWA,OAAAA,CAAO,OAAO,KAAK,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA,EAAG;AAC/D,QAAA,KAAA,EAAA;AACA,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,MACpB;AAEA,MAAA,OAAO;AAAA,QACL,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAA;AAAA,QACA,MAAA,EAAQ,UAAA;AAAA,QACR,QAAA,EAAU,YAAA;AAAA,QACV,QAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA,EAAY;AAAA,OACd;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,YAAA,GAAe,KAAK,QAAA,CAAS,MAAA;AAAA,QACjC,CAAC,CAAA,KAAuBA,OAAAA,CAAO,CAAC,CAAA,IAAK,aAAA,CAAc,IAAI,CAAC;AAAA,OAC1D;AAEA,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAG3B,QAAA,IAAI,8BAAA,CAA+B,IAAA,EAAM,YAAY,CAAA,EAAG;AACtD,UAAA;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,UAAA,IAAA,CAAK,cAAA,CAAe,MAAM,KAAK,CAAA;AAAA,QACjC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,cAAA,CAAe,MAAM,IAAI,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,cAAc,CAAA;AAGlC,IAAA,MAAM,WAAA,GAAc,IAAUD,MAAA,CAAA,cAAA,CAAe,IAAA,EAAM,GAAG,CAAC,CAAA;AACvD,IAAA,MAAM,WAAA,GAAc,IAAUA,MAAA,CAAA,iBAAA,CAAkB;AAAA,MAC9C,WAAA,EAAa,IAAA;AAAA,MACb,OAAA,EAAS,CAAA;AAAA,MACT,UAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,WAAA,CAAY,UAAA,GAAa,KAAA;AACzB,IAAA,MAAM,QAAA,GAAW,IAAUA,MAAA,CAAA,IAAA,CAAK,WAAA,EAAa,WAAW,CAAA;AACxD,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,IAAA,QAAA,CAAS,aAAA,GAAgB,KAAA;AACzB,IAAA,QAAA,CAAS,cAAA,GAAiB,CAAC,QAAA,EAAU,MAAA,EAAQ,WAAW,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,QAAA,CAAS,UAAU,CAAA;AAC/F,IAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,QAAQ,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACzB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEQ,cAAA,CAAe,YAAwB,SAAA,EAAoC;AACjF,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,WAAW,IAAI,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,gBAAA;AAEvD,IAAA,MAAM,IAAA,GAAO,IAAUA,MAAA,CAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AACzD,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,SAAA,EAAY,UAAA,CAAW,IAAI,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA,GAAK,OAAO,CAAA,CAAA;AACpF,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,GAAA;AAGnB,IAAA,IAAA,CAAK,QAAA,CAAS,WAAW,UAAA,CAAW,IAAA;AAEpC,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK;AAAA,MACvB,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAU,UAAA,CAAW,IAAA;AAAA,MACrB;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,EACrB;AAAA;AAAA,EAGQ,MAAA,CAAO,QAA8B,UAAA,EAAuC;AAClF,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAEvB,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,cAAA,EAAgB;AACrC,MAAA,GAAA,CAAI,UAAA,CAAW,iBAAiB,UAAU,CAAA;AAE1C,MAAA,IAAI,IAAI,SAAA,EAAW;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,SAAS,CAAA;AAAA,MAC1C,CAAA,MAAO;AAEL,QAAA,SAAA,CAAU,GAAA,CAAI,CAAA,EAAG,gBAAA,EAAkB,CAAC,CAAA;AACpC,QAAA,GAAA,CAAI,UAAA,CAAW,aAAa,SAAS,CAAA;AAAA,MACvC;AAGA,MAAA,UAAA,CAAW,UAAA,CAAW,WAAW,UAAU,CAAA;AAC3C,MAAA,MAAM,MAAA,GAAS,WAAW,MAAA,EAAO;AAEjC,MAAA,IAAI,SAAS,IAAA,EAAQ;AACnB,QAAA,GAAA,CAAI,KAAK,OAAA,GAAU,KAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,eAAA,GAAkB,kBAAA;AAG1C,MAAA,UAAA,CAAW,SAAA,EAAU;AACrB,MAAA,WAAA,CAAY,kBAAA,CAAmB,QAAQ,UAAU,CAAA;AAEjD,MAAA,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AACjC,MAAA,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AACpC,MAAA,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAA,CAAK,eAAA,CAAgB,QAAQ,UAAU,CAAA;AAAA,EACzC;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,YAAA;AAC1C,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,KAAA;AAC/C,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,GAAU,OAAA,CAAQ,QAAA,GAAW,KAAA;AACnD,IAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,GAAU,OAAA,CAAQ,WAAA,GAAc,KAAA;AACvD,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,GAAU,OAAA,CAAQ,QAAA,GAAW,KAAA;AACnD,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,GAAU,OAAA,CAAQ,OAAA,GAAU,KAAA;AACjD,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,EAC/C;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,MAAA,GAAS,CAAA,KAChD,IAAA,CAAK,gBAAA,GAAmB,CAAA,IACxB,IAAA,CAAK,eAAA,GAAkB,kBAAA,IACvB,KAAK,YAAA,IAAgB,IAAA,CAAA;AAAA,EAEzB;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,GAAA,GAAM,OAAO,WAAA,KAAgB,WAAA,GAAc,YAAY,GAAA,EAAI,GAAI,KAAK,GAAA,EAAI;AAC9E,IAAA,MAAM,UAAU,IAAA,CAAK,qBAAA,GAAwB,CAAA,GAAI,GAAA,GAAM,KAAK,qBAAA,GAAwB,EAAA;AACpF,IAAA,IAAA,CAAK,qBAAA,GAAwB,GAAA;AAE7B,IAAA,IAAI,KAAK,GAAA,CAAI,IAAA,CAAK,kBAAkB,IAAA,CAAK,gBAAgB,IAAI,kBAAA,EAAoB;AAC/E,MAAA,MAAM,OAAO,OAAA,GAAU,kBAAA;AACvB,MAAA,IAAI,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,eAAA,EAAiB;AAChD,QAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,GAAA,CAAI,KAAK,gBAAA,EAAkB,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,MACpF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,GAAA,CAAI,KAAK,gBAAA,EAAkB,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,MACpF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,gBAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,kBAAA,IAAsB,IAAA,CAAK,qBAAqB,CAAA,EAAG;AAC7E,MAAA,IAAA,CAAK,eAAA,GAAkB,CAAA;AAAA,IACzB;AAEA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA,EAEQ,yBAAA,GAA+C;AACrD,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,EAAc,OAAO,IAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,YAAY,CAAA,IAAK,IAAA;AAAA,EACnD;AAAA,EAEQ,mCAAmC,IAAA,EAA0B;AACnE,IAAA,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAEhC,IAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,MAAA,IAAI,CAACC,OAAAA,CAAO,KAAK,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,iBAAiB,SAAS,CAAA;AAChC,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,UAAA,CAAW,SAAS,CAAA;AACpD,MAAA,IAAI,gBAAgB,IAAA,EAAQ;AAC5B,MAAA,eAAA,GAAkB,oBAAoB,CAAA,GAAI,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,iBAAiB,YAAY,CAAA;AAAA,IACjG;AAEA,IAAA,IAAI,eAAA,IAAmB,IAAA,IAAUA,OAAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACpD,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAiB,SAAS,CAAA;AACtC,MAAA,eAAA,GAAkB,UAAA,CAAW,WAAW,SAAS,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,mBAAmB,IAAA,EAAQ;AAC7B,MAAA,eAAA,GAAkB,gBAAA;AAAA,IACpB;AAEA,IAAA,OAAaD,MAAA,CAAA,SAAA,CAAU,KAAA;AAAA,MACrB,eAAA,GAAkB,wBAAA;AAAA,MAClB,qBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,iCAAA,CACN,MAAA,EACA,MAAA,EACA,UAAA,EACe;AACf,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,UAAA,EAAY,OAAO,IAAA;AAEnC,IAAA,MAAM,IAAA,GAAO,WAAW,qBAAA,EAAsB;AAC9C,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,YAAA,IAAgB,IAAA,CAAK,MAAA;AACvD,IAAA,IAAI,cAAA,IAAkB,GAAG,OAAO,IAAA;AAEhC,IAAA,IAAK,OAAmC,mBAAA,EAAqB;AAC3D,MAAA,MAAM,iBAAA,GAAoB,MAAA;AAC1B,MAAA,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA,CAAE,YAAA,CAAa,kBAAkB,kBAAkB,CAAA;AACnF,MAAA,MAAM,KAAA,GAAQ,CAAC,oBAAA,CAAqB,CAAA;AACpC,MAAA,IAAI,CAAC,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,IAAS,iBAAA,CAAkB,MAAM,OAAO,IAAA;AAEvE,MAAA,MAAM,kBAAA,GAAqB,CAAA,GACvB,KAAA,GACA,IAAA,CAAK,GAAA,CAAUA,MAAA,CAAA,SAAA,CAAU,QAAA,CAAS,iBAAA,CAAkB,eAAA,EAAiB,CAAA,GAAI,CAAC,CAAA;AAC9E,MAAA,OAAO,sBAAsB,2BAAA,GAA8B,cAAA,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAK,OAAoC,oBAAA,EAAsB;AAC7D,MAAA,MAAM,kBAAA,GAAqB,MAAA;AAC3B,MAAA,MAAM,kBAAA,GAAA,CAAsB,kBAAA,CAAmB,GAAA,GAAM,kBAAA,CAAmB,UAAU,kBAAA,CAAmB,IAAA;AACrG,MAAA,OAAO,sBAAsB,2BAAA,GAA8B,cAAA,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,sBAAA,CACN,IAAA,EACA,MAAA,EACA,MAAA,EACA,UAAA,EACQ;AACR,IAAA,OAAO,IAAA,CAAK,kCAAkC,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAA,IACnE,IAAA,CAAK,mCAAmC,IAAI,CAAA;AAAA,EACnD;AAAA,EAEQ,yBAAA,GAAkC;AACxC,IAAA,MAAM,YAAA,GAAe,CAAC,CAAC,IAAA,CAAK,YAAA;AAC5B,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,GAAU,YAAA,IAAgB,IAAA,CAAK,KAAA,CAAM,OAAA;AAEzD,IAAA,MAAM,MAAA,GAA0D;AAAA,MAC9D,CAAC,OAAA,EAAS,IAAA,CAAK,gBAAgB,KAAA,EAAO,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAAA,MACnE,CAAC,KAAA,EAAO,IAAA,CAAK,gBAAgB,GAAA,EAAK,IAAA,CAAK,mBAAmB,GAAG,CAAA;AAAA,MAC7D,CAAC,MAAA,EAAQ,IAAA,CAAK,gBAAgB,IAAA,EAAM,IAAA,CAAK,mBAAmB,IAAI;AAAA,KAClE;AAEA,IAAA,MAAA,CAAO,QAAQ,CAAC,CAAC,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA,KAAM;AACxC,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,MAAM,QAAA,GAAW,KAAK,UAAA,KAAe,IAAA;AACrC,MAAA,MAAM,cAAc,IAAA,CAAK,UAAA,IAAc,IAAA,GACnC,uBAAA,GACA,WACE,yBAAA,GACA,wBAAA;AACN,MAAA,QAAA,CAAS,OAAA,GAAU,eAAe,WAAA,GAAc,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,WAAW,uBAAA,GAA0B,CAAA;AACnD,MAAA,IAAA,CAAK,KAAA,CAAM,UAAU,KAAK,CAAA;AAC1B,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,IAC/B,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,kBAAA,CAAmB,OAAA,GAAU,YAAA,GAAe,IAAA,GAAO,CAAA;AAAA,EAC1D;AAAA,EAEQ,eAAA,CAAgB,QAA8B,UAAA,EAAuC;AAC3F,IAAA,MAAM,YAAA,GAAe,KAAK,yBAAA,EAA0B;AACpD,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,CAAK,MAAM,OAAA,EAAS;AACxC,MAAA,IAAA,CAAK,eAAe,OAAA,GAAU,KAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,iBAAiB,QAAQ,CAAA;AACtC,IAAA,YAAA,CAAa,mBAAmB,SAAS,CAAA;AACzC,IAAA,MAAM,SAAS,IAAA,CAAK,sBAAA,CAAuB,YAAA,EAAc,QAAA,EAAU,QAAQ,UAAU,CAAA;AAErF,IAAA,IAAA,CAAK,eAAe,OAAA,GAAU,IAAA;AAC9B,IAAA,IAAA,CAAK,cAAA,CAAe,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC7C,IAAA,IAAA,CAAK,cAAA,CAAe,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAC/B,IAAA,IAAA,CAAK,cAAA,CAAe,iBAAA,CAAkB,IAAA,EAAM,IAAI,CAAA;AAAA,EAClD;AAAA,EAEQ,oBAAA,CACN,IAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,IAAA,MAAM,OAAA,GAAU,sBAAsB,IAAI,CAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACzB,IAAA,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAE5B,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAA,CAAK,QAAA,CAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA;AAC5B,MAAA,OAAA,CAAQ,QAAA,CAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAA,CAAK,QAAA,CAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA;AAC5B,MAAA,OAAA,CAAQ,QAAA,CAAS,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,CAAA;AAAA,IACjC;AAAA,EACF;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAC,OAAO,IAAA,CAAK,IAAA,CAAK,eAAe,CAAA,CAAuB,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxE,MAAA,IAAA,CAAK,oBAAA;AAAA,QACH,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,QACzB,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAAA,QAC5B;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,0BAAA,GAA8F;AACpG,IAAA,MAAM,IAAA,GAAO,KAAK,yBAAA,EAA0B;AAC5C,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,cAAc,OAAO,IAAA;AAExC,IAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAC9B,IAAA,IAAA,CAAK,mBAAmB,SAAS,CAAA;AAEjC,IAAA,OAAO;AAAA,MACL,UAAU,IAAA,CAAK,YAAA;AAAA,MACf,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,MACvB,UAAA,EAAY,UAAU,KAAA;AAAM,KAC9B;AAAA,EACF;AAAA,EAEQ,kBAAA,CAAmB,MAA8B,UAAA,EAA6C;AACpG,IAAA,MAAM,OAAA,GAAU,sBAAsB,IAAI,CAAA;AAC1C,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,OAAO,YAAA,CAAa,IAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,eAAA,CAAgB,UAAU,CAAA,CAAE,SAAA,EAAU;AAAA,IACzE;AACA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,OAAO,YAAA,CAAa,IAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,eAAA,CAAgB,UAAU,CAAA,CAAE,SAAA,EAAU;AAAA,IACzE;AACA,IAAA,OAAO,YAAA,CAAa,IAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,eAAA,CAAgB,UAAU,CAAA,CAAE,SAAA,EAAU;AAAA,EACzE;AAAA;AAAA,EAIA,WAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAU,CAAA,GAAI,CAAA;AACtC,IAAA,IAAA,CAAK,qBAAA,GAAwB,CAAA;AAC7B,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,EACjC;AAAA,EAEA,SAAA,GAAqB;AACnB,IAAA,OAAO,KAAK,gBAAA,GAAmB,CAAA;AAAA,EACjC;AAAA,EAEA,eAAe,QAAA,EAA+B;AAC5C,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AACvB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA,EAEA,YAAY,QAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AAEpB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAC1B,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEA,cAAc,IAAA,EAAmC;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,EACjC;AAAA;AAAA,EAGA,iBAAiB,QAAA,EAAqG;AACpH,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAClB,IAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAC9B,IAAA,IAAA,CAAK,mBAAmB,SAAS,CAAA;AACjC,IAAA,UAAA,CAAW,kBAAkB,SAAS,CAAA;AAEtC,IAAA,OAAO;AAAA,MACL,UAAU,CAAC,QAAA,CAAS,GAAG,QAAA,CAAS,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MAC7C,QAAA,EAAU;AAAA,QACFA,MAAA,CAAA,SAAA,CAAU,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA;AAAA,QAC/BA,MAAA,CAAA,SAAA,CAAU,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA;AAAA,QAC/BA,MAAA,CAAA,SAAA,CAAU,QAAA,CAAS,UAAA,CAAW,CAAC;AAAA;AACvC,KACF;AAAA,EACF;AAAA,EAEA,QAAA,CAAS,OAAA,EAAiB,OAAA,EAAiB,MAAA,EAAsB,UAAA,EAAwC;AACvG,IAAA,IAAI,CAAC,KAAK,KAAA,CAAM,OAAA,IAAW,KAAK,gBAAA,IAAoB,CAAA,IAAK,IAAA,CAAK,eAAA,IAAmB,IAAA,EAAM;AACrF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC5D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,UAAA,CAAW,gBAAA;AAAA,MACtB,KAAK,cAAA,CAAe,GAAA,CAAI,CAAC,aAAA,KAAkB,cAAc,IAAI,CAAA;AAAA,MAC7D;AAAA,KACF;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,OAAO,OAAO,IAAI,MAAA,CAAO,QAAA,CAAS,aAAa,QAAA,GAC3C,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,QAAA,GACpB,IAAA;AAAA,EACN;AAAA,EAEA,aAAA,CAAc,OAAA,EAAiB,OAAA,EAAiB,MAAA,EAAsB,UAAA,EAAsD;AAC1H,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,WAAW,CAAC,IAAA,CAAK,cAAc,OAAO,IAAA;AAC/D,IAAA,IAAA,CAAK,eAAA,CAAgB,QAAQ,UAAU,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,OAAO,IAAA;AACzC,IAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC5D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,WAAW,gBAAA,CAAiB,MAAA,CAAO,OAAO,IAAA,CAAK,kBAAkB,GAAG,KAAK,CAAA;AACtF,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,MAAM,IAAA,GAAgB,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,IAAA;AAC1C,IAAA,IAAI,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,KAAA,IAAS,SAAS,MAAA,EAAQ;AACzD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,0BAAA,EAA2B;AAC7C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAA;AAAA,MACA,OAAA,EAAS,sBAAsB,IAAI,CAAA;AAAA,MACnC,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,KAAA;AAAM,KACzB;AAAA,EACF;AAAA,EAEA,yBAAA,CACE,OAAA,EACA,OAAA,EACA,MAAA,EACA,YACA,IAAA,EAC6B;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAA,IAAW,CAAC,KAAK,YAAA,EAAc;AACtD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,eAAA,CAAgB,QAAQ,UAAU,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,OAAO,IAAA;AACzC,IAAA,MAAM,IAAA,GAAO,KAAK,0BAAA,EAA2B;AAC7C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC5D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,kBAAA,CAAmB,IAAA,EAAM,KAAK,UAAU,CAAA;AAC5D,IAAA,UAAA,CAAW,6BAAA,CAA8B,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,CAAI,cAAA,CAAe,YAAY,SAAS,CAAA;AAC/D,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAA;AAAA,MACA,OAAA,EAAS,sBAAsB,IAAI,CAAA;AAAA,MACnC,KAAA,EAAO,IAAI,KAAA;AAAM,KACnB;AAAA,EACF;AAAA,EAEQ,sBAAsB,QAAA,EAA2B;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,IAAgB,QAAA,KAAa,IAAA,CAAK,cAAc,OAAO,KAAA;AACjE,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,YAAY,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AACzC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,EAAM,OAAO,KAAA;AACnC,IAAA,OAAO,IAAA,CAAK,MAAA,KAAW,YAAA,IAAgB,YAAA,CAAa,MAAA,KAAW,IAAA;AAAA,EACjE;AAAA,EAEQ,mBAAA,CAAoB,UAAkB,QAAA,EAA4C;AACxF,IAAA,IAAI,QAAA,KAAa,KAAK,YAAA,EAAc;AAClC,MAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,IACd;AACA,IAAA,IAAI,QAAA,KAAa,KAAK,eAAA,EAAiB;AACrC,MAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,IACd;AACA,IAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,YAAA,EAAc;AAC/C,MAAA,OAAO,KAAK,qBAAA,CAAsB,QAAQ,CAAA,GAAI,IAAA,CAAK,kBAAkB,IAAA,CAAK,aAAA;AAAA,IAC5E;AACA,IAAA,OAAO,QAAA,GAAW,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,gBAAA;AAAA,EAC/C;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,cAAA,EAAgB;AACrC,MAAA,GAAA,CAAI,KAAK,QAAA,GAAW,IAAA,CAAK,oBAAoB,GAAA,CAAI,QAAA,EAAU,IAAI,QAAQ,CAAA;AAAA,IACzE;AAAA,EACF;AAAA,EAEQ,KAAA,GAAc;AAEpB,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,OAAA,EAAQ;AACnC,MAAC,IAAA,CAAK,YAAA,CAAa,QAAA,CAA4B,OAAA,EAAQ;AACvD,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAAA,IACtB;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,IAAA,CAAK,iBAAiB,EAAC;AACvB,IAAA,IAAA,CAAK,WAAW,EAAC;AACjB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,eAAe,OAAA,GAAU,KAAA;AAC9B,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,KAAA;AAAA,EACvB;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,EAAM;AAEX,IAAA,IAAA,CAAK,eAAe,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,eAAe,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAC9B,IAAA,IAAA,CAAK,kBAAkB,OAAA,EAAQ;AAC/B,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAC9B,IAAA,IAAA,CAAK,gBAAgB,OAAA,EAAQ;AAC7B,IAAA,IAAA,CAAK,cAAc,OAAA,EAAQ;AAC3B,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAC9B,IAAA,IAAA,CAAK,oBAAoB,OAAA,EAAQ;AACjC,IAAA,IAAA,CAAK,mBAAmB,OAAA,EAAQ;AAChC,IAAA,IAAA,CAAK,kBAAkB,OAAA,EAAQ;AAC/B,IAAA,IAAA,CAAK,gBAAgB,OAAA,EAAQ;AAC7B,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAC9B,IAAA,IAAA,CAAK,gBAAgB,OAAA,EAAQ;AAC7B,IAAA,IAAA,CAAK,mBAAmB,OAAA,EAAQ;AAAA,EAClC;AACF;AAIO,SAAS,qBAAqB,IAAA,EAAoC;AACvE,EAAA,MAAM,SAAA,GAAY,uBAAuB,IAAI,CAAA;AAC7C,EAAA,OAAO,YAAA,CAAa,aAAa,IAAI,CAAA;AACvC;AAMO,SAAS,cAAc,KAAA,EAA2C;AACvE,EAAA,MAAM,QAIF,EAAC;AAEL,EAAA,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAQ;AACtB,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,KAAW,GAAA,CAAI,QAAA,EAAU,yBAAyB,IAAA,IAAQ,GAAA,CAAI,QAAA,EAAU,uBAAA,KAA4B,IAAA,CAAA,EAAO;AACpH,MAAA,KAAA,CAAM,MAAA,GAAS,GAAA;AAAA,IACjB;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAS,GAAA,CAAmB,MAAA,EAAQ;AAC7C,MAAA,KAAA,CAAM,IAAA,GAAO,GAAA;AAAA,IACf;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAY,GAAA,CAA0B,aAAA,EAAe;AAC9D,MAAA,KAAA,CAAM,OAAA,GAAU,GAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,OAAA;AACnC,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAGpB,EAAA,IAAI,OAAA,GAAiC,MAAA;AACrC,EAAA,OAAO,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,WAAW,KAAA,EAAO;AAC5D,IAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,EACpB;AAEA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,mBAAA,CAAoB,OAAA,EAKjC,eAAA,GAAoC,EAAC,EAA8G;AACpJ,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAoB;AAC/C,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAsB;AAClD,EAAA,MAAM,cAAc,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,eAAe,CAAC,CAAA;AAEvD,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,EAAC;AACxC,EAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,IAAc,EAAA;AACrC,EAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,IAAc,EAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,EAAkB,WAAA,KAAwB;AAChE,IAAA,WAAA,CAAY,IAAI,QAAQ,CAAA;AACxB,IAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,QAAQ,CAAA,EAAG;AACjC,MAAA,cAAA,CAAe,GAAA,CAAI,UAAU,WAAW,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,QAAQ,KAAK,EAAC;AACnD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AACnC,MAAA,eAAA,CAAgB,IAAI,QAAA,EAAU,CAAC,GAAG,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF,CAAA;AAEA,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,GAAW,MAAA;AACrC,IAAA,cAAA,CAAe,UAAU,WAAW,CAAA;AAEpC,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,cAAA,CAAe,UAAU,WAAW,CAAA;AAAA,IACtC;AACA,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,UAAA,KAAe;AAClC,MAAA,IACE,cAAA,CAAe,UAAA,EAAY,QAAA,EAAU,OAAA,CAAQ,aAAa,CAAA,IACvD,cAAA,CAAe,UAAA,EAAY,QAAA,EAAU,OAAA,CAAQ,aAAa,CAAA,EAC7D;AACA,QAAA,cAAA,CAAe,YAAY,WAAW,CAAA;AAAA,MACxC;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,cAAA,EAAgB,eAAA,EAAgB;AACxD;ACxkCA,IAAM,iBAAA,GAAoB,IAAA;AAC1B,IAAM,kBAAA,GAAqB,IAAA;AAE3B,IAAM,YAAY,EAAE,CAAA,EAAG,GAAK,CAAA,EAAG,IAAA,EAAM,GAAG,IAAA,EAAK;AAC7C,IAAM,aAAa,EAAE,CAAA,EAAG,GAAK,CAAA,EAAG,IAAA,EAAM,GAAG,IAAA,EAAK;AAmB9C,SAASE,0BAAAA,CACP,MACA,SAAA,EACiE;AACjE,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,GAAwB,SAAS,CAAA;AACzD,EAAA,IAAI,UAAA,IAAc,MAAM,OAAO,IAAA;AAE/B,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,QAAA;AACrD,EAAA,OAAO,cAAA,GAAiB,UAAU,CAAA,IAAK,IAAA;AACzC;AAEA,SAAS,wBAAA,CACP,IAAA,EACA,cAAA,EACA,KAAA,EACQ;AACR,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,MAAM,WAAW,QAAA,CAAS,oBAAA;AAC1B,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AACtD,EAAA,IAAI,CAAC,eAAe,OAAO,CAAA;AAE3B,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,MAAM,EAAA,GAAK,eAAe,IAAA,CAAK,KAAK,KAAK,QAAA,GAAW,CAAA,GAAI,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA,CAAA;AAChF,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAC9B;AAEO,SAAS,yBAAA,CACd,IAAA,EACA,SAAA,EACA,SAAA,EACc;AACd,EAAA,MAAM,aAAa,SAAA,EAAW,MAAA,GAAS,IAAI,GAAA,CAAI,SAAS,CAAA,GAAI,IAAA;AAC5D,EAAA,MAAM,SAAuB,EAAC;AAE9B,EAAA,IAAA,CAAK,QAAA,CAAS,CAAC,GAAA,KAAQ;AACrB,IAAA,MAAM,IAAA,GAAO,GAAA;AACb,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAClB,IAAA,IAAI,cAAc,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAC9C,IAAA,IAAI,IAAA,CAAK,qBAAA,GAAwB,SAAS,CAAA,IAAK,IAAA,EAAM;AACrD,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,6BAAA,CACd,IAAA,EACA,SAAA,EACA,OAAA,GAAqC,EAAC,EACL;AACjC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,iBAAA;AACvC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,kBAAA;AACvC,EAAA,MAAM,cAAA,GAAiBA,0BAAAA,CAA0B,IAAA,EAAM,SAAS,CAAA;AAChE,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,mBAA6B,EAAC;AACpC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,cAAA,CAAe,KAAA,EAAO,SAAS,CAAA,EAAG;AAC5D,IAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,IAAA,EAAM,cAAA,EAAgB,KAAK,CAAA;AACtE,IAAA,IAAI,aAAa,SAAA,EAAW;AAC5B,IAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAC3B,IAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,iBAAiB,MAAA,GAAS,SAAA,GAAY,KAAK,IAAA,CAAK,gBAAA,CAAiB,MAAA,GAAS,SAAS,CAAA,GAAI,CAAA;AACtG,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiB,SAAS,MAAM,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,WAAW,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,IAAI,YAAA,CAAa,WAAW,CAAA;AAEhD,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,gBAAA,CAAiB,MAAA,EAAQ,KAAK,MAAA,EAAQ;AACxD,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,CAAC,CAAA,IAAK,CAAA;AACnC,IAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,IAAK,CAAA;AACzC,IAAA,WAAA,CAAY,MAAM,CAAA,GAAI,SAAA;AACtB,IAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,SAAS,CAAA;AAC/C,IAAA,MAAA,IAAU,CAAA;AAAA,EACZ;AAEA,EAAA,MAAM,UAAA,GAAa,YAAA,GAAe,CAAA,GAAI,CAAA,GAAI,YAAA,GAAe,CAAA;AACzD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,IAAA,WAAA,CAAY,CAAC,CAAA,IAAK,UAAA;AAAA,EACpB;AAEA,EAAA,OAAO,EAAE,SAAS,WAAA,EAAY;AAChC;AAEA,SAAS,eAAA,CAAgB,MAAA,EAAsB,MAAA,EAAgBC,UAAAA,EAAyB;AACtF,EAAA,MAAA,CAAO,MAAM,CAAA,GAAI,SAAA,CAAU,KAAK,UAAA,CAAW,CAAA,GAAI,UAAU,CAAA,IAAKA,UAAAA;AAC9D,EAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,SAAA,CAAU,KAAK,UAAA,CAAW,CAAA,GAAI,UAAU,CAAA,IAAKA,UAAAA;AAClE,EAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,SAAA,CAAU,KAAK,UAAA,CAAW,CAAA,GAAI,UAAU,CAAA,IAAKA,UAAAA;AACpE;AAEO,SAAS,kCACd,MAAA,EACA,SAAA,EACA,KAAA,EACA,OAAA,GAAqC,EAAC,EACD;AACrC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,iBAAA;AACvC,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,kBAAA;AACvC,EAAA,MAAM,gBAA+E,EAAC;AACtF,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,MAAM,QAAA,GAAW,GAAG,IAAA,CAAK,IAAI,IAAI,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AACpE,IAAA,IAAI,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,IAAK,IAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAA,GAAS,8BAA8B,IAAA,EAAM,SAAA,EAAW,EAAE,SAAA,EAAW,WAAW,CAAA;AAChF,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACnC,IAAA,UAAA,IAAc,OAAO,OAAA,CAAQ,MAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,UAAA,KAAe,GAAG,OAAO,IAAA;AAE7B,EAAA,MAAM,SAAA,GAAY,IAAI,YAAA,CAAa,UAAA,GAAa,CAAC,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,UAAA,GAAa,CAAC,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,IAAUC,MAAA,CAAA,OAAA,EAAQ;AACjC,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,EAAO,IAAK,aAAA,EAAe;AAC5C,IAAA,IAAA,CAAK,iBAAA,CAAkB,MAAM,KAAK,CAAA;AAClC,IAAA,MAAM,WAAA,GAAc,IAAA;AACpB,IAAA,IAAI,WAAA,CAAY,aAAA,IAAiB,WAAA,CAAY,QAAA,EAAU;AACrD,MAAA,WAAA,CAAY,SAAS,MAAA,EAAO;AAAA,IAC9B;AAEA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAO,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AACjD,MAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,GAAG,MAAM,CAAA;AACrD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,WAAW,CAAA;AAEpC,MAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AACxB,MAAA,SAAA,CAAU,MAAM,IAAI,MAAA,CAAO,CAAA;AAC3B,MAAA,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA;AAC/B,MAAA,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA;AAC/B,MAAA,eAAA,CAAgB,QAAQ,MAAA,EAAQ,MAAA,CAAO,WAAA,CAAY,CAAC,KAAK,CAAC,CAAA;AAC1D,MAAA,MAAA,IAAU,CAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAW,aAAA,CAAc;AAAA,GAC3B;AACF;AAOA,IAAM,qBAAA,uBAA4B,OAAA,EAA2C;AAE7E,SAAS,iBAAA,CAAkB,OAAoB,MAAA,EAAgC;AAC7E,EAAA,IAAI,OAAA,GAAU,qBAAA,CAAsB,GAAA,CAAI,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,WAAW,KAAA,CAAM,cAAA;AACvB,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,IAAA,MAAM,MAAA,GAAwC,YAAa,IAAA,EAAM;AAC/D,MAAA,QAAA,CAAS,KAAA,CAAM,OAAO,IAAI,CAAA;AAC1B,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAA,QAAA,KAAY,QAAA,EAAU,CAAA;AAAA,IAC1C,CAAA;AACA,IAAA,OAAA,GAAU,EAAE,SAAA,EAAW,QAAA,EAAU,MAAA,EAAO;AACxC,IAAA,KAAA,CAAM,cAAA,GAAiB,MAAA;AACvB,IAAA,qBAAA,CAAsB,GAAA,CAAI,OAAO,OAAO,CAAA;AAAA,EAC1C;AACA,EAAA,OAAA,CAAQ,SAAA,CAAU,IAAI,MAAM,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,OAAA;AAChB,EAAA,OAAO,MAAM;AACX,IAAA,OAAA,CAAQ,SAAA,CAAU,OAAO,MAAM,CAAA;AAC/B,IAAA,IAAI,OAAA,CAAQ,SAAA,CAAU,IAAA,GAAO,CAAA,EAAG;AAChC,IAAA,IAAI,MAAM,cAAA,KAAmB,OAAA,CAAQ,MAAA,EAAQ,KAAA,CAAM,iBAAiB,OAAA,CAAQ,QAAA;AAC5E,IAAA,IAAI,sBAAsB,GAAA,CAAI,KAAK,MAAM,OAAA,EAAS,qBAAA,CAAsB,OAAO,KAAK,CAAA;AAAA,EACtF,CAAA;AACF;AAGO,IAAM,qBAAN,MAAyB;AAAA,EAO9B,WAAA,CACmB,KAAA,EACA,OAAA,GAAqC,EAAC,EACvD;AAFiB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AARnB,IAAA,aAAA,CAAA,IAAA,EAAiB,OAAA,sBAAY,GAAA,EAAsC,CAAA;AACnE,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,EAA0E,IAAA,CAAA;AAClF,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,EAA6D,IAAA,CAAA;AACrE,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAA,EAAW,KAAA,CAAA;AACnB,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAoC,IAAA,CAAA;AAAA,EAKzC;AAAA,EAEH,IAAA,CAAK,WAAmB,SAAA,EAA4B;AAClD,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAI,SAAA,EAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAS,EAAE,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,OAAM,EAAE;AACzD,IAAA,IAAA,CAAK,YAAA,KAAL,KAAK,YAAA,GAAiB,iBAAA,CAAkB,KAAK,KAAA,EAAO,MAAM,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAA;AACvE,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,YAAA,IAAe;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,KAAA;AAAA,EACzC;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAClB,IAAA,IAAA,CAAK,OAAO,gBAAA,EAAiB;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,SAAS,OAAA,EAAQ;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,SAAS,OAAA,EAAQ;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEQ,YAAA,GAAyE;AAC/E,IAAA,MAAM,SAAS,IAAUA,MAAA,CAAA,MAAA,CAAO,IAAUA,MAAA,CAAA,cAAA,EAAe,EAAG,IAAUA,MAAA,CAAA,cAAA,CAAe;AAAA,MACnF,IAAA,EAAM,KAAA;AAAA,MACN,eAAA,EAAiB,IAAA;AAAA,MACjB,WAAA,EAAa,IAAA;AAAA,MACb,OAAA,EAAS,GAAA;AAAA,MACT,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc,IAAA;AAAA,MACd,UAAA,EAAY;AAAA,KACb,CAAC,CAAA;AACF,IAAA,MAAA,CAAO,IAAA,GAAO,0BAAA;AACd,IAAA,MAAA,CAAO,WAAA,GAAc,GAAA;AACrB,IAAA,MAAA,CAAO,aAAA,GAAgB,KAAA;AACvB,IAAA,MAAA,CAAO,OAAA,GAAU,KAAA;AACjB,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,MAAM,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,CAAK,MAAA,EAAQ;AACnC,IAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,IAAA,CAAK,MAAA;AACtC,IAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,IAAA,CAAK,KAAA,EAAO,WAAW,SAAS,CAAA;AACzE,IAAA,MAAM,OAAO,iCAAA,CAAkC,MAAA,EAAQ,WAAW,IAAA,CAAK,KAAA,EAAO,KAAK,OAAO,CAAA;AAC1F,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,KAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,YAAA,EAAa;AAChD,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,QAAA,EAAU,YAAY,IAAA,CAAK,SAAA,EAAW,KAAK,UAAU,CAAA;AACjF,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,QAAA,EAAU,SAAS,IAAA,CAAK,MAAA,EAAQ,KAAK,UAAU,CAAA;AAC3E,IAAA,MAAA,CAAO,SAAS,qBAAA,EAAsB;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO,IAAA,CAAK,UAAA,GAAa,MAAO,IAAA,GAAQ,KAAA;AACxD,IAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,EACnB;AAAA,EAEQ,eAAA,CACN,QAAA,EACA,IAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,YAAA,CAAa,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,KAAA,KAAU,UAAA,EAAY;AAChD,MAAA,QAAA,CAAS,aAAa,IAAA,EAAM,IAAUA,MAAA,CAAA,eAAA,CAAgB,MAAA,EAAQ,CAAC,CAAC,CAAA;AAChE,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,KAAA,CAAM,IAAI,MAAM,CAAA;AAC1B,IAAA,SAAA,CAAU,WAAA,GAAc,IAAA;AAAA,EAC1B;AACF;;;ACrQO,IAAM,oBAAA,GAAuB;AAAA,EAClC,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,EAAU,gBAAA;AAAA,EACV,WAAA,EAAa,mBAAA;AAAA,EACb,QAAA,EAAU,gBAAA;AAAA,EACV,IAAA,EAAM;AACR;AACO,IAAM,cAAA,GAAiB;AAS9B,IAAM,yBAAA,GAA4B,CAAC,UAAA,EAAY,QAAA,EAAU,WAAW,OAAO,CAAA;AA2B3E,IAAMC,4BAAAA,GAA8B,CAClC,QAAA,EACA,QAAA,EACA,IAAA,KACG;AACH,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,QAAQ,CAAA;AAC3C,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,QAAQ,CAAA,oCAAA,CAAsC,CAAA;AAE1F,EAAA,MAAM,SAAS,IAAI,YAAA,CAAa,IAAA,CAAK,KAAA,GAAQ,KAAK,QAAQ,CAAA;AAC1D,EAAA,IAAI,CAAC,SAAS,oBAAA,EAAsB;AAClC,IAAA,KAAA,IAAS,cAAc,CAAA,EAAG,WAAA,GAAc,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA,EAAG;AACpE,MAAA,KAAA,IAAS,YAAY,CAAA,EAAG,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,aAAa,CAAA,EAAG;AACjE,QAAA,MAAA,CAAO,WAAA,GAAc,KAAK,QAAA,GAAW,SAAS,IAAI,IAAA,CAAK,YAAA,CAAa,aAAa,SAAS,CAAA;AAAA,MAC5F;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,IAAIC,eAAAA,CAAgB,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAC3D,EAAA,SAAA,CAAU,IAAA,GAAO,IAAA;AACjB,EAAA,OAAO,SAAA;AACT,CAAA;AAEA,IAAM,uBAAuB,CAC3B,QAAA,EACA,QAAA,EACA,IAAA,EACA,MACA,gBAAA,KACG;AACH,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,QAAQ,CAAA;AAC3C,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,QAAA,EAAU;AACvD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,QAAQ,CAAA,kBAAA,CAAoB,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,SAAS,IAAI,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAChD,EAAA,MAAM,wBAAwB,QAAA,CAAS,oBAAA;AACvC,EAAA,IAAI,qBAAqB,qBAAA,EAAuB;AAC9C,IAAA,KAAA,IAAS,cAAc,CAAA,EAAG,WAAA,GAAc,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA,EAAG;AACpE,MAAA,KAAA,IAAS,YAAY,CAAA,EAAG,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,aAAa,CAAA,EAAG;AACjE,QAAA,MAAM,MAAA,GAAS,WAAA,GAAc,IAAA,CAAK,QAAA,GAAW,SAAA;AAC7C,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,SAAS,CAAA;AAC1D,QAAA,MAAA,CAAO,MAAM,IAAI,qBAAA,GACb,MAAA,CAAO,MAAM,CAAA,GAAI,SAAA,GACjB,MAAA,CAAO,MAAM,CAAA,GAAI,SAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,IAAIA,eAAAA,CAAgB,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAC3D,EAAA,SAAA,CAAU,IAAA,GAAO,IAAA;AACjB,EAAA,OAAO,SAAA;AACT,CAAA;AAsBA,IAAM,SAAA,GAAY,CAAC,GAAA,MAAmB;AAAA,EACpC,QAAA,EAAU,EAAE,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,SAAS,CAAA,EAAE;AAAA,EACpE,UAAU,EAAE,CAAA,EAAG,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,GAAA,CAAI,UAAA,CAAW,CAAA,EAAG,GAAG,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAE;AAAA,EAC/F,KAAA,EAAO,EAAE,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA;AACxD,CAAA,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,GAAA,EAAe,SAAA,KAAkD;AACjF,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,OAAA,EAAS,EAAE,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,SAAS,CAAA,EAAE;AAAA,MACnE,QAAA,EAAU,GAAA,CAAI,UAAA,CAAW,KAAA,EAAM;AAAA,MAC/B,WAAW,EAAE,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,GAAG,GAAA,CAAI,QAAA,CAAS,GAAG,KAAA,EAAO,GAAA,CAAI,SAAS,KAAA;AAAM,KAClG;AAAA,EACF;AACA,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,SAAA,CAAU,SAAA;AACzC,EAAA,MAAM,QAAA,GAAW,IAAI9B,UAAAA,CAAW,QAAA,CAAS,CAAA,EAAG,SAAS,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,UAAU,aAAA,IAAiB,IAAI+B,OAAM,CAAE,iBAAA,CAAkB,QAAA,EAAU,SAAA,CAAU,aAAa,CAAA;AACxG,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,OAAA,EAAS,EAAE,GAAG,QAAA,EAAS;AAAA,IACvB,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,KAAA,EAAO,UAAU,aAAA;AAAc,GAClF;AACF,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,GAAA,KAAkB;AACnC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,SAAS,GAAA,CAAI,MAAA;AACjB,EAAA,OAAO,MAAA,EAAQ;AACb,IAAA,IAAK,MAAA,CAAe,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,QAAQ,KAAA,IAAS,CAAA;AAC/D,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,EAClB;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,IAAA,KAAe;AACnC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,IAClB,IAAA,CAAK,QAAA,CAA2E,qBAAA;AACtF,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,MAAA,CAAO,QAAQ,UAAU,CAAA,CAC7B,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAO,EAAE,MAAM,KAAA,EAAM,CAAE,EACxC,IAAA,CAAK,CAAC,MAAM,KAAA,KAAU,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAK,CAAA;AAAA,EACnD;AACA,EAAA,OAAA,CAAQ,IAAA,CAAK,qBAAA,IAAyB,EAAC,EAAG,IAAI,CAAC,CAAA,EAAG,KAAA,MAAW,EAAE,IAAA,EAAM,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI,OAAM,CAAE,CAAA;AACjG,CAAA;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAAA,CAAa,KAAA,EAAiB,OAAA,GAK1B,EAAC,EAAyB;AAC5B,IAAA,MAAM,aAAa,OAAA,CAAQ,aAAA,GAAgB,uBAAuB,KAAA,EAAO,OAAA,CAAQ,aAAa,CAAA,GAAI,MAAA;AAClG,IAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAAqB;AAC1C,MAAA,MAAM,SAAA,GAAY,UAAA,EAAY,GAAA,CAAI,MAAM,CAAA;AACxC,MAAA,OAAO,SAAA,GAAY;AAAA,QACjB,QAAA,EAAU,EAAE,GAAG,SAAA,CAAU,UAAU,QAAA,EAAS;AAAA,QAC5C,QAAA,EAAU,EAAE,GAAG,SAAA,CAAU,UAAU,QAAA,EAAS;AAAA,QAC5C,KAAA,EAAO,EAAE,GAAG,SAAA,CAAU,UAAU,KAAA;AAAM,OACxC,GAAI,UAAU,MAAM,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAM,UAAsB,EAAC;AAC7B,IAAA,MAAM,YAAoB,EAAC;AAC3B,IAAA,MAAM,cAA0B,EAAC;AACjC,IAAA,KAAA,CAAM,QAAA,CAAS,CAAC,GAAA,KAAa;AAC3B,MAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAChB,MAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAClC,MAAA,IAAI,IAAI,MAAA,IAAU,GAAA,CAAI,SAAS,MAAA,EAAQ,WAAA,CAAY,KAAK,GAAG,CAAA;AAAA,IAC7D,CAAC,CAAA;AACD,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,IAAU,EAAC;AACvC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,iBAAK,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,SAAA,CAAU,OAAO,CAAC,IAAA,KAAS,aAAa,IAAI,CAAA,CAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AACtH,IAAA,MAAM,aAAa,IAAI,GAAA,CAAI,UAAU,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,KAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AACjG,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,CAAC,KAAA,GAAQ,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA;AAC9E,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,CAAC,KAAA,GAAQ,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA;AAChF,IAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU,CAAC,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA;AAClF,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM,CAAC,IAAA,EAAM,EAAE,CAAC,CAAC,CAAA;AAC5E,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,KAAK,YAAA,EAAc,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM,CAAC,IAAA,EAAM,EAAE,CAAC,CAAC,CAAA;AAC5E,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,KAAA,CAAM,KAAK,cAAA,EAAgB,CAAC,CAAC,EAAA,EAAI,MAAM,CAAA,KAAM,CAAC,MAAA,EAAQ,EAAE,CAAC,CAAC,CAAA;AACpF,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAA2C;AACrE,IAAA,MAAM,eAAmE,EAAC;AAC1E,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAoB;AAC/C,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,MAAgB,EAAC;AACvB,MAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,IAAI,CAAA,EAAG;AACtC,QAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAChB,QAAA,aAAA,CAAc,IAAI,OAAA,EAAS,EAAE,MAAM,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AACvD,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,EAAA,EAAI,OAAA;AAAA,UACJ,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,UACxB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,WAAW,KAAA,CAAM,KAAA;AAAA,UACjB,YAAA,EAAc,IAAA,CAAK,qBAAA,GAAwB,KAAA,CAAM,KAAK,CAAA,IAAK;AAAA,SAC5D,CAAA;AACD,QAAA,OAAA,IAAW,CAAA;AAAA,MACb;AACA,MAAA,cAAA,CAAe,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,QAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAI,SAAS,SAAA,EAAW;AACtB,MAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,SAAmC,CAAA,EAAG;AACrF,QAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,IAAc,EAAA;AACrC,QAAA,MAAM,MAAA,GAAS,QAAQ,UAAA,IAAc,EAAA;AACrC,QAAA,MAAM,OAAO,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,MAAM,IAAI,EAAA,GAAK,MAAM,CAAA,EAAG,IAAI,GAAG,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,GAAI,KAAK,MAAM,CAAA,CAAA;AAClG,QAAA,MAAM,SAAS,KAAA,CAAM,eAAA,CAAgB,IAAI,CAAA,IAAK,KAAA,CAAM,gBAAgB,IAAI,CAAA;AACxE,QAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,IAAK,QAAA,CAAS,MAAA,EAAQ,UAAA,EAAY,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,MACzF;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,IAAI,KAAA,CAAM,IAAA;AAAA,QACV,IAAA,EAAM,MAAM,IAAA,IAAQ,MAAA;AAAA,QACpB,MAAA,EAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAC/B,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,UACpB,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,cAAA,EAAgB,cAAA,CAAe,GAAA,CAAI,IAAI,KAAK,EAAC;AAAA,UAC7C,SAAS,IAAA,CAAK;AAAA,SAChB,CAAE,CAAA;AAAA,QACF,YAAA;AAAA,QACA,KAAA,EAAO,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AAC/B,UAAA,MAAM,KAAA,GAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA,EAAG,aAAA,IAAiB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,CAAA;AACjG,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,KAAY,IAAA,CAAK,MAAA,CAAe,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,MAAA,CAAA,GAC/E,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,GACpB,IAAA;AACJ,UAAA,OAAO;AAAA,YACL,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,YACpB,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,UAAA,EAAY,MAAA;AAAA,YACZ,aAAA,EAAe,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,GAAG,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,CAAA,EAAE;AAAA,YACpD,KAAA,EAAO,UAAU,IAAI,CAAA;AAAA,YACrB,aAAA,EAAe,cAAc,IAAI;AAAA,WACnC;AAAA,QACF,CAAC,CAAA;AAAA,QACD,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,UAChC,EAAA,EAAI,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAAA,UACxB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,QAAQ,CAAC,EAAG,MAAA,CAAe,MAAA,IAAU,OAAO,IAAA,KAAS,MAAA,CAAA;AAAA,UACrD,QAAA,EAAU,CAAC,CAAE,MAAA,CAAe,QAAA;AAAA,UAC5B,aAAA,EAAe,cAAc,MAAM;AAAA,SACrC,CAAE;AAAA,OACJ;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAiB,KAAA,KAAyB;AACjE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASxB,eAAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AACxD,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,KAAe,OAAA,IAAW,MAAA,CAAO,cAChD,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,GACzB,MAAA,CAAO,QAAA;AACX,IAAA,MAAM,MAAA,GAAS,GAAA,GACX,KAAA,CAAM,mBAAA,CAAoB,MAAA,EAAQ,GAAG,CAAA,IAAKA,eAAAA,CAAgB,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA,GAC7E,KAAA;AACJ,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAuCO,SAAS,6BAAA,CACd,MACA,UAAA,EACe;AACf,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,IAAU,EAAC,EAAG;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,EAAQ,IAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,KAAA,CAAM,MAAA,EAAQ,UAAU,CAAA;AAC5D,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAC1C,IAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA;AAC5C,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,CAAC,OAAO,MAAA,EAAQ;AAGrC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,aAAA,KAAkB,MAAA,GAASyB,mBAAAA,GAAsB,MAAA;AAE7E,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,MAAM,OAAA,GAAU,WAAW,aAAA,CAAc,GAAA,CAAI,OAAO,KAAA,CAAM,MAAA,CAAO,aAAa,CAAC,CAAA;AAC/E,MAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AACpB,MAAA,IAAI,MAAM,YAAA,EAAc;AACtB,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,OAAA,CAAQ,KAAK,qBAAA,GAAwB,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,MACrE;AACA,MAAA,MAAA,CAAO,KAAK,IAAI,mBAAA,CAAoB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC5E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,eAAA,IAAmB,IAAA,KAAS,iBAAA,EAAmB;AAC1D,MAAA,MAAM,SAAS,IAAA,KAAS,eAAA,GACpB,WAAW,YAAA,CAAa,GAAA,CAAI,OAAO,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,GACvD,WAAW,cAAA,CAAe,GAAA,CAAI,OAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AAC/D,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,QAAA,IAAY,UAAA;AAC1C,MAAA,IAAI,QAAA,KAAa,UAAA,IAAc,QAAA,KAAa,YAAA,EAAc;AACxD,QAAA,IAAI,MAAM,YAAA,EAAc,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAC3D,QAAA,MAAA,CAAO,KAAK,IAAI,uBAAA,CAAwB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,MAClF,WAAW,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,QAAA,IAAY,aAAa,QAAA,EAAU;AAClF,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,EAAE,EAAE,WAAA,EAAY;AAC5C,QAAA,IAAI,MAAM,YAAA,EAAc,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AACxD,QAAA,MAAA,CAAO,KAAK,IAAI,mBAAA,CAAoB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,aAAa,UAAA,EAAY;AAClC,QAAA,IAAI,MAAM,YAAA,EAAc,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACzD,QAAA,MAAA,CAAO,KAAK,IAAI,mBAAA,CAAoB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,QAAA,IAAI,MAAM,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACtD,QAAA,MAAA,CAAO,KAAK,IAAI,mBAAA,CAAoB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,MAC9E;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,MAAA,MAAM,IAAA,GAAO,WAAW,YAAA,CAAa,GAAA,CAAI,OAAO,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AACpE,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,MAAM,YAAA,EAAc,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,KAAK,OAAO,CAAA;AACvD,MAAA,MAAA,CAAO,KAAK,IAAI,mBAAA,CAAoB,WAAW,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,IAC9E;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA,GACjD,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,GAC3B,EAAA;AACJ,EAAA,OAAO,IAAIC,aAAAA,CAAc,IAAA,CAAK,IAAA,IAAQ,MAAA,EAAQ,UAAU,MAAM,CAAA;AAChE;AAEO,SAAS,uBAAA,CACd,KAAA,EACA,KAAA,EACA,UAAA,EACA;AACA,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM,CAAC,IAAA,EAAM,EAAE,CAAC,CAAC,CAAA;AACvF,EAAA,MAAM,UAAU,IAAI,GAAA,CAAoB,KAAA,CAAM,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM,CAAC,IAAA,EAAM,EAAE,CAAC,CAAC,CAAA;AACvG,EAAA,MAAM,YAAY,IAAI,GAAA,CAAoB,KAAA,CAAM,IAAA,CAAK,WAAW,cAAA,EAAgB,CAAC,CAAC,EAAA,EAAI,MAAM,CAAA,KAAM,CAAC,MAAA,EAAQ,EAAE,CAAC,CAAC,CAAA;AAC/G,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAoC;AACrD,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACtC,MAAA,IAAI,UAAU,OAAO,QAAA;AACrB,MAAA,MAAM,EAAA,GAAK,aAAa,IAAA,GAAO,CAAA;AAC/B,MAAA,YAAA,CAAa,GAAA,CAAI,MAAM,EAAE,CAAA;AACzB,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AACA,IAAA,mBAAA,CAAoB,IAAI,CAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AACzD,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,MAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,KAAA;AAC3B,MAAA,IAAI,MAAA,GAAuC,IAAA;AAC3C,MAAA,MAAM,WAAW,MAAA,CAAO,YAAA;AACxB,MAAA,IAAA,CAAK,QAAA,KAAa,uBAAA,IAA2B,QAAA,KAAa,SAAA,KAAe,OAAe,MAAA,EAAQ;AAC9F,QAAA,MAAM,IAAA,GAAO,MAAA;AACb,QAAA,MAAM,YAAY,MAAA,CAAO,aAAA;AACzB,QAAA,MAAM,aAAa,OAAO,SAAA,KAAc,WACpC,SAAA,GACA,MAAA,CAAO,SAAS,MAAA,CAAO,SAAS,CAAC,CAAA,GAC/B,OAAO,SAAS,CAAA,GAChB,KAAK,qBAAA,GAAwB,MAAA,CAAO,SAAS,CAAC,CAAA;AACpD,QAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,aAAa,EAAE,IAAA,CAAK,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,CAAM,SAAS,IAAA,IAAQ,KAAA,CAAM,UAAU,UAAU,CAAA;AAC1H,QAAA,IAAI,OAAA,EAAS,MAAA,GAAS,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG,aAAA,EAAe,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,MACpG,CAAA,MAAA,IAAW,QAAA,KAAa,SAAA,IAAc,MAAA,CAAe,MAAA,EAAQ;AAC3D,QAAA,MAAA,GAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,QAAQ,OAAA,CAAQ,GAAA,CAAI,MAAc,CAAA,EAAE;AAAA,MACzE,CAAA,MAAO;AACL,QAAA,MAAM,iBAAA,GAAoB,QAAA,KAAa,UAAA,IAAc,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,aAAa,CAAC,CAAA,GACtG,CAAA,KAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,GAClD,QAAA,KAAa,YAAA,GACX,UAAA,GACA,QAAA,KAAa,UAAA,GACX,UAAA,GACA,QAAA,KAAa,UACX,OAAA,GACA,IAAA;AACV,QAAA,IAAI,iBAAA,EAAmB;AACrB,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACjC,UAAA,MAAA,GAAS,SACL,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,UAAU,iBAAA,EAAkB,GAC7D,EAAE,IAAA,EAAM,mBAAmB,QAAA,EAAU,SAAA,CAAU,IAAI,MAAM,CAAA,EAAG,UAAU,iBAAA,EAAkB;AAAA,QAC9F;AAAA,MACF;AACA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,IAAA,GAAO,OAAO,IAAA,KAAS,aAAA,GACzB,SACA,MAAA,CAAO,IAAA,KAAS,kBACd,MAAA,GACA,OAAA;AAIN,MAAA,MAAM,KAAA,GAAQ,CAAC,CAAE,KAAA,CAEd,iBAAA,CAAkB,yCAAA;AACrB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,YAAA,EAAa,IAAK,QAAQ,CAAA,GAAI,CAAA,CAAA;AACjD,MAAA,IAAI,CAAC,MAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG;AACpD,QAAA,MAAM,IAAI,MAAM,CAAA,gBAAA,EAAmB,IAAA,CAAK,UAAU,KAAA,CAAM,IAAI,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAAA,MAC9F;AACA,MAAA,MAAM,MAAA,GAAS,KAAA,GACX,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ,KAAA,CAAM,KAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAA,IAAK,IAAA,EAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAA,IAAK,IAAI,CAAC,CAAC,CAAA,GACtH,KAAA,CAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAC3B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAI,KAAA,GAAQ,CAAA;AAAA,QACZ,SAAA,EAAW,UAAU,IAAI,CAAA;AAAA,QACzB,MAAA;AAAA,QACA,WAAW,IAAA,KAAS,CAAA,GAAI,MAAA,GAAS,IAAA,KAAS,IAAI,MAAA,GAAS,QAAA;AAAA,QACvD,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,QAC7B,MAAA;AAAA,QACA,aAAA,EAAe,KAAA,CAAM,gBAAA,EAAiB,KAAMD,sBAAsB,MAAA,GAAS,QAAA;AAAA,QAC3E,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,iBAAiB,IAAA,CAAK,QAAA;AAAA,MACtB,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,YAAA,EAAc,CAAC,CAAC,IAAA,EAAM,EAAE,CAAA,MAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,MAAK,CAAE,CAAA;AAAA,MAC7E;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAWA,IAAM,SAAA,GAAY,CAAC,KAAA,KACjB,KAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAK,EAAC;AAE/C,IAAM,oBAAN,MAAwB;AAAA,EAAxB,WAAA,GAAA;AACL,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,sBAAa,GAAA,EAAkB,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,sBAAa,GAAA,EAA2C,CAAA;AAChE,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,sBAAY,GAAA,EAAsB,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,sBAAc,GAAA,EAAsB,CAAA;AAC5C,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAAuB,GAAA,EAAkD,CAAA;AAAA,EAAA;AAAA,EAEjF,YAAY,UAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,GAAA,CAAI,UAAA,CAAW,YAAY,CAAA;AAC7C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,GAAA,CAAI,UAAA,CAAW,aAAa,CAAA;AAC9C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,GAAA,CAAI,UAAA,CAAW,YAAY,CAAA;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,GAAA,CAAI,UAAA,CAAW,cAAc,CAAA;AAAA,EAClD;AAAA,EAEA,0BAAA,CAA2B,MAAA,EAA2B,MAAA,GAAS,CAAA,EAAG;AAChE,IAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,UAAU,MAAA,CAAO,MAAA,EAAQ,UAAU,MAAA,EAAQ;AACvE,MAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,IAAI,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAClD,MAAA,IAAI,OAAA,EAAS,KAAK,qBAAA,EAAuB;AACvC,QAAA,OAAA,CAAQ,IAAA,CAAK,sBAAsB,OAAA,CAAQ,KAAK,IAAI,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAA,CAA0B,MAAA,EAA2B,MAAA,GAAS,CAAA,EAAG;AAC/D,IAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,UAAU,MAAA,CAAO,MAAA,EAAQ,UAAU,MAAA,EAAQ;AACvE,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAC1C,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AACpC,MAAA,IAAI,QAAQ,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAC3F,MAAA,IAAI,KAAA,GAAQ,GAAG,IAAA,CAAK,UAAA,CAAW,IAAI,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,OAAO,MAAA,GAAS,CAAC,CAAC,CAAA,CAAE,SAAA,EAAU;AAC7H,MAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,gBAAgB,KAAA,EAAqC;AACnD,IAAA,MAAM,QAAQ,OAAO,KAAA,KAAU,WAAW,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,KAAA;AAC9D,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,UAAA,IAAc,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,MAAM,KAAK,CAAA;AACrG,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AACvC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,QAAQ,CAAA;AAC9C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,MAAM,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,MAAM,QAAQ,CAAA;AAC5D,MAAA,IAAI,KAAA,CAAM,UAAU,MAAA,CAAO,UAAA,CAAW,UAAU,KAAA,CAAM,QAAQ,EAAE,SAAA,EAAU;AAC1E,MAAA,IAAI,MAAM,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,MAAM,KAAK,CAAA;AACnD,MAAA,MAAA,CAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC;AACA,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,IAAU,EAAC,EAAG;AACtC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAM,MAAM,CAAA;AACzC,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,OAAA,GAAU,KAAA,CAAM,OAAA;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,wBAAA,CAAyB,MAAgB,OAAA,EAA2E;AAClH,IAAA,IAAA,CAAK,QAAA,CAAS,CAAC,MAAA,KAAgB;AAC7B,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,IAAU,CAAC,OAAO,IAAA,EAAM;AACpC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AAClC,MAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,MAAA,IAAI,OAAO,MAAA,CAAO,OAAA,KAAY,SAAA,EAAW,MAAA,CAAO,UAAU,MAAA,CAAO,OAAA;AACjE,MAAA,IAAI,OAAO,QAAA,EAAU,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,IACjE,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,qBAAA,CAAsB,MAAgB,IAAA,EAAc;AAClD,IAAA,IAAI,MAAA,GAAyC,IAAA;AAC7C,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,KAAS;AACnC,MAAA,MAAM,QAAA,GAAgB,SAAA,CAAW,IAAA,CAAa,QAAQ,EAAE,CAAC,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,MAAM,WAAW,MAAA,CAAO,OAAA,CAAQ,oBAAoB,CAAA,CAAE,KAAK,CAAC,GAAG,KAAK,MAAM,KAAA,KAAU,QAAA,CAAS,QAAQ,CAAA,GAAI,CAAC,CAAA,IAAK,QAAA;AAC/G,MAAA,MAAA,GAAS,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,WAAA,EAAa,SAAS,WAAA,EAAa,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,YAAY,QAAA,CAAS,UAAA,EAAY,SAAA,EAAW,QAAA,CAAS,WAAW,QAAA,EAAS;AAAA,IACnL,CAAC,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,qBAAA,CAAsB,IAAA,EAAgB,IAAA,EAAc,MAAA,EAAwB;AAC1E,IAAA,IAAA,CAAK,SAAA,CAAU,MAAM,IAAA,EAAM,CAAC,SAAS,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,EACvE;AAAA,EAEA,cAAA,CAAe,IAAA,EAAgB,IAAA,EAAc,OAAA,EAAkB;AAC7D,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,KAAS;AAAE,MAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,IAAS,CAAC,CAAA;AAAA,EAClE;AAAA,EAEA,cAAc,IAAA,EAAgB,IAAA,EAAqB,KAAA,GAAQ,KAAA,EAAUL,aAAY,GAAA,EAAK;AACpF,IAAA,IAAA,CAAK,QAAA,CAAS,CAAC,MAAA,KAAgB;AAC7B,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,MAAA,KAAA,MAAW,QAAA,IAAY,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAY;AAC1D,QAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACxB,QAAA,MAAM,MAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,SAAS,IAAI,CAAA,CAAA;AAC3C,QAAA,IAAI,IAAA,KAAS,OAAO,IAAA,EAAM;AACxB,UAAA,IAAI,CAAC,KAAK,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA,EAAG,IAAA,CAAK,iBAAiB,GAAA,CAAI,GAAA,EAAK,EAAE,KAAA,EAAO,QAAA,CAAS,SAAS,MAAA,EAAO,EAAG,WAAW,QAAA,CAAS,iBAAA,IAAqB,GAAG,CAAA;AACrJ,UAAA,QAAA,CAAS,QAAA,CAAS,OAAO,KAAK,CAAA;AAC9B,UAAA,QAAA,CAAS,iBAAA,GAAoBA,UAAAA;AAAA,QAC/B,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA;AAC9C,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AACvC,YAAA,QAAA,CAAS,oBAAoB,QAAA,CAAS,SAAA;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,mBAAA,CAAoB,QAAyB,UAAA,EAAiB;AAC5D,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,KAAA,MAAW,QAAA,IAAY,SAAA,CAAW,IAAA,CAAa,QAAQ,CAAA,EAAY;AACjE,QAAA,IAAI,UAAA,CAAW,aAAa,QAAA,CAAS,KAAA,WAAgB,KAAA,CAAM,GAAA,CAAI,WAAW,SAAS,CAAA;AACnF,QAAA,IAAI,UAAA,CAAW,YAAY,QAAA,CAAS,QAAA,WAAmB,QAAA,CAAS,GAAA,CAAI,WAAW,QAAQ,CAAA;AACvF,QAAA,IAAI,OAAO,UAAA,CAAW,iBAAA,KAAsB,QAAA,EAAU,QAAA,CAAS,oBAAoB,UAAA,CAAW,iBAAA;AAC9F,QAAA,QAAA,CAAS,WAAA,GAAc,IAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAA,CACE,IAAA,EACA,MAAA,EACA,OAAA,GAAiC,EAAC,EAClC;AACA,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EAC1F;AAAA,EAEA,eAAA,CACE,IAAA,EACA,OAAA,EACA,OAAA,GAAiC,EAAC,EAClC;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAElC,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAgC;AACnD,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAElC,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,MAAM,MAAM,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA;AAC7C,QAAA,IAAI,SAAA,CAAU,IAAI,GAAG,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,GAAG,CAAA,CAAE,CAAA;AAC9F,QAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AAEjB,QAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AACtC,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAA;AACjD,UAAA,IAAI,CAAC,IAAA,IAAQ,CAAE,IAAA,CAAa,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AACxF,UAAA,KAAA,GAAQ;AAAA,YACN,IAAA;AAAA,YACA,gBAAgB,IAAA,CAAK,QAAA;AAAA,YACrB,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM;AAAA,YAC9B,UAAA,EAAY;AAAA,cACV,GAAI,IAAA,CAAK,qBAAA,IACH,IAAA,CAAK,QAAA,CACN,yBACA;AAAC,aACR;AAAA,YACA,YAAY,CAAC,GAAI,IAAA,CAAK,qBAAA,IAAyB,EAAG;AAAA,WACpD;AACA,UAAA,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU,KAAK,CAAA;AAAA,QACnC;AAEA,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,uBAAA,CAAwB,KAAA,EAAO,QAAQ,OAAO,CAAA;AAAA,MACnE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,EAAO,EAAG,KAAA,CAAM,SAAS,OAAA,EAAQ;AAC5D,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,MAAM,eAAA,GAAkB,QAAQ,wBAAA,KAA6B,KAAA;AAC7D,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,EAAO,EAAG;AACnC,MAAA,MAAM,iBAAA,GAAyB,eAAA,GAAkB,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,cAAA;AACxE,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,iBAAA,CAAkB,eAAA,GAAkB,MAAM,QAAA,CAAS,eAAA;AACnD,QAAA,iBAAA,CAAkB,oBAAA,GAAuB,MAAM,QAAA,CAAS,oBAAA;AACxD,QAAA,iBAAA,CAAkB,WAAA,GAAc,MAAM,QAAA,CAAS,WAAA;AAC/C,QAAA,iBAAA,CAAkB,cAAA,GAAiB,MAAM,QAAA,CAAS,cAAA;AAAA,MACpD;AACA,MAAA,iBAAA,CAAkB,qBAAA,GAAwB,EAAE,GAAG,KAAA,CAAM,UAAA,EAAW;AAChE,MAAA,KAAA,CAAM,KAAK,QAAA,GAAW,iBAAA;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,GAAwB,EAAE,GAAG,MAAM,UAAA,EAAW;AACzD,MAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,GAAwB,CAAC,GAAG,MAAM,UAAU,CAAA;AACvD,MAAA,IAAI,CAAC,eAAA,EAAiB,KAAA,CAAM,QAAA,CAAS,OAAA,EAAQ;AAAA,IAC/C;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,kBAAA,GAAqB,IAAI,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO,EAAG,CAAC,KAAA,KAAU,KAAA,CAAM,cAAc,CAAC,CAAA;AAC/F,MAAA,KAAA,MAAW,kBAAkB,kBAAA,EAAoB;AAC/C,QAAA,IAAI,UAAA,GAAa,KAAA;AACjB,QAAA,IAAA,CAAK,QAAA,CAAS,CAAC,MAAA,KAAgB;AAC7B,UAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,gBAAgB,UAAA,GAAa,IAAA;AAAA,QACxE,CAAC,CAAA;AACD,QAAA,IAAI,CAAC,UAAA,EAAY,cAAA,CAAe,OAAA,EAAQ;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,uBAAA,CACN,KAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,WAAgB,KAAA,CAAM,QAAA;AAC5B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,IAAA,EAAK,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AACtG,IAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAW,MAAA,CAAO,SAAA,CAAU,eAAe,CAAA,IAAK,eAAA,IAAmB,IACrE,eAAA,GACA,MAAA;AACJ,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,OAAA,CAAQ,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAE7G,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,CACzC,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,KAAK,KAAA,GAAQ,CAAA,EAAG,MAAM,IAAI,MAAM,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AACvH,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AACH,IAAA,MAAM,qBAAqB,IAAA,CAAK,GAAA;AAAA,MAC9B,CAAA;AAAA,MACA,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,eAA4C,CAAA,CAAE,GAAA,CAAI,CAAC,UAAA,KAAe,UAAA,EAAY,MAAA,IAAU,CAAC,CAAA;AAAA,MACnH,WAAA,CAAY,SAAS,CAAA,GAAI,IAAA,CAAK,IAAI,GAAG,WAAW,IAAI,CAAA,GAAI,CAAA;AAAA,MACxD,MAAM,UAAA,CAAW;AAAA,KACnB;AACA,IAAA,MAAM,QAAQ,QAAA,IAAY,kBAAA;AAC1B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,QAAQ,CAAC,CAAA;AAC1D,IAAA,MAAM,gBAAA,GAAmB,OAAO,QAAA,KAAa,KAAA;AAC7C,IAAA,IAAI,kBAAA,KAAuB,CAAA,EAAG,QAAA,CAAS,oBAAA,GAAuB,gBAAA;AAE9D,IAAA,KAAA,MAAW,YAAY,yBAAA,EAA2B;AAChD,MAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAC5B,MAAA,MAAM,kBAAA,GAAqB,QAAA,CAAS,eAAA,CAAgB,QAAQ,CAAA;AAC5D,MAAA,IAAI,CAAC,IAAA,IAAQ,kBAAA,EAAoB,MAAA,KAAW,CAAA,EAAG;AAC7C,QAAA,OAAO,QAAA,CAAS,gBAAgB,QAAQ,CAAA;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,kBAAA,EAAoB;AAElC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,QAAQ,CAAA;AAC3C,MAAA,IAAI,CAAC,QAAS,IAAA,IAAQ,IAAA,CAAK,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,QAAA,EAAW;AACjE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,QAAQ,CAAA,kBAAA,CAAoB,CAAA;AAAA,MACzD;AAEA,MAAA,MAAM,UAAA,GAAa,CAAC,GAAI,kBAAA,IAAsB,EAAG,CAAA;AACjD,MAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,WAAA,EAAa,eAAe,CAAA,EAAG;AACrE,QAAA,IAAI,WAAA,KAAgB,SAAS,IAAA,EAAM;AACjC,UAAA,UAAA,CAAW,WAAW,CAAA,GAAI,oBAAA;AAAA,YACxB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA,CAAO,IAAA;AAAA,YACP,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,WAAW,CAAC,UAAA,CAAW,WAAW,CAAA,IAAK,gBAAgB,KAAA,EAAO;AAC5D,UAAA,UAAA,CAAW,WAAW,CAAA,GAAIE,4BAAAA;AAAA,YACxB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,WAAA,KAAgB,KAAA,GAAQ,MAAA,CAAO,IAAA,GAAO,SAAS,WAAW,CAAA;AAAA,WAC5D;AAAA,QACF;AAAA,MACF;AACA,MAAA,QAAA,CAAS,eAAA,CAAgB,QAAQ,CAAA,GAAI,UAAA;AAAA,IACvC;AAEA,IAAA,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAC1B,IAAA,QAAA,CAAS,qBAAA,GAAwB,EAAE,GAAG,UAAA,EAAW;AACjD,IAAA,OAAO,MAAM,UAAA,CAAW,MAAA,GAAS,aAAa,KAAA,CAAM,UAAA,CAAW,KAAK,CAAC,CAAA;AACrE,IAAA,IAAI,QAAQ,cAAA,KAAmB,KAAA,EAAO,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,GAAI,CAAA;AAChE,IAAA,QAAA,CAAS,kBAAA,IAAqB;AAC9B,IAAA,QAAA,CAAS,qBAAA,IAAwB;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,aAAA,CAAc,MAAY,MAAA,EAAwB;AACxD,IAAA,IAAI,OAAO,MAAA,CAAO,WAAA,KAAgB,QAAA,EAAU,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AACtE,IAAA,KAAA,MAAW,QAAA,IAAY,SAAA,CAAW,IAAA,CAAa,QAAQ,CAAA,EAAY;AACjE,MAAA,IAAI,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,EAAU,QAAA,CAAS,UAAU,MAAA,CAAO,OAAA;AAClE,MAAA,IAAI,OAAO,MAAA,CAAO,WAAA,KAAgB,SAAA,EAAW,QAAA,CAAS,cAAc,MAAA,CAAO,WAAA;AAAA,WAAA,IAClE,OAAO,OAAO,OAAA,KAAY,QAAA,IAAY,OAAO,OAAA,GAAU,CAAA,WAAY,WAAA,GAAc,IAAA;AAC1F,MAAA,IAAI,OAAO,MAAA,CAAO,UAAA,KAAe,SAAA,EAAW,QAAA,CAAS,aAAa,MAAA,CAAO,UAAA;AACzE,MAAA,IAAI,OAAO,MAAA,CAAO,SAAA,KAAc,SAAA,EAAW,QAAA,CAAS,YAAY,MAAA,CAAO,SAAA;AACvE,MAAA,IAAI,OAAO,QAAA,EAAU,QAAA,CAAS,QAAA,GAAW,oBAAA,CAAqB,OAAO,QAAQ,CAAA;AAC7E,MAAA,QAAA,CAAS,WAAA,GAAc,IAAA;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,SAAA,CAAU,IAAA,EAAgB,IAAA,EAAc,KAAA,EAA6B;AAC3E,IAAA,IAAA,CAAK,QAAA,CAAS,CAAC,MAAA,KAAgB;AAAE,MAAA,IAAI,OAAO,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,IAAA,QAAY,MAAM,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,EAC9F;AACF;AAEO,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAAmB;AACpD,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,IAAA,CAAK,QAAA,CAAS,CAAC,MAAA,KAAgB;AAAE,IAAA,IAAI,MAAA,CAAO,UAAU,YAAA,CAAa,MAAM,EAAE,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,EAAG,CAAC,CAAA;AAC7G,EAAA,OAAO,MAAA;AACT","file":"three.js","sourcesContent":["import type { BoneResolutionProfile } from './adapter';\n\n/**\n * Embody serializes bone-resolution inputs into Wasm. Passing a complete\n * character profile also serializes authored vertex deltas and saved clips\n * for every annotation lookup, even though the resolver cannot use them.\n */\nexport function boneResolutionProfile(\n profile: BoneResolutionProfile | null | undefined,\n): BoneResolutionProfile | null {\n if (!profile) return null;\n return {\n bonePrefix: profile.bonePrefix,\n boneSuffix: profile.boneSuffix,\n boneNodes: profile.boneNodes,\n suffixPattern: profile.suffixPattern,\n };\n}\n","import { Box3, Quaternion, Vector3, type Object3D } from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore, type EmbodyCore, type CameraFlight, type CameraOrbit } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationCharacterConfig, AnnotationLaterality, BoneResolutionProfile, Region } from './types';\nexport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nexport type { AnnotationLaterality, BoneResolutionProfile } from './types';\n\ntype Point = { x: number; y: number; z: number };\ntype Rotation = Point & { w: number };\ntype Bounds = { center: Point; size: Point };\nconst vec = (v: Point) => new Float32Array([v.x, v.y, v.z]);\nconst quat = (q?: Rotation | null) => new Float32Array(q ? [q.x, q.y, q.z, q.w] : []);\nconst bounds = (b?: Bounds | null) => new Float32Array(b ? [b.center.x, b.center.y, b.center.z, b.size.x, b.size.y, b.size.z] : []);\nconst point = (values: ArrayLike<number>, offset = 0): Point => ({ x: values[offset], y: values[offset + 1], z: values[offset + 2] });\nconst framing = (v: ArrayLike<number>) => ({ position: point(v), target: point(v, 3), distance: v[6] });\n\n/** Typed, allocation-only bridge to the canonical Rust camera and marker algorithms. */\nexport class RustAnnotationCameraCore {\n constructor(private readonly core: EmbodyCore) {}\n static async create() { return new RustAnnotationCameraCore(await initEmbodyCore()); }\n normalizeCameraAngle(angle: number) { return this.core.normalize_camera_angle_degrees(angle); }\n worldDirectionForCameraAngle(q: Rotation | undefined, angle: number) { return point(this.core.world_direction_for_camera_angle(quat(q), angle)); }\n resolveFocusCameraDirection(q: Rotation | undefined, effectiveAngle: number, cameraAngle?: number, angleSpace = 'model') {\n return point(this.core.resolve_focus_camera_direction(quat(q), effectiveAngle, cameraAngle != null, angleSpace === 'world'));\n }\n resolveAutoCloseupAngle(offset: number, focusSize: Point, modelSize: Point) { return this.core.resolve_auto_closeup_angle(offset, vec(focusSize), vec(modelSize)); }\n focusPaddingFactor(size: number, closeUp: number, zoom: number, fullBody: number) { return this.core.focus_padding_factor(size, closeUp, zoom, fullBody); }\n solveFocusFraming(o: { focusBounds?: Bounds; modelBounds?: Bounds | null; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; closeUpPaddingFactor: number; zoomPaddingFactor: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_focus_framing(bounds(o.focusBounds), bounds(o.modelBounds), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.closeUpPaddingFactor, o.zoomPaddingFactor, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n solveFullBodyFraming(o: { boxMin: Point; boxMax: Point; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_full_body_framing(vec(o.boxMin), vec(o.boxMax), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }) { return this.core.passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\n shouldShowMarker(o: { hiddenChild: boolean; solo: 'none' | 'soloed' | 'other-soloed'; markerAngle?: number; currentCameraAngle?: number }) {\n return this.core.should_show_marker(o.hiddenChild, o.solo === 'soloed' ? 1 : o.solo === 'other-soloed' ? 2 : 0, o.markerAngle, o.currentCameraAngle);\n }\n resolveViewportConstrainedLineScale(o: { startClip: ArrayLike<number>; endClip: ArrayLike<number>; safeX: number; safeY: number; minLengthRatio?: number }) {\n const v = this.core.resolve_viewport_constrained_line_scale(new Float32Array(o.startClip), new Float32Array(o.endClip), o.safeX, o.safeY, o.minLengthRatio);\n return { visible: v[0] >= 1, lineScale: v[1] };\n }\n resolveViewportSafeBounds(o: { labelScaleX: number; labelScaleY: number; projectionXScale: number; projectionYScale: number; viewportWidth: number; viewportHeight: number; edgePaddingPx?: number }) {\n const v = this.core.resolve_viewport_safe_bounds(o.labelScaleX, o.labelScaleY, o.projectionXScale, o.projectionYScale, o.viewportWidth, o.viewportHeight, o.edgePaddingPx);\n return { safeX: v[0], safeY: v[1] };\n }\n sampleMarkerBezierCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_bezier_curve(vec(start), vec(end), segments); }\n sampleMarkerArcCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_arc_curve(vec(start), vec(end), segments); }\n markerVisibilityAnimationFactors(visible: boolean, t: number) {\n const v = this.core.marker_visibility_animation_factors(visible, t);\n return { itemOpacityFactor: v[0], labelScaleFactor: v[1], lineOpacityFactor: v[2] };\n }\n separateOverlappingMarkerEndpoints(o: { starts: ArrayLike<number>; ends: ArrayLike<number>; modelCenter: Point; modelHeight: number }) { return this.core.separate_overlapping_marker_endpoints(new Float32Array(o.starts), new Float32Array(o.ends), vec(o.modelCenter), o.modelHeight); }\n createCameraFlight(start: Point, startTarget: Point, end: Point, endTarget: Point, duration: number) { return animationHandle(new this.core.CameraFlight(vec(start), vec(startTarget), vec(end), vec(endTarget), duration)); }\n createCameraOrbit(center: Point, radius: number, height: number, duration: number) { return animationHandle(new this.core.CameraOrbit(vec(center), radius, height, duration)); }\n}\n\nfunction animationHandle(handle: CameraFlight | CameraOrbit) {\n let disposed = false;\n return {\n sample(elapsed: number) {\n const v = handle.sample(elapsed);\n return { position: point(v), target: point(v, 3), done: v[6] >= 1 };\n },\n get durationMs() { return handle.duration_ms(); },\n dispose() { if (!disposed) { disposed = true; handle.free(); } },\n };\n}\nexport const createRustAnnotationCameraCore = () => RustAnnotationCameraCore.create();\n\nfunction request<T>(op: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(JSON.stringify({ op, payload }))) as T;\n}\n\n/** Resolve only annotation/profile inputs, preserving host-only data by reference. */\nexport async function resolveAnnotationCharacterConfig<T extends AnnotationCharacterConfig>(config: T): Promise<T> {\n await initEmbodyCore();\n const keys = ['profilePresetId', 'presetId', 'baseProfileId', 'auPresetType', 'annotationRegions', 'regions', 'disabledRegions', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const input: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) input[key] = config[key];\n if (config.profile) {\n input.profile = Object.fromEntries(keys.filter(k => config.profile?.[k] !== undefined).map(k => [k, config.profile![k]]));\n }\n const extended = request<Record<string, unknown>>('profile.extendConfig', { config: input });\n const resolved = { ...config };\n for (const key of keys) if (extended[key] !== undefined) (resolved as Record<string, unknown>)[key] = extended[key];\n resolved.regions ??= resolved.annotationRegions ?? [];\n return resolved;\n}\n\nexport function resolveBoneNames(names: string[] | undefined, profile?: BoneResolutionProfile | null): string[] {\n if (!names?.length) return [];\n return profile ? request('profile.resolveBoneNames', { profile, names }) : [...new Set(names)];\n}\nexport function fuzzyNameMatch(objectName: string, targetName: string, suffixPattern?: string): boolean { return request('name.fuzzyMatch', { objectName, targetName, suffixPattern }); }\nexport function getDefaultAnnotationLaterality(): AnnotationLaterality { return { leftSideX: -1, confidence: 0, evidence: ['default:left=-X'] }; }\nfunction semanticSide(name: string) { return /(^|[_\\s-])(left|right)(?=$|[_\\s-])/i.exec(name)?.[2].toLowerCase() as 'left' | 'right' | undefined; }\nexport function getSemanticHorizontalSignForSide(side: 'left' | 'right', laterality: AnnotationLaterality): 1 | -1 { return side === 'left' ? laterality.leftSideX : laterality.leftSideX === 1 ? -1 : 1; }\nexport function getSemanticHorizontalSign(name: string, laterality: AnnotationLaterality) { const side = semanticSide(name); return side ? getSemanticHorizontalSignForSide(side, laterality) : null; }\nexport function resolveRegionCameraAngle(region: Region, laterality: AnnotationLaterality) {\n if (region.cameraAngle == null) return undefined;\n const angle = requireInitializedEmbodyCore().normalize_camera_angle_degrees(region.cameraAngle);\n const side = semanticSide(region.name);\n return side && (angle === 90 || angle === 270) ? getSemanticHorizontalSignForSide(side, laterality) > 0 ? 90 : 270 : angle;\n}\nexport function resolveRegionVisibilityCameraAngle(region: Region, laterality: AnnotationLaterality) {\n const angle = resolveRegionCameraAngle(region, laterality);\n const side = semanticSide(region.name);\n return angle ?? (region.parent && side ? getSemanticHorizontalSignForSide(side, laterality) > 0 ? 90 : 270 : undefined);\n}\nfunction modelQuaternion(model: Object3D | null) { if (!model) return undefined; model.updateMatrixWorld(true); return model.getWorldQuaternion(new Quaternion()); }\nexport function toWorldDirection(model: Object3D | null, local: Vector3) { const q = modelQuaternion(model); const direction = local.clone(); return (q ? direction.applyQuaternion(q) : direction).normalize(); }\nexport function getWorldDirectionForCameraAngle(model: Object3D | null, angle: number) { const v = requireInitializedEmbodyCore().world_direction_for_camera_angle(quat(modelQuaternion(model)), angle); return new Vector3(v[0], v[1], v[2]); }\nexport function getModelLocalOrbitAngle(model: Object3D | null, center: Vector3, position: Vector3) {\n const local = position.clone().sub(center); const q = modelQuaternion(model); if (q) local.applyQuaternion(q.invert()); local.normalize();\n return requireInitializedEmbodyCore().normalize_camera_angle_degrees(Math.atan2(local.x, local.z) * 180 / Math.PI);\n}\nexport function passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }) { return requireInitializedEmbodyCore().passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\n\nconst matches = (name: string, target: string, suffix?: string) => fuzzyNameMatch(name, target, suffix) || name.toLowerCase().includes(target.toLowerCase());\nfunction matchingObject(model: Object3D, target: string, suffix?: string): Object3D | undefined {\n let found: Object3D | undefined;\n model.traverse(object => { if (!found && matches(object.name, target, suffix)) found = object; });\n return found;\n}\nfunction matchingCandidates(model: Object3D, targets: string[], suffix?: string) { for (const target of targets) { const object = matchingObject(model, target, suffix); if (object) return object; } }\n\n/** Reduce scene objects to a world-space annotation anchor; numeric camera math stays in Rust. */\nexport function resolveFaceCenter(model: Object3D, region: Region, profile?: BoneResolutionProfile | null) {\n model.updateMatrixWorld(true);\n const box = new Box3().setFromObject(model); const size = box.getSize(new Vector3());\n const suffix = profile?.suffixPattern;\n const heads = resolveBoneNames(region.bones, profile).filter(name => name.toLowerCase().includes('head'));\n const head = matchingCandidates(model, heads.length ? heads : ['CC_Base_Head', 'Head', 'head', 'Bip01_Head'], suffix);\n const left = matchingCandidates(model, ['CC_Base_L_Eye', 'LeftEye', 'Eye_L', 'L_Eye'], suffix);\n const right = matchingCandidates(model, ['CC_Base_R_Eye', 'RightEye', 'Eye_R', 'R_Eye'], suffix);\n const meshBox = new Box3();\n if (region.meshes?.length) model.traverse(object => { if ((object as any).isMesh && region.meshes!.some(name => matches(object.name, name, suffix))) { const b = new Box3().setFromObject(object); if (!b.isEmpty()) meshBox.union(b); } });\n if (!meshBox.isEmpty() && meshBox.getSize(new Vector3()).y <= size.y * 0.7) return { center: meshBox.getCenter(new Vector3()), method: 'mesh-center', debugInfo: [] as string[] };\n const headBonePosition = head?.getWorldPosition(new Vector3());\n if (left && right) return { center: left.getWorldPosition(new Vector3()).add(right.getWorldPosition(new Vector3())).multiplyScalar(0.5), headBonePosition, method: 'head-bone-offset', debugInfo: [] as string[] };\n if (headBonePosition) return { center: headBonePosition.clone().addScaledVector(toWorldDirection(model, new Vector3(0, 0, 1)), 0.08 * size.y / 1.8), headBonePosition, method: 'head-bone-offset', debugInfo: [] as string[] };\n const center = box.getCenter(new Vector3()); center.y = box.min.y + size.y * 0.9;\n return { center, method: 'fallback', debugInfo: [] as string[] };\n}\nexport function detectAnnotationLaterality(model: Object3D | null, regions: Region[], profile: BoneResolutionProfile | null): AnnotationLaterality {\n if (!model || !regions.length) return getDefaultAnnotationLaterality();\n model.updateMatrixWorld(true); let signed = 0; let total = 0;\n for (const region of regions) {\n const side = semanticSide(region.name); if (!side) continue;\n const object = matchingCandidates(model, resolveBoneNames(region.bones, profile), profile?.suffixPattern); if (!object) continue;\n const x = model.worldToLocal(object.getWorldPosition(new Vector3())).x;\n if (Math.abs(x) > 0.001) { signed += side === 'left' ? x : -x; total += Math.abs(x); }\n }\n return total > 0 ? { leftSideX: signed > 0 ? 1 : -1, confidence: Math.abs(signed) / total, evidence: [] } : getDefaultAnnotationLaterality();\n}\n","import {\n createRustAnnotationCameraCore,\n type RustAnnotationCameraCore,\n} from './adapter';\n\nlet core: RustAnnotationCameraCore | null = null;\nlet initialization: Promise<RustAnnotationCameraCore> | null = null;\n\n/** Share the stateless Rust math adapter across cameras and markers. */\nexport function getAnnotationCameraCore(): Promise<RustAnnotationCameraCore> {\n initialization ??= createRustAnnotationCameraCore().then(\n (initialized) => {\n core = initialized;\n return initialized;\n },\n (error: unknown) => {\n initialization = null;\n throw error;\n },\n );\n return initialization;\n}\n\n/** Synchronous render-loop math is available after the owning load awaits initialization. */\nexport function requireAnnotationCameraCore(): RustAnnotationCameraCore {\n if (!core) {\n throw new Error('Annotation camera core is not ready. Await getAnnotationCameraCore() before using annotation math.');\n }\n return core;\n}\n","import type { PerspectiveCamera, Scene } from 'three';\nimport type { CharacterSceneRenderer, CharacterSceneRenderingController } from './scene';\n\n/** Adapter-private binding. Applications pass config.rendering to the camera controller. */\nexport type SceneRenderingBinding = {\n suspend(): Promise<void>;\n prepare(renderer: CharacterSceneRenderer): Promise<void>;\n commit(renderer: CharacterSceneRenderer): Promise<void>;\n onError(error: unknown): void;\n};\n\ntype Owner = {\n scene: Scene;\n camera: PerspectiveCamera;\n binding: SceneRenderingBinding | null;\n disposed: boolean;\n drain: Promise<void> | null;\n settled: () => Promise<unknown> | null;\n reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void;\n};\nconst owners = new WeakMap<CharacterSceneRenderingController, Owner>();\n\nexport function registerSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, settled: () => Promise<unknown> | null, reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void) {\n const owner: Owner = { scene, camera, binding: null, disposed: false, drain: null, settled, reportFailure };\n owners.set(controller, owner);\n return owner;\n}\n\nexport function bindSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, binding: SceneRenderingBinding) {\n const owner = owners.get(controller);\n if (!owner || owner.disposed) throw new Error('Character scene rendering has been disposed or is not owned by Embody.');\n if (owner.scene !== scene || owner.camera !== camera) throw new Error('Rendering and camera controllers must share their scene and camera.');\n if (owner.binding) throw new Error('Character scene rendering already has a camera controller.');\n owner.binding = binding;\n const snapshot = controller.getSnapshot();\n if (snapshot.renderer) void binding.commit(snapshot.renderer).catch(binding.onError);\n if (snapshot.status !== 'ready' && snapshot.status !== 'error') void binding.suspend().catch(binding.onError);\n return () => {\n if (owner.binding === binding) {\n owner.drain = binding.suspend();\n void owner.drain.catch(() => undefined);\n owner.binding = null;\n return Promise.allSettled([owner.drain, owner.settled()]).then(() => undefined);\n }\n return null;\n };\n}\n\nexport function reportSceneRenderingFailure(controller: CharacterSceneRenderingController, error: unknown, renderer?: CharacterSceneRenderer | null) {\n const owner = owners.get(controller);\n if (owner && !owner.disposed) owner.reportFailure(error, renderer);\n}\n","import { Float32BufferAttribute, FloatType } from 'three';\nimport type { BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Object3D, SkinnedMesh } from 'three';\n\n/** Keep joint indices compatible with both native WebGPU and WebGL skinning. */\nexport function prepareModelSkinning(model: Object3D): () => void {\n const replacements: { geometry: BufferGeometry; original: BufferAttribute | InterleavedBufferAttribute; prepared: BufferAttribute }[] = [];\n model.traverse(object => {\n const mesh = object as SkinnedMesh;\n if (!mesh.isSkinnedMesh) return;\n const geometry = mesh.geometry;\n const original = geometry.getAttribute('skinIndex');\n if (!original) return;\n if (original.array instanceof Float32Array && (!('gpuType' in original) || original.gpuType === FloatType)) return;\n\n // Three's native backend widens Uint8/Uint16 attributes in place to Uint32.\n // WebGL then uses vertexAttribIPointer, but its skinIndex shader input is\n // vec4. Float32 preserves every glTF joint index and avoids that mutation.\n // Read components so interleaved indices do not copy adjacent attributes.\n const prepared = new Float32BufferAttribute(original.count * original.itemSize, original.itemSize);\n for (let vertex = 0; vertex < original.count; vertex++) {\n for (let component = 0; component < original.itemSize; component++) {\n prepared.setComponent(vertex, component, original.getComponent(vertex, component));\n }\n }\n prepared.name = original.name;\n prepared.setUsage('data' in original ? original.data.usage : original.usage);\n geometry.setAttribute('skinIndex', prepared);\n replacements.push({ geometry, original, prepared });\n });\n // A replacement renderer may fail after compilation. The old native pipeline\n // still expects its original attribute format, so restore its exact objects.\n return () => {\n for (const { geometry, original, prepared } of replacements) {\n if (geometry.getAttribute('skinIndex') === prepared) geometry.setAttribute('skinIndex', original);\n }\n };\n}\n","import * as THREE from 'three';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { prepareModelSkinning } from '../modelSkinning';\n\nfunction captureRenderTarget(renderer: CharacterSceneRenderer): () => void {\n const face = renderer.getActiveCubeFace();\n const mip = renderer.getActiveMipmapLevel();\n if ('isWebGPURenderer' in renderer) {\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n }\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n}\n\n/** Match the lazy bounds used by Three's Frustum.intersectsObject. */\nfunction initializeModelCullingBounds(model: THREE.Object3D): void {\n model.traverseVisible((object) => {\n if (!object.frustumCulled) return;\n const drawable = object as THREE.Mesh & THREE.Line & THREE.Points;\n if (!(drawable.isMesh || drawable.isLine || drawable.isPoints)) return;\n if ('boundingSphere' in drawable) {\n if (drawable.boundingSphere === null && 'computeBoundingSphere' in drawable\n && typeof drawable.computeBoundingSphere === 'function') drawable.computeBoundingSphere();\n } else if (drawable.geometry.boundingSphere === null) drawable.geometry.computeBoundingSphere();\n });\n}\n\n/** Only the model root is exposed; authored child visibility and layers are retained. */\nfunction withPreparedModel<T>(\n scene: THREE.Scene, model: THREE.Object3D, operation: () => T,\n options: { initializeBounds?: boolean } = {},\n): T {\n if (model === scene) throw new Error('Render preparation requires a model, not the controller scene.');\n let ancestor = model;\n while (ancestor.parent) {\n ancestor = ancestor.parent;\n if (!ancestor.visible) throw new Error('Render preparation requires visible model ancestors.');\n }\n if (model.parent && ancestor !== scene) throw new Error('Render preparation requires a detached model or a model in the controller scene.');\n const detached = !model.parent;\n const visible = model.visible;\n const culling = new Map<THREE.Object3D, boolean>();\n try {\n if (detached) scene.add(model);\n model.visible = true;\n if (options.initializeBounds) {\n // Skin bounds use bone.matrixWorld and current morph weights, not the\n // uploaded skeleton buffer. Refresh the same hierarchy the draw will use.\n scene.updateMatrixWorld(true);\n initializeModelCullingBounds(model);\n }\n model.traverseVisible((object) => {\n culling.set(object, object.frustumCulled);\n object.frustumCulled = false;\n });\n return operation();\n } finally {\n culling.forEach((value, object) => { object.frustumCulled = value; });\n model.visible = visible;\n if (detached) scene.remove(model);\n }\n}\n\n/** Three collects visible surfaces before yielding; no shared mutations span the await. */\nexport function compileModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): Promise<unknown> {\n if ('isWebGPURenderer' in renderer && !renderer.hasInitialized()) {\n throw new Error('Model render preparation requires an initialized WebGPU renderer.');\n }\n // Only the caller-owned model is retained across asynchronous compilation.\n // Controller markers may still be replaced/disposed while this is pending.\n return withPreparedModel(scene, model, () => {\n prepareModelSkinning(model);\n return renderer.compileAsync(model, camera, scene);\n });\n}\n\n/** One complete scene draw initializes native geometry/textures and real shadow variants. */\nexport function drawModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): () => void {\n const viewport = renderer.getViewport(new THREE.Vector4());\n const scissor = renderer.getScissor(new THREE.Vector4());\n const scissorTest = renderer.getScissorTest();\n const restoreRenderTarget = captureRenderTarget(renderer);\n const autoClear = renderer.autoClear;\n const clearColor = renderer.getClearColor(Object.assign(new THREE.Color(), { a: 1 }));\n const clearAlpha = renderer.getClearAlpha();\n const native = 'isWebGPURenderer' in renderer ? renderer : null;\n const renderObject = native?.getRenderObjectFunction();\n const mrt = native?.getMRT();\n const background = scene.background;\n const hasBackgroundNode = 'backgroundNode' in scene;\n const backgroundNode = hasBackgroundNode ? scene.backgroundNode : undefined;\n const overrideMaterial = scene.overrideMaterial;\n const sceneName = scene.name;\n const globalShadow = 'autoUpdate' in renderer.shadowMap ? renderer.shadowMap : null;\n const globalAutoUpdate = globalShadow?.autoUpdate;\n const globalNeedsUpdate = globalShadow?.needsUpdate;\n const shadows: { shadow: THREE.LightShadow; layers: number; autoUpdate: boolean; needsUpdate: boolean; remainingUpdate?: boolean }[] = [];\n let rendered = false;\n try {\n withPreparedModel(scene, model, () => {\n if (renderer.shadowMap.enabled) {\n scene.traverseVisible((object) => {\n const light = object as THREE.Light & { shadow?: THREE.LightShadow };\n if (light.isLight && light.castShadow && light.shadow && light.layers.test(camera.layers)) {\n const shadow = light.shadow;\n shadows.push({ shadow, layers: shadow.camera.layers.mask, autoUpdate: shadow.autoUpdate, needsUpdate: shadow.needsUpdate });\n shadow.needsUpdate = true;\n }\n });\n if (globalShadow) globalShadow.needsUpdate = true;\n }\n renderer.autoClear = false;\n // Color backgrounds force a framebuffer clear even with autoClear=false;\n // viewport clipping alone cannot keep that clear off the visible canvas.\n if (scene.background && 'isColor' in scene.background) scene.background = null;\n renderer.setViewport(0, 0, 0, 0);\n renderer.render(scene, camera);\n rendered = true;\n for (const state of shadows) state.remainingUpdate = state.shadow.needsUpdate;\n }, { initializeBounds: true });\n } finally {\n // Restore public state even when a native nested shadow draw throws before\n // Three's own restoration. The draw never changes authored layers/materials.\n restoreRenderTarget();\n renderer.setViewport(viewport);\n renderer.setScissor(scissor);\n renderer.setScissorTest(scissorTest);\n renderer.setClearColor(clearColor, clearAlpha);\n renderer.autoClear = autoClear;\n if (native) { native.setRenderObjectFunction(renderObject ?? null); native.setMRT(mrt ?? null); }\n scene.background = background;\n if (hasBackgroundNode) Object.assign(scene, { backgroundNode });\n else Reflect.deleteProperty(scene, 'backgroundNode');\n scene.overrideMaterial = overrideMaterial;\n scene.name = sceneName;\n for (const { shadow, layers, autoUpdate, needsUpdate, remainingUpdate } of shadows) {\n shadow.camera.layers.mask = layers;\n shadow.autoUpdate = autoUpdate;\n shadow.needsUpdate = rendered ? needsUpdate || !!remainingUpdate : true;\n }\n if (globalShadow) {\n globalShadow.autoUpdate = globalAutoUpdate!;\n globalShadow.needsUpdate = rendered ? globalNeedsUpdate! : true;\n }\n }\n // Cancellation can arrive between this synchronous draw and readiness\n // settlement. The host will not reveal that model, so its static maps expire.\n return () => {\n for (const { shadow } of shadows) shadow.needsUpdate = true;\n if (globalShadow && renderer.shadowMap.enabled) globalShadow.needsUpdate = true;\n };\n}\n","import { Timer } from 'three';\nimport type { AnimationMixer, Object3D } from 'three';\n\ntype Binding = { mixer: AnimationMixer; enabled: boolean; afterFrame: () => void };\nconst bindings = new WeakMap<Object3D, Set<Binding>>();\n\n/** Register native playback with the existing scene renderer; never starts a loop. */\nexport function bindPlaybackRendering(model: Object3D, mixer: AnimationMixer, afterFrame: () => void) {\n const binding: Binding = { mixer, enabled: true, afterFrame };\n const entries = bindings.get(model) ?? new Set<Binding>();\n entries.add(binding);\n bindings.set(model, entries);\n return {\n setEnabled(enabled: boolean) { binding.enabled = enabled; },\n dispose() {\n entries.delete(binding);\n if (!entries.size) bindings.delete(model);\n },\n };\n}\n\n/** Called once by the Three render integration, using its native Timer. */\nexport function renderScenePlayback(scene: Object3D, timer: Timer): void {\n const mixers = new Set<AnimationMixer>();\n const active: Binding[] = [];\n scene.traverse((object) => {\n for (const binding of bindings.get(object) ?? []) {\n if (binding.enabled) { active.push(binding); mixers.add(binding.mixer); }\n }\n });\n for (const mixer of mixers) mixer.update(timer.getDelta());\n // Native finished callbacks run inside mixer iteration. Resource release and\n // observers must wait until every mixer has finished sampling this frame.\n for (const binding of active) binding.afterFrame();\n}\n\n/** Frame hook for an existing Three/R3F renderer. Does not create a render loop. */\nexport function createScenePlaybackFrame(scene: Object3D, document?: Document) {\n const timer = new Timer();\n if (document) timer.connect(document);\n let disposed = false;\n let initialized = false;\n return {\n onFrame(timestamp?: number) {\n if (disposed) return;\n timer.update(timestamp);\n // The first render establishes this renderer's timestamp origin.\n if (!initialized) { initialized = true; return; }\n renderScenePlayback(scene, timer);\n },\n dispose() { if (!disposed) { disposed = true; timer.dispose(); } },\n };\n}\n","/**\n * Self-contained DOM controls for DPthreeCameraController\n * No React dependencies - vanilla DOM manipulation\n */\nexport interface DOMControlRegion {\n name: string;\n parent?: string;\n children?: string[];\n}\n\nexport interface DOMControlsConfig {\n /** Container element to append controls to */\n container: HTMLElement;\n /** Callback when user selects a region */\n onRegionSelect: (name: string) => void;\n /** Initial list of regions */\n regions: DOMControlRegion[];\n /** Currently selected region */\n currentRegion?: string;\n /** Initial annotation-marker visibility */\n markersVisible?: boolean;\n /** Callback when the Markers checkbox is toggled */\n onMarkersVisibleChange?: (visible: boolean) => void;\n}\n\n/** Temporary AU preview regions must never appear in the View dropdown. */\nexport const RUNTIME_ANNOTATION_REGION_PREFIX = 'runtime:annotation:';\n\nexport function isRuntimeAnnotationRegionName(name: string): boolean {\n return name.startsWith(RUNTIME_ANNOTATION_REGION_PREFIX);\n}\n\nexport function filterCameraViewRegions<T extends { name: string }>(regions: T[]): T[] {\n return regions.filter((region) => !isRuntimeAnnotationRegionName(region.name));\n}\n\n/**\n * CSS styles for the DOM controls\n * Scoped with unique class prefix to avoid conflicts\n */\nconst STYLES = `\n.acc-controls {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.7);\n border-radius: 8px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.acc-select {\n background: rgba(255, 255, 255, 0.1);\n color: white;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n width: 160px;\n max-width: 160px;\n min-width: 160px;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='white' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n}\n\n.acc-markers {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n padding-left: 10px;\n border-left: 1px solid rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n font-size: 12px;\n user-select: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.acc-markers input {\n margin: 0;\n cursor: pointer;\n accent-color: #3182ce;\n}\n\n.acc-select:hover {\n background-color: rgba(255, 255, 255, 0.15);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n.acc-select:focus {\n border-color: #3182ce;\n box-shadow: 0 0 0 2px rgba(49, 130, 206, 0.3);\n}\n\n.acc-select option {\n background: #1a202c;\n color: white;\n padding: 8px;\n}\n\n.acc-label {\n color: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-right: 4px;\n}\n`;\n\n// Track if styles have been injected\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected || typeof document === 'undefined') return;\n const style = document.createElement('style');\n style.setAttribute('data-acc-styles', 'true');\n style.textContent = STYLES;\n document.head.appendChild(style);\n stylesInjected = true;\n}\n\n/**\n * Format region name for display\n * Converts snake_case to Title Case\n */\nfunction formatName(name: string): string {\n return name\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction getRegionDepth(\n region: DOMControlRegion,\n regionByName: Map<string, DOMControlRegion>,\n seen: Set<string> = new Set()\n): number {\n if (!region.parent || seen.has(region.name)) {\n return 0;\n }\n\n const parent = regionByName.get(region.parent);\n if (!parent) {\n return 0;\n }\n\n seen.add(region.name);\n return getRegionDepth(parent, regionByName, seen) + 1;\n}\n\nexport function buildRegionDisplayOptions(\n regions: DOMControlRegion[]\n): Array<{ name: string; label: string }> {\n const viewRegions = filterCameraViewRegions(regions);\n const regionByName = new Map(viewRegions.map((region) => [region.name, region]));\n\n return viewRegions.map((region) => {\n const depth = getRegionDepth(region, regionByName);\n const prefix = depth > 0 ? `${'-- '.repeat(depth)}` : '';\n return {\n name: region.name,\n label: `${prefix}${formatName(region.name)}`,\n };\n });\n}\n\n/**\n * CameraDOMControls - Self-contained DOM UI for region selection\n */\nexport class CameraDOMControls {\n private container: HTMLElement;\n private wrapper: HTMLDivElement;\n private select: HTMLSelectElement;\n private markersCheckbox: HTMLInputElement | null = null;\n private onRegionSelect: (name: string) => void;\n private onMarkersVisibleChange?: (visible: boolean) => void;\n\n constructor(config: DOMControlsConfig) {\n // Inject styles once\n injectStyles();\n\n this.container = config.container;\n this.onRegionSelect = config.onRegionSelect;\n this.onMarkersVisibleChange = config.onMarkersVisibleChange;\n\n // Create wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'acc-controls';\n\n // Create label\n const label = document.createElement('span');\n label.className = 'acc-label';\n label.textContent = 'View:';\n this.wrapper.appendChild(label);\n\n // Create select\n this.select = document.createElement('select');\n this.select.className = 'acc-select';\n this.populateSelect(config.regions, config.currentRegion);\n\n // Handle selection changes\n this.select.addEventListener('change', () => {\n this.onRegionSelect(this.select.value);\n });\n\n this.wrapper.appendChild(this.select);\n\n if (this.onMarkersVisibleChange) {\n const markersLabel = document.createElement('label');\n markersLabel.className = 'acc-markers';\n\n this.markersCheckbox = document.createElement('input');\n this.markersCheckbox.type = 'checkbox';\n this.markersCheckbox.checked = Boolean(config.markersVisible);\n this.markersCheckbox.setAttribute('aria-label', 'Show annotation markers');\n this.markersCheckbox.addEventListener('change', () => {\n this.onMarkersVisibleChange?.(this.markersCheckbox!.checked);\n });\n\n const markersText = document.createElement('span');\n markersText.textContent = 'Markers';\n\n markersLabel.appendChild(this.markersCheckbox);\n markersLabel.appendChild(markersText);\n this.wrapper.appendChild(markersLabel);\n }\n\n // Append to container\n // Ensure container has relative positioning for absolute positioning to work\n const containerStyle = window.getComputedStyle(this.container);\n if (containerStyle.position === 'static') {\n this.container.style.position = 'relative';\n }\n\n this.container.appendChild(this.wrapper);\n }\n\n /**\n * Populate select options\n */\n private populateSelect(regions: DOMControlRegion[], current?: string): void {\n this.select.innerHTML = '';\n\n const viewRegions = filterCameraViewRegions(regions);\n\n if (viewRegions.length === 0) {\n const option = document.createElement('option');\n option.value = '';\n option.textContent = 'No regions';\n option.disabled = true;\n this.select.appendChild(option);\n return;\n }\n\n buildRegionDisplayOptions(viewRegions).forEach(({ name, label }) => {\n const option = document.createElement('option');\n option.value = name;\n option.textContent = label;\n if (name === current) {\n option.selected = true;\n }\n this.select.appendChild(option);\n });\n }\n\n /**\n * Update available regions\n */\n updateRegions(regions: DOMControlRegion[], current?: string): void {\n this.populateSelect(regions, current);\n }\n\n /**\n * Sync Markers checkbox with controller visibility state.\n */\n setMarkersVisible(visible: boolean): void {\n if (!this.markersCheckbox || this.markersCheckbox.checked === visible) return;\n this.markersCheckbox.checked = visible;\n }\n\n /**\n * Set current region (updates select value)\n */\n setCurrentRegion(name: string): void {\n if (this.select.value !== name) {\n this.select.value = name;\n }\n }\n\n /**\n * Show/hide controls\n */\n setVisible(visible: boolean): void {\n this.wrapper.style.display = visible ? 'flex' : 'none';\n }\n\n /**\n * Check if controls are visible\n */\n isVisible(): boolean {\n return this.wrapper.style.display !== 'none';\n }\n\n /**\n * Cleanup and remove from DOM\n */\n dispose(): void {\n this.wrapper.remove();\n }\n}\n","import type * as THREE from 'three';\n\nconst SLICE_BUDGET_MS = 4;\n\n/**\n * Keep Three's native per-mesh raycast, including skinning, morphs and material\n * sides. Yield between meshes once a slice is spent; one mesh is indivisible.\n * A null result means the owning model/region load was replaced or disposed.\n */\nexport async function intersectMeshesInSlices(\n raycaster: THREE.Raycaster,\n meshes: readonly THREE.Mesh[],\n options: { isCurrent: () => boolean; yieldToPaint: () => Promise<void>; now?: () => number },\n): Promise<THREE.Intersection[] | null> {\n const now = options.now ?? (() => performance.now());\n let sliceStart = now();\n const hits: THREE.Intersection[] = [];\n for (const [index, mesh] of meshes.entries()) {\n if (!options.isCurrent()) return null;\n // Let Raycaster apply its native layer checks and Mesh/SkinnedMesh logic.\n // Accumulate separately so earlier meshes' hits aren't sorted repeatedly.\n for (const hit of raycaster.intersectObject(mesh, false)) hits.push(hit);\n if (!options.isCurrent()) return null;\n if (index < meshes.length - 1 && now() - sliceStart >= SLICE_BUDGET_MS) {\n await options.yieldToPaint();\n if (!options.isCurrent()) return null;\n sliceStart = now();\n }\n }\n if (!options.isCurrent()) return null;\n // Same stable distance ordering as Raycaster.intersectObjects(meshes, false).\n return hits.sort((left, right) => left.distance - right.distance);\n}\n","/** Continue in a task after paint, rather than in the animation-frame microtask. */\nexport function waitForCharacterLoadPaint(): Promise<void> {\n return new Promise((resolve) => {\n let frame: number | undefined;\n let task: ReturnType<typeof setTimeout> | undefined;\n const finish = () => {\n clearTimeout(fallback);\n if (task !== undefined) clearTimeout(task);\n if (frame !== undefined && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(frame);\n resolve();\n };\n // Hidden tabs can suspend rAF, including after the visibility check.\n const fallback = setTimeout(finish, 100);\n if (typeof requestAnimationFrame === 'function' &&\n (typeof document === 'undefined' || document.visibilityState !== 'hidden')) {\n frame = requestAnimationFrame(() => { task = setTimeout(finish, 0); });\n } else {\n task = setTimeout(finish, 0);\n }\n });\n}\n","export type AnimationFrameTask = (now: number) => boolean;\n\n/**\n * Runs multiple short UI animation tasks from one requestAnimationFrame loop.\n *\n * Tasks return true while they need another frame and false when complete.\n */\nexport class AnimationFrameTaskScheduler {\n private frameId: number | null = null;\n private readonly tasks = new Map<string, AnimationFrameTask>();\n\n get size(): number {\n return this.tasks.size;\n }\n\n has(key: string): boolean {\n return this.tasks.has(key);\n }\n\n schedule(key: string, task: AnimationFrameTask, runImmediately = true): void {\n this.cancel(key);\n\n if (runImmediately && !task(performance.now())) {\n return;\n }\n\n this.tasks.set(key, task);\n this.requestFrame();\n }\n\n cancel(key: string): void {\n this.tasks.delete(key);\n this.cancelFrameIfIdle();\n }\n\n cancelAll(): void {\n this.tasks.clear();\n this.cancelFrameIfIdle();\n }\n\n private requestFrame(): void {\n if (this.frameId !== null || this.tasks.size === 0) {\n return;\n }\n\n this.frameId = requestAnimationFrame(this.tick);\n }\n\n private readonly tick = (now: number): void => {\n this.frameId = null;\n\n for (const [key, task] of Array.from(this.tasks)) {\n if (!this.tasks.has(key) || !task(now)) {\n this.tasks.delete(key);\n }\n }\n\n this.requestFrame();\n };\n\n private cancelFrameIfIdle(): void {\n if (this.tasks.size > 0 || this.frameId === null) {\n return;\n }\n\n cancelAnimationFrame(this.frameId);\n this.frameId = null;\n }\n}\n","import type {\n AnnotationAnchoredRegion,\n AnnotationMarkerAnchor,\n Region,\n} from './types';\n\nexport type MarkerAnchorProjectionMode = 'legacy' | 'project' | 'skip';\n\nexport interface ResolvedMarkerAnchorRegion {\n region: AnnotationAnchoredRegion;\n anchor: AnnotationMarkerAnchor | null;\n source: 'legacy-region' | 'marker-anchor';\n projection: MarkerAnchorProjectionMode;\n useLegacyRegionSemantics: boolean;\n}\n\nfunction cloneRegion(region: Region): AnnotationAnchoredRegion {\n return {\n ...(region as AnnotationAnchoredRegion),\n };\n}\n\nfunction copyTargets(\n target: AnnotationAnchoredRegion,\n anchor: AnnotationMarkerAnchor,\n): AnnotationAnchoredRegion {\n const next = cloneRegion(target);\n\n if (anchor.bones) {\n next.bones = [...anchor.bones];\n }\n if (anchor.meshes) {\n next.meshes = [...anchor.meshes];\n }\n if (anchor.objects) {\n next.objects = [...anchor.objects];\n }\n\n return next;\n}\n\nfunction getExplicitMarkerAnchor(region: Region): AnnotationMarkerAnchor | null {\n return (region as AnnotationAnchoredRegion).markerAnchor ?? null;\n}\n\nfunction resolveExplicitProjection(anchor: AnnotationMarkerAnchor): MarkerAnchorProjectionMode {\n if (anchor.projectToSurface !== undefined) {\n return anchor.projectToSurface ? 'project' : 'skip';\n }\n\n if (anchor.type === 'point' || anchor.type === 'mesh') {\n return 'skip';\n }\n\n return 'project';\n}\n\n/**\n * Convert explicit marker-anchor intent into the legacy region target fields\n * that the current marker renderers understand.\n */\nexport function resolveMarkerAnchorRegion(region: Region): ResolvedMarkerAnchorRegion {\n const anchor = getExplicitMarkerAnchor(region);\n if (!anchor) {\n return {\n region: region as AnnotationAnchoredRegion,\n anchor: null,\n source: 'legacy-region',\n projection: 'legacy',\n useLegacyRegionSemantics: true,\n };\n }\n\n if (anchor.type === 'region') {\n return {\n region: region as AnnotationAnchoredRegion,\n anchor,\n source: 'marker-anchor',\n projection: anchor.projectToSurface === undefined\n ? 'legacy'\n : anchor.projectToSurface\n ? 'project'\n : 'skip',\n useLegacyRegionSemantics: true,\n };\n }\n\n if (anchor.type === 'point' && anchor.position) {\n return {\n region: {\n ...cloneRegion(region),\n bones: undefined,\n meshes: undefined,\n objects: undefined,\n customPosition: { ...anchor.position },\n },\n anchor,\n source: 'marker-anchor',\n projection: resolveExplicitProjection(anchor),\n useLegacyRegionSemantics: false,\n };\n }\n\n const next = copyTargets(\n {\n ...cloneRegion(region),\n bones: undefined,\n meshes: undefined,\n objects: undefined,\n customPosition: undefined,\n },\n anchor,\n );\n\n if (anchor.type === 'bone' && !next.bones) {\n next.bones = (region as AnnotationAnchoredRegion).bones;\n } else if (anchor.type === 'mesh' && !next.meshes) {\n next.meshes = (region as AnnotationAnchoredRegion).meshes;\n } else if (anchor.type === 'object' && !next.objects) {\n next.objects = (region as AnnotationAnchoredRegion).objects;\n } else if (anchor.type === 'face-center') {\n next.bones = next.bones ?? (region as AnnotationAnchoredRegion).bones;\n next.meshes = next.meshes ?? (region as AnnotationAnchoredRegion).meshes;\n }\n\n return {\n region: next,\n anchor,\n source: 'marker-anchor',\n projection: resolveExplicitProjection(anchor),\n useLegacyRegionSemantics: false,\n };\n}\n\nexport function shouldUseFaceCenterForMarkerAnchor(\n resolved: ResolvedMarkerAnchorRegion,\n): boolean {\n if (resolved.anchor?.type === 'face-center') {\n return true;\n }\n\n return resolved.useLegacyRegionSemantics && resolved.region.name.toLowerCase().includes('face');\n}\n\nexport function shouldProjectMarkerAnchorToSurface(\n resolved: ResolvedMarkerAnchorRegion,\n legacyDefault: boolean,\n): boolean {\n if (resolved.projection === 'legacy') {\n return legacyDefault;\n }\n\n return resolved.projection === 'project';\n}\n","import * as THREE from 'three';\nimport type { AnnotationAnchoredRegion, RuntimeAnnotationSide } from './types';\n\nconst MORPH_ANCHOR_DELTA_EPSILON = 1e-5;\nconst MORPH_ANCHOR_CANDIDATE_DELTA_RATIO = 0.06;\nconst MORPH_ANCHOR_SIGNIFICANT_DELTA_RATIO = 0.18;\nconst MORPH_ANCHOR_MIN_SEMANTIC_CANDIDATES = 2;\n\ntype MorphAnchorCandidate = {\n point: THREE.Vector3;\n magnitude: number;\n};\n\ntype MorphAnchorVerticalBand = {\n min: number;\n max: number;\n};\n\nexport function getRuntimeAnnotationSide(region: AnnotationAnchoredRegion): RuntimeAnnotationSide | null {\n const side = region.runtimeAnnotation?.side;\n return side === 'left' || side === 'right' || side === 'center' ? side : null;\n}\n\nfunction getMorphPositionAttribute(\n mesh: THREE.Mesh,\n morphName: string,\n): THREE.BufferAttribute | THREE.InterleavedBufferAttribute | null {\n const morphIndex = mesh.morphTargetDictionary?.[morphName];\n if (morphIndex == null) return null;\n\n const morphPositions = mesh.geometry.morphAttributes.position;\n return morphPositions?.[morphIndex] ?? null;\n}\n\nfunction getMorphDeltaMagnitudeAtIndex(\n mesh: THREE.Mesh,\n basePositions: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n morphAttribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n index: number,\n): number {\n const relative = mesh.geometry.morphTargetsRelative;\n const dx = morphAttribute.getX(index) - (relative ? 0 : basePositions.getX(index));\n const dy = morphAttribute.getY(index) - (relative ? 0 : basePositions.getY(index));\n const dz = morphAttribute.getZ(index) - (relative ? 0 : basePositions.getZ(index));\n return Math.hypot(dx, dy, dz);\n}\n\nfunction getRuntimeAnnotationSearchText(region: AnnotationAnchoredRegion): string {\n return [\n region.name,\n region.label,\n ...(region.runtimeAnnotation?.morphNames ?? []),\n ].join(' ').toLowerCase();\n}\n\nfunction resolveMorphAnchorVerticalBand(region: AnnotationAnchoredRegion): MorphAnchorVerticalBand | null {\n const text = getRuntimeAnnotationSearchText(region);\n\n if (/brow|forehead|frontalis/.test(text)) {\n return { min: 0.75, max: 1 };\n }\n if (/eye|lid|blink|squint|wide|occlusion|tearline/.test(text)) {\n return { min: 0.45, max: 0.9 };\n }\n if (/nose|nasal|sneer/.test(text)) {\n return { min: 0.35, max: 0.8 };\n }\n if (/cheek/.test(text)) {\n return { min: 0.45, max: 0.9 };\n }\n if (/jaw|chin/.test(text)) {\n return { min: 0, max: 0.3 };\n }\n if (/mouth|lip|smile|frown|dimple|pucker|stretch|press|funnel|roll|shrug|close/.test(text)) {\n return { min: 0, max: 0.45 };\n }\n if (/tongue/.test(text)) {\n return { min: 0, max: 0.5 };\n }\n\n return null;\n}\n\nfunction getQuantile(sortedValues: number[], ratio: number): number | null {\n if (sortedValues.length === 0) return null;\n const index = Math.min(\n sortedValues.length - 1,\n Math.max(0, Math.floor((sortedValues.length - 1) * ratio)),\n );\n return sortedValues[index] ?? null;\n}\n\nfunction selectSemanticMorphAnchorCandidates(\n region: AnnotationAnchoredRegion,\n candidates: MorphAnchorCandidate[],\n): MorphAnchorCandidate[] | null {\n const band = resolveMorphAnchorVerticalBand(region);\n if (!band || candidates.length < MORPH_ANCHOR_MIN_SEMANTIC_CANDIDATES) {\n return null;\n }\n\n const sortedY = candidates\n .map((candidate) => candidate.point.y)\n .sort((a, b) => a - b);\n const minY = getQuantile(sortedY, band.min);\n const maxY = getQuantile(sortedY, band.max);\n if (minY == null || maxY == null) return null;\n\n const selected = candidates.filter((candidate) =>\n candidate.point.y >= minY - MORPH_ANCHOR_DELTA_EPSILON &&\n candidate.point.y <= maxY + MORPH_ANCHOR_DELTA_EPSILON\n );\n\n return selected.length >= MORPH_ANCHOR_MIN_SEMANTIC_CANDIDATES ? selected : null;\n}\n\nfunction getWeightedMorphAnchorCenter(candidates: MorphAnchorCandidate[]): THREE.Vector3 | null {\n const weightedCenter = new THREE.Vector3();\n let totalWeight = 0;\n\n for (const candidate of candidates) {\n weightedCenter.addScaledVector(candidate.point, candidate.magnitude);\n totalWeight += candidate.magnitude;\n }\n\n return totalWeight > 0\n ? weightedCenter.multiplyScalar(1 / totalWeight)\n : null;\n}\n\nexport function getRuntimeAUMorphAnchorPoint(\n region: AnnotationAnchoredRegion,\n mesh: THREE.Mesh,\n): THREE.Vector3 | null {\n const runtimeAnnotation = region.runtimeAnnotation;\n const morphNames = runtimeAnnotation?.morphNames;\n if (\n runtimeAnnotation?.targetType !== 'au' ||\n !Array.isArray(morphNames) ||\n morphNames.length === 0\n ) {\n return null;\n }\n\n const basePositions = mesh.geometry.getAttribute('position');\n if (!basePositions) return null;\n\n const morphAttributes = morphNames\n .map((morphName) => getMorphPositionAttribute(mesh, morphName))\n .filter((attribute): attribute is THREE.BufferAttribute | THREE.InterleavedBufferAttribute => Boolean(attribute));\n\n if (morphAttributes.length === 0) return null;\n\n const vertexCount = basePositions.count;\n const magnitudes = new Float32Array(vertexCount);\n let maxMagnitude = 0;\n\n for (const morphAttribute of morphAttributes) {\n for (let index = 0; index < vertexCount; index += 1) {\n const magnitude = getMorphDeltaMagnitudeAtIndex(mesh, basePositions, morphAttribute, index);\n if (magnitude <= magnitudes[index]) continue;\n\n magnitudes[index] = magnitude;\n maxMagnitude = Math.max(maxMagnitude, magnitude);\n }\n }\n\n if (maxMagnitude <= MORPH_ANCHOR_DELTA_EPSILON) return null;\n\n const significantThreshold = Math.max(\n MORPH_ANCHOR_DELTA_EPSILON,\n maxMagnitude * MORPH_ANCHOR_SIGNIFICANT_DELTA_RATIO,\n );\n const candidateThreshold = Math.max(\n MORPH_ANCHOR_DELTA_EPSILON,\n maxMagnitude * MORPH_ANCHOR_CANDIDATE_DELTA_RATIO,\n );\n const skinnedMesh = mesh as THREE.SkinnedMesh;\n mesh.updateWorldMatrix(true, false);\n if (skinnedMesh.isSkinnedMesh && skinnedMesh.skeleton) {\n skinnedMesh.skeleton.update();\n }\n\n const vertex = new THREE.Vector3();\n const candidates: MorphAnchorCandidate[] = [];\n const fallbackCandidates: MorphAnchorCandidate[] = [];\n let strongestIndex = -1;\n let strongestMagnitude = 0;\n\n for (let index = 0; index < vertexCount; index += 1) {\n const magnitude = magnitudes[index] ?? 0;\n if (magnitude > strongestMagnitude) {\n strongestMagnitude = magnitude;\n strongestIndex = index;\n }\n if (magnitude < candidateThreshold) continue;\n\n mesh.getVertexPosition(index, vertex);\n vertex.applyMatrix4(mesh.matrixWorld);\n const candidate = {\n point: vertex.clone(),\n magnitude,\n };\n candidates.push(candidate);\n if (magnitude >= significantThreshold) {\n fallbackCandidates.push(candidate);\n }\n }\n\n const selectedCandidates = selectSemanticMorphAnchorCandidates(region, candidates)\n ?? (fallbackCandidates.length > 0 ? fallbackCandidates : candidates);\n const weightedCenter = getWeightedMorphAnchorCenter(selectedCandidates);\n if (weightedCenter) return weightedCenter;\n\n if (strongestIndex < 0) return null;\n mesh.getVertexPosition(strongestIndex, vertex);\n return vertex.applyMatrix4(mesh.matrixWorld).clone();\n}\n\nexport function getRuntimeAUMeshSideOffset(\n region: AnnotationAnchoredRegion,\n sideSign: number,\n modelSize: THREE.Vector3,\n): THREE.Vector3 | null {\n const side = getRuntimeAnnotationSide(region);\n if (\n region.runtimeAnnotation?.targetType !== 'au' ||\n (side !== 'left' && side !== 'right')\n ) {\n return null;\n }\n\n const height = modelSize.y || 1;\n const width = modelSize.x || height * 0.35;\n const depth = modelSize.z || height * 0.25;\n const text = [\n region.name,\n region.label,\n ...(region.runtimeAnnotation.morphNames ?? []),\n ].join(' ').toLowerCase();\n\n const horizontalOffset = Math.max(\n Math.min(width * 0.18, height * 0.08),\n height * 0.035,\n );\n const depthOffset = Math.max(depth * 0.08, height * 0.025);\n let verticalOffset = height * 0.02;\n\n if (/brow|forehead|frontalis|eye|lid|blink|squint/.test(text)) {\n verticalOffset = height * 0.1;\n } else if (/nose|cheek|nasal/.test(text)) {\n verticalOffset = height * 0.04;\n } else if (/mouth|lip|smile|frown|jaw|chin|dimple|pucker|stretch/.test(text)) {\n verticalOffset = -height * 0.06;\n }\n\n return new THREE.Vector3(\n sideSign * horizontalOffset,\n verticalOffset,\n depthOffset,\n );\n}\n","import { boneResolutionProfile } from './boneResolutionProfile';\nimport {\n detectAnnotationLaterality,\n fuzzyNameMatch,\n getDefaultAnnotationLaterality,\n getModelLocalOrbitAngle,\n getSemanticHorizontalSign,\n getSemanticHorizontalSignForSide,\n getWorldDirectionForCameraAngle,\n resolveBoneNames,\n resolveFaceCenter,\n resolveRegionCameraAngle,\n resolveRegionVisibilityCameraAngle,\n toWorldDirection,\n type AnnotationLaterality,\n type RustAnnotationCameraCore,\n} from './adapter';\nimport * as THREE from 'three';\nimport type {\n Region,\n CharacterConfig,\n MarkerStyleOverrides,\n LineConfig,\n LineStyle,\n LineCurve,\n NamedDirection,\n ExpandAnimation,\n ExpandedRegionState,\n MarkerGroup,\n FallbackConfig,\n AnnotationAnchoredRegion,\n} from './types';\nimport { intersectMeshesInSlices } from './markerSurfaceRaycast';\nimport { waitForCharacterLoadPaint } from './loadFrame';\nimport { AnimationFrameTaskScheduler } from './animationFrameTaskScheduler';\nimport { getAnnotationCameraCore, requireAnnotationCameraCore } from './annotationCameraCore';\nimport {\n resolveMarkerAnchorRegion,\n shouldProjectMarkerAnchorToSurface,\n shouldUseFaceCenterForMarkerAnchor,\n} from './annotationAnchorModel';\nimport {\n getRuntimeAUMorphAnchorPoint,\n getRuntimeAnnotationSide,\n getRuntimeAUMeshSideOffset,\n} from './runtimeAnnotationSidePreview';\n\ninterface MarkerConfig {\n markerRadius?: number;\n markerColor?: number;\n lineColor?: number;\n lineLength?: number;\n labelColor?: string;\n labelBackground?: string;\n labelFontSize?: number;\n labelScale?: number;\n}\n\nconst DEFAULT_CONFIG: Required<MarkerConfig> = {\n markerRadius: 0.008, // Smaller, more professional dots\n markerColor: 0x4299e1,\n lineColor: 0x4299e1,\n lineLength: 0.5,\n labelColor: '#ffffff',\n labelBackground: 'rgba(0, 0, 0, 0.75)',\n labelFontSize: 32,\n labelScale: 0.04,\n};\n\n// Reference model height for scaling (human character is ~1.8 units tall)\nconst REFERENCE_MODEL_HEIGHT = 1.8;\n\n// Zoom threshold for scaling markers (relative to model height)\n// When camera is closer than this ratio of model height, markers shrink\nconst ZOOM_THRESHOLD_RATIO = 0.8;\nconst ZOOMED_IN_SPHERE_SCALE = 0.25; // Spheres get much smaller (25%) when zoomed in\nconst ZOOMED_IN_LABEL_SCALE = 0.85; // Labels stay readable - only slightly smaller\nconst ZOOMED_IN_LINE_SCALE = 0.3; // Lines get much shorter when zoomed in\n\nconst VISIBILITY_ANIMATION_DURATION = 220;\nconst POSITION_EPSILON_SQUARED = 1e-8;\nconst GROUP_VISIBILITY_ANIMATION_KEY = 'marker-group';\n\nfunction waitForNextMarkerFrame(): Promise<void> {\n return new Promise((resolve) => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => resolve());\n return;\n }\n\n globalThis.setTimeout(resolve, 0);\n });\n}\n\ntype MarkerVisibilityAnimationState = {\n arrow?: { object: THREE.Mesh; opacity: number };\n label?: { object: THREE.Sprite; opacity: number; scale: THREE.Vector3 };\n line?: { object: THREE.Line; opacity: number };\n sphere?: { object: THREE.Mesh; opacity: number };\n};\n\nexport function shouldShow3DMarker(params: {\n name: string;\n hiddenChildren: Set<string>;\n soloedMarker: string | null;\n markerAngle?: number;\n currentCameraAngle?: number;\n}): boolean {\n return requireAnnotationCameraCore().shouldShowMarker({\n hiddenChild: params.hiddenChildren.has(params.name),\n solo: params.soloedMarker === null\n ? 'none'\n : params.soloedMarker === params.name ? 'soloed' : 'other-soloed',\n markerAngle: params.markerAngle,\n currentCameraAngle: params.currentCameraAngle,\n });\n}\n\nfunction getAnnotationRegionLabel(region: Region): string | undefined {\n const label = (region as AnnotationAnchoredRegion).label;\n if (typeof label !== 'string') return undefined;\n const trimmed = label.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction isFiniteClipPoint(point: THREE.Vector4): boolean {\n return Number.isFinite(point.x) && Number.isFinite(point.y) &&\n Number.isFinite(point.z) && Number.isFinite(point.w);\n}\n\nexport function resolveViewportConstrainedLineScale(params: {\n startClip: THREE.Vector4;\n endClip: THREE.Vector4;\n safeX: number;\n safeY: number;\n minLengthRatio?: number;\n}): { visible: boolean; lineScale: number } {\n // Reject invalid projections before crossing the float32 Wasm boundary.\n if (!isFiniteClipPoint(params.endClip)) {\n return { visible: false, lineScale: 0 };\n }\n return requireAnnotationCameraCore().resolveViewportConstrainedLineScale({\n ...params,\n startClip: params.startClip.toArray(),\n endClip: params.endClip.toArray(),\n });\n}\n\nexport function resolveViewportSafeBounds(params: {\n labelScaleX: number;\n labelScaleY: number;\n projectionXScale: number;\n projectionYScale: number;\n viewportWidth: number;\n viewportHeight: number;\n edgePaddingPx?: number;\n}): { safeX: number; safeY: number } {\n return requireAnnotationCameraCore().resolveViewportSafeBounds(params);\n}\n\n/**\n * Pure 3D visual markers for annotations.\n *\n * SIMPLE RULE: Lines always point AWAY from model center.\n * - Horizontal: left annotations go left, right go right\n * - Vertical: high annotations go up, low go down\n */\nexport class DPthree3DMarkers {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private domElement: HTMLElement;\n private model: THREE.Object3D | null = null;\n private regions: Region[] = [];\n private currentRegion: string | null = null;\n private onSelect: (name: string) => void;\n private config: Required<MarkerConfig>;\n\n private markerGroup: THREE.Group;\n private markerMeshes: Map<string, THREE.Mesh> = new Map();\n private lineMeshes: Map<string, THREE.Line> = new Map();\n private lineEndpoints: Map<string, { start: THREE.Vector3; end: THREE.Vector3; direction: THREE.Vector3 }> = new Map();\n private labelSprites: Map<string, THREE.Sprite> = new Map();\n private labelScales: Map<string, { x: number; y: number }> = new Map();\n\n // Store the original line length (before zoom scaling) for each marker\n private originalLineLengths: Map<string, number> = new Map();\n // Store direct bone references and local offsets for efficient animation updates\n private boneRefs: Map<string, THREE.Object3D> = new Map();\n private localOffsets: Map<string, THREE.Vector3> = new Map(); // Offset in bone-local space\n\n // Model bounds - cached once when model is set\n private modelCenter = new THREE.Vector3();\n private modelSize = new THREE.Vector3();\n private modelMeshes: THREE.Mesh[] = [];\n private regionLoadHasFreshMatrices = false;\n\n // Zoom-based scaling state (only updates when crossing threshold)\n private isZoomedIn = false;\n private zoomThreshold = 1.0; // Calculated from model size\n private autoCollapseThreshold = 2.0; // Calculated from model size - collapse expanded regions when zoomed out\n private lastCameraDistance = -1; // Cache to avoid unnecessary checks\n private markerLayoutDirty = false;\n private visibilityAnimationActive = false;\n private readonly visibilityAnimationScheduler = new AnimationFrameTaskScheduler();\n private visibilityAnimationStates: MarkerVisibilityAnimationState[] = [];\n private activeMarkerVisibilityAnimations = new Set<string>();\n private markerVisibilityAnimationStates: Map<string, MarkerVisibilityAnimationState> = new Map();\n private markerTargetVisibility: Map<string, boolean> = new Map();\n private markerAngleGateVisibility: Map<string, boolean> = new Map();\n private markerViewportVisibility: Map<string, boolean> = new Map();\n private hasCameraAngleUpdateSnapshot = false;\n private lastCameraAngleUpdatePosition = new THREE.Vector3();\n private lastCameraAngleUpdateQuaternion = new THREE.Quaternion();\n\n private raycaster = new THREE.Raycaster();\n private mouse = new THREE.Vector2();\n private scratchClipStart = new THREE.Vector4();\n private scratchClipEnd = new THREE.Vector4();\n private readonly scratchClipStartValues = [0, 0, 0, 0];\n private readonly scratchClipEndValues = [0, 0, 0, 0];\n private scratchWorldEnd = new THREE.Vector3();\n private scratchConstrainedEnd = new THREE.Vector3();\n private tempSurfacePoint = new THREE.Vector3();\n private scratchArrowDirection = new THREE.Vector3();\n private scratchArrowQuaternion = new THREE.Quaternion();\n private arrowUp = new THREE.Vector3(0, 1, 0);\n\n // === CUSTOMIZATION STATE ===\n // Character-level defaults (from config)\n private charLineDefaults: LineConfig = {};\n private charMarkerDefaults: Partial<MarkerStyleOverrides> = {};\n\n // Resolved styles per region (cached for performance)\n private resolvedStyles: Map<string, Required<MarkerStyleOverrides>> = new Map();\n\n // Expanding anchors state\n private expandedRegions: Map<string, boolean> = new Map();\n private parentChildIndex: Map<string, string[]> = new Map(); // parent -> children\n private childParentIndex: Map<string, string> = new Map(); // child -> parent\n private hiddenChildren: Set<string> = new Set();\n\n // Solo mode\n private soloedMarker: string | null = null;\n\n // Fallback markers\n private markerGroups: MarkerGroup[] = [];\n private groupVisibility: Map<string, Set<string>> = new Map(); // groupId -> visible region names\n\n // Arrow head meshes (for styled lines)\n private arrowMeshes: Map<string, THREE.Mesh> = new Map();\n\n // Character config for bone name resolution\n private characterConfig: CharacterConfig | null = null;\n private laterality: AnnotationLaterality = getDefaultAnnotationLaterality();\n private regionLoadGeneration = 0;\n\n constructor(inputConfig: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n domElement: HTMLElement;\n onSelect: (name: string) => void;\n markerConfig?: MarkerConfig;\n }) {\n this.scene = inputConfig.scene;\n this.camera = inputConfig.camera;\n this.domElement = inputConfig.domElement;\n this.onSelect = inputConfig.onSelect;\n this.config = { ...DEFAULT_CONFIG, ...inputConfig.markerConfig };\n\n this.markerGroup = new THREE.Group();\n this.markerGroup.name = 'DPthree3DMarkers';\n this.scene.add(this.markerGroup);\n\n this.domElement.addEventListener('click', this.onClick);\n }\n\n /** Preserve marker state while a scene replaces its renderer canvas. */\n setDomElement(element: HTMLElement): void {\n if (element === this.domElement) return;\n this.domElement.removeEventListener('click', this.onClick);\n this.domElement = element;\n this.domElement.addEventListener('click', this.onClick);\n }\n\n setModel(model: THREE.Object3D): void {\n this.regionLoadGeneration += 1;\n this.regionLoadHasFreshMatrices = false;\n this.model = model;\n // Force update of world matrices before computing bounds\n model.updateMatrixWorld(true);\n this.modelMeshes = [];\n model.traverse((object) => {\n if ((object as THREE.Mesh).isMesh) {\n this.modelMeshes.push(object as THREE.Mesh);\n }\n });\n // Cache model bounds\n const box = new THREE.Box3().setFromObject(model);\n box.getCenter(this.modelCenter);\n box.getSize(this.modelSize);\n\n // Calculate zoom threshold based on model height\n this.zoomThreshold = this.modelSize.y * ZOOM_THRESHOLD_RATIO;\n // Auto-collapse threshold is 2.5x the zoom threshold - when zoomed out this far, collapse all expanded regions\n this.autoCollapseThreshold = this.zoomThreshold * 2.5;\n this.lastCameraDistance = -1; // Reset to force recalculation\n this.isZoomedIn = false;\n this.hasCameraAngleUpdateSnapshot = false;\n this.refreshLaterality();\n }\n\n async loadRegions(config: CharacterConfig, options: { sliceSurfaceQueries?: boolean } = {}): Promise<void> {\n const loadGeneration = ++this.regionLoadGeneration;\n const loadModel = this.model;\n const annotationCameraCore = await getAnnotationCameraCore();\n if (loadGeneration !== this.regionLoadGeneration || this.model !== loadModel) {\n return;\n }\n\n console.log(`[3DMarkers] loadRegions: ${config.characterId}, ${(config.regions ?? []).length} regions, model loaded: ${!!this.model}`);\n this.clear();\n const activeLoadGeneration = this.regionLoadGeneration;\n const isCurrent = () => activeLoadGeneration === this.regionLoadGeneration && this.model === loadModel;\n this.regions = config.regions ?? [];\n this.characterConfig = config;\n this.model?.updateMatrixWorld(true);\n this.regionLoadHasFreshMatrices = true;\n this.refreshLaterality();\n\n // Store character-level defaults\n this.charLineDefaults = config.lineDefaults || {};\n this.charMarkerDefaults = config.markerDefaults || {};\n this.markerGroups = config.markerGroups || [];\n\n // Build parent/child index\n this.parentChildIndex.clear();\n this.childParentIndex.clear();\n this.hiddenChildren.clear();\n for (const region of (config.regions ?? [])) {\n if (region.children && region.children.length > 0) {\n this.parentChildIndex.set(region.name, region.children);\n for (const childName of region.children) {\n this.childParentIndex.set(childName, region.name);\n this.hiddenChildren.add(childName);\n }\n }\n }\n\n // Resolve and cache styles for each region\n this.resolvedStyles.clear();\n for (const region of (config.regions ?? [])) {\n this.resolvedStyles.set(region.name, this.resolveRegionStyle(region));\n }\n\n // Initialize group visibility tracking\n this.groupVisibility.clear();\n for (const group of this.markerGroups) {\n this.groupVisibility.set(group.groupId, new Set());\n }\n\n try {\n // Create markers (children start hidden if they have a parent)\n for (const [index, region] of (config.regions ?? []).entries()) {\n if (!isCurrent()) {\n return;\n }\n\n const hasParent = this.childParentIndex.has(region.name);\n // Only initial reveal has a stable pose across render opportunities.\n // Interactive rebuilds preserve their synchronous surface sampling.\n if (options.sliceSurfaceQueries) {\n await this.createMarkerInSlices(region, hasParent, () => isCurrent() && this.regions.includes(region));\n } else {\n this.createMarker(region, hasParent);\n }\n if (!isCurrent()) return;\n\n // Marker placement performs geometry raycasts and label rasterization.\n // Yield between regions so it cannot monopolize the frame that begins\n // or completes the character's intro camera transition.\n if (index < (config.regions ?? []).length - 1) {\n await waitForNextMarkerFrame();\n }\n }\n\n if (!isCurrent()) {\n return;\n }\n\n // After all markers are created, separate any that are too close together\n this.separateOverlappingMarkers(annotationCameraCore);\n this.markerLayoutDirty = true;\n this.update();\n\n console.log(`[3DMarkers] loadRegions complete. Created markers for:`, Array.from(this.markerMeshes.keys()));\n console.log(`[3DMarkers] lineEndpoints:`, Array.from(this.lineEndpoints.keys()));\n console.log(`[3DMarkers] resolvedStyles:`, Array.from(this.resolvedStyles.keys()));\n } finally {\n if (isCurrent()) {\n this.regionLoadHasFreshMatrices = false;\n }\n }\n }\n\n /**\n * Update a region's configuration and recreate its marker.\n * This is the general method for updating any region properties.\n *\n * @param regionName - Name of the region to update\n * @param update - Partial region config to merge with existing config\n */\n updateRegion(regionName: string, update: Partial<Region>): void {\n console.log(`[3DMarkers] updateRegion: ${regionName}`, update);\n\n // Find the region\n const regionIndex = this.regions.findIndex(r => r.name === regionName);\n if (regionIndex === -1) {\n const newRegion: Region = { name: regionName, ...update };\n this.regions = [...this.regions, newRegion];\n if (this.characterConfig) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: [...(this.characterConfig.regions ?? []), newRegion],\n };\n }\n this.refreshLaterality();\n this.resolvedStyles.set(regionName, this.resolveRegionStyle(newRegion));\n const hasParent = this.childParentIndex.has(newRegion.name);\n this.createMarker(newRegion, hasParent);\n this.hasCameraAngleUpdateSnapshot = false;\n console.log(`[3DMarkers] Region \"${regionName}\" marker created`);\n return;\n }\n\n // Merge update with existing region config\n this.regions[regionIndex] = {\n ...this.regions[regionIndex],\n ...update,\n };\n\n // Also update characterConfig if it exists\n if (this.characterConfig?.regions) {\n const configRegionIndex = this.characterConfig.regions.findIndex(r => r.name === regionName);\n if (configRegionIndex !== -1) {\n this.characterConfig.regions[configRegionIndex] = {\n ...this.characterConfig.regions[configRegionIndex],\n ...update,\n };\n }\n }\n\n this.refreshLaterality();\n this.resolvedStyles.set(regionName, this.resolveRegionStyle(this.regions[regionIndex]));\n\n // Remove and recreate the marker\n this.removeMarkerComponents(regionName);\n\n // Recreate the marker with updated configuration\n const region = this.regions[regionIndex];\n const hasParent = this.childParentIndex.has(region.name);\n this.createMarker(region, hasParent);\n this.hasCameraAngleUpdateSnapshot = false;\n\n console.log(`[3DMarkers] Region \"${regionName}\" marker recreated with updated config`);\n }\n\n removeRegion(regionName: string): void {\n const regionIndex = this.regions.findIndex(r => r.name === regionName);\n if (regionIndex !== -1) {\n this.regions = this.regions.filter((region) => region.name !== regionName);\n }\n\n if (this.characterConfig?.regions) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: this.characterConfig.regions.filter((region) => region.name !== regionName),\n };\n }\n\n this.resolvedStyles.delete(regionName);\n this.parentChildIndex.delete(regionName);\n this.childParentIndex.delete(regionName);\n this.hiddenChildren.delete(regionName);\n this.removeMarkerComponents(regionName);\n this.hasCameraAngleUpdateSnapshot = false;\n }\n\n /**\n * Remove all marker components for a region (marker, line, label, bone refs)\n */\n private removeMarkerComponents(regionName: string): void {\n // Remove old marker for this region (markers are in markerGroup, not scene)\n const oldMarker = this.markerMeshes.get(regionName);\n if (oldMarker) {\n this.markerGroup.remove(oldMarker);\n this.markerMeshes.delete(regionName);\n }\n\n // Remove old line mesh (lines are in markerGroup, not scene)\n const oldLine = this.lineMeshes.get(regionName);\n if (oldLine) {\n this.markerGroup.remove(oldLine);\n this.lineMeshes.delete(regionName);\n }\n\n // Remove old line endpoint data\n this.lineEndpoints.delete(regionName);\n this.originalLineLengths.delete(regionName);\n\n // Remove old label sprite (labels are in markerGroup, not scene)\n const oldLabel = this.labelSprites.get(regionName);\n if (oldLabel) {\n this.markerGroup.remove(oldLabel);\n this.labelSprites.delete(regionName);\n this.labelScales.delete(regionName);\n }\n\n // Remove old arrow if exists\n const oldArrow = this.arrowMeshes.get(regionName);\n if (oldArrow) {\n this.markerGroup.remove(oldArrow);\n this.arrowMeshes.delete(regionName);\n }\n\n // Remove old bone reference and offset\n this.boneRefs.delete(regionName);\n this.localOffsets.delete(regionName);\n this.markerTargetVisibility.delete(regionName);\n this.markerAngleGateVisibility.delete(regionName);\n this.markerViewportVisibility.delete(regionName);\n }\n\n updateRegionMeshes(regionName: string, meshNames: string[]): void {\n console.log(`[3DMarkers] updateRegionMeshes: ${regionName} -> ${meshNames.join(', ')}`);\n this.updateRegion(regionName, { meshes: meshNames });\n }\n\n /**\n * Reposition an existing marker to a new position.\n * This moves the marker, line, and label without recreating them.\n *\n * @param regionName - Name of the region to reposition\n * @param newPosition - New world position for the marker\n */\n repositionMarker(regionName: string, newPosition: THREE.Vector3): void {\n console.log(`[3DMarkers] repositionMarker: ${regionName} -> (${newPosition.x.toFixed(3)}, ${newPosition.y.toFixed(3)}, ${newPosition.z.toFixed(3)})`);\n\n const marker = this.markerMeshes.get(regionName);\n\n if (!marker) {\n console.warn(`[3DMarkers] repositionMarker: No marker found for \"${regionName}\"`);\n return;\n }\n\n marker.position.copy(newPosition);\n this.updateMarkerLineLayout(regionName);\n\n console.log(`[3DMarkers] Marker \"${regionName}\" repositioned`);\n }\n\n /**\n * Get the current position of a marker\n */\n getMarkerPosition(regionName: string): THREE.Vector3 | null {\n const marker = this.markerMeshes.get(regionName);\n return marker ? marker.position.clone() : null;\n }\n\n /**\n * Resolve the effective style for a region by merging:\n * global defaults -> character defaults -> region style\n */\n private resolveRegionStyle(region: Region): Required<MarkerStyleOverrides> {\n const defaults: Required<MarkerStyleOverrides> = {\n markerColor: this.config.markerColor,\n markerRadius: this.config.markerRadius,\n lineColor: this.config.lineColor,\n labelColor: this.config.labelColor,\n labelBackground: this.config.labelBackground,\n labelFontSize: this.config.labelFontSize,\n opacity: 1,\n lineDirection: 'radial', // Default: from model center\n line: {\n style: 'solid',\n curve: 'straight',\n arrowHead: false,\n thickness: 2,\n length: this.config.lineLength,\n },\n };\n\n // Merge character-level defaults\n const charDefaults = this.charMarkerDefaults;\n if (charDefaults.markerColor !== undefined) defaults.markerColor = charDefaults.markerColor;\n if (charDefaults.markerRadius !== undefined) defaults.markerRadius = charDefaults.markerRadius;\n if (charDefaults.lineColor !== undefined) defaults.lineColor = charDefaults.lineColor;\n if (charDefaults.labelColor !== undefined) defaults.labelColor = charDefaults.labelColor;\n if (charDefaults.labelBackground !== undefined) defaults.labelBackground = charDefaults.labelBackground;\n if (charDefaults.labelFontSize !== undefined) defaults.labelFontSize = charDefaults.labelFontSize;\n if (charDefaults.opacity !== undefined) defaults.opacity = charDefaults.opacity;\n if (charDefaults.lineDirection !== undefined) defaults.lineDirection = charDefaults.lineDirection;\n if (charDefaults.line) {\n defaults.line = { ...defaults.line, ...charDefaults.line };\n }\n\n // Merge character-level line defaults\n if (this.charLineDefaults.style !== undefined) defaults.line.style = this.charLineDefaults.style;\n if (this.charLineDefaults.curve !== undefined) defaults.line.curve = this.charLineDefaults.curve;\n if (this.charLineDefaults.arrowHead !== undefined) defaults.line.arrowHead = this.charLineDefaults.arrowHead;\n if (this.charLineDefaults.thickness !== undefined) defaults.line.thickness = this.charLineDefaults.thickness;\n if (this.charLineDefaults.length !== undefined) defaults.line.length = this.charLineDefaults.length;\n\n // Merge region-level style overrides\n const regionStyle = region.style || {};\n if (regionStyle.markerColor !== undefined) defaults.markerColor = regionStyle.markerColor;\n if (regionStyle.markerRadius !== undefined) defaults.markerRadius = regionStyle.markerRadius;\n if (regionStyle.lineColor !== undefined) defaults.lineColor = regionStyle.lineColor;\n if (regionStyle.labelColor !== undefined) defaults.labelColor = regionStyle.labelColor;\n if (regionStyle.labelBackground !== undefined) defaults.labelBackground = regionStyle.labelBackground;\n if (regionStyle.labelFontSize !== undefined) defaults.labelFontSize = regionStyle.labelFontSize;\n if (regionStyle.opacity !== undefined) defaults.opacity = regionStyle.opacity;\n if (regionStyle.lineDirection !== undefined) defaults.lineDirection = regionStyle.lineDirection;\n if (regionStyle.line) {\n defaults.line = { ...defaults.line, ...regionStyle.line };\n }\n\n // Leaf regions (no children) use dashed lines by default\n if (!region.children || region.children.length === 0) {\n defaults.line.style = 'dashed';\n }\n\n return defaults;\n }\n\n /**\n * Resolve a named direction or custom vector to a THREE.Vector3.\n * For 'camera' direction, returns direction from position toward current camera.\n */\n private resolveLineDirection(\n direction: NamedDirection | { x: number; y: number; z: number },\n position: THREE.Vector3\n ): THREE.Vector3 {\n if (typeof direction === 'object') {\n return new THREE.Vector3(direction.x, direction.y, direction.z).normalize();\n }\n\n switch (direction) {\n case 'radial':\n return new THREE.Vector3().subVectors(position, this.modelCenter).normalize();\n case 'camera':\n return new THREE.Vector3().subVectors(this.camera.position, position).normalize();\n case 'up':\n return new THREE.Vector3(0, 1, 0);\n case 'down':\n return new THREE.Vector3(0, -1, 0);\n case 'left':\n return toWorldDirection(\n this.model,\n new THREE.Vector3(getSemanticHorizontalSignForSide('left', this.laterality), 0, 0)\n );\n case 'right':\n return toWorldDirection(\n this.model,\n new THREE.Vector3(getSemanticHorizontalSignForSide('right', this.laterality), 0, 0)\n );\n case 'forward':\n return toWorldDirection(this.model, new THREE.Vector3(0, 0, 1));\n case 'backward':\n return toWorldDirection(this.model, new THREE.Vector3(0, 0, -1));\n default:\n return toWorldDirection(this.model, new THREE.Vector3(0, 0, 1));\n }\n }\n\n /**\n * Create a bezier curve between two points.\n */\n private createBezierCurve(start: THREE.Vector3, end: THREE.Vector3, segments = 16): THREE.Vector3[] {\n const values = requireAnnotationCameraCore().sampleMarkerBezierCurve(start, end, segments);\n return this.unpackCurvePoints(values);\n }\n\n /**\n * Create an arc curve between two points.\n */\n private createArcCurve(start: THREE.Vector3, end: THREE.Vector3, segments = 16): THREE.Vector3[] {\n const values = requireAnnotationCameraCore().sampleMarkerArcCurve(start, end, segments);\n return this.unpackCurvePoints(values);\n }\n\n private unpackCurvePoints(values: Float32Array): THREE.Vector3[] {\n const points: THREE.Vector3[] = [];\n for (let i = 0; i < values.length; i += 3) {\n points.push(new THREE.Vector3(values[i], values[i + 1], values[i + 2]));\n }\n return points;\n }\n\n /**\n * Create a styled line with support for dashed/dotted, curves, and arrow heads.\n */\n private createStyledLine(\n start: THREE.Vector3,\n end: THREE.Vector3,\n lineConfig: Required<LineConfig>,\n color: number,\n opacity: number,\n regionName: string\n ): THREE.Line {\n console.log(`[3DMarkers] createStyledLine: ${regionName}`, {\n style: lineConfig.style,\n curve: lineConfig.curve,\n color: color.toString(16),\n opacity,\n });\n\n // Get curve points based on curve type\n let points: THREE.Vector3[];\n switch (lineConfig.curve) {\n case 'bezier':\n points = this.createBezierCurve(start, end);\n break;\n case 'arc':\n points = this.createArcCurve(start, end);\n break;\n default:\n points = [start.clone(), end.clone()];\n }\n\n console.log(`[3DMarkers] createStyledLine: ${regionName} has ${points.length} points (curve: ${lineConfig.curve})`);\n\n const geometry = new THREE.BufferGeometry().setFromPoints(points);\n\n // Create material based on style\n let material: THREE.LineBasicMaterial | THREE.LineDashedMaterial;\n\n if (lineConfig.style === 'dashed' || lineConfig.style === 'dotted') {\n const dashSize = lineConfig.style === 'dotted' ? 0.005 : 0.02;\n const gapSize = lineConfig.style === 'dotted' ? 0.01 : 0.01;\n\n console.log(`[3DMarkers] createStyledLine: ${regionName} using LineDashedMaterial (dashSize=${dashSize}, gapSize=${gapSize})`);\n\n material = new THREE.LineDashedMaterial({\n color,\n transparent: true,\n opacity,\n dashSize,\n gapSize,\n });\n } else {\n console.log(`[3DMarkers] createStyledLine: ${regionName} using LineBasicMaterial`);\n material = new THREE.LineBasicMaterial({\n color,\n transparent: true,\n opacity,\n });\n }\n\n const line = new THREE.Line(geometry, material);\n\n // Compute line distances for dashed materials\n if (lineConfig.style === 'dashed' || lineConfig.style === 'dotted') {\n line.computeLineDistances();\n const lineDistances = line.geometry.getAttribute('lineDistance');\n console.log(`[3DMarkers] createStyledLine: ${regionName} computed line distances, count=${lineDistances?.count}`);\n }\n\n // Create arrow head if requested\n if (lineConfig.arrowHead) {\n const lastPoint = points[points.length - 1];\n const secondLastPoint = points[points.length - 2];\n const arrowDirection = new THREE.Vector3()\n .subVectors(lastPoint, secondLastPoint)\n .normalize();\n\n const arrowMesh = this.createArrowHead(lastPoint, arrowDirection, color, opacity);\n arrowMesh.name = `arrow_${regionName}`;\n arrowMesh.userData.annotation = regionName;\n this.markerGroup.add(arrowMesh);\n this.arrowMeshes.set(regionName, arrowMesh);\n }\n\n return line;\n }\n\n /**\n * Create an arrow head cone mesh.\n */\n private createArrowHead(\n position: THREE.Vector3,\n direction: THREE.Vector3,\n color: number,\n opacity: number\n ): THREE.Mesh {\n const scale = this.modelSize.y / REFERENCE_MODEL_HEIGHT;\n const arrowLength = 0.02 * scale;\n const arrowRadius = 0.008 * scale;\n\n const geometry = new THREE.ConeGeometry(arrowRadius, arrowLength, 8);\n const material = new THREE.MeshBasicMaterial({\n color,\n transparent: true,\n opacity,\n });\n\n const mesh = new THREE.Mesh(geometry, material);\n mesh.position.copy(position);\n\n // Orient arrow to point along direction\n const up = new THREE.Vector3(0, 1, 0);\n const quaternion = new THREE.Quaternion().setFromUnitVectors(up, direction);\n mesh.setRotationFromQuaternion(quaternion);\n\n return mesh;\n }\n\n setCurrentRegion(name: string | null): void {\n this.currentRegion = name;\n this.updateMarkerStyles();\n }\n\n /**\n * Create a marker for an annotation.\n *\n * Algorithm:\n * 1. Find annotation center from bones/meshes\n * 2. Determine best outward direction based on annotation type, cameraAngle, or style.lineDirection\n * 3. Raycast from outside toward annotation center to find surface point\n * 4. Line extends outward from surface with configured styling\n *\n */\n private resolveMarkerPlacement(region: Region) {\n if (!this.model) {\n console.warn(`[3DMarkers] createMarker: No model for region ${region.name}`);\n return null;\n }\n\n // Get resolved style for this region\n const style = this.resolvedStyles.get(region.name);\n if (!style) {\n console.warn(`[3DMarkers] createMarker: No style for region ${region.name}`);\n return null;\n }\n\n // Get annotation center and bounding box\n const result = this.getRegionCenterAndBox(region);\n if (!result) {\n console.warn(`[3DMarkers] createMarker: Could not get center/box for region ${region.name}`);\n return null;\n }\n\n const { center: annotationCenter, usedRuntimeMorphAnchor } = result;\n const visibilityCameraAngle = resolveRegionVisibilityCameraAngle(region, this.laterality);\n\n // Resolve the bone now; store it only after projection is still current.\n const primaryBone = this.findPrimaryBone(region);\n\n // Determine outward direction based on:\n // 1. Custom lineDirection in style (highest priority)\n // 2. Region's cameraAngle\n // 3. Semantic direction based on region name\n let outwardDir: THREE.Vector3;\n if (style.lineDirection && style.lineDirection !== 'radial') {\n // Use custom direction from style\n outwardDir = this.resolveLineDirection(style.lineDirection, annotationCenter);\n } else {\n // Fall back to existing semantic direction logic\n outwardDir = this.getOutwardDirection(region, annotationCenter);\n }\n\n const resolvedAnchor = resolveMarkerAnchorRegion(region);\n const anchorRegion = resolvedAnchor.region;\n\n // For mesh-only annotations (like eyes), place marker at the annotation center\n // These are typically computed positions (e.g., bone + offset) where raycasting doesn't help\n const isMeshOnly =\n anchorRegion.meshes &&\n anchorRegion.meshes.length > 0 &&\n !anchorRegion.bones &&\n !anchorRegion.objects;\n\n return {\n style, annotationCenter, outwardDir, primaryBone, visibilityCameraAngle,\n projectToSurface: !usedRuntimeMorphAnchor && shouldProjectMarkerAnchorToSurface(resolvedAnchor, !isMeshOnly),\n };\n }\n\n private createMarker(region: Region, startHidden = false): void {\n const placement = this.resolveMarkerPlacement(region);\n if (!placement) return;\n const surfacePoint = placement.projectToSurface\n ? this.findSurfacePoint(placement.annotationCenter, placement.outwardDir)\n : placement.annotationCenter.clone();\n this.renderMarker(region, startHidden, placement, surfacePoint);\n }\n\n private async createMarkerInSlices(region: Region, startHidden: boolean, isCurrent: () => boolean): Promise<void> {\n if (!isCurrent()) return;\n const placement = this.resolveMarkerPlacement(region);\n if (!placement) return;\n const surfacePoint = placement.projectToSurface\n ? await this.findSurfacePointInSlices(placement.annotationCenter, placement.outwardDir, isCurrent)\n : placement.annotationCenter.clone();\n if (!surfacePoint || !isCurrent()) return;\n this.renderMarker(region, startHidden, placement, surfacePoint);\n }\n\n private renderMarker(\n region: Region,\n startHidden: boolean,\n placement: NonNullable<ReturnType<DPthree3DMarkers['resolveMarkerPlacement']>>,\n surfacePoint: THREE.Vector3,\n ): void {\n const { style, primaryBone, outwardDir, visibilityCameraAngle } = placement;\n if (primaryBone) this.boneRefs.set(region.name, primaryBone);\n\n // Scale relative to reference model height so fish and human look the same\n const modelHeight = this.modelSize.y;\n const scale = modelHeight / REFERENCE_MODEL_HEIGHT;\n const scaledRadius = style.markerRadius * scale;\n const lineLength = style.line.length ?? this.config.lineLength;\n const scaledLineLength = lineLength * scale;\n const opacity = style.opacity;\n\n // Store the offset in bone-local space for animation updates\n if (primaryBone) {\n // Convert surface point to bone-local coordinates\n const boneInverse = primaryBone.matrixWorld.clone().invert();\n const localSurfacePoint = surfacePoint.clone().applyMatrix4(boneInverse);\n this.localOffsets.set(region.name, localSurfacePoint);\n }\n\n // Create sphere at surface - use depth testing for natural occlusion\n const sphere = new THREE.Mesh(\n new THREE.SphereGeometry(scaledRadius, 12, 12),\n new THREE.MeshBasicMaterial({\n color: style.markerColor,\n transparent: true,\n opacity: 0.95 * opacity,\n })\n );\n sphere.position.copy(surfacePoint);\n sphere.name = `marker_${region.name}`;\n sphere.userData.annotation = region.name;\n sphere.userData.cameraAngle = visibilityCameraAngle;\n sphere.userData.groupId = region.groupId;\n sphere.userData.isFallback = region.isFallback;\n sphere.visible = !startHidden && !region.isFallback; // Fallbacks start hidden\n this.markerGroup.add(sphere);\n this.markerMeshes.set(region.name, sphere);\n\n // Line end point: extend outward from surface\n const lineEnd = surfacePoint.clone().add(\n outwardDir.clone().multiplyScalar(scaledLineLength)\n );\n\n // Store line endpoints for zoom scaling\n this.lineEndpoints.set(region.name, {\n start: surfacePoint.clone(),\n end: lineEnd.clone(),\n direction: outwardDir.clone(),\n });\n\n // Store original line length for animation updates\n this.originalLineLengths.set(region.name, scaledLineLength);\n\n // Create styled line\n const lineConfig: Required<LineConfig> = {\n style: style.line.style ?? 'solid',\n curve: style.line.curve ?? 'straight',\n arrowHead: style.line.arrowHead ?? false,\n thickness: style.line.thickness ?? 2,\n length: lineLength,\n };\n\n const line = this.createStyledLine(\n surfacePoint,\n lineEnd,\n lineConfig,\n style.lineColor,\n 0.9 * opacity,\n region.name\n );\n line.name = `line_${region.name}`;\n line.userData.annotation = region.name;\n line.visible = !startHidden && !region.isFallback;\n this.markerGroup.add(line);\n this.lineMeshes.set(region.name, line);\n\n // Create label at line end (using resolved style)\n const label = this.createLabelSprite(region, style);\n label.position.copy(lineEnd);\n label.name = `label_${region.name}`;\n label.userData.annotation = region.name;\n label.visible = !startHidden && !region.isFallback;\n this.markerGroup.add(label);\n this.labelSprites.set(region.name, label);\n this.labelScales.set(region.name, { x: label.scale.x, y: label.scale.y });\n\n // Hide arrow if marker starts hidden\n const arrow = this.arrowMeshes.get(region.name);\n if (arrow) {\n arrow.visible = !startHidden && !region.isFallback;\n }\n this.markerTargetVisibility.set(region.name, !startHidden && !region.isFallback);\n this.markerAngleGateVisibility.delete(region.name);\n this.markerViewportVisibility.set(region.name, true);\n\n // Loads yield between regions, so a stationary camera may already have a\n // cached layout before this marker exists. Fit it before the next paint.\n this.markerLayoutDirty = true;\n if (this.visibilityAnimationActive) {\n // The current reveal owns existing label scales until it completes.\n this.setMarkerObjectsVisible(region.name, false, false);\n } else {\n this.update();\n }\n }\n\n /**\n * Embody Rust owns endpoint layout; the Three adapter applies the returned positions\n * to its Three.js marker geometry and labels.\n */\n private separateOverlappingMarkers(annotationCameraCore: RustAnnotationCameraCore): void {\n const markerNames = Array.from(this.lineEndpoints.keys());\n if (markerNames.length < 2) {\n return;\n }\n\n const starts = new Float32Array(markerNames.length * 3);\n const ends = new Float32Array(markerNames.length * 3);\n markerNames.forEach((name, index) => {\n const endpoints = this.lineEndpoints.get(name)!;\n endpoints.start.toArray(starts, index * 3);\n endpoints.end.toArray(ends, index * 3);\n });\n\n const separatedEnds = annotationCameraCore.separateOverlappingMarkerEndpoints({\n starts,\n ends,\n modelCenter: this.modelCenter,\n modelHeight: this.modelSize.y,\n });\n if (separatedEnds.length !== ends.length) {\n throw new Error(\n `Marker endpoint separation returned ${separatedEnds.length} values for ${markerNames.length} markers`\n );\n }\n\n markerNames.forEach((name, index) => {\n const endpoints = this.lineEndpoints.get(name)!;\n const newEnd = new THREE.Vector3().fromArray(separatedEnds, index * 3);\n endpoints.direction.subVectors(newEnd, endpoints.start).normalize();\n this.updateMarkerGeometry(name, endpoints.start, newEnd);\n });\n }\n\n /**\n * Determine the outward direction for marker placement based on annotation type.\n *\n * This uses semantic knowledge about body parts:\n * - Face/eyes/mouth: forward (positive Z)\n * - Back: backward (negative Z)\n * - Left/right parts: semantic side, resolved against model laterality\n * - Feet: down (negative Y)\n * - If cameraAngle is specified, use that angle\n * - Default: direction from model center to annotation center\n */\n private getOutwardDirection(region: Region, annotationCenter: THREE.Vector3): THREE.Vector3 {\n const name = region.name.toLowerCase();\n const leftX = getSemanticHorizontalSignForSide('left', this.laterality);\n const rightX = getSemanticHorizontalSignForSide('right', this.laterality);\n\n const toWorld = (localDir: THREE.Vector3): THREE.Vector3 => {\n return toWorldDirection(this.model, localDir);\n };\n\n const resolvedCameraAngle = resolveRegionCameraAngle(region, this.laterality);\n\n // If annotation has a specific cameraAngle, use that direction in model-local space.\n if (resolvedCameraAngle !== undefined && resolvedCameraAngle !== 0) {\n return getWorldDirectionForCameraAngle(this.model, resolvedCameraAngle);\n }\n\n // Semantic direction based on region.name (in MODEL-LOCAL space, transformed to world).\n // Eyes should point outward to the semantic side of the model.\n const horizontalSign = getSemanticHorizontalSign(region.name, this.laterality);\n if (horizontalSign !== null && (name.includes('eye') || name.includes('hand'))) {\n return toWorld(new THREE.Vector3(horizontalSign, 0.1, 0.3).normalize());\n }\n\n // Eye (singular) - radial from center\n if (name === 'eye') {\n const dir = new THREE.Vector3().subVectors(annotationCenter, this.modelCenter);\n dir.y = 0;\n return dir.length() > 0.001 ? dir.normalize() : toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Face/head/mouth should point FORWARD in model space\n if (name.includes('face') || name.includes('mouth') || name.includes('head')) {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Full body points forward\n if (name.includes('full_body') || name.includes('full body')) {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Body points forward\n if (name === 'body') {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Upper body points forward\n if (name.includes('upper_body') || name.includes('torso') || name.includes('chest')) {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Feet point down and slightly forward\n if (name.includes('foot') || name.includes('feet')) {\n return toWorld(new THREE.Vector3(0, -0.5, 0.5).normalize());\n }\n\n // Fins (for fish) - point toward outer edge of fin\n if (name.includes('pectoral')) {\n if (name.includes('left')) {\n return toWorld(new THREE.Vector3(leftX, -0.3, 0.2).normalize());\n } else if (name.includes('right')) {\n return toWorld(new THREE.Vector3(rightX, -0.3, 0.2).normalize());\n }\n }\n if (name.includes('ventral') || name.includes('pelvic')) {\n return toWorld(new THREE.Vector3(0, -0.7, -0.5).normalize());\n }\n if (name.includes('anal')) {\n // Anal fin points down and back\n return toWorld(new THREE.Vector3(0, -0.6, -0.6).normalize());\n }\n if (name.includes('dorsal')) {\n return toWorld(new THREE.Vector3(0, 1, -0.3).normalize());\n }\n if (name.includes('fin')) {\n if (name.includes('left')) {\n return toWorld(new THREE.Vector3(leftX, 0, 0));\n } else if (name.includes('right')) {\n return toWorld(new THREE.Vector3(rightX, 0, 0));\n }\n }\n\n // Tail/caudal fin points backward in model space\n if (name.includes('tail') || name.includes('caudal')) {\n return toWorld(new THREE.Vector3(0, 0, -1));\n }\n\n // Gills/operculum point to model's right side\n if (name.includes('gill') || name.includes('operculum')) {\n const semanticSign = getSemanticHorizontalSign(name, this.laterality);\n return toWorld(new THREE.Vector3(semanticSign ?? rightX, 0, 0.3).normalize());\n }\n\n // Mouth points forward\n if (name === 'mouth') {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n\n // Throat points to model's left side\n if (name.includes('throat')) {\n return toWorld(new THREE.Vector3(leftX, 0, 0.3).normalize());\n }\n\n // Default: use direction from model center to annotation center (already in world space)\n const dir = new THREE.Vector3().subVectors(annotationCenter, this.modelCenter);\n if (dir.length() < 0.001) {\n return toWorld(new THREE.Vector3(0, 0, 1));\n }\n return dir.normalize();\n }\n\n /**\n * Find surface point by raycasting from OUTSIDE toward the annotation center.\n * This ensures we hit the outer surface facing the outward direction.\n */\n private findSurfacePoint(target: THREE.Vector3, outwardDir: THREE.Vector3): THREE.Vector3 {\n if (!this.model) return target.clone();\n\n if (this.modelMeshes.length === 0) return target.clone();\n\n const modelScale = Math.max(this.modelSize.x, this.modelSize.y, this.modelSize.z);\n const scale = this.modelSize.y / REFERENCE_MODEL_HEIGHT;\n\n // Cast ray from far outside, coming IN toward the target\n const rayOrigin = target.clone().add(outwardDir.clone().multiplyScalar(modelScale * 2));\n const rayDir = outwardDir.clone().negate();\n\n this.raycaster.set(rayOrigin, rayDir);\n this.raycaster.far = modelScale * 4;\n\n const hits = this.raycaster.intersectObjects(this.modelMeshes, false);\n\n // Find the first hit (outer surface)\n if (hits.length > 0) {\n const hit = hits[0].point.clone();\n // Offset slightly along outward direction to sit on surface\n hit.add(outwardDir.clone().multiplyScalar(this.config.markerRadius * scale));\n return hit;\n }\n\n // Fallback: try raycasting from model center outward through target\n const rayOrigin2 = this.modelCenter.clone();\n const rayDir2 = outwardDir.clone();\n this.raycaster.set(rayOrigin2, rayDir2);\n this.raycaster.far = modelScale * 2;\n\n const hits2 = this.raycaster.intersectObjects(this.modelMeshes, false);\n if (hits2.length > 0) {\n // Use the LAST hit (furthest out = outer surface)\n const hit = hits2[hits2.length - 1].point.clone();\n hit.add(outwardDir.clone().multiplyScalar(this.config.markerRadius * scale));\n return hit;\n }\n\n // Final fallback: place marker at annotation center offset outward\n return target.clone().add(outwardDir.clone().multiplyScalar(0.05 * scale));\n }\n\n private async findSurfacePointInSlices(\n target: THREE.Vector3,\n outwardDir: THREE.Vector3,\n isCurrent: () => boolean,\n ): Promise<THREE.Vector3 | null> {\n if (!isCurrent()) return null;\n if (!this.model || this.modelMeshes.length === 0) return target.clone();\n const meshes = this.modelMeshes;\n const modelCenter = this.modelCenter.clone();\n const modelScale = Math.max(this.modelSize.x, this.modelSize.y, this.modelSize.z);\n const scale = this.modelSize.y / REFERENCE_MODEL_HEIGHT;\n const raycaster = new THREE.Raycaster();\n const options = { isCurrent, yieldToPaint: waitForCharacterLoadPaint };\n raycaster.set(target.clone().addScaledVector(outwardDir, modelScale * 2), outwardDir.clone().negate());\n raycaster.far = modelScale * 4;\n const incoming = await intersectMeshesInSlices(raycaster, meshes, options);\n if (!incoming || !isCurrent()) return null;\n if (incoming.length > 0) {\n return incoming[0].point.clone().addScaledVector(outwardDir, this.config.markerRadius * scale);\n }\n\n // Separate the two searches too: an expensive last mesh must not be\n // followed by another query's first mesh in the same uninterrupted task.\n await waitForCharacterLoadPaint();\n if (!isCurrent()) return null;\n raycaster.set(modelCenter, outwardDir.clone());\n raycaster.far = modelScale * 2;\n const outgoing = await intersectMeshesInSlices(raycaster, meshes, options);\n if (!outgoing || !isCurrent()) return null;\n if (outgoing.length > 0) {\n return outgoing[outgoing.length - 1].point.clone().addScaledVector(outwardDir, this.config.markerRadius * scale);\n }\n return target.clone().addScaledVector(outwardDir, 0.05 * scale);\n }\n\n private getSuffixPattern(): string | undefined {\n return this.characterConfig?.suffixPattern;\n }\n\n /**\n * Get center point and bounding box of annotation's bones/meshes.\n * Uses fuzzy matching to handle bone names with numeric suffixes.\n */\n private getRegionCenterAndBox(\n region: Region,\n ): { center: THREE.Vector3; box: THREE.Box3; usedRuntimeMorphAnchor?: boolean } | null {\n const model = this.model;\n if (!model) return null;\n\n const resolvedAnchor = resolveMarkerAnchorRegion(region);\n const anchorRegion = resolvedAnchor.region;\n\n // Batch loads refresh once up front; one-off marker edits still need fresh\n // skeleton transforms before resolving their world positions.\n if (!this.regionLoadHasFreshMatrices) {\n model.updateMatrixWorld(true);\n }\n\n const modelRotation = new THREE.Matrix4();\n modelRotation.extractRotation(model.matrixWorld);\n const toWorldOffset = (localOffset: THREE.Vector3): THREE.Vector3 => {\n return localOffset.clone().applyMatrix4(modelRotation);\n };\n const leftX = getSemanticHorizontalSignForSide('left', this.laterality);\n const rightX = getSemanticHorizontalSignForSide('right', this.laterality);\n\n const box = new THREE.Box3();\n let found = false;\n let usedRuntimeMorphAnchor = false;\n const foundItems: string[] = [];\n\n // PRIORITY 0: If region has a custom position (user-adjusted), use it directly\n if (anchorRegion.customPosition) {\n const customCenter = new THREE.Vector3(\n anchorRegion.customPosition.x,\n anchorRegion.customPosition.y,\n anchorRegion.customPosition.z\n );\n box.expandByPoint(customCenter);\n console.log(`[3DMarkers] Region \"${anchorRegion.name}\" using customPosition: (${customCenter.x.toFixed(3)}, ${customCenter.y.toFixed(3)}, ${customCenter.z.toFixed(3)})`);\n return { center: customCenter, box };\n }\n\n // Handle full body (*)\n if (anchorRegion.objects?.includes('*')) {\n box.setFromObject(model);\n found = true;\n foundItems.push('full model');\n } else {\n // PRIORITY 1: For face regions, ALWAYS use resolveFaceCenter (embody)\n // This handles both user-selected meshes AND auto-detection by morph count\n // NEVER fall back to bone position for face regions (bones are at skull center = back of head)\n const isFaceRegion = shouldUseFaceCenterForMarkerAnchor(resolvedAnchor);\n\n if (isFaceRegion) {\n const hasMeshes = anchorRegion.meshes && anchorRegion.meshes.length > 0;\n console.log(`[3DMarkers] Face region \"${anchorRegion.name}\" - meshes: ${hasMeshes ? anchorRegion.meshes!.join(', ') : 'auto-detect by morph count'}`);\n\n // Use embody helper to find face center position\n // If no meshes provided, resolveFaceCenter will auto-detect by morph target count\n const faceCenterResult = resolveFaceCenter(model, anchorRegion, boneResolutionProfile(this.characterConfig) ?? undefined);\n\n console.log(`[3DMarkers] Face region \"${anchorRegion.name}\" - method: ${faceCenterResult.method}`);\n faceCenterResult.debugInfo.forEach(info => console.log(`[3DMarkers] ${info}`));\n\n // Copy values to our THREE.Vector3 to avoid type issues\n const faceCenter = new THREE.Vector3(\n faceCenterResult.center.x,\n faceCenterResult.center.y,\n faceCenterResult.center.z\n );\n\n box.expandByPoint(faceCenter);\n found = true;\n foundItems.push(`face-center: ${faceCenterResult.method} at (${faceCenter.x.toFixed(2)}, ${faceCenter.y.toFixed(2)}, ${faceCenter.z.toFixed(2)})`);\n\n const center = new THREE.Vector3();\n box.getCenter(center);\n console.log(`[3DMarkers] Returning face center: (${center.x.toFixed(3)}, ${center.y.toFixed(3)}, ${center.z.toFixed(3)})`);\n return { center, box };\n }\n\n // PRIORITY 2: Find bones (with fuzzy matching for numeric suffixes)\n if (anchorRegion.bones) {\n const tempVec = new THREE.Vector3();\n const resolvedBoneNames = resolveBoneNames(anchorRegion.bones, boneResolutionProfile(this.characterConfig));\n\n for (const boneName of resolvedBoneNames) {\n model.traverse((obj) => {\n if (fuzzyNameMatch(obj.name, boneName, this.getSuffixPattern())) {\n obj.getWorldPosition(tempVec);\n box.expandByPoint(tempVec);\n found = true;\n foundItems.push(`bone:${obj.name} (matched ${boneName}) at (${tempVec.x.toFixed(2)}, ${tempVec.y.toFixed(2)}, ${tempVec.z.toFixed(2)})`);\n }\n });\n }\n }\n\n // Find meshes (with fuzzy matching for numeric suffixes)\n if (anchorRegion.meshes) {\n for (const meshName of anchorRegion.meshes) {\n model.traverse((obj) => {\n if (fuzzyNameMatch(obj.name, meshName, this.getSuffixPattern()) && (obj as THREE.Mesh).isMesh) {\n const mesh = obj as THREE.Mesh;\n const runtimeMorphAnchorPoint = getRuntimeAUMorphAnchorPoint(\n anchorRegion as AnnotationAnchoredRegion,\n mesh,\n );\n if (runtimeMorphAnchorPoint) {\n box.expandByPoint(runtimeMorphAnchorPoint);\n found = true;\n usedRuntimeMorphAnchor = true;\n foundItems.push(`runtime-morph:${meshName} at (${runtimeMorphAnchorPoint.x.toFixed(2)}, ${runtimeMorphAnchorPoint.y.toFixed(2)}, ${runtimeMorphAnchorPoint.z.toFixed(2)})`);\n return;\n }\n\n // For skinned meshes, the geometry is at origin - we need to find the\n // associated bone position instead, or compute world-space bounds\n let meshCenter = new THREE.Vector3();\n\n // Check if this is a skinned mesh by looking for a parent bone\n // or if the mesh has very small bounds near origin\n const meshBox = new THREE.Box3().setFromObject(mesh);\n meshBox.getCenter(meshCenter);\n\n // If center is near origin, this is likely a skinned mesh\n // Try to find the bone that controls it by name pattern\n if (meshCenter.length() < 0.1) {\n // For CC_Base_Eye and CC_Base_Eye_1, use the eye bones (CC4/human)\n if (meshName.includes('CC_Base_Eye')) {\n const isLeft = !meshName.includes('_1'); // CC_Base_Eye is left, CC_Base_Eye_1 is right\n const eyeBoneName = isLeft ? 'CC_Base_L_Eye' : 'CC_Base_R_Eye';\n model.traverse((boneObj) => {\n if (boneObj.name === eyeBoneName) {\n boneObj.getWorldPosition(meshCenter);\n }\n });\n } else if (meshName === 'EYES_0') {\n // Fish eye mesh - use head bone and offset forward + sideways\n // The fish model is small and the head bone is deep inside the body,\n // so we need a forward offset to reach the visible eye surface\n // Additionally offset left/right based on region name for distinct eye markers\n const regionNameLower = anchorRegion.name.toLowerCase();\n const isLeftEye = regionNameLower.includes('left');\n const isRightEye = regionNameLower.includes('right');\n // Symmetric horizontal offset in MODEL space, aligned with semantic left/right.\n const sideOffset = isLeftEye ? 0.035 * leftX : isRightEye ? 0.035 * rightX : 0;\n\n model.traverse((boneObj) => {\n // Match head bone (either hardcoded or via fuzzy match)\n if (boneObj.name === 'Bone.001_Armature' || boneObj.name.includes('001_Armature')) {\n boneObj.getWorldPosition(meshCenter);\n // Offset in model-local space (will be transformed to world space):\n // X = left(-)/right(+), Y = up/down, Z = forward(+)/back(-)\n // Forward offset (Z) to reach eye surface, side offset (X) for left/right eye\n meshCenter.add(toWorldOffset(new THREE.Vector3(sideOffset, 0.01, 0.1)));\n }\n });\n } else if (meshName.includes('Tongue') || meshName.includes('Teeth')) {\n // For tongue/teeth, use jaw bone\n model.traverse((boneObj) => {\n if (boneObj.name === 'CC_Base_JawRoot') {\n boneObj.getWorldPosition(meshCenter);\n }\n });\n } else {\n // Fallback: use mesh world position\n mesh.getWorldPosition(meshCenter);\n }\n }\n\n const runtimeSide = getRuntimeAnnotationSide(anchorRegion);\n const runtimeSideSign = runtimeSide === 'left'\n ? leftX\n : runtimeSide === 'right'\n ? rightX\n : 0;\n const runtimeSideOffset = runtimeSideSign\n ? getRuntimeAUMeshSideOffset(anchorRegion, runtimeSideSign, this.modelSize)\n : null;\n if (runtimeSideOffset) {\n meshCenter.add(toWorldOffset(runtimeSideOffset));\n foundItems.push(`runtime-side:${runtimeSide}`);\n }\n\n box.expandByPoint(meshCenter);\n found = true;\n foundItems.push(`mesh:${meshName} center at (${meshCenter.x.toFixed(2)}, ${meshCenter.y.toFixed(2)}, ${meshCenter.z.toFixed(2)})`);\n }\n });\n }\n }\n }\n\n if (!found || box.isEmpty()) {\n return null;\n }\n\n const center = new THREE.Vector3();\n box.getCenter(center);\n\n // For fin annotations, offset center toward the outer edge of the fin\n // Bones are at the base (near body), but markers should be on the outer edge\n if (!resolvedAnchor.useLegacyRegionSemantics) {\n return { center, box };\n }\n\n const name = anchorRegion.name.toLowerCase();\n const modelScale = Math.max(this.modelSize.x, this.modelSize.y, this.modelSize.z);\n const finOffset = modelScale * 0.15; // Offset based on model scale\n\n if (name.includes('pectoral')) {\n if (name.includes('left')) {\n center.add(toWorldOffset(new THREE.Vector3(leftX, -0.3, 0).multiplyScalar(finOffset)));\n } else if (name.includes('right')) {\n center.add(toWorldOffset(new THREE.Vector3(rightX, -0.3, 0).multiplyScalar(finOffset)));\n }\n } else if (name.includes('ventral') || name.includes('pelvic')) {\n center.add(toWorldOffset(new THREE.Vector3(0, -0.5, -0.3).multiplyScalar(finOffset)));\n } else if (name.includes('anal')) {\n center.add(toWorldOffset(new THREE.Vector3(0, -0.5, -0.5).multiplyScalar(finOffset)));\n } else if (name.includes('caudal') || name.includes('tail')) {\n center.add(toWorldOffset(new THREE.Vector3(0, 0, -0.8).multiplyScalar(finOffset)));\n } else if (name.includes('dorsal')) {\n center.add(toWorldOffset(new THREE.Vector3(0, 0.5, -0.3).multiplyScalar(finOffset)));\n } else if (name === 'mouth') {\n center.add(toWorldOffset(new THREE.Vector3(0, 0, 0.6).multiplyScalar(finOffset)));\n } else if (name.includes('operculum') || name.includes('gill')) {\n // Offset slightly to the side for gill cover\n const semanticSign = getSemanticHorizontalSign(name, this.laterality);\n center.add(\n toWorldOffset(new THREE.Vector3(0.3 * (semanticSign ?? rightX), 0, 0).multiplyScalar(finOffset))\n );\n }\n\n return { center, box, usedRuntimeMorphAnchor };\n }\n\n private formatLabelText(regionOrName: Region | string): string {\n const name = typeof regionOrName === 'string' ? regionOrName : regionOrName.name;\n const explicitLabel = typeof regionOrName === 'string'\n ? undefined\n : getAnnotationRegionLabel(regionOrName);\n const text = name.split('_').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n const children = this.parentChildIndex.get(name);\n if (children && children.length > 0) {\n const isExpanded = this.expandedRegions.get(name);\n return `${explicitLabel ?? text} ${isExpanded ? '-' : '+'}`;\n }\n return explicitLabel ?? text;\n }\n\n private buildLabelTexture(\n text: string,\n style?: Required<MarkerStyleOverrides>\n ): { texture: THREE.CanvasTexture; aspect: number } {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n // Use style if provided, otherwise fall back to config\n const fontSize = style?.labelFontSize ?? this.config.labelFontSize;\n const labelColor = style?.labelColor ?? this.config.labelColor;\n const labelBackground = style?.labelBackground ?? this.config.labelBackground;\n\n const font = `bold ${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n ctx.font = font;\n\n const padding = fontSize * 0.5;\n const textWidth = ctx.measureText(text).width;\n canvas.width = Math.ceil(textWidth + padding * 2);\n canvas.height = Math.ceil(fontSize + padding * 1.5);\n\n // Background\n ctx.fillStyle = labelBackground;\n const r = fontSize * 0.3;\n ctx.beginPath();\n ctx.roundRect(0, 0, canvas.width, canvas.height, r);\n ctx.fill();\n\n // Border (derive from marker color if style provided)\n const borderColor = style ? `rgba(${(style.lineColor >> 16) & 0xff}, ${(style.lineColor >> 8) & 0xff}, ${style.lineColor & 0xff}, 0.6)` : 'rgba(66, 153, 225, 0.6)';\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.roundRect(1, 1, canvas.width - 2, canvas.height - 2, r);\n ctx.stroke();\n\n // Text\n ctx.font = font;\n ctx.fillStyle = labelColor;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.minFilter = THREE.LinearFilter;\n const aspect = canvas.width / canvas.height;\n\n return { texture, aspect };\n }\n\n private createLabelSprite(regionOrName: Region | string, style?: Required<MarkerStyleOverrides>): THREE.Sprite {\n const text = this.formatLabelText(regionOrName);\n const { texture, aspect } = this.buildLabelTexture(text, style);\n\n const sprite = new THREE.Sprite(\n new THREE.SpriteMaterial({\n map: texture,\n transparent: true,\n sizeAttenuation: false, // Disable size attenuation - we'll scale manually for consistent screen size\n })\n );\n\n // With sizeAttenuation: false, sprite scale is in normalized device coordinates (screen space)\n // Use a fixed screen-relative scale so labels appear same size regardless of model/camera distance\n const baseScale = 0.024; // Fixed screen-relative size\n sprite.scale.set(baseScale * aspect, baseScale, 1);\n\n return sprite;\n }\n\n private updateLabelSprite(name: string): void {\n const label = this.labelSprites.get(name);\n if (!label) return;\n const style = this.resolvedStyles.get(name);\n const text = this.formatLabelText(name);\n const { texture, aspect } = this.buildLabelTexture(text, style);\n const material = label.material as THREE.SpriteMaterial;\n if (material.map) material.map.dispose();\n material.map = texture;\n material.needsUpdate = true;\n\n const baseScale = 0.024;\n label.scale.set(baseScale * aspect, baseScale, 1);\n this.labelScales.set(name, { x: baseScale * aspect, y: baseScale });\n }\n\n private updateMarkerStyles(): void {\n // Get current zoom scale factors\n const labelScale = this.isZoomedIn ? ZOOMED_IN_LABEL_SCALE : 1.0;\n\n for (const [name, sphere] of this.markerMeshes) {\n const line = this.lineMeshes.get(name);\n const label = this.labelSprites.get(name);\n const baseScale = this.labelScales.get(name);\n const isSelected = name === this.currentRegion;\n\n // Use per-region resolved style (respects runtime style updates)\n const style = this.resolvedStyles.get(name);\n const markerColor = style?.markerColor ?? this.config.markerColor;\n const lineColor = style?.lineColor ?? this.config.lineColor;\n\n (sphere.material as THREE.MeshBasicMaterial).color.setHex(\n isSelected ? 0x63b3ed : markerColor\n );\n // Selection highlight scale (distance-based scaling is handled in update())\n if (isSelected) {\n const currentScale = sphere.scale.x; // Preserve distance-based scale\n sphere.scale.setScalar(currentScale * 1.3);\n }\n\n if (line) {\n (line.material as THREE.LineBasicMaterial).color.setHex(\n isSelected ? 0x63b3ed : lineColor\n );\n (line.material as THREE.LineBasicMaterial).opacity = isSelected ? 1 : (this.isZoomedIn ? 0.6 : 0.9);\n }\n\n if (label && baseScale) {\n const s = isSelected ? 1.1 : 1;\n // Apply label scale with selection highlight (labels stay more readable)\n label.scale.set(baseScale.x * s * labelScale, baseScale.y * s * labelScale, 1);\n }\n }\n }\n\n private getResolvedLineConfig(name: string): Required<LineConfig> {\n const style = this.resolvedStyles.get(name);\n return {\n style: style?.line.style ?? 'solid',\n curve: style?.line.curve ?? 'straight',\n arrowHead: style?.line.arrowHead ?? false,\n thickness: style?.line.thickness ?? 2,\n length: style?.line.length ?? this.config.lineLength,\n };\n }\n\n private getViewportSafeBounds(label: THREE.Sprite): { safeX: number; safeY: number } {\n const rect = this.domElement.getBoundingClientRect();\n return resolveViewportSafeBounds({\n labelScaleX: label.scale.x,\n labelScaleY: label.scale.y,\n projectionXScale: this.camera.projectionMatrix.elements[0] ?? 1,\n projectionYScale: this.camera.projectionMatrix.elements[5] ?? 1,\n viewportWidth: rect.width || this.domElement.clientWidth,\n viewportHeight: rect.height || this.domElement.clientHeight,\n });\n }\n\n private updateMarkerGeometry(name: string, start: THREE.Vector3, end: THREE.Vector3): void {\n const line = this.lineMeshes.get(name);\n const label = this.labelSprites.get(name);\n const arrow = this.arrowMeshes.get(name);\n const endpoints = this.lineEndpoints.get(name);\n if (!line || !label || !endpoints) return;\n\n endpoints.start.copy(start);\n endpoints.end.copy(end);\n\n const lineConfig = this.getResolvedLineConfig(name);\n let points: THREE.Vector3[] | null = null;\n\n if (lineConfig.curve === 'straight') {\n const positions = line.geometry.getAttribute('position') as THREE.BufferAttribute | undefined;\n if (positions?.count === 2) {\n positions.setXYZ(0, start.x, start.y, start.z);\n positions.setXYZ(1, end.x, end.y, end.z);\n positions.needsUpdate = true;\n } else {\n points = [start.clone(), end.clone()];\n line.geometry.setFromPoints(points);\n }\n } else {\n points = lineConfig.curve === 'bezier'\n ? this.createBezierCurve(start, end)\n : this.createArcCurve(start, end);\n line.geometry.setFromPoints(points);\n }\n\n if (line.material instanceof THREE.LineDashedMaterial) {\n line.computeLineDistances();\n }\n\n label.position.copy(end);\n\n if (arrow) {\n const tip = points ? points[points.length - 1] : end;\n const prev = points ? points[points.length - 2] : start;\n arrow.position.copy(tip);\n this.scratchArrowDirection.subVectors(tip, prev);\n if (this.scratchArrowDirection.lengthSq() > POSITION_EPSILON_SQUARED) {\n this.scratchArrowQuaternion.setFromUnitVectors(\n this.arrowUp,\n this.scratchArrowDirection.normalize(),\n );\n arrow.setRotationFromQuaternion(this.scratchArrowQuaternion);\n }\n }\n }\n\n private updateMarkerLineLayout(name: string): boolean {\n const sphere = this.markerMeshes.get(name);\n const label = this.labelSprites.get(name);\n const endpoints = this.lineEndpoints.get(name);\n const originalLength = this.originalLineLengths.get(name);\n\n if (!sphere || !label || !endpoints || originalLength === undefined) {\n this.markerViewportVisibility.set(name, true);\n return true;\n }\n\n const lineScaleFactor = this.isZoomedIn ? ZOOMED_IN_LINE_SCALE : 1.0;\n const fullLength = originalLength * lineScaleFactor;\n const start = sphere.position;\n\n this.scratchWorldEnd\n .copy(endpoints.direction)\n .multiplyScalar(fullLength)\n .add(start);\n\n const { safeX, safeY } = this.getViewportSafeBounds(label);\n this.scratchClipStart\n .set(start.x, start.y, start.z, 1)\n .applyMatrix4(this.camera.matrixWorldInverse)\n .applyMatrix4(this.camera.projectionMatrix);\n this.scratchClipEnd\n .set(this.scratchWorldEnd.x, this.scratchWorldEnd.y, this.scratchWorldEnd.z, 1)\n .applyMatrix4(this.camera.matrixWorldInverse)\n .applyMatrix4(this.camera.projectionMatrix);\n\n if (!isFiniteClipPoint(this.scratchClipEnd)) {\n this.markerViewportVisibility.set(name, false);\n return false;\n }\n const { visible, lineScale } = requireAnnotationCameraCore().resolveViewportConstrainedLineScale({\n startClip: this.scratchClipStart.toArray(this.scratchClipStartValues),\n endClip: this.scratchClipEnd.toArray(this.scratchClipEndValues),\n safeX,\n safeY,\n });\n this.markerViewportVisibility.set(name, visible);\n\n if (!visible) {\n return false;\n }\n\n this.scratchConstrainedEnd\n .copy(endpoints.direction)\n .multiplyScalar(fullLength * lineScale)\n .add(start);\n\n if (\n start.distanceToSquared(endpoints.start) > POSITION_EPSILON_SQUARED ||\n this.scratchConstrainedEnd.distanceToSquared(endpoints.end) > POSITION_EPSILON_SQUARED\n ) {\n this.updateMarkerGeometry(name, start, this.scratchConstrainedEnd);\n }\n\n return true;\n }\n\n private onClick = (event: MouseEvent): void => {\n const rect = this.domElement.getBoundingClientRect();\n this.mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n this.mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n\n this.raycaster.setFromCamera(this.mouse, this.camera);\n\n const clickables = [...this.markerMeshes.values(), ...this.labelSprites.values()];\n const hits = this.raycaster.intersectObjects(clickables, false);\n\n if (hits.length > 0 && hits[0].object.userData.annotation) {\n const regionName = hits[0].object.userData.annotation;\n\n // If this is a parent region with children, toggle expand/collapse\n const children = this.parentChildIndex.get(regionName);\n if (children && children.length > 0) {\n const region = this.regions.find(r => r.name === regionName);\n const animation = region?.expandAnimation || 'staggered';\n this.toggleRegion(regionName, animation);\n }\n\n // Always call onSelect for camera focus\n this.onSelect(regionName);\n }\n };\n\n /**\n * Update marker positions to follow animated bones.\n * Uses stored bone references and local offsets for efficiency.\n */\n private updateMarkerPositions(): void {\n for (const [name, bone] of this.boneRefs) {\n const sphere = this.markerMeshes.get(name);\n const localOffset = this.localOffsets.get(name);\n\n if (!sphere || !localOffset) continue;\n\n // Transform local offset to world space using current bone matrix\n const newSurfacePoint = this.tempSurfacePoint.copy(localOffset).applyMatrix4(bone.matrixWorld);\n sphere.position.copy(newSurfacePoint);\n }\n }\n\n /**\n * Find the primary bone for a region (for animation tracking).\n */\n private findPrimaryBone(region: Region): THREE.Object3D | null {\n if (!this.model) return null;\n\n // For full body markers, don't track any bone\n if (region.objects?.includes('*')) return null;\n\n // Find first bone from the region's bones list\n if (region.bones && region.bones.length > 0) {\n const primaryBoneName = resolveBoneNames([region.bones[0]], boneResolutionProfile(this.characterConfig))[0];\n let foundBone: THREE.Object3D | null = null;\n\n this.model.traverse((obj) => {\n if (!foundBone && fuzzyNameMatch(obj.name, primaryBoneName, this.getSuffixPattern())) {\n foundBone = obj;\n }\n });\n\n return foundBone;\n }\n\n // For mesh-only regions, find the mesh\n if (region.meshes && region.meshes.length > 0) {\n const primaryMeshName = region.meshes[0];\n let foundMesh: THREE.Object3D | null = null;\n\n this.model.traverse((obj) => {\n if (!foundMesh && fuzzyNameMatch(obj.name, primaryMeshName, this.getSuffixPattern()) && (obj as THREE.Mesh).isMesh) {\n foundMesh = obj;\n }\n });\n\n return foundMesh;\n }\n\n return null;\n }\n\n /**\n * Per-frame update: distance-based scaling + explicit cameraAngle visibility.\n * Markers scale continuously with camera distance to maintain consistent screen size.\n * Occlusion is handled by the GPU via depth testing (depthTest: true).\n */\n update(): void {\n if (!this.model) return;\n\n // Hidden markers do not need per-frame bone tracking or visibility work.\n if (!this.markerGroup.visible && !this.visibilityAnimationActive) {\n return;\n }\n\n // Update marker positions to follow animated bones (like HTML markers do)\n this.updateMarkerPositions();\n\n // Let the short visibility animation own scale/opacity while it runs.\n if (this.visibilityAnimationActive) {\n return;\n }\n\n const dx = this.camera.position.x - this.modelCenter.x;\n const dy = this.camera.position.y - this.modelCenter.y;\n const dz = this.camera.position.z - this.modelCenter.z;\n\n const cameraDistance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n // Refresh new geometry even if distance has not changed by more than 2%.\n const distanceChanged = this.markerLayoutDirty || this.lastCameraDistance < 0 ||\n Math.abs(cameraDistance - this.lastCameraDistance) > this.lastCameraDistance * 0.02;\n\n if (distanceChanged) {\n const previousDistance = this.lastCameraDistance;\n this.lastCameraDistance = cameraDistance;\n\n // Scale markers proportionally to camera distance to maintain consistent screen size\n // Reference distance is the zoom threshold - at this distance, scale = 1.0\n const referenceDistance = this.zoomThreshold;\n const distanceScale = cameraDistance / referenceDistance;\n\n // Clamp the scale to reasonable bounds (0.3x to 2.0x)\n const clampedScale = Math.max(0.3, Math.min(2.0, distanceScale));\n\n // Apply continuous scaling to spheres\n for (const sphere of this.markerMeshes.values()) {\n sphere.scale.setScalar(clampedScale);\n }\n\n // Update zoom state for other effects (line length, label scale, etc.)\n const shouldBeZoomedIn = cameraDistance < this.zoomThreshold;\n const zoomChanged = shouldBeZoomedIn !== this.isZoomedIn;\n if (this.markerLayoutDirty || zoomChanged) {\n this.isZoomedIn = shouldBeZoomedIn;\n // Apply the current zoom state to newly created labels too.\n this.applyZoomScale(\n shouldBeZoomedIn ? ZOOMED_IN_LINE_SCALE : 1.0,\n zoomChanged || shouldBeZoomedIn,\n );\n }\n\n // Auto-collapse only when crossing the threshold to avoid immediate re-collapse.\n const crossedAutoCollapseThreshold =\n previousDistance >= 0 &&\n previousDistance <= this.autoCollapseThreshold &&\n cameraDistance > this.autoCollapseThreshold;\n if (crossedAutoCollapseThreshold) {\n this.collapseAllRegions();\n }\n }\n\n const cameraMoved =\n this.markerLayoutDirty || !this.hasCameraAngleUpdateSnapshot ||\n this.lastCameraAngleUpdatePosition.distanceToSquared(this.camera.position) > 0.0001 ||\n 1 - Math.abs(this.lastCameraAngleUpdateQuaternion.dot(this.camera.quaternion)) > 0.00001;\n if (!cameraMoved) {\n return;\n }\n\n this.lastCameraAngleUpdatePosition.copy(this.camera.position);\n this.lastCameraAngleUpdateQuaternion.copy(this.camera.quaternion);\n this.hasCameraAngleUpdateSnapshot = true;\n this.markerLayoutDirty = false;\n\n // Visibility comes from the combination of:\n // - collapsed child state\n // - solo mode\n // - explicit cameraAngle gates\n // Front-facing markers still rely on GPU depth testing for occlusion.\n //\n // cameraAngle-driven transitions should animate, while structural visibility\n // changes (collapse/solo) should apply immediately.\n const cameraAngle = getModelLocalOrbitAngle(this.model, this.modelCenter, this.camera.position);\n\n for (const [name, sphere] of this.markerMeshes) {\n const markerAngle = sphere.userData.cameraAngle;\n const isStructurallyVisible = shouldShow3DMarker({\n name,\n hiddenChildren: this.hiddenChildren,\n soloedMarker: this.soloedMarker,\n });\n const shouldPassAngleGate = requireAnnotationCameraCore().passesMarkerCameraAngleGate({\n markerAngle,\n currentCameraAngle: cameraAngle,\n });\n const passesViewportGate = isStructurallyVisible && shouldPassAngleGate\n ? this.updateMarkerLineLayout(name)\n : (this.markerViewportVisibility.get(name) ?? true);\n const visible = isStructurallyVisible && shouldPassAngleGate && passesViewportGate;\n\n const hadAngleGate = markerAngle !== undefined && markerAngle !== 0;\n const previousAngleGate = this.markerAngleGateVisibility.get(name);\n this.markerAngleGateVisibility.set(name, shouldPassAngleGate);\n const angleGateChanged =\n hadAngleGate &&\n previousAngleGate !== undefined &&\n previousAngleGate !== shouldPassAngleGate;\n\n if (!isStructurallyVisible) {\n this.stopMarkerVisibilityAnimation(name, true);\n this.setMarkerObjectsVisible(name, false);\n continue;\n }\n\n if (angleGateChanged) {\n this.animateMarkerVisibility(name, visible, VISIBILITY_ANIMATION_DURATION);\n continue;\n }\n\n if (!this.activeMarkerVisibilityAnimations.has(name)) {\n this.setMarkerObjectsVisible(name, visible);\n }\n }\n }\n\n private refreshLaterality(): void {\n this.laterality = detectAnnotationLaterality(this.model, this.regions, boneResolutionProfile(this.characterConfig));\n }\n\n /**\n * Apply zoom-based scaling to all markers, lines, and labels.\n * Runs on zoom threshold crossings and when marker geometry changes.\n */\n private applyZoomScale(scaleFactor: number, scaleSpheres = true): void {\n const isZoomed = scaleFactor < 1;\n const sphereScaleFactor = isZoomed ? ZOOMED_IN_SPHERE_SCALE : 1.0;\n const labelScaleFactor = isZoomed ? ZOOMED_IN_LABEL_SCALE : 1.0;\n\n // A layout refresh outside the close-up range keeps the continuous\n // distance scale already applied above.\n if (scaleSpheres) {\n for (const sphere of this.markerMeshes.values()) {\n sphere.scale.setScalar(sphereScaleFactor);\n }\n }\n\n for (const line of this.lineMeshes.values()) {\n const material = line.material as THREE.LineBasicMaterial;\n material.opacity = isZoomed ? 0.6 : 0.9;\n }\n\n // Scale labels using their stored base scales (labels stay more readable)\n for (const [name, label] of this.labelSprites) {\n const baseScale = this.labelScales.get(name);\n if (baseScale) {\n label.scale.set(\n baseScale.x * labelScaleFactor,\n baseScale.y * labelScaleFactor,\n 1\n );\n }\n }\n }\n\n setVisible(visible: boolean): void {\n this.animateVisibility(visible);\n }\n\n private readObjectOpacity(object: { material?: THREE.Material | THREE.Material[] }): number {\n if (!object.material) return 1;\n const materials = Array.isArray(object.material) ? object.material : [object.material];\n const materialWithOpacity = materials.find((material) => 'opacity' in material) as THREE.Material | undefined;\n return materialWithOpacity && 'opacity' in materialWithOpacity\n ? materialWithOpacity.opacity\n : 1;\n }\n\n private setObjectOpacity(object: { material?: THREE.Material | THREE.Material[] }, opacity: number): void {\n if (!object.material) return;\n const materials = Array.isArray(object.material) ? object.material : [object.material];\n for (const material of materials) {\n if ('opacity' in material) {\n // Opacity is a uniform; only a transparency mode change needs Three\n // to revalidate the material's program during a visibility animation.\n if (!material.transparent) {\n material.transparent = true;\n material.needsUpdate = true;\n }\n material.opacity = opacity;\n }\n }\n }\n\n private captureVisibilityAnimationStates(): MarkerVisibilityAnimationState[] {\n const states: MarkerVisibilityAnimationState[] = [];\n\n for (const [name, sphere] of this.markerMeshes) {\n const line = this.lineMeshes.get(name);\n const label = this.labelSprites.get(name);\n const arrow = this.arrowMeshes.get(name);\n\n const state: MarkerVisibilityAnimationState = {};\n\n if (sphere.visible) {\n state.sphere = {\n object: sphere,\n opacity: this.readObjectOpacity(sphere),\n };\n }\n\n if (line?.visible) {\n state.line = {\n object: line,\n opacity: this.readObjectOpacity(line),\n };\n }\n\n if (label?.visible) {\n state.label = {\n object: label,\n opacity: this.readObjectOpacity(label),\n scale: label.scale.clone(),\n };\n }\n\n if (arrow?.visible) {\n state.arrow = {\n object: arrow,\n opacity: this.readObjectOpacity(arrow),\n };\n }\n\n if (state.sphere || state.line || state.label || state.arrow) {\n states.push(state);\n }\n }\n\n return states;\n }\n\n private getVisibilityAnimationFactors(visible: boolean, t: number): {\n itemOpacityFactor: number;\n labelScaleFactor: number;\n lineOpacityFactor: number;\n } {\n return requireAnnotationCameraCore().markerVisibilityAnimationFactors(visible, t);\n }\n\n private applyVisibilityAnimationStates(\n states: MarkerVisibilityAnimationState[],\n visible: boolean,\n t: number\n ): void {\n const { itemOpacityFactor, labelScaleFactor, lineOpacityFactor } = this.getVisibilityAnimationFactors(visible, t);\n\n for (const state of states) {\n if (state.sphere) {\n const { object, opacity } = state.sphere;\n object.visible = true;\n this.setObjectOpacity(object, opacity * itemOpacityFactor);\n }\n\n if (state.line) {\n const { object, opacity } = state.line;\n object.visible = true;\n this.setObjectOpacity(object, opacity * lineOpacityFactor);\n }\n\n if (state.label) {\n const { object, opacity, scale } = state.label;\n object.visible = true;\n object.scale.set(scale.x * labelScaleFactor, scale.y * labelScaleFactor, scale.z);\n this.setObjectOpacity(object, opacity * itemOpacityFactor);\n }\n\n if (state.arrow) {\n const { object, opacity } = state.arrow;\n object.visible = true;\n this.setObjectOpacity(object, opacity * itemOpacityFactor);\n }\n\n // The reveal briefly enlarges labels beyond their resting scale. Keep\n // clipping against the actual animated size, including that overshoot.\n const name = state.label?.object.userData.annotation;\n if (typeof name === 'string' && !this.updateMarkerLineLayout(name)) {\n this.setMarkerObjectsVisible(name, false, false);\n }\n }\n }\n\n private restoreVisibilityAnimationStates(states: MarkerVisibilityAnimationState[]): void {\n for (const state of states) {\n if (state.sphere) {\n const { object, opacity } = state.sphere;\n this.setObjectOpacity(object, opacity);\n }\n\n if (state.line) {\n const { object, opacity } = state.line;\n this.setObjectOpacity(object, opacity);\n }\n\n if (state.label) {\n const { object, opacity, scale } = state.label;\n object.scale.copy(scale);\n this.setObjectOpacity(object, opacity);\n }\n\n if (state.arrow) {\n const { object, opacity } = state.arrow;\n this.setObjectOpacity(object, opacity);\n }\n }\n }\n\n private stopAllMarkerVisibilityAnimations(restoreState = false): void {\n for (const name of new Set([\n ...this.activeMarkerVisibilityAnimations,\n ...this.markerVisibilityAnimationStates.keys(),\n ])) {\n this.stopMarkerVisibilityAnimation(name, restoreState);\n }\n }\n\n private stopMarkerVisibilityAnimation(name: string, restoreState = false): void {\n this.visibilityAnimationScheduler.cancel(`marker:${name}`);\n this.activeMarkerVisibilityAnimations.delete(name);\n\n if (restoreState) {\n const state = this.markerVisibilityAnimationStates.get(name);\n if (state) {\n this.restoreVisibilityAnimationStates([state]);\n }\n }\n\n this.markerVisibilityAnimationStates.delete(name);\n }\n\n private getMarkerTargetVisibility(name: string): boolean {\n const target = this.markerTargetVisibility.get(name);\n if (target !== undefined) return target;\n return this.markerMeshes.get(name)?.visible ?? false;\n }\n\n private setMarkerObjectsVisible(name: string, visible: boolean, persistTarget = true): void {\n const sphere = this.markerMeshes.get(name);\n const line = this.lineMeshes.get(name);\n const label = this.labelSprites.get(name);\n const arrow = this.arrowMeshes.get(name);\n\n if (sphere) sphere.visible = visible;\n if (line) line.visible = visible;\n if (label) label.visible = visible;\n if (arrow) arrow.visible = visible;\n if (persistTarget) {\n this.markerTargetVisibility.set(name, visible);\n }\n }\n\n private getMarkerFallbackOpacity(name: string, kind: 'sphere' | 'line' | 'label' | 'arrow'): number {\n const style = this.resolvedStyles.get(name);\n\n switch (kind) {\n case 'sphere':\n return 0.95 * (style?.opacity ?? 1);\n case 'line':\n return name === this.currentRegion ? 1 : (this.isZoomedIn ? 0.6 : 0.9);\n case 'label':\n return 1;\n case 'arrow':\n return style?.opacity ?? 1;\n }\n }\n\n private getMarkerBaseLabelScale(name: string, label: THREE.Sprite): THREE.Vector3 {\n if (label.scale.x > 0.001 && label.scale.y > 0.001) {\n return label.scale.clone();\n }\n\n const baseScale = this.labelScales.get(name);\n if (!baseScale) {\n return new THREE.Vector3(1, 1, 1);\n }\n\n const selectionScale = name === this.currentRegion ? 1.1 : 1;\n const zoomScale = this.isZoomedIn ? ZOOMED_IN_LABEL_SCALE : 1;\n\n return new THREE.Vector3(\n baseScale.x * selectionScale * zoomScale,\n baseScale.y * selectionScale * zoomScale,\n 1,\n );\n }\n\n private captureMarkerVisibilityAnimationState(name: string): MarkerVisibilityAnimationState | null {\n const sphere = this.markerMeshes.get(name);\n const line = this.lineMeshes.get(name);\n const label = this.labelSprites.get(name);\n const arrow = this.arrowMeshes.get(name);\n\n const state: MarkerVisibilityAnimationState = {};\n\n if (sphere) {\n state.sphere = {\n object: sphere,\n opacity: Math.max(\n this.readObjectOpacity(sphere),\n this.getMarkerFallbackOpacity(name, 'sphere'),\n ),\n };\n }\n\n if (line) {\n state.line = {\n object: line,\n opacity: Math.max(\n this.readObjectOpacity(line),\n this.getMarkerFallbackOpacity(name, 'line'),\n ),\n };\n }\n\n if (label) {\n state.label = {\n object: label,\n opacity: Math.max(\n this.readObjectOpacity(label),\n this.getMarkerFallbackOpacity(name, 'label'),\n ),\n scale: this.getMarkerBaseLabelScale(name, label),\n };\n }\n\n if (arrow) {\n state.arrow = {\n object: arrow,\n opacity: Math.max(\n this.readObjectOpacity(arrow),\n this.getMarkerFallbackOpacity(name, 'arrow'),\n ),\n };\n }\n\n if (state.sphere || state.line || state.label || state.arrow) {\n return state;\n }\n\n return null;\n }\n\n // Child expand/collapse should use the exact same opacity and label-scale treatment\n // as the normal marker show/hide path. The earlier regressions came from layering a\n // second bespoke animation system on top of expansion instead of reusing this one.\n private animateMarkerVisibility(name: string, visible: boolean, duration: number): void {\n if (this.getMarkerTargetVisibility(name) === visible) {\n return;\n }\n this.markerTargetVisibility.set(name, visible);\n\n this.stopMarkerVisibilityAnimation(name, true);\n\n const state = this.captureMarkerVisibilityAnimationState(name);\n if (!state) {\n this.setMarkerObjectsVisible(name, visible, false);\n return;\n }\n\n this.markerVisibilityAnimationStates.set(name, state);\n this.setMarkerObjectsVisible(name, true, false);\n\n const startTime = performance.now();\n this.activeMarkerVisibilityAnimations.add(name);\n this.visibilityAnimationScheduler.schedule(`marker:${name}`, (now): boolean => {\n const elapsed = now - startTime;\n const t = Math.min(elapsed / duration, 1);\n this.applyVisibilityAnimationStates([state], visible, t);\n\n if (t < 1) {\n return true;\n }\n\n this.activeMarkerVisibilityAnimations.delete(name);\n this.markerVisibilityAnimationStates.delete(name);\n this.restoreVisibilityAnimationStates([state]);\n this.setMarkerObjectsVisible(name, visible, false);\n return false;\n });\n }\n\n private stopVisibilityAnimation(restoreState = false): void {\n this.visibilityAnimationScheduler.cancel(GROUP_VISIBILITY_ANIMATION_KEY);\n this.visibilityAnimationActive = false;\n\n if (restoreState && this.visibilityAnimationStates.length > 0) {\n this.markerGroup.visible = true;\n this.restoreVisibilityAnimationStates(this.visibilityAnimationStates);\n }\n }\n\n private animateVisibility(visible: boolean): void {\n if (visible === this.markerGroup.visible && !this.visibilityAnimationActive) {\n return;\n }\n\n this.stopAllMarkerVisibilityAnimations(true);\n this.stopVisibilityAnimation(true);\n\n if (visible) {\n this.markerGroup.visible = true;\n // Capture fitted label scales/endpoints, rather than their construction\n // defaults, before animation temporarily suspends the layout pass.\n this.markerLayoutDirty = true;\n this.update();\n }\n\n this.visibilityAnimationStates = this.captureVisibilityAnimationStates();\n if (this.visibilityAnimationStates.length === 0) {\n this.markerGroup.visible = visible;\n return;\n }\n\n const startTime = performance.now();\n this.visibilityAnimationActive = true;\n this.visibilityAnimationScheduler.schedule(GROUP_VISIBILITY_ANIMATION_KEY, (now): boolean => {\n const elapsed = now - startTime;\n const t = Math.min(elapsed / VISIBILITY_ANIMATION_DURATION, 1);\n this.applyVisibilityAnimationStates(this.visibilityAnimationStates, visible, t);\n\n if (t < 1) {\n return true;\n }\n\n this.visibilityAnimationActive = false;\n this.restoreVisibilityAnimationStates(this.visibilityAnimationStates);\n if (!visible) {\n this.markerGroup.visible = false;\n }\n this.visibilityAnimationStates = [];\n return false;\n });\n }\n\n clear(): void {\n this.regionLoadGeneration += 1;\n this.regionLoadHasFreshMatrices = false;\n this.stopAllMarkerVisibilityAnimations(false);\n this.stopVisibilityAnimation(false);\n this.visibilityAnimationStates = [];\n while (this.markerGroup.children.length > 0) {\n const child = this.markerGroup.children[0];\n this.markerGroup.remove(child);\n\n const mesh = child as THREE.Mesh;\n if (mesh.geometry) mesh.geometry.dispose();\n if (mesh.material) {\n const mat = mesh.material as THREE.Material;\n if ((mat as THREE.SpriteMaterial).map) {\n (mat as THREE.SpriteMaterial).map!.dispose();\n }\n mat.dispose();\n }\n }\n\n this.markerMeshes.clear();\n this.lineMeshes.clear();\n this.lineEndpoints.clear();\n this.labelSprites.clear();\n this.labelScales.clear();\n this.arrowMeshes.clear();\n this.resolvedStyles.clear();\n this.expandedRegions.clear();\n this.parentChildIndex.clear();\n this.childParentIndex.clear();\n this.hiddenChildren.clear();\n this.groupVisibility.clear();\n this.originalLineLengths.clear();\n this.boneRefs.clear();\n this.localOffsets.clear();\n this.markerTargetVisibility.clear();\n this.markerAngleGateVisibility.clear();\n this.markerViewportVisibility.clear();\n this.soloedMarker = null;\n this.markerLayoutDirty = false;\n this.hasCameraAngleUpdateSnapshot = false;\n }\n\n // ============ SOLO MODE ============\n\n /**\n * Solo a specific marker - hide all others.\n * Pass null to unsolo.\n */\n setSoloMarker(regionName: string | null): void {\n this.soloedMarker = regionName;\n\n for (const [name] of this.markerMeshes) {\n const shouldShow = regionName === null || name === regionName;\n const region = this.regions.find(r => r.name === name);\n\n // Skip fallback markers (they have their own visibility logic)\n if (region?.isFallback) continue;\n\n this.stopMarkerVisibilityAnimation(name, true);\n this.setMarkerObjectsVisible(name, shouldShow);\n }\n }\n\n /**\n * Get currently soloed marker name.\n */\n getSoloedMarker(): string | null {\n return this.soloedMarker;\n }\n\n // ============ EXPANDING ANCHORS ============\n\n /**\n * Expand a parent region to show its children.\n */\n async expandRegion(\n regionName: string,\n animation: ExpandAnimation = 'outward',\n duration = VISIBILITY_ANIMATION_DURATION\n ): Promise<void> {\n const children = this.parentChildIndex.get(regionName);\n if (!children || children.length === 0) return;\n\n // Already expanded\n if (this.expandedRegions.get(regionName)) return;\n\n this.expandedRegions.set(regionName, true);\n this.updateLabelSprite(regionName);\n\n // Get parent position\n const parentSphere = this.markerMeshes.get(regionName);\n if (!parentSphere) return;\n const parentPos = parentSphere.position.clone();\n\n // Animate children\n const staggerDelay = animation === 'staggered' ? 50 : 0;\n\n for (let i = 0; i < children.length; i++) {\n const childName = children[i];\n const delay = i * staggerDelay;\n this.hiddenChildren.delete(childName);\n\n // Schedule animation\n setTimeout(() => {\n this.animateMarkerIn(childName, parentPos, duration);\n }, delay);\n }\n }\n\n /**\n * Collapse a parent region to hide its children.\n */\n async collapseRegion(\n regionName: string,\n duration = VISIBILITY_ANIMATION_DURATION\n ): Promise<void> {\n const children = this.parentChildIndex.get(regionName);\n if (!children || children.length === 0) return;\n\n // Already collapsed\n if (!this.expandedRegions.get(regionName)) return;\n\n this.expandedRegions.set(regionName, false);\n this.updateLabelSprite(regionName);\n\n // Get parent position for animation target\n const parentSphere = this.markerMeshes.get(regionName);\n if (!parentSphere) return;\n const parentPos = parentSphere.position.clone();\n\n // Animate children out\n for (const childName of children) {\n this.animateMarkerOut(childName, parentPos, duration);\n setTimeout(() => {\n this.hiddenChildren.add(childName);\n }, duration);\n }\n }\n\n /**\n * Toggle expand/collapse state.\n */\n toggleRegion(\n regionName: string,\n animation: ExpandAnimation = 'outward',\n duration = VISIBILITY_ANIMATION_DURATION\n ): void {\n if (this.expandedRegions.get(regionName)) {\n this.collapseRegion(regionName, duration * 0.75);\n } else {\n this.expandRegion(regionName, animation, duration);\n }\n }\n\n /**\n * Get expanded state of all regions.\n */\n getExpandedRegions(): ExpandedRegionState[] {\n const states: ExpandedRegionState[] = [];\n for (const [regionName, isExpanded] of this.expandedRegions) {\n const children = this.parentChildIndex.get(regionName) || [];\n states.push({ regionName, isExpanded, children });\n }\n return states;\n }\n\n /**\n * Collapse all currently expanded regions.\n * Called automatically when zooming out past threshold.\n */\n private collapseAllRegions(duration = VISIBILITY_ANIMATION_DURATION): void {\n // Get list of expanded regions (iterate copy to avoid mutation during iteration)\n const expandedList = [...this.expandedRegions.entries()]\n .filter(([_, isExpanded]) => isExpanded)\n .map(([name, _]) => name);\n\n if (expandedList.length === 0) return;\n\n // Collapse all expanded regions\n for (const regionName of expandedList) {\n this.collapseRegion(regionName, duration);\n }\n }\n\n /**\n * Animate a child marker in place using the same visibility curve as regular markers.\n */\n private animateMarkerIn(name: string, _fromPos: THREE.Vector3, duration: number): void {\n this.animateMarkerVisibility(name, true, duration);\n }\n\n /**\n * Animate a child marker out in place using the same visibility curve as regular markers.\n */\n private animateMarkerOut(name: string, _toPos: THREE.Vector3, duration: number): void {\n this.animateMarkerVisibility(name, false, duration);\n }\n\n // ============ RUNTIME STYLE UPDATES ============\n\n /**\n * Update line style for a specific region at runtime.\n */\n updateLineStyle(regionName: string, lineConfig: Partial<LineConfig>): void {\n console.log(`[3DMarkers] updateLineStyle: region=${regionName}`, lineConfig);\n const style = this.resolvedStyles.get(regionName);\n if (!style) {\n console.warn(`[3DMarkers] updateLineStyle: No style found for region ${regionName}`);\n return;\n }\n\n // Update resolved style\n style.line = { ...style.line, ...lineConfig };\n\n // Get current endpoints\n const endpoints = this.lineEndpoints.get(regionName);\n if (!endpoints) {\n console.warn(`[3DMarkers] updateLineStyle: No endpoints for region ${regionName}. Available:`, Array.from(this.lineEndpoints.keys()));\n return;\n }\n console.log(`[3DMarkers] updateLineStyle: Found endpoints for ${regionName}, recreating line`);\n\n // Remove old line and arrow\n const oldLine = this.lineMeshes.get(regionName);\n const oldArrow = this.arrowMeshes.get(regionName);\n\n if (oldLine) {\n this.markerGroup.remove(oldLine);\n oldLine.geometry.dispose();\n (oldLine.material as THREE.Material).dispose();\n }\n if (oldArrow) {\n this.markerGroup.remove(oldArrow);\n oldArrow.geometry.dispose();\n (oldArrow.material as THREE.Material).dispose();\n this.arrowMeshes.delete(regionName);\n }\n\n // Create new styled line\n const newLineConfig: Required<LineConfig> = {\n style: style.line.style ?? 'solid',\n curve: style.line.curve ?? 'straight',\n arrowHead: style.line.arrowHead ?? false,\n thickness: style.line.thickness ?? 2,\n length: style.line.length ?? this.config.lineLength,\n };\n\n const line = this.createStyledLine(\n endpoints.start,\n endpoints.end,\n newLineConfig,\n style.lineColor,\n 0.9 * style.opacity,\n regionName\n );\n line.name = `line_${regionName}`;\n line.userData.annotation = regionName;\n\n // Preserve visibility from old line or sphere\n const sphere = this.markerMeshes.get(regionName);\n line.visible = sphere?.visible ?? true;\n\n this.markerGroup.add(line);\n this.lineMeshes.set(regionName, line);\n\n // For dashed/dotted lines, ensure line distances are computed after adding to scene\n if (newLineConfig.style === 'dashed' || newLineConfig.style === 'dotted') {\n line.computeLineDistances();\n }\n\n const mat = line.material as THREE.LineDashedMaterial;\n console.log(`[3DMarkers] updateLineStyle: Created new line for ${regionName}`, {\n style: newLineConfig.style,\n curve: newLineConfig.curve,\n arrowHead: newLineConfig.arrowHead,\n visible: line.visible,\n materialType: (line.material as THREE.Material).type,\n inScene: this.markerGroup.children.includes(line),\n childrenCount: this.markerGroup.children.length,\n color: mat.color?.getHexString(),\n opacity: mat.opacity,\n dashSize: 'dashSize' in mat ? mat.dashSize : 'N/A',\n gapSize: 'gapSize' in mat ? mat.gapSize : 'N/A',\n lineDistanceAttr: line.geometry.getAttribute('lineDistance')?.count ?? 0,\n });\n }\n\n /**\n * Update marker style for a specific region at runtime.\n */\n updateMarkerStyle(regionName: string, styleOverrides: Partial<MarkerStyleOverrides>): void {\n console.log(`[3DMarkers] updateMarkerStyle: region=${regionName}`, styleOverrides);\n const style = this.resolvedStyles.get(regionName);\n if (!style) {\n console.warn(`[3DMarkers] No resolved style for region: ${regionName}. Available regions:`, Array.from(this.resolvedStyles.keys()));\n return;\n }\n\n // Update resolved style\n if (styleOverrides.markerColor !== undefined) style.markerColor = styleOverrides.markerColor;\n if (styleOverrides.markerRadius !== undefined) style.markerRadius = styleOverrides.markerRadius;\n if (styleOverrides.lineColor !== undefined) style.lineColor = styleOverrides.lineColor;\n if (styleOverrides.opacity !== undefined) style.opacity = styleOverrides.opacity;\n if (styleOverrides.line) {\n style.line = { ...style.line, ...styleOverrides.line };\n }\n\n // Update sphere - use color.set() with new Color for reliable updates\n const sphere = this.markerMeshes.get(regionName);\n console.log(`[3DMarkers] Found sphere for ${regionName}:`, !!sphere, 'meshes keys:', Array.from(this.markerMeshes.keys()));\n if (sphere) {\n const mat = sphere.material as THREE.MeshBasicMaterial;\n console.log(`[3DMarkers] Setting sphere color to:`, style.markerColor?.toString(16));\n mat.color.set(new THREE.Color(style.markerColor));\n mat.opacity = 0.95 * style.opacity;\n mat.needsUpdate = true;\n }\n\n // Update line - use color.set() with new Color for reliable updates\n const line = this.lineMeshes.get(regionName);\n console.log(`[3DMarkers] Found line for ${regionName}:`, !!line);\n if (line) {\n const mat = line.material as THREE.LineBasicMaterial;\n mat.color.set(new THREE.Color(style.lineColor));\n mat.opacity = 0.9 * style.opacity;\n mat.needsUpdate = true;\n }\n\n // Update arrow - use color.set() with new Color for reliable updates\n const arrow = this.arrowMeshes.get(regionName);\n if (arrow) {\n const mat = arrow.material as THREE.MeshBasicMaterial;\n mat.color.set(new THREE.Color(style.lineColor));\n mat.opacity = style.opacity;\n mat.needsUpdate = true;\n }\n\n // If line config changed, rebuild the line\n if (styleOverrides.line) {\n this.updateLineStyle(regionName, styleOverrides.line);\n }\n }\n\n dispose(): void {\n this.domElement.removeEventListener('click', this.onClick);\n this.clear();\n this.scene.remove(this.markerGroup);\n }\n}\n","import { boneResolutionProfile } from './boneResolutionProfile';\nimport type {\n Region,\n CharacterConfig,\n ExpandAnimation,\n ExpandedRegionState,\n AnnotationAnchoredRegion,\n} from './types';\nimport {\n detectAnnotationLaterality,\n fuzzyNameMatch,\n getDefaultAnnotationLaterality,\n getModelLocalOrbitAngle,\n getSemanticHorizontalSignForSide,\n passesMarkerCameraAngleGate,\n resolveBoneNames,\n resolveFaceCenter,\n resolveRegionVisibilityCameraAngle,\n type AnnotationLaterality,\n} from './adapter';\nimport * as THREE from 'three';\nimport { AnimationFrameTaskScheduler } from './animationFrameTaskScheduler';\nimport {\n resolveMarkerAnchorRegion,\n shouldUseFaceCenterForMarkerAnchor,\n} from './annotationAnchorModel';\nimport {\n getRuntimeAUMorphAnchorPoint,\n getRuntimeAnnotationSide,\n getRuntimeAUMeshSideOffset,\n} from './runtimeAnnotationSidePreview';\n\nconst HTML_VISIBILITY_ANIMATION_KEY = 'html-marker-layer';\n\ninterface FaceCenterCacheEntry {\n center: THREE.Vector3;\n headBone: THREE.Object3D | null;\n headBoneLocalOffset: THREE.Vector3 | null;\n}\n\nfunction getAnnotationRegionLabel(region: Region): string | undefined {\n const label = (region as AnnotationAnchoredRegion).label;\n if (typeof label !== 'string') return undefined;\n const trimmed = label.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction formatFallbackRegionLabel(name: string): string {\n return name.split('_').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');\n}\n\n/**\n * HTML overlay markers with GPU-based occlusion via 3D proxy points.\n *\n * Architecture:\n * 1. Each HTML marker has a corresponding invisible 3D mesh in the scene\n * 2. The 3D mesh uses onBeforeRender callback to notify visibility\n * 3. When the mesh renders (passes depth test), it updates the HTML marker position\n * 4. When occluded, the callback doesn't fire, so we track \"was rendered this frame\"\n *\n * Performance: No per-frame visibility calculations - GPU depth testing determines\n * visibility, and we only update HTML when the 3D proxy actually renders.\n */\nexport class DPthreeHTMLMarkers {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private domElement: HTMLElement;\n private model: THREE.Object3D | null = null;\n private regions: Region[] = [];\n private currentRegion: string | null = null;\n private onSelect: (name: string) => void;\n private characterConfig: CharacterConfig | null = null;\n\n // HTML layer\n private labelsContainer: HTMLDivElement;\n private markers: Map<string, HTMLDivElement> = new Map();\n\n // 3D occlusion proxies\n private occlusionGroup: THREE.Group;\n private occlusionMeshes: Map<string, THREE.Mesh> = new Map();\n\n // Track which markers were rendered this frame\n private renderedThisFrame: Set<string> = new Set();\n private frameId = 0;\n private markerFrameIds: Map<string, number> = new Map();\n private visibilityAnimationActive = false;\n private readonly visibilityAnimationScheduler = new AnimationFrameTaskScheduler();\n private visibilityAnimationToken = 0;\n\n // Model bounds\n private modelCenter = new THREE.Vector3();\n private modelSize = new THREE.Vector3();\n private autoCollapseThreshold = 2.0; // Calculated from model size\n private lastCameraDistance = -1; // Cache to detect zoom-out\n\n // Cached viewport size for marker positioning\n private viewportSize: { width: number; height: number } | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n // Expanding anchors state\n private expandedRegions: Map<string, boolean> = new Map();\n private parentChildIndex: Map<string, string[]> = new Map(); // parent -> children\n private childParentIndex: Map<string, string> = new Map(); // child -> parent\n private hiddenChildren: Set<string> = new Set(); // Children that should be hidden\n\n // Cache face center results per marker to avoid expensive recomputation every frame.\n private faceCenterCache: Map<string, FaceCenterCacheEntry> = new Map();\n private laterality: AnnotationLaterality = getDefaultAnnotationLaterality();\n\n constructor(config: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n domElement: HTMLElement;\n onSelect: (name: string) => void;\n }) {\n this.scene = config.scene;\n this.camera = config.camera;\n this.domElement = config.domElement;\n this.onSelect = config.onSelect;\n\n // Create group for occlusion proxies\n this.occlusionGroup = new THREE.Group();\n this.occlusionGroup.name = 'DPthreeHTMLMarkers_Occlusion';\n this.scene.add(this.occlusionGroup);\n\n // Create container for HTML markers\n this.labelsContainer = document.createElement('div');\n this.labelsContainer.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: hidden;\n transform-origin: center center;\n will-change: opacity, transform;\n opacity: 1;\n transform: scale(1);\n `;\n\n const parent = this.domElement.parentElement;\n if (parent) {\n const style = window.getComputedStyle(parent);\n if (style.position === 'static') {\n parent.style.position = 'relative';\n }\n parent.appendChild(this.labelsContainer);\n }\n\n this.updateViewportSize();\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateViewportSize();\n });\n this.resizeObserver.observe(this.domElement);\n }\n }\n\n /** Keep labels/selection while rebinding viewport observation to a new canvas. */\n setDomElement(element: HTMLElement): void {\n if (element === this.domElement) return;\n this.resizeObserver?.disconnect();\n this.domElement = element;\n const parent = element.parentElement;\n if (parent && this.labelsContainer.parentElement !== parent) parent.appendChild(this.labelsContainer);\n this.resizeObserver?.observe(element);\n this.updateViewportSize();\n }\n\n setModel(model: THREE.Object3D): void {\n this.model = model;\n this.faceCenterCache.clear(); // Clear cache when model changes\n model.updateMatrixWorld(true);\n const box = new THREE.Box3().setFromObject(model);\n box.getCenter(this.modelCenter);\n box.getSize(this.modelSize);\n\n // Auto-collapse threshold: 2.5x model height - collapse when zoomed out this far\n this.autoCollapseThreshold = this.modelSize.y * 2.5;\n this.lastCameraDistance = -1; // Reset to force recalculation\n this.refreshLaterality();\n }\n\n loadRegions(config: CharacterConfig): void {\n this.clear();\n this.regions = config.regions ?? [];\n this.characterConfig = config;\n this.refreshLaterality();\n\n // Build parent/child index\n this.parentChildIndex.clear();\n this.childParentIndex.clear();\n this.hiddenChildren.clear();\n for (const region of (config.regions ?? [])) {\n if (region.children && region.children.length > 0) {\n this.parentChildIndex.set(region.name, region.children);\n for (const childName of region.children) {\n this.childParentIndex.set(childName, region.name);\n this.hiddenChildren.add(childName); // Children start hidden\n }\n }\n }\n\n (config.regions ?? []).forEach((region, index) => {\n this.createMarker(region, index + 1);\n });\n }\n\n setCurrentRegion(name: string | null): void {\n this.currentRegion = name;\n this.updateMarkerStyles();\n }\n\n /**\n * Update a region's configuration and recreate its marker.\n * This is the general method for updating any region properties.\n *\n * @param regionName - Name of the region to update\n * @param update - Partial region config to merge with existing config\n */\n updateRegion(regionName: string, update: Partial<Region>): void {\n console.log(`[HTMLMarkers] updateRegion: ${regionName}`, update);\n\n // Find the region\n const regionIndex = this.regions.findIndex(r => r.name === regionName);\n if (regionIndex === -1) {\n const newRegion: Region = { name: regionName, ...update };\n this.regions = [...this.regions, newRegion];\n if (this.characterConfig) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: [...(this.characterConfig.regions ?? []), newRegion],\n };\n }\n this.refreshLaterality();\n this.faceCenterCache.delete(regionName);\n this.createMarker(newRegion, this.regions.length);\n console.log(`[HTMLMarkers] Region \"${regionName}\" marker created`);\n return;\n }\n\n // Merge update with existing region config\n this.regions[regionIndex] = {\n ...this.regions[regionIndex],\n ...update,\n };\n\n // Update characterConfig if it exists\n if (this.characterConfig?.regions) {\n const configRegionIndex = this.characterConfig.regions.findIndex(r => r.name === regionName);\n if (configRegionIndex !== -1) {\n this.characterConfig.regions[configRegionIndex] = {\n ...this.characterConfig.regions[configRegionIndex],\n ...update,\n };\n }\n }\n\n this.refreshLaterality();\n this.faceCenterCache.delete(regionName);\n\n // Remove and recreate the marker\n this.removeMarkerComponents(regionName);\n\n // Recreate marker with new position\n const region = this.regions[regionIndex];\n this.createMarker(region, regionIndex + 1);\n\n console.log(`[HTMLMarkers] Region \"${regionName}\" marker recreated with updated config`);\n }\n\n removeRegion(regionName: string): void {\n const regionIndex = this.regions.findIndex(r => r.name === regionName);\n if (regionIndex !== -1) {\n this.regions = this.regions.filter((region) => region.name !== regionName);\n }\n\n if (this.characterConfig?.regions) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: this.characterConfig.regions.filter((region) => region.name !== regionName),\n };\n }\n\n this.parentChildIndex.delete(regionName);\n this.childParentIndex.delete(regionName);\n this.hiddenChildren.delete(regionName);\n this.removeMarkerComponents(regionName);\n }\n\n /**\n * Remove all marker components for a region\n */\n private removeMarkerComponents(regionName: string): void {\n const oldMarker = this.markers.get(regionName);\n if (oldMarker) {\n oldMarker.remove();\n this.markers.delete(regionName);\n }\n\n const oldOcclusionMesh = this.occlusionMeshes.get(regionName);\n if (oldOcclusionMesh) {\n oldOcclusionMesh.onBeforeRender = () => {}; // Clear callback\n this.occlusionGroup.remove(oldOcclusionMesh);\n if (oldOcclusionMesh.geometry) oldOcclusionMesh.geometry.dispose();\n if (oldOcclusionMesh.material) (oldOcclusionMesh.material as THREE.Material).dispose();\n this.occlusionMeshes.delete(regionName);\n }\n\n this.markerFrameIds.delete(regionName);\n this.faceCenterCache.delete(regionName);\n }\n\n updateRegionMeshes(regionName: string, meshNames: string[]): void {\n console.log(`[HTMLMarkers] updateRegionMeshes: ${regionName} -> ${meshNames.join(', ')}`);\n this.updateRegion(regionName, { meshes: meshNames });\n }\n\n /**\n * Reposition an existing marker to a new position.\n */\n repositionMarker(regionName: string, newPosition: THREE.Vector3): void {\n console.log(`[HTMLMarkers] repositionMarker: ${regionName} -> (${newPosition.x.toFixed(3)}, ${newPosition.y.toFixed(3)}, ${newPosition.z.toFixed(3)})`);\n\n const occlusionMesh = this.occlusionMeshes.get(regionName);\n if (occlusionMesh) {\n occlusionMesh.position.copy(newPosition);\n occlusionMesh.userData.position = newPosition.clone();\n }\n }\n\n /**\n * Get the current position of a marker.\n */\n getMarkerPosition(regionName: string): THREE.Vector3 | null {\n const occlusionMesh = this.occlusionMeshes.get(regionName);\n return occlusionMesh ? occlusionMesh.position.clone() : null;\n }\n\n private updateViewportSize(): void {\n const width = this.domElement.clientWidth || this.domElement.offsetWidth;\n const height = this.domElement.clientHeight || this.domElement.offsetHeight;\n\n if (width > 0 && height > 0) {\n this.viewportSize = { width, height };\n return;\n }\n\n const rect = this.domElement.getBoundingClientRect();\n this.viewportSize = { width: rect.width, height: rect.height };\n }\n\n private getViewportSize(): { width: number; height: number } {\n if (!this.viewportSize) {\n this.updateViewportSize();\n }\n\n return this.viewportSize ?? { width: 0, height: 0 };\n }\n\n private setMarkerDisplay(marker: HTMLDivElement, visible: boolean): void {\n const nextDisplay = visible ? 'flex' : 'none';\n if (marker.style.display !== nextDisplay) {\n marker.style.display = nextDisplay;\n }\n }\n\n private setMarkerScale(marker: HTMLDivElement, scale: number): void {\n marker.style.setProperty('--marker-scale', `${scale}`);\n }\n\n private setMarkerScreenPosition(marker: HTMLDivElement, x: number, y: number): void {\n marker.style.setProperty('--marker-x', `${x}px`);\n marker.style.setProperty('--marker-y', `${y}px`);\n }\n\n private createMarker(region: Region, number: number): void {\n if (!this.model) return;\n\n const position = this.getRegionCenter(region);\n if (!position) return;\n const visibilityCameraAngle = resolveRegionVisibilityCameraAngle(region, this.laterality);\n\n const name = region.name;\n const hasChildren = region.children && region.children.length > 0;\n\n // Create 3D occlusion proxy mesh\n // This mesh is tiny and invisible but participates in depth testing\n // When it renders, it notifies the HTML marker to show\n const occlusionMesh = new THREE.Mesh(\n new THREE.SphereGeometry(0.005, 4, 4),\n new THREE.MeshBasicMaterial({\n color: 0xff0000,\n transparent: true,\n opacity: 0, // Invisible\n depthTest: true,\n depthWrite: false,\n })\n );\n occlusionMesh.position.copy(position);\n occlusionMesh.name = `occlusion_${name}`;\n occlusionMesh.frustumCulled = true;\n\n // Store region data for visibility checks\n occlusionMesh.userData.regionName = name;\n occlusionMesh.userData.cameraAngle = visibilityCameraAngle;\n occlusionMesh.userData.position = position.clone();\n\n // This callback fires when the mesh is about to render (passed frustum + depth)\n occlusionMesh.onBeforeRender = () => {\n this.onProxyRendered(name, occlusionMesh);\n };\n\n this.occlusionGroup.add(occlusionMesh);\n this.occlusionMeshes.set(name, occlusionMesh);\n\n // Create HTML marker\n const marker = document.createElement('div');\n marker.className = 'annotation-html-marker';\n marker.dataset.annotation = name;\n marker.title = getAnnotationRegionLabel(region) ?? formatFallbackRegionLabel(name);\n marker.setAttribute('aria-label', marker.title);\n // Show + for parent markers, number for leaf markers\n marker.innerHTML = `<span>${hasChildren ? '+' : number}</span>`;\n marker.style.cssText = `\n position: absolute;\n --marker-x: 0px;\n --marker-y: 0px;\n --marker-scale: 1;\n transform: translate3d(var(--marker-x), var(--marker-y), 0) translate(-50%, -50%) scale(var(--marker-scale));\n pointer-events: auto;\n cursor: pointer;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: rgba(66, 153, 225, 0.9);\n border: 2px solid white;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n display: none;\n align-items: center;\n justify-content: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 12px;\n font-weight: bold;\n color: white;\n transition: transform 0.15s ease, background 0.15s ease, opacity 0.15s ease, box-shadow 0.15s ease;\n z-index: 100;\n `;\n\n marker.addEventListener('mouseenter', () => {\n this.setMarkerScale(marker, 1.2);\n marker.style.background = 'rgba(99, 179, 237, 1)';\n });\n marker.addEventListener('mouseleave', () => {\n if (this.currentRegion !== name) {\n this.setMarkerScale(marker, 1);\n marker.style.background = 'rgba(66, 153, 225, 0.9)';\n }\n });\n marker.addEventListener('click', (e) => {\n e.stopPropagation();\n\n // If this is a parent region with children, toggle expand/collapse\n const children = this.parentChildIndex.get(name);\n if (children && children.length > 0) {\n const regionDef = this.regions.find(r => r.name === name);\n const animation = regionDef?.expandAnimation || 'staggered';\n this.toggleRegion(name, animation);\n }\n\n this.onSelect(name);\n });\n\n this.labelsContainer.appendChild(marker);\n this.markers.set(name, marker);\n }\n\n /**\n * Called when a 3D proxy mesh is about to render.\n * This means it passed frustum culling and depth test - it's visible!\n */\n private onProxyRendered(name: string, mesh: THREE.Mesh): void {\n const marker = this.markers.get(name);\n if (!marker) return;\n\n // Check if this is a hidden child (parent not expanded)\n if (this.hiddenChildren.has(name)) {\n this.setMarkerDisplay(marker, false);\n return;\n }\n\n // Check explicit cameraAngle visibility\n const cameraAngle = mesh.userData.cameraAngle;\n if (cameraAngle !== undefined && cameraAngle !== 0) {\n const currentAngle = getModelLocalOrbitAngle(this.model, this.modelCenter, this.camera.position);\n if (!passesMarkerCameraAngleGate({ markerAngle: cameraAngle, currentCameraAngle: currentAngle })) {\n this.setMarkerDisplay(marker, false);\n return;\n }\n }\n\n // Mark as rendered this frame\n this.markerFrameIds.set(name, this.frameId);\n\n const viewportSize = this.getViewportSize();\n\n // Project 3D position to screen\n const pos = mesh.userData.position as THREE.Vector3;\n const screenPos = pos.clone().project(this.camera);\n\n // Behind camera check\n if (screenPos.z > 1) {\n this.setMarkerDisplay(marker, false);\n return;\n }\n\n // Convert to CSS coordinates\n const x = (screenPos.x * 0.5 + 0.5) * viewportSize.width;\n const y = (-screenPos.y * 0.5 + 0.5) * viewportSize.height;\n\n this.setMarkerDisplay(marker, true);\n this.setMarkerScreenPosition(marker, x, y);\n }\n\n private getSuffixPattern(): string | undefined {\n return this.characterConfig?.suffixPattern;\n }\n\n /**\n * Get center point of a region's bones/meshes.\n * Uses fuzzy matching to handle bone names with numeric suffixes.\n * For face regions, uses resolveFaceCenter with auto-detection by morph count.\n */\n private getRegionCenter(region: Region): THREE.Vector3 | null {\n if (!this.model) return null;\n\n const resolvedAnchor = resolveMarkerAnchorRegion(region);\n const anchorRegion = resolvedAnchor.region;\n this.model.updateMatrixWorld(true);\n\n // PRIORITY 0: Custom position override\n if (anchorRegion.customPosition) {\n return new THREE.Vector3(\n anchorRegion.customPosition.x,\n anchorRegion.customPosition.y,\n anchorRegion.customPosition.z\n );\n }\n\n // PRIORITY 1: For face regions, use cached face center to avoid expensive recomputation\n const isFaceRegion = shouldUseFaceCenterForMarkerAnchor(resolvedAnchor);\n\n if (isFaceRegion) {\n const cacheKey = anchorRegion.name;\n let cachedFaceCenter = this.faceCenterCache.get(cacheKey);\n\n // Initialize cache on first call\n if (!cachedFaceCenter) {\n const faceCenterResult = resolveFaceCenter(this.model as any, anchorRegion as any, boneResolutionProfile(this.characterConfig) ?? undefined);\n\n // Find head bone for tracking animated position\n const headBones: THREE.Object3D[] = [];\n const headBoneNames = resolveBoneNames(anchorRegion.bones, boneResolutionProfile(this.characterConfig))\n .filter((name) => name.toLowerCase().includes('head'));\n this.model.traverse((obj) => {\n if (headBones.length === 0 && headBoneNames.some((name) => fuzzyNameMatch(obj.name, name, this.getSuffixPattern()))) {\n headBones.push(obj);\n }\n });\n\n const headBone = headBones[0] ?? null;\n const center = new THREE.Vector3(\n faceCenterResult.center.x,\n faceCenterResult.center.y,\n faceCenterResult.center.z\n );\n const headBoneLocalOffset = headBone\n ? headBone.worldToLocal(center.clone())\n : null;\n\n cachedFaceCenter = {\n center,\n headBone,\n headBoneLocalOffset,\n };\n this.faceCenterCache.set(cacheKey, cachedFaceCenter);\n }\n\n // If we have a head bone, use its current world position for animated models\n if (cachedFaceCenter.headBone && cachedFaceCenter.headBoneLocalOffset) {\n return cachedFaceCenter.headBone.localToWorld(\n cachedFaceCenter.headBoneLocalOffset.clone()\n );\n }\n\n // Otherwise return cached center\n return cachedFaceCenter.center.clone();\n }\n\n // Standard bone/mesh positioning for non-face regions\n const box = new THREE.Box3();\n let hasObjects = false;\n let usedRuntimeMorphAnchor = false;\n\n if (anchorRegion.objects?.includes('*')) {\n box.expandByObject(this.model);\n hasObjects = true;\n } else {\n if (anchorRegion.bones) {\n const resolvedBoneNames = resolveBoneNames(anchorRegion.bones, boneResolutionProfile(this.characterConfig));\n for (const boneName of resolvedBoneNames) {\n this.model.traverse((obj) => {\n if (fuzzyNameMatch(obj.name, boneName, this.getSuffixPattern())) {\n const worldPos = new THREE.Vector3();\n obj.getWorldPosition(worldPos);\n box.expandByPoint(worldPos);\n hasObjects = true;\n }\n });\n }\n }\n\n if (anchorRegion.meshes) {\n for (const meshName of anchorRegion.meshes) {\n this.model.traverse((obj) => {\n if (fuzzyNameMatch(obj.name, meshName, this.getSuffixPattern()) && (obj as THREE.Mesh).isMesh) {\n const runtimeMorphAnchorPoint = getRuntimeAUMorphAnchorPoint(\n anchorRegion as AnnotationAnchoredRegion,\n obj as THREE.Mesh,\n );\n if (runtimeMorphAnchorPoint) {\n box.expandByPoint(runtimeMorphAnchorPoint);\n usedRuntimeMorphAnchor = true;\n } else {\n box.expandByObject(obj);\n }\n hasObjects = true;\n }\n });\n }\n }\n }\n\n if (!hasObjects || box.isEmpty()) return null;\n\n const center = new THREE.Vector3();\n box.getCenter(center);\n const runtimeSide = getRuntimeAnnotationSide(anchorRegion);\n const runtimeSideSign = runtimeSide === 'left'\n ? getSemanticHorizontalSignForSide('left', this.laterality)\n : runtimeSide === 'right'\n ? getSemanticHorizontalSignForSide('right', this.laterality)\n : 0;\n const runtimeSideOffset = runtimeSideSign && !usedRuntimeMorphAnchor\n ? getRuntimeAUMeshSideOffset(anchorRegion, runtimeSideSign, this.modelSize)\n : null;\n if (runtimeSideOffset) {\n const modelRotation = new THREE.Matrix4();\n modelRotation.extractRotation(this.model.matrixWorld);\n center.add(runtimeSideOffset.applyMatrix4(modelRotation));\n }\n return center;\n }\n\n private updateMarkerStyles(): void {\n for (const [name, element] of this.markers) {\n const isSelected = name === this.currentRegion;\n if (isSelected) {\n this.setMarkerScale(element, 1.3);\n element.style.background = 'rgba(99, 179, 237, 1)';\n element.style.boxShadow = '0 0 12px rgba(66, 153, 225, 0.8)';\n } else {\n this.setMarkerScale(element, 1);\n element.style.background = 'rgba(66, 153, 225, 0.9)';\n element.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.3)';\n }\n }\n }\n\n /**\n * Call at start of each frame to reset state and update positions.\n * The onBeforeRender callbacks handle showing visible markers.\n * This method hides markers that didn't render.\n */\n update(): void {\n if (!this.model) return;\n\n // When HTML markers are hidden, skip all per-frame DOM and bone work.\n if (!this.occlusionGroup.visible) {\n return;\n }\n\n // Increment frame counter\n this.frameId++;\n if (!this.resizeObserver) {\n this.updateViewportSize();\n }\n\n // Check camera distance for auto-collapse\n const dx = this.camera.position.x - this.modelCenter.x;\n const dy = this.camera.position.y - this.modelCenter.y;\n const dz = this.camera.position.z - this.modelCenter.z;\n const cameraDistance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n // Only check threshold if distance changed significantly\n const distanceChanged = this.lastCameraDistance < 0 ||\n Math.abs(cameraDistance - this.lastCameraDistance) > this.lastCameraDistance * 0.05;\n\n if (distanceChanged) {\n const previousDistance = this.lastCameraDistance;\n this.lastCameraDistance = cameraDistance;\n\n // Auto-collapse only when crossing the threshold to avoid immediate re-collapse.\n const crossedAutoCollapseThreshold =\n previousDistance >= 0 &&\n previousDistance <= this.autoCollapseThreshold &&\n cameraDistance > this.autoCollapseThreshold;\n if (crossedAutoCollapseThreshold) {\n this.collapseAllRegions();\n }\n }\n\n // Update occlusion mesh positions (for animated models)\n for (const [name, mesh] of this.occlusionMeshes) {\n const region = this.regions.find(r => r.name === name);\n if (region) {\n const newPos = this.getRegionCenter(region);\n if (newPos) {\n mesh.position.copy(newPos);\n mesh.userData.position = newPos.clone();\n }\n }\n }\n\n // Hide markers that didn't render last frame (occluded)\n for (const [name, marker] of this.markers) {\n const lastFrame = this.markerFrameIds.get(name) || 0;\n // If marker wasn't rendered in the previous frame, hide it\n // Use frameId - 1 because onBeforeRender for current frame hasn't fired yet\n if (lastFrame < this.frameId - 1) {\n this.setMarkerDisplay(marker, false);\n }\n }\n }\n\n setVisible(visible: boolean): void {\n this.animateVisibility(visible);\n }\n\n private stopVisibilityAnimation(): void {\n this.visibilityAnimationScheduler.cancel(HTML_VISIBILITY_ANIMATION_KEY);\n this.visibilityAnimationActive = false;\n this.visibilityAnimationToken += 1;\n }\n\n private animateVisibility(visible: boolean): void {\n this.stopVisibilityAnimation();\n\n const wasVisible = this.labelsContainer.style.display !== 'none';\n if (visible) {\n this.labelsContainer.style.display = 'block';\n if (!wasVisible) {\n this.labelsContainer.style.opacity = '0';\n this.labelsContainer.style.transform = 'scale(0.92)';\n }\n this.occlusionGroup.visible = true;\n } else {\n this.occlusionGroup.visible = false;\n }\n\n const token = this.visibilityAnimationToken;\n const parsedStartOpacity = Number.parseFloat(window.getComputedStyle(this.labelsContainer).opacity || '1');\n const startOpacity = Number.isFinite(parsedStartOpacity) ? parsedStartOpacity : 1;\n const startScale = Number.parseFloat(\n this.labelsContainer.style.transform.match(/scale\\(([^)]+)\\)/)?.[1] ?? '1',\n ) || 1;\n const startTime = performance.now();\n const duration = 160;\n const targetOpacity = visible ? 1 : 0;\n const targetScale = visible ? 1 : 0.92;\n\n this.visibilityAnimationActive = true;\n this.visibilityAnimationScheduler.schedule(HTML_VISIBILITY_ANIMATION_KEY, (now): boolean => {\n if (token !== this.visibilityAnimationToken) return false;\n\n const elapsed = now - startTime;\n const t = Math.min(elapsed / duration, 1);\n const eased = visible\n ? 1 - Math.pow(1 - t, 3)\n : t * t * (3 - 2 * t);\n\n const opacity = startOpacity + (targetOpacity - startOpacity) * eased;\n const scale = startScale + (targetScale - startScale) * eased;\n this.labelsContainer.style.opacity = `${opacity}`;\n this.labelsContainer.style.transform = `scale(${scale})`;\n\n if (t < 1) {\n return true;\n }\n\n this.visibilityAnimationActive = false;\n if (!visible) {\n this.labelsContainer.style.display = 'none';\n }\n this.labelsContainer.style.opacity = visible ? '1' : '0';\n this.labelsContainer.style.transform = 'scale(1)';\n return false;\n });\n }\n\n clear(): void {\n this.stopVisibilityAnimation();\n this.labelsContainer.style.display = 'block';\n this.labelsContainer.style.opacity = '1';\n this.labelsContainer.style.transform = 'scale(1)';\n // Clear HTML markers\n for (const element of this.markers.values()) {\n element.remove();\n }\n this.markers.clear();\n\n // Clear occlusion meshes\n while (this.occlusionGroup.children.length > 0) {\n const child = this.occlusionGroup.children[0];\n const mesh = child as THREE.Mesh;\n mesh.onBeforeRender = () => {}; // Clear callback\n this.occlusionGroup.remove(child);\n if (mesh.geometry) mesh.geometry.dispose();\n if (mesh.material) (mesh.material as THREE.Material).dispose();\n }\n this.occlusionMeshes.clear();\n this.markerFrameIds.clear();\n this.faceCenterCache.clear();\n this.expandedRegions.clear();\n this.parentChildIndex.clear();\n this.childParentIndex.clear();\n this.hiddenChildren.clear();\n }\n\n // ============ EXPANDING ANCHORS ============\n\n /**\n * Expand a parent region to show its children.\n */\n expandRegion(regionName: string, animation: ExpandAnimation = 'outward', duration = 400): void {\n const children = this.parentChildIndex.get(regionName);\n if (!children || children.length === 0) return;\n\n // Already expanded\n if (this.expandedRegions.get(regionName)) return;\n\n this.expandedRegions.set(regionName, true);\n\n // Update parent marker to show minus sign\n const parentMarker = this.markers.get(regionName);\n if (parentMarker) {\n parentMarker.innerHTML = '<span>−</span>'; // minus sign\n }\n\n // Show children with animation\n const staggerDelay = animation === 'staggered' ? 50 : 0;\n\n children.forEach((childName, index) => {\n setTimeout(() => {\n this.hiddenChildren.delete(childName);\n const marker = this.markers.get(childName);\n if (marker) {\n // Animate in with CSS\n marker.style.transition = `transform ${duration}ms ease-out, opacity ${duration}ms ease-out`;\n this.setMarkerScale(marker, 0);\n marker.style.opacity = '0';\n this.setMarkerDisplay(marker, true);\n requestAnimationFrame(() => {\n this.setMarkerScale(marker, 1);\n marker.style.opacity = '1';\n });\n }\n }, index * staggerDelay);\n });\n }\n\n /**\n * Collapse a parent region to hide its children.\n */\n collapseRegion(regionName: string, duration = 300): void {\n const children = this.parentChildIndex.get(regionName);\n if (!children || children.length === 0) return;\n\n // Already collapsed\n if (!this.expandedRegions.get(regionName)) return;\n\n this.expandedRegions.set(regionName, false);\n\n // Update parent marker to show plus sign\n const parentMarker = this.markers.get(regionName);\n if (parentMarker) {\n parentMarker.innerHTML = '<span>+</span>';\n }\n\n // Hide children with animation\n for (const childName of children) {\n const marker = this.markers.get(childName);\n if (marker) {\n marker.style.transition = `transform ${duration}ms ease-in, opacity ${duration}ms ease-in`;\n this.setMarkerScale(marker, 0);\n marker.style.opacity = '0';\n }\n\n // Mark as hidden after animation\n setTimeout(() => {\n this.hiddenChildren.add(childName);\n if (marker) {\n this.setMarkerDisplay(marker, false);\n }\n }, duration);\n }\n }\n\n /**\n * Toggle expand/collapse state.\n */\n toggleRegion(regionName: string, animation: ExpandAnimation = 'outward', duration = 400): void {\n if (this.expandedRegions.get(regionName)) {\n this.collapseRegion(regionName, duration * 0.75);\n } else {\n this.expandRegion(regionName, animation, duration);\n }\n }\n\n /**\n * Get expanded state of all regions.\n */\n getExpandedRegions(): ExpandedRegionState[] {\n const states: ExpandedRegionState[] = [];\n for (const [regionName, isExpanded] of this.expandedRegions) {\n const children = this.parentChildIndex.get(regionName) || [];\n states.push({ regionName, isExpanded, children });\n }\n return states;\n }\n\n /**\n * Collapse all currently expanded regions.\n * Called automatically when zooming out past threshold.\n */\n private collapseAllRegions(duration = 150): void {\n // Get list of expanded regions (iterate copy to avoid mutation during iteration)\n const expandedList = [...this.expandedRegions.entries()]\n .filter(([_, isExpanded]) => isExpanded)\n .map(([name, _]) => name);\n\n if (expandedList.length === 0) return;\n\n // Collapse all expanded regions\n for (const regionName of expandedList) {\n this.collapseRegion(regionName, duration);\n }\n }\n\n dispose(): void {\n this.clear();\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.labelsContainer.remove();\n this.scene.remove(this.occlusionGroup);\n }\n\n private refreshLaterality(): void {\n this.laterality = detectAnnotationLaterality(this.model, this.regions, boneResolutionProfile(this.characterConfig));\n }\n}\n","import { boneResolutionProfile } from './boneResolutionProfile';\nimport { getAnnotationCameraCore, requireAnnotationCameraCore } from './annotationCameraCore';\nimport * as THREE from 'three';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { bindSceneRendering, reportSceneRenderingFailure } from '../sceneRenderingBinding';\nimport { compileModelForRender, drawModelForRender } from './modelRenderPreparation';\nimport { prepareModelSkinning } from '../modelSkinning';\nimport { renderScenePlayback } from '../playbackRendering';\nimport {\n detectAnnotationLaterality,\n fuzzyNameMatch,\n getDefaultAnnotationLaterality,\n resolveBoneNames,\n resolveFaceCenter,\n resolveRegionCameraAngle,\n type AnnotationLaterality,\n} from './adapter';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport {\n CameraDOMControls,\n RUNTIME_ANNOTATION_REGION_PREFIX,\n filterCameraViewRegions,\n} from './DOMControls';\nimport { DPthree3DMarkers } from './DPthree3DMarkers';\nimport { DPthreeHTMLMarkers } from './DPthreeHTMLMarkers';\nimport { resolveAnnotationCharacterConfig } from './adapter';\nimport type {\n DPthreeCameraControllerConfig,\n CharacterConfig,\n Region,\n CameraState,\n FocusPosition,\n RegionChangeCallback,\n MarkerStyle,\n AnnotationAnchoredRegion,\n AnnotationFocusTarget,\n RuntimeAnnotationOptions,\n RuntimeAnnotationRegionSummary,\n RuntimeAnnotationSide,\n} from './types';\n\n/** Common interface for marker implementations */\ninterface DPthreeMarkers {\n setModel(model: THREE.Object3D): void;\n setDomElement(element: HTMLElement): void;\n loadRegions(config: CharacterConfig, options?: { sliceSurfaceQueries?: boolean }): void | Promise<void>;\n setCurrentRegion(name: string | null): void;\n update(): void;\n updateRegion?(regionName: string, update: Partial<AnnotationAnchoredRegion>): void;\n removeRegion?(regionName: string): void;\n setVisible(visible: boolean): void;\n clear(): void;\n dispose(): void;\n}\n\nexport function resolveFocusCameraDirection(\n model: THREE.Object3D | null,\n effectiveAngle: number,\n cameraAngle: number | undefined,\n angleSpace: 'model' | 'world' = 'model'\n): THREE.Vector3 {\n const direction = requireAnnotationCameraCore().resolveFocusCameraDirection(\n model?.getWorldQuaternion(new THREE.Quaternion()),\n effectiveAngle,\n cameraAngle,\n angleSpace,\n );\n return new THREE.Vector3(direction.x, direction.y, direction.z);\n}\n\nexport function resolveAutoCloseupAngle(\n horizontalOffset: number,\n focusSize: THREE.Vector3,\n modelSize: THREE.Vector3\n): number | undefined {\n return requireAnnotationCameraCore().resolveAutoCloseupAngle(horizontalOffset, focusSize, modelSize);\n}\n\ntype CameraPose = {\n position: { x: number; y: number; z: number };\n target: { x: number; y: number; z: number };\n};\n\ntype RustCameraAnimation = {\n sample(elapsedMs: number): CameraPose & { done: boolean };\n dispose(): void;\n};\n\ntype ModelRenderPreparation = {\n promise: Promise<void>;\n draw: (() => void) | null;\n cancel: (reason: Error) => void;\n};\n\nfunction renderPreparationAborted(): Error {\n const error = new Error('Model render preparation was cancelled.');\n error.name = 'AbortError';\n return error;\n}\n\nfunction toFocusPosition(framing: CameraPose & { distance: number }): FocusPosition {\n return {\n position: new THREE.Vector3(framing.position.x, framing.position.y, framing.position.z),\n target: new THREE.Vector3(framing.target.x, framing.target.y, framing.target.z),\n distance: framing.distance,\n };\n}\n\nexport type MarkerStateSnapshot = {\n style: MarkerStyle;\n visible: boolean;\n};\n\n/**\n * Default configuration values\n */\nconst DEFAULTS = {\n enableDamping: true,\n dampingFactor: 0.05,\n minDistance: 0.5,\n maxDistance: 10,\n transitionDuration: 1400, // Slower, more graceful camera transitions\n zoomPaddingFactor: 1.5,\n closeUpPaddingFactor: 1.2,\n fullBodyPaddingFactor: 2.0,\n showDOMControls: true,\n};\n\nconst INTRO_LEFT_EYE_PADDING_CAP = 0.85;\nconst INTRO_LEFT_EYE_PADDING_SCALE = 0.72;\nconst INTRO_LEFT_EYE_VERTICAL_BIAS_RATIO = 0.025;\nconst INTRO_LEFT_EYE_MIN_VERTICAL_BIAS = 0.025;\ntype RuntimeAnnotationProfileSource = {\n auToBones?: unknown;\n auToMorphs?: unknown;\n profile?: unknown;\n};\n\ntype RuntimeAnnotationBoneTarget = {\n boneName: string;\n side?: RuntimeAnnotationSide;\n};\n\ntype RuntimeAnnotationMorphTarget = {\n morphName: string;\n side?: RuntimeAnnotationSide;\n};\n\ntype RuntimeAnnotationMorphSelection = {\n morphNames: string[];\n side?: RuntimeAnnotationSide;\n};\n\ntype RuntimeAnnotationMeshTarget = {\n meshName: string;\n morphNames: string[];\n side?: RuntimeAnnotationSide;\n};\n\ntype RuntimeAnnotationResolvedTargets = {\n bones: string[];\n meshTargets: RuntimeAnnotationMeshTarget[];\n};\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeRuntimeAnnotationText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : String(value ?? '').trim();\n}\n\nfunction readRuntimeAnnotationSide(value: unknown): RuntimeAnnotationSide | undefined {\n return value === 'left' || value === 'right' || value === 'center' ? value : undefined;\n}\n\nfunction inferRuntimeAnnotationSideFromText(value: string): RuntimeAnnotationSide | undefined {\n const normalized = value\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase();\n const tokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);\n const hasLeft = tokens.includes('left') || tokens.includes('l');\n const hasRight = tokens.includes('right') || tokens.includes('r');\n\n if (hasLeft === hasRight) return undefined;\n return hasLeft ? 'left' : 'right';\n}\n\nfunction encodeRuntimeAnnotationSegment(value: string): string {\n return encodeURIComponent(value).replace(/%/g, '~');\n}\n\nfunction getRuntimeAnnotationRegionLabel(region: AnnotationAnchoredRegion): string {\n return region.label ?? region.name;\n}\n\nfunction buildRuntimeAnnotationRegionSignature(region: AnnotationAnchoredRegion): string {\n return JSON.stringify({\n label: region.label,\n bones: region.bones,\n meshes: region.meshes,\n paddingFactor: region.paddingFactor,\n cameraAngle: region.cameraAngle,\n markerAnchor: region.markerAnchor,\n focusTarget: region.focusTarget,\n style: region.style,\n runtimeAnnotation: region.runtimeAnnotation,\n });\n}\n\nfunction buildRuntimeAnnotationStyle(\n options: RuntimeAnnotationOptions,\n): AnnotationAnchoredRegion['style'] | undefined {\n const style: NonNullable<AnnotationAnchoredRegion['style']> = {};\n\n if (options.markerColor !== undefined) style.markerColor = options.markerColor;\n if (options.lineColor !== undefined) style.lineColor = options.lineColor;\n if (options.markerRadius !== undefined) style.markerRadius = options.markerRadius;\n if (options.labelColor !== undefined) style.labelColor = options.labelColor;\n if (options.labelBackground !== undefined) style.labelBackground = options.labelBackground;\n if (options.labelFontSize !== undefined) style.labelFontSize = options.labelFontSize;\n if (options.opacity !== undefined) style.opacity = options.opacity;\n\n return Object.keys(style).length > 0 ? style : undefined;\n}\n\nfunction getRuntimeAnnotationProfileCandidates(\n characterConfig: CharacterConfig | null,\n profileOverride?: unknown,\n): RuntimeAnnotationProfileSource[] {\n const candidates: RuntimeAnnotationProfileSource[] = [];\n\n if (isPlainRecord(profileOverride)) {\n candidates.push(profileOverride);\n if (isPlainRecord(profileOverride.profile)) {\n candidates.push(profileOverride.profile);\n }\n }\n\n if (characterConfig) {\n candidates.push(characterConfig);\n if (isPlainRecord(characterConfig.profile)) {\n candidates.push(characterConfig.profile);\n }\n }\n\n return candidates;\n}\n\nfunction readRuntimeAnnotationBoneTarget(value: unknown): RuntimeAnnotationBoneTarget | null {\n if (typeof value === 'string') {\n const cleaned = value.trim();\n return cleaned.length > 0\n ? { boneName: cleaned, side: inferRuntimeAnnotationSideFromText(cleaned) }\n : null;\n }\n\n if (!isPlainRecord(value)) {\n return null;\n }\n\n const candidate = value.node ?? value.boneName ?? value.bone ?? value.name;\n if (typeof candidate !== 'string') {\n return null;\n }\n\n const cleaned = candidate.trim();\n return cleaned.length > 0\n ? {\n boneName: cleaned,\n side: readRuntimeAnnotationSide(value.side) ?? inferRuntimeAnnotationSideFromText(cleaned),\n }\n : null;\n}\n\nfunction readRuntimeAnnotationStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry) => {\n if (typeof entry !== 'string') return [];\n const cleaned = entry.trim();\n return cleaned.length > 0 ? [cleaned] : [];\n });\n}\n\nfunction selectRuntimeAnnotationBoneTargets(\n targets: RuntimeAnnotationBoneTarget[],\n targetSide?: RuntimeAnnotationSide,\n): RuntimeAnnotationBoneTarget[] {\n if (!targetSide) return targets;\n\n const preferredTargets = targets.filter((target) => target.side === targetSide);\n if (preferredTargets.length > 0) return preferredTargets;\n\n return targets.filter((target) => !target.side || target.side === 'center');\n}\n\nfunction resolveRuntimeAnnotationAUBoneTargets(\n auId: string,\n candidates: RuntimeAnnotationProfileSource[],\n targetSide?: RuntimeAnnotationSide,\n): RuntimeAnnotationBoneTarget[] {\n const seen = new Set<string>();\n const boneTargets: RuntimeAnnotationBoneTarget[] = [];\n\n for (const candidate of candidates) {\n if (!isPlainRecord(candidate.auToBones)) continue;\n const bindings = candidate.auToBones[auId];\n if (!Array.isArray(bindings)) continue;\n\n for (const binding of bindings) {\n const target = readRuntimeAnnotationBoneTarget(binding);\n if (!target || seen.has(target.boneName)) continue;\n seen.add(target.boneName);\n boneTargets.push(target);\n }\n }\n\n return selectRuntimeAnnotationBoneTargets(boneTargets, targetSide);\n}\n\nfunction readRuntimeAnnotationMorphTargets(\n value: unknown,\n side?: RuntimeAnnotationSide,\n): RuntimeAnnotationMorphTarget[] {\n return readRuntimeAnnotationStringArray(value).map((morphName) => ({\n morphName,\n side: side ?? inferRuntimeAnnotationSideFromText(morphName),\n }));\n}\n\nfunction resolveRuntimeAnnotationAUMorphSelection(\n auId: string,\n candidates: RuntimeAnnotationProfileSource[],\n targetSide?: RuntimeAnnotationSide,\n): RuntimeAnnotationMorphSelection {\n const seen = new Set<string>();\n const morphTargets: RuntimeAnnotationMorphTarget[] = [];\n\n for (const candidate of candidates) {\n if (!isPlainRecord(candidate.auToMorphs)) continue;\n const mapping = candidate.auToMorphs[auId];\n const entries = isPlainRecord(mapping)\n ? [\n ...readRuntimeAnnotationMorphTargets(mapping.left, 'left'),\n ...readRuntimeAnnotationMorphTargets(mapping.right, 'right'),\n ...readRuntimeAnnotationMorphTargets(mapping.center, 'center'),\n ]\n : readRuntimeAnnotationMorphTargets(mapping);\n\n for (const target of entries) {\n if (seen.has(target.morphName)) continue;\n seen.add(target.morphName);\n morphTargets.push(target);\n }\n }\n\n const selectedTargets = targetSide\n ? (() => {\n const preferredTargets = morphTargets.filter((target) => target.side === targetSide);\n if (preferredTargets.length > 0) return preferredTargets;\n return morphTargets.filter((target) => !target.side || target.side === 'center');\n })()\n : morphTargets;\n\n const hasPreferredSide = targetSide && selectedTargets.some((target) => target.side === targetSide);\n const hasOnlyCenterSide = selectedTargets.length > 0 && selectedTargets.every((target) => target.side === 'center');\n\n return {\n morphNames: selectedTargets.map((target) => target.morphName),\n side: hasPreferredSide\n ? targetSide\n : hasOnlyCenterSide\n ? 'center'\n : targetSide && selectedTargets.length > 0\n ? targetSide\n : undefined,\n };\n}\n\nfunction resolveRuntimeAnnotationMorphMeshes(\n morphNames: string[],\n morphTargetsByMesh?: unknown,\n side?: RuntimeAnnotationSide,\n): RuntimeAnnotationMeshTarget[] {\n if (!isPlainRecord(morphTargetsByMesh) || morphNames.length === 0) {\n return [];\n }\n\n const requestedByLowerName = new Map<string, string>();\n for (const morphName of morphNames) {\n requestedByLowerName.set(morphName.toLowerCase(), morphName);\n }\n\n const meshTargets: RuntimeAnnotationMeshTarget[] = [];\n for (const [meshName, targets] of Object.entries(morphTargetsByMesh)) {\n const matched = new Set<string>();\n for (const targetName of readRuntimeAnnotationStringArray(targets)) {\n const requestedName = requestedByLowerName.get(targetName.toLowerCase());\n if (requestedName) {\n matched.add(requestedName);\n }\n }\n if (matched.size > 0) {\n meshTargets.push({ meshName, morphNames: Array.from(matched), side });\n }\n }\n\n return meshTargets.sort(compareRuntimeAnnotationMeshTargets);\n}\n\nfunction getRuntimeAnnotationMeshTargetScore(target: RuntimeAnnotationMeshTarget): number {\n const meshName = target.meshName.toLowerCase();\n const morphText = target.morphNames.join(' ').toLowerCase();\n let score = 0;\n\n if (/brow|forehead|frontalis/.test(morphText)) {\n if (/brow|eyebrow|bushy/.test(meshName)) score -= 100;\n if (/body|skin|head/.test(meshName)) score += 20;\n if (/eyeocclusion|tearline/.test(meshName)) score += 40;\n } else if (/mouth|lip|smile|frown|dimple|pucker|stretch|press|funnel|roll|shrug|close|jaw|chin/.test(morphText)) {\n if (/body|skin|head/.test(meshName)) score -= 100;\n if (/brow|eyebrow|bushy|hair|eyeocclusion|tearline/.test(meshName)) score += 80;\n } else if (/eye|lid|blink|squint|wide/.test(morphText)) {\n if (/eyeocclusion|tearline|eye/.test(meshName)) score -= 80;\n if (/body|skin|head/.test(meshName)) score += 10;\n if (/brow|eyebrow|bushy|hair/.test(meshName)) score += 60;\n } else if (/tongue/.test(morphText)) {\n if (/tongue/.test(meshName)) score -= 100;\n }\n\n return score;\n}\n\nfunction compareRuntimeAnnotationMeshTargets(\n left: RuntimeAnnotationMeshTarget,\n right: RuntimeAnnotationMeshTarget,\n): number {\n const scoreDelta = getRuntimeAnnotationMeshTargetScore(left) - getRuntimeAnnotationMeshTargetScore(right);\n if (scoreDelta !== 0) return scoreDelta;\n\n return left.meshName.localeCompare(right.meshName);\n}\n\nfunction resolveRuntimeAnnotationTargetLimit(\n options: RuntimeAnnotationOptions,\n): number | null {\n const maxTargets = options.maxTargets;\n if (typeof maxTargets !== 'number' || !Number.isFinite(maxTargets) || maxTargets < 1) {\n return null;\n }\n\n return Math.floor(maxTargets);\n}\n\nfunction limitRuntimeAnnotationTargets(\n bones: string[],\n meshTargets: RuntimeAnnotationMeshTarget[],\n options: RuntimeAnnotationOptions,\n): RuntimeAnnotationResolvedTargets {\n const maxTargets = resolveRuntimeAnnotationTargetLimit(options);\n if (maxTargets === null || bones.length + meshTargets.length <= maxTargets) {\n return { bones, meshTargets };\n }\n\n const limitedBones: string[] = [];\n const limitedMeshTargets: RuntimeAnnotationMeshTarget[] = [];\n\n const takeBones = () => {\n for (const boneName of bones) {\n if (limitedBones.length + limitedMeshTargets.length >= maxTargets) return;\n limitedBones.push(boneName);\n }\n };\n const takeMeshTargets = () => {\n for (const meshTarget of meshTargets) {\n if (limitedBones.length + limitedMeshTargets.length >= maxTargets) return;\n limitedMeshTargets.push(meshTarget);\n }\n };\n\n if (options.targetPreference === 'mesh') {\n takeMeshTargets();\n takeBones();\n } else {\n takeBones();\n takeMeshTargets();\n }\n\n return {\n bones: limitedBones,\n meshTargets: limitedMeshTargets,\n };\n}\n\n/**\n * DPthreeCameraController - A unified camera controller for character viewers\n *\n * Features:\n * - OrbitControls wrapper for smooth camera interaction\n * - Focus on specific bones, meshes, or named regions\n * - Smart bounding box calculation with size-based padding\n * - Smooth animated transitions between views\n * - Self-contained DOM controls for region selection\n *\n * Designed for future NPM packaging - no React dependencies.\n */\nexport class DPthreeCameraController {\n // Public readonly properties\n readonly camera: THREE.PerspectiveCamera;\n readonly controls: OrbitControls;\n readonly scene: THREE.Scene;\n\n private readonly resolveCharacterConfig: NonNullable<DPthreeCameraControllerConfig['resolveCharacterConfig']>;\n private readonly selectRegion: (name: string) => void;\n\n // Configuration\n private config: Required<\n Pick<\n DPthreeCameraControllerConfig,\n | 'enableDamping'\n | 'dampingFactor'\n | 'minDistance'\n | 'maxDistance'\n | 'transitionDuration'\n | 'zoomPaddingFactor'\n | 'closeUpPaddingFactor'\n | 'fullBodyPaddingFactor'\n | 'showDOMControls'\n >\n >;\n private controlsContainer: HTMLElement;\n\n // State\n private model: THREE.Object3D | null = null;\n private regions: AnnotationAnchoredRegion[] = [];\n private currentRegion: string | null = null;\n private characterConfig: CharacterConfig | null = null;\n private runtimeAnnotationRegionNames = new Set<string>();\n\n // Animation state - driven by update() in render loop\n private timerAnimationFallbackToken = 0;\n private cameraRequestGeneration = 0;\n private regionLoadGeneration = 0;\n private disposed = false;\n private pendingAnimation: {\n startTime: number;\n runtime: RustCameraAnimation;\n resolve: () => void;\n } | null = null;\n\n // DOM Controls\n private domControls: CameraDOMControls | null = null;\n\n // Markers (can be 3D or HTML style)\n private markers: DPthreeMarkers | null = null;\n private currentMarkerStyle: MarkerStyle = '3d';\n private markersLoaded = false;\n private markersVisible = false;\n private markerStateListeners = new Set<(state: MarkerStateSnapshot) => void>();\n private domElement: HTMLElement;\n\n // Renderer and render loop (when controller manages the render loop)\n private renderer: CharacterSceneRenderer | null = null;\n private readonly playbackTimer = new THREE.Timer();\n private renderFrame: DPthreeCameraControllerConfig['renderFrame'] = undefined;\n private resizeRenderer: DPthreeCameraControllerConfig['resizeRenderer'] = undefined;\n private onRenderError: DPthreeCameraControllerConfig['onRenderError'] = undefined;\n private renderingSuspended = false;\n private unbindRendering: (() => Promise<void> | null) | null = null;\n private renderingFailure: ((error: unknown) => void) | null = null;\n private framePending = false;\n private frameCompletion: Promise<void> | null = null;\n private modelPreparation: ModelRenderPreparation | null = null;\n private renderFailed = false;\n private resizeObserver: ResizeObserver | null = null;\n private boundResizeHandler: (() => void) | null = null;\n private laterality: AnnotationLaterality = getDefaultAnnotationLaterality();\n\n // Callbacks\n private onRegionChangeCallbacks: RegionChangeCallback[] = [];\n\n constructor(inputConfig: DPthreeCameraControllerConfig) {\n this.resolveCharacterConfig = inputConfig.resolveCharacterConfig ?? resolveAnnotationCharacterConfig;\n this.selectRegion = inputConfig.onRegionSelect ?? ((name) => { void this.focusRegion(name); });\n this.camera = inputConfig.camera;\n this.scene = inputConfig.scene;\n this.domElement = inputConfig.domElement;\n this.controlsContainer = inputConfig.controlsContainer || (inputConfig.rendering && inputConfig.domElement.tagName === 'CANVAS'\n ? inputConfig.domElement.parentElement || inputConfig.domElement : inputConfig.domElement);\n\n // Merge config with defaults\n this.config = {\n enableDamping: inputConfig.enableDamping ?? DEFAULTS.enableDamping,\n dampingFactor: inputConfig.dampingFactor ?? DEFAULTS.dampingFactor,\n minDistance: inputConfig.minDistance ?? DEFAULTS.minDistance,\n maxDistance: inputConfig.maxDistance ?? DEFAULTS.maxDistance,\n transitionDuration: inputConfig.transitionDuration ?? DEFAULTS.transitionDuration,\n zoomPaddingFactor: inputConfig.zoomPaddingFactor ?? DEFAULTS.zoomPaddingFactor,\n closeUpPaddingFactor: inputConfig.closeUpPaddingFactor ?? DEFAULTS.closeUpPaddingFactor,\n fullBodyPaddingFactor: inputConfig.fullBodyPaddingFactor ?? DEFAULTS.fullBodyPaddingFactor,\n showDOMControls: inputConfig.showDOMControls ?? DEFAULTS.showDOMControls,\n };\n\n // Set initial camera position before creating OrbitControls\n // This ensures camera isn't at origin (inside model)\n this.camera.position.set(0, 1, 3);\n\n // Create OrbitControls\n this.controls = new OrbitControls(this.camera, inputConfig.domElement);\n this.controls.enableDamping = this.config.enableDamping;\n this.controls.dampingFactor = this.config.dampingFactor;\n this.controls.minDistance = this.config.minDistance;\n this.controls.maxDistance = this.config.maxDistance;\n\n // Set initial target to roughly character center height\n this.controls.target.set(0, 1, 0);\n this.controls.update();\n\n // Initialize DOM controls if enabled\n if (this.config.showDOMControls) {\n this.initDOMControls();\n }\n\n this.renderFrame = inputConfig.renderFrame;\n this.resizeRenderer = inputConfig.resizeRenderer;\n this.onRenderError = inputConfig.onRenderError;\n if (inputConfig.rendering) {\n const rendering = inputConfig.rendering;\n this.renderingFailure = (error) => reportSceneRenderingFailure(rendering, error, this.renderer);\n this.unbindRendering = bindSceneRendering(inputConfig.rendering, this.scene, this.camera, {\n suspend: async () => {\n this.renderingSuspended = true;\n const preparation = this.modelPreparation;\n this.cancelModelPreparation();\n // A lost device can reject loop shutdown. Still drain every borrower\n // before allowing the scene owner to release its model resources.\n let stopping: Promise<void>;\n try { stopping = Promise.resolve(this.renderer?.setAnimationLoop(null)); }\n catch (failure) { stopping = Promise.reject(failure); }\n const [stopped] = await Promise.allSettled([\n stopping,\n this.frameCompletion,\n preparation?.promise,\n ]);\n if (stopped.status === 'rejected') throw stopped.reason;\n },\n prepare: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n const model = this.model;\n if (model) {\n await compileModelForRender(renderer, this.scene, this.camera, model);\n if (this.disposed || model !== this.model) throw renderPreparationAborted();\n drawModelForRender(renderer, this.scene, this.camera, model);\n } else renderer.render(this.scene, this.camera);\n },\n commit: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n this.cleanupResizeHandling();\n this.controls.disconnect();\n this.controls.connect(renderer.domElement);\n this.domElement = renderer.domElement;\n this.markers?.setDomElement(renderer.domElement);\n this.renderer = renderer;\n this.renderFailed = false;\n this.renderingSuspended = false;\n this.setupResizeHandling();\n this.boundResizeHandler?.();\n await this.startRenderLoop(true);\n if (this.disposed) { this.stopRenderLoop(); throw renderPreparationAborted(); }\n },\n onError: (error) => this.handleRenderError(error),\n });\n } else if (inputConfig.renderer) {\n this.renderer = inputConfig.renderer;\n void this.startRenderLoop();\n this.setupResizeHandling();\n }\n\n // Markers will be initialized when loadRegions is called\n // based on the character's markerStyle preference\n }\n\n /**\n * Start the render loop (only when renderer is provided)\n */\n private startRenderLoop(propagateFailure = false): void | Promise<void> {\n if (!this.renderer) return;\n const renderer = this.renderer;\n this.playbackTimer.disconnect();\n const ownerDocument = renderer.domElement?.ownerDocument;\n if (ownerDocument) this.playbackTimer.connect(ownerDocument);\n this.playbackTimer.reset();\n let playbackStarted = false;\n try {\n const started = renderer.setAnimationLoop((timestamp?: number) => {\n if (this.disposed || renderer !== this.renderer) return;\n this.playbackTimer.update(timestamp);\n const samplePlayback = playbackStarted;\n playbackStarted = true;\n if (this.renderFailed || this.renderingSuspended || this.framePending) return;\n try {\n // Native shadows are updated once per camera/frame. Prepare the full\n // scene first and leave its pixels untouched until the next frame.\n const preparationDraw = this.modelPreparation?.draw;\n if (preparationDraw) { preparationDraw(); return; }\n if (samplePlayback) renderScenePlayback(this.scene, this.playbackTimer);\n this.update();\n const frame = this.renderFrame\n ? this.renderFrame(this.renderer!, this.scene, this.camera)\n : this.renderer!.render(this.scene, this.camera);\n if (frame) {\n this.framePending = true;\n this.frameCompletion = Promise.resolve(frame).then(\n () => { this.framePending = false; },\n (error) => { this.framePending = false; this.handleRenderError(error); },\n );\n }\n } catch (error) { this.handleRenderError(error); }\n });\n if (started) return started.catch((error) => {\n if (propagateFailure) throw error;\n if (renderer === this.renderer) this.handleRenderError(error);\n });\n } catch (error) {\n if (propagateFailure) throw error;\n this.handleRenderError(error);\n }\n }\n\n private handleRenderError(error: unknown): void {\n if (this.disposed || this.renderFailed) return;\n this.renderFailed = true;\n this.cancelModelPreparation(error instanceof Error ? error : new Error(String(error)));\n this.stopRenderLoop();\n const failure = error instanceof Error ? error : new Error(String(error));\n if (this.renderingFailure) { this.renderingFailure(failure); return; }\n try {\n if (this.onRenderError) this.onRenderError(failure);\n else console.error('Character camera render loop failed.', failure);\n } catch (callbackError) {\n console.error('Character camera render-error callback failed.', callbackError);\n }\n }\n\n /**\n * Stop the render loop\n */\n private stopRenderLoop(): void {\n this.playbackTimer.reset();\n try {\n const stopped = this.renderer?.setAnimationLoop(null);\n if (stopped) void stopped.catch((error) => console.error('Character camera render loop stop failed.', error));\n } catch (error) { console.error('Character camera render loop stop failed.', error); }\n }\n\n private shouldDriveTimerAnimationFallback(): boolean {\n return !this.renderer;\n }\n\n private getTimerAnimationFallbackDelay(): number {\n return 16;\n }\n\n private scheduleTimerAnimationFallback(hasPendingAnimation: () => boolean): void {\n if (!this.shouldDriveTimerAnimationFallback()) return;\n\n const token = ++this.timerAnimationFallbackToken;\n const tick = () => {\n if (token !== this.timerAnimationFallbackToken || !hasPendingAnimation()) return;\n\n this.update();\n\n if (token === this.timerAnimationFallbackToken && hasPendingAnimation()) {\n setTimeout(tick, this.getTimerAnimationFallbackDelay());\n }\n };\n\n setTimeout(tick, this.getTimerAnimationFallbackDelay());\n }\n\n /**\n * Set up resize handling for the renderer\n * Uses ResizeObserver for container size changes\n */\n private setupResizeHandling(): void {\n if (!this.renderer) return;\n\n const container = this.domElement.parentElement || this.domElement;\n\n // Create resize handler\n this.boundResizeHandler = () => {\n const width = container.clientWidth || window.innerWidth;\n const height = container.clientHeight || window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n if (this.renderer) {\n if (this.resizeRenderer) {\n this.resizeRenderer(this.renderer, width, height);\n } else {\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n this.renderer.setSize(width, height, false);\n }\n }\n };\n\n // Use ResizeObserver for container size changes\n this.resizeObserver = new ResizeObserver(this.boundResizeHandler);\n this.resizeObserver.observe(container);\n\n // Also listen to window resize as fallback\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Clean up resize handling\n */\n private cleanupResizeHandling(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\n }\n\n // ====== CORE PUBLIC METHODS ======\n\n /**\n * Prepare the currently visible material variants before first reveal.\n * Borrows model/renderer; callers retain them until this promise settles,\n * including after cancellation or controller disposal.\n */\n prepareModelForRender(model: THREE.Object3D, options: { signal?: AbortSignal } = {}): Promise<void> {\n if (this.disposed || options.signal?.aborted) return Promise.reject(renderPreparationAborted());\n if (this.renderingSuspended) return Promise.reject(new Error('Model render preparation is unavailable during renderer replacement.'));\n if (!this.renderer || this.renderFailed) return Promise.reject(new Error('Model render preparation requires an active controller-owned renderer.'));\n const renderer = this.renderer;\n const previous = this.modelPreparation;\n previous?.cancel(renderPreparationAborted());\n let cancelled: Error | null = null;\n let invalidatePreparedShadows: (() => void) | null = null;\n let rejectDraw: ((error: Error) => void) | null = null;\n let resolve!: () => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n const request: ModelRenderPreparation = {\n promise, draw: null,\n cancel: (reason) => {\n cancelled ??= reason;\n invalidatePreparedShadows?.();\n request.draw = null;\n rejectDraw?.(cancelled);\n },\n };\n this.modelPreparation = request;\n const abort = () => request.cancel(renderPreparationAborted());\n options.signal?.addEventListener('abort', abort, { once: true });\n const checkCancelled = () => { if (cancelled) throw cancelled; };\n void (async () => {\n try {\n // Supersession never compiles over a predecessor's borrowed objects.\n if (previous) await previous.promise.catch(() => undefined);\n // A host callback may have started while the predecessor was settling.\n // Read its current completion here, immediately before acquiring state.\n if (this.framePending && this.frameCompletion) await this.frameCompletion;\n checkCancelled();\n const compilation = compileModelForRender(renderer, this.scene, this.camera, model);\n try { await compilation; }\n catch (error) { throw cancelled ?? error; }\n checkCancelled();\n await new Promise<void>((done, failed) => {\n rejectDraw = failed;\n request.draw = () => {\n request.draw = null;\n try {\n checkCancelled();\n invalidatePreparedShadows = drawModelForRender(renderer, this.scene, this.camera, model);\n checkCancelled();\n done();\n } catch (error) { invalidatePreparedShadows?.(); failed(cancelled ?? error); }\n };\n });\n checkCancelled();\n } finally {\n options.signal?.removeEventListener('abort', abort);\n if (this.modelPreparation === request) this.modelPreparation = null;\n }\n })().then(resolve, reject);\n return promise;\n }\n\n private cancelModelPreparation(reason = renderPreparationAborted()): void {\n this.modelPreparation?.cancel(reason);\n }\n\n /**\n * Set the model to use for bone/mesh lookups\n * Must be called after model loads\n */\n setModel(model: THREE.Object3D): void {\n if (this.disposed) return;\n prepareModelSkinning(model);\n this.cancelModelPreparation();\n this.regionLoadGeneration += 1;\n this.cameraRequestGeneration += 1;\n this.cancelCameraAnimation();\n this.model = model;\n this.markers?.setModel(model);\n\n // Force update world matrices\n this.scene.updateMatrixWorld(true);\n if (this.characterConfig && this.regions.length > 0) {\n this.refreshLaterality();\n }\n }\n\n /** Release model references before the host disposes it, under a rendering lease. */\n clearModel(): void {\n if (this.disposed) return;\n this.clearMarkers();\n this.model = null;\n this.markers?.dispose();\n this.markers = null;\n }\n\n /**\n * Load region config for a character\n */\n async loadRegions(config: CharacterConfig): Promise<void> {\n if (this.disposed) return;\n const request = ++this.regionLoadGeneration;\n const model = this.model;\n const runtimeConfig = await this.resolveCharacterConfig(config);\n if (!this.isRegionLoadCurrent(request, model)) return;\n await this.prepareRegionsAndMarkersForReveal(runtimeConfig);\n }\n\n /**\n * Prime an already-resolved runtime config before the character becomes visible.\n * Marker construction is intentionally separate so startup can defer the expensive\n * per-region marker geometry/DOM work until after the first visible frame.\n */\n prepareRegionsForReveal(config: CharacterConfig): void {\n if (this.disposed) return;\n this.prepareRegionState(config);\n this.startPreparedCameraTransition(config);\n }\n\n /**\n * Prepare marker geometry while the character loading overlay is still up,\n * then start the intro camera transition after that work has completed.\n */\n async prepareRegionsAndMarkersForReveal(\n config: CharacterConfig,\n beforeReveal?: () => Promise<boolean>,\n ): Promise<void> {\n if (this.disposed) return;\n this.prepareRegionState(config);\n const request = this.regionLoadGeneration;\n const model = this.model;\n // The character has not started animating yet, so surface queries can span\n // frames without sampling different poses within the same marker.\n await this.loadMarkersForCurrentRegions(true);\n\n if (!this.isRegionLoadCurrent(request, model) || this.characterConfig !== config) return;\n if (beforeReveal && !await beforeReveal()) return;\n if (this.isRegionLoadCurrent(request, model) && this.characterConfig === config) {\n this.startPreparedCameraTransition(config);\n }\n }\n\n private prepareRegionState(config: CharacterConfig): void {\n this.cancelModelPreparation();\n this.regionLoadGeneration += 1;\n this.cameraRequestGeneration += 1;\n this.cancelCameraAnimation();\n this.characterConfig = config;\n this.regions = config.regions ?? [];\n this.currentRegion = null;\n this.runtimeAnnotationRegionNames.clear();\n this.markersLoaded = false;\n this.refreshLaterality();\n this.updateDOMControls();\n this.setMarkerStyleState(config.markerStyle ?? '3d');\n }\n\n private startPreparedCameraTransition(config: CharacterConfig): void {\n // Play intro animation or focus default region\n if (config.playIntroOnLoad) {\n // Play intro animation (orbit + zoom to torso)\n this.playIntroAnimation();\n } else if (config.defaultRegion) {\n // Focus default region if specified (immediate, no animation)\n this.focusRegion(config.defaultRegion, 0);\n }\n }\n\n /**\n * Build marker objects for the current character config.\n * This is separated from prepareRegionsForReveal so callers can defer the\n * expensive marker construction until after the first visible frame.\n */\n async loadMarkersForCurrentRegions(sliceSurfaceQueries = false): Promise<void> {\n if (this.disposed || !this.characterConfig) {\n return;\n }\n\n const characterConfig = this.characterConfig;\n const request = this.regionLoadGeneration;\n const model = this.model;\n this.ensureMarkersForCurrentStyle();\n const markers = this.markers;\n if (!markers) return;\n markers.setVisible(this.markersVisible);\n await markers.loadRegions(characterConfig, { sliceSurfaceQueries });\n if (!this.isRegionLoadCurrent(request, model) || markers !== this.markers || characterConfig !== this.characterConfig) {\n return;\n }\n\n if (this.currentRegion) {\n markers.setCurrentRegion(this.currentRegion);\n }\n markers.setVisible(this.markersVisible);\n this.markersLoaded = true;\n }\n\n /**\n * Focus on a named region from the loaded config\n */\n async focusRegion(name: string, duration?: number): Promise<void> {\n const region = this.regions.find((a) => a.name === name);\n if (!region) {\n return;\n }\n\n if (await this.beginCameraRequest() === null) return;\n\n this.currentRegion = name;\n this.notifyRegionChange(name);\n\n const focusPos = this.resolveRegionFocusPosition(region);\n if (!focusPos) {\n return;\n }\n\n // Apply camera offset if specified\n if (region.cameraOffset) {\n if (region.cameraOffset.x) focusPos.position.x += region.cameraOffset.x;\n if (region.cameraOffset.y) focusPos.position.y += region.cameraOffset.y;\n if (region.cameraOffset.z) focusPos.position.z += region.cameraOffset.z;\n }\n\n await this.animateCamera(focusPos.position, focusPos.target, duration ?? this.config.transitionDuration);\n }\n\n private resolveRegionFocusPosition(region: Region): FocusPosition | null {\n const focusTarget = (region as AnnotationAnchoredRegion).focusTarget;\n if (!focusTarget || focusTarget.type === 'region') {\n return this.resolveLegacyRegionFocusPosition(\n region,\n focusTarget?.paddingFactor,\n focusTarget?.cameraAngle,\n );\n }\n\n const paddingFactor = focusTarget.paddingFactor ?? region.paddingFactor;\n const cameraAngle = focusTarget.cameraAngle ?? resolveRegionCameraAngle(region, this.laterality);\n\n if (focusTarget.type === 'point') {\n if (!focusTarget.position) return null;\n return this.calculatePointFocusPosition(\n new THREE.Vector3(\n focusTarget.position.x,\n focusTarget.position.y,\n focusTarget.position.z,\n ),\n paddingFactor,\n cameraAngle,\n );\n }\n\n if (focusTarget.type === 'face-center') {\n if (!this.model) return null;\n const faceRegion: Region = {\n ...region,\n bones: focusTarget.bones ?? region.bones,\n meshes: focusTarget.meshes ?? region.meshes,\n objects: focusTarget.objects ?? region.objects,\n };\n const faceCenter = resolveFaceCenter(this.model as any, faceRegion as any, boneResolutionProfile(this.characterConfig) ?? undefined);\n return this.calculatePointFocusPosition(\n new THREE.Vector3(\n faceCenter.center.x,\n faceCenter.center.y,\n faceCenter.center.z,\n ),\n paddingFactor,\n cameraAngle,\n );\n }\n\n const objects = this.resolveFocusTargetObjects(region, focusTarget);\n if (objects.length === 0) {\n return null;\n }\n\n return this.calculateFocusPosition(objects, paddingFactor, cameraAngle);\n }\n\n private resolveLegacyRegionFocusPosition(\n region: Region,\n overridePadding?: number,\n overrideCameraAngle?: number,\n ): FocusPosition | null {\n if (this.isFullBodyRegion(region)) {\n if (!this.model) {\n return null;\n }\n return this.calculateFullBodyFocusPosition(\n overridePadding ?? region.paddingFactor,\n overrideCameraAngle,\n );\n }\n\n const objects = this.resolveRegionObjects(region);\n if (objects.length === 0) {\n return null;\n }\n\n return this.calculateFocusPosition(\n objects,\n overridePadding ?? region.paddingFactor,\n overrideCameraAngle ?? resolveRegionCameraAngle(region, this.laterality),\n );\n }\n\n private resolveFocusTargetObjects(\n region: Region,\n focusTarget: AnnotationFocusTarget,\n ): THREE.Object3D[] {\n if (focusTarget.type === 'bone') {\n const boneNames = focusTarget.bones ?? region.bones ?? [];\n return this.findObjectsByNames(resolveBoneNames(boneNames, boneResolutionProfile(this.characterConfig)), 'Bone');\n }\n\n if (focusTarget.type === 'mesh') {\n return this.findObjectsByNames(focusTarget.meshes ?? region.meshes ?? [], 'Mesh');\n }\n\n if (focusTarget.type === 'object') {\n return this.resolveRegionObjects({\n ...region,\n bones: undefined,\n meshes: undefined,\n objects: focusTarget.objects ?? region.objects,\n });\n }\n\n return [];\n }\n\n /**\n * Focus on specific bones by name\n */\n async focusBones(boneNames: string[], duration?: number): Promise<void> {\n const objects = this.findObjectsByNames(boneNames, 'Bone');\n if (objects.length === 0) {\n return;\n }\n\n if (await this.beginCameraRequest() === null) return;\n\n const focusPos = this.calculateFocusPosition(objects);\n await this.animateCamera(focusPos.position, focusPos.target, duration ?? this.config.transitionDuration);\n }\n\n /**\n * Focus on specific meshes by name\n */\n async focusMeshes(meshNames: string[], duration?: number): Promise<void> {\n const objects = this.findObjectsByNames(meshNames, 'Mesh');\n if (objects.length === 0) {\n return;\n }\n\n if (await this.beginCameraRequest() === null) return;\n\n const focusPos = this.calculateFocusPosition(objects);\n await this.animateCamera(focusPos.position, focusPos.target, duration ?? this.config.transitionDuration);\n }\n\n /**\n * Focus on the full body (entire model bounding box)\n */\n async focusFullBody(duration?: number): Promise<void> {\n if (!this.model) {\n return;\n }\n\n if (await this.beginCameraRequest() === null) return;\n\n const focusPos = this.calculateFullBodyFocusPosition();\n await this.animateCamera(focusPos.position, focusPos.target, duration ?? this.config.transitionDuration);\n }\n\n /**\n * Focus on arbitrary objects\n */\n async focusObjects(objects: THREE.Object3D[], duration?: number): Promise<void> {\n if (objects.length === 0) {\n return;\n }\n\n if (await this.beginCameraRequest() === null) return;\n\n const focusPos = this.calculateFocusPosition(objects);\n await this.animateCamera(focusPos.position, focusPos.target, duration ?? this.config.transitionDuration);\n }\n\n /**\n * Play intro animation: orbit around the character, then settle into a tight\n * left-eye hero closeup when the character provides a left-eye region.\n * @param orbitDuration - Duration of the 360° orbit in ms (default: 3000)\n * @param zoomDuration - Duration of the final zoom in ms (default: 1500)\n */\n async playIntroAnimation(orbitDuration = 3000, zoomDuration = 1500): Promise<void> {\n const request = await this.beginCameraRequest();\n if (request === null) return;\n\n if (!this.model) {\n return;\n }\n\n // Force update world matrices to ensure all geometry positions are current\n this.scene.updateMatrixWorld(true);\n\n // Get full model bounds - includes all meshes and their current deformed positions\n const box = new THREE.Box3().setFromObject(this.model);\n const center = new THREE.Vector3();\n const size = new THREE.Vector3();\n box.getCenter(center);\n box.getSize(size);\n\n // Calculate orbit parameters based on full model extent\n // Use the maximum horizontal extent (X or Z) to ensure we clear all geometry including fins\n const horizontalExtent = Math.max(size.x, size.z);\n const verticalExtent = size.y;\n\n // Orbit distance: far enough to see the full model from any angle\n // Include extra padding to account for fins and other protrusions\n const orbitRadius = Math.max(horizontalExtent, verticalExtent) * 1.8;\n\n // Orbit height: centered on the model with a slight upward bias\n const orbitHeight = center.y;\n\n // The Rust orbit owns both the initial pose and all subsequent samples.\n await this.animateOrbit(center, orbitRadius, orbitHeight, orbitDuration);\n if (!this.isCameraRequestCurrent(request)) return;\n\n const leftEyeRegion = this.findIntroLeftEyeRegion();\n const leftEyeFocus = leftEyeRegion\n ? this.calculateIntroLeftEyeFocusPosition(leftEyeRegion)\n : null;\n if (leftEyeFocus && leftEyeRegion) {\n await this.animateCamera(leftEyeFocus.position, leftEyeFocus.target, zoomDuration);\n if (!this.isCameraRequestCurrent(request)) return;\n this.currentRegion = leftEyeRegion.name;\n this.notifyRegionChange(leftEyeRegion.name);\n return;\n }\n\n const finalAngle = -30; // degrees, matching the legacy 11 o'clock intro landing\n const fullBodyRegion = this.regions.find((region) => this.isFullBodyRegion(region));\n const focusPos = this.calculateFullBodyFocusPosition(fullBodyRegion?.paddingFactor, finalAngle, 'world');\n\n await this.animateCamera(focusPos.position, focusPos.target, zoomDuration);\n if (!this.isCameraRequestCurrent(request)) return;\n\n if (fullBodyRegion) {\n this.currentRegion = fullBodyRegion.name;\n this.notifyRegionChange(fullBodyRegion.name);\n }\n }\n\n /**\n * Animate a smooth 360° orbit around a center point\n * Animation is driven by the update() method which is called from the render loop.\n */\n private animateOrbit(\n center: THREE.Vector3,\n radius: number,\n height: number,\n duration: number\n ): Promise<void> {\n return this.runCameraAnimation(\n requireAnnotationCameraCore().createCameraOrbit(center, radius, height, duration),\n );\n }\n\n // ====== CONFIG/STATE METHODS ======\n\n /**\n * Get list of available region names\n */\n getRegionNames(): string[] {\n return this.regions.map((a) => a.name);\n }\n\n /**\n * Get current region name\n */\n getCurrentRegion(): string | null {\n return this.currentRegion;\n }\n\n /**\n * Get loaded character config\n */\n getCharacterConfig(): CharacterConfig | null {\n return this.characterConfig;\n }\n\n /**\n * Get current camera state\n */\n getCameraState(): CameraState {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n };\n }\n\n /**\n * Set camera state directly (no animation)\n */\n setCameraState(state: CameraState): void {\n this.cameraRequestGeneration += 1;\n this.cancelCameraAnimation();\n this.camera.position.set(...state.position);\n this.controls.target.set(...state.target);\n this.controls.update();\n }\n\n /**\n * Animate to camera state\n */\n async animateToCameraState(state: CameraState, duration?: number): Promise<void> {\n if (await this.beginCameraRequest() === null) return;\n\n const targetPosition = new THREE.Vector3(...state.position);\n const targetLookAt = new THREE.Vector3(...state.target);\n await this.animateCamera(targetPosition, targetLookAt, duration ?? this.config.transitionDuration);\n }\n\n // ====== MARKERS ======\n\n /**\n * Show/hide region markers\n */\n setMarkersVisible(visible: boolean): void {\n if (this.disposed) return;\n // Keep startup light by only constructing markers once something actually\n // requests that they be shown.\n if (visible && !this.markersLoaded && this.characterConfig) {\n void this.loadMarkersForCurrentRegions();\n }\n\n if (this.markersVisible === visible) return;\n this.markersVisible = visible;\n this.markers?.setVisible(visible);\n this.domControls?.setMarkersVisible(visible);\n this.emitMarkerState();\n }\n\n /**\n * Get current markers visibility state\n */\n getMarkersVisible(): boolean {\n return this.markersVisible;\n }\n\n /**\n * Clear all markers and reset region state\n */\n clearMarkers(): void {\n if (this.disposed) return;\n this.cancelModelPreparation();\n this.regionLoadGeneration += 1;\n this.cameraRequestGeneration += 1;\n this.cancelCameraAnimation();\n this.markers?.clear();\n this.markersLoaded = false;\n this.regions = [];\n this.currentRegion = null;\n this.characterConfig = null;\n this.runtimeAnnotationRegionNames.clear();\n if (this.currentMarkerStyle !== '3d') {\n this.currentMarkerStyle = '3d';\n this.emitMarkerState();\n }\n this.updateDOMControls();\n }\n\n /**\n * Get current marker style\n */\n getMarkerStyle(): MarkerStyle {\n return this.currentMarkerStyle;\n }\n\n /**\n * Set marker style (html or 3d) - recreates markers with new style\n */\n setMarkerStyle(style: MarkerStyle): void {\n if (this.disposed) return;\n console.log(`[CameraController] setMarkerStyle: ${this.currentMarkerStyle} -> ${style}`);\n if (style === this.currentMarkerStyle) return;\n\n this.setMarkerStyleState(style);\n\n // If startup intentionally deferred marker construction, just remember the\n // new style and let the deferred load build the correct marker flavor.\n if (!this.markersLoaded) {\n this.markers?.dispose();\n this.markers = null;\n return;\n }\n\n void this.loadMarkersForCurrentRegions();\n }\n\n private setMarkerStyleState(style: MarkerStyle): void {\n if (style === this.currentMarkerStyle) {\n return;\n }\n\n this.currentMarkerStyle = style;\n this.emitMarkerState();\n }\n\n private ensureMarkersForCurrentStyle(): void {\n if (this.markers) {\n this.markers.dispose();\n this.markers = null;\n }\n\n if (this.currentMarkerStyle === 'html') {\n this.markers = new DPthreeHTMLMarkers({\n scene: this.scene,\n camera: this.camera,\n domElement: this.domElement,\n onSelect: this.selectRegion,\n });\n } else {\n this.markers = new DPthree3DMarkers({\n scene: this.scene,\n camera: this.camera,\n domElement: this.domElement,\n onSelect: this.selectRegion,\n });\n }\n\n console.log(`[CameraController] Created ${this.currentMarkerStyle} markers, has model: ${!!this.model}, has config: ${!!this.characterConfig}`);\n\n if (this.model) {\n this.markers.setModel(this.model);\n }\n }\n\n subscribeMarkerState(listener: (state: MarkerStateSnapshot) => void): () => void {\n this.markerStateListeners.add(listener);\n listener(this.getMarkerState());\n return () => {\n this.markerStateListeners.delete(listener);\n };\n }\n\n private getMarkerState(): MarkerStateSnapshot {\n return {\n style: this.currentMarkerStyle,\n visible: this.markersVisible,\n };\n }\n\n private emitMarkerState(): void {\n const snapshot = this.getMarkerState();\n for (const listener of this.markerStateListeners) {\n listener(snapshot);\n }\n }\n\n // ====== MARKER STYLING ======\n\n /**\n * Solo a marker - show only this marker, hide all others\n * @param regionName - Region to solo (null to unsolo all)\n */\n soloMarker(regionName: string | null): void {\n if (this.markers && 'setSoloMarker' in this.markers) {\n (this.markers as DPthree3DMarkers).setSoloMarker(regionName);\n }\n }\n\n /**\n * Get currently soloed marker name (or null)\n */\n getSoloedMarker(): string | null {\n if (this.markers && 'getSoloedMarker' in this.markers) {\n return (this.markers as DPthree3DMarkers).getSoloedMarker();\n }\n return null;\n }\n\n /**\n * Expand a region to show its children\n * @param regionName - Name of the parent region to expand\n * @param duration - Animation duration in ms (default: 400)\n */\n expandRegion(regionName: string, duration?: number): void {\n if (this.markers && 'expandRegion' in this.markers) {\n (this.markers as DPthree3DMarkers).expandRegion(regionName, 'outward', duration);\n }\n }\n\n /**\n * Collapse a region to hide its children\n * @param regionName - Name of the parent region to collapse\n * @param duration - Animation duration in ms (default: 300)\n */\n collapseRegion(regionName: string, duration?: number): void {\n if (this.markers && 'collapseRegion' in this.markers) {\n (this.markers as DPthree3DMarkers).collapseRegion(regionName, duration);\n }\n }\n\n /**\n * Toggle expand/collapse state of a region\n * @param regionName - Name of the parent region to toggle\n * @param animation - Animation style: 'outward' or 'staggered'\n * @param duration - Animation duration in ms\n */\n toggleRegion(regionName: string, animation: 'outward' | 'staggered' = 'outward', duration?: number): void {\n if (this.markers && 'toggleRegion' in this.markers) {\n (this.markers as DPthree3DMarkers).toggleRegion(regionName, animation, duration);\n }\n }\n\n /**\n * Get current expanded state of all regions\n */\n getExpandedRegions(): { regionName: string; isExpanded: boolean; children: string[] }[] {\n if (this.markers && 'getExpandedRegions' in this.markers) {\n return (this.markers as DPthree3DMarkers).getExpandedRegions();\n }\n return [];\n }\n\n /**\n * Update line style for a specific region at runtime\n */\n setRegionLineStyle(regionName: string, lineConfig: { style?: 'solid' | 'dashed' | 'dotted'; curve?: 'straight' | 'bezier' | 'arc'; arrowHead?: boolean; thickness?: number; length?: number }): void {\n console.log(`[CameraController] setRegionLineStyle: region=${regionName}, markerStyle=${this.currentMarkerStyle}`, lineConfig);\n if (this.markers && 'updateLineStyle' in this.markers) {\n (this.markers as DPthree3DMarkers).updateLineStyle(regionName, lineConfig);\n } else {\n console.warn(`[CameraController] updateLineStyle not available (markers: ${!!this.markers}, method: ${'updateLineStyle' in (this.markers || {})})`);\n }\n }\n\n /**\n * Update marker style for a specific region at runtime\n */\n setRegionStyle(regionName: string, style: { markerColor?: number; markerRadius?: number; lineColor?: number; labelColor?: string; labelBackground?: string; labelFontSize?: number; opacity?: number }): void {\n console.log(`[CameraController] setRegionStyle: region=${regionName}, markerStyle=${this.currentMarkerStyle}`, style);\n if (this.markers && 'updateMarkerStyle' in this.markers) {\n (this.markers as DPthree3DMarkers).updateMarkerStyle(regionName, style);\n } else {\n console.warn(`[CameraController] updateMarkerStyle not available (markers: ${!!this.markers}, method: ${'updateMarkerStyle' in (this.markers || {})})`);\n }\n }\n\n /**\n * Update the face mesh configuration for a region and recalculate its position.\n * This is called when the user selects a different face mesh in the wizard.\n *\n * @param regionName - Name of the region to update (e.g., 'face')\n * @param meshNames - Array of mesh names to use for positioning\n */\n updateRegionMeshes(regionName: string, meshNames: string[]): void {\n console.log(`[CameraController] updateRegionMeshes: region=${regionName}, meshes=${meshNames.join(', ')}`);\n if (this.markers && 'updateRegionMeshes' in this.markers) {\n (this.markers as DPthree3DMarkers).updateRegionMeshes(regionName, meshNames);\n } else {\n console.warn(`[CameraController] updateRegionMeshes not available (markers: ${!!this.markers}, method: ${'updateRegionMeshes' in (this.markers || {})})`);\n }\n }\n\n /**\n * Reposition an existing marker to a new position.\n *\n * @param regionName - Name of the region to reposition\n * @param position - New world position { x, y, z }\n */\n repositionMarker(regionName: string, position: { x: number; y: number; z: number }): void {\n console.log(`[CameraController] repositionMarker: ${regionName} -> (${position.x.toFixed(3)}, ${position.y.toFixed(3)}, ${position.z.toFixed(3)})`);\n if (this.markers && 'repositionMarker' in this.markers) {\n const vec = new THREE.Vector3(position.x, position.y, position.z);\n (this.markers as DPthree3DMarkers).repositionMarker(regionName, vec);\n } else {\n console.warn(`[CameraController] repositionMarker not available`);\n }\n }\n\n /**\n * Get the current position of a marker\n */\n getMarkerPosition(regionName: string): { x: number; y: number; z: number } | null {\n if (this.markers && 'getMarkerPosition' in this.markers) {\n const pos = (this.markers as DPthree3DMarkers).getMarkerPosition(regionName);\n return pos ? { x: pos.x, y: pos.y, z: pos.z } : null;\n }\n return null;\n }\n\n /**\n * Get the current model reference\n */\n getModel(): THREE.Object3D | null {\n return this.model;\n }\n\n /**\n * Remove an annotation region from the active runtime config and marker set.\n *\n * Persistence still happens through the canonical profile annotation overrides\n * saved by the authoring UI; this only keeps the live scene in sync.\n */\n removeAnnotationRegion(regionName: string): void {\n if (this.disposed) return;\n this.runtimeAnnotationRegionNames.delete(regionName);\n const nextRegions = this.regions.filter((region) => region.name !== regionName);\n if (nextRegions.length === this.regions.length) {\n return;\n }\n\n this.regionLoadGeneration += 1;\n this.regions = nextRegions;\n if (this.characterConfig) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: (this.characterConfig.regions ?? []).filter((region) => region.name !== regionName),\n };\n }\n if (this.currentRegion === regionName) {\n this.currentRegion = null;\n }\n this.refreshLaterality();\n this.updateDOMControls();\n // A pending surface query must also see removals before it creates a marker.\n if (this.markers?.removeRegion) {\n this.markers.removeRegion(regionName);\n } else if (this.markersLoaded) {\n void this.loadMarkersForCurrentRegions();\n }\n }\n\n /**\n * Update an annotation region's configuration without reloading the character.\n * This updates the region's bones, meshes, or other properties and recalculates\n * the marker position automatically.\n *\n * @param regionName - Name of the region to update (e.g., 'face', 'left_eye')\n * @param update - Partial region config to merge with existing config\n */\n updateAnnotationRegion(regionName: string, update: Partial<AnnotationAnchoredRegion>): void {\n if (this.disposed) return;\n this.regionLoadGeneration += 1;\n console.log(`[CameraController] updateAnnotationRegion: ${regionName}`, update);\n\n // Find and update the region in our local state\n const regionIndex = this.regions.findIndex(r => r.name === regionName);\n if (regionIndex === -1) {\n const newRegion: AnnotationAnchoredRegion = { name: regionName, ...update };\n this.regions = [...this.regions, newRegion];\n if (this.characterConfig) {\n this.characterConfig = {\n ...this.characterConfig,\n regions: [...(this.characterConfig.regions ?? []), newRegion],\n };\n }\n this.refreshLaterality();\n this.updateDOMControls();\n if (this.markersLoaded) {\n if (this.markers?.updateRegion) {\n this.markers.updateRegion(regionName, newRegion);\n } else {\n void this.loadMarkersForCurrentRegions();\n }\n }\n console.log(`[CameraController] Region \"${regionName}\" added successfully`);\n return;\n }\n\n // Merge the update with existing region config\n const updatedRegion = { ...this.regions[regionIndex], ...update };\n this.regions[regionIndex] = updatedRegion;\n\n // Also update in characterConfig if present\n if (this.characterConfig?.regions) {\n const configIndex = this.characterConfig.regions.findIndex(r => r.name === regionName);\n if (configIndex !== -1) {\n this.characterConfig.regions[configIndex] = updatedRegion;\n }\n }\n\n this.refreshLaterality();\n\n // Update the marker system using the general updateRegion method\n if (this.markers && 'updateRegion' in this.markers) {\n (this.markers as DPthree3DMarkers).updateRegion(regionName, update);\n } else if (this.markers && 'updateRegionMeshes' in this.markers && update.meshes) {\n // Fallback to updateRegionMeshes if updateRegion not available\n (this.markers as DPthree3DMarkers).updateRegionMeshes(regionName, update.meshes);\n }\n\n this.updateDOMControls();\n console.log(`[CameraController] Region \"${regionName}\" updated successfully`);\n }\n\n /**\n * Get the current configuration for a specific region\n */\n getAnnotationRegion(regionName: string): AnnotationAnchoredRegion | undefined {\n return this.regions.find(r => r.name === regionName);\n }\n\n /**\n * Get all annotation regions\n */\n getAnnotationRegions(): AnnotationAnchoredRegion[] {\n return [...this.regions];\n }\n\n private buildRuntimeAnnotationRegionName(\n targetType: 'bone' | 'au',\n target: string,\n boneName: string,\n side?: RuntimeAnnotationSide,\n ): string {\n return [\n RUNTIME_ANNOTATION_REGION_PREFIX,\n targetType,\n ':',\n encodeRuntimeAnnotationSegment(target),\n ...(side ? [':', encodeRuntimeAnnotationSegment(side)] : []),\n ':bone:',\n encodeRuntimeAnnotationSegment(boneName),\n ].join('');\n }\n\n private buildRuntimeBoneAnnotationRegion(\n targetType: 'bone' | 'au',\n target: string,\n boneName: string,\n options: RuntimeAnnotationOptions,\n side?: RuntimeAnnotationSide,\n ): AnnotationAnchoredRegion {\n const regionName = this.buildRuntimeAnnotationRegionName(targetType, target, boneName, side);\n const defaultLabel = targetType === 'au' ? `AU ${target}: ${boneName}` : `Bone: ${boneName}`;\n const style = buildRuntimeAnnotationStyle(options);\n\n return {\n name: regionName,\n label: options.label ?? defaultLabel,\n bones: [boneName],\n paddingFactor: options.paddingFactor ?? 0.8,\n cameraAngle: options.cameraAngle,\n markerAnchor: {\n type: 'bone',\n bones: [boneName],\n projectToSurface: options.projectToSurface,\n },\n focusTarget: {\n type: 'bone',\n bones: [boneName],\n paddingFactor: options.paddingFactor ?? 0.8,\n cameraAngle: options.cameraAngle,\n },\n ...(style ? { style } : {}),\n runtimeAnnotation: {\n targetType,\n target,\n boneName,\n ...(side ? { side } : {}),\n },\n };\n }\n\n private buildRuntimeMeshAnnotationRegionName(\n targetType: 'bone' | 'au',\n target: string,\n meshName: string,\n side?: RuntimeAnnotationSide,\n ): string {\n return [\n RUNTIME_ANNOTATION_REGION_PREFIX,\n targetType,\n ':',\n encodeRuntimeAnnotationSegment(target),\n ...(side ? [':', encodeRuntimeAnnotationSegment(side)] : []),\n ':mesh:',\n encodeRuntimeAnnotationSegment(meshName),\n ].join('');\n }\n\n private buildRuntimeMeshAnnotationRegion(\n targetType: 'bone' | 'au',\n target: string,\n meshName: string,\n morphNames: string[],\n options: RuntimeAnnotationOptions,\n side?: RuntimeAnnotationSide,\n ): AnnotationAnchoredRegion {\n const regionName = this.buildRuntimeMeshAnnotationRegionName(targetType, target, meshName, side);\n const defaultLabel = targetType === 'au' ? `AU ${target}: ${meshName}` : `Mesh: ${meshName}`;\n const style = buildRuntimeAnnotationStyle(options);\n\n return {\n name: regionName,\n label: options.label ?? defaultLabel,\n meshes: [meshName],\n paddingFactor: options.paddingFactor ?? 0.8,\n cameraAngle: options.cameraAngle,\n markerAnchor: {\n type: 'mesh',\n meshes: [meshName],\n projectToSurface: options.projectToSurface,\n },\n focusTarget: {\n type: 'mesh',\n meshes: [meshName],\n paddingFactor: options.paddingFactor ?? 0.8,\n cameraAngle: options.cameraAngle,\n },\n ...(style ? { style } : {}),\n runtimeAnnotation: {\n targetType,\n target,\n meshName,\n morphNames,\n ...(side ? { side } : {}),\n },\n };\n }\n\n private upsertRuntimeBoneAnnotationRegion(\n targetType: 'bone' | 'au',\n target: string,\n boneName: string,\n options: RuntimeAnnotationOptions,\n side?: RuntimeAnnotationSide,\n ): RuntimeAnnotationRegionSummary {\n const region = this.buildRuntimeBoneAnnotationRegion(targetType, target, boneName, options, side);\n this.runtimeAnnotationRegionNames.add(region.name);\n const existingRegion = this.getAnnotationRegion(region.name);\n if (\n !existingRegion ||\n buildRuntimeAnnotationRegionSignature(existingRegion) !== buildRuntimeAnnotationRegionSignature(region)\n ) {\n this.updateAnnotationRegion(region.name, region);\n }\n\n return {\n name: region.name,\n label: getRuntimeAnnotationRegionLabel(region),\n targetType,\n target,\n bones: [boneName],\n ...(side ? { side } : {}),\n };\n }\n\n private upsertRuntimeMeshAnnotationRegion(\n targetType: 'bone' | 'au',\n target: string,\n meshName: string,\n morphNames: string[],\n options: RuntimeAnnotationOptions,\n side?: RuntimeAnnotationSide,\n ): RuntimeAnnotationRegionSummary {\n const region = this.buildRuntimeMeshAnnotationRegion(targetType, target, meshName, morphNames, options, side);\n this.runtimeAnnotationRegionNames.add(region.name);\n const existingRegion = this.getAnnotationRegion(region.name);\n if (\n !existingRegion ||\n buildRuntimeAnnotationRegionSignature(existingRegion) !== buildRuntimeAnnotationRegionSignature(region)\n ) {\n this.updateAnnotationRegion(region.name, region);\n }\n\n return {\n name: region.name,\n label: getRuntimeAnnotationRegionLabel(region),\n targetType,\n target,\n bones: [],\n meshes: [meshName],\n morphs: [...morphNames],\n ...(side ? { side } : {}),\n };\n }\n\n private clearRuntimeAnnotationsForTarget(\n targetType: 'bone' | 'au',\n target: string,\n keepRegionNames = new Set<string>(),\n ): string[] {\n const removed: string[] = [];\n\n for (const regionName of Array.from(this.runtimeAnnotationRegionNames)) {\n if (keepRegionNames.has(regionName)) continue;\n\n const region = this.getAnnotationRegion(regionName);\n const runtimeAnnotation = region?.runtimeAnnotation;\n if (\n runtimeAnnotation?.targetType === targetType\n && runtimeAnnotation.target === target\n ) {\n this.removeAnnotationRegion(regionName);\n removed.push(regionName);\n }\n }\n\n return removed;\n }\n\n private clearRuntimeAnnotationsExcept(keepRegionNames: Set<string>): string[] {\n const removed: string[] = [];\n\n for (const regionName of Array.from(this.runtimeAnnotationRegionNames)) {\n if (keepRegionNames.has(regionName)) continue;\n\n this.removeAnnotationRegion(regionName);\n removed.push(regionName);\n }\n\n return removed;\n }\n\n /**\n * Show a temporary annotation marker for a bone. Runtime annotations are\n * ordinary regions with explicit bone marker/focus anchors, tracked separately\n * so they can be cleared without modifying saved character annotations.\n */\n showRuntimeBoneAnnotation(\n boneName: string,\n options: RuntimeAnnotationOptions = {},\n ): RuntimeAnnotationRegionSummary {\n const normalizedBoneName = normalizeRuntimeAnnotationText(boneName);\n if (!normalizedBoneName) {\n throw new Error('Bone name is required');\n }\n\n const summary = this.upsertRuntimeBoneAnnotationRegion(\n 'bone',\n normalizedBoneName,\n normalizedBoneName,\n options,\n );\n this.setMarkersVisible(true);\n return summary;\n }\n\n /**\n * Show temporary annotation markers for every bone binding used by an AU.\n * The optional profile override lets remote-control callers use the active\n * Embody engine profile, while normal controller consumers can rely on the\n * loaded character config.\n */\n showRuntimeAUAnnotations(\n auId: string | number,\n profileOverride?: unknown,\n options: RuntimeAnnotationOptions = {},\n morphTargetsByMesh?: unknown,\n ): RuntimeAnnotationRegionSummary[] {\n const normalizedAuId = normalizeRuntimeAnnotationText(auId);\n if (!normalizedAuId) {\n throw new Error('AU id is required');\n }\n\n const profileCandidates = getRuntimeAnnotationProfileCandidates(this.characterConfig, profileOverride);\n const targetSide = options.targetSide;\n const boneTargets = resolveRuntimeAnnotationAUBoneTargets(\n normalizedAuId,\n profileCandidates,\n targetSide,\n );\n const morphSelection = resolveRuntimeAnnotationAUMorphSelection(normalizedAuId, profileCandidates, targetSide);\n const meshTargets = resolveRuntimeAnnotationMorphMeshes(\n morphSelection.morphNames,\n morphTargetsByMesh,\n morphSelection.side,\n );\n\n if (boneTargets.length === 0 && meshTargets.length === 0) {\n if (morphSelection.morphNames.length > 0) {\n throw new Error(`AU ${normalizedAuId} has morph bindings but no matching morph target meshes to annotate`);\n }\n throw new Error(`AU ${normalizedAuId} has no bone or morph bindings to annotate`);\n }\n\n const bones = boneTargets.map((target) => target.boneName);\n const limitedTargets = limitRuntimeAnnotationTargets(bones, meshTargets, options);\n\n const desiredRegionNames = new Set<string>();\n for (const boneName of limitedTargets.bones) {\n const boneTarget = boneTargets.find((target) => target.boneName === boneName);\n desiredRegionNames.add(this.buildRuntimeAnnotationRegionName(\n 'au',\n normalizedAuId,\n boneName,\n targetSide ? boneTarget?.side ?? targetSide : undefined,\n ));\n }\n for (const meshTarget of limitedTargets.meshTargets) {\n desiredRegionNames.add(this.buildRuntimeMeshAnnotationRegionName(\n 'au',\n normalizedAuId,\n meshTarget.meshName,\n meshTarget.side,\n ));\n }\n\n if (options.replaceExisting) {\n this.clearRuntimeAnnotationsExcept(desiredRegionNames);\n } else if (targetSide) {\n this.clearRuntimeAnnotationsForTarget('au', normalizedAuId, desiredRegionNames);\n }\n\n const boneSummaries = limitedTargets.bones.map((boneName) => {\n const boneTarget = boneTargets.find((target) => target.boneName === boneName);\n return this.upsertRuntimeBoneAnnotationRegion(\n 'au',\n normalizedAuId,\n boneName,\n options.label\n ? { ...options, label: `${options.label}: ${boneName}` }\n : options,\n targetSide ? boneTarget?.side ?? targetSide : undefined,\n );\n });\n const meshSummaries = limitedTargets.meshTargets.map(({ meshName, morphNames: targetMorphNames, side }) =>\n this.upsertRuntimeMeshAnnotationRegion(\n 'au',\n normalizedAuId,\n meshName,\n targetMorphNames,\n options.label\n ? { ...options, label: `${options.label}: ${meshName}` }\n : options,\n side,\n )\n );\n const summaries = [...boneSummaries, ...meshSummaries];\n this.setMarkersVisible(true);\n return summaries;\n }\n\n /**\n * Remove all temporary runtime annotations created through the AU/bone API.\n */\n clearRuntimeAnnotations(): string[] {\n const removed = Array.from(this.runtimeAnnotationRegionNames);\n for (const regionName of removed) {\n this.removeAnnotationRegion(regionName);\n }\n return removed;\n }\n\n // ====== DOM CONTROLS ======\n\n /**\n * Show/hide built-in DOM controls\n */\n setDOMControlsVisible(visible: boolean): void {\n this.domControls?.setVisible(visible);\n }\n\n /**\n * Update DOM controls to reflect current regions\n */\n updateDOMControls(): void {\n if (!this.domControls) return;\n // AU slider previews create temporary runtime:annotation:* regions; keep\n // those out of the View dropdown so option text cannot widen the control.\n this.domControls.updateRegions(\n filterCameraViewRegions(this.getAnnotationRegions()),\n this.currentRegion ?? undefined,\n );\n this.domControls.setMarkersVisible(this.markersVisible);\n }\n\n // ====== CALLBACKS ======\n\n /**\n * Register callback for region changes\n */\n onRegionChange(callback: RegionChangeCallback): () => void {\n this.onRegionChangeCallbacks.push(callback);\n return () => {\n const index = this.onRegionChangeCallbacks.indexOf(callback);\n if (index > -1) this.onRegionChangeCallbacks.splice(index, 1);\n };\n }\n\n // ====== LIFECYCLE ======\n\n /**\n * Update loop - call in animation frame (from render loop)\n * This drives camera animations and marker updates\n */\n update(): void {\n if (this.disposed) return;\n if (this.pendingAnimation) {\n const animation = this.pendingAnimation;\n const sample = animation.runtime.sample(performance.now() - animation.startTime);\n this.applyCameraPose(sample);\n if (sample.done) {\n this.pendingAnimation = null;\n animation.runtime.dispose();\n animation.resolve();\n }\n }\n\n this.controls.update();\n this.markers?.update();\n }\n\n /**\n * Cleanup and dispose\n */\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.cancelModelPreparation();\n this.regionLoadGeneration += 1;\n this.cameraRequestGeneration += 1;\n\n // Stop render loop if we're managing it\n this.stopRenderLoop();\n this.playbackTimer.dispose();\n const renderingSettled = this.unbindRendering?.();\n this.unbindRendering = null;\n\n // Clean up resize handling\n this.cleanupResizeHandling();\n\n this.cancelCameraAnimation();\n\n // Dispose DOM controls\n this.domControls?.dispose();\n this.domControls = null;\n\n // A candidate may still compile the scene including these owned markers.\n const markers = this.markers;\n this.markers = null;\n if (renderingSettled) void renderingSettled.then(() => markers?.dispose());\n else markers?.dispose();\n\n // Dispose OrbitControls\n this.controls.dispose();\n\n // Clear callbacks\n this.onRegionChangeCallbacks = [];\n }\n\n // ====== PRIVATE METHODS ======\n\n private initDOMControls(): void {\n this.domControls = new CameraDOMControls({\n container: this.controlsContainer,\n regions: filterCameraViewRegions(this.getAnnotationRegions()),\n currentRegion: this.currentRegion ?? undefined,\n markersVisible: this.markersVisible,\n onRegionSelect: this.selectRegion,\n onMarkersVisibleChange: (visible) => this.setMarkersVisible(visible),\n });\n }\n\n private notifyRegionChange(name: string): void {\n this.onRegionChangeCallbacks.forEach((cb) => cb(name));\n this.domControls?.setCurrentRegion(name);\n this.markers?.setCurrentRegion(name);\n }\n\n /**\n * Resolve region definition to actual Object3D instances\n */\n private resolveRegionObjects(region: Region): THREE.Object3D[] {\n if (!this.model) return [];\n\n const objects: THREE.Object3D[] = [];\n\n // Handle special '*' case for all objects - collect all meshes\n if (region.objects?.includes('*')) {\n const meshes: THREE.Object3D[] = [];\n this.model.traverse((obj) => {\n if ((obj as THREE.Mesh).isMesh) {\n meshes.push(obj);\n }\n });\n return meshes.length > 0 ? meshes : [this.model];\n }\n\n // Find bones - resolve semantic names to actual GLB names first\n if (region.bones) {\n const resolvedBoneNames = resolveBoneNames(region.bones, boneResolutionProfile(this.characterConfig));\n objects.push(...this.findObjectsByNames(resolvedBoneNames, 'Bone'));\n }\n\n // Find meshes\n if (region.meshes) {\n objects.push(...this.findObjectsByNames(region.meshes, 'Mesh'));\n }\n\n // Find any objects\n if (region.objects) {\n objects.push(...this.findObjectsByNames(region.objects));\n }\n\n return objects;\n }\n\n /**\n * Find objects by name with optional type filter.\n * Uses fuzzy matching to handle bone names with numeric suffixes\n * (e.g., \"CC_Base_Head_038\" matches \"CC_Base_Head\").\n */\n private findObjectsByNames(names: string[], type?: string): THREE.Object3D[] {\n if (!this.model) return [];\n\n const found: THREE.Object3D[] = [];\n const nameSet = new Set(names);\n\n this.model.traverse((obj) => {\n // Exact match first\n if (nameSet.has(obj.name)) {\n if (!type || obj.type === type) {\n found.push(obj);\n }\n return;\n }\n\n // Fuzzy match - check if obj.name starts with any target + numeric suffix\n for (const target of names) {\n if (fuzzyNameMatch(obj.name, target, this.characterConfig?.suffixPattern)) {\n if (!type || obj.type === type) {\n found.push(obj);\n }\n break;\n }\n }\n });\n\n return found;\n }\n\n /**\n * Get bounding box of vertices influenced by a bone from skinned meshes\n * This finds the actual geometry size around a bone for proper framing\n *\n * For skinned meshes, we need to compute the actual skinned vertex positions,\n * not just the bind pose positions.\n */\n private getBoneInfluencedBoundingBox(bone: THREE.Bone): THREE.Box3 | null {\n if (!this.model) return null;\n\n const box = new THREE.Box3();\n\n // Find the bone index in any skeleton\n let boneIndex = -1;\n let skeleton: THREE.Skeleton | null = null;\n\n this.model.traverse((obj) => {\n const mesh = obj as THREE.SkinnedMesh;\n if (mesh.isSkinnedMesh && mesh.skeleton) {\n const idx = mesh.skeleton.bones.indexOf(bone);\n if (idx !== -1) {\n boneIndex = idx;\n skeleton = mesh.skeleton;\n }\n }\n });\n\n if (boneIndex === -1 || !skeleton) {\n return null;\n }\n\n // Find all skinned meshes and collect vertices influenced by this bone\n const tempVertex = new THREE.Vector3();\n const skinned = new THREE.Vector3();\n const tempMatrix = new THREE.Matrix4();\n\n this.model.traverse((obj) => {\n const mesh = obj as THREE.SkinnedMesh;\n if (!mesh.isSkinnedMesh || mesh.skeleton !== skeleton) return;\n const boneMatrices = mesh.skeleton.boneMatrices;\n if (!boneMatrices) return;\n\n // Ensure bone matrices are up to date\n mesh.skeleton.update();\n\n const geometry = mesh.geometry;\n const positionAttr = geometry.getAttribute('position');\n const skinIndexAttr = geometry.getAttribute('skinIndex');\n const skinWeightAttr = geometry.getAttribute('skinWeight');\n\n if (!positionAttr || !skinIndexAttr || !skinWeightAttr) return;\n\n // Get the bind matrix inverse for skinning calculation\n const bindMatrixInverse = mesh.bindMatrixInverse;\n\n // Check each vertex\n for (let i = 0; i < positionAttr.count; i++) {\n // Check if this vertex is influenced by our bone (weight > 0.1)\n let isInfluenced = false;\n for (let j = 0; j < 4; j++) {\n const skinIdx = skinIndexAttr.getComponent(i, j);\n const weight = skinWeightAttr.getComponent(i, j);\n if (skinIdx === boneIndex && weight > 0.1) {\n isInfluenced = true;\n break;\n }\n }\n\n if (isInfluenced) {\n // Get the vertex position in local space\n tempVertex.fromBufferAttribute(positionAttr, i);\n\n // Apply skinning transformation\n // skinned = sum(weight_i * boneMatrix_i * bindMatrixInverse * vertex)\n skinned.set(0, 0, 0);\n\n for (let j = 0; j < 4; j++) {\n const skinIdx = skinIndexAttr.getComponent(i, j);\n const weight = skinWeightAttr.getComponent(i, j);\n\n if (weight > 0) {\n // Get bone matrix (already includes world transform)\n tempMatrix.fromArray(boneMatrices, skinIdx * 16);\n\n // Transform vertex: boneMatrix * bindMatrixInverse * vertex\n const transformed = tempVertex.clone();\n transformed.applyMatrix4(bindMatrixInverse);\n transformed.applyMatrix4(tempMatrix);\n transformed.multiplyScalar(weight);\n\n skinned.add(transformed);\n }\n }\n\n // Apply mesh world matrix to get final world position\n skinned.applyMatrix4(mesh.matrixWorld);\n box.expandByPoint(skinned);\n }\n }\n });\n\n return box.isEmpty() ? null : box;\n }\n\n /**\n * Calculate optimal camera position to frame objects\n * @param objects - Objects to focus on\n * @param overridePadding - Optional padding factor override\n * @param cameraAngle - Camera angle in degrees around Y axis (0 = front, 180 = back)\n */\n private calculateFocusPosition(\n objects: THREE.Object3D[],\n overridePadding?: number,\n cameraAngle?: number,\n angleSpace: 'model' | 'world' = 'model'\n ): FocusPosition {\n // Force update world matrices on entire scene before computing bounding box\n this.scene.updateMatrixWorld(true);\n\n // Compute combined bounding box\n const box = new THREE.Box3();\n\n for (const obj of objects) {\n // For bones, find the geometry influenced by this bone from skinned meshes\n if (obj.type === 'Bone') {\n const bone = obj as THREE.Bone;\n const worldPos = new THREE.Vector3();\n bone.getWorldPosition(worldPos);\n\n // Find skinned meshes and get vertices influenced by this bone\n const boneBox = this.getBoneInfluencedBoundingBox(bone);\n if (boneBox && !boneBox.isEmpty()) {\n box.union(boneBox);\n } else {\n // Fallback: just use the bone position\n box.expandByPoint(worldPos);\n }\n } else {\n // For meshes and other objects, use expandByObject\n const objBox = new THREE.Box3().setFromObject(obj);\n if (!objBox.isEmpty()) {\n box.union(objBox);\n }\n }\n }\n\n // Explicit front views need no model-wide clearance bounds.\n const modelBox = this.model && cameraAngle !== 0\n ? new THREE.Box3().setFromObject(this.model)\n : null;\n return toFocusPosition(requireAnnotationCameraCore().solveFocusFraming({\n focusBounds: box.isEmpty() ? undefined : {\n center: box.getCenter(new THREE.Vector3()),\n size: box.getSize(new THREE.Vector3()),\n },\n modelBounds: modelBox && !modelBox.isEmpty() ? {\n center: modelBox.getCenter(new THREE.Vector3()),\n size: modelBox.getSize(new THREE.Vector3()),\n } : undefined,\n modelQuaternion: this.model?.getWorldQuaternion(new THREE.Quaternion()),\n fovDegrees: this.camera.fov,\n aspect: this.camera.aspect,\n minDistance: this.config.minDistance,\n closeUpPaddingFactor: this.config.closeUpPaddingFactor,\n zoomPaddingFactor: this.config.zoomPaddingFactor,\n fullBodyPaddingFactor: this.config.fullBodyPaddingFactor,\n overridePadding,\n cameraAngle,\n angleSpace,\n }));\n }\n\n private calculatePointFocusPosition(\n target: THREE.Vector3,\n overridePadding?: number,\n cameraAngle?: number,\n ): FocusPosition {\n const pointSize = this.resolvePointFocusSize();\n const focusProxy = new THREE.Mesh(\n new THREE.BoxGeometry(pointSize, pointSize, pointSize)\n );\n focusProxy.position.copy(target);\n focusProxy.updateMatrixWorld(true);\n\n const focusPosition = this.calculateFocusPosition([focusProxy], overridePadding, cameraAngle);\n focusProxy.geometry.dispose();\n return focusPosition;\n }\n\n private resolvePointFocusSize(): number {\n if (!this.model) {\n return 0.1;\n }\n\n const box = new THREE.Box3().setFromObject(this.model);\n if (box.isEmpty()) {\n return 0.1;\n }\n\n const size = new THREE.Vector3();\n box.getSize(size);\n const maxDimension = Math.max(size.x, size.y, size.z);\n return Math.max(maxDimension * 0.04, 0.02);\n }\n\n private getFallbackFocusPosition(): FocusPosition {\n return {\n position: new THREE.Vector3(0, 0.8, 2.5),\n target: new THREE.Vector3(0, 0.8, 0),\n distance: 2.5,\n };\n }\n\n private isFullBodyRegion(region: Region): boolean {\n const normalizedName = region.name.trim().toLowerCase().replace(/\\s+/g, '_');\n return normalizedName === 'full_body'\n || normalizedName === 'fullbody'\n || region.objects?.includes('*') === true;\n }\n\n private isLeftEyeRegion(region: Region): boolean {\n const normalizedName = region.name.trim().toLowerCase().replace(/[\\s-]+/g, '_');\n return normalizedName === 'left_eye'\n || normalizedName === 'lefteye'\n || normalizedName === 'eye_l'\n || normalizedName === 'l_eye'\n || (normalizedName.includes('left') && normalizedName.includes('eye'));\n }\n\n private findIntroLeftEyeRegion(): Region | undefined {\n return this.regions.find((region) => this.isLeftEyeRegion(region));\n }\n\n private resolveIntroLeftEyePadding(region: Region): number {\n const requestedPadding = region.paddingFactor ?? this.config.closeUpPaddingFactor;\n return Math.min(requestedPadding * INTRO_LEFT_EYE_PADDING_SCALE, INTRO_LEFT_EYE_PADDING_CAP);\n }\n\n private calculateIntroLeftEyeFocusPosition(region: Region): FocusPosition | null {\n const objects = this.resolveRegionObjects(region);\n if (objects.length === 0) {\n return null;\n }\n\n const focusPos = this.calculateFocusPosition(\n objects,\n this.resolveIntroLeftEyePadding(region),\n resolveRegionCameraAngle(region, this.laterality)\n );\n\n if (region.cameraOffset) {\n if (region.cameraOffset.x) focusPos.position.x += region.cameraOffset.x;\n if (region.cameraOffset.y) focusPos.position.y += region.cameraOffset.y;\n if (region.cameraOffset.z) focusPos.position.z += region.cameraOffset.z;\n }\n\n return this.applyIntroLeftEyeCompositionBias(focusPos);\n }\n\n private applyIntroLeftEyeCompositionBias(focusPos: FocusPosition): FocusPosition {\n if (!this.model) {\n return focusPos;\n }\n\n const modelBox = new THREE.Box3().setFromObject(this.model);\n if (modelBox.isEmpty()) {\n return focusPos;\n }\n\n const modelSize = new THREE.Vector3();\n modelBox.getSize(modelSize);\n const verticalBias = Math.max(\n modelSize.y * INTRO_LEFT_EYE_VERTICAL_BIAS_RATIO,\n INTRO_LEFT_EYE_MIN_VERTICAL_BIAS\n );\n\n const position = focusPos.position.clone();\n const target = focusPos.target.clone();\n position.y -= verticalBias;\n target.y -= verticalBias;\n\n return {\n position,\n target,\n distance: position.distanceTo(target),\n };\n }\n\n private calculateFullBodyFocusPosition(\n overridePadding?: number,\n cameraAngle?: number,\n angleSpace: 'model' | 'world' = 'model'\n ): FocusPosition {\n if (!this.model) return this.getFallbackFocusPosition();\n\n this.scene.updateMatrixWorld(true);\n const box = new THREE.Box3().setFromObject(this.model);\n if (box.isEmpty()) return this.getFallbackFocusPosition();\n\n return toFocusPosition(requireAnnotationCameraCore().solveFullBodyFraming({\n boxMin: box.min,\n boxMax: box.max,\n modelQuaternion: this.model.getWorldQuaternion(new THREE.Quaternion()),\n fovDegrees: this.camera.fov,\n aspect: this.camera.aspect,\n minDistance: this.config.minDistance,\n fullBodyPaddingFactor: this.config.fullBodyPaddingFactor,\n overridePadding,\n cameraAngle,\n angleSpace,\n }));\n }\n\n private refreshLaterality(): void {\n this.laterality = detectAnnotationLaterality(this.model, this.regions, boneResolutionProfile(this.characterConfig));\n }\n\n /** Resolver and paint continuations belong to one model/configuration load. */\n private isRegionLoadCurrent(request: number, model: THREE.Object3D | null): boolean {\n return !this.disposed && request === this.regionLoadGeneration && model === this.model;\n }\n\n /** Await Wasm once per request and abandon requests superseded during initialization. */\n private async beginCameraRequest(): Promise<number | null> {\n const request = ++this.cameraRequestGeneration;\n this.cancelCameraAnimation();\n if (this.disposed) return null;\n await getAnnotationCameraCore();\n return this.isCameraRequestCurrent(request) ? request : null;\n }\n\n private isCameraRequestCurrent(request: number): boolean {\n return !this.disposed && request === this.cameraRequestGeneration;\n }\n\n private cancelCameraAnimation(): void {\n this.timerAnimationFallbackToken += 1;\n const animation = this.pendingAnimation;\n this.pendingAnimation = null;\n if (animation) {\n animation.runtime.dispose();\n animation.resolve();\n }\n }\n\n private applyCameraPose(pose: CameraPose): void {\n this.camera.position.set(pose.position.x, pose.position.y, pose.position.z);\n this.controls.target.set(pose.target.x, pose.target.y, pose.target.z);\n }\n\n private runCameraAnimation(runtime: RustCameraAnimation): Promise<void> {\n this.cancelCameraAnimation();\n const initial = runtime.sample(0);\n this.applyCameraPose(initial);\n this.camera.lookAt(this.controls.target);\n this.controls.update();\n if (initial.done) {\n runtime.dispose();\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.pendingAnimation = { startTime: performance.now(), runtime, resolve };\n this.scheduleTimerAnimationFallback(() => this.pendingAnimation !== null);\n });\n }\n\n /** Sample the shared Rust flight from update(), alongside the renderer. */\n private animateCamera(\n targetPosition: THREE.Vector3,\n targetLookAt: THREE.Vector3,\n duration: number\n ): Promise<void> {\n return this.runCameraAnimation(requireAnnotationCameraCore().createCameraFlight(\n this.camera.position,\n this.controls.target,\n targetPosition,\n targetLookAt,\n duration,\n ));\n }\n}\n","import * as THREE from 'three';\nimport { DPthreeCameraController } from './DPthreeCameraController';\nimport { DPthree3DMarkers } from './DPthree3DMarkers';\nimport { DPthreeHTMLMarkers } from './DPthreeHTMLMarkers';\nimport { CameraDOMControls } from './DOMControls';\nimport type {\n CharacterConfig,\n DPthreeCameraControllerConfig,\n MarkerStyle,\n LineConfig,\n MarkerStyleOverrides,\n ExpandAnimation,\n ExpandedRegionState,\n} from './types';\n\n/**\n * DPthree Configuration\n */\nexport interface DPthreeConfig {\n /** Three.js scene */\n scene: THREE.Scene;\n /** Three.js camera */\n camera: THREE.PerspectiveCamera;\n /** Canvas or container element */\n domElement: HTMLElement;\n /** Marker style: '3d' (default) or 'html' */\n markerStyle?: MarkerStyle;\n /** Show DOM controls dropdown. Default: false */\n showControls?: boolean;\n /** Callback when a region is selected */\n onRegionSelect?: (name: string) => void;\n /** Camera controller options */\n cameraOptions?: Partial<DPthreeCameraControllerConfig>;\n}\n\n/**\n * DPthree - Camera & Marker System for Three.js\n *\n * Factory class that creates and manages camera controller and markers.\n *\n * @example\n * ```typescript\n * const dp = new DPthree({\n * scene,\n * camera,\n * domElement: canvas,\n * markerStyle: '3d',\n * });\n *\n * dp.setModel(model);\n * await dp.loadCharacter(config);\n * dp.focus('head');\n *\n * // In render loop\n * dp.update();\n * ```\n */\nexport class DPthree {\n private readonly cameraController: DPthreeCameraController;\n private markerStyle: MarkerStyle;\n private model: THREE.Object3D | null = null;\n\n constructor(options: DPthreeConfig) {\n this.markerStyle = options.markerStyle ?? '3d';\n this.cameraController = new DPthreeCameraController({\n scene: options.scene,\n camera: options.camera,\n domElement: options.domElement,\n showDOMControls: options.showControls ?? false,\n onRegionSelect: options.onRegionSelect,\n ...options.cameraOptions,\n });\n this.cameraController.setMarkersVisible(true);\n }\n\n setModel(model: THREE.Object3D): this {\n this.model = model;\n this.cameraController.setModel(model);\n return this;\n }\n\n async loadCharacter(config: CharacterConfig): Promise<this> {\n this.markerStyle = config.markerStyle ?? this.markerStyle;\n await this.cameraController.loadRegions({ ...config, markerStyle: this.markerStyle });\n return this;\n }\n\n focus(regionName: string, duration?: number): Promise<void> { return this.cameraController.focusRegion(regionName, duration); }\n getRegions(): string[] { return this.cameraController.getRegionNames(); }\n getCurrentRegion(): string | null { return this.cameraController.getCurrentRegion(); }\n setMarkerStyle(style: MarkerStyle): this { this.markerStyle = style; this.cameraController.setMarkerStyle(style); return this; }\n setMarkersVisible(visible: boolean): this { this.cameraController.setMarkersVisible(visible); return this; }\n setControlsVisible(visible: boolean): this { this.cameraController.setDOMControlsVisible(visible); return this; }\n getCameraState() { return this.cameraController.getCameraState(); }\n setCameraState(position: [number, number, number], target: [number, number, number], _animate?: boolean): this {\n this.cameraController.setCameraState({ position, target }); return this;\n }\n get controller(): DPthreeCameraController { return this.cameraController; }\n update(): void { this.cameraController.update(); }\n expandRegion(name: string, duration?: number): this { this.cameraController.expandRegion(name, duration); return this; }\n collapseRegion(name: string, duration?: number): this { this.cameraController.collapseRegion(name, duration); return this; }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): this { this.cameraController.toggleRegion(name, animation, duration); return this; }\n getExpandedRegions(): ExpandedRegionState[] { return this.cameraController.getExpandedRegions(); }\n soloMarker(name: string | null): this { this.cameraController.soloMarker(name); return this; }\n getSoloedMarker(): string | null { return this.cameraController.getSoloedMarker(); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): this { this.cameraController.setRegionLineStyle(name, line); return this; }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): this { this.cameraController.setRegionStyle(name, style); return this; }\n dispose(): void { this.cameraController.dispose(); this.model = null; }\n\n // ============ CHARACTER VALIDATION ============\n\n /**\n * Validate a loaded character model against expected bone/morph mappings\n * @param expectedBones - Map of semantic bone names to actual bone names\n * @param expectedMorphs - List of expected morph target names\n * @returns Validation result with found/missing bones and morphs\n */\n validateCharacter(\n expectedBones?: Record<string, string>,\n expectedMorphs?: string[]\n ): CharacterValidationResult {\n if (!this.model) {\n return {\n valid: false,\n bones: { found: [], missing: [], unexpected: [] },\n morphs: { found: [], missing: [], unexpected: [] },\n meshes: { found: [], total: 0 },\n summary: 'No model loaded',\n };\n }\n\n // Collect actual bones and morphs from model\n const actualBones: string[] = [];\n const actualMorphs: Map<string, string[]> = new Map(); // meshName -> morphNames\n const meshNames: string[] = [];\n\n this.model.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n actualBones.push(obj.name);\n }\n if ((obj as THREE.Mesh).isMesh) {\n const mesh = obj as THREE.Mesh;\n meshNames.push(mesh.name);\n if (mesh.morphTargetDictionary) {\n actualMorphs.set(mesh.name, Object.keys(mesh.morphTargetDictionary));\n }\n }\n });\n\n // Flatten morph names\n const allActualMorphs = new Set<string>();\n actualMorphs.forEach((morphs) => morphs.forEach((m) => allActualMorphs.add(m)));\n\n // Compare bones\n const boneResult: ValidationCategory = { found: [], missing: [], unexpected: [] };\n const expectedBoneNames = new Set(expectedBones ? Object.values(expectedBones) : []);\n const actualBoneSet = new Set(actualBones);\n\n if (expectedBones) {\n for (const [semantic, boneName] of Object.entries(expectedBones)) {\n if (actualBoneSet.has(boneName)) {\n boneResult.found.push({ name: boneName, semantic });\n } else {\n boneResult.missing.push({ name: boneName, semantic });\n }\n }\n }\n\n // Find unexpected bones (bones in model not in expected mapping)\n for (const bone of actualBones) {\n if (!expectedBoneNames.has(bone)) {\n boneResult.unexpected.push({ name: bone });\n }\n }\n\n // Compare morphs\n const morphResult: ValidationCategory = { found: [], missing: [], unexpected: [] };\n const expectedMorphSet = new Set(expectedMorphs || []);\n\n if (expectedMorphs) {\n for (const morphName of expectedMorphs) {\n if (allActualMorphs.has(morphName)) {\n morphResult.found.push({ name: morphName });\n } else {\n morphResult.missing.push({ name: morphName });\n }\n }\n }\n\n // Find unexpected morphs\n for (const morph of allActualMorphs) {\n if (!expectedMorphSet.has(morph)) {\n morphResult.unexpected.push({ name: morph });\n }\n }\n\n // Calculate validity\n const bonesValid = boneResult.missing.length === 0;\n const morphsValid = morphResult.missing.length === 0;\n const valid = bonesValid && morphsValid;\n\n // Generate summary\n const summaryParts: string[] = [];\n if (boneResult.missing.length > 0) {\n summaryParts.push(`${boneResult.missing.length} missing bones`);\n }\n if (morphResult.missing.length > 0) {\n summaryParts.push(`${morphResult.missing.length} missing morphs`);\n }\n if (boneResult.unexpected.length > 0) {\n summaryParts.push(`${boneResult.unexpected.length} extra bones`);\n }\n if (morphResult.unexpected.length > 0) {\n summaryParts.push(`${morphResult.unexpected.length} extra morphs`);\n }\n\n const summary = valid\n ? `Valid: ${boneResult.found.length} bones, ${morphResult.found.length} morphs`\n : summaryParts.join(', ');\n\n return {\n valid,\n bones: boneResult,\n morphs: morphResult,\n meshes: { found: meshNames, total: meshNames.length },\n summary,\n };\n }\n\n /**\n * Get all bone names in the loaded model\n */\n getBoneNames(): string[] {\n const bones: string[] = [];\n this.model?.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n bones.push(obj.name);\n }\n });\n return bones;\n }\n\n /**\n * Get all morph target names in the loaded model\n */\n getMorphNames(): string[] {\n const morphs = new Set<string>();\n this.model?.traverse((obj) => {\n if ((obj as THREE.Mesh).isMesh) {\n const mesh = obj as THREE.Mesh;\n if (mesh.morphTargetDictionary) {\n Object.keys(mesh.morphTargetDictionary).forEach((m) => morphs.add(m));\n }\n }\n });\n return Array.from(morphs);\n }\n\n /**\n * Get all mesh names in the loaded model\n */\n getMeshNames(): string[] {\n const meshes: string[] = [];\n this.model?.traverse((obj) => {\n if ((obj as THREE.Mesh).isMesh) {\n meshes.push(obj.name);\n }\n });\n return meshes;\n }\n}\n\n// ============ VALIDATION TYPES ============\n\nexport interface ValidationItem {\n name: string;\n semantic?: string;\n}\n\nexport interface ValidationCategory {\n found: ValidationItem[];\n missing: ValidationItem[];\n unexpected: ValidationItem[];\n}\n\nexport interface CharacterValidationResult {\n valid: boolean;\n bones: ValidationCategory;\n morphs: ValidationCategory;\n meshes: { found: string[]; total: number };\n summary: string;\n}\n\n// Re-export for convenience\nexport { DPthreeCameraController as CameraController } from './DPthreeCameraController';\nexport { DPthree3DMarkers as Markers3D } from './DPthree3DMarkers';\nexport { DPthreeHTMLMarkers as MarkersHTML } from './DPthreeHTMLMarkers';\nexport { CameraDOMControls as Controls } from './DOMControls';\n","import { boneResolutionProfile } from './boneResolutionProfile';\nimport * as THREE from 'three';\nimport { fuzzyNameMatch, passesMarkerCameraAngleGate, resolveBoneNames } from './adapter';\nimport type { Region, CharacterConfig } from './types';\n\n/**\n * 3D visual markers for regions that can be clicked\n */\nexport class DPthreeMarkers {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private domElement: HTMLElement;\n private markers: Map<string, THREE.Sprite> = new Map();\n private labels: Map<string, HTMLDivElement> = new Map();\n private labelsContainer: HTMLDivElement;\n private raycaster: THREE.Raycaster;\n private onSelect: (name: string) => void;\n private model: THREE.Object3D | null = null;\n private regions: Region[] = [];\n private characterConfig: CharacterConfig | null = null;\n private currentRegion: string | null = null;\n\n constructor(config: {\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n domElement: HTMLElement;\n onSelect: (name: string) => void;\n }) {\n this.scene = config.scene;\n this.camera = config.camera;\n this.domElement = config.domElement;\n this.onSelect = config.onSelect;\n this.raycaster = new THREE.Raycaster();\n\n // Create container for HTML labels\n this.labelsContainer = document.createElement('div');\n this.labelsContainer.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: hidden;\n `;\n\n // Find parent with relative positioning or the canvas parent\n const parent = this.domElement.parentElement;\n if (parent) {\n const style = window.getComputedStyle(parent);\n if (style.position === 'static') {\n parent.style.position = 'relative';\n }\n parent.appendChild(this.labelsContainer);\n }\n\n // Add click handler\n this.domElement.addEventListener('click', this.onClick);\n }\n\n setModel(model: THREE.Object3D): void {\n this.model = model;\n }\n\n loadRegions(config: CharacterConfig): void {\n this.clear();\n this.characterConfig = config;\n this.regions = config.regions ?? [];\n\n for (const region of (config.regions ?? [])) {\n this.createMarker(region);\n }\n }\n\n setCurrentRegion(name: string | null): void {\n this.currentRegion = name;\n this.updateMarkerStyles();\n }\n\n private createMarker(region: Region): void {\n if (!this.model) return;\n\n // Calculate center position for this annotation\n const position = this.getRegionCenter(region);\n if (!position) return;\n\n // Create HTML label (more reliable than sprites for clicking)\n const label = document.createElement('div');\n label.className = 'annotation-marker';\n label.dataset.annotation = region.name;\n label.innerHTML = `\n <div class=\"marker-dot\"></div>\n <div class=\"marker-label\">${this.formatName(region.name)}</div>\n `;\n label.style.cssText = `\n position: absolute;\n transform: translate(-50%, -50%);\n pointer-events: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n background: rgba(0, 0, 0, 0.6);\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n transition: all 0.2s ease;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 11px;\n color: white;\n white-space: nowrap;\n z-index: 100;\n `;\n\n // Style the dot\n const dot = label.querySelector('.marker-dot') as HTMLElement;\n if (dot) {\n dot.style.cssText = `\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #4299e1;\n box-shadow: 0 0 6px #4299e1;\n `;\n }\n\n // Add hover effect\n label.addEventListener('mouseenter', () => {\n label.style.background = 'rgba(66, 153, 225, 0.8)';\n label.style.borderColor = '#4299e1';\n });\n label.addEventListener('mouseleave', () => {\n if (this.currentRegion !== region.name) {\n label.style.background = 'rgba(0, 0, 0, 0.6)';\n label.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n }\n });\n\n // Add click handler\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.onSelect(region.name);\n });\n\n this.labelsContainer.appendChild(label);\n this.labels.set(region.name, label);\n\n // Store position for updates\n (label as any).__position = position.clone();\n }\n\n private getRegionCenter(region: Region): THREE.Vector3 | null {\n if (!this.model) return null;\n\n const box = new THREE.Box3();\n let hasObjects = false;\n\n // Handle '*' for full model\n if (region.objects?.includes('*')) {\n box.expandByObject(this.model);\n hasObjects = true;\n } else {\n // Find bones\n if (region.bones) {\n const resolvedBoneNames = resolveBoneNames(region.bones, boneResolutionProfile(this.characterConfig) ?? undefined);\n for (const boneName of resolvedBoneNames) {\n this.model.traverse((obj) => {\n if (fuzzyNameMatch(obj.name, boneName, this.characterConfig?.suffixPattern)) {\n const worldPos = new THREE.Vector3();\n obj.getWorldPosition(worldPos);\n box.expandByPoint(worldPos);\n hasObjects = true;\n }\n });\n }\n }\n\n // Find meshes - Note: For skinned meshes, prefer also specifying bones\n // for accurate marker positioning since mesh world position may be at origin\n if (region.meshes) {\n for (const meshName of region.meshes) {\n this.model.traverse((obj) => {\n if (obj.name === meshName && (obj as THREE.Mesh).isMesh) {\n box.expandByObject(obj);\n hasObjects = true;\n }\n });\n }\n }\n }\n\n if (!hasObjects || box.isEmpty()) return null;\n\n const center = new THREE.Vector3();\n box.getCenter(center);\n\n // If annotation has a cameraAngle, offset the marker position to that side of the model\n // This makes markers appear on the appropriate surface (e.g., back marker on the back)\n if (region.cameraAngle !== undefined && region.cameraAngle !== 0) {\n // Get the model's bounding box to determine offset distance\n const modelBox = new THREE.Box3().setFromObject(this.model);\n const modelSize = new THREE.Vector3();\n modelBox.getSize(modelSize);\n\n // Use half the depth (z-axis) as the offset distance\n const offsetDistance = modelSize.z * 0.5;\n\n // Calculate offset direction based on camera angle\n const angleRad = (region.cameraAngle * Math.PI) / 180;\n center.x += Math.sin(angleRad) * offsetDistance;\n center.z -= Math.cos(angleRad) * offsetDistance;\n }\n\n return center;\n }\n\n private formatName(name: string): string {\n return name\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n\n private updateMarkerStyles(): void {\n for (const [name, label] of this.labels) {\n if (name === this.currentRegion) {\n label.style.background = 'rgba(66, 153, 225, 0.8)';\n label.style.borderColor = '#4299e1';\n } else {\n label.style.background = 'rgba(0, 0, 0, 0.6)';\n label.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n }\n }\n }\n\n private onClick = (event: MouseEvent): void => {\n // This handles clicks on the 3D canvas that might hit markers\n // The HTML labels handle their own clicks\n };\n\n /**\n * Update label positions - call this in render loop\n *\n * Occlusion: Uses efficient dot product check - if marker is on opposite side\n * of model from camera (dot product < 0), hide it. O(1) per marker.\n */\n update(): void {\n if (!this.model) return;\n\n const rect = this.domElement.getBoundingClientRect();\n\n // Calculate camera's viewing angle around the model (in degrees)\n // This tells us if we're looking from front (0°), back (180°), etc.\n const modelCenter = new THREE.Vector3();\n new THREE.Box3().setFromObject(this.model).getCenter(modelCenter);\n\n // Camera direction from model center (for dot product occlusion)\n const dx = this.camera.position.x - modelCenter.x;\n const dy = this.camera.position.y - modelCenter.y;\n const dz = this.camera.position.z - modelCenter.z;\n const cameraDistance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n const cameraDirX = dx / cameraDistance;\n const cameraDirY = dy / cameraDistance;\n const cameraDirZ = dz / cameraDistance;\n\n const cameraAngle = Math.atan2(dx, dz) * (180 / Math.PI);\n\n // First pass: calculate positions and visibility\n const visibleLabels: Array<{ name: string; label: HTMLDivElement; x: number; y: number }> = [];\n\n for (const [name, label] of this.labels) {\n const position = (label as any).__position as THREE.Vector3;\n if (!position) continue;\n\n // Update position based on current model transform\n const region = this.regions.find(a => a.name === name);\n if (region) {\n const newPos = this.getRegionCenter(region);\n if (newPos) {\n position.copy(newPos);\n }\n }\n\n // Project to screen space\n const screenPos = position.clone().project(this.camera);\n\n // Check if in front of camera\n if (screenPos.z > 1) {\n label.style.display = 'none';\n continue;\n }\n\n let visible = true;\n\n // For markers with a cameraAngle, only show when camera is viewing from approximately that angle\n // This ensures \"back\" marker only shows when viewing from behind\n if (region?.cameraAngle !== undefined && region.cameraAngle !== 0) {\n visible = passesMarkerCameraAngleGate({\n markerAngle: region.cameraAngle,\n currentCameraAngle: cameraAngle,\n });\n } else {\n // Dot product occlusion for front-facing markers\n const markerDirX = position.x - modelCenter.x;\n const markerDirY = position.y - modelCenter.y;\n const markerDirZ = position.z - modelCenter.z;\n\n // Dot product: positive = same side as camera, negative = opposite side\n const dot = markerDirX * cameraDirX + markerDirY * cameraDirY + markerDirZ * cameraDirZ;\n visible = dot > -0.01;\n }\n\n if (!visible) {\n label.style.display = 'none';\n continue;\n }\n\n label.style.display = 'flex';\n\n // Convert to CSS coordinates\n const x = (screenPos.x * 0.5 + 0.5) * rect.width;\n const y = (-screenPos.y * 0.5 + 0.5) * rect.height;\n\n visibleLabels.push({ name, label, x, y });\n }\n\n // Second pass: spread overlapping labels vertically and horizontally\n const labelHeight = 24; // Approximate label height\n const labelWidth = 80; // Approximate label width\n const minVerticalGap = 8;\n const minHorizontalGap = 10;\n\n // Sort by Y position (top to bottom) then by X (left to right)\n visibleLabels.sort((a, b) => a.y - b.y || a.x - b.x);\n\n // Check for overlaps and spread labels apart\n for (let i = 0; i < visibleLabels.length; i++) {\n for (let j = i + 1; j < visibleLabels.length; j++) {\n const a = visibleLabels[i];\n const b = visibleLabels[j];\n\n const dx = Math.abs(a.x - b.x);\n const dy = Math.abs(a.y - b.y);\n\n // Check if labels overlap (within bounding box)\n if (dx < labelWidth && dy < labelHeight + minVerticalGap) {\n // Labels overlap - spread them apart\n const overlapY = (labelHeight + minVerticalGap) - dy;\n const overlapX = (labelWidth + minHorizontalGap) - dx;\n\n // Prefer vertical spreading, but also spread horizontally if needed\n if (overlapY > 0) {\n // Spread vertically: move upper label up, lower label down\n const spreadY = overlapY / 2 + minVerticalGap;\n if (a.y < b.y) {\n a.y -= spreadY;\n b.y += spreadY;\n } else {\n a.y += spreadY;\n b.y -= spreadY;\n }\n }\n\n // If still horizontally close, also spread horizontally\n if (dx < labelWidth * 0.5 && overlapX > 0) {\n const spreadX = overlapX / 2 + minHorizontalGap;\n if (a.x < b.x) {\n a.x -= spreadX * 0.3;\n b.x += spreadX * 0.3;\n } else {\n a.x += spreadX * 0.3;\n b.x -= spreadX * 0.3;\n }\n }\n }\n }\n }\n\n // Apply final positions\n for (const { label, x, y } of visibleLabels) {\n label.style.left = `${x}px`;\n label.style.top = `${y}px`;\n }\n }\n\n /**\n * Show/hide all markers\n */\n setVisible(visible: boolean): void {\n this.labelsContainer.style.display = visible ? 'block' : 'none';\n }\n\n /**\n * Clear all markers\n */\n clear(): void {\n for (const label of this.labels.values()) {\n label.remove();\n }\n this.labels.clear();\n this.markers.clear();\n }\n\n /**\n * Dispose and cleanup\n */\n dispose(): void {\n this.domElement.removeEventListener('click', this.onClick);\n this.clear();\n this.labelsContainer.remove();\n }\n}\n","import type { DPthreeCameraController } from './DPthreeCameraController';\nimport type { MarkerStyle } from './types';\n\nexport const DEFAULT_MARKER_AUTO_HIDE_MS = 5_000;\nconst INTRO_MARKER_REVEAL_DELAY_MS = 4_500;\nconst POST_LOAD_MARKER_REVEAL_DELAY_MS = 120;\n\nexport type MarkerLifecycleRevealOptions = {\n durationMs?: number;\n markerStyle?: MarkerStyle;\n revealDelayMs?: number;\n};\n\nexport type MarkerLifecycleRevealSource = {\n markerStyle?: MarkerStyle;\n playIntroOnLoad?: boolean;\n};\n\ntype MarkerLifecycleController = Pick<DPthreeCameraController, 'setMarkersVisible' | 'setMarkerStyle'>;\n\nexport function createMarkerLifecycleRevealOptions(\n config: MarkerLifecycleRevealSource | null | undefined,\n): MarkerLifecycleRevealOptions {\n return {\n markerStyle: config?.markerStyle ?? '3d',\n revealDelayMs: config?.playIntroOnLoad ? INTRO_MARKER_REVEAL_DELAY_MS : POST_LOAD_MARKER_REVEAL_DELAY_MS,\n };\n}\n\nexport function createMarkerVisibilityLifecycle(\n getController: () => MarkerLifecycleController | null,\n defaultDurationMs = DEFAULT_MARKER_AUTO_HIDE_MS,\n) {\n let revealTimer: ReturnType<typeof setTimeout> | null = null;\n let autoHideTimer: ReturnType<typeof setTimeout> | null = null;\n\n const clearTimers = () => {\n if (revealTimer) {\n clearTimeout(revealTimer);\n revealTimer = null;\n }\n\n if (autoHideTimer) {\n clearTimeout(autoHideTimer);\n autoHideTimer = null;\n }\n };\n\n return {\n setManualVisibility(visible: boolean): void {\n clearTimers();\n getController()?.setMarkersVisible(visible);\n },\n\n prepareForCharacterLoad(): void {\n clearTimers();\n getController()?.setMarkersVisible(false);\n },\n\n showForCharacterLoad(options: MarkerLifecycleRevealOptions = {}): void {\n clearTimers();\n\n const controller = getController();\n if (!controller) return;\n\n const reveal = () => {\n revealTimer = null;\n\n if (getController() !== controller) {\n return;\n }\n\n controller.setMarkerStyle(options.markerStyle ?? '3d');\n controller.setMarkersVisible(true);\n\n autoHideTimer = setTimeout(() => {\n autoHideTimer = null;\n\n if (getController() !== controller) {\n return;\n }\n\n controller.setMarkersVisible(false);\n }, options.durationMs ?? defaultDurationMs);\n };\n\n if (options.revealDelayMs && options.revealDelayMs > 0) {\n revealTimer = setTimeout(reveal, options.revealDelayMs);\n return;\n }\n\n reveal();\n },\n\n dispose(): void {\n clearTimers();\n },\n };\n}\n","export const DEFAULT_PREVIEW_AUTO_CLEAR_MS = 1200;\n\nexport interface RuntimeAnnotationPreviewLifecycleOptions {\n getDisabled?: () => boolean;\n getAutoClearMs?: () => number | undefined;\n onPreviewStart?: () => void;\n onPreviewEnd?: () => void;\n}\n\n/** Framework-independent annotation preview lifetime; hosts supply input events. */\nexport function createRuntimeAnnotationPreviewLifecycle(options: RuntimeAnnotationPreviewLifecycleOptions) {\n let active = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const clearTimer = () => { if (timer !== null) clearTimeout(timer); timer = null; };\n const end = () => {\n clearTimer();\n if (!active) return;\n active = false;\n options.onPreviewEnd?.();\n };\n const scheduleEnd = () => {\n clearTimer();\n const duration = options.getAutoClearMs?.() ?? DEFAULT_PREVIEW_AUTO_CLEAR_MS;\n if (duration <= 0 || !active) return;\n timer = setTimeout(end, duration);\n };\n return {\n start(forceRefresh = false) {\n if (options.getDisabled?.()) return;\n const wasActive = active;\n active = true;\n if (!wasActive || forceRefresh) options.onPreviewStart?.();\n scheduleEnd();\n },\n end,\n scheduleEnd,\n isActive: () => active,\n dispose: end,\n };\n}\n","import type { RuntimeAnnotationSide } from './types';\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => typeof entry === 'string' && entry.trim() ? [entry.trim()] : []);\n}\n\nfunction inferSideFromText(value: string): RuntimeAnnotationSide | undefined {\n const normalized = value\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase();\n const tokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);\n const hasLeft = tokens.includes('left') || tokens.includes('l');\n const hasRight = tokens.includes('right') || tokens.includes('r');\n\n if (hasLeft === hasRight) return undefined;\n return hasLeft ? 'left' : 'right';\n}\n\nfunction addSide(sides: Set<RuntimeAnnotationSide>, side: unknown): void {\n if (side === 'left' || side === 'right' || side === 'center') {\n sides.add(side);\n }\n}\n\nexport function inferRuntimeAnnotationPreviewSide(\n auId: number,\n profile: { auToMorphs?: unknown; auToBones?: unknown } | null | undefined,\n): RuntimeAnnotationSide | undefined {\n if (!profile) return undefined;\n\n const auKey = String(auId);\n const sides = new Set<RuntimeAnnotationSide>();\n const profileRecord = profile as unknown as Record<string, unknown>;\n const auToMorphs = isPlainRecord(profileRecord.auToMorphs) ? profileRecord.auToMorphs : {};\n const auToBones = isPlainRecord(profileRecord.auToBones) ? profileRecord.auToBones : {};\n const morphMapping = auToMorphs[auKey];\n\n if (isPlainRecord(morphMapping)) {\n if (readStringArray(morphMapping.left).length > 0) sides.add('left');\n if (readStringArray(morphMapping.right).length > 0) sides.add('right');\n if (readStringArray(morphMapping.center).length > 0) sides.add('center');\n } else {\n for (const morphName of readStringArray(morphMapping)) {\n addSide(sides, inferSideFromText(morphName));\n }\n }\n\n const boneBindings = auToBones[auKey];\n if (Array.isArray(boneBindings)) {\n for (const binding of boneBindings) {\n if (typeof binding === 'string') {\n addSide(sides, inferSideFromText(binding));\n } else if (isPlainRecord(binding)) {\n addSide(sides, binding.side);\n const name = binding.node ?? binding.boneName ?? binding.bone ?? binding.name;\n if (typeof name === 'string') {\n addSide(sides, inferSideFromText(name));\n }\n }\n }\n }\n\n const lateralSides = [...sides].filter((side) => side === 'left' || side === 'right');\n if (lateralSides.length === 1) return lateralSides[0];\n if (lateralSides.length > 1) return undefined;\n return sides.has('center') ? 'center' : undefined;\n}\n\n/**\n * Pick which continuum AU to annotate. While a drag gesture is sticky, keep\n * the original side so crossing 0 does not rebuild runtime markers mid-drag.\n */\nexport function pickContinuumAnnotationAuId(\n value: number,\n negId: number,\n posId: number,\n stickyId: number | null,\n): number {\n if (stickyId === negId || stickyId === posId) {\n return stickyId;\n }\n if (value < 0) return negId;\n if (value > 0) return posId;\n return negId;\n}\n","import type { AnimationClip, Mesh, Object3D } from 'three';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { requireInitializedEmbodyCore, CC4_HUMANOID_SKELETON_TEMPLATE, HUMANOID_SKELETON_TEMPLATES, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport { ThreeModelInspector, serializeAnimationClips } from './index';\nimport type { Region } from './annotations/types';\nimport type * as Types from './authoringTypes';\n\nexport * from './authoringTypes';\nexport { resolveBoneNames, fuzzyNameMatch } from './annotations/adapter';\nexport {\n DEFAULT_AXIS_TO_CHANNEL, DEFAULT_BONE_MAX_DEGREES, JOINT_CONTROL_SECTION,\n VISEME_KEYS, HAIR_COLOR_PRESETS, DEFAULT_HAIR_COLOR_APPEARANCE, getAUDescriptors, LEGACY_BODY_CONTROL_AUS,\n HUMANOID_SKELETON_TEMPLATES, CC4_HUMANOID_SKELETON_TEMPLATE,\n} from '@lovelace_lol/embody/wasm';\n\nconst json = (value: unknown) => JSON.stringify(value ?? {});\nfunction request<T>(op: string, payload: unknown = {}): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(json({ op, payload }))) as T;\n}\n\nexport const getPreset = (id: Types.PresetType): Types.Profile => request('preset.get', { id });\nexport const extendCharacterConfigWithPreset = <T extends Types.ProfileRuntimeConfig>(config: T): T => request('profile.extendConfig', { config });\nexport const extractProfileOverrides = (config: Types.ProfileRuntimeConfig): Partial<Types.Profile> => request('profile.extractOverrides', { config });\nexport const mergeCharacterRegionsByName = (base?: Region[], override?: Region[]): Region[] => request('profile.mergeRegions', { base, override });\nexport const getMeshNamesForAUProfile = (profile: Types.Profile, auId: number): string[] => request('profile.getMeshNamesForAU', { profile, auId });\nexport const getHumanoidSpecification = (): Types.HumanoidSpecification => request('humanoid.getSpecification');\nexport const setAUMorphTargets = (profile: Types.Profile, auId: number, side: 'left' | 'right' | 'center', targets: Types.MorphTargetRef[]): Types.Profile => request('profile.setAUMorphTargets', { profile, auId, side, targets });\nexport const setHumanoidRoleBinding = (profile: Types.Profile, role: Types.VRMHumanoidRole, boneName: string | null): Types.Profile => request('profile.setHumanoidRoleBinding', { profile, role, boneName });\nexport const resolveHumanoidCharacterization = (profile: Types.Profile): Types.HumanoidCharacterizationResolution => request('profile.resolveHumanoidCharacterization', { profile });\n\nexport const hasLeftRightMorphs = (profile: Types.Profile, auId: number): boolean => request('profile.hasLeftRightMorphs', { profile, auId });\nexport const isMixedAU = (profile: Types.Profile, auId: number): boolean => request('profile.isMixedAU', { profile, auId });\nexport const resolveVisemeProfile = (profile: Partial<Types.Profile>): Types.ResolvedVisemeProfile => request('profile.resolveVisemes', { profile });\n\nexport const isMaxDegreesOnlyAxisBindingUpdate = (update: Types.BoneAxisBindingUpdate): boolean => request('bone.isMaxDegreesOnlyUpdate', { update });\nexport const findNodeKeyForBone = (boneName: string, profile: Types.Profile | null): string | null => profile ? request('bone.findNodeKey', { profile, boneName }) : null;\nexport const ensureBoneNodeKey = (profile: Types.Profile, boneName: string): { nodeKey: string; boneNodes: Record<string, string> } => request('bone.ensureNodeKey', { profile, boneName });\nexport const ensureBilateralBoneNodeKeys = (profile: Types.Profile, leftBoneName: string, rightBoneName: string): Types.Profile => request('bone.ensureBilateralNodeKeys', { profile, leftBoneName, rightBoneName });\nexport const resolveBoneNameForNodeKey = (profile: Types.Profile, nodeKey: string): string | null => request('bone.resolveBoneName', { profile, nodeKey });\nexport const stripConfiguredBoneAffixes = (profile: Pick<Types.Profile, 'bonePrefix' | 'boneSuffix'> | null | undefined, boneName: string): string => request('bone.stripAffixes', { profile: profile ?? {}, boneName });\nexport const inferChiralBoneNamePair = (boneNames: string[], selectedBoneName: string): Types.ChiralBoneNamePair | null => request('bone.inferChiralPair', { boneNames, selectedBoneName });\nexport const formatAxisLabel = (axis: Types.BoneAxisKey): string => request('bone.formatAxisLabel', { axis });\nexport const formatAxisDirectionLabel = (axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection): string => request('bone.formatDirectionLabel', { axis, direction });\nexport const getAxisFromChannel = (channel?: string): Types.BoneAxisKey | null => channel ? request('bone.getAxisFromChannel', { channel }) : null;\nexport const getBoneAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BoneAxisBindingState | null => request('bone.getAxisState', { profile, boneName, axis });\nexport const resolveBoneAxisChannel = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.RotationChannel => request('bone.resolveAxisChannel', { profile, boneName, axis });\nexport const getBilateralAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BilateralAxisBindingState | null => request('bone.getBilateralAxisState', { profile, boneName, axis });\nexport const getAUBoneBindingState = (profile: Types.Profile, auId: number): Types.AUBoneBindingState => request('bone.getAUBindingState', { profile, auId });\nexport const inferEyeControlScope = (profile: Pick<Types.Profile, 'auToBones'>, binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'negativeAuId' | 'positiveAuId'>): Types.BoneControlScope | null => request('bone.inferEyeScope', { profile, binding });\nexport const inferEyeControlFamily = (binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'axis'>): Types.BoneControlFamily | null => request('bone.inferEyeFamily', { binding });\nexport const applyBoneAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyAxisUpdate', { profile, boneName, axis, update });\nexport const applyBilateralAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyBilateralAxisUpdate', { profile, boneName, axis, scope, update });\nexport const applyAUBoneBindingUpdate = (profile: Types.Profile, auId: number, update: { boneName: string | null; axis: Types.BoneAxisKey; direction: Types.BoneAxisDirection; maxDegrees: number | null }): Types.Profile => request('bone.applyAUBindingUpdate', { profile, auId, update });\nexport const createBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createAxisAU', { profile, boneName, axis, direction, name: options.name });\nexport const createBilateralBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createBilateralAxisAU', { profile, boneName, axis, scope, direction, name: options.name });\nexport const buildBoneAuOptions = (profile: Types.Profile): Array<{ value: string; label: string; detail?: string }> => request('bone.buildAUOptions', { profile });\nexport const isJointControlAuInfo = (info?: Pick<Types.AUInfo, 'facePart'> | null): boolean => request('bone.isJointControlInfo', { info });\nexport const classifyAuAsJointControl = (profile: Types.Profile, auId: number, options: { boneName?: string | null; nodeKey?: string | null } = {}): Types.Profile => request('bone.classifyJointControl', { profile, auId, boneName: options.boneName, nodeKey: options.nodeKey });\nexport const resolveContinuumDisplayLabel = (profile: Pick<Types.Profile, 'continuumPairs' | 'continuumLabels' | 'auInfo' | 'boneNodes' | 'bonePrefix' | 'boneSuffix'>, negativeAuId: number, positiveAuId: number): string => request<string | null>('bone.resolveContinuumLabel', { profile, negativeAuId, positiveAuId }) ?? `AU ${negativeAuId} <-> AU ${positiveAuId}`;\n\nfunction inspectModel(model: Object3D, meshes?: Mesh[], profile?: Types.Profile) {\n return new ThreeModelInspector().inspectModel(model, { meshes, profile });\n}\n\nexport function extractModelData(model: Object3D, meshes?: Mesh[], animations: AnimationClip[] = []): Types.ModelData {\n const inspection = inspectModel(model, meshes);\n return JSON.parse(requireInitializedEmbodyCore().extract_model_data_json(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection))));\n}\nexport async function analyzeModel(options: {\n source: { type: 'gltf'; gltf: GLTF } | { type: 'runtime'; model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[] };\n preset?: Types.Profile; suggestCorrections?: boolean;\n}): Promise<Types.ModelAnalysisReport> {\n const source = options.source;\n const model = source.type === 'gltf' ? source.gltf.scene ?? source.gltf.scenes[0] : source.model;\n const animations = source.type === 'gltf' ? source.gltf.animations : source.animations ?? [];\n const inspection = inspectModel(model, source.type === 'runtime' ? source.meshes : undefined);\n return JSON.parse(requireInitializedEmbodyCore().analyze_model_descriptor(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection)), options.preset ? json(options.preset) : '', json({ suggestCorrections: Boolean(options.suggestCorrections) })));\n}\ntype ValidationMesh = { name?: string; morphTargetDictionary?: Record<string, number>; geometry?: { morphTargetDictionary?: Record<string, number> } };\nexport function validateMappings(meshes: unknown[], skeleton: unknown, profile: Partial<Types.Profile>, options: Record<string, unknown> = {}): Types.ValidationResult {\n let nextMorphId = 1;\n const morphTargets: Array<{ id: number; meshId: number; name: string; hostIndex: number }> = [];\n const descriptorMeshes = (meshes ?? []).map((value, index) => {\n const mesh = value as ValidationMesh;\n const id = index + 1;\n const morphTargetIds = Object.entries(mesh.morphTargetDictionary ?? mesh.geometry?.morphTargetDictionary ?? {}).map(([name, hostIndex]) => {\n const morphId = nextMorphId++;\n morphTargets.push({ id: morphId, meshId: id, name, hostIndex });\n return morphId;\n });\n return { id, name: mesh.name ?? '', morphTargetIds, visible: true };\n });\n const bones = ((skeleton as { bones?: Array<string | { name?: string }> } | null)?.bones ?? []).map((bone, index) => ({ id: index + 1, name: typeof bone === 'string' ? bone : bone.name ?? '' }));\n return JSON.parse(requireInitializedEmbodyCore().validate_profile_model(json(profile), json({ meshes: descriptorMeshes, morphTargets, bones, objects: [] }), json(options)));\n}\nexport function validateHumanoidCharacterization(model: Object3D, profile: Types.Profile): Types.HumanoidCharacterizationResolution {\n return JSON.parse(requireInitializedEmbodyCore().validate_humanoid_characterization(json(profile), json(inspectModel(model, undefined, profile).descriptor)));\n}\nexport function normalizeHairColorAppearance(value: Types.HairColorAppearance | string, fallback: Types.HairColorAppearance = DEFAULT_HAIR_COLOR_APPEARANCE): Types.HairColorAppearance {\n return JSON.parse(requireInitializedEmbodyCore().normalize_hair_color_appearance_json(json(value), json(fallback)));\n}\nexport const getHumanoidSkeletonTemplate = (id: string): Types.HumanoidSkeletonTemplate | null => (HUMANOID_SKELETON_TEMPLATES.find(template => template.id === id) ?? null) as unknown as Types.HumanoidSkeletonTemplate | null;\nexport function getHumanoidSkeletonTemplateBoneNames(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): string[] {\n return JSON.parse(requireInitializedEmbodyCore().humanoid_skeleton_template_bone_names(json(template)));\n}\nexport function createValidationSkeletonFromHumanoidTemplate(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): { bones: Array<{ name: string }> } {\n return JSON.parse(requireInitializedEmbodyCore().create_validation_skeleton_json(json(template)));\n}\nexport function computeHumanoidSkeletonTemplateRestBounds(template: Types.HumanoidSkeletonTemplate): Types.HumanoidSkeletonTemplateBounds {\n return Array.from(requireInitializedEmbodyCore().compute_humanoid_skeleton_template_rest_bounds(json(template))) as unknown as Types.HumanoidSkeletonTemplateBounds;\n}\nexport function extractHumanoidSkeletonTemplateFromModel(model: Object3D, options: { id: string; sourceCharacterId: string; sourceAsset?: string; sourceSkinName?: string }): Types.HumanoidSkeletonTemplate {\n return JSON.parse(requireInitializedEmbodyCore().extract_humanoid_skeleton_template_json(json(inspectModel(model).descriptor), json(options)));\n}\n\nexport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\n","import { Matrix4, Quaternion, Vector3 } from 'three';\nimport type { Object3D } from 'three';\n\ntype ReferenceVector3 = Readonly<{ x: number; y: number; z: number }>;\ntype ReferenceQuaternion = Readonly<{ x: number; y: number; z: number; w: number }>;\n\nexport type ThreeReferencePoseNode = Readonly<{\n /** Child-index path relative to the captured model. The model itself has path ''. */\n path: string;\n parentPath: string | null;\n name: string;\n type: string;\n isBone: boolean;\n rotationOrder: Object3D['rotation']['order'];\n /** Authored Euler values for automatic TRS, including rotations beyond one turn. */\n rotationEuler?: ReferenceVector3;\n childCount: number;\n /** For manual matrices, this is a decomposition; matrices remain authoritative for shear. */\n transform: Readonly<{\n position: ReferenceVector3;\n rotation: ReferenceQuaternion;\n scale: ReferenceVector3;\n }>;\n /** Column-major local and world matrices, including shear and non-bone ancestors. */\n localMatrix: readonly number[];\n worldMatrix: readonly number[];\n worldPosition: ReferenceVector3;\n /** Optional morph baseline captured independently from later live influences. */\n morphInfluences?: readonly number[];\n}>;\n\nexport type ThreeModelReferencePose = Readonly<{\n version: 1;\n /** Captured transform above the model root; identity for an unparented model. */\n parentWorldMatrix: readonly number[];\n nodes: readonly ThreeReferencePoseNode[];\n}>;\n\nconst isBone = (object: Object3D) => !!((object as Object3D & { isBone?: boolean }).isBone || object.type === 'Bone');\n\nconst finite = (values: readonly number[], description: string) => {\n if (!values.every(Number.isFinite)) {\n throw new Error(`Cannot capture reference pose: ${description} contains non-finite values`);\n }\n};\n\nconst matrixValues = (matrix: Matrix4, description: string): readonly number[] => {\n const values = matrix.elements.slice();\n finite(values, description);\n return Object.freeze(values);\n};\n\nconst localMatrix = (object: Object3D) => object.matrixAutoUpdate\n ? new Matrix4().compose(object.position, object.quaternion, object.scale)\n : object.matrix.clone();\n\nconst referenceTransform = (object: Object3D, matrix: Matrix4): ThreeReferencePoseNode['transform'] => {\n // Manual matrices can contain shear that TRS cannot represent exactly. Retain the\n // original matrix independently and expose a decomposition only for TRS consumers.\n const position = object.matrixAutoUpdate ? object.position : new Vector3();\n const rotation = object.matrixAutoUpdate ? object.quaternion : new Quaternion();\n const scale = object.matrixAutoUpdate ? object.scale : new Vector3();\n if (!object.matrixAutoUpdate) {\n // r184 substitutes identity TRS for singular matrices. Keep rejecting a\n // missing basis axis instead of inventing its authored rotation and scale.\n const elements = matrix.elements;\n if ([0, 4, 8].some((start) => Math.hypot(elements[start], elements[start + 1], elements[start + 2]) === 0)) {\n throw new Error(`Cannot capture reference pose: manual transform for ${JSON.stringify(object.name)} has a zero-length basis axis`);\n }\n matrix.decompose(position, rotation, scale);\n }\n finite([...position.toArray(), ...rotation.toArray(), ...scale.toArray()], `transform for ${JSON.stringify(object.name)}`);\n return Object.freeze({\n position: Object.freeze({ x: position.x, y: position.y, z: position.z }),\n rotation: Object.freeze({ x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }),\n scale: Object.freeze({ x: scale.x, y: scale.y, z: scale.z }),\n });\n};\n\nconst captureSubtree = (\n object: Object3D,\n path: string,\n parentPath: string | null,\n parentMatrix: Matrix4,\n nodes: ThreeReferencePoseNode[],\n) => {\n const local = localMatrix(object);\n const localValues = matrixValues(local, `local matrix at ${JSON.stringify(path)}`);\n const world = new Matrix4().multiplyMatrices(parentMatrix, local);\n const worldValues = matrixValues(world, `world matrix at ${JSON.stringify(path)}`);\n const influences = (object as Object3D & { morphTargetInfluences?: readonly number[] }).morphTargetInfluences;\n const morphInfluences = influences === undefined ? undefined : Array.from(influences);\n if (morphInfluences) finite(morphInfluences, `morph influences at ${JSON.stringify(path)}`);\n const rotationEuler = object.matrixAutoUpdate\n ? { x: object.rotation.x, y: object.rotation.y, z: object.rotation.z }\n : undefined;\n if (rotationEuler) finite(Object.values(rotationEuler), `Euler rotation at ${JSON.stringify(path)}`);\n nodes.push(Object.freeze({\n path,\n parentPath,\n name: object.name,\n type: object.type,\n isBone: isBone(object),\n rotationOrder: object.rotation.order,\n ...(rotationEuler ? { rotationEuler: Object.freeze(rotationEuler) } : {}),\n childCount: object.children.length,\n transform: referenceTransform(object, local),\n localMatrix: localValues,\n worldMatrix: worldValues,\n worldPosition: Object.freeze({ x: worldValues[12], y: worldValues[13], z: worldValues[14] }),\n ...(morphInfluences ? { morphInfluences: Object.freeze(morphInfluences) } : {}),\n }));\n object.children.forEach((child, index) => captureSubtree(child, `${path}/${index}`, path, world, nodes));\n};\n\nconst matchesNode = (object: Object3D, node: ThreeReferencePoseNode | undefined, path: string, parentPath: string | null) =>\n node !== undefined\n && node.path === path\n && node.parentPath === parentPath\n && node.name === object.name\n && node.type === object.type\n && node.isBone === isBone(object);\n\nconst incompatible = (object: Object3D, path: string) =>\n new Error(`Incompatible reference pose hierarchy at ${JSON.stringify(path)} (${JSON.stringify(object.name)})`);\n\n/**\n * Explicitly capture the authored reference pose before starting animation.\n * This does not infer a skin bind pose or animation frame zero: it snapshots the\n * transforms supplied by the caller, without updating or otherwise mutating the scene.\n * World matrices are calculated from the full ancestor chain's local transforms,\n * not potentially stale matrixWorld values. All returned data is deeply frozen and\n * JSON-serializable; no object, UUID, or live transform references are retained.\n * Existing morph influences are copied as an optional baseline. Non-finite data\n * or manual matrices with a zero-length basis axis/non-finite TRS decomposition throw.\n */\nexport function captureModelReferencePose(model: Object3D): ThreeModelReferencePose {\n const ancestors: Object3D[] = [];\n for (let ancestor = model.parent; ancestor; ancestor = ancestor.parent) ancestors.push(ancestor);\n const parentWorld = new Matrix4();\n for (const ancestor of ancestors.reverse()) parentWorld.multiply(localMatrix(ancestor));\n const parentWorldMatrix = matrixValues(parentWorld, 'parent world matrix');\n const nodes: ThreeReferencePoseNode[] = [];\n\n captureSubtree(model, '', null, parentWorld, nodes);\n return Object.freeze({ version: 1, parentWorldMatrix, nodes: Object.freeze(nodes) });\n}\n\n/**\n * Explicitly extend a reference after appending children, such as a generated\n * skeleton. Existing structural paths, names, kinds and child order must match;\n * removing or inserting before an existing child is incompatible. Existing\n * captured data remains unchanged except child counts. Newly appended subtrees\n * use their current local transforms beneath the CAPTURED parent world matrix,\n * so playback and later scene placement never become the old rig's reference.\n * Returns a new deeply frozen snapshot without mutating the model or previous\n * data. Identical sibling swaps cannot be distinguished by structural identity.\n */\nexport function extendModelReferencePose(\n model: Object3D,\n previous: ThreeModelReferencePose,\n): ThreeModelReferencePose {\n if (previous.version !== 1) throw new Error('Unsupported model reference pose version');\n const nodes: ThreeReferencePoseNode[] = [];\n let index = 0;\n const extend = (object: Object3D, path: string, parentPath: string | null) => {\n const node = previous.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || object.children.length < node.childCount) {\n throw incompatible(object, path);\n }\n // Copy even a deserialized snapshot into frozen data; never freeze or mutate\n // the caller's input, or reuse any current transform/morph values here.\n nodes.push(Object.freeze({\n ...node,\n childCount: object.children.length,\n transform: Object.freeze({\n position: Object.freeze({ ...node.transform.position }),\n rotation: Object.freeze({ ...node.transform.rotation }),\n scale: Object.freeze({ ...node.transform.scale }),\n }),\n localMatrix: Object.freeze([...node.localMatrix]),\n worldMatrix: Object.freeze([...node.worldMatrix]),\n worldPosition: Object.freeze({ ...node.worldPosition }),\n ...(node.rotationEuler ? { rotationEuler: Object.freeze({ ...node.rotationEuler }) } : {}),\n ...(node.morphInfluences ? { morphInfluences: Object.freeze([...node.morphInfluences]) } : {}),\n }));\n for (let childIndex = 0; childIndex < node.childCount; childIndex += 1) {\n extend(object.children[childIndex], `${path}/${childIndex}`, path);\n }\n const parentWorld = new Matrix4().fromArray(node.worldMatrix);\n for (let childIndex = node.childCount; childIndex < object.children.length; childIndex += 1) {\n captureSubtree(object.children[childIndex], `${path}/${childIndex}`, path, parentWorld, nodes);\n }\n };\n extend(model, '', null);\n if (index !== previous.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return Object.freeze({\n version: 1,\n parentWorldMatrix: Object.freeze([...previous.parentWorldMatrix]),\n nodes: Object.freeze(nodes),\n });\n}\n\n/**\n * Resolve captured data against an identically structured model, including a fresh\n * clone/load with new UUIDs. Names, types, bone flags, and child ordering must match;\n * duplicate names are distinguished by structural path, never name lookup.\n * Current transforms and the model's external scene parent are deliberately ignored.\n * An incompatible hierarchy throws before a binding map is returned.\n */\nexport function bindModelReferencePose(\n model: Object3D,\n referencePose: ThreeModelReferencePose,\n): ReadonlyMap<Object3D, ThreeReferencePoseNode> {\n if (referencePose.version !== 1) throw new Error('Unsupported model reference pose version');\n const bindings = new Map<Object3D, ThreeReferencePoseNode>();\n let index = 0;\n const bind = (object: Object3D, path: string, parentPath: string | null) => {\n const node = referencePose.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || node.childCount !== object.children.length) {\n throw incompatible(object, path);\n }\n bindings.set(object, node);\n object.children.forEach((child, childIndex) => bind(child, `${path}/${childIndex}`, path));\n };\n bind(model, '', null);\n if (index !== referencePose.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return bindings;\n}\n","import { PropertyBinding } from 'three';\nimport type { AnimationClip, KeyframeTrack } from 'three';\nimport type { ClipIRTrack, ThreeModelInspection } from './index';\n\n/**\n * Packed morphs must share PropertyMixers with indexed compiled tracks. Euler\n * components avoid Euler.fromArray's incompatible mixer-buffer offset/order.\n */\nexport function withComponentTracks(clip: AnimationClip): AnimationClip {\n let expanded = false;\n const tracks = clip.tracks.flatMap((track) => {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const euler = parsed.propertyName === 'rotation';\n if ((!euler && !['morphTargetInfluences', 'weights'].includes(parsed.propertyName)) || parsed.propertyIndex !== undefined) return [track];\n const cubic = (track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const parts = cubic ? 3 : 1;\n const width = track.getValueSize() / parts;\n if (!Number.isInteger(width) || width < 1 || (euler && width !== 3)) throw new Error(`Invalid component track ${JSON.stringify(track.name)}.`);\n expanded = true;\n return Array.from({ length: width }, (_, component) => {\n const scalar = track.clone();\n scalar.name = `${track.name}[${euler ? ['x', 'y', 'z'][component] : component}]`;\n // Keep tangent/value/tangent storage and the native interpolation factory.\n scalar.values = track.values.slice(0, track.times.length * parts);\n for (let sample = 0; sample < scalar.values.length; sample += 1) scalar.values[sample] = track.values[sample * width + component];\n return scalar;\n });\n });\n if (!expanded) return clip;\n const indexed = clip.clone();\n indexed.tracks = tracks;\n return indexed;\n}\n\n/** One PropertyMixer cache key for every concrete renderer destination. */\nexport function concreteTrackName(target: ClipIRTrack['target'] | undefined, inspection: ThreeModelInspection): string | undefined {\n if (!target) return undefined;\n if (target.kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(target.morphTargetId));\n return binding && `${binding.mesh.uuid}.morphTargetInfluences[${binding.index}]`;\n }\n if (target.kind === 'boneTransform' || target.kind === 'objectTransform') {\n const object = target.kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(target.boneId))\n : inspection.objectBindings.get(Number(target.objectId));\n const property = target.property ?? 'rotation';\n if (!object) return undefined;\n if (property === 'rotation' || property === 'quaternion') return `${object.uuid}.quaternion`;\n if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') return `${object.uuid}.rotation[${property.slice(-1).toLowerCase()}]`;\n if (property === 'position' || property === 'scale') return `${object.uuid}.${property}`;\n }\n if (target.kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(target.meshId));\n return mesh && `${mesh.uuid}.visible`;\n }\n return undefined;\n}\n\n/** Retain authored samples and interpolants; normalize only cloned binding names. */\nexport function cloneWithConcreteTrackNames(clip: AnimationClip, tracks: readonly ClipIRTrack[], inspection: ThreeModelInspection): AnimationClip {\n const native = clip.clone();\n for (let index = 0; index < tracks.length; index += 1) {\n const name = concreteTrackName(tracks[index].target, inspection);\n if (!name) throw new Error('Every native playback track must resolve on the bound model.');\n native.tracks[index].name = name;\n }\n return native;\n}\n","import {\n AdditiveAnimationBlendMode,\n AnimationMixer,\n LoopOnce,\n LoopPingPong,\n LoopRepeat,\n NormalAnimationBlendMode,\n} from 'three';\nimport type { AnimationAction, AnimationClip, KeyframeTrack, Object3D } from 'three';\nimport type { NativePlaybackSession } from '../wasm/index';\nimport { createAnimationClipFromClipIR, serializeAnimationClips } from './index';\nimport type { ClipIR, ThreeModelInspection } from './index';\nimport { bindPlaybackRendering } from './playbackRendering';\nimport { cloneWithConcreteTrackNames, withComponentTracks } from './clipBindings';\n\nexport type ThreeNativeLoop = { mode: 'once' | 'repeat' | 'pingPong'; count?: number | null };\nexport type ThreeNativePlaybackOptions = {\n replace?: string;\n startSeconds?: number;\n speed?: number;\n /** Native contribution only; semantic intensity belongs in the compiled clip. */\n weight?: number;\n blendMode?: 'normal' | 'additive';\n loop?: ThreeNativeLoop;\n finalPose?: 'release' | 'hold';\n};\nexport type ThreeNativePlaybackControl =\n | { type: 'pause' | 'resume' | 'stop' }\n | { type: 'seek'; seconds: number }\n | { type: 'setSpeed'; speed: number }\n | { type: 'setWeight'; weight: number }\n | { type: 'setBlendMode'; blendMode: 'normal' | 'additive' }\n | { type: 'setLoop'; loop: ThreeNativeLoop }\n | { type: 'setFinalPose'; finalPose: 'release' | 'hold' }\n | { type: 'fadeIn' | 'fadeOut'; seconds: number };\nexport type ThreeNativePlaybackEvent =\n | { type: 'completed'; handle: string }\n | { type: 'cancelled'; handle: string; reason: string }\n | { type: 'error'; handle: string; message: string };\nexport type ThreeNativePlaybackBinding = {\n model: Object3D;\n inspection: ThreeModelInspection;\n /** Optional existing native mixer. Otherwise the connector owns one. */\n mixer?: AnimationMixer;\n};\ntype BoundPlayback = ThreeNativePlaybackBinding & { mixer: AnimationMixer };\n\ntype Settings = Required<Omit<ThreeNativePlaybackOptions, 'replace'>>;\ntype Command =\n | { type: 'play'; handle: string; clip: ClipIR; settings: Settings }\n | { type: 'replaceClip'; handle: string; clip: ClipIR }\n | { type: 'control'; handle: string; control: ThreeNativePlaybackControl }\n | { type: 'release'; handle: string };\ntype Batch = { handle?: string; commands: Command[]; events: ThreeNativePlaybackEvent[] };\ntype NativeNotification = { type: 'completed' | 'cancelled' | 'error'; handle: string; message?: string };\ntype PausedFade = { seconds: number; from: number; to: number; weight: number };\ntype Resource = { clip: AnimationClip; action?: AnimationAction; binding: BoundPlayback; fadingOut?: boolean; pausedFade?: PausedFade; explicitlyPaused?: boolean; suspendedPaused?: boolean };\ntype PendingBatch = { batch: Batch; nextCommand: number; clip?: AnimationClip; afterCommands?: () => void };\ntype NativeInterpolant = { resultBuffer: unknown; settings?: unknown; valueSize: number };\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((buffer: unknown) => NativeInterpolant) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\ntype FadeInterpolant = { parameterPositions: ArrayLike<number>; sampleValues: { [index: number]: number }; evaluate(time: number): ArrayLike<number> };\ntype EditableAction = AnimationAction & { _interpolants: NativeInterpolant[]; _interpolantSettings: unknown; _weightInterpolant: FadeInterpolant | null };\nconst sampleSize = (track: KeyframeTrack) => track.getValueSize() / ((track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ? 3 : 1);\n\nconst asError = (error: unknown): Error => error instanceof Error ? error : new Error(String(error));\nconst blendMode = (mode: 'normal' | 'additive') => mode === 'additive' ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\nconst loopMode = (mode: ThreeNativeLoop['mode']) => mode === 'once' ? LoopOnce : mode === 'repeat' ? LoopRepeat : LoopPingPong;\n\nfunction validateBinding(binding: ThreeNativePlaybackBinding): void {\n if (!binding.model?.isObject3D || (binding.mixer && binding.mixer.getRoot() !== binding.model)) {\n throw new Error('Native playback requires a Three model and its render integration mixer.');\n }\n const objects = new Set<Object3D>();\n binding.model.traverse((object) => objects.add(object));\n const { inspection } = binding;\n for (const object of [\n ...inspection.meshBindings.values(), ...inspection.boneBindings.values(),\n ...inspection.objectBindings.values(), ...Array.from(inspection.morphBindings.values(), (entry) => entry.mesh),\n ]) {\n if (!objects.has(object)) throw new Error('Native playback inspection contains an object outside the bound model.');\n }\n}\n\n/**\n * Execute validated Rust commands on the native mixer. There is no\n * clock or update API. Each play owns a unique clip/action; other mixer users\n * remain untouched by stop, replacement, rebind and disposal.\n *\n * The connector owns the supplied Wasm session and frees it after successful\n * disposal. A failed release retains ownership and can be retried by dispose.\n */\nexport class ThreeNativePlaybackConnector {\n private binding: BoundPlayback;\n private rendering: ReturnType<typeof bindPlaybackRendering>;\n private renderingEnabled = true;\n private readonly resources = new Map<string, Resource>();\n private readonly actionHandles = new Map<AnimationAction, string>();\n private readonly listeners = new Set<(event: ThreeNativePlaybackEvent) => void>();\n private readonly pending: PendingBatch[] = [];\n private readonly notifications: NativeNotification[] = [];\n private depth = 0;\n private flushingNotifications = false;\n private notificationScheduled = false;\n private sessionDisposed = false;\n private disposed = false;\n private readonly onError?: (error: Error) => void;\n private readonly onRelease?: (handle: string) => void;\n\n constructor(\n private readonly session: NativePlaybackSession,\n binding: ThreeNativePlaybackBinding & { onError?: (error: Error) => void; onRelease?: (handle: string) => void },\n ) {\n validateBinding(binding);\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.onError = binding.onError;\n this.onRelease = binding.onRelease;\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n }\n\n /** Prepare bindings first; old actions are released before the new binding is exposed. */\n rebind(modelKey: string, profileKey: string, binding: ThreeNativePlaybackBinding = this.binding): void {\n validateBinding(binding);\n this.beforeOperation();\n this.dispatch(this.session.rebind(modelKey, profileKey), undefined, () => {\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n this.rendering.setEnabled(this.renderingEnabled);\n });\n }\n\n play(clip: ClipIR, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n const native = createAnimationClipFromClipIR(clip, this.binding.inspection);\n if (native.tracks.length !== clip.tracks.length) {\n throw new Error('Every playback track must resolve on the bound model.');\n }\n return this.dispatch(this.session.play(JSON.stringify(clip), JSON.stringify(options)), native).handle!;\n }\n\n /**\n * Validate native track bindings through the existing serializer, then retain\n * the native clone's interpolants and authored/additive sample values. Concrete\n * binding names match compiled tracks so Three shares their PropertyMixer.\n */\n playNativeClip(clip: AnimationClip, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) {\n throw new Error('Every native playback track must serialize against the bound model.');\n }\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n const settings = {\n ...options,\n blendMode: options.blendMode ?? (clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal'),\n };\n return this.dispatch(this.session.play(JSON.stringify(ir), JSON.stringify(settings)), native).handle!;\n }\n\n control(handle: string, control: ThreeNativePlaybackControl): void {\n this.beforeOperation();\n this.dispatch(this.session.control(handle, JSON.stringify(control)));\n }\n\n setRendering(enabled: boolean): void {\n this.beforeOperation();\n if (enabled === this.renderingEnabled) return;\n this.renderingEnabled = enabled;\n this.rendering.setEnabled(enabled);\n for (const resource of this.resources.values()) {\n if (!resource.action) continue;\n if (!enabled) {\n resource.suspendedPaused = resource.action.paused;\n this.pauseFade(resource);\n resource.action.paused = true;\n } else if (resource.suspendedPaused !== undefined) {\n resource.action.paused = resource.suspendedPaused;\n if (!resource.explicitlyPaused) this.resumeFade(resource);\n resource.suspendedPaused = undefined;\n }\n }\n }\n\n setTimeScale(value: number): void {\n this.beforeOperation();\n if (!Number.isFinite(value)) throw new Error('Native mixer speed must be finite.');\n this.binding.mixer.timeScale = value;\n }\n\n fadeIn(handle: string, seconds: number): void { this.control(handle, { type: 'fadeIn', seconds }); }\n fadeOut(handle: string, seconds: number): void { this.control(handle, { type: 'fadeOut', seconds }); }\n\n /** Edit authored samples, retaining the native action and its loop/fade progress. */\n replaceClip(handle: string, clip: AnimationClip): void {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const resource = this.resources.get(handle);\n if (!resource) throw new Error('Unknown, foreign or stale playback handle.');\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) throw new Error('Every edited track must resolve on the bound model.');\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n if (native.tracks.length !== resource.clip.tracks.length || native.tracks.some((track, index) => {\n const old = resource.clip.tracks[index];\n return track.name !== old.name || track.ValueTypeName !== old.ValueTypeName || sampleSize(track) !== sampleSize(old);\n })) throw new Error('Editing samples must preserve track bindings; play a new clip to change its bindings.');\n const editable = resource.action as EditableAction | undefined;\n if (!editable || !Array.isArray(editable._interpolants) || editable._interpolants.length !== native.tracks.length) {\n throw new Error('This Three version does not support editing native action samples.');\n }\n this.dispatch(this.session.replace_clip(handle, JSON.stringify(ir)), native);\n }\n\n /** Native state for the owning adapter; never exposed through Polymer. */\n getAction(handle: string): AnimationAction | undefined {\n return this.resources.get(handle)?.action;\n }\n\n /** Deliver native completion after the borrowed mixer has finished sampling. */\n flushEvents(): void {\n if (this.disposed) return;\n this.notificationScheduled = false;\n for (const [handle, resource] of this.resources) {\n // Three evaluates fade weights on its mixer clock. Observe completion;\n // do not calculate a deadline or interpolate another weight here.\n if (resource.fadingOut && resource.action?.getEffectiveWeight() === 0) {\n resource.fadingOut = false;\n this.notifications.push({ type: 'cancelled', handle });\n }\n }\n this.flushNotifications();\n }\n\n subscribe(listener: (event: ThreeNativePlaybackEvent) => void): () => void {\n if (this.disposed) throw new Error('Native playback connector is disposed.');\n this.listeners.add(listener);\n return () => { this.listeners.delete(listener); };\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.retryPending();\n if (!this.sessionDisposed) {\n const batch = this.session.dispose();\n this.sessionDisposed = true;\n this.dispatch(batch);\n }\n // A failed release throws above, leaving listeners, resources and session\n // owned until a later dispose successfully retries the remaining effects.\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.notifications.length = 0;\n this.listeners.clear();\n this.session.free();\n this.disposed = true;\n }\n\n private pauseFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = action?._weightInterpolant;\n if (!action || !fade) return;\n // Preserve Three's own fade segment. Mixer time remains its only clock.\n resource.pausedFade = {\n seconds: Math.max(0, fade.parameterPositions[1] - resource.binding.mixer.time),\n from: fade.evaluate(resource.binding.mixer.time)[0], to: fade.sampleValues[1], weight: action.weight,\n };\n action.stopFading();\n action.setEffectiveWeight(resource.pausedFade.weight * resource.pausedFade.from);\n }\n\n private resumeFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = resource.pausedFade;\n if (!action || !fade) return;\n resource.pausedFade = undefined;\n action.setEffectiveWeight(fade.weight);\n action.fadeIn(fade.seconds);\n const interpolant = action._weightInterpolant!;\n interpolant.sampleValues[0] = fade.from;\n interpolant.sampleValues[1] = fade.to;\n }\n\n private beforeOperation(): void {\n if (this.disposed || this.sessionDisposed) throw new Error('Native playback connector is disposed.');\n this.retryPending();\n }\n\n private retryPending(): void {\n if (this.pending.length) this.drain();\n }\n\n private dispatch(serialized: string, clip?: AnimationClip, afterCommands?: () => void): Batch {\n const batch = JSON.parse(serialized) as Batch;\n this.pending.push({ batch, nextCommand: 0, clip, afterCommands });\n this.drain();\n return batch;\n }\n\n private drain(): void {\n const errors: Error[] = [];\n this.depth += 1;\n try {\n while (this.pending.length) {\n const pending = this.pending[0];\n while (pending.nextCommand < pending.batch.commands.length) {\n const command = pending.batch.commands[pending.nextCommand];\n try {\n this.execute(command, pending.clip);\n } catch (error) {\n // A release failure cannot be represented by a late terminal event.\n // Keep this command and its undelivered events available for retry.\n if (command.type === 'release') throw asError(error);\n const failure = asError(error);\n errors.push(failure);\n this.notifications.push({ type: 'error', handle: command.handle, message: failure.message || 'Native operation failed.' });\n }\n pending.nextCommand += 1;\n }\n pending.afterCommands?.();\n this.pending.shift();\n // Commands have finished before any observer may reenter playback.\n for (const event of pending.batch.events) {\n for (const listener of [...this.listeners]) {\n // An observer failure must not make a successful play look like an\n // allocation failure to its caller and orphan the new handle.\n try { listener(event); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n }\n }\n }\n } finally {\n this.depth -= 1;\n }\n if (this.depth === 0 && !this.flushingNotifications) this.flushNotifications();\n if (errors.length) throw errors[0];\n }\n\n private execute(command: Command, preparedClip?: AnimationClip): void {\n if (command.type === 'release') {\n const resource = this.resources.get(command.handle);\n if (!resource) return;\n resource.action?.stop();\n resource.binding.mixer.uncacheAction(resource.clip, resource.binding.model);\n resource.binding.mixer.uncacheClip(resource.clip);\n if (resource.action) this.actionHandles.delete(resource.action);\n this.resources.delete(command.handle);\n // Releasing a completed held pose is not a second terminal event. The\n // owning facade still needs to retire its resource bookkeeping.\n try { this.onRelease?.(command.handle); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n return;\n }\n if (command.type === 'replaceClip') {\n const resource = this.resources.get(command.handle);\n if (!resource || !preparedClip) throw new Error('Native clip edit has no owned resource.');\n // Three has no public action sample-edit method. Keep this adapter access\n // isolated: rebuild native interpolants with the existing PropertyMixer\n // result buffers, without reading or changing time, loop counters or fades.\n const action = resource.action as EditableAction;\n const tracks = preparedClip.tracks.map((track) => track.clone());\n const interpolants = tracks.map((track, index) => {\n const interpolant = (track as NativeTrack).createInterpolant(action._interpolants[index].resultBuffer);\n if (interpolant.settings) Object.assign(action._interpolantSettings as object, interpolant.settings);\n interpolant.settings = action._interpolantSettings;\n return interpolant;\n });\n resource.clip.tracks = tracks;\n action._interpolants = interpolants;\n return;\n }\n if (command.type === 'play') {\n if (!preparedClip) throw new Error('Native playback has no prepared clip.');\n const resource: Resource = { clip: preparedClip, binding: this.binding };\n this.resources.set(command.handle, resource);\n const settings = command.settings;\n const action = this.binding.mixer.clipAction(preparedClip, this.binding.model, blendMode(settings.blendMode));\n resource.action = action;\n this.actionHandles.set(action, command.handle);\n action.setLoop(loopMode(settings.loop.mode), settings.loop.count ?? Infinity);\n action.clampWhenFinished = settings.finalPose === 'hold';\n action.setEffectiveTimeScale(settings.speed);\n action.setEffectiveWeight(settings.weight);\n action.time = settings.startSeconds;\n if (!this.renderingEnabled) { resource.suspendedPaused = false; action.paused = true; }\n action.play();\n return;\n }\n const resource = this.resources.get(command.handle);\n const action = resource?.action;\n if (!resource || !action) throw new Error('Native playback action is unavailable.');\n const control = command.control;\n switch (control.type) {\n case 'pause':\n resource.explicitlyPaused = true;\n this.pauseFade(resource);\n action.paused = true;\n if (!this.renderingEnabled) this.resources.get(command.handle)!.suspendedPaused = true;\n break;\n case 'resume':\n resource.explicitlyPaused = false;\n if (this.renderingEnabled) { action.paused = false; this.resumeFade(resource); }\n else this.resources.get(command.handle)!.suspendedPaused = false;\n break;\n case 'seek': action.time = control.seconds; break;\n case 'setSpeed': action.setEffectiveTimeScale(control.speed); break;\n case 'setWeight':\n resource.pausedFade = undefined;\n action.setEffectiveWeight(control.weight);\n this.resources.get(command.handle)!.fadingOut = false;\n break;\n case 'setBlendMode': action.blendMode = blendMode(control.blendMode); break;\n case 'setLoop': action.setLoop(loopMode(control.loop.mode), control.loop.count ?? Infinity); break;\n case 'setFinalPose': action.clampWhenFinished = control.finalPose === 'hold'; break;\n case 'fadeIn':\n resource.pausedFade = undefined;\n action.fadeIn(control.seconds); resource.fadingOut = false;\n if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource);\n break;\n case 'fadeOut':\n resource.pausedFade = undefined;\n if (control.seconds === 0) this.notifications.push({ type: 'cancelled', handle: command.handle });\n else { action.fadeOut(control.seconds); resource.fadingOut = true; if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource); }\n break;\n case 'stop': throw new Error('Rust must translate stop into a resource release.');\n }\n }\n\n private readonly finished = (event: { action: AnimationAction }): void => {\n const handle = this.actionHandles.get(event.action);\n if (!handle || this.disposed) return;\n this.notifications.push({ type: this.resources.get(handle)?.fadingOut ? 'cancelled' : 'completed', handle });\n // Three dispatches finished while iterating its active action arrays.\n // Releasing/uncaching an action there would mutate that iteration.\n if (this.notificationScheduled) return;\n this.notificationScheduled = true;\n queueMicrotask(() => {\n this.notificationScheduled = false;\n if (this.disposed) return;\n try { this.flushNotifications(); } catch (error) {\n const failure = asError(error);\n if (this.onError) this.onError(failure);\n else throw failure;\n }\n });\n };\n\n private flushNotifications(): void {\n if (this.flushingNotifications || this.depth > 0 || this.disposed || this.notificationScheduled) return;\n this.flushingNotifications = true;\n try {\n while (this.notifications.length) {\n const event = this.notifications.shift()!;\n this.dispatch(this.session.notify(JSON.stringify(event)));\n }\n } finally {\n this.flushingNotifications = false;\n }\n }\n}\n","import {\n AdditiveAnimationBlendMode, AnimationClip, AnimationUtils, LoopOnce, LoopPingPong,\n NormalAnimationBlendMode, PropertyBinding, Quaternion, Euler, InterpolateDiscrete, InterpolateLinear,\n} from 'three';\nimport type { KeyframeTrack, Mesh, Object3D } from 'three';\nimport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\nimport { initEmbodyCore, requireInitializedEmbodyCore, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport type { RuntimeCore } from '@lovelace_lol/embody/wasm';\nimport {\n ThreeFrameApplier, ThreeModelInspector, createAnimationClipFromClipIR,\n serializeAnimationClips,\n} from './index';\nimport type { ClipIR, ClipIRTrack, ThreeModelInspection } from './index';\nimport {\n bindModelReferencePose, captureModelReferencePose, extendModelReferencePose,\n} from './reference-pose';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nimport { ThreeNativePlaybackConnector } from './nativePlayback';\nimport { withComponentTracks } from './clipBindings';\nimport type { ThreeNativePlaybackControl, ThreeNativePlaybackEvent, ThreeNativePlaybackOptions } from './nativePlayback';\n\ntype JsonObject = Record<string, any>;\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((result?: Float32Array) => { evaluate(time: number): ArrayLike<number> }) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\nexport type RustEmbodyHostConfig = {\n profileMode?: 'preset' | 'profile';\n presetId?: string;\n presetType?: string;\n profile?: JsonObject;\n meshes?: Mesh[];\n referencePose?: ThreeModelReferencePose;\n};\nexport type CharacterPlaybackOptions = JsonObject;\nexport type CharacterPlaybackEvent = ThreeNativePlaybackEvent & { actionId: string; clipName: string };\nexport interface CharacterPlaybackHandle {\n readonly name: string;\n actionId?: string;\n promise: Promise<CharacterPlaybackEvent>;\n readonly finished: Promise<CharacterPlaybackEvent>;\n play(): CharacterPlaybackHandle;\n stop(): CharacterPlaybackHandle;\n cancel(): CharacterPlaybackHandle;\n pause(): CharacterPlaybackHandle;\n resume(): CharacterPlaybackHandle;\n setWeight(value: number): CharacterPlaybackHandle;\n setIntensity(value: number): CharacterPlaybackHandle;\n setSpeed(value: number): CharacterPlaybackHandle;\n setPlaybackRate(value: number): CharacterPlaybackHandle;\n setTime(value: number): CharacterPlaybackHandle;\n seek(value: number): CharacterPlaybackHandle;\n updateParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n setParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n subscribe(listener: ((event: CharacterPlaybackEvent) => void) | { next(event: CharacterPlaybackEvent): void }): () => void;\n}\nexport interface CharacterTransitionHandle {\n promise: Promise<void>;\n pause(): void;\n resume(): void;\n cancel(): void;\n}\n\ntype Source =\n | { name: string; kind: 'native'; clip: AnimationClip }\n | { name: string; kind: 'curves' | 'typed'; input: any; options: CharacterPlaybackOptions }\n | { name: string; kind: 'compiled'; clip: ClipIR };\ntype Playback = {\n id: string;\n source: Source;\n options: CharacterPlaybackOptions;\n connector: ThreeNativePlaybackConnector;\n terminal: boolean;\n inheritedStarts: Map<string, number[]>;\n replay(options: CharacterPlaybackOptions): CharacterPlaybackHandle;\n notify(event: CharacterPlaybackEvent): void;\n};\nconst json = (value: unknown): string => JSON.stringify(value ?? {});\nconst targetKey = (target: ClipIRTrack['target']): string => JSON.stringify([target.kind, target.meshId, target.morphTargetId, target.boneId, target.objectId, target.property]);\nconst copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));\nconst parse = <T = any>(value: string): T => JSON.parse(value);\nconst finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);\nconst intensity = (options: CharacterPlaybackOptions, fallback = 1): number => {\n const value = options.intensityScale ?? options.intensity ?? options.weight;\n return finite(value) ? Math.max(0, Math.min(2, value)) : fallback;\n};\nconst presetId = (value?: string): string => value?.trim().toLowerCase() || 'cc4';\n\nexport function supportsRustEmbodyPreset(value?: string): boolean {\n return requireInitializedEmbodyCore().has_preset(presetId(value));\n}\n\n/** Character commands compile in Rust and play exclusively on the native connector. */\nexport class Embody {\n readonly meshes: Mesh[] = [];\n meshByName = new Map<string, Mesh>();\n bones: ThreeModelInspection['bones'] = {};\n private readonly wasm = requireInitializedEmbodyCore();\n private core: RuntimeCore;\n private readonly inspector = new ThreeModelInspector();\n private readonly applier = new ThreeFrameApplier();\n private readonly references = new WeakMap<Object3D, ThreeModelReferencePose>();\n private referenceBindings: ReadonlyMap<Object3D, ThreeReferencePoseNode> = new Map();\n private boundModel?: Object3D;\n get model(): Object3D | undefined { return this.boundModel; }\n private inspection?: ThreeModelInspection;\n private connector?: ThreeNativePlaybackConnector;\n private profile: JsonObject;\n private profileSource: JsonObject;\n private readonly profileMode: 'preset' | 'profile';\n private readonly preset: string;\n private readonly sources = new Map<string, Source>();\n private readonly playbacks = new Map<string, Playback>();\n private readonly current = new Map<string, Playback>();\n private playDepth = 0;\n private readonly pendingEvents: ThreeNativePlaybackEvent[] = [];\n private bindingGeneration = 0;\n private disposed = false;\n private rendering = true;\n private timeScale = 1;\n private nextLiveTarget = 0;\n private readonly liveTargets = new Map<string, { track: ClipIRTrack; handle: CharacterPlaybackHandle; releasing: boolean }>();\n private readonly hairObjects = new Map<string, Mesh>();\n private hairConfig: JsonObject = {};\n private hairAppearance: JsonObject = {\n hairColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n eyebrowColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n showOutline: false, outlineColor: '#000000', outlineOpacity: 1,\n };\n\n constructor(private readonly config: RustEmbodyHostConfig = {}) {\n const mode = config.profileMode ?? 'preset';\n if (mode !== 'profile' && mode !== 'preset') throw new Error(`Unknown profile mode: ${mode}`);\n if (mode === 'profile' && !config.profile) throw new Error('Resolved profile mode requires a profile object.');\n this.profileMode = mode;\n this.preset = presetId(config.presetId ?? config.presetType);\n if (mode === 'preset' && !this.wasm.has_preset(this.preset)) throw new Error(`Unknown Embody preset: ${this.preset}`);\n this.profileSource = this.validateProfile(config.profile ?? {});\n this.profile = this.resolveProfile(this.profileSource);\n this.core = new this.wasm.RuntimeCore(0);\n }\n\n static async create(config: RustEmbodyHostConfig = {}): Promise<Embody> {\n await initEmbodyCore();\n return new Embody(config);\n }\n\n private assertAlive(): void { if (this.disposed) throw new Error('Character is disposed.'); }\n private requireModel(): Object3D {\n this.assertAlive();\n if (!this.boundModel) throw new Error('Bind a character model with onReady before using this operation.');\n return this.boundModel;\n }\n private requireConnector(): ThreeNativePlaybackConnector {\n this.requireModel();\n if (!this.connector) throw new Error('Character playback is not bound.');\n return this.connector;\n }\n private validateProfile(value: JsonObject): JsonObject {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Embody profile must be a JSON object.');\n return copy(value);\n }\n private resolveProfile(value: JsonObject): JsonObject {\n return this.profileMode === 'profile' ? copy(value) : parse(this.wasm.merge_embedded_preset(this.preset, json(value)));\n }\n\n onReady(options: { model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[]; referencePose?: ThreeModelReferencePose }): void {\n this.assertAlive();\n const model = options.model;\n if (!model?.isObject3D) throw new Error('onReady requires a Three Object3D model.');\n const reference = this.references.get(model) ?? options.referencePose ?? (!this.boundModel ? this.config.referencePose : undefined) ?? captureModelReferencePose(model);\n const inspection = this.inspector.inspectModel(model, { meshes: options.meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n if (options.animations) this.loadAnimationClips(options.animations);\n }\n\n private bind(model: Object3D, reference: ThreeModelReferencePose, inspection: ThreeModelInspection, source: JsonObject, profile: JsonObject, preserveLiveState = true): void {\n // Prepare every fallible profile/reference operation before releasing the old binding.\n const referenceBindings = bindModelReferencePose(model, reference);\n // Inspection stays live; release clips need the separately captured baseline.\n const runtimeDescriptor = {\n ...inspection.descriptor,\n morphTargets: inspection.descriptor.morphTargets.map((morph) => {\n const binding = inspection.morphBindings.get(morph.id);\n const baseline = binding && referenceBindings.get(binding.mesh)?.morphInfluences?.[binding.index];\n return { ...morph, initialValue: baseline ?? morph.initialValue };\n }),\n };\n const replacingModel = !!this.boundModel && this.boundModel !== model;\n const core = new this.wasm.RuntimeCore(0);\n try {\n if (this.profileMode === 'profile') core.configure_with_profile(json(source), json(runtimeDescriptor));\n else core.configure_with_preset(this.preset, json(source), json(runtimeDescriptor));\n if (preserveLiveState && this.boundModel) core.copy_live_state_from(this.core);\n for (const registered of replacingModel ? [] : this.sources.values()) {\n if (registered.kind === 'native') {\n const [clip] = serializeAnimationClips(model, [registered.clip], inspection);\n core.register_animation_clip(json(clip), 'baked');\n }\n }\n } catch (error) { core.free(); throw error; }\n try { this.connector?.dispose(); }\n catch (error) { core.free(); throw error; }\n this.core.free();\n this.core = core;\n if (replacingModel) this.sources.clear();\n this.boundModel = model;\n this.inspection = inspection;\n this.referenceBindings = referenceBindings;\n this.references.set(model, reference);\n this.profileSource = source;\n this.profile = profile;\n this.bindingGeneration += 1;\n this.playbacks.clear();\n this.current.clear();\n this.liveTargets.clear();\n this.meshes.splice(0, this.meshes.length, ...(inspection.morphMeshes.length ? inspection.morphMeshes : inspection.allMeshes));\n this.meshByName = inspection.meshByName;\n this.bones = inspection.bones;\n this.applier.setBindings(inspection);\n this.applier.applyMeshMaterialConfigs(model, profile.meshes ?? {});\n const session = new this.wasm.NativePlaybackSession();\n try {\n this.connector = new ThreeNativePlaybackConnector(session, {\n model, inspection,\n onRelease: (id) => {\n const playback = this.playbacks.get(id);\n if (playback?.terminal) this.forget(playback);\n },\n });\n }\n catch (error) { session.free(); throw error; }\n this.connector.rebind(model.uuid, String(this.bindingGeneration));\n this.connector.setRendering(this.rendering);\n this.connector.setTimeScale(this.timeScale);\n this.connector.subscribe((event) => this.onPlaybackEvent(event));\n this.hairConfig = parse(this.core.get_hair_config_json());\n this.registerHairObjects(inspection.allMeshes.filter((mesh) => ['hair', 'eyebrow'].includes(this.meshCategory(mesh))));\n if (preserveLiveState) this.commitLive();\n }\n\n bindModel(meshes?: Mesh[]): void {\n const model = this.requireModel();\n const reference = this.references.get(model)!;\n const inspection = this.inspector.inspectModel(model, { meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n }\n extendReferencePose(): ThreeModelReferencePose {\n const model = this.requireModel();\n const reference = extendModelReferencePose(model, this.references.get(model)!);\n const inspection = this.inspector.inspectModel(model, { profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n return reference;\n }\n setProfile(value: JsonObject): void {\n this.assertAlive();\n const source = this.validateProfile(value);\n const profile = this.resolveProfile(source);\n if (!this.boundModel) { this.profileSource = source; this.profile = profile; return; }\n const reference = this.references.get(this.boundModel)!;\n const inspection = this.inspector.inspectModel(this.boundModel, { profile, referencePose: reference });\n this.bind(this.boundModel, reference, inspection, source, profile, false);\n }\n getProfile(): JsonObject { return this.profile; }\n getProfileMode(): 'preset' | 'profile' { return this.profileMode; }\n getPresetId(): string | null { return this.profileMode === 'preset' ? this.preset : null; }\n supportsPreset(value?: string): boolean { return supportsRustEmbodyPreset(value); }\n\n private onPlaybackEvent(event: ThreeNativePlaybackEvent): void {\n if (this.playDepth) { this.pendingEvents.push(event); return; }\n const playback = this.playbacks.get(event.handle);\n if (!playback) return;\n playback.terminal = true;\n if (!playback.connector.getAction(playback.id)) {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n playback.notify({ ...event, actionId: event.handle, clipName: playback.source.name });\n }\n private compile(source: Source, options: CharacterPlaybackOptions): ClipIR {\n const buildOptions = { ...('options' in source ? source.options : {}), ...options, intensityScale: intensity(options) };\n switch (source.kind) {\n case 'curves': return parse(this.core.build_clip(source.name, json(source.input), json(buildOptions)));\n case 'typed': return parse(this.core.build_typed_clip(source.name, json(source.input), json(buildOptions)));\n case 'compiled': return source.clip;\n case 'native': throw new Error('Native animation sources do not require AU compilation.');\n }\n }\n\n private restValues(track: KeyframeTrack): number[] | undefined {\n const model = this.requireModel();\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(model, parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ??\n skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) return undefined;\n const reference = this.referenceBindings.get(object);\n if (!reference) return undefined;\n switch (parsed.propertyName) {\n case 'quaternion': return Object.values(reference.transform.rotation);\n case 'rotation': {\n const rotation = reference.transform.rotation;\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), reference.rotationOrder);\n const axis = parsed.propertyIndex;\n return axis === 'x' || axis === 'y' || axis === 'z' ? [euler[axis]] : [euler.x, euler.y, euler.z];\n }\n case 'position': return Object.values(reference.transform.position);\n case 'scale': return Object.values(reference.transform.scale);\n case 'weights':\n case 'morphTargetInfluences': {\n const mesh = object as Mesh;\n const index = typeof parsed.propertyIndex === 'string' && !/^\\d+$/.test(parsed.propertyIndex)\n ? mesh.morphTargetDictionary?.[parsed.propertyIndex] : Number(parsed.propertyIndex);\n return [reference.morphInfluences?.[index ?? -1] ?? 0];\n }\n default: return undefined;\n }\n }\n\n private materialize(source: Source, options: CharacterPlaybackOptions, inheritedStarts = new Map<string, number[]>()): AnimationClip {\n if (!this.inspection) throw new Error('Character has no model inspection.');\n const nativeSource = source.kind === 'native';\n let ir: ClipIR | undefined;\n if (!nativeSource) {\n ir = this.compile(source, options);\n }\n const clip = nativeSource ? withComponentTracks(source.clip).clone() : createAnimationClipFromClipIR(ir!, this.inspection);\n if (ir) {\n const predecessor = this.current.get(source.name);\n const outgoing = predecessor?.connector.getAction(predecessor.id);\n for (let index = 0; index < ir.tracks.length; index += 1) {\n if (!ir.tracks[index].inheritStart) continue;\n const track = clip.tracks[index];\n if (!track) throw new Error('Every inherited track must bind to the character.');\n const startKey = `${index}:${track.name}`;\n let previous = inheritedStarts.get(startKey);\n if (!previous && options.blendMode === 'additive') {\n // Additive inheritance belongs to this request's contribution, not\n // the full mixed pose containing baked clips and other controls.\n const rest = this.restValues(track);\n const candidates = outgoing?.getClip().tracks;\n const oldTrack = candidates?.[index]?.name === track.name ? candidates[index] : candidates?.find((candidate) => candidate.name === track.name);\n if (oldTrack && outgoing) {\n previous = Array.from((oldTrack as NativeTrack).createInterpolant().evaluate(outgoing.time));\n if (outgoing.blendMode === AdditiveAnimationBlendMode && rest) {\n previous = track.ValueTypeName === 'quaternion'\n ? new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(previous)).toArray()\n : previous.map((value, axis) => value + rest[axis]);\n }\n } else if (rest) previous = rest;\n }\n if (previous) track.values.set(previous, 0);\n inheritedStarts.set(startKey, previous ?? Array.from(track.values.subarray(0, track.getValueSize())));\n }\n }\n const authoredAdditive = clip.blendMode === AdditiveAnimationBlendMode;\n const scale = intensity(options);\n const additive = options.blendMode === 'additive' || (options.blendMode === undefined && authoredAdditive);\n // Native custom curves remain exact at their authored settings. Editing\n // strength/blend/easing materializes their native interpolant once into\n // ordinary keyframes; no custom sampling occurs during rendering.\n this.applyEasing(clip, options.easing ?? 'linear', nativeSource && (scale !== 1 || additive !== authoredAdditive));\n if (nativeSource && scale !== 1) {\n for (const track of clip.tracks) {\n const rest = authoredAdditive ? (track.ValueTypeName === 'quaternion' ? [0, 0, 0, 1] : Array(track.getValueSize()).fill(0)) : this.restValues(track);\n if (!rest) continue;\n const stride = track.getValueSize();\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const width = cubic ? stride / 3 : stride;\n for (let offset = 0; offset < track.values.length; offset += stride) {\n const sample = offset + (cubic ? width : 0);\n if (track.ValueTypeName === 'quaternion') {\n const neutral = new Quaternion().fromArray(rest);\n const value = new Quaternion().fromArray(track.values, sample);\n neutral.slerp(value, scale).toArray(track.values, sample);\n } else {\n for (let axis = 0; axis < width; axis += 1) {\n track.values[sample + axis] = rest[axis] + (track.values[sample + axis] - rest[axis]) * scale;\n if (cubic) {\n track.values[offset + axis] *= scale;\n track.values[offset + 2 * width + axis] *= scale;\n }\n }\n }\n }\n }\n }\n if (additive && !authoredAdditive) {\n const reference = clip.clone();\n for (const track of reference.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) track.values.set(rest, offset);\n }\n const explicitReference = options.additiveReferenceTimeSec;\n if (finite(explicitReference)) AnimationUtils.makeClipAdditive(clip, explicitReference * 30, clip.clone(), 30);\n else AnimationUtils.makeClipAdditive(clip, 0, reference, 30);\n }\n if (!additive && authoredAdditive) {\n // Native additive clips contain offsets; restore captured reference values.\n for (const track of clip.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) {\n if (track.ValueTypeName === 'quaternion') new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(track.values, offset)).toArray(track.values, offset);\n else for (let axis = 0; axis < width; axis += 1) track.values[offset + axis] += rest[axis];\n }\n }\n }\n clip.blendMode = additive ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\n return clip;\n }\n\n private applyEasing(clip: AnimationClip, easing: string, resampleCustom = false): void {\n if (easing === 'linear' && !resampleCustom) return;\n const curve = (progress: number): number => {\n switch (easing) {\n case 'easeIn': return progress * progress;\n case 'easeOut': return 1 - (1 - progress) ** 2;\n case 'easeInOut': return progress < 0.5 ? 2 * progress * progress : 1 - (-2 * progress + 2) ** 2 / 2;\n case 'easeInOutCubic': return progress < 0.5 ? 4 * progress ** 3 : 1 - (-2 * progress + 2) ** 3 / 2;\n default: return progress;\n }\n };\n for (const track of clip.tracks) {\n if (track.getInterpolation() === InterpolateDiscrete || track.times.length === 0) continue;\n const customInterpolant = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n if (track.times.length === 1) {\n if (customInterpolant && resampleCustom) {\n track.values = new Float32Array((track as NativeTrack).createInterpolant().evaluate(track.times[0]));\n track.setInterpolation(InterpolateLinear);\n }\n continue;\n }\n if ((customInterpolant || track.getInterpolation() !== InterpolateLinear) && easing === 'linear' && !resampleCustom) continue;\n const stride = track.getValueSize();\n const width = customInterpolant ? stride / 3 : stride;\n const interpolant = (track as NativeTrack).createInterpolant();\n const times: number[] = [];\n const values: number[] = [];\n const append = (time: number, value: ArrayLike<number>) => { times.push(time); for (let axis = 0; axis < width; axis += 1) values.push(value[axis]); };\n for (let index = 0; index < track.times.length - 1; index += 1) {\n const start = track.times[index];\n const end = track.times[index + 1];\n // Retain duplicate keyframe times and their authored values verbatim.\n const offset = index * stride + (customInterpolant ? width : 0);\n append(start, track.values.subarray(offset, offset + width));\n if (end <= start) continue;\n for (let part = 1; part < 16; part += 1) {\n const progress = part / 16;\n append(start + (end - start) * progress, interpolant.evaluate(start + (end - start) * curve(progress)));\n }\n }\n const lastOffset = (track.times.length - 1) * stride + (customInterpolant ? width : 0);\n append(track.times[track.times.length - 1], track.values.subarray(lastOffset, lastOffset + width));\n track.times = new Float32Array(times);\n track.values = new Float32Array(values);\n if (customInterpolant || track.getInterpolation() !== InterpolateLinear) track.setInterpolation(InterpolateLinear);\n }\n }\n\n private nativeOptions(options: CharacterPlaybackOptions, clip: AnimationClip): ThreeNativePlaybackOptions {\n const mode = clip.duration === 0 ? 'once' : options.loopMode ?? (options.loop === true ? 'repeat' : 'once');\n const count = finite(options.repeatCount) && options.repeatCount > 0 ? options.repeatCount : null;\n let speed = options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if (options.reverse === true) speed = -Math.abs(speed);\n return {\n startSeconds: finite(options.time) ? options.time : finite(options.offsetSec) ? options.offsetSec : speed < 0 ? clip.duration : 0,\n speed,\n weight: finite(options.mixerWeight) ? options.mixerWeight : 1,\n blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal',\n loop: { mode: mode === 'once' ? 'once' : mode === 'pingpong' || mode === 'pingPong' ? 'pingPong' : 'repeat', count: mode === 'once' ? 1 : count },\n finalPose: options.finalPose === 'release' || options.clampWhenFinished === false ? 'release' : 'hold',\n };\n }\n private validateEasing(options: CharacterPlaybackOptions): void {\n if (options.easing !== undefined && !['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInOutCubic'].includes(options.easing)) throw new Error(`Unknown playback easing: ${options.easing}`);\n }\n\n private handle(source: Source, options: CharacterPlaybackOptions, autoPlay: boolean): CharacterPlaybackHandle {\n options = { ...('options' in source ? source.options : {}), ...options };\n const listeners = new Set<(event: CharacterPlaybackEvent) => void>();\n const generation = this.bindingGeneration;\n let current: Playback | undefined;\n let resolvePromise: (event: CharacterPlaybackEvent) => void = () => {};\n const result = { name: source.name } as CharacterPlaybackHandle;\n Object.defineProperty(result, 'finished', { get: () => result.promise, enumerable: true });\n const newPromise = () => { result.promise = new Promise((resolve) => { resolvePromise = resolve; }); };\n newPromise();\n result.subscribe = (listener) => {\n const callback = typeof listener === 'function' ? listener : (event: CharacterPlaybackEvent) => listener.next(event);\n listeners.add(callback);\n return () => { listeners.delete(callback); };\n };\n const start = (): CharacterPlaybackHandle => {\n if (generation !== this.bindingGeneration) throw new Error('Playback handle belongs to an obsolete model binding.');\n this.validateEasing(options);\n const connector = this.requireConnector();\n const inheritedStarts = new Map<string, number[]>();\n const clip = this.materialize(source, options, inheritedStarts);\n const hairMotion = this.authoredHeadMotion(clip);\n const previous = this.current.get(source.name);\n const settings = this.nativeOptions(options, clip);\n if (previous && connector.getAction(previous.id)) settings.replace = previous.id;\n if (current) newPromise();\n const resolve = resolvePromise;\n let settled = false;\n this.playDepth += 1;\n let id: string;\n try { id = connector.playNativeClip(clip, settings); }\n catch (error) {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n throw error;\n }\n const playback: Playback = {\n id, source, options: { ...options, intensityScale: intensity(options) }, connector, terminal: false, inheritedStarts,\n replay: (next) => { options = next; return start(); },\n notify: (event) => {\n if (settled) return;\n settled = true;\n resolve(event);\n for (const listener of [...listeners]) {\n try { listener(event); }\n catch (error) { queueMicrotask(() => { throw error; }); }\n }\n },\n };\n current = playback;\n result.actionId = id;\n this.playbacks.set(id, playback);\n this.current.set(source.name, playback);\n const ensure = () => {\n this.assertAlive();\n if (this.connector !== connector || !connector.getAction(id)) throw new Error('Unknown, released or obsolete playback handle.');\n };\n const control = (command: ThreeNativePlaybackControl): CharacterPlaybackHandle => {\n ensure();\n connector.control(id, command);\n if (command.type === 'stop') this.forget(playback);\n return result;\n };\n result.stop = result.cancel = () => {\n if (this.connector !== connector || !connector.getAction(id)) return result;\n ensure();\n const seconds = finite(playback.options.fadeOutSec) ? playback.options.fadeOutSec : 0;\n if (seconds > 0 && !playback.terminal) connector.fadeOut(id, seconds);\n else control({ type: 'stop' });\n return result;\n };\n result.pause = () => control({ type: 'pause' });\n result.resume = () => {\n ensure();\n if (playback.terminal) {\n options = { ...playback.options, time: connector.getAction(id)!.time };\n return start();\n }\n return control({ type: 'resume' });\n };\n result.setSpeed = result.setPlaybackRate = (speed) => { ensure(); this.updatePlayback(playback, { speed }); return result; };\n result.setTime = result.seek = (seconds) => control({ type: 'seek', seconds });\n result.setWeight = result.setIntensity = (value) => {\n ensure();\n this.updatePlayback(playback, { intensityScale: value });\n return result;\n };\n result.updateParams = result.setParams = (value) => { ensure(); this.updatePlayback(playback, value); return result; };\n try {\n const fade = options.fadeInSec ?? options.crossfadeDuration;\n if (finite(fade) && fade > 0) connector.fadeIn(id, fade);\n } finally {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n }\n if (hairMotion && connector.getAction(id)) {\n this.playHairImpulse(hairMotion.horizontal, hairMotion.vertical);\n this.setHairGravity(hairMotion.pitch, clip.duration);\n }\n return result;\n };\n result.play = () => { if (current) options = { ...current.options }; return start(); };\n const beforePlay = () => { throw new Error('Play this compiled clip before changing playback.'); };\n // A prepared clip has options but owns no native action to stop or pause.\n result.stop = result.cancel = () => result;\n result.pause = result.resume = beforePlay;\n result.updateParams = result.setParams = (patch) => {\n this.assertAlive();\n this.validateEasing(patch);\n options = { ...options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if ('time' in patch || 'offsetSec' in patch) options.time = patch.time ?? patch.offsetSec;\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n options.speed = speed;\n delete options.reverse;\n }\n return result;\n };\n result.setWeight = result.setIntensity = (value) => result.updateParams({ intensityScale: value });\n result.setSpeed = result.setPlaybackRate = (speed) => result.updateParams({ speed });\n result.setTime = result.seek = (time) => result.updateParams({ time });\n return autoPlay ? start() : result;\n }\n\n private forget(playback: Playback): void {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n private updatePlayback(playback: Playback, patch: CharacterPlaybackOptions): void {\n this.validateEasing(patch);\n const connector = playback.connector;\n const action = connector.getAction(playback.id);\n if (connector !== this.connector || !action) throw new Error('Unknown, released or obsolete playback handle.');\n const options = { ...playback.options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if (['weight', 'intensity', 'intensityScale', 'blendMode', 'easing', 'balance', 'balanceMap', 'mixWeights'].some((key) => key in patch)) {\n const clip = this.materialize(playback.source, options, playback.inheritedStarts);\n connector.replaceClip(playback.id, clip);\n if ('blendMode' in patch) connector.control(playback.id, { type: 'setBlendMode', blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal' });\n }\n if ('mixerWeight' in patch) connector.control(playback.id, { type: 'setWeight', weight: patch.mixerWeight });\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? action.timeScale;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n connector.control(playback.id, { type: 'setSpeed', speed });\n options.speed = speed;\n delete options.reverse;\n }\n if ('time' in patch || 'offsetSec' in patch) {\n options.time = patch.time ?? patch.offsetSec;\n connector.control(playback.id, { type: 'seek', seconds: options.time });\n }\n if ('loopMode' in patch || 'loop' in patch || 'repeatCount' in patch) {\n if (playback.terminal) {\n playback.replay({ ...options, time: action.time });\n return;\n }\n connector.control(playback.id, { type: 'setLoop', loop: this.nativeOptions(options, action.getClip()).loop! });\n }\n if ('clampWhenFinished' in patch || 'finalPose' in patch) connector.control(playback.id, { type: 'setFinalPose', finalPose: this.nativeOptions(options, action.getClip()).finalPose! });\n playback.options = options;\n if (!connector.getAction(playback.id)) this.forget(playback);\n }\n\n registerAnimationClips(clips: AnimationClip[]): void {\n const model = this.requireModel();\n for (const clip of clips) {\n if (this.sources.get(clip.name)?.kind === 'native' && (this.sources.get(clip.name) as { clip: AnimationClip }).clip === clip) continue;\n const [ir] = serializeAnimationClips(model, [clip], this.inspection!);\n this.core.register_animation_clip(json(ir), 'baked');\n this.sources.set(clip.name, { name: clip.name, kind: 'native', clip });\n }\n }\n loadAnimationClips(clips: AnimationClip[]): void {\n this.stopAllAnimations();\n for (const source of [...this.sources.values()]) if (source.kind === 'native') {\n this.sources.delete(source.name);\n this.core.remove_animation_clip(source.name);\n }\n this.registerAnimationClips(clips ?? []);\n this.restartHair();\n }\n removeAnimationClip(name: string): boolean {\n this.stopAnimation(name);\n this.sources.delete(name);\n return this.core.remove_animation_clip(name);\n }\n getAnimationClips(): any[] { return parse(this.core.get_animation_clips()); }\n playAnimation(name: string, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const source = this.sources.get(name);\n if (!source) throw new Error(`Unknown animation clip: ${name}`);\n return this.handle(source, options, true);\n }\n private build(source: Source, options: CharacterPlaybackOptions, play: boolean): CharacterPlaybackHandle {\n this.requireModel();\n this.validateEasing(options);\n this.compile(source, options);\n this.sources.set(source.name, source);\n return this.handle(source, options, play);\n }\n buildClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n if (options.semanticAnimation) throw new Error('Decode legacy named animation tracks to numeric AU curves before building a clip.');\n return this.build({ name, kind: 'curves', input: copy(curves), options: copy(options) }, options, false);\n }\n snippetToClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildClip(name, curves, options); }\n buildTypedClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return this.build({ name, kind: 'typed', input: copy(channels), options: copy(options) }, options, false);\n }\n typedSnippetToClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(name, channels, options); }\n playSnippet(snippet: string | { name: string; curves: JsonObject }, curvesOrOptions: JsonObject = {}, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return typeof snippet === 'string' ? this.buildClip(snippet, curvesOrOptions, options).play() : this.buildClip(snippet.name, snippet.curves, curvesOrOptions).play();\n }\n playTypedSnippet(snippet: { name: string; channels: any[] }, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(snippet.name, snippet.channels, options).play(); }\n playClip(value: string | CharacterPlaybackHandle): CharacterPlaybackHandle { return typeof value === 'string' ? this.playAnimation(value) : value.play(); }\n supportsClipCurves(): boolean { return true; }\n cleanupSnippet(name: string): void { this.stopAnimation(name); this.sources.delete(name); this.core.cleanup_snippet(name); }\n crossfadeTo(name: string, seconds: number, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const outgoing = [...this.current.values()].filter((playback) => !playback.source.name.startsWith('__embody_'));\n const handle = this.playAnimation(name, { ...options, fadeInSec: seconds });\n for (const playback of outgoing) if (playback.connector.getAction(playback.id)) playback.connector.fadeOut(playback.id, seconds);\n return handle;\n }\n stopAnimation(name: string): void {\n const playback = this.current.get(name);\n if (!playback) return;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n stopAllAnimations(): void {\n for (const playback of [...this.playbacks.values()]) {\n if (playback.source.kind === 'compiled') continue;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n }\n pauseAnimation(name: string): void { const p = this.current.get(name); if (p) p.connector.control(p.id, { type: 'pause' }); }\n resumeAnimation(name: string): void {\n const p = this.current.get(name);\n if (!p) return;\n if (p.terminal) p.replay({ ...p.options, time: p.connector.getAction(p.id)?.time ?? 0 });\n else p.connector.control(p.id, { type: 'resume' });\n }\n pauseAllAnimations(): void { for (const p of this.playbacks.values()) if (!p.terminal) p.connector.control(p.id, { type: 'pause' }); }\n resumeAllAnimations(): void { for (const name of [...this.current.keys()]) this.resumeAnimation(name); }\n updateClipParams(name: string, options: CharacterPlaybackOptions): void { const p = this.current.get(name); if (p) this.updatePlayback(p, options); }\n setAnimationSpeed(name: string, value: number): void { this.updateClipParams(name, { speed: value }); }\n setAnimationIntensity(name: string, value: number): void { this.updateClipParams(name, { intensityScale: value }); }\n setAnimationLoop(name: string, value: boolean): void { this.updateClipParams(name, { loopMode: value ? 'repeat' : 'once' }); }\n setAnimationLoopMode(name: string, value: string): void { this.updateClipParams(name, { loopMode: value }); }\n setAnimationRepeatCount(name: string, value: number | null): void { this.updateClipParams(name, { loopMode: 'repeat', repeatCount: value }); }\n setAnimationReverse(name: string, value: boolean): void { this.updateClipParams(name, { reverse: value }); }\n setAnimationBlendMode(name: string, value: string): void { this.updateClipParams(name, { blendMode: value }); }\n setAnimationEasing(name: string, value: string): void { this.validateEasing({ easing: value }); this.updateClipParams(name, { easing: value }); }\n seekAnimation(name: string, value: number): void { this.updateClipParams(name, { time: value }); }\n setAnimationTime(name: string, value: number): void { this.seekAnimation(name, value); }\n setSnippetTime(name: string, value: number): void { this.seekAnimation(name, value); }\n seekSnippet(name: string, value: number): void { this.seekAnimation(name, value); }\n seek(name: string, value: number): void { this.seekAnimation(name, value); }\n setAnimationTimeScale(value: number): void { this.requireConnector().setTimeScale(value); this.timeScale = value; }\n getAnimationState(name: string): JsonObject {\n const p = this.current.get(name);\n const action = p?.connector.getAction(p.id);\n if (!action || !p) { if (p) this.forget(p); return { name, playing: false, isPlaying: false }; }\n const playing = action.isRunning();\n return { name, actionId: p.id, playing, isPlaying: playing, paused: action.paused, completed: p.terminal,\n time: action.time, duration: action.getClip().duration, speed: action.timeScale,\n intensityScale: intensity(p.options), mixerWeight: action.getEffectiveWeight(),\n loopMode: action.loop === LoopOnce ? 'once' : action.loop === LoopPingPong ? 'pingpong' : 'repeat',\n repeatCount: Number.isFinite(action.repetitions) ? action.repetitions : null,\n blendMode: action.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'replace' };\n }\n getPlayingAnimations(): string[] { return [...this.current.keys()].filter((name) => this.getAnimationState(name).playing); }\n\n private commitLive(durationMs = 0): CharacterPlaybackHandle[] {\n const connector = this.requireConnector();\n const duration = Math.max(0, durationMs) / 1000;\n const clip = parse<ClipIR>(this.core.build_live_clip('__embody_live', duration));\n const touched = new Set(parse<ClipIRTrack['target'][]>(this.core.live_command_targets_json()).map(targetKey));\n const tracks = new Map<string, ClipIRTrack>(clip.tracks.map((track) => [targetKey(track.target), track]));\n const handles: CharacterPlaybackHandle[] = [];\n for (const [key, previous] of this.liveTargets) {\n if (tracks.has(key)) continue;\n if (previous.releasing && !touched.has(key)) continue;\n const action = previous.handle.actionId && connector.getAction(previous.handle.actionId);\n if (!action || duration === 0) {\n previous.handle.stop();\n this.liveTargets.delete(key);\n continue;\n }\n // Fade this action's own contribution. Inheriting the already mixed pose\n // would blend it a second time and jump when the released track disappears.\n const nativeTrack = action.getClip().tracks[0] as NativeTrack;\n const sample = Array.from(nativeTrack.createInterpolant().evaluate(action.time));\n const released: ClipIRTrack = { ...previous.track, times: [0, duration], values: [...sample, ...sample], inheritStart: false };\n const releaseClip = { ...clip, name: previous.handle.name, tracks: [released] };\n const handle = this.handle({ name: releaseClip.name, kind: 'compiled', clip: releaseClip },\n { loopMode: 'once', finalPose: 'release', mixerWeight: action.getEffectiveWeight() }, true);\n connector.fadeOut(handle.actionId!, duration);\n const record = { track: released, handle, releasing: true };\n this.liveTargets.set(key, record);\n void handle.promise.then(() => { if (this.liveTargets.get(key) === record) this.liveTargets.delete(key); });\n handles.push(handle);\n }\n for (const [key, track] of tracks) {\n const previous = this.liveTargets.get(key);\n const endpoint = (value: ClipIRTrack) => value.values.slice(value.values.length / value.times.length * (value.times.length - 1));\n // Rust identifies semantic command destinations. Concrete targets outside\n // that command keep their native action, including an intentionally cancelled one.\n if (previous && !previous.releasing && !touched.has(key) && json(endpoint(previous.track)) === json(endpoint(track))) continue;\n const name = previous?.handle.name ?? `__embody_live_${this.nextLiveTarget++}`;\n const outgoing = previous?.handle.actionId && connector.getAction(previous.handle.actionId);\n let nativeTrack = track;\n if (duration > 0 && outgoing) {\n const start = Array.from((outgoing.getClip().tracks[0] as NativeTrack).createInterpolant().evaluate(outgoing.time));\n nativeTrack = { ...track, values: [...start, ...endpoint(track)], inheritStart: false };\n }\n const targetClip = { ...clip, name, tracks: [nativeTrack] };\n const handle = this.handle({ name, kind: 'compiled', clip: targetClip }, { loopMode: 'once', finalPose: 'hold' }, true);\n this.liveTargets.set(key, { track, handle, releasing: false });\n handles.push(handle);\n }\n return handles;\n }\n private mutateLive(mutate: () => void, durationMs = 0): CharacterPlaybackHandle[] {\n this.requireModel();\n this.core.begin_live_command();\n mutate();\n return this.commitLive(durationMs);\n }\n private transition(handles: CharacterPlaybackHandle[]): CharacterTransitionHandle {\n // A single control may own several concrete tracks. Replacement of one\n // shared target must not settle or cancel its other independent targets.\n let settled = handles.length === 0;\n const promise = Promise.all(handles.map((handle) => handle.promise)).then(() => { settled = true; });\n const control = (command: 'pause' | 'resume' | 'cancel') => {\n if (settled) return;\n for (const handle of handles) {\n const playback = handle.actionId && this.playbacks.get(handle.actionId);\n if (!playback || !playback.connector.getAction(playback.id)) continue;\n if (command === 'cancel' || !playback.terminal) handle[command]();\n }\n };\n return { promise, pause: () => control('pause'), resume: () => control('resume'), cancel: () => control('cancel') };\n }\n setAU(id: number, value: number, balance = this.core.get_au_balance(id)): void { this.mutateLive(() => this.core.set_au_signed(id, value, balance)); }\n getAU(id: number): number { return this.core.get_au(id); }\n getAUBalance(id: number): number { return this.core.get_au_balance(id); }\n getAUDescriptors(): AUDescriptor[] { return parse(this.core.get_au_descriptors_json()); }\n setContinuum(negative: number, positive: number, value: number, balance = NaN): void { this.mutateLive(() => this.core.set_continuum(negative, positive, value, balance)); }\n getContinuum(negative: number, positive: number): number { return this.core.get_continuum(negative, positive); }\n transitionAU(id: number, value: number, durationMs = 200, balance = this.core.get_au_balance(id)): CharacterTransitionHandle { return this.transition(this.mutateLive(() => this.core.set_au_signed(id, value, balance), durationMs)); }\n setViseme(index: number, value: number, jawScale = 1): void { this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }); }\n getViseme(index: number): number { return this.core.get_viseme(index); }\n getVisemeJawScale(index: number): number { return this.core.get_viseme_jaw_scale(index); }\n setVisemeById(id: string, value: number, jawScale = 1): void { const index = this.core.viseme_slot_index(id); if (index < 0) throw new Error(`Unknown viseme: ${id}`); this.setViseme(index, value, jawScale); }\n transitionViseme(index: number, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }, durationMs)); }\n transitionVisemeById(id: string, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { const index = this.core.viseme_slot_index(id); if (index < 0) return this.transition([]); return this.transitionViseme(index, value, durationMs, jawScale); }\n setAUMixWeight(id: number, value: number): void {\n const weight = Math.max(0, Math.min(1, value));\n this.mutateLive(() => this.core.set_au_mix_weight(id, weight));\n (this.profile.auMixDefaults ??= {})[id] = weight;\n (this.profileSource.auMixDefaults ??= {})[id] = weight;\n }\n getAUMixWeight(id: number): number { return this.core.get_au_mix_weight(id); }\n hasLeftRightBones(id: number): boolean { return this.core.has_left_right_bones(id); }\n setMorph(key: string | number, value: number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }); }\n setMorphOnMeshes(meshNames: string[], key: string | number, value: number): void { this.setMorph(key, value, meshNames); }\n releaseMorph(key: string | number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.release_morph_index(key, json(meshNames)); else this.core.release_morph(key, json(meshNames)); }); }\n transitionMorph(key: string | number, value: number, durationMs = 120, meshNames: string[] = []): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }, durationMs)); }\n\n getMorphTargets(): Record<string, string[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.keys(mesh.morphTargetDictionary ?? {}).sort()])); }\n getMorphTargetIndices(): Record<string, { name: string; index: number }[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.entries(mesh.morphTargetDictionary ?? {}).map(([name, index]) => ({ name, index })).sort((a, b) => a.index - b.index)])); }\n addMorphTarget(target: Parameters<ThreeFrameApplier['addMorphTarget']>[1], options?: Parameters<ThreeFrameApplier['addMorphTarget']>[2]): number { const index = this.applier.addMorphTarget(this.requireModel(), target, options); this.bindModel(); return index; }\n addMorphTargets(targets: Parameters<ThreeFrameApplier['addMorphTargets']>[1], options?: Parameters<ThreeFrameApplier['addMorphTargets']>[2]): Record<string, number> { const result = this.applier.addMorphTargets(this.requireModel(), targets, options); this.bindModel(); return result; }\n private meshCategory(mesh: Object3D): string { return this.profile.meshes?.[mesh.name]?.category ?? 'other'; }\n getMeshList(): JsonObject[] { return (this.inspection?.allMeshes ?? []).map((mesh) => ({ name: mesh.name, visible: mesh.visible, morphCount: mesh.morphTargetInfluences?.length ?? 0, category: this.meshCategory(mesh) })); }\n getBones(): ThreeModelInspection['bones'] { return this.bones; }\n private meshProfile(name: string): JsonObject { return (this.profile.meshes ??= {})[name] ??= { category: 'other' }; }\n setMeshVisible(name: string, visible: boolean): void { this.applier.setMeshVisible(this.requireModel(), name, visible); this.meshProfile(name).visible = visible; }\n highlightMesh(name: string | null, color?: number, value?: number): void { this.applier.highlightMesh(this.requireModel(), name, color, value); }\n getMeshMaterialConfig(name: string): Record<string, unknown> | null { return this.applier.getMeshMaterialConfig(this.requireModel(), name); }\n setMeshMaterialConfig(name: string, value: Parameters<ThreeFrameApplier['setMeshMaterialConfig']>[2]): void { this.applier.setMeshMaterialConfig(this.requireModel(), name, value); const entry = this.meshProfile(name); entry.material = { ...entry.material, ...value }; }\n\n registerHairObjects(objects: Object3D[]): { name: string; isMesh: boolean; isEyebrow: boolean }[] {\n this.hairObjects.clear();\n for (const object of objects) if ((object as Mesh).isMesh) this.hairObjects.set(object.name, object as Mesh);\n for (const category of ['hair', 'eyebrow']) {\n const mesh = [...this.hairObjects.values()].find((object) => this.meshCategory(object) === category);\n const material: any = mesh && (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material);\n if (material) this.hairAppearance[`${category}Color`] = { ...this.hairAppearance[`${category}Color`], baseColor: material.color ? `#${material.color.getHexString()}` : '#000000', emissive: material.emissive ? `#${material.emissive.getHexString()}` : '#000000', emissiveIntensity: material.emissiveIntensity ?? 0 };\n }\n this.restartHair();\n return [...this.hairObjects.values()].map((mesh) => ({ name: mesh.name, isMesh: true, isEyebrow: this.meshCategory(mesh) === 'eyebrow' }));\n }\n getRegisteredHairObjects(): Object3D[] { return [...this.hairObjects.values()]; }\n getHairMorphTargets(name?: string): string[] { const meshes = name ? [this.hairObjects.get(name)] : [...this.hairObjects.values()]; return [...new Set(meshes.flatMap((mesh) => Object.keys(mesh?.morphTargetDictionary ?? {})))].sort(); }\n getHairAppearance(): JsonObject { return copy(this.hairAppearance); }\n private setHairAppearance(category: 'hair' | 'eyebrow', value: string | JsonObject): void {\n const key = `${category}Color`;\n const next = parse(this.wasm.normalize_hair_color_appearance_json(json(value), json(this.hairAppearance[key])));\n this.hairAppearance[key] = next;\n this.applier.applyHairAppearance([...this.hairObjects.values()].filter((mesh) => this.meshCategory(mesh) === category), next);\n }\n setHairColor(value: string | JsonObject): void { this.setHairAppearance('hair', value); }\n setEyebrowColor(value: string | JsonObject): void { this.setHairAppearance('eyebrow', value); }\n setHairBaseColor(value: string): void { this.setHairColor({ baseColor: value }); }\n setEyebrowBaseColor(value: string): void { this.setEyebrowColor({ baseColor: value }); }\n setHairGlow(color: string, value: number): void { this.setHairColor({ emissive: color, emissiveIntensity: value }); }\n setEyebrowGlow(color: string, value: number): void { this.setEyebrowColor({ emissive: color, emissiveIntensity: value }); }\n setHairOutline(value: { show: boolean; color?: string; opacity?: number }): void { Object.assign(this.hairAppearance, { showOutline: value.show }, value.color ? { outlineColor: value.color } : {}, value.opacity !== undefined ? { outlineOpacity: value.opacity } : {}); }\n private restartHair(): void {\n for (const name of [...this.current.keys()]) if (name.startsWith('__embody_hair')) this.stopAnimation(name);\n if (!this.hairConfig.enabled || !this.hairObjects.size || !this.connector) return;\n if (this.hairConfig.idleSwayAmount > 0 || this.hairConfig.windStrength > 0) {\n const curves = parse(this.wasm.build_hair_idle_curves(json(this.hairConfig), this.hairConfig.idleClipDuration));\n if (Object.keys(curves).length) this.playSnippet('__embody_hair_idle', curves, { loopMode: 'repeat', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n }\n setHairPhysicsEnabled(value: boolean): void { this.setHairPhysicsConfig({ enabled: value }); }\n isHairPhysicsEnabled(): boolean { return !!this.hairConfig.enabled; }\n setHairPhysicsConfig(value: JsonObject): void { this.hairConfig = parse(this.core.set_hair_config_json(json(value))); this.restartHair(); }\n getHairPhysicsConfig(): JsonObject { return copy(this.hairConfig); }\n validateHairMorphTargets(): string[] {\n return parse(this.core.get_missing_hair_morph_targets_json(json(this.getHairMorphTargets())));\n }\n applyHairStateToObject(name: string, state: JsonObject): void {\n const mesh = this.hairObjects.get(name);\n if (!mesh) return;\n if (state.visible !== undefined) mesh.visible = state.visible;\n if (state.scale) mesh.scale.set(state.scale.x, state.scale.y, state.scale.z);\n if (state.position) mesh.position.set(state.position.x, state.position.y, state.position.z);\n if (state.color) this.applier.applyHairAppearance([mesh], state.color);\n }\n private authoredHeadMotion(clip: AnimationClip): { horizontal: number; vertical: number; pitch: number } | undefined {\n if (!this.hairConfig.enabled || clip.name.startsWith('__embody_hair') || !this.hairObjects.size) return undefined;\n // Serialize native bindings and sample storage only. The core resolves the\n // character's head role and compiles its configured hair response.\n const tracks: Array<{ boneName: string; current: number[]; reference: number[]; samples: number[][] }> = [];\n for (const track of clip.tracks) {\n if (track.ValueTypeName !== 'quaternion') continue;\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(this.requireModel(), parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ?? skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) continue;\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const stride = track.getValueSize();\n const reference = this.restValues(track);\n if (!reference) continue;\n const samples: number[][] = [];\n for (let index = 0; index < track.times.length; index += 1) {\n const offset = index * stride + (cubic ? 4 : 0);\n samples.push(Array.from(track.values.subarray(offset, offset + 4)));\n }\n tracks.push({ boneName: object.name, current: object.quaternion.toArray(), reference, samples });\n }\n return parse(this.core.resolve_hair_motion_json(json(tracks), clip.blendMode === AdditiveAnimationBlendMode)) ?? undefined;\n }\n private setHairGravity(pitch: number, durationSeconds: number): void {\n const clip = parse<ClipIR>(this.core.build_hair_gravity_clip('__embody_hair_gravity', pitch, durationSeconds, json({ meshNames: [...this.hairObjects.keys()], source: 'hair' })));\n if (!clip.tracks.length) return;\n this.handle({ name: clip.name, kind: 'compiled', clip }, { loopMode: 'once', finalPose: 'hold', blendMode: 'additive' }, true);\n }\n playHairImpulse(horizontal: number, vertical: number): CharacterPlaybackHandle | undefined {\n if (!this.hairConfig.enabled || !this.hairObjects.size) return undefined;\n const curves = parse(this.wasm.build_hair_impulse_curves(json(this.hairConfig), this.hairConfig.impulseClipDuration, horizontal, vertical));\n if (!Object.keys(curves).length) return undefined;\n return this.playSnippet('__embody_hair_impulse', curves, { loopMode: 'once', finalPose: 'release', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n start(): void { this.assertAlive(); this.rendering = true; this.connector?.setRendering(true); }\n stop(): void { this.assertAlive(); this.rendering = false; this.connector?.setRendering(false); }\n clear(): void { this.mutateLive(() => this.core.clear()); }\n resetToNeutral(): void { this.clear(); }\n dispose(): void {\n if (this.disposed) return;\n this.connector?.dispose();\n this.core.free();\n this.playbacks.clear();\n this.current.clear();\n this.sources.clear();\n this.hairObjects.clear();\n this.meshes.length = 0;\n this.meshByName.clear();\n this.bones = {};\n this.liveTargets.clear();\n this.connector = undefined;\n this.inspection = undefined;\n this.boundModel = undefined;\n this.disposed = true;\n }\n}\n\nexport function createRustEmbodyHostUnbound(config: RustEmbodyHostConfig = {}): Embody { return new Embody(config); }\nexport async function createRustEmbodyHost(model: Object3D, config: RustEmbodyHostConfig = {}): Promise<Embody> {\n const character = await Embody.create(config);\n try { character.onReady({ model, meshes: config.meshes, referencePose: config.referencePose }); return character; }\n catch (error) { character.dispose(); throw error; }\n}\n","// CSS gradients need no extra renderer resources or animation loop.\nexport const SCENE_INK_BASE_COLOR = '#29333b';\nexport const SCENE_INK_BASE_GRADIENT =\n 'radial-gradient(ellipse at 50% 42%, #46535c 0%, #35414a 42%, #29333b 76%, #252e35 100%)';\n\nexport type SceneInkCssPalette = readonly [string, string, string];\n\nconst DEFAULT_PALETTE: SceneInkCssPalette = ['#7cb8b2', '#627888', '#8b989f'];\n\nexport function createSceneInkBackgroundCss(palette: SceneInkCssPalette = DEFAULT_PALETTE): string {\n const [a, b, c] = palette;\n // Overlapping soft ellipses give the ink irregular edges without a noise\n // shader, blur filter, canvas, pointer listener or frame-by-frame repaint.\n return [\n `radial-gradient(ellipse 46% 62% at calc(20% + var(--scene-ink-shift-x, 0%)) 30%, color-mix(in srgb, ${a} 24%, transparent), transparent 78%)`,\n `radial-gradient(ellipse 32% 44% at 34% calc(52% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${a} 12%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 48% 60% at calc(82% - var(--scene-ink-shift-x, 0%)) 62%, color-mix(in srgb, ${b} 22%, transparent), transparent 80%)`,\n `radial-gradient(ellipse 28% 38% at 68% calc(26% - var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${b} 10%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 50% 38% at 38% calc(78% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${c} 18%, transparent), transparent 82%)`,\n SCENE_INK_BASE_GRADIENT,\n ].join(', ');\n}\n\nexport const DEFAULT_SCENE_INK_BACKGROUND = createSceneInkBackgroundCss();\n","import * as THREE from 'three';\nimport { createSceneInkBackgroundCss, type SceneInkCssPalette } from './sceneInkBackgroundStyle';\n\nexport type SceneInkBackgroundPalette = readonly [\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n];\n\nexport type SceneInkBackground = {\n setPalette: (palette?: SceneInkBackgroundPalette | null) => void;\n dispose: () => void;\n};\n\nconst toCssColor = (tone: THREE.ColorRepresentation) => `#${new THREE.Color(tone).getHexString()}`;\n\nexport function createSceneInkBackground(\n onBackgroundChange?: (background: string) => void,\n): SceneInkBackground {\n let currentBackground = '';\n let disposed = false;\n\n const applyBackground = (palette?: SceneInkBackgroundPalette | null) => {\n if (disposed) return;\n const colors: SceneInkCssPalette | undefined = palette\n ? [toCssColor(palette[0]), toCssColor(palette[1]), toCssColor(palette[2])]\n : undefined;\n const background = createSceneInkBackgroundCss(colors);\n if (background === currentBackground) return;\n currentBackground = background;\n onBackgroundChange?.(background);\n };\n\n applyBackground();\n\n return {\n setPalette: applyBackground,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n },\n };\n}\n","import * as THREE from 'three';\nimport type { SceneInkBackgroundPalette } from './sceneInkBackground';\n\ntype PaletteMaterial = THREE.Material & {\n color?: THREE.Color;\n emissive?: THREE.Color;\n map?: THREE.Texture | null;\n emissiveMap?: THREE.Texture | null;\n};\n\ntype WeightedColor = {\n color: THREE.Color;\n score: number;\n};\n\ntype CachedPalette = {\n materialPalette?: SceneInkBackgroundPalette | null;\n texturePalette?: SceneInkBackgroundPalette | null;\n texturePalettePromise?: Promise<SceneInkBackgroundPalette | null>;\n};\n\nconst paletteCache = new Map<string, CachedPalette>();\nconst MAX_TEXTURE_SAMPLE_SIZE = 10;\nconst MIN_SAMPLE_SATURATION = 0.04;\nconst MIN_CANDIDATE_DISTANCE = 0.12;\n\n/** Reuse the finished palette on character switches without resampling textures. */\nexport function readCachedCharacterPalette(cacheKey: string): SceneInkBackgroundPalette | null {\n const cached = paletteCache.get(cacheKey);\n return cached?.texturePalette ?? cached?.materialPalette ?? null;\n}\n\nexport function resolveCharacterMaterialPalette(\n model: THREE.Object3D,\n cacheKey: string,\n): SceneInkBackgroundPalette | null {\n const cached = getCachedPalette(cacheKey);\n if (cached.materialPalette !== undefined) {\n return cached.materialPalette;\n }\n\n const samples = collectPaletteSamples(model, false);\n const palette = buildPalette(samples);\n cached.materialPalette = palette;\n return palette;\n}\n\nexport function resolveCharacterTexturePalette(\n model: THREE.Object3D,\n cacheKey: string,\n): Promise<SceneInkBackgroundPalette | null> {\n const cached = getCachedPalette(cacheKey);\n if (cached.texturePalette !== undefined) {\n return Promise.resolve(cached.texturePalette);\n }\n if (cached.texturePalettePromise) {\n return cached.texturePalettePromise;\n }\n\n cached.texturePalettePromise = schedulePaletteExtraction(() => {\n const samples = collectPaletteSamples(model, true);\n const palette = buildPalette(samples);\n cached.texturePalette = palette;\n return palette;\n });\n\n return cached.texturePalettePromise;\n}\n\nfunction getCachedPalette(cacheKey: string): CachedPalette {\n const cached = paletteCache.get(cacheKey) ?? {};\n paletteCache.set(cacheKey, cached);\n return cached;\n}\n\nfunction schedulePaletteExtraction(\n extractPalette: () => SceneInkBackgroundPalette | null,\n): Promise<SceneInkBackgroundPalette | null> {\n return new Promise((resolve) => {\n const run = () => resolve(extractPalette());\n\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(run, { timeout: 700 });\n return;\n }\n\n globalThis.setTimeout(run, 0);\n });\n}\n\nfunction collectPaletteSamples(model: THREE.Object3D, includeTextures: boolean): WeightedColor[] {\n const samples: WeightedColor[] = [];\n const seenMaterials = new Set<string>();\n const seenTextures = new Set<string>();\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.material) {\n return;\n }\n\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n for (const material of materials) {\n if (!material || seenMaterials.has(material.uuid)) {\n continue;\n }\n seenMaterials.add(material.uuid);\n collectMaterialSamples(material as PaletteMaterial, samples, seenTextures, includeTextures);\n }\n });\n\n return samples;\n}\n\nfunction collectMaterialSamples(\n material: PaletteMaterial,\n samples: WeightedColor[],\n seenTextures: Set<string>,\n includeTextures: boolean,\n): void {\n pushColorSample(samples, material.color, 1.25);\n pushColorSample(samples, material.emissive, 0.8);\n\n if (!includeTextures) {\n return;\n }\n\n if (material.map && !seenTextures.has(material.map.uuid)) {\n seenTextures.add(material.map.uuid);\n samples.push(...sampleTexture(material.map));\n }\n\n if (material.emissiveMap && !seenTextures.has(material.emissiveMap.uuid)) {\n seenTextures.add(material.emissiveMap.uuid);\n samples.push(...sampleTexture(material.emissiveMap).map(({ color, score }) => ({\n color,\n score: score * 0.65,\n })));\n }\n}\n\nfunction pushColorSample(samples: WeightedColor[], color: THREE.Color | undefined, score: number): void {\n if (!color || !isUsableColor(color)) {\n return;\n }\n\n samples.push({\n color: color.clone(),\n score,\n });\n}\n\nfunction sampleTexture(texture: THREE.Texture): WeightedColor[] {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const image = texture.image as CanvasImageSource | undefined;\n const imageSize = getImageSize(image);\n if (!image || !imageSize) {\n return [];\n }\n\n const canvas = document.createElement('canvas');\n const width = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.width);\n const height = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.height);\n canvas.width = width;\n canvas.height = height;\n\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return [];\n }\n\n try {\n context.drawImage(image, 0, 0, width, height);\n const data = context.getImageData(0, 0, width, height).data;\n const samples: WeightedColor[] = [];\n\n for (let index = 0; index < data.length; index += 4) {\n const alpha = data[index + 3] / 255;\n if (alpha < 0.18) {\n continue;\n }\n\n const color = new THREE.Color(\n data[index] / 255,\n data[index + 1] / 255,\n data[index + 2] / 255,\n );\n if (!isUsableColor(color)) {\n continue;\n }\n\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n samples.push({\n color,\n score: alpha * (0.4 + hsl.s * 1.3),\n });\n }\n\n return samples;\n } catch {\n return [];\n }\n}\n\nfunction getImageSize(image: CanvasImageSource | undefined): { width: number; height: number } | null {\n if (!image || !('width' in image) || !('height' in image)) {\n return null;\n }\n\n const width = Number(image.width);\n const height = Number(image.height);\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nfunction isUsableColor(color: THREE.Color): boolean {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n return hsl.l > 0.05 && hsl.l < 0.94 && hsl.s >= MIN_SAMPLE_SATURATION;\n}\n\nfunction buildPalette(samples: WeightedColor[]): SceneInkBackgroundPalette | null {\n if (samples.length === 0) {\n return null;\n }\n\n const buckets = new Map<number, { color: THREE.Color; score: number }>();\n for (const sample of samples) {\n const hsl = { h: 0, s: 0, l: 0 };\n sample.color.getHSL(hsl);\n const bucketId = Math.floor(hsl.h * 18);\n const bucket = buckets.get(bucketId) ?? { color: new THREE.Color(0, 0, 0), score: 0 };\n bucket.color.r += sample.color.r * sample.score;\n bucket.color.g += sample.color.g * sample.score;\n bucket.color.b += sample.color.b * sample.score;\n bucket.score += sample.score;\n buckets.set(bucketId, bucket);\n }\n\n const candidates = Array.from(buckets.values())\n .filter((bucket) => bucket.score > 0)\n .map((bucket) => ({\n color: massageBackgroundTone(bucket.color.multiplyScalar(1 / bucket.score)),\n score: bucket.score,\n }))\n .sort((a, b) => b.score - a.score);\n\n const selected: THREE.Color[] = [];\n for (const candidate of candidates) {\n const distinctEnough = selected.every((color) => colorDistance(color, candidate.color) >= MIN_CANDIDATE_DISTANCE);\n if (!distinctEnough) {\n continue;\n }\n\n selected.push(candidate.color);\n if (selected.length === 3) {\n break;\n }\n }\n\n if (selected.length === 0) {\n return null;\n }\n\n while (selected.length < 3) {\n selected.push(createCompanionTone(selected[0], selected.length));\n }\n\n return [selected[0], selected[1], selected[2]];\n}\n\nfunction massageBackgroundTone(color: THREE.Color): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n const saturation = THREE.MathUtils.clamp(Math.max(hsl.s * 1.35, 0.46), 0.46, 0.82);\n const lightness = THREE.MathUtils.clamp(hsl.l + 0.08, 0.42, 0.66);\n return new THREE.Color().setHSL(hsl.h, saturation, lightness);\n}\n\nfunction createCompanionTone(source: THREE.Color, index: number): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n source.getHSL(hsl);\n const hueOffset = index === 1 ? 0.075 : -0.065;\n return new THREE.Color().setHSL(\n THREE.MathUtils.euclideanModulo(hsl.h + hueOffset, 1),\n THREE.MathUtils.clamp(hsl.s * (index === 1 ? 0.92 : 0.82), 0.38, 0.76),\n THREE.MathUtils.clamp(hsl.l + (index === 1 ? 0.04 : -0.03), 0.38, 0.68),\n );\n}\n\nfunction colorDistance(a: THREE.Color, b: THREE.Color): number {\n const dr = a.r - b.r;\n const dg = a.g - b.g;\n const db = a.b - b.b;\n return Math.sqrt(dr * dr + dg * dg + db * db);\n}\n","import { Box3 } from 'three';\nimport type { AnimationClip, Mesh, Object3D, Scene } from 'three';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\nexport type CharacterModelLoadResult = { model: Object3D; meshes: Mesh[]; animations: AnimationClip[]; gltf: GLTF | null };\nexport type CharacterModelLoadOptions = { onProgress?: (progress: number) => void; castShadows?: boolean; dracoDecoderPath?: string };\nexport type CharacterModelTransform = { modelOffset?: { x?: number; y?: number; z?: number }; modelRotation?: { x?: number; y?: number; z?: number }; modelScale?: number; modelGroundClearance?: number };\n\nlet draco: DRACOLoader | null = null;\nlet dracoPath = '';\nlet gltfLoader: GLTFLoader | null = null;\nlet gltfLoaderUsesDraco = false;\nlet fbxLoader: FBXLoader | null = null;\n\nconst getGltfLoader = (dracoDecoderPath?: string) => {\n const wantsDraco = typeof dracoDecoderPath === 'string' && dracoDecoderPath.length > 0;\n const normalizedPath = wantsDraco\n ? (dracoDecoderPath!.endsWith('/') ? dracoDecoderPath! : `${dracoDecoderPath!}/`)\n : '';\n\n // Rebuild only when Draco enablement/path changes. Non-Draco assets must not\n // pay for constructing/attaching DRACOLoader at all.\n if (!gltfLoader || gltfLoaderUsesDraco !== wantsDraco || (wantsDraco && normalizedPath !== dracoPath)) {\n draco?.dispose();\n draco = null;\n dracoPath = normalizedPath;\n gltfLoaderUsesDraco = wantsDraco;\n gltfLoader = new GLTFLoader();\n if (wantsDraco) {\n draco = new DRACOLoader().setDecoderPath(normalizedPath).setDecoderConfig({ type: 'wasm' });\n gltfLoader.setDRACOLoader(draco);\n }\n }\n return gltfLoader;\n};\n\nconst prepare = (model: Object3D, castShadows = true) => {\n const meshes: Mesh[] = [];\n model.traverse((object: any) => {\n if (!object.isMesh) return;\n if (castShadows) object.castShadow = true;\n if (object.morphTargetInfluences?.length) meshes.push(object);\n });\n return meshes;\n};\n\nconst progress = (listener?: (progress: number) => void) => {\n let last = -1;\n return (event: ProgressEvent) => {\n if (!listener || !event.lengthComputable) return;\n const next = Math.min(100, Math.max(0, Math.round(event.loaded / event.total * 100)));\n if (next !== last) { last = next; listener(next); }\n };\n};\n\nexport function applyCharacterModelTransform(model: Object3D, value: CharacterModelTransform = {}) {\n if (value.modelOffset) model.position.set(value.modelOffset.x ?? 0, value.modelOffset.y ?? 0, value.modelOffset.z ?? 0);\n if (value.modelRotation) model.rotation.set(...(['x', 'y', 'z'] as const).map((axis) => (value.modelRotation?.[axis] ?? 0) * Math.PI / 180) as [number, number, number]);\n if (Number.isFinite(value.modelScale) && (value.modelScale ?? 0) > 0) model.scale.setScalar(value.modelScale!);\n if (Number.isFinite(value.modelGroundClearance)) { model.updateMatrixWorld(true); const min = new Box3().setFromObject(model).min.y; if (Number.isFinite(min) && min < value.modelGroundClearance!) model.position.y += value.modelGroundClearance! - min; }\n}\n\nexport function disposeCharacterModel(scene: Scene | null, model: Object3D) {\n scene?.remove(model);\n model.traverse((object: any) => {\n object.geometry?.dispose?.();\n for (const material of object.material ? (Array.isArray(object.material) ? object.material : [object.material]) : []) {\n for (const value of Object.values(material) as any[]) if (value?.isTexture) value.dispose?.();\n material.dispose?.();\n }\n });\n}\n\nexport function loadCharacterModel(url: string, options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const done = (model: Object3D, animations: AnimationClip[], gltf: GLTF | null) => ({ model, meshes: prepare(model, options.castShadows), animations, gltf });\n if (/\\.fbx(?:\\?|$)/i.test(url)) {\n fbxLoader ??= new FBXLoader();\n return new Promise((resolve, reject) => fbxLoader!.load(url, (model) => resolve(done(model, model.animations ?? [], null)), progress(options.onProgress), reject));\n }\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.load(url, (gltf) => resolve(done(gltf.scene, gltf.animations ?? [], gltf)), progress(options.onProgress), reject));\n}\n\nexport function parseCharacterModel(data: ArrayBuffer, resourcePath = '', options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.parse(data, resourcePath, (gltf) => resolve({ model: gltf.scene, meshes: prepare(gltf.scene, options.castShadows), animations: gltf.animations ?? [], gltf }), reject));\n}\n","import * as THREE from 'three';\n\nconst THREE_RENDERED_MORPH_SEMANTICS = ['position', 'normal', 'color'] as const;\ntype ThreeRenderedMorphSemantic = typeof THREE_RENDERED_MORPH_SEMANTICS[number];\ntype ThreeMorphAttribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;\n\nexport interface CharacterMorphLayoutRepair {\n meshName: string;\n paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>>;\n removedEmptyChannels: ThreeRenderedMorphSemantic[];\n paddedInfluences: number;\n}\n\nfunction resolveMorphTargetCount(mesh: THREE.Mesh): number {\n const morphAttributes = mesh.geometry.morphAttributes;\n const attributeCount = THREE_RENDERED_MORPH_SEMANTICS.reduce(\n (count, semantic) => Math.max(count, morphAttributes[semantic]?.length ?? 0),\n 0,\n );\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n const dictionaryCount = Object.values(mesh.morphTargetDictionary ?? {}).reduce((count, index) => {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph target dictionary index: ${index}.`,\n );\n }\n return Math.max(count, index + 1);\n }, 0);\n\n return Math.max(attributeCount, influenceCount, dictionaryCount);\n}\n\nfunction createNeutralMorphAttribute(\n mesh: THREE.Mesh,\n semantic: ThreeRenderedMorphSemantic,\n existingAttributes: ThreeMorphAttribute[],\n targetIndex: number,\n): THREE.BufferAttribute {\n const geometry = mesh.geometry;\n const baseAttribute = geometry.getAttribute(semantic);\n const template = baseAttribute ?? existingAttributes.find(Boolean);\n if (!template) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" cannot repair morph ${semantic}[${targetIndex}] `\n + 'because it has no base or existing attribute to copy.',\n );\n }\n\n const neutral = template.clone();\n if (geometry.morphTargetsRelative || !baseAttribute) {\n for (let vertexIndex = 0; vertexIndex < neutral.count; vertexIndex += 1) {\n for (let component = 0; component < neutral.itemSize; component += 1) {\n neutral.setComponent(vertexIndex, component, 0);\n }\n }\n }\n\n const targetName = Object.entries(mesh.morphTargetDictionary ?? {})\n .find(([, index]) => index === targetIndex)?.[0];\n neutral.name = targetName ?? '';\n return neutral;\n}\n\n/** Repair recoverable channel holes before Three.js builds its morph texture. */\nexport function normalizeRenderableCharacterMorphAttributes(\n model: THREE.Object3D,\n): CharacterMorphLayoutRepair[] {\n const repairs: CharacterMorphLayoutRepair[] = [];\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.geometry) return;\n\n const morphAttributes = mesh.geometry.morphAttributes;\n const removedEmptyChannels: ThreeRenderedMorphSemantic[] = [];\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n if (semantic !== 'position' && morphAttributes[semantic]?.length === 0) {\n delete morphAttributes[semantic];\n removedEmptyChannels.push(semantic);\n }\n }\n\n const targetCount = resolveMorphTargetCount(mesh);\n if (targetCount === 0) {\n if (morphAttributes.position?.length === 0) {\n delete morphAttributes.position;\n removedEmptyChannels.push('position');\n }\n if (removedEmptyChannels.length > 0) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels: {},\n removedEmptyChannels,\n paddedInfluences: 0,\n });\n }\n return;\n }\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n if (!positionCount) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has morph targets but no base position attribute.`,\n );\n }\n\n const paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>> = {};\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n let attributes = morphAttributes[semantic];\n if (!attributes) {\n if (semantic !== 'position') continue;\n attributes = [];\n morphAttributes.position = attributes;\n }\n\n const baseAttribute = mesh.geometry.getAttribute(semantic);\n const referenceAttribute = baseAttribute ?? attributes.find(Boolean);\n const expectedItemSize = referenceAttribute?.itemSize;\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n const attribute = attributes[targetIndex];\n if (!attribute) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n mesh,\n semantic,\n attributes,\n targetIndex,\n );\n paddedChannels[semantic] = (paddedChannels[semantic] ?? 0) + 1;\n continue;\n }\n\n if (attribute.count !== positionCount || attribute.itemSize !== expectedItemSize) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph ${semantic}[${targetIndex}] `\n + `(count=${attribute.count}, itemSize=${attribute.itemSize}; `\n + `expected count=${positionCount}, itemSize=${expectedItemSize}).`,\n );\n }\n }\n }\n\n const influences = mesh.morphTargetInfluences ?? [];\n const paddedInfluences = targetCount - influences.length;\n while (influences.length < targetCount) {\n influences.push(0);\n }\n mesh.morphTargetInfluences = influences;\n\n if (\n removedEmptyChannels.length > 0\n || Object.keys(paddedChannels).length > 0\n || paddedInfluences > 0\n ) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels,\n removedEmptyChannels,\n paddedInfluences,\n });\n }\n });\n\n return repairs;\n}\n\nexport function assertRenderableCharacterMorphAttributes(model: THREE.Object3D): void {\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh) return;\n\n const morphAttributes = mesh.geometry?.morphAttributes;\n const primary = morphAttributes?.position\n ?? morphAttributes?.normal\n ?? morphAttributes?.color;\n const targetCount = primary?.length ?? 0;\n if (targetCount === 0) return;\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n const invalidSemantics = THREE_RENDERED_MORPH_SEMANTICS.filter((semantic) => {\n const attributes = morphAttributes[semantic];\n if (semantic === 'position' && !attributes) return true;\n if (!attributes) return false;\n const expectedItemSize = mesh.geometry.getAttribute(semantic)?.itemSize\n ?? attributes.find(Boolean)?.itemSize;\n return attributes.length !== targetCount\n || Array.from({ length: targetCount }, (_, index) => attributes[index])\n .some((attribute) => (\n !attribute\n || attribute.count !== positionCount\n || attribute.itemSize !== expectedItemSize\n ));\n });\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n\n if (invalidSemantics.length > 0 || influenceCount !== targetCount) {\n const channelCounts = THREE_RENDERED_MORPH_SEMANTICS\n .map((semantic) => `${semantic}=${morphAttributes[semantic]?.length ?? 0}`)\n .join(', ');\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid Three.js morph layout `\n + `(${channelCounts}, influences=${influenceCount}, expected=${targetCount}).`,\n );\n }\n });\n}\n\n","import {\n ACESFilmicToneMapping,\n Color,\n DirectionalLight,\n HemisphereLight,\n MathUtils,\n Mesh,\n PCFShadowMap,\n PCFSoftShadowMap,\n PerspectiveCamera,\n PlaneGeometry,\n PMREMGenerator,\n Scene,\n ShadowMaterial,\n SRGBColorSpace,\n WebGLCoordinateSystem,\n WebGLRenderer,\n WebGPUCoordinateSystem,\n} from 'three';\nimport type { ColorRepresentation, CoordinateSystem, Light, LightShadow, OrthographicCamera, RenderTarget, Texture } from 'three';\nimport type { WebGPURenderer } from 'three/webgpu';\nimport { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';\nimport { registerSceneRendering } from './sceneRenderingBinding';\nimport { prepareModelSkinning } from './modelSkinning';\n\nexport type DefaultCharacterLightingSettings = {\n envMapEnabled: boolean;\n environmentIntensity: number;\n environmentBlur: number;\n exposure: number;\n ambientIntensity: number;\n keyIntensity: number;\n fillIntensity: number;\n rimIntensity: number;\n shadowOpacity: number;\n};\n\nexport const DEFAULT_CHARACTER_LIGHTING_PRESETS = {\n cleanStudio: { id: 'cleanStudio', label: 'Soft Studio', settings: { envMapEnabled: true, environmentIntensity: .24, environmentBlur: .04, exposure: 1.08, ambientIntensity: .32, keyIntensity: .52, fillIntensity: .18, rimIntensity: .08, shadowOpacity: .22 } },\n softFill: { id: 'softFill', label: 'Soft Fill', settings: { envMapEnabled: true, environmentIntensity: .3, environmentBlur: .04, exposure: 1.1, ambientIntensity: .38, keyIntensity: .44, fillIntensity: .24, rimIntensity: .1, shadowOpacity: .18 } },\n inspection: { id: 'inspection', label: 'Inspection', settings: { envMapEnabled: true, environmentIntensity: .45, environmentBlur: .035, exposure: 1.18, ambientIntensity: .48, keyIntensity: .58, fillIntensity: .32, rimIntensity: .14, shadowOpacity: .12 } },\n contrast: { id: 'contrast', label: 'Contrast', settings: { envMapEnabled: true, environmentIntensity: .2, environmentBlur: .035, exposure: 1.08, ambientIntensity: .25, keyIntensity: .7, fillIntensity: .12, rimIntensity: .22, shadowOpacity: .28 } },\n} as const;\n\nexport type DefaultCharacterLightingPresetId = keyof typeof DEFAULT_CHARACTER_LIGHTING_PRESETS;\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_ID: DefaultCharacterLightingPresetId = 'cleanStudio';\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_IDS = Object.keys(DEFAULT_CHARACTER_LIGHTING_PRESETS) as DefaultCharacterLightingPresetId[];\nexport const DEFAULT_CHARACTER_LIGHTING_SETTINGS: DefaultCharacterLightingSettings = { ...DEFAULT_CHARACTER_LIGHTING_PRESETS.cleanStudio.settings };\n\nexport const CHARACTER_SCENE_TYPES = {\n studio: { id: 'studio', label: 'Studio', description: 'Transparent background, soft studio lighting, ground shadow.', background: null, lightingPreset: 'cleanStudio', shadowPlane: true },\n showcase: { id: 'showcase', label: 'Showcase', description: 'Dark backdrop with contrasty key/rim lighting for presentation shots.', background: 0x101216, lightingPreset: 'contrast', shadowPlane: true },\n inspection: { id: 'inspection', label: 'Inspection', description: 'Bright, even lighting on a light backdrop for close-up review.', background: 0xe8eaed, lightingPreset: 'inspection', shadowPlane: true },\n void: { id: 'void', label: 'Void', description: 'Transparent background, soft fill lighting, no ground shadow.', background: null, lightingPreset: 'softFill', shadowPlane: false },\n} as const;\nexport type CharacterSceneTypeId = keyof typeof CHARACTER_SCENE_TYPES;\nexport const CHARACTER_SCENE_TYPE_IDS = Object.keys(CHARACTER_SCENE_TYPES) as CharacterSceneTypeId[];\nexport const DEFAULT_CHARACTER_SCENE_TYPE_ID: CharacterSceneTypeId = 'studio';\n\nexport type DefaultCharacterSceneOptions = {\n type?: CharacterSceneTypeId;\n background?: ColorRepresentation | null;\n cameraFov?: number;\n pixelRatioCap?: number;\n shadows?: boolean;\n lightingPreset?: DefaultCharacterLightingPresetId;\n lighting?: Partial<DefaultCharacterLightingSettings>;\n shadowPlane?: boolean;\n manageResize?: boolean;\n};\n/** Saved per-character appearance; renderer preference and DOM ownership stay separate. */\nexport type CharacterSceneConfiguration = Pick<DefaultCharacterSceneOptions,\n 'type' | 'cameraFov' | 'shadows' | 'lightingPreset' | 'lighting' | 'shadowPlane'> & {\n background?: string | number | null;\n };\n\nexport type DefaultCharacterSceneAsyncOptions = DefaultCharacterSceneOptions & {\n /** Auto (default) tries native WebGPU initialization, then falls back to WebGL. */\n renderer?: CharacterSceneRendererPreference;\n /** Persistent settings take precedence over the legacy renderer option. */\n rendering?: Partial<CharacterSceneRenderingSettings>;\n /** Cancels construction, not ownership of a successfully returned scene. */\n signal?: AbortSignal;\n /** Compatibility notification; rendering snapshots also expose device loss. */\n onDeviceLost?: (error: Error) => void;\n};\n\nexport type CharacterSceneRenderer = WebGLRenderer | WebGPURenderer;\nexport type CharacterSceneBackend = 'webgl' | 'webgpu';\nexport type CharacterSceneRendererPreference = 'auto' | CharacterSceneBackend;\n\ntype CharacterScene<R extends CharacterSceneRenderer> = {\n container: HTMLElement;\n scene: Scene;\n renderer: R;\n camera: PerspectiveCamera;\n lighting: ReturnType<typeof createDefaultCharacterLighting>;\n shadowPlane: ReturnType<typeof createShadowPlane> | null;\n sceneType: CharacterSceneTypeId;\n ownsScene: true;\n resize: () => void;\n setSceneSettings: (settings: CharacterSceneConfiguration) => void;\n dispose: () => void;\n};\n\nexport type DefaultCharacterScene = CharacterScene<WebGLRenderer>;\nexport type CharacterSceneRenderingSettings = { preference: CharacterSceneRendererPreference };\nexport type CharacterSceneRenderingStatus = 'initializing' | 'switching' | 'ready' | 'error' | 'lost' | 'disposed';\nexport type CharacterSceneRenderingSnapshot = {\n readonly settings: CharacterSceneRenderingSettings;\n readonly status: CharacterSceneRenderingStatus;\n readonly error: Error | null;\n} & (\n | { readonly backend: 'webgl'; readonly renderer: WebGLRenderer }\n | { readonly backend: 'webgpu'; readonly renderer: WebGPURenderer }\n | { readonly backend: null; readonly renderer: null }\n);\nexport type CharacterSceneRendererLease = { readonly renderer: CharacterSceneRenderer; release(): void };\nexport interface CharacterSceneRenderingController {\n getSettings(): CharacterSceneRenderingSettings;\n getSnapshot(): CharacterSceneRenderingSnapshot;\n setSettings(patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot>;\n subscribe(listener: (snapshot: CharacterSceneRenderingSnapshot) => void): () => void;\n /** Borrow for capture/readback; release in finally. Unavailable during switching/loss. */\n acquireRenderer(): CharacterSceneRendererLease;\n /** Drain borrowed work, then synchronously detach/free caller-owned resources, even after loss/disposal. */\n releaseSceneResources(release: () => void): Promise<void>;\n}\nexport type DefaultCharacterSceneRuntimeOptions = DefaultCharacterSceneAsyncOptions;\nexport type DefaultCharacterSceneRuntime = Omit<CharacterScene<CharacterSceneRenderer>, 'renderer' | 'dispose'> & {\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n dispose(): Promise<void>;\n readonly rendering: CharacterSceneRenderingController;\n readonly ready: Promise<CharacterSceneRenderingSnapshot>;\n};\nexport type ReadyDefaultCharacterScene = (\n | (Omit<DefaultCharacterScene, 'dispose'> & { readonly backend: 'webgl' })\n | (Omit<CharacterScene<WebGPURenderer>, 'dispose'> & { readonly backend: 'webgpu' })\n) & { readonly rendering: CharacterSceneRenderingController; dispose(): Promise<void> };\n\n// Register each resource as it is acquired. A failing disposer must not prevent\n// later resources from being released, and repeated disposal is harmless.\nfunction createDisposer() {\n const callbacks: Array<() => void> = [];\n let disposed = false;\n return {\n add: (callback: () => void) => { callbacks.push(callback); },\n isDisposed: () => disposed,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n let failed = false;\n let firstError: unknown;\n for (const callback of callbacks.reverse()) {\n try { callback(); } catch (error) {\n if (!failed) firstError = error;\n failed = true;\n }\n }\n callbacks.length = 0;\n if (failed) throw firstError;\n },\n };\n}\n\nfunction rollback(dispose: () => void) {\n // Preserve the construction/preparation error after attempting all cleanup.\n try { dispose(); } catch { /* The original failure is more useful to callers. */ }\n}\n\nconst finite = (value: unknown, min: number, max: number, fallback: number) => {\n const number = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(number) ? MathUtils.clamp(number, min, max) : fallback;\n};\n\nconst normalize = (value: Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>): DefaultCharacterLightingSettings => ({\n envMapEnabled: typeof value.envMapEnabled === 'boolean' ? value.envMapEnabled : DEFAULT_CHARACTER_LIGHTING_SETTINGS.envMapEnabled,\n environmentIntensity: finite(value.environmentIntensity, 0, 1.5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentIntensity),\n environmentBlur: finite(value.environmentBlur, 0, .04, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentBlur),\n exposure: finite(value.exposure, .6, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.exposure),\n ambientIntensity: finite(value.ambientIntensity, 0, 1.4, DEFAULT_CHARACTER_LIGHTING_SETTINGS.ambientIntensity),\n keyIntensity: finite(value.keyIntensity, 0, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.keyIntensity),\n fillIntensity: finite(value.fillIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.fillIntensity),\n rimIntensity: finite(value.rimIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.rimIntensity),\n shadowOpacity: finite(value.shadowOpacity, 0, .5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.shadowOpacity),\n});\n\nexport const normalizeDefaultCharacterLightingSettings = (value: unknown) =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? normalize(value as Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>)\n : null;\n\nexport function createShadowPlane(scene: Scene, options: { size?: number; opacity?: number; yPosition?: number } = {}) {\n const plane = new Mesh(new PlaneGeometry(options.size ?? 20, options.size ?? 20), new ShadowMaterial({ opacity: options.opacity ?? .3 }));\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = options.yPosition ?? -.01;\n plane.receiveShadow = true;\n plane.name = 'shadowPlane';\n scene.add(plane);\n return plane;\n}\n\nexport function createDefaultCharacterLighting(scene: Scene, renderer: WebGLRenderer, initial: Partial<DefaultCharacterLightingSettings> = {}) {\n return createCharacterLighting(scene, renderer, () => new PMREMGenerator(renderer), initial);\n}\n\ntype ScenePMREM = { fromScene(scene: Scene, sigma?: number): RenderTarget; dispose(): void };\n\ntype LightingRenderer = {\n renderer: CharacterSceneRenderer;\n pmrem: ScenePMREM;\n environment: RenderTarget | null;\n revision: number;\n dispose(): void;\n};\n\nfunction createCharacterLighting(scene: Scene, renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM, initial: Partial<DefaultCharacterLightingSettings>) {\n const lighting = createMutableCharacterLighting(scene, initial);\n try { lighting.commit(lighting.prepare(renderer, createPMREM)); return lighting.controller; }\n catch (error) { rollback(lighting.controller.dispose); throw error; }\n}\n\n/** Lights/settings stay stable; only backend-specific environment resources move. */\nfunction createMutableCharacterLighting(scene: Scene, initial: Partial<DefaultCharacterLightingSettings>) {\n const lifetime = createDisposer();\n try {\n const ambient = new HemisphereLight(0xf7fbff, 0x6b7280, 0);\n const key = new DirectionalLight(0xfffbf4, 0);\n const fill = new DirectionalLight(0xe8f0ff, 0);\n const rim = new DirectionalLight(0xdde8ff, 0);\n ambient.name = 'embodyCharacterAmbientHemisphereLight'; ambient.position.set(0, 8, 0);\n key.name = 'embodyCharacterKeyLight'; key.position.set(4.5, 7.5, 6.2); key.castShadow = true;\n key.shadow.mapSize.set(2048, 2048); Object.assign(key.shadow.camera, { near: .5, far: 50, left: -10, right: 10, top: 10, bottom: -10 }); key.shadow.bias = -.0001; key.shadow.radius = 4;\n fill.name = 'embodyCharacterFillLight'; fill.position.set(-5.5, 4.2, 4.5);\n rim.name = 'embodyCharacterRimLight'; rim.position.set(-3.5, 4.8, -5.4);\n lifetime.add(() => scene.remove(ambient, key, fill, rim));\n for (const light of [key, fill, rim]) lifetime.add(() => light.dispose());\n scene.add(ambient, key, fill, rim);\n const listeners = new Set<(value: DefaultCharacterLightingSettings) => void>();\n lifetime.add(() => listeners.clear());\n let active: LightingRenderer | null = null;\n let held = false;\n let closed = false;\n let revision = 0;\n let settings = normalize({ ...DEFAULT_CHARACTER_LIGHTING_SETTINGS, ...initial });\n lifetime.add(() => { scene.environment = null; active?.dispose(); active = null; });\n const rebuild = (target: LightingRenderer) => {\n let environment: RenderTarget | null = null;\n if (settings.envMapEnabled) {\n const room = new RoomEnvironment();\n try { environment = target.pmrem.fromScene(room, settings.environmentBlur); } finally { room.dispose(); }\n }\n target.environment?.dispose(); target.environment = environment; target.revision = revision;\n };\n const show = (target: LightingRenderer | null) => {\n if (target) {\n target.renderer.outputColorSpace = SRGBColorSpace;\n target.renderer.toneMapping = ACESFilmicToneMapping;\n target.renderer.toneMappingExposure = settings.exposure;\n }\n scene.environment = target?.environment?.texture ?? null;\n scene.environmentIntensity = settings.envMapEnabled ? settings.environmentIntensity : 0;\n ambient.intensity = settings.ambientIntensity; key.intensity = settings.keyIntensity; fill.intensity = settings.fillIntensity; rim.intensity = settings.rimIntensity;\n const plane = scene.getObjectByName('shadowPlane') as Mesh | undefined;\n for (const material of plane ? (Array.isArray(plane.material) ? plane.material : [plane.material]) : []) if (material instanceof ShadowMaterial) material.opacity = settings.shadowOpacity;\n };\n const prepare = (renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM): LightingRenderer => {\n const resources = createDisposer();\n try {\n const pmrem = createPMREM(); resources.add(() => pmrem.dispose());\n const target: LightingRenderer = { renderer, pmrem, environment: null, revision, dispose: resources.dispose };\n resources.add(() => { target.environment?.dispose(); target.environment = null; });\n rebuild(target); return target;\n } catch (error) { rollback(resources.dispose); throw error; }\n };\n const setSettings = (patch: Partial<DefaultCharacterLightingSettings>) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n const previous = settings; settings = normalize({ ...settings, ...patch }); revision++;\n if (!held) {\n if (active && (previous.envMapEnabled !== settings.envMapEnabled || previous.environmentBlur !== settings.environmentBlur)) rebuild(active);\n show(active);\n }\n listeners.forEach((listener) => listener({ ...settings })); return { ...settings };\n };\n show(null);\n const controller = {\n getSettings: () => ({ ...settings }), getEnvironmentTexture: (): Texture | null => active?.environment?.texture ?? null,\n setSettings, setPreset: (id: DefaultCharacterLightingPresetId) => setSettings(DEFAULT_CHARACTER_LIGHTING_PRESETS[id]?.settings ?? {}),\n subscribe: (listener: (value: DefaultCharacterLightingSettings) => void) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n listeners.add(listener); listener({ ...settings }); return () => { listeners.delete(listener); };\n },\n dispose: lifetime.dispose,\n };\n return {\n controller, prepare, show, close: () => { closed = true; }, revision: () => revision,\n hold: () => { held = true; },\n restore: () => {\n held = false;\n try { if (active && active.revision !== revision) rebuild(active); } finally { show(active); }\n },\n commit: (target: LightingRenderer) => {\n const previous = active; active = target; held = false; show(active);\n return previous;\n },\n };\n } catch (error) { rollback(lifetime.dispose); throw error; }\n}\n\nfunction constructDefaultCharacterScene<R extends CharacterSceneRenderer>(\n container: HTMLElement,\n options: DefaultCharacterSceneOptions,\n renderer: R,\n disposeRenderer: () => void,\n createLighting: (scene: Scene, settings: Partial<DefaultCharacterLightingSettings>) => ReturnType<typeof createDefaultCharacterLighting>,\n) {\n const lifetime = createDisposer();\n lifetime.add(disposeRenderer);\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const width = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const height = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n const ratio = () => Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5);\n renderer.setPixelRatio(ratio()); renderer.setSize(width, height, true); renderer.shadowMap.enabled = options.shadows ?? true; renderer.shadowMap.type = PCFShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n const scene = new Scene(); const background = options.background === undefined ? sceneType.background : options.background; scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, width / height, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(() => lighting.dispose());\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (lifetime.isDisposed()) return;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.setSettings({ ...preset.settings, ...value.lighting });\n renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const resize = () => {\n if (lifetime.isDisposed()) return;\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(ratio()); renderer.setSize(w, h, false);\n };\n const handle: CharacterScene<R> = { container, scene, renderer, camera, lighting, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true, resize, setSceneSettings, dispose: lifetime.dispose };\n const attach = () => {\n lifetime.add(() => { if (renderer.domElement.parentElement === container) container.removeChild(renderer.domElement); });\n container.appendChild(renderer.domElement);\n if (options.manageResize !== false) {\n lifetime.add(() => globalThis.removeEventListener?.('resize', resize));\n globalThis.addEventListener?.('resize', resize);\n }\n };\n return { handle, attach };\n } catch (error) {\n rollback(lifetime.dispose);\n throw error;\n }\n}\n\n/** The existing synchronous WebGL path; it does not wait for shader compilation. */\nexport function createDefaultCharacterScene(container: HTMLElement, options: DefaultCharacterSceneOptions = {}): DefaultCharacterScene {\n const { handle, attach } = constructWebGLScene(container, options);\n try { attach(); return handle; } catch (error) {\n rollback(handle.dispose);\n throw error;\n }\n}\n\nfunction constructWebGLScene(container: HTMLElement, options: DefaultCharacterSceneOptions) {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n return constructDefaultCharacterScene(container, options, renderer, () => renderer.dispose(),\n (scene, settings) => createDefaultCharacterLighting(scene, renderer, settings));\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n if (signal?.aborted) throw new DOMException('Character scene creation was aborted.', 'AbortError');\n}\n\ntype RendererCandidate = (\n | { backend: 'webgl'; renderer: WebGLRenderer }\n | { backend: 'webgpu'; renderer: WebGPURenderer }\n) & { createPMREM(): ScenePMREM; dispose(): void; lost: Error | null };\n\nfunction acquireWebGLRenderer(): RendererCandidate {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const lifetime = createDisposer(); lifetime.add(() => renderer.dispose());\n return { backend: 'webgl', renderer, createPMREM: () => new PMREMGenerator(renderer), dispose: lifetime.dispose, lost: null };\n}\n\n// @types/three r184 omits this backend capability, which failed init still owns.\nfunction disposeBackend(backend: object) {\n if ('dispose' in backend && typeof backend.dispose === 'function') backend.dispose();\n}\n\nasync function acquireNativeRenderer(check: () => void, onLoss: (candidate: RendererCandidate) => void): Promise<RendererCandidate> {\n const lifetime = createDisposer();\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator) || !navigator.gpu) {\n throw new Error('WebGPU is unavailable. Use WebGL or a browser with WebGPU in a secure context.');\n }\n const { WebGPURenderer, PMREMGenerator: WebGPUPMREMGenerator } = await import('three/webgpu');\n check();\n const renderer = new WebGPURenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const initialBackend = renderer.backend;\n const candidate: RendererCandidate = {\n backend: 'webgpu', renderer, lost: null,\n createPMREM: () => new WebGPUPMREMGenerator(renderer), dispose: lifetime.dispose,\n };\n const originalDeviceLost = renderer.onDeviceLost.bind(renderer);\n renderer.onDeviceLost = (info) => {\n originalDeviceLost(info);\n if (lifetime.isDisposed() || candidate.lost) return;\n candidate.lost = new Error(`WebGPU device lost: ${info.message || 'Unknown reason'}`);\n onLoss(candidate);\n };\n lifetime.add(() => {\n try {\n if (renderer.hasInitialized()) renderer.dispose();\n else disposeBackend(renderer.backend);\n } finally {\n if (renderer.backend !== initialBackend) disposeBackend(initialBackend);\n }\n });\n await renderer.init(); check();\n if (candidate.lost) throw candidate.lost;\n if (!('isWebGPUBackend' in renderer.backend) || renderer.backend.isWebGPUBackend !== true) {\n throw new Error('Native WebGPU initialization failed; Three selected WebGL2. Select WebGL to retry.');\n }\n return candidate;\n } catch (error) { rollback(lifetime.dispose); check(); throw error; }\n}\n\nfunction renderingAborted() { return new DOMException('Character scene renderer request was cancelled.', 'AbortError'); }\nfunction rendererPreference(value: unknown): CharacterSceneRendererPreference {\n if (value === 'auto' || value === 'webgl' || value === 'webgpu') return value;\n throw new Error(`Unsupported character scene renderer: ${String(value)}`);\n}\n\n/** Three's WebGPU renderer changes these cameras; WebGLRenderer does not undo it. */\nfunction prepareCameraCoordinates(scene: Scene, camera: PerspectiveCamera, backend: CharacterSceneBackend): () => void {\n const cameras = new Set<PerspectiveCamera | OrthographicCamera>([camera]);\n const shadows: LightShadow<PerspectiveCamera | OrthographicCamera>[] = [];\n scene.traverse(object => {\n const light = object as Light & { shadow?: LightShadow<PerspectiveCamera | OrthographicCamera> };\n if (light.isLight && light.shadow) {\n cameras.add(light.shadow.camera);\n shadows.push(light.shadow);\n }\n });\n const previous = Array.from(cameras, current => [current, current.coordinateSystem] as const);\n const apply = (current: PerspectiveCamera | OrthographicCamera, coordinates: CoordinateSystem) => {\n current.coordinateSystem = coordinates;\n current.updateProjectionMatrix();\n };\n const coordinates = backend === 'webgpu' ? WebGPUCoordinateSystem : WebGLCoordinateSystem;\n cameras.forEach(current => apply(current, coordinates));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n return () => {\n previous.forEach(([current, original]) => apply(current, original));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n };\n}\n\n/** Stable scene ownership, including a recoverable initial renderer failure. */\nexport function createDefaultCharacterSceneRuntime(\n container: HTMLElement,\n options: DefaultCharacterSceneRuntimeOptions = {},\n): DefaultCharacterSceneRuntime {\n throwIfAborted(options.signal);\n const lifetime = createDisposer();\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const scene = new Scene();\n const background = options.background === undefined ? sceneType.background : options.background;\n scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, 1, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createMutableCharacterLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(lighting.controller.dispose);\n let shadowsEnabled = options.shadows ?? true;\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.controller.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n let settings: CharacterSceneRenderingSettings = { preference: rendererPreference(options.rendering?.preference ?? options.renderer ?? 'auto') };\n let active: RendererCandidate | null = null;\n let candidateInUse: RendererCandidate | null = null;\n let status: CharacterSceneRenderingStatus = 'initializing';\n let error: Error | null = null;\n let disposed = false;\n let disposal: Promise<void> | null = null;\n let generation = 0;\n let pending: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let pendingRendererChange: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let leaseCount = 0;\n let pendingResourceReleases = 0;\n let leasesReleased: (() => void) | null = null;\n let leaseBarrier: Promise<void> | null = null;\n let resizeAttached = false;\n const listeners = new Set<(snapshot: CharacterSceneRenderingSnapshot) => void>();\n const getSnapshot = (): CharacterSceneRenderingSnapshot => {\n const common = { settings: { ...settings }, status, error };\n if (active?.backend === 'webgl') return { ...common, backend: 'webgl', renderer: active.renderer };\n if (active?.backend === 'webgpu') return { ...common, backend: 'webgpu', renderer: active.renderer };\n return { ...common, backend: null, renderer: null };\n };\n const notify = () => {\n const snapshot = getSnapshot();\n for (const listener of listeners) {\n try { listener(snapshot); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n }\n };\n const sizeRenderer = (renderer: CharacterSceneRenderer, style = false) => {\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5));\n renderer.setSize(w, h, style);\n };\n const resize = () => { if (!disposed && active) sizeRenderer(active.renderer); };\n lifetime.add(() => { if (resizeAttached) globalThis.removeEventListener?.('resize', resize); });\n const onLoss = (candidate: RendererCandidate) => {\n if (disposed || candidate !== active) return;\n status = status === 'switching' ? 'switching' : 'lost'; error = candidate.lost;\n void Promise.resolve().then(() => candidate.renderer.setAnimationLoop(null)).catch(() => undefined);\n void owner.binding?.suspend().catch((failure) => console.error('Character renderer suspension failed.', failure));\n notify();\n try { options.onDeviceLost?.(candidate.lost!); } catch (failure) { console.error('Character scene device-loss callback failed.', failure); }\n };\n const setSettings = (patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot> => {\n if (disposed) return Promise.reject(renderingAborted());\n let preference: CharacterSceneRendererPreference;\n try { preference = patch.preference === undefined ? settings.preference : rendererPreference(patch.preference); }\n catch (failure) { return Promise.reject(failure); }\n if (pendingRendererChange && preference === settings.preference && (status === 'initializing' || status === 'switching')) return pendingRendererChange;\n if (status === 'ready' && preference === settings.preference) return Promise.resolve(getSnapshot());\n settings = { preference };\n const request = ++generation;\n const previous = pending;\n status = active ? 'switching' : 'initializing'; error = null;\n const execute = async (): Promise<CharacterSceneRenderingSnapshot> => {\n let candidate: RendererCandidate | null = null;\n let environment: LightingRenderer | null = null;\n let suspended = false;\n let attached = false;\n let restoreCameraCoordinates = () => {};\n let restoreModelSkinning = () => {};\n const check = () => {\n if (disposed || generation !== request) throw renderingAborted();\n if (!active) throwIfAborted(options.signal);\n if (candidate?.lost) throw candidate.lost;\n };\n try {\n check();\n if (preference === 'webgl') candidate = acquireWebGLRenderer();\n else {\n try { candidate = await acquireNativeRenderer(check, onLoss); }\n catch (failure) {\n check();\n if (preference !== 'auto' || (failure instanceof Error && failure.name === 'AbortError')) throw failure;\n candidate = acquireWebGLRenderer();\n }\n }\n check();\n candidateInUse = candidate;\n const renderer = candidate.renderer;\n sizeRenderer(renderer, true);\n renderer.shadowMap.enabled = shadowsEnabled;\n // WebGL PCF is already soft in supported Three versions; the old\n // constant warns and is replaced on the first draw. Keep native filtering.\n renderer.shadowMap.type = candidate.backend === 'webgl' ? PCFShadowMap : PCFSoftShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n if (leaseCount) await leaseBarrier;\n check();\n if (owner.drain) await owner.drain;\n check();\n if (owner.binding) { suspended = true; await owner.binding.suspend(); }\n check();\n restoreCameraCoordinates = prepareCameraCoordinates(scene, camera, candidate.backend);\n restoreModelSkinning = prepareModelSkinning(scene);\n lighting.hold();\n // Environment changes during asynchronous compilation are deferred. If\n // authored settings changed meanwhile, prepare that revision before commit.\n do {\n environment?.dispose(); environment = lighting.prepare(renderer, candidate.createPMREM);\n lighting.show(environment);\n if (typeof renderer.compileAsync !== 'function') throw new Error('Async character scenes require Three.js WebGLRenderer.compileAsync.');\n await renderer.compileAsync(scene, camera); check();\n if (owner.binding) await owner.binding.prepare(renderer);\n else if (active) renderer.render(scene, camera);\n check();\n } while (environment.revision !== lighting.revision());\n sizeRenderer(renderer);\n // Stage the new canvas before removing the old one. A failed attach\n // or library binding leaves the old scene/renderer available.\n attached = true; container.appendChild(renderer.domElement);\n if (!resizeAttached && options.manageResize !== false) {\n resizeAttached = true; globalThis.addEventListener?.('resize', resize);\n }\n check();\n await owner.binding?.commit(renderer);\n check();\n const oldRenderer = active;\n const oldEnvironment = lighting.commit(environment); environment = null;\n active = candidate; candidate = null; attached = false;\n rollback(() => { if (oldRenderer?.renderer.domElement.parentElement === container) container.removeChild(oldRenderer.renderer.domElement); });\n rollback(() => oldEnvironment?.dispose());\n rollback(() => oldRenderer?.dispose());\n status = 'ready'; error = null;\n const snapshot = getSnapshot(); notify(); return snapshot;\n } catch (failure) {\n if (suspended) {\n try { await owner.binding?.suspend(); } catch { /* Preserve the switch failure. */ }\n if (owner.drain) await owner.drain.catch(() => undefined);\n }\n if (attached && candidate?.renderer.domElement.parentElement === container) container.removeChild(candidate.renderer.domElement);\n rollback(() => environment?.dispose());\n rollback(() => candidate?.dispose());\n const canceled = disposed || generation !== request || (!active && options.signal?.aborted);\n if (!disposed) {\n rollback(restoreModelSkinning);\n rollback(restoreCameraCoordinates);\n rollback(lighting.restore);\n if (suspended && active && !active.lost) {\n try { await owner.binding?.commit(active.renderer); } catch (resumeError) { owner.reportFailure(resumeError, active.renderer); }\n }\n if (generation === request) {\n status = active?.lost ? 'lost' : 'error';\n error = failure instanceof Error ? failure : new Error(String(failure)); notify();\n }\n }\n if (canceled) throw renderingAborted();\n throw failure;\n } finally { candidateInUse = null; }\n };\n const operation = previous ? previous.catch(() => undefined).then(execute) : Promise.resolve().then(execute);\n pending = operation;\n pendingRendererChange = operation;\n notify();\n const settled = () => {\n if (pending === operation) pending = null;\n if (pendingRendererChange === operation) pendingRendererChange = null;\n };\n void operation.then(settled, settled);\n return operation;\n };\n const rendering: CharacterSceneRenderingController = {\n getSettings: () => ({ ...settings }), getSnapshot, setSettings,\n subscribe: (listener) => {\n if (disposed) throw new Error('Character scene rendering has been disposed.');\n listeners.add(listener);\n try { listener(getSnapshot()); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n return () => { listeners.delete(listener); };\n },\n acquireRenderer: () => {\n if (!active || active.lost || disposed || pendingResourceReleases || (status !== 'ready' && status !== 'error')) throw new Error('Character renderer is not available for capture.');\n if (leaseCount++ === 0) leaseBarrier = new Promise<void>((resolve) => { leasesReleased = resolve; });\n let released = false;\n return { renderer: active.renderer, release: () => {\n if (released) return; released = true;\n if (--leaseCount === 0) { leasesReleased?.(); leasesReleased = null; leaseBarrier = null; }\n } };\n },\n releaseSceneResources: (release) => {\n // Disposal already owns the drain. A later caller can free its resources\n // once that completion settles, including when owned cleanup failed.\n if (disposal) return disposal.then(release, release);\n const previous = pending;\n pendingResourceReleases++;\n const operation = Promise.resolve(previous).catch(() => undefined).then(async () => {\n if (leaseCount) await leaseBarrier;\n if (owner.drain) await owner.drain.catch(() => undefined);\n if (owner.binding) {\n await owner.binding.suspend().catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n try {\n release();\n } finally {\n if (!disposed && active && !active.lost) {\n await owner.binding?.commit(active.renderer).catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n }\n return getSnapshot();\n }).finally(() => { pendingResourceReleases--; });\n // Serialize release with replacement so a recovery requested during the\n // drain cannot compile resources that the callback is about to free.\n pending = operation;\n void operation.then(() => { if (pending === operation) pending = null; }, () => { if (pending === operation) pending = null; });\n return operation.then(() => undefined);\n },\n };\n const owner = registerSceneRendering(rendering, scene, camera, () => pending, (failure, renderer) => {\n if (disposed) return;\n const problem = failure instanceof Error ? failure : new Error(String(failure));\n if (candidateInUse && renderer === candidateInUse.renderer && renderer !== active?.renderer) { candidateInUse.lost = problem; return; }\n if (active) active.lost = problem;\n status = active ? 'lost' : 'error'; error = problem;\n void owner.binding?.suspend().catch(() => undefined);\n notify();\n });\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n let resolve!: () => void;\n let reject!: (failure: unknown) => void;\n disposal = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n void disposal.catch(() => undefined);\n disposed = true; owner.disposed = true; generation++; lighting.close();\n status = 'disposed'; notify(); listeners.clear();\n const drain = owner.binding?.suspend() ?? owner.drain;\n const cleanup = () => {\n try {\n if (active?.renderer.domElement.parentElement === container) container.removeChild(active.renderer.domElement);\n try { lifetime.dispose(); } finally { active?.dispose(); }\n resolve();\n } catch (failure) { reject(failure); }\n };\n // Callers await this before releasing borrowed character resources. The\n // same completion also drains captures and a recently disposed camera.\n if (pending || leaseCount || drain) void Promise.allSettled([pending, drain, leaseBarrier]).then(cleanup);\n else cleanup();\n return disposal;\n };\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (disposed) return;\n shadowsEnabled = value.shadows ?? true;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.controller.setSettings({ ...preset.settings, ...value.lighting });\n if (active) active.renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const ready = setSettings(settings);\n return { container, scene, camera, lighting: lighting.controller, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true,\n rendering, ready, get renderer() { return active?.renderer ?? null; }, get backend() { return active?.backend ?? null; }, resize, setSceneSettings, dispose };\n } catch (failure) { rollback(lifetime.dispose); throw failure; }\n}\n\n/** Compatibility factory: failure releases all owned resources. Use the runtime factory for initial retry. */\nexport async function createDefaultCharacterSceneAsync(\n container: HTMLElement,\n options: DefaultCharacterSceneAsyncOptions = {},\n): Promise<ReadyDefaultCharacterScene> {\n const runtime = createDefaultCharacterSceneRuntime(container, options);\n try {\n const snapshot = await runtime.ready;\n if (!snapshot.renderer) throw new Error('Character scene renderer was not initialized.');\n const handle: ReadyDefaultCharacterScene = snapshot.backend === 'webgl'\n ? { ...runtime, renderer: snapshot.renderer, backend: 'webgl' }\n : { ...runtime, renderer: snapshot.renderer, backend: 'webgpu' };\n // Existing callers keep their non-null contract after first success. Read\n // rendering.getSnapshot() when an atomic backend/renderer pair is needed.\n Object.defineProperties(handle, {\n renderer: { get: () => runtime.renderer }, backend: { get: () => runtime.backend },\n shadowPlane: { get: () => runtime.shadowPlane }, sceneType: { get: () => runtime.sceneType },\n });\n return handle;\n } catch (failure) {\n try { await runtime.dispose(); } catch { /* Preserve acquisition failure. */ }\n throw failure;\n }\n}\n","import { PerspectiveCamera } from 'three';\nimport { createSceneInkBackground } from './sceneInkBackground';\nimport { resolveCharacterMaterialPalette, resolveCharacterTexturePalette } from './characterTexturePalette';\nimport type { Camera, Scene } from 'three';\nimport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { Embody } from './character';\nimport type { RustEmbodyHostConfig } from './character';\nimport { loadCharacterModel, applyCharacterModelTransform, disposeCharacterModel } from './model';\nimport type { CharacterModelLoadOptions, CharacterModelLoadResult, CharacterModelTransform } from './model';\nimport { normalizeRenderableCharacterMorphAttributes, assertRenderableCharacterMorphAttributes } from './modelMorphLayout';\nimport { validateMappings } from './authoring';\nimport { createDefaultCharacterSceneAsync } from './scene';\nimport type { CharacterSceneBackend, CharacterSceneConfiguration, CharacterSceneRenderer, CharacterSceneRenderingController, DefaultCharacterSceneAsyncOptions, ReadyDefaultCharacterScene } from './scene';\nimport { DPthreeCameraController } from './annotations/DPthreeCameraController';\nimport type { AnnotationCharacterConfig, DPthreeCameraControllerConfig } from './annotations/types';\nimport type { Profile } from './authoringTypes';\n\nexport interface CharacterHostCharacterOptions extends CharacterModelTransform {\n modelUrl: string;\n presetType?: string;\n profile?: Partial<Profile>;\n annotationConfig?: AnnotationCharacterConfig;\n scene?: CharacterSceneConfiguration;\n}\nexport interface CharacterHostExternalScene {\n scene: Scene;\n renderer: CharacterSceneRenderer;\n backend?: CharacterSceneBackend;\n rendering?: CharacterSceneRenderingController;\n camera: Camera;\n mountCanvas?: boolean;\n manageResize?: boolean;\n setSceneSettings?: (settings: CharacterSceneConfiguration) => void;\n}\nexport type CharacterHostModelLoader = (modelUrl: string, options: CharacterModelLoadOptions & { signal: AbortSignal }) => Promise<CharacterModelLoadResult>;\nexport type CharacterHostPreparation = CharacterModelLoadResult & {\n engine: Embody;\n character: CharacterHostCharacterOptions;\n signal: AbortSignal;\n};\nexport type CharacterHostReady = CharacterHostPreparation & {\n scene: Scene;\n camera: Camera;\n cameraController: DPthreeCameraController | null;\n rendering: CharacterSceneRenderingController | null;\n};\nexport interface CharacterHostOptions {\n signal?: AbortSignal;\n container: HTMLElement;\n character: CharacterHostCharacterOptions;\n embody?: RustEmbodyHostConfig;\n scene?: Omit<DefaultCharacterSceneAsyncOptions, 'signal'>;\n external?: CharacterHostExternalScene;\n loader?: CharacterModelLoadOptions;\n /** Storage authorization and byte caching remain with the application. */\n loadModel?: CharacterHostModelLoader;\n /** Replays authored mesh edits through the bound engine before GPU preparation. */\n prepareCharacter?: (context: CharacterHostPreparation) => void | Promise<void>;\n onCharacterReady?: (context: CharacterHostReady) => void | Promise<void>;\n /** Default true for compatibility. Editors can retain clips in a lazy catalog. */\n registerEmbeddedAnimations?: boolean;\n camera?: Omit<Partial<DPthreeCameraControllerConfig>, 'scene' | 'camera' | 'renderer' | 'rendering' | 'domElement'>;\n autoStart?: boolean;\n renderLoop?: boolean;\n autoFrame?: boolean;\n}\nexport interface CharacterHost extends CharacterModelLoadResult {\n engine: Embody;\n scene: Scene;\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n readonly rendering: CharacterSceneRenderingController | null;\n camera: Camera;\n cameraController: DPthreeCameraController | null;\n lighting: ReadyDefaultCharacterScene['lighting'] | null;\n ownsScene: boolean;\n container: HTMLElement;\n setCharacter(character: CharacterHostCharacterOptions, loader?: CharacterModelLoadOptions, signal?: AbortSignal): Promise<void>;\n resize(): void;\n dispose(): Promise<void>;\n}\n\n/** Acquire, prepare and reveal a character using the existing native render owner. */\nexport async function createCharacterHost(options: CharacterHostOptions): Promise<CharacterHost> {\n if (!options.container) throw new Error('createCharacterHost requires a container HTMLElement');\n if (!options.character?.modelUrl) throw new Error('createCharacterHost requires character.modelUrl');\n let loaded: CharacterModelLoadResult | undefined;\n let state: ReadyDefaultCharacterScene | CharacterHostExternalScene | undefined;\n let engine: Embody | undefined;\n let controller: DPthreeCameraController | undefined;\n let host: CharacterHost | undefined;\n let disposed = false;\n let disposal: Promise<void> | undefined;\n let switching: Promise<void> = Promise.resolve();\n let activeChange: AbortController | undefined;\n let request = 0;\n let mountedCanvas: HTMLCanvasElement | undefined;\n const previousBackground = options.container.style?.background ?? '';\n let backgroundRevision = 0;\n const applyCharacterBackground = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n const revision = ++backgroundRevision;\n const settings = sceneSettings(character);\n // Explicit appearance (including transparency) and external scenes remain authoritative.\n const usePalette = !options.external && settings.background === undefined\n && (settings.type === undefined || settings.type === 'studio');\n if (options.container.style) options.container.style.background = previousBackground;\n if (!usePalette) return;\n const background = createSceneInkBackground(css => {\n if (!disposed && revision === backgroundRevision && options.container.style) options.container.style.background = css;\n });\n const key = character.modelUrl;\n const materialPalette = resolveCharacterMaterialPalette(value.model, key);\n background.setPalette(materialPalette);\n void resolveCharacterTexturePalette(value.model, key).then(palette => {\n background.setPalette(palette ?? materialPalette);\n background.dispose();\n });\n };\n const visibility = new WeakMap<CharacterModelLoadResult['model'], boolean>();\n const lifetime = new AbortController();\n const initial = new AbortController();\n activeChange = initial;\n const aborted = () => new DOMException('Character host request was cancelled', 'AbortError');\n const cancel = () => { lifetime.abort(); activeChange?.abort(); };\n const cancelCreation = () => initial.abort();\n options.signal?.addEventListener('abort', cancelCreation, { once: true });\n if (options.signal?.aborted) cancelCreation();\n const check = (signal: AbortSignal) => { if (disposed || lifetime.signal.aborted || signal.aborted) throw aborted(); };\n const releaseModel = async (value: CharacterModelLoadResult) => {\n const release = () => disposeCharacterModel(state?.scene ?? null, value.model);\n if (state?.rendering) await state.rendering.releaseSceneResources(release);\n else release();\n };\n const acquireModel = (character: CharacterHostCharacterOptions, loader: CharacterModelLoadOptions | undefined, signal: AbortSignal) =>\n (options.loadModel ?? loadCharacterModel)(character.modelUrl, { ...loader, signal });\n const sceneSettings = (character: CharacterHostCharacterOptions): CharacterSceneConfiguration => {\n const { background, ...value } = { ...options.scene, ...character.scene };\n // Runtime factory options also accept Three.Color; saved character data does not.\n return { ...value, ...(background === undefined ? {} : {\n background: background && typeof background === 'object' ? background.getHex() : background,\n }) };\n };\n const acquireRenderer = async (signal: AbortSignal) => {\n const rendering = state?.rendering;\n if (!rendering) return undefined;\n try { await rendering.setSettings(rendering.getSettings()); }\n catch (error) { if (!rendering.getSnapshot().renderer) throw error; }\n check(signal);\n return rendering.acquireRenderer();\n };\n const makeEngine = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n let profile = character.profile ?? options.embody?.profile;\n let annotationConfig = character.annotationConfig;\n if (profile) {\n const bones: Array<{ name: string }> = [];\n value.model.traverse(object => { if ((object as { isBone?: boolean }).isBone && object.name) bones.push({ name: object.name }); });\n const validation = validateMappings(value.meshes, { bones }, profile, { suggestCorrections: true, useResolvedNames: true, minConfidence: 0.8 });\n if (validation.suggestedConfig && validation.corrections?.some(correction => correction.applied)) {\n profile = { ...profile, ...validation.suggestedConfig };\n if (annotationConfig) annotationConfig = { ...annotationConfig, ...validation.suggestedConfig };\n }\n }\n const resolvedCharacter = { ...character, profile, annotationConfig };\n const next = new Embody({ ...options.embody, presetType: character.presetType ?? options.embody?.presetType, profile });\n try {\n next.onReady({ model: value.model, meshes: value.meshes,\n ...(options.registerEmbeddedAnimations === false ? {} : { animations: value.animations }) });\n next.stop();\n return { next, character: resolvedCharacter };\n } catch (error) {\n try { next.dispose(); } catch { /* Preserve the binding failure. */ }\n throw error;\n }\n };\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n disposed = true;\n backgroundRevision += 1;\n if (options.container.style) options.container.style.background = previousBackground;\n cancel();\n options.signal?.removeEventListener('abort', cancelCreation);\n disposal = (async () => {\n let failure: unknown;\n const attempt = async (release: () => unknown) => { try { await release(); } catch (error) { failure ??= error; } };\n // Cancel a preparation draw before joining an operation waiting on that draw.\n await attempt(() => controller?.dispose());\n await switching.catch(() => {});\n await attempt(() => engine?.dispose());\n const ownedScene = !options.external && state && 'dispose' in state ? state : undefined;\n if (ownedScene) await attempt(() => ownedScene.dispose());\n if (loaded) await attempt(() => releaseModel(loaded!));\n mountedCanvas?.remove();\n if (failure !== undefined) throw failure;\n })();\n return disposal;\n };\n const prepare = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n check(signal);\n state?.setSceneSettings?.(sceneSettings(character));\n visibility.set(value.model, value.model.visible);\n value.model.visible = false;\n value.model.userData.embodyCharacterModel = true;\n await options.prepareCharacter?.({ ...value, engine: next, character, signal });\n check(signal);\n normalizeRenderableCharacterMorphAttributes(value.model);\n assertRenderableCharacterMorphAttributes(value.model);\n // Authored morph replay can add meshes/targets. Inspect the final layout.\n if (options.prepareCharacter) next.bindModel();\n value.model.updateMatrixWorld(true);\n state!.scene.add(value.model);\n if (controller) await controller.prepareModelForRender(value.model, { signal });\n check(signal);\n };\n const frameCharacter = async (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n if (!controller) return;\n controller.setModel(value.model);\n if (character.annotationConfig) controller.prepareRegionsForReveal(character.annotationConfig);\n else if (options.autoFrame !== false) await controller.focusFullBody(0);\n };\n const ready = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n await frameCharacter(value, character);\n check(signal);\n await options.onCharacterReady?.({ ...value, engine: next, character, signal,\n scene: state!.scene, camera: state!.camera, cameraController: controller ?? null, rendering: state!.rendering ?? null });\n check(signal);\n };\n try {\n check(initial.signal);\n loaded = await acquireModel(options.character, options.loader, initial.signal);\n check(initial.signal);\n state = options.external ?? await createDefaultCharacterSceneAsync(options.container, { ...options.scene, ...options.character.scene, signal: initial.signal });\n check(initial.signal);\n await initEmbodyCore();\n check(initial.signal);\n if (options.external?.mountCanvas && !state.renderer.domElement.parentElement) {\n mountedCanvas = state.renderer.domElement;\n options.container.appendChild(mountedCanvas);\n }\n if (options.renderLoop ?? !options.external) {\n if (!(state.camera instanceof PerspectiveCamera)) throw new Error('Character host rendering requires a PerspectiveCamera');\n controller = new DPthreeCameraController({ ...options.camera,\n scene: state.scene, camera: state.camera, domElement: state.renderer.domElement,\n ...(state.rendering ? { rendering: state.rendering } : { renderer: state.renderer }),\n showDOMControls: options.camera?.showDOMControls ?? false,\n });\n }\n applyCharacterModelTransform(loaded.model, options.character);\n loaded.model.updateMatrixWorld(true);\n const first = makeEngine(loaded, options.character);\n engine = first.next;\n let currentCharacter = first.character;\n const initialLease = await acquireRenderer(initial.signal);\n try {\n await prepare(loaded, engine, first.character, initial.signal);\n await ready(loaded, engine, first.character, initial.signal);\n loaded.model.visible = visibility.get(loaded.model) ?? true;\n applyCharacterBackground(loaded, first.character);\n } finally { initialLease?.release(); }\n if (options.autoStart !== false) engine.start();\n const sceneState = state;\n const rendering = state.rendering ?? null;\n host = {\n engine, scene: state.scene, camera: state.camera, cameraController: controller ?? null,\n get renderer() { return rendering ? rendering.getSnapshot().renderer : sceneState.renderer; },\n get backend() { return rendering ? rendering.getSnapshot().backend : sceneState.backend ?? null; },\n rendering, model: loaded.model, meshes: loaded.meshes, animations: loaded.animations, gltf: loaded.gltf,\n lighting: 'lighting' in state ? state.lighting : null,\n ownsScene: !options.external, container: options.container,\n resize() { if ('resize' in sceneState) sceneState.resize(); },\n setCharacter(character, loader = options.loader, signal) {\n if (disposed || lifetime.signal.aborted) return Promise.reject(aborted());\n if (!character.modelUrl) return Promise.reject(new Error('setCharacter requires character.modelUrl'));\n activeChange?.abort();\n const operation = new AbortController();\n const abort = () => operation.abort();\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n activeChange = operation;\n const generation = ++request;\n const change = switching.catch(() => {}).then(async () => {\n check(operation.signal);\n if (generation !== request) throw aborted();\n const next = await acquireModel(character, loader, operation.signal);\n let nextEngine: Embody | undefined;\n let lease: Awaited<ReturnType<typeof acquireRenderer>> = undefined;\n let cameraChanged = false;\n let previous: CharacterModelLoadResult | undefined;\n try {\n check(operation.signal);\n lease = await acquireRenderer(operation.signal);\n applyCharacterModelTransform(next.model, character);\n next.model.updateMatrixWorld(true);\n const prepared = makeEngine(next, character);\n nextEngine = prepared.next;\n await prepare(next, nextEngine, prepared.character, operation.signal);\n cameraChanged = true;\n await ready(next, nextEngine, prepared.character, operation.signal);\n check(operation.signal);\n previous = loaded!;\n engine!.dispose();\n engine = nextEngine;\n loaded = next;\n currentCharacter = prepared.character;\n applyCharacterBackground(next, currentCharacter);\n host!.engine = engine;\n host!.model = next.model;\n host!.meshes = next.meshes;\n host!.animations = next.animations;\n host!.gltf = next.gltf;\n previous.model.visible = false;\n next.model.visible = visibility.get(next.model) ?? true;\n if (options.autoStart !== false) engine.start();\n } catch (error) {\n if (loaded !== next) {\n try { state?.setSceneSettings?.(sceneSettings(currentCharacter)); } catch { /* Preserve replacement failure. */ }\n if (cameraChanged && !disposed && controller && loaded) {\n try { await frameCharacter(loaded, currentCharacter); } catch { /* Preserve replacement failure. */ }\n }\n try { nextEngine?.dispose(); } catch { /* Still release the acquired model. */ }\n lease?.release();\n lease = undefined;\n try { await releaseModel(next); } catch { /* Preserve the replacement failure. */ }\n }\n throw error;\n } finally { lease?.release(); }\n if (previous) await releaseModel(previous);\n });\n switching = change.finally(() => signal?.removeEventListener('abort', abort));\n return switching;\n },\n dispose,\n };\n options.signal?.removeEventListener('abort', cancelCreation);\n return host;\n } catch (error) {\n try { await dispose(); } catch { /* Preserve the acquisition error. */ }\n throw error;\n }\n}\n","/**\n * SkeletonOverlay - 3D bone visualization overlay for the Three.js scene.\n *\n * Renders each bone as an elongated octahedral shape (Blender-style armature)\n * stretched from parent joint to child joint. Updates in real-time via\n * onBeforeRender callback, following bone animation.\n */\nimport { fuzzyNameMatch } from '../authoring';\nimport * as THREE from 'three';\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BoneTreeNode {\n name: string;\n depth: number;\n parent: string | null;\n children: string[];\n isMapped: boolean;\n /** Semantic key if this bone is mapped (e.g., 'HEAD', 'JAW') */\n semanticKey: string | null;\n /** Full semantic-key set for tree badge rendering when a row resolves multiple mappings */\n semanticKeys?: string[];\n /** Live reference to the Three.js bone object */\n boneObject: THREE.Bone;\n}\n\ninterface BoneVisualization {\n mesh: THREE.Mesh;\n parentBone: THREE.Bone;\n childBone: THREE.Bone | null;\n boneName: string;\n isMapped: boolean;\n}\n\nexport interface SkeletonOverlayOptions {\n opacityScale?: number;\n focusSelectedBone?: boolean;\n}\n\ntype OverlayAxisKey = 'pitch' | 'yaw' | 'roll';\nexport type SkeletonOverlayAxisKey = OverlayAxisKey;\ntype SkeletonOverlayRotationChannel = 'rx' | 'ry' | 'rz';\n\nexport interface AxisGizmoPointerData {\n axis: SkeletonOverlayAxisKey;\n channel: SkeletonOverlayRotationChannel;\n boneName: string;\n point: THREE.Vector3;\n origin: THREE.Vector3;\n quaternion: THREE.Quaternion;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst COLORS = {\n mapped: 0x4a9aaa,\n unmapped: 0x5a6a7a,\n highlighted: 0xd4a040,\n selected: 0x63b3ed,\n} as const;\n\nconst OPACITY = {\n mapped: 0.58,\n unmapped: 0.38,\n highlighted: 0.7,\n selected: 0.8,\n context: 0.46,\n muted: 0.16,\n} as const;\n\nconst AXIS_GIZMO_COLORS: Record<OverlayAxisKey, number> = {\n pitch: 0xff7a5c,\n yaw: 0x61d095,\n roll: 0x69a8ff,\n};\n\nconst AXIS_GIZMO_IDLE_OPACITY = 0.72;\nconst AXIS_GIZMO_MUTED_OPACITY = 0.26;\nconst AXIS_GIZMO_ACTIVE_OPACITY = 0.96;\nconst AXIS_GIZMO_RADIUS_FACTOR = 0.48;\nconst AXIS_GIZMO_MIN_RADIUS = 0.025;\nconst AXIS_GIZMO_MAX_RADIUS = 0.14;\nconst AXIS_GIZMO_SCREEN_RADIUS_PX = 54;\nconst AXIS_GIZMO_ACTIVE_SCALE = 1.05;\nconst AXIS_GIZMO_HIT_TUBE = 0.15;\nconst VISIBILITY_FADE_MS = 180;\nconst VISIBILITY_EPSILON = 0.01;\n\n/** Default length for leaf bones (no children) */\nconst LEAF_BONE_LENGTH = 0.02;\n\n/** Width ratio of octahedron mid-section relative to bone length */\nconst WIDTH_RATIO = 0.1;\n\n/** Position of mid-section along bone axis (0 = parent, 1 = child) */\nconst MID_POSITION = 0.2;\n\n/** Helper/root bones that can introduce non-deforming rig offsets */\nconst ROOT_HELPER_NAME_PATTERN = /armature|bone.?root|rootjoint|(?:^|[_\\W])root(?:$|[_\\W])/i;\nconst HIP_NAME_PATTERN = /(?:^|[_\\W])hip(?:$|[_\\W]|\\d)/i;\nconst PELVIS_NAME_PATTERN = /(?:^|[_\\W])pelvis(?:$|[_\\W]|\\d)/i;\n/** Distance threshold for treating two joints as occupying the same point */\nconst POSITION_EPSILON = 1e-4;\nconst DEFAULT_AXIS_CHANNELS: Record<OverlayAxisKey, SkeletonOverlayRotationChannel> = {\n pitch: 'rx',\n yaw: 'ry',\n roll: 'rz',\n};\n\n// ── Geometry ───────────────────────────────────────────────────────────────\n\n/**\n * Creates a unit octahedral bone geometry (Blender-style).\n * Two pyramids joined at a wider mid-section, extending along +Z axis from 0 to 1.\n *\n * Vertices:\n * root (0,0,0) → mid cross-section at z=0.2 → tip (0,0,1)\n */\nfunction createOctahedralBoneGeometry(): THREE.BufferGeometry {\n const w = WIDTH_RATIO;\n\n // 6 vertices: root, 4 mid-section corners, tip\n const positions = new Float32Array([\n // Face 0: root → mid1 → mid2\n 0, 0, 0, w, w, MID_POSITION, -w, w, MID_POSITION,\n // Face 1: root → mid2 → mid3\n 0, 0, 0, -w, w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 2: root → mid3 → mid4\n 0, 0, 0, -w, -w, MID_POSITION, w, -w, MID_POSITION,\n // Face 3: root → mid4 → mid1\n 0, 0, 0, w, -w, MID_POSITION, w, w, MID_POSITION,\n // Face 4: tip → mid2 → mid1\n 0, 0, 1, -w, w, MID_POSITION, w, w, MID_POSITION,\n // Face 5: tip → mid3 → mid2\n 0, 0, 1, -w, -w, MID_POSITION, -w, w, MID_POSITION,\n // Face 6: tip → mid4 → mid3\n 0, 0, 1, w, -w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 7: tip → mid1 → mid4\n 0, 0, 1, w, w, MID_POSITION, w, -w, MID_POSITION,\n ]);\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.computeVertexNormals();\n return geometry;\n}\n\nfunction collectBones(root: THREE.Object3D): THREE.Bone[] {\n const bones = new Set<THREE.Bone>();\n root.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n bones.add(obj as THREE.Bone);\n }\n if ((obj as THREE.SkinnedMesh).isSkinnedMesh) {\n const skinned = obj as THREE.SkinnedMesh;\n skinned.skeleton?.bones?.forEach((bone) => bones.add(bone));\n }\n });\n return Array.from(bones);\n}\n\nfunction isBone(obj: THREE.Object3D | null | undefined): obj is THREE.Bone {\n return !!obj && (obj as THREE.Bone).isBone;\n}\n\nfunction countBoneSubtree(bone: THREE.Bone): number {\n let count = 1;\n for (const child of bone.children) {\n if (isBone(child)) {\n count += countBoneSubtree(child);\n }\n }\n return count;\n}\n\nfunction resolveTopLevelHelperRoot(root: THREE.Object3D): THREE.Bone | null {\n const topLevelBones = collectBones(root).filter((bone) => !isBone(bone.parent));\n if (topLevelBones.length !== 1) return null;\n\n let helperRoot = topLevelBones[0];\n while (ROOT_HELPER_NAME_PATTERN.test(helperRoot.name)) {\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length !== 1) break;\n\n const onlyChild = boneChildren[0];\n if (!ROOT_HELPER_NAME_PATTERN.test(onlyChild.name)) break;\n helperRoot = onlyChild;\n }\n\n return ROOT_HELPER_NAME_PATTERN.test(helperRoot.name) ? helperRoot : null;\n}\n\nfunction resolveBodyDisplayRoot(root: THREE.Object3D): THREE.Bone | null {\n const helperRoot = resolveTopLevelHelperRoot(root);\n if (!helperRoot) return null;\n\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length === 0) return null;\n if (boneChildren.length === 1) return boneChildren[0];\n\n // Export rigs sometimes hang tiny attachment helpers off the root alongside\n // one real body subtree. Start the overlay at that dominant body child.\n const subtreeSizes = boneChildren\n .map((child) => ({ child, size: countBoneSubtree(child) }))\n .sort((left, right) => right.size - left.size);\n\n const [largest, secondLargest] = subtreeSizes;\n if (!largest || largest.size < 3) return null;\n if (!secondLargest || secondLargest.size <= 2 || largest.size >= secondLargest.size * 3) {\n return largest.child;\n }\n\n return null;\n}\n\nfunction collectBoneChildren(bone: THREE.Object3D): THREE.Bone[] {\n return bone.children.filter(isBone);\n}\n\nfunction hasZeroLengthConnection(parentBone: THREE.Bone, childBone: THREE.Bone): boolean {\n parentBone.getWorldPosition(_parentPos);\n childBone.getWorldPosition(_childPos);\n return _parentPos.distanceToSquared(_childPos) <= POSITION_EPSILON * POSITION_EPSILON;\n}\n\nfunction hasRootHelperAncestor(bone: THREE.Bone): boolean {\n let current: THREE.Object3D | null = bone.parent;\n while (isBone(current)) {\n if (ROOT_HELPER_NAME_PATTERN.test(current.name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction shouldSkipRootHelperConnection(parentBone: THREE.Bone, boneChildren: THREE.Bone[]): boolean {\n if (boneChildren.length !== 1) return false;\n const childBone = boneChildren[0];\n\n if (ROOT_HELPER_NAME_PATTERN.test(parentBone.name)) {\n if (!isBone(parentBone.parent)) return true;\n\n // Nested human rig helpers still produce a useless centerline when the\n // helper feeds into a hip whose pelvis child collapses to the same point.\n return collectBoneChildren(childBone).some((grandChild) => hasZeroLengthConnection(childBone, grandChild));\n }\n\n return (\n hasRootHelperAncestor(parentBone) &&\n HIP_NAME_PATTERN.test(parentBone.name) &&\n PELVIS_NAME_PATTERN.test(childBone.name) &&\n hasZeroLengthConnection(parentBone, childBone)\n );\n}\n\nfunction setRayFromPointer(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n): boolean {\n const rect = domElement.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n\n _mouse.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n _mouse.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n _raycaster.setFromCamera(_mouse, camera);\n return true;\n}\n\n// ── Reusable temp objects (avoid GC) ───────────────────────────────────────\n\nconst _parentPos = new THREE.Vector3();\nconst _childPos = new THREE.Vector3();\nconst _direction = new THREE.Vector3();\nconst _zAxis = new THREE.Vector3(0, 0, 1);\nconst _quaternion = new THREE.Quaternion();\nconst _bonePos = new THREE.Vector3();\nconst _boneQuat = new THREE.Quaternion();\nconst _boneEuler = new THREE.Euler();\nconst _mouse = new THREE.Vector2();\nconst _raycaster = new THREE.Raycaster();\nconst _cameraSpacePosition = new THREE.Vector3();\nconst _planeNormal = new THREE.Vector3();\nconst _dragPlane = new THREE.Plane();\nconst _planeHit = new THREE.Vector3();\n\nexport function resolveSkeletonOverlayStartBoneName(\n root: THREE.Object3D,\n): string | null {\n return resolveBodyDisplayRoot(root)?.name ?? null;\n}\n\n// ── SkeletonOverlay Class ──────────────────────────────────────────────────\n\nexport class SkeletonOverlay {\n private scene: THREE.Scene;\n private group: THREE.Group;\n private visualizations: BoneVisualization[] = [];\n private boneTree: BoneTreeNode[] = [];\n private mappedBoneNames: Set<string>;\n private semanticKeyMap: Map<string, string>; // boneName → semanticKey\n private boneLookup = new Map<string, THREE.Bone>();\n\n // Shared geometry and materials\n private sharedGeometry: THREE.BufferGeometry;\n private mappedMaterial: THREE.MeshBasicMaterial;\n private unmappedMaterial: THREE.MeshBasicMaterial;\n private highlightMaterial: THREE.MeshBasicMaterial;\n private selectedMaterial: THREE.MeshBasicMaterial;\n private contextMaterial: THREE.MeshBasicMaterial;\n private mutedMaterial: THREE.MeshBasicMaterial;\n private axisRingGeometry: THREE.TorusGeometry;\n private axisRingHitGeometry: THREE.TorusGeometry;\n private axisCenterGeometry: THREE.SphereGeometry;\n private pitchRingMaterial: THREE.MeshBasicMaterial;\n private yawRingMaterial: THREE.MeshBasicMaterial;\n private rollRingMaterial: THREE.MeshBasicMaterial;\n private axisHitMaterial: THREE.MeshBasicMaterial;\n private axisCenterMaterial: THREE.MeshBasicMaterial;\n private axisGizmoGroup: THREE.Group;\n private axisGizmoMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n private axisGizmoHitMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n\n // Sentinel mesh for per-frame updates (stored for disposal)\n private sentinelMesh: THREE.Mesh | null = null;\n\n // State\n private highlightedBone: string | null = null;\n private selectedBone: string | null = null;\n private activeAxis: OverlayAxisKey | null = null;\n private opacityScale: number;\n private focusSelectedBone: boolean;\n private visibilityAlpha = 0;\n private visibilityTarget = 0;\n private visibilityLastFrameAt = 0;\n\n constructor(\n scene: THREE.Scene,\n mappedBoneNames: Set<string>,\n semanticKeyMap: Map<string, string>,\n options: SkeletonOverlayOptions = {},\n ) {\n this.scene = scene;\n this.mappedBoneNames = mappedBoneNames;\n this.semanticKeyMap = semanticKeyMap;\n this.opacityScale = THREE.MathUtils.clamp(options.opacityScale ?? 1, 0, 1);\n this.focusSelectedBone = options.focusSelectedBone ?? false;\n\n this.group = new THREE.Group();\n this.group.name = 'SkeletonOverlay';\n this.group.renderOrder = 999;\n this.group.visible = false;\n\n this.sharedGeometry = createOctahedralBoneGeometry();\n\n const materialOpts: Partial<THREE.MeshBasicMaterialParameters> = {\n transparent: true,\n depthTest: false,\n depthWrite: false,\n side: THREE.DoubleSide,\n };\n\n this.mappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.mapped, opacity: OPACITY.mapped });\n this.unmappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.unmapped });\n this.highlightMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.highlighted, opacity: OPACITY.highlighted });\n this.selectedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.selected });\n this.contextMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.context });\n this.mutedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.muted });\n this.mappedMaterial.forceSinglePass = true;\n this.unmappedMaterial.forceSinglePass = true;\n this.highlightMaterial.forceSinglePass = true;\n this.selectedMaterial.forceSinglePass = true;\n this.contextMaterial.forceSinglePass = true;\n this.mutedMaterial.forceSinglePass = true;\n\n this.axisRingGeometry = new THREE.TorusGeometry(1, 0.032, 10, 120);\n this.axisRingHitGeometry = new THREE.TorusGeometry(1, AXIS_GIZMO_HIT_TUBE, 8, 64);\n this.axisCenterGeometry = new THREE.SphereGeometry(0.082, 12, 8);\n this.pitchRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.pitch, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.yawRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.yaw, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.rollRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.roll, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.axisHitMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, opacity: 0 });\n this.axisHitMaterial.colorWrite = false;\n this.axisCenterMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: 0xf5f7fa, opacity: 0.92 });\n\n this.axisGizmoGroup = new THREE.Group();\n this.axisGizmoGroup.name = 'SelectedBoneAxisGizmo';\n this.axisGizmoGroup.visible = false;\n this.axisGizmoGroup.renderOrder = 1000;\n\n const pitchRing = new THREE.Mesh(this.axisRingGeometry, this.pitchRingMaterial);\n pitchRing.renderOrder = 1000;\n pitchRing.userData.axis = 'pitch';\n const pitchHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n pitchHit.userData.axis = 'pitch';\n\n const yawRing = new THREE.Mesh(this.axisRingGeometry, this.yawRingMaterial);\n yawRing.renderOrder = 1000;\n yawRing.userData.axis = 'yaw';\n const yawHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n yawHit.userData.axis = 'yaw';\n\n const rollRing = new THREE.Mesh(this.axisRingGeometry, this.rollRingMaterial);\n rollRing.renderOrder = 1000;\n rollRing.userData.axis = 'roll';\n const rollHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n rollHit.rotation.copy(rollRing.rotation);\n rollHit.userData.axis = 'roll';\n\n const center = new THREE.Mesh(this.axisCenterGeometry, this.axisCenterMaterial);\n center.renderOrder = 1001;\n\n this.axisGizmoMeshes = {\n pitch: pitchRing,\n yaw: yawRing,\n roll: rollRing,\n };\n this.axisGizmoHitMeshes = {\n pitch: pitchHit,\n yaw: yawHit,\n roll: rollHit,\n };\n\n Object.values(this.axisGizmoMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n Object.values(this.axisGizmoHitMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n center.frustumCulled = false;\n this.axisGizmoGroup.add(center);\n this.syncAxisGizmoChannels();\n this.syncVisibilityOpacity();\n this.updateAxisGizmoAppearance();\n }\n\n /**\n * Build the skeleton visualization from a scene root.\n * Traverses to find all THREE.Bone instances and creates octahedral meshes.\n */\n loadSkeleton(root: THREE.Object3D): void {\n this.clear();\n root.updateWorldMatrix(true, true);\n\n // Collect all bones\n const allBones = collectSkeletonBones(root);\n const includedBones = new Set(allBones);\n this.boneLookup = new Map(allBones.map((bone) => [bone.name, bone]));\n\n if (allBones.length === 0) return;\n\n // Build tree data for UI\n this.boneTree = allBones.map((bone) => {\n const isMapped = this.mappedBoneNames.has(bone.name);\n const semanticKey = this.semanticKeyMap.get(bone.name) ?? null;\n const boneChildren = bone.children\n .filter((c): c is THREE.Bone => isBone(c) && includedBones.has(c))\n .map((c) => c.name);\n const parentName = bone.parent && isBone(bone.parent) && includedBones.has(bone.parent)\n ? bone.parent.name\n : null;\n\n // Compute depth by walking up\n let depth = 0;\n let current: THREE.Object3D | null = bone.parent;\n while (current && isBone(current) && includedBones.has(current)) {\n depth++;\n current = current.parent;\n }\n\n return {\n name: bone.name,\n depth,\n parent: parentName,\n children: boneChildren,\n isMapped,\n semanticKey,\n boneObject: bone,\n };\n });\n\n // Create visualization meshes for each bone→child connection\n for (const bone of allBones) {\n const boneChildren = bone.children.filter(\n (c): c is THREE.Bone => isBone(c) && includedBones.has(c),\n );\n\n if (boneChildren.length > 0) {\n // Root/helper bones often exist only for rig transforms and produce\n // a misleading centerline (for example between a character's legs).\n if (shouldSkipRootHelperConnection(bone, boneChildren)) {\n continue;\n }\n\n for (const child of boneChildren) {\n this.createBoneMesh(bone, child);\n }\n } else {\n this.createBoneMesh(bone, null);\n }\n }\n\n this.group.add(this.axisGizmoGroup);\n\n // Attach onBeforeRender to a sentinel mesh for per-frame updates\n const sentinelGeo = new THREE.SphereGeometry(1e-6, 4, 2);\n const sentinelMat = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: 0,\n depthWrite: false,\n depthTest: false,\n });\n sentinelMat.colorWrite = false;\n const sentinel = new THREE.Mesh(sentinelGeo, sentinelMat);\n sentinel.visible = true;\n sentinel.frustumCulled = false;\n sentinel.onBeforeRender = (renderer, _scene, camera) => this.update(camera, renderer.domElement);\n this.sentinelMesh = sentinel;\n this.group.add(sentinel);\n\n this.scene.add(this.group);\n this.update();\n }\n\n private createBoneMesh(parentBone: THREE.Bone, childBone: THREE.Bone | null): void {\n const isMapped = this.mappedBoneNames.has(parentBone.name);\n const material = isMapped ? this.mappedMaterial : this.unmappedMaterial;\n\n const mesh = new THREE.Mesh(this.sharedGeometry, material);\n mesh.name = `bone_vis_${parentBone.name}${childBone ? `_${childBone.name}` : '_leaf'}`;\n mesh.frustumCulled = false;\n mesh.renderOrder = 999;\n\n // Store bone name for picking\n mesh.userData.boneName = parentBone.name;\n\n this.visualizations.push({\n mesh,\n parentBone,\n childBone,\n boneName: parentBone.name,\n isMapped,\n });\n\n this.group.add(mesh);\n }\n\n /** Called each frame via onBeforeRender. Updates all bone mesh transforms. */\n private update(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n this.advanceVisibility();\n\n for (const vis of this.visualizations) {\n vis.parentBone.getWorldPosition(_parentPos);\n\n if (vis.childBone) {\n vis.childBone.getWorldPosition(_childPos);\n } else {\n // Leaf bone: extend a short distance along bone's local Y axis\n _childPos.set(0, LEAF_BONE_LENGTH, 0);\n vis.parentBone.localToWorld(_childPos);\n }\n\n // Compute direction and length\n _direction.subVectors(_childPos, _parentPos);\n const length = _direction.length();\n\n if (length < 0.0001) {\n vis.mesh.visible = false;\n continue;\n }\n\n vis.mesh.visible = this.visibilityAlpha > VISIBILITY_EPSILON;\n\n // Orient: geometry is authored along +Z, align it with parent→child direction\n _direction.normalize();\n _quaternion.setFromUnitVectors(_zAxis, _direction);\n\n vis.mesh.position.copy(_parentPos);\n vis.mesh.quaternion.copy(_quaternion);\n vis.mesh.scale.set(length, length, length);\n }\n\n this.updateAxisGizmo(camera, domElement);\n }\n\n private syncVisibilityOpacity(): void {\n const alpha = this.visibilityAlpha * this.opacityScale;\n this.mappedMaterial.opacity = OPACITY.mapped * alpha;\n this.unmappedMaterial.opacity = OPACITY.unmapped * alpha;\n this.highlightMaterial.opacity = OPACITY.highlighted * alpha;\n this.selectedMaterial.opacity = OPACITY.selected * alpha;\n this.contextMaterial.opacity = OPACITY.context * alpha;\n this.mutedMaterial.opacity = OPACITY.muted * alpha;\n }\n\n private syncGroupVisibility(): void {\n this.group.visible = this.visualizations.length > 0 && (\n this.visibilityTarget > 0 ||\n this.visibilityAlpha > VISIBILITY_EPSILON ||\n this.selectedBone != null\n );\n }\n\n private advanceVisibility(): void {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const deltaMs = this.visibilityLastFrameAt > 0 ? now - this.visibilityLastFrameAt : 16;\n this.visibilityLastFrameAt = now;\n\n if (Math.abs(this.visibilityAlpha - this.visibilityTarget) > VISIBILITY_EPSILON) {\n const step = deltaMs / VISIBILITY_FADE_MS;\n if (this.visibilityTarget > this.visibilityAlpha) {\n this.visibilityAlpha = Math.min(this.visibilityTarget, this.visibilityAlpha + step);\n } else {\n this.visibilityAlpha = Math.max(this.visibilityTarget, this.visibilityAlpha - step);\n }\n } else {\n this.visibilityAlpha = this.visibilityTarget;\n }\n\n if (this.visibilityAlpha <= VISIBILITY_EPSILON && this.visibilityTarget === 0) {\n this.visibilityAlpha = 0;\n }\n\n this.syncVisibilityOpacity();\n this.syncGroupVisibility();\n }\n\n private resolveSelectedBoneObject(): THREE.Bone | null {\n if (!this.selectedBone) return null;\n return this.boneLookup.get(this.selectedBone) ?? null;\n }\n\n private resolveBoneRelativeAxisGizmoRadius(bone: THREE.Bone): number {\n bone.getWorldPosition(_parentPos);\n\n let referenceLength = 0;\n for (const child of bone.children) {\n if (!isBone(child)) continue;\n child.getWorldPosition(_childPos);\n const nextDistance = _parentPos.distanceTo(_childPos);\n if (nextDistance <= 0.0001) continue;\n referenceLength = referenceLength === 0 ? nextDistance : Math.min(referenceLength, nextDistance);\n }\n\n if (referenceLength <= 0.0001 && isBone(bone.parent)) {\n bone.parent.getWorldPosition(_childPos);\n referenceLength = _parentPos.distanceTo(_childPos);\n }\n\n if (referenceLength <= 0.0001) {\n referenceLength = LEAF_BONE_LENGTH;\n }\n\n return THREE.MathUtils.clamp(\n referenceLength * AXIS_GIZMO_RADIUS_FACTOR,\n AXIS_GIZMO_MIN_RADIUS,\n AXIS_GIZMO_MAX_RADIUS,\n );\n }\n\n private resolveScreenSpaceAxisGizmoRadius(\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number | null {\n if (!camera || !domElement) return null;\n\n const rect = domElement.getBoundingClientRect();\n const viewportHeight = domElement.clientHeight || rect.height;\n if (viewportHeight <= 0) return null;\n\n if ((camera as THREE.PerspectiveCamera).isPerspectiveCamera) {\n const perspectiveCamera = camera as THREE.PerspectiveCamera;\n _cameraSpacePosition.copy(origin).applyMatrix4(perspectiveCamera.matrixWorldInverse);\n const depth = -_cameraSpacePosition.z;\n if (!Number.isFinite(depth) || depth <= perspectiveCamera.near) return null;\n\n const visibleWorldHeight = 2\n * depth\n * Math.tan(THREE.MathUtils.degToRad(perspectiveCamera.getEffectiveFOV()) / 2);\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n if ((camera as THREE.OrthographicCamera).isOrthographicCamera) {\n const orthographicCamera = camera as THREE.OrthographicCamera;\n const visibleWorldHeight = (orthographicCamera.top - orthographicCamera.bottom) / orthographicCamera.zoom;\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n return null;\n }\n\n private resolveAxisGizmoRadius(\n bone: THREE.Bone,\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number {\n return this.resolveScreenSpaceAxisGizmoRadius(origin, camera, domElement)\n ?? this.resolveBoneRelativeAxisGizmoRadius(bone);\n }\n\n private updateAxisGizmoAppearance(): void {\n const hasSelection = !!this.selectedBone;\n this.axisGizmoGroup.visible = hasSelection && this.group.visible;\n\n const meshes: Array<[OverlayAxisKey, THREE.Mesh, THREE.Mesh]> = [\n ['pitch', this.axisGizmoMeshes.pitch, this.axisGizmoHitMeshes.pitch],\n ['yaw', this.axisGizmoMeshes.yaw, this.axisGizmoHitMeshes.yaw],\n ['roll', this.axisGizmoMeshes.roll, this.axisGizmoHitMeshes.roll],\n ];\n\n meshes.forEach(([axis, mesh, hitMesh]) => {\n const material = mesh.material as THREE.MeshBasicMaterial;\n const isActive = this.activeAxis === axis;\n const baseOpacity = this.activeAxis == null\n ? AXIS_GIZMO_IDLE_OPACITY\n : isActive\n ? AXIS_GIZMO_ACTIVE_OPACITY\n : AXIS_GIZMO_MUTED_OPACITY;\n material.opacity = hasSelection ? baseOpacity : 0;\n const scale = isActive ? AXIS_GIZMO_ACTIVE_SCALE : 1;\n mesh.scale.setScalar(scale);\n hitMesh.scale.setScalar(scale);\n });\n this.axisCenterMaterial.opacity = hasSelection ? 0.92 : 0;\n }\n\n private updateAxisGizmo(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n const selectedBone = this.resolveSelectedBoneObject();\n if (!selectedBone || !this.group.visible) {\n this.axisGizmoGroup.visible = false;\n return;\n }\n\n selectedBone.getWorldPosition(_bonePos);\n selectedBone.getWorldQuaternion(_boneQuat);\n const radius = this.resolveAxisGizmoRadius(selectedBone, _bonePos, camera, domElement);\n\n this.axisGizmoGroup.visible = true;\n this.axisGizmoGroup.position.copy(_bonePos);\n this.axisGizmoGroup.quaternion.copy(_boneQuat);\n this.axisGizmoGroup.scale.setScalar(radius);\n this.updateAxisGizmoAppearance();\n this.axisGizmoGroup.updateWorldMatrix(true, true);\n }\n\n private applyAxisRingChannel(\n mesh: THREE.Mesh,\n hitMesh: THREE.Mesh,\n axis: SkeletonOverlayAxisKey,\n ): void {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n mesh.rotation.set(0, 0, 0);\n hitMesh.rotation.set(0, 0, 0);\n\n if (channel === 'rx') {\n mesh.rotation.y = Math.PI / 2;\n hitMesh.rotation.y = Math.PI / 2;\n return;\n }\n\n if (channel === 'ry') {\n mesh.rotation.x = Math.PI / 2;\n hitMesh.rotation.x = Math.PI / 2;\n }\n }\n\n private syncAxisGizmoChannels(): void {\n (Object.keys(this.axisGizmoMeshes) as OverlayAxisKey[]).forEach((axis) => {\n this.applyAxisRingChannel(\n this.axisGizmoMeshes[axis],\n this.axisGizmoHitMeshes[axis],\n axis,\n );\n });\n }\n\n private getSelectedBonePointerData(): Omit<AxisGizmoPointerData, 'axis' | 'point' | 'channel'> | null {\n const bone = this.resolveSelectedBoneObject();\n if (!bone || !this.selectedBone) return null;\n\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n\n return {\n boneName: this.selectedBone,\n origin: _bonePos.clone(),\n quaternion: _boneQuat.clone(),\n };\n }\n\n private getAxisPlaneNormal(axis: SkeletonOverlayAxisKey, quaternion: THREE.Quaternion): THREE.Vector3 {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n if (channel === 'rx') {\n return _planeNormal.set(1, 0, 0).applyQuaternion(quaternion).normalize();\n }\n if (channel === 'ry') {\n return _planeNormal.set(0, 1, 0).applyQuaternion(quaternion).normalize();\n }\n return _planeNormal.set(0, 0, 1).applyQuaternion(quaternion).normalize();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────\n\n getBoneTree(): BoneTreeNode[] {\n return this.boneTree;\n }\n\n setVisible(visible: boolean): void {\n this.visibilityTarget = visible ? 1 : 0;\n this.visibilityLastFrameAt = 0;\n this.syncGroupVisibility();\n this.advanceVisibility();\n this.updateAxisGizmoAppearance();\n }\n\n isVisible(): boolean {\n return this.visibilityTarget > 0;\n }\n\n setHighlighted(boneName: string | null): void {\n this.highlightedBone = boneName;\n this.refreshBoneMaterials();\n }\n\n setSelected(boneName: string | null): void {\n this.selectedBone = boneName;\n\n this.refreshBoneMaterials();\n this.syncGroupVisibility();\n this.updateAxisGizmo();\n }\n\n setActiveAxis(axis: OverlayAxisKey | null): void {\n this.activeAxis = axis;\n this.updateAxisGizmoAppearance();\n }\n\n /** Get world position and rotation for a bone by name */\n getBoneTransform(boneName: string): { position: [number, number, number]; rotation: [number, number, number] } | null {\n const node = this.boneTree.find((b) => b.name === boneName);\n if (!node) return null;\n\n const bone = node.boneObject;\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n _boneEuler.setFromQuaternion(_boneQuat);\n\n return {\n position: [_bonePos.x, _bonePos.y, _bonePos.z],\n rotation: [\n THREE.MathUtils.radToDeg(_boneEuler.x),\n THREE.MathUtils.radToDeg(_boneEuler.y),\n THREE.MathUtils.radToDeg(_boneEuler.z),\n ],\n };\n }\n\n pickBone(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): string | null {\n if (!this.group.visible || this.visibilityTarget <= 0 || this.visibilityAlpha <= 0.35) {\n return null;\n }\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n const hits = _raycaster.intersectObjects(\n this.visualizations.map((visualization) => visualization.mesh),\n false,\n );\n const hit = hits[0];\n if (!hit) return null;\n\n return typeof hit.object.userData.boneName === 'string'\n ? hit.object.userData.boneName\n : null;\n }\n\n pickAxisGizmo(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) return null;\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const hits = _raycaster.intersectObjects(Object.values(this.axisGizmoHitMeshes), false);\n const hit = hits[0];\n if (!hit) return null;\n\n const axis: unknown = hit.object.userData.axis;\n if (axis !== 'pitch' && axis !== 'yaw' && axis !== 'roll') {\n return null;\n }\n\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.point.clone(),\n };\n }\n\n projectPointerToAxisPlane(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n axis: SkeletonOverlayAxisKey,\n ): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) {\n return null;\n }\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const normal = this.getAxisPlaneNormal(axis, base.quaternion);\n _dragPlane.setFromNormalAndCoplanarPoint(normal, base.origin);\n const hit = _raycaster.ray.intersectPlane(_dragPlane, _planeHit);\n if (!hit) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.clone(),\n };\n }\n\n private isSelectedContextBone(boneName: string): boolean {\n if (!this.selectedBone || boneName === this.selectedBone) return false;\n const selectedBone = this.boneLookup.get(this.selectedBone);\n const bone = this.boneLookup.get(boneName);\n if (!selectedBone || !bone) return false;\n return bone.parent === selectedBone || selectedBone.parent === bone;\n }\n\n private resolveBoneMaterial(boneName: string, isMapped: boolean): THREE.MeshBasicMaterial {\n if (boneName === this.selectedBone) {\n return this.selectedMaterial;\n }\n if (boneName === this.highlightedBone) {\n return this.highlightMaterial;\n }\n if (this.focusSelectedBone && this.selectedBone) {\n return this.isSelectedContextBone(boneName) ? this.contextMaterial : this.mutedMaterial;\n }\n return isMapped ? this.mappedMaterial : this.unmappedMaterial;\n }\n\n private refreshBoneMaterials(): void {\n for (const vis of this.visualizations) {\n vis.mesh.material = this.resolveBoneMaterial(vis.boneName, vis.isMapped);\n }\n }\n\n private clear(): void {\n // Dispose sentinel mesh resources before clearing\n if (this.sentinelMesh) {\n this.sentinelMesh.geometry.dispose();\n (this.sentinelMesh.material as THREE.Material).dispose();\n this.sentinelMesh = null;\n }\n // Remove all children from group\n while (this.group.children.length > 0) {\n this.group.remove(this.group.children[0]);\n }\n this.visualizations = [];\n this.boneTree = [];\n this.boneLookup.clear();\n this.axisGizmoGroup.visible = false;\n this.group.visible = false;\n }\n\n dispose(): void {\n this.scene.remove(this.group);\n this.clear();\n\n this.sharedGeometry.dispose();\n this.mappedMaterial.dispose();\n this.unmappedMaterial.dispose();\n this.highlightMaterial.dispose();\n this.selectedMaterial.dispose();\n this.contextMaterial.dispose();\n this.mutedMaterial.dispose();\n this.axisRingGeometry.dispose();\n this.axisRingHitGeometry.dispose();\n this.axisCenterGeometry.dispose();\n this.pitchRingMaterial.dispose();\n this.yawRingMaterial.dispose();\n this.rollRingMaterial.dispose();\n this.axisHitMaterial.dispose();\n this.axisCenterMaterial.dispose();\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nexport function collectSkeletonBones(root: THREE.Object3D): THREE.Bone[] {\n const startBone = resolveBodyDisplayRoot(root);\n return collectBones(startBone ?? root);\n}\n\n/**\n * Find the model root from a scene by locating the first bone\n * and walking up to the top-level scene child.\n */\nexport function findModelRoot(scene: THREE.Scene): THREE.Object3D | null {\n const roots: {\n tagged?: THREE.Object3D;\n bone?: THREE.Object3D;\n skinned?: THREE.Object3D;\n } = {};\n\n scene.traverse((obj) => {\n if (!roots.tagged && (obj.userData?.embodyCharacterModel === true || obj.userData?.loomlargeCharacterModel === true)) {\n roots.tagged = obj;\n }\n if (!roots.bone && (obj as THREE.Bone).isBone) {\n roots.bone = obj;\n }\n if (!roots.skinned && (obj as THREE.SkinnedMesh).isSkinnedMesh) {\n roots.skinned = obj;\n }\n });\n\n if (roots.tagged) return roots.tagged;\n\n const anchor = roots.bone ?? roots.skinned;\n if (!anchor) return null;\n\n // Walk up to find the direct child of the scene\n let current: THREE.Object3D | null = anchor;\n while (current && current.parent && current.parent !== scene) {\n current = current.parent;\n }\n\n return current;\n}\n\n/**\n * Build a set of mapped bone names and a semantic key lookup\n * from an engine's profile configuration.\n */\nexport function buildMappedBoneInfo(profile: {\n boneNodes?: Record<string, string>;\n bonePrefix?: string;\n boneSuffix?: string;\n suffixPattern?: string;\n}, actualBoneNames: Iterable<string> = []): { mappedNames: Set<string>; semanticKeyMap: Map<string, string>; semanticKeysMap: Map<string, string[]> } {\n const mappedNames = new Set<string>();\n const semanticKeyMap = new Map<string, string>();\n const semanticKeysMap = new Map<string, string[]>();\n const actualNames = Array.from(new Set(actualBoneNames));\n\n const boneNodes = profile.boneNodes || {};\n const prefix = profile.bonePrefix || '';\n const suffix = profile.boneSuffix || '';\n const addSemanticKey = (boneName: string, semanticKey: string) => {\n mappedNames.add(boneName);\n if (!semanticKeyMap.has(boneName)) {\n semanticKeyMap.set(boneName, semanticKey);\n }\n\n const existing = semanticKeysMap.get(boneName) ?? [];\n if (!existing.includes(semanticKey)) {\n semanticKeysMap.set(boneName, [...existing, semanticKey]);\n }\n };\n\n for (const [semanticKey, nodeName] of Object.entries(boneNodes)) {\n const fullName = prefix + nodeName + suffix;\n addSemanticKey(fullName, semanticKey);\n // Also add raw name for fuzzy matching\n if (fullName !== nodeName) {\n addSemanticKey(nodeName, semanticKey);\n }\n actualNames.forEach((actualName) => {\n if (\n fuzzyNameMatch(actualName, fullName, profile.suffixPattern)\n || fuzzyNameMatch(actualName, nodeName, profile.suffixPattern)\n ) {\n addSemanticKey(actualName, semanticKey);\n }\n });\n }\n\n return { mappedNames, semanticKeyMap, semanticKeysMap };\n}\n","import * as THREE from 'three';\n\nconst DEFAULT_THRESHOLD = 1e-4;\nconst DEFAULT_MAX_POINTS = 12000;\n\nconst COLOR_LOW = { r: 1.0, g: 0.78, b: 0.28 };\nconst COLOR_HIGH = { r: 1.0, g: 0.36, b: 0.16 };\n\nexport interface MorphVertexPreviewOptions {\n threshold?: number;\n maxPoints?: number;\n}\n\nexport interface MorphVertexPreviewSample {\n indices: Uint32Array;\n intensities: Float32Array;\n}\n\nexport interface MorphVertexPreviewRenderData {\n positions: Float32Array;\n colors: Float32Array;\n pointCount: number;\n meshCount: number;\n}\n\nfunction getMorphPositionAttribute(\n mesh: THREE.Mesh,\n morphName: string,\n): THREE.BufferAttribute | THREE.InterleavedBufferAttribute | null {\n const morphIndex = mesh.morphTargetDictionary?.[morphName];\n if (morphIndex == null) return null;\n\n const morphPositions = mesh.geometry.morphAttributes.position;\n return morphPositions?.[morphIndex] ?? null;\n}\n\nfunction getDeltaMagnitudeAtIndex(\n mesh: THREE.Mesh,\n morphAttribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n index: number,\n): number {\n const geometry = mesh.geometry;\n const relative = geometry.morphTargetsRelative;\n const basePositions = geometry.getAttribute('position');\n if (!basePositions) return 0;\n\n const dx = morphAttribute.getX(index) - (relative ? 0 : basePositions.getX(index));\n const dy = morphAttribute.getY(index) - (relative ? 0 : basePositions.getY(index));\n const dz = morphAttribute.getZ(index) - (relative ? 0 : basePositions.getZ(index));\n return Math.hypot(dx, dy, dz);\n}\n\nexport function resolveMorphPreviewMeshes(\n root: THREE.Object3D,\n morphName: string,\n meshNames?: string[],\n): THREE.Mesh[] {\n const nameFilter = meshNames?.length ? new Set(meshNames) : null;\n const meshes: THREE.Mesh[] = [];\n\n root.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (!mesh.isMesh) return;\n if (nameFilter && !nameFilter.has(mesh.name)) return;\n if (mesh.morphTargetDictionary?.[morphName] == null) return;\n meshes.push(mesh);\n });\n\n return meshes;\n}\n\nexport function buildMorphVertexPreviewSample(\n mesh: THREE.Mesh,\n morphName: string,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewSample | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const morphAttribute = getMorphPositionAttribute(mesh, morphName);\n if (!morphAttribute) return null;\n\n const candidateIndices: number[] = [];\n const magnitudes: number[] = [];\n\n for (let index = 0; index < morphAttribute.count; index += 1) {\n const magnitude = getDeltaMagnitudeAtIndex(mesh, morphAttribute, index);\n if (magnitude <= threshold) continue;\n candidateIndices.push(index);\n magnitudes.push(magnitude);\n }\n\n if (candidateIndices.length === 0) return null;\n\n const stride = candidateIndices.length > maxPoints ? Math.ceil(candidateIndices.length / maxPoints) : 1;\n const sampleCount = Math.ceil(candidateIndices.length / stride);\n const indices = new Uint32Array(sampleCount);\n const intensities = new Float32Array(sampleCount);\n\n let maxMagnitude = 0;\n let cursor = 0;\n for (let i = 0; i < candidateIndices.length; i += stride) {\n const magnitude = magnitudes[i] ?? 0;\n indices[cursor] = candidateIndices[i] ?? 0;\n intensities[cursor] = magnitude;\n maxMagnitude = Math.max(maxMagnitude, magnitude);\n cursor += 1;\n }\n\n const normalizer = maxMagnitude > 0 ? 1 / maxMagnitude : 1;\n for (let i = 0; i < intensities.length; i += 1) {\n intensities[i] *= normalizer;\n }\n\n return { indices, intensities };\n}\n\nfunction writePointColor(colors: Float32Array, offset: number, intensity: number): void {\n colors[offset] = COLOR_LOW.r + (COLOR_HIGH.r - COLOR_LOW.r) * intensity;\n colors[offset + 1] = COLOR_LOW.g + (COLOR_HIGH.g - COLOR_LOW.g) * intensity;\n colors[offset + 2] = COLOR_LOW.b + (COLOR_HIGH.b - COLOR_LOW.b) * intensity;\n}\n\nexport function buildMorphVertexPreviewRenderData(\n meshes: THREE.Mesh[],\n morphName: string,\n cache: Map<string, MorphVertexPreviewSample>,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewRenderData | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const sampledMeshes: Array<{ mesh: THREE.Mesh; sample: MorphVertexPreviewSample }> = [];\n let pointCount = 0;\n\n for (const mesh of meshes) {\n const cacheKey = `${mesh.uuid}:${morphName}:${threshold}:${maxPoints}`;\n let sample = cache.get(cacheKey) ?? null;\n if (!sample) {\n sample = buildMorphVertexPreviewSample(mesh, morphName, { threshold, maxPoints });\n if (sample) cache.set(cacheKey, sample);\n }\n if (!sample) continue;\n sampledMeshes.push({ mesh, sample });\n pointCount += sample.indices.length;\n }\n\n if (pointCount === 0) return null;\n\n const positions = new Float32Array(pointCount * 3);\n const colors = new Float32Array(pointCount * 3);\n const vertex = new THREE.Vector3();\n let cursor = 0;\n\n for (const { mesh, sample } of sampledMeshes) {\n mesh.updateWorldMatrix(true, false);\n const skinnedMesh = mesh as THREE.SkinnedMesh;\n if (skinnedMesh.isSkinnedMesh && skinnedMesh.skeleton) {\n skinnedMesh.skeleton.update();\n }\n\n for (let i = 0; i < sample.indices.length; i += 1) {\n mesh.getVertexPosition(sample.indices[i] ?? 0, vertex);\n vertex.applyMatrix4(mesh.matrixWorld);\n\n const offset = cursor * 3;\n positions[offset] = vertex.x;\n positions[offset + 1] = vertex.y;\n positions[offset + 2] = vertex.z;\n writePointColor(colors, offset, sample.intensities[i] ?? 0);\n cursor += 1;\n }\n }\n\n return {\n positions,\n colors,\n pointCount,\n meshCount: sampledMeshes.length,\n };\n}\n\ntype PreviewRenderBinding = {\n callbacks: Set<() => void>;\n previous: THREE.Scene['onBeforeRender'];\n render: THREE.Scene['onBeforeRender'];\n};\nconst previewRenderBindings = new WeakMap<THREE.Scene, PreviewRenderBinding>();\n\nfunction bindPreviewRender(scene: THREE.Scene, update: () => void): () => void {\n let binding = previewRenderBindings.get(scene);\n if (!binding) {\n const previous = scene.onBeforeRender;\n const callbacks = new Set<() => void>();\n const render: THREE.Scene['onBeforeRender'] = function (...args) {\n previous.apply(scene, args);\n callbacks.forEach(callback => callback());\n };\n binding = { callbacks, previous, render };\n scene.onBeforeRender = render;\n previewRenderBindings.set(scene, binding);\n }\n binding.callbacks.add(update);\n const current = binding;\n return () => {\n current.callbacks.delete(update);\n if (current.callbacks.size > 0) return;\n if (scene.onBeforeRender === current.render) scene.onBeforeRender = current.previous;\n if (previewRenderBindings.get(scene) === current) previewRenderBindings.delete(scene);\n };\n}\n\n/** Editor overlay sampled by the existing Three render loop, without a separate frame timer. */\nexport class MorphVertexPreview {\n private readonly cache = new Map<string, MorphVertexPreviewSample>();\n private points: THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> | null = null;\n private active: { morphName: string; meshNames?: string[] } | null = null;\n private disposed = false;\n private unbindRender: (() => void) | null = null;\n\n constructor(\n private readonly scene: THREE.Scene,\n private readonly options: MorphVertexPreviewOptions = {},\n ) {}\n\n show(morphName: string, meshNames?: string[]): void {\n if (this.disposed) return;\n if (meshNames?.length === 0) {\n this.hide();\n return;\n }\n this.active = { morphName, meshNames: meshNames?.slice() };\n this.unbindRender ??= bindPreviewRender(this.scene, () => this.update());\n this.update();\n }\n\n hide(): void {\n this.active = null;\n this.unbindRender?.();\n this.unbindRender = null;\n if (this.points) this.points.visible = false;\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.hide();\n this.cache.clear();\n if (!this.points) return;\n this.points.removeFromParent();\n this.points.geometry.dispose();\n this.points.material.dispose();\n this.points = null;\n }\n\n private createPoints(): THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> {\n const points = new THREE.Points(new THREE.BufferGeometry(), new THREE.PointsMaterial({\n size: 0.012,\n sizeAttenuation: true,\n transparent: true,\n opacity: 0.9,\n depthWrite: false,\n vertexColors: true,\n toneMapped: false,\n }));\n points.name = 'MorphVertexPreviewPoints';\n points.renderOrder = 500;\n points.frustumCulled = false;\n points.visible = false;\n this.scene.add(points);\n this.points = points;\n return points;\n }\n\n private update(): void {\n if (this.disposed || !this.active) return;\n const { morphName, meshNames } = this.active;\n const meshes = resolveMorphPreviewMeshes(this.scene, morphName, meshNames);\n const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options);\n if (!data) {\n if (this.points) this.points.visible = false;\n return;\n }\n const points = this.points ?? this.createPoints();\n this.updateAttribute(points.geometry, 'position', data.positions, data.pointCount);\n this.updateAttribute(points.geometry, 'color', data.colors, data.pointCount);\n points.geometry.computeBoundingSphere();\n points.material.size = data.pointCount > 6000 ? 0.009 : 0.012;\n points.visible = true;\n }\n\n private updateAttribute(\n geometry: THREE.BufferGeometry,\n name: string,\n values: Float32Array,\n pointCount: number,\n ): void {\n const attribute = geometry.getAttribute(name) as THREE.BufferAttribute | undefined;\n if (!attribute || attribute.count !== pointCount) {\n geometry.setAttribute(name, new THREE.BufferAttribute(values, 3));\n return;\n }\n attribute.array.set(values);\n attribute.needsUpdate = true;\n }\n}\n","import {\n AdditiveBlending,\n AnimationClip,\n BufferAttribute,\n Euler,\n InterpolateDiscrete,\n MultiplyBlending,\n NoBlending,\n NormalBlending,\n NumberKeyframeTrack,\n PropertyBinding,\n Quaternion,\n QuaternionKeyframeTrack,\n SubtractiveBlending,\n VectorKeyframeTrack,\n} from 'three';\nexport * from './annotations/index';\nexport * from './authoring';\nexport * from './character';\nexport * from './characterHost';\nexport { renderScenePlayback, createScenePlaybackFrame } from './playbackRendering';\nimport { bindModelReferencePose } from './reference-pose';\nimport { concreteTrackName, withComponentTracks } from './clipBindings';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\n\nexport { captureModelReferencePose, bindModelReferencePose, extendModelReferencePose } from './reference-pose';\nexport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nexport { ThreeNativePlaybackConnector } from './nativePlayback';\nexport type {\n ThreeNativeLoop,\n ThreeNativePlaybackOptions,\n ThreeNativePlaybackControl,\n ThreeNativePlaybackEvent,\n ThreeNativePlaybackBinding,\n} from './nativePlayback';\nimport type {\n KeyframeTrack,\n Material,\n Mesh,\n Object3D,\n} from 'three';\n\nexport const THREE_BLENDING_MODES = {\n Normal: NormalBlending,\n Additive: AdditiveBlending,\n Subtractive: SubtractiveBlending,\n Multiply: MultiplyBlending,\n None: NoBlending,\n} as const;\nexport const BLENDING_MODES = THREE_BLENDING_MODES;\n\ntype BoneEntry = {\n obj: Object3D;\n basePos: { x: number; y: number; z: number };\n baseQuat: ReturnType<Object3D['quaternion']['clone']>;\n baseEuler: { x: number; y: number; z: number; order: string };\n};\n\nconst MORPH_ATTRIBUTE_SEMANTICS = ['position', 'normal', 'tangent', 'color'] as const;\ntype MorphAttributeSemantic = typeof MORPH_ATTRIBUTE_SEMANTICS[number];\n\ntype MorphTargetInput = {\n meshName: string;\n name: string;\n relative?: boolean;\n position: ArrayLike<number>;\n normal?: ArrayLike<number>;\n tangent?: ArrayLike<number>;\n color?: ArrayLike<number>;\n};\n\ntype AddMorphTargetOptions = {\n forceGeometryReplacement?: boolean;\n replace?: boolean;\n resetInfluence?: boolean;\n};\n\ntype MorphMutationStage = {\n mesh: Mesh;\n sourceGeometry: Mesh['geometry'];\n geometry: Mesh['geometry'];\n dictionary: Record<string, number>;\n influences: number[];\n};\n\nconst createNeutralMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base) throw new Error(`Cannot create ${semantic} morph data without a base attribute`);\n\n const values = new Float32Array(base.count * base.itemSize);\n if (!geometry.morphTargetsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n values[vertexIndex * base.itemSize + component] = base.getComponent(vertexIndex, component);\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nconst createMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n data: ArrayLike<number>,\n sourceIsRelative: boolean,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base || data.length !== base.count * base.itemSize) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const values = new Float32Array(Array.from(data));\n const destinationIsRelative = geometry.morphTargetsRelative;\n if (sourceIsRelative !== destinationIsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n const offset = vertexIndex * base.itemSize + component;\n const baseValue = base.getComponent(vertexIndex, component);\n values[offset] = destinationIsRelative\n ? values[offset] - baseValue\n : values[offset] + baseValue;\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nexport type ThreeModelInspection = {\n descriptor: Record<string, unknown> & {\n morphTargets: Array<{\n id: number;\n meshId: number | undefined;\n name: string;\n hostIndex: number;\n initialValue: number;\n }>;\n };\n meshByName: Map<string, Mesh>;\n allMeshes: Mesh[];\n morphMeshes: Mesh[];\n bones: Record<string, BoneEntry>;\n meshBindings: Map<number, Mesh>;\n morphBindings: Map<number, { mesh: Mesh; index: number }>;\n boneBindings: Map<number, Object3D>;\n objectBindings: Map<number, Object3D>;\n};\n\nconst transform = (obj: Object3D) => ({\n position: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n rotation: { x: obj.quaternion.x, y: obj.quaternion.y, z: obj.quaternion.z, w: obj.quaternion.w },\n scale: { x: obj.scale.x, y: obj.scale.y, z: obj.scale.z },\n});\n\nconst snapshot = (obj: Object3D, reference?: ThreeReferencePoseNode): BoneEntry => {\n if (!reference) {\n return {\n obj,\n basePos: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n baseQuat: obj.quaternion.clone(),\n baseEuler: { x: obj.rotation.x, y: obj.rotation.y, z: obj.rotation.z, order: obj.rotation.order },\n };\n }\n const { position, rotation } = reference.transform;\n const baseQuat = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(baseQuat, reference.rotationOrder);\n return {\n obj,\n basePos: { ...position },\n baseQuat,\n baseEuler: { x: euler.x, y: euler.y, z: euler.z, order: reference.rotationOrder },\n };\n};\n\nconst boneDepth = (obj: Object3D) => {\n let depth = 0;\n let parent = obj.parent;\n while (parent) {\n if ((parent as any).isBone || parent.type === 'Bone') depth += 1;\n parent = parent.parent;\n }\n return depth;\n};\n\nconst morphEntries = (mesh: Mesh) => {\n const dictionary = mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> }).morphTargetDictionary;\n if (dictionary) {\n return Object.entries(dictionary)\n .map(([name, index]) => ({ name, index }))\n .sort((left, right) => left.index - right.index);\n }\n return (mesh.morphTargetInfluences ?? []).map((_, index) => ({ name: `morph_${index}`, index }));\n};\n\nexport class ThreeModelInspector {\n inspectModel(model: Object3D, options: {\n meshes?: Mesh[];\n profile?: any;\n /** Explicit reference captured before playback; omitted keeps legacy current-pose inspection. */\n referencePose?: ThreeModelReferencePose;\n } = {}): ThreeModelInspection {\n const references = options.referencePose ? bindModelReferencePose(model, options.referencePose) : undefined;\n const restTransform = (object: Object3D) => {\n const reference = references?.get(object);\n return reference ? {\n position: { ...reference.transform.position },\n rotation: { ...reference.transform.rotation },\n scale: { ...reference.transform.scale },\n } : transform(object);\n };\n const objects: Object3D[] = [];\n const allMeshes: Mesh[] = [];\n const boneObjects: Object3D[] = [];\n model.traverse((obj: any) => {\n objects.push(obj);\n if (obj.isMesh) allMeshes.push(obj);\n if (obj.isBone || obj.type === 'Bone') boneObjects.push(obj);\n });\n const inputMeshes = options.meshes ?? [];\n const morphMeshes = Array.from(new Set([...inputMeshes, ...allMeshes.filter((mesh) => morphEntries(mesh).length > 0)]));\n const meshByName = new Map(allMeshes.filter((mesh) => mesh.name).map((mesh) => [mesh.name, mesh]));\n const meshBindings = new Map(allMeshes.map((mesh, index) => [index + 1, mesh]));\n const boneBindings = new Map(boneObjects.map((bone, index) => [index + 1, bone]));\n const objectBindings = new Map(objects.map((object, index) => [index + 1, object]));\n const meshIds = new Map(Array.from(meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map(Array.from(boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map(Array.from(objectBindings, ([id, object]) => [object, id]));\n const morphBindings = new Map<number, { mesh: Mesh; index: number }>();\n const morphTargets: ThreeModelInspection['descriptor']['morphTargets'] = [];\n const morphIdsByMesh = new Map<Mesh, number[]>();\n let morphId = 1;\n for (const mesh of allMeshes) {\n const ids: number[] = [];\n for (const entry of morphEntries(mesh)) {\n ids.push(morphId);\n morphBindings.set(morphId, { mesh, index: entry.index });\n morphTargets.push({\n id: morphId,\n meshId: meshIds.get(mesh),\n name: entry.name,\n hostIndex: entry.index,\n initialValue: mesh.morphTargetInfluences?.[entry.index] ?? 0,\n });\n morphId += 1;\n }\n morphIdsByMesh.set(mesh, ids);\n }\n const bones: Record<string, BoneEntry> = {};\n for (const bone of boneObjects) {\n if (bone.name) bones[bone.name] = snapshot(bone, references?.get(bone));\n }\n const profile = options.profile;\n if (profile?.boneNodes) {\n for (const [key, base] of Object.entries(profile.boneNodes as Record<string, string>)) {\n const prefix = profile.bonePrefix ?? '';\n const suffix = profile.boneSuffix ?? '';\n const name = `${base.startsWith(prefix) ? '' : prefix}${base}${base.endsWith(suffix) ? '' : suffix}`;\n const object = model.getObjectByName(name) ?? model.getObjectByName(base);\n if (object) bones[key] = bones[object.name] ?? snapshot(object, references?.get(object));\n }\n }\n return {\n descriptor: {\n id: model.uuid,\n name: model.name || undefined,\n meshes: allMeshes.map((mesh) => ({\n id: meshIds.get(mesh),\n name: mesh.name,\n morphTargetIds: morphIdsByMesh.get(mesh) ?? [],\n visible: mesh.visible,\n })),\n morphTargets,\n bones: boneObjects.map((bone) => {\n const world = references?.get(bone)?.worldPosition ?? bone.getWorldPosition(bone.position.clone());\n const parent = bone.parent && ((bone.parent as any).isBone || bone.parent.type === 'Bone')\n ? bone.parent.name || null\n : null;\n return {\n id: boneIds.get(bone),\n name: bone.name,\n parentName: parent,\n worldPosition: { x: world.x, y: world.y, z: world.z },\n depth: boneDepth(bone),\n restTransform: restTransform(bone),\n };\n }),\n objects: objects.map((object) => ({\n id: objectIds.get(object),\n name: object.name,\n isBone: !!((object as any).isBone || object.type === 'Bone'),\n isCamera: !!(object as any).isCamera,\n restTransform: restTransform(object),\n })),\n },\n meshByName,\n allMeshes,\n morphMeshes,\n bones,\n meshBindings,\n morphBindings,\n boneBindings,\n objectBindings,\n };\n }\n}\n\nconst findTrackTarget = (model: Object3D, track: KeyframeTrack) => {\n try {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const key = parsed.objectName === 'bones' && parsed.objectIndex\n ? String(parsed.objectIndex)\n : parsed.nodeName;\n const object = key\n ? model.getObjectByProperty('uuid', key) ?? PropertyBinding.findNode(model, key)\n : model;\n return { parsed, object };\n } catch {\n return null;\n }\n};\n\nexport type ClipIRTrack = {\n id?: number;\n channelId?: number;\n target: {\n kind?: string;\n meshId?: number;\n morphTargetId?: number;\n boneId?: number;\n objectId?: number;\n property?: string;\n };\n valueType: string;\n times: number[];\n values: number[];\n interpolation?: string;\n /** Replace the first sample with the bound property's current value. */\n inheritStart?: boolean;\n sourceName?: string;\n};\n\nexport type ClipIR = {\n name: string;\n durationSeconds?: number;\n channels?: Array<{ id: number; kind: string; name?: string }>;\n tracks: ClipIRTrack[];\n};\n\n/**\n * Convert host-neutral ClipIR (concrete morph/bone tracks) into a Three.js\n * AnimationClip. The host AnimationMixer owns playback and lerping.\n *\n * Inherited starts are captured from the current scene during this call. Cache\n * the ClipIR and call this again immediately before each play/replay, including\n * utterance replacement. Reusing a returned AnimationClip retains its old start.\n * The source ClipIR is never modified. A delayed inherited first key holds the\n * captured pose until that timestamp, matching ordinary Three track sampling.\n */\nexport function createAnimationClipFromClipIR(\n clip: ClipIR,\n inspection: ThreeModelInspection,\n): AnimationClip {\n const tracks: KeyframeTrack[] = [];\n for (const track of clip.tracks ?? []) {\n const kind = track.target?.kind;\n const trackName = concreteTrackName(track.target, inspection);\n if (!trackName) continue;\n const times = Array.from(track.times ?? []);\n const values = Array.from(track.values ?? []);\n if (!times.length || !values.length) continue;\n // Imported step tracks must keep their hold semantics on the host mixer.\n // Omitted/linear interpolation retains the existing Three default.\n const interpolation = track.interpolation === 'step' ? InterpolateDiscrete : undefined;\n\n if (kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(track.target.morphTargetId));\n if (!binding?.mesh) continue;\n if (track.inheritStart) {\n values[0] = binding.mesh.morphTargetInfluences?.[binding.index] ?? 0;\n }\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n continue;\n }\n\n if (kind === 'boneTransform' || kind === 'objectTransform') {\n const object = kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(track.target.boneId))\n : inspection.objectBindings.get(Number(track.target.objectId));\n if (!object) continue;\n const property = track.target.property ?? 'rotation';\n if (property === 'rotation' || property === 'quaternion') {\n if (track.inheritStart) object.quaternion.toArray(values, 0);\n tracks.push(new QuaternionKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') {\n const axis = property.slice(-1).toLowerCase() as 'x' | 'y' | 'z';\n if (track.inheritStart) values[0] = object.rotation[axis];\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'position') {\n if (track.inheritStart) object.position.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'scale') {\n if (track.inheritStart) object.scale.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n }\n continue;\n }\n\n if (kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(track.target.meshId));\n if (!mesh) continue;\n if (track.inheritStart) values[0] = Number(mesh.visible);\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n }\n }\n\n const duration = Number.isFinite(clip.durationSeconds)\n ? Number(clip.durationSeconds)\n : -1;\n return new AnimationClip(clip.name || 'clip', duration, tracks);\n}\n\nexport function serializeAnimationClips(\n model: Object3D,\n clips: readonly AnimationClip[],\n inspection: ThreeModelInspection,\n) {\n const meshIds = new Map(Array.from(inspection.meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map<object, number>(Array.from(inspection.boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map<object, number>(Array.from(inspection.objectBindings, ([id, object]) => [object, id]));\n return clips.map((clip) => {\n const tracks: ClipIRTrack[] = [];\n const channelKinds = new Map<string, number>();\n const channelId = (kind: 'face' | 'body' | 'scene') => {\n const existing = channelKinds.get(kind);\n if (existing) return existing;\n const id = channelKinds.size + 1;\n channelKinds.set(kind, id);\n return id;\n };\n withComponentTracks(clip).tracks.forEach((track, index) => {\n const found = findTrackTarget(model, track);\n if (!found?.object) return;\n const { parsed, object } = found;\n let target: ClipIRTrack['target'] | null = null;\n const property = parsed.propertyName;\n if ((property === 'morphTargetInfluences' || property === 'weights') && (object as any).isMesh) {\n const mesh = object as Mesh;\n const requested = parsed.propertyIndex;\n const indexValue = typeof requested === 'number'\n ? requested\n : Number.isFinite(Number(requested))\n ? Number(requested)\n : mesh.morphTargetDictionary?.[String(requested)];\n const binding = Array.from(inspection.morphBindings).find(([, entry]) => entry.mesh === mesh && entry.index === indexValue);\n if (binding) target = { kind: 'morphTarget', meshId: meshIds.get(mesh), morphTargetId: binding[0] };\n } else if (property === 'visible' && (object as any).isMesh) {\n target = { kind: 'meshVisibility', meshId: meshIds.get(object as Mesh) };\n } else {\n const transformProperty = property === 'rotation' && ['x', 'y', 'z'].includes(String(parsed.propertyIndex))\n ? `euler${String(parsed.propertyIndex).toUpperCase()}`\n : property === 'quaternion'\n ? 'rotation'\n : property === 'position'\n ? 'position'\n : property === 'scale'\n ? 'scale'\n : null;\n if (transformProperty) {\n const boneId = boneIds.get(object);\n target = boneId\n ? { kind: 'boneTransform', boneId, property: transformProperty }\n : { kind: 'objectTransform', objectId: objectIds.get(object), property: transformProperty };\n }\n }\n if (!target) return;\n const kind = target.kind === 'morphTarget'\n ? 'face'\n : target.kind === 'boneTransform'\n ? 'body'\n : 'scene';\n // glTF cubic tracks store in-tangent/value/out-tangent per key. The\n // registry/validation view describes values; native playback retains\n // the original track and its Three interpolant, including its tangents.\n const cubic = !!(track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline;\n const size = track.getValueSize() / (cubic ? 3 : 1);\n if (!Array.from(track.values).every(Number.isFinite)) {\n throw new Error(`Animation track ${JSON.stringify(track.name)} contains non-finite samples.`);\n }\n const values = cubic\n ? Array.from(track.times).flatMap((_, key) => Array.from(track.values.slice((key * 3 + 1) * size, (key * 3 + 2) * size)))\n : Array.from(track.values);\n tracks.push({\n id: index + 1,\n channelId: channelId(kind),\n target,\n valueType: size === 4 ? 'quat' : size === 3 ? 'vec3' : 'scalar',\n times: Array.from(track.times),\n values,\n interpolation: track.getInterpolation() === InterpolateDiscrete ? 'step' : 'linear',\n sourceName: track.name,\n });\n });\n return {\n name: clip.name,\n durationSeconds: clip.duration,\n channels: Array.from(channelKinds, ([kind, id]) => ({ id, kind, name: kind })),\n tracks,\n };\n });\n}\n\ntype MaterialConfig = {\n renderOrder?: number;\n transparent?: boolean;\n opacity?: number;\n depthWrite?: boolean;\n depthTest?: boolean;\n blending?: keyof typeof THREE_BLENDING_MODES;\n};\n\nconst materials = (value: Material | Material[] | undefined): Material[] =>\n value ? (Array.isArray(value) ? value : [value]) : [];\n\nexport class ThreeFrameApplier {\n private meshes = new Map<number, Mesh>();\n private morphs = new Map<number, { mesh: Mesh; index: number }>();\n private bones = new Map<number, Object3D>();\n private objects = new Map<number, Object3D>();\n private originalEmissive = new Map<string, { color: number; intensity: number }>();\n\n setBindings(inspection: ThreeModelInspection) {\n this.meshes = new Map(inspection.meshBindings);\n this.morphs = new Map(inspection.morphBindings);\n this.bones = new Map(inspection.boneBindings);\n this.objects = new Map(inspection.objectBindings);\n }\n\n applyPackedMorphFrameDelta(values: ArrayLike<number>, stride = 4) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const binding = this.morphs.get(values[offset + 1]);\n if (binding?.mesh.morphTargetInfluences) {\n binding.mesh.morphTargetInfluences[binding.index] = values[offset + 2] ?? 0;\n }\n }\n }\n\n applyPackedBoneFrameDelta(values: ArrayLike<number>, stride = 9) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const bone = this.bones.get(values[offset]);\n if (!bone) continue;\n const flags = values[offset + 8] ?? 0;\n if (flags & 1) bone.position.set(values[offset + 1], values[offset + 2], values[offset + 3]);\n if (flags & 2) bone.quaternion.set(values[offset + 4], values[offset + 5], values[offset + 6], values[offset + 7]).normalize();\n bone.updateMatrixWorld(false);\n }\n }\n\n applySceneFrame(frame: string | Record<string, any>) {\n const value = typeof frame === 'string' ? JSON.parse(frame) : frame;\n for (const write of value.boneScales ?? []) this.bones.get(write.boneId)?.scale.fromArray(write.scale);\n for (const write of value.objects ?? []) {\n const object = this.objects.get(write.objectId);\n if (!object) continue;\n if (write.position) object.position.fromArray(write.position);\n if (write.rotation) object.quaternion.fromArray(write.rotation).normalize();\n if (write.scale) object.scale.fromArray(write.scale);\n object.updateMatrixWorld(false);\n }\n for (const write of value.meshes ?? []) {\n const mesh = this.meshes.get(write.meshId);\n if (mesh) mesh.visible = write.visible;\n }\n }\n\n applyMeshMaterialConfigs(root: Object3D, configs: Record<string, { visible?: boolean; material?: MaterialConfig }>) {\n root.traverse((object: any) => {\n if (!object.isMesh || !object.name) return;\n const config = configs[object.name];\n if (!config) return;\n // Profile replay runs when a model binds and when its profile changes.\n // A visibility-only entry is just as authored as a material override.\n if (typeof config.visible === 'boolean') object.visible = config.visible;\n if (config.material) this.applyMaterial(object, config.material);\n });\n }\n\n getMeshMaterialConfig(root: Object3D, name: string) {\n let result: Record<string, unknown> | null = null;\n this.visitMesh(root, name, (mesh) => {\n const material: any = materials((mesh as any).material)[0];\n if (!material) return;\n const blending = Object.entries(THREE_BLENDING_MODES).find(([, value]) => value === material.blending)?.[0] ?? 'Normal';\n result = { renderOrder: mesh.renderOrder, transparent: material.transparent, opacity: material.opacity, depthWrite: material.depthWrite, depthTest: material.depthTest, blending };\n });\n return result;\n }\n\n setMeshMaterialConfig(root: Object3D, name: string, config: MaterialConfig) {\n this.visitMesh(root, name, (mesh) => this.applyMaterial(mesh, config));\n }\n\n setMeshVisible(root: Object3D, name: string, visible: boolean) {\n this.visitMesh(root, name, (mesh) => { mesh.visible = visible; });\n }\n\n highlightMesh(root: Object3D, name: string | null, color = 0x00ffff, intensity = 0.5) {\n root.traverse((object: any) => {\n if (!object.isMesh) return;\n for (const material of materials(object.material) as any[]) {\n if (!material.emissive) continue;\n const key = `${object.uuid}:${material.uuid}`;\n if (name === object.name) {\n if (!this.originalEmissive.has(key)) this.originalEmissive.set(key, { color: material.emissive.getHex(), intensity: material.emissiveIntensity ?? 0 });\n material.emissive.setHex(color);\n material.emissiveIntensity = intensity;\n } else {\n const original = this.originalEmissive.get(key);\n if (original) {\n material.emissive.setHex(original.color);\n material.emissiveIntensity = original.intensity;\n }\n }\n }\n });\n }\n\n applyHairAppearance(meshes: readonly Mesh[], appearance: any) {\n for (const mesh of meshes) {\n for (const material of materials((mesh as any).material) as any[]) {\n if (appearance.baseColor && material.color) material.color.set(appearance.baseColor);\n if (appearance.emissive && material.emissive) material.emissive.set(appearance.emissive);\n if (typeof appearance.emissiveIntensity === 'number') material.emissiveIntensity = appearance.emissiveIntensity;\n material.needsUpdate = true;\n }\n }\n }\n\n addMorphTarget(\n root: Object3D,\n target: MorphTargetInput,\n options: AddMorphTargetOptions = {},\n ) {\n return this.addMorphTargets(root, [target], options)[`${target.meshName}:${target.name}`];\n }\n\n addMorphTargets(\n root: Object3D,\n targets: readonly MorphTargetInput[],\n options: AddMorphTargetOptions = {},\n ) {\n if (targets.length === 0) return {};\n\n const stages = new Map<string, MorphMutationStage>();\n const result: Record<string, number> = {};\n const batchKeys = new Set<string>();\n\n try {\n for (const target of targets) {\n const key = `${target.meshName}:${target.name}`;\n if (batchKeys.has(key)) throw new Error(`Morph target appears more than once in batch: ${key}`);\n batchKeys.add(key);\n\n let stage = stages.get(target.meshName);\n if (!stage) {\n const mesh = root.getObjectByName(target.meshName) as Mesh | null;\n if (!mesh || !(mesh as any).isMesh) throw new Error(`Mesh not found: ${target.meshName}`);\n stage = {\n mesh,\n sourceGeometry: mesh.geometry,\n geometry: mesh.geometry.clone(),\n dictionary: {\n ...(mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> })\n .morphTargetDictionary\n ?? {}),\n },\n influences: [...(mesh.morphTargetInfluences ?? [])],\n };\n stages.set(target.meshName, stage);\n }\n\n result[key] = this.applyMorphTargetToStage(stage, target, options);\n }\n } catch (error) {\n for (const stage of stages.values()) stage.geometry.dispose();\n throw error;\n }\n\n const replaceGeometry = options.forceGeometryReplacement !== false;\n for (const stage of stages.values()) {\n const committedGeometry: any = replaceGeometry ? stage.geometry : stage.sourceGeometry;\n if (!replaceGeometry) {\n committedGeometry.morphAttributes = stage.geometry.morphAttributes;\n committedGeometry.morphTargetsRelative = stage.geometry.morphTargetsRelative;\n committedGeometry.boundingBox = stage.geometry.boundingBox;\n committedGeometry.boundingSphere = stage.geometry.boundingSphere;\n }\n committedGeometry.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.geometry = committedGeometry;\n stage.mesh.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.morphTargetInfluences = [...stage.influences];\n if (!replaceGeometry) stage.geometry.dispose();\n }\n if (replaceGeometry) {\n const replacedGeometries = new Set(Array.from(stages.values(), (stage) => stage.sourceGeometry));\n for (const sourceGeometry of replacedGeometries) {\n let stillInUse = false;\n root.traverse((object: any) => {\n if (object.isMesh && object.geometry === sourceGeometry) stillInUse = true;\n });\n if (!stillInUse) sourceGeometry.dispose();\n }\n }\n\n return result;\n }\n\n private applyMorphTargetToStage(\n stage: MorphMutationStage,\n target: MorphTargetInput,\n options: AddMorphTargetOptions,\n ) {\n const geometry: any = stage.geometry;\n const dictionary = stage.dictionary;\n if (!target.name?.trim()) throw new Error(`Morph target name is required for mesh: ${target.meshName}`);\n const configuredIndex = dictionary[target.name];\n const existing = Number.isInteger(configuredIndex) && configuredIndex >= 0\n ? configuredIndex\n : undefined;\n if (existing !== undefined && !options.replace) throw new Error(`Morph target already exists: ${target.name}`);\n\n const usedIndices = Object.values(dictionary)\n .map((value) => {\n if (!Number.isInteger(value) || value < 0) throw new Error(`Invalid morph target index on ${target.meshName}: ${value}`);\n return value;\n });\n const currentTargetCount = Math.max(\n 0,\n ...Object.values(geometry.morphAttributes as Record<string, unknown[]>).map((attributes) => attributes?.length ?? 0),\n usedIndices.length > 0 ? Math.max(...usedIndices) + 1 : 0,\n stage.influences.length,\n );\n const index = existing ?? currentTargetCount;\n const targetCount = Math.max(currentTargetCount, index + 1);\n const sourceIsRelative = target.relative !== false;\n if (currentTargetCount === 0) geometry.morphTargetsRelative = sourceIsRelative;\n\n for (const semantic of MORPH_ATTRIBUTE_SEMANTICS) {\n const data = target[semantic] as ArrayLike<number> | undefined;\n const existingAttributes = geometry.morphAttributes[semantic] as Array<BufferAttribute | undefined> | undefined;\n if (!data && existingAttributes?.length === 0) {\n delete geometry.morphAttributes[semantic];\n continue;\n }\n if (!data && !existingAttributes) continue;\n\n const base = geometry.getAttribute(semantic);\n if (!base || (data && data.length !== base.count * base.itemSize)) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const attributes = [...(existingAttributes ?? [])];\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n if (targetIndex === index && data) {\n attributes[targetIndex] = createMorphAttribute(\n geometry,\n semantic,\n target.name,\n data,\n sourceIsRelative,\n );\n } else if (!attributes[targetIndex] || targetIndex === index) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n geometry,\n semantic,\n targetIndex === index ? target.name : `morph_${targetIndex}`,\n );\n }\n }\n geometry.morphAttributes[semantic] = attributes;\n }\n\n dictionary[target.name] = index;\n geometry.morphTargetDictionary = { ...dictionary };\n while (stage.influences.length < targetCount) stage.influences.push(0);\n if (options.resetInfluence !== false) stage.influences[index] = 0;\n geometry.computeBoundingBox?.();\n geometry.computeBoundingSphere?.();\n return index;\n }\n\n private applyMaterial(mesh: Mesh, config: MaterialConfig) {\n if (typeof config.renderOrder === 'number') mesh.renderOrder = config.renderOrder;\n for (const material of materials((mesh as any).material) as any[]) {\n if (typeof config.opacity === 'number') material.opacity = config.opacity;\n if (typeof config.transparent === 'boolean') material.transparent = config.transparent;\n else if (typeof config.opacity === 'number' && config.opacity < 1) material.transparent = true;\n if (typeof config.depthWrite === 'boolean') material.depthWrite = config.depthWrite;\n if (typeof config.depthTest === 'boolean') material.depthTest = config.depthTest;\n if (config.blending) material.blending = THREE_BLENDING_MODES[config.blending];\n material.needsUpdate = true;\n }\n }\n\n private visitMesh(root: Object3D, name: string, visit: (mesh: Mesh) => void) {\n root.traverse((object: any) => { if (object.isMesh && object.name === name) visit(object); });\n }\n}\n\nexport const collectMorphMeshes = (root: Object3D) => {\n const meshes: Mesh[] = [];\n root.traverse((object: any) => { if (object.isMesh && morphEntries(object).length > 0) meshes.push(object); });\n return meshes;\n};\n\nexport * from './model';\nexport * from './scene';\n\nexport * from './editor/SkeletonOverlay';\nexport * from './editor/morphVertexPreview';\n"]}
|
|
1
|
+
{"version":3,"sources":["../three/annotations/runtime.ts","../three/annotations/runtimeAnnotationSidePreview.ts","../three/annotations/modelObservation.ts","../three/sceneRenderingBinding.ts","../three/modelSkinning.ts","../three/playbackRendering.ts","../three/annotations/modelRenderPreparation.ts","../three/annotations/adapter.ts","../three/annotations/DOMControls.ts","../three/annotations/ThreeAnnotationControls.ts","../three/annotations/ThreeAnnotationRenderer.ts","../three/annotations/markerSurfaceRaycast.ts","../three/annotations/loadFrame.ts","../three/annotations/ThreeAnnotationController.ts","../three/annotations/ThreeAnnotationMarkers.ts","../three/annotations/HtmlAnnotationMarkers.ts","../three/annotations/ThreeAnnotations.ts","../three/annotations/annotationAnchorModel.ts","../three/annotations/lifecycleBridge.ts","../three/annotations/markerVisibilityLifecycle.ts","../three/annotations/runtimeAnnotationPreview.ts","../three/annotations/runtimeAnnotationPreviewSide.ts","../three/annotations/boneResolutionProfile.ts","../three/authoring.ts","../three/reference-pose.ts","../three/clipBindings.ts","../three/nativePlayback.ts","../three/character.ts","../three/sceneInkBackgroundStyle.ts","../three/sceneInkBackground.ts","../three/characterTexturePalette.ts","../three/model.ts","../three/modelMorphLayout.ts","../three/scene.ts","../three/characterHost.ts","../three/editor/SkeletonOverlay.ts","../three/editor/morphVertexPreview.ts","../three/index.ts"],"names":["THREE","requireInitializedEmbodyCore","THREE2","request","point","entry","snapshot","document","target","THREE3","bounds","Quaternion","Vector3","THREE4","THREE5","THREE6","initEmbodyCore","THREE7","Matrix4","bindings","resource","action","json","finite","DEFAULT_HAIR_COLOR_APPEARANCE","PropertyBinding","AdditiveAnimationBlendMode","NormalAnimationBlendMode","progress","LoopOnce","LoopPingPong","THREE8","materials","THREE9","Box3","MathUtils","Mesh","prepare","Color","background","preset","coordinates","PerspectiveCamera","isBone","intensity","THREE11","createNeutralMorphAttribute","BufferAttribute","Euler","InterpolateDiscrete","AnimationClip"],"mappings":"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","file":"three.js","sourcesContent":["import { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, AnnotationCharacterConfig, CameraState, ExpandedRegionState, MarkerStyle, MarkerStyleOverrides, LineConfig } from './types';\n\nexport function annotationQuery<T>(operation: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().annotation_query(operation, JSON.stringify(payload))) as T;\n}\nexport type NativeAnnotationRuntime = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationRuntime']>;\nexport interface MarkerDescriptor {\n id: number;\n name: string;\n label: string;\n title: string;\n htmlText: string;\n style: Required<Omit<MarkerStyleOverrides, 'line'>> & { line: Required<LineConfig> };\n radius: number;\n arrowLength: number;\n arrowRadius: number;\n}\nexport interface AnnotationSnapshot {\n generation: number;\n revision: number;\n descriptorRevision: number;\n configRevision: number;\n disposed: boolean;\n loaded: boolean;\n visible: boolean;\n style: MarkerStyle;\n currentRegion: string | null;\n solo: string | null;\n regions: AnnotationAnchoredRegion[];\n config: AnnotationCharacterConfig;\n descriptors: MarkerDescriptor[];\n camera: CameraState;\n expanded: ExpandedRegionState[];\n}\nexport interface SurfaceQuery { id: number; generation: number; phase: number; origin: [number, number, number]; direction: [number, number, number]; far: number; }\n\n/** Only annotation contract data crosses Wasm; host resources/metadata stay borrowed. */\nexport function annotationConfigInput(config: AnnotationCharacterConfig): Record<string, unknown> {\n const keys = ['characterId', 'characterName', 'regions', 'annotationRegions', 'disabledRegions', 'markerStyle', 'playIntroOnLoad', 'defaultRegion', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const result: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) result[key] = config[key];\n if (config.profile) result.profile = Object.fromEntries(keys.filter(key => config.profile?.[key] !== undefined).map(key => [key, config.profile![key]]));\n return result;\n}\n\n/** Profile transport selects contract fields without traversing host metadata. */\nexport function annotationProfileInput(profile: unknown): unknown {\n if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) return undefined;\n const source = profile as Record<string, unknown>;\n const fields = ['auToBones', 'auToMorphs', 'morphToMesh', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern'];\n const result = Object.fromEntries(fields.filter(key => source[key] !== undefined).map(key => [key, source[key]]));\n const nested = source.profile;\n if (typeof nested === 'object' && nested !== null && !Array.isArray(nested)) {\n const value = nested as Record<string, unknown>;\n result.profile = Object.fromEntries(fields.filter(key => value[key] !== undefined).map(key => [key, value[key]]));\n }\n return result;\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, RuntimeAnnotationSide } from './types';\nimport { annotationQuery } from './runtime';\nimport { readAttribute } from './modelObservation';\nexport function getRuntimeAnnotationSide(region: AnnotationAnchoredRegion): RuntimeAnnotationSide | null { return annotationQuery('side', { region }); }\nexport function getRuntimeAUMeshSideOffset(region: AnnotationAnchoredRegion, sideSign: number, modelSize: THREE.Vector3): THREE.Vector3 | null { const value = annotationQuery<{x:number;y:number;z:number} | null>('meshSideOffset', { region, sideSign, size: modelSize }); return value ? new THREE.Vector3(value.x, value.y, value.z) : null; }\n/** Reads native attributes; both candidate selection and anchor reduction run in Rust. */\nexport function getRuntimeAUMorphAnchorPoint(region: AnnotationAnchoredRegion, mesh: THREE.Mesh): THREE.Vector3 | null {\n const core = requireInitializedEmbodyCore();\n const names = annotationQuery<string[]>('morphNames', { region });\n const positions = mesh.geometry.getAttribute('position');\n if (!positions) return null;\n const attributes = names.flatMap(name => { const index = mesh.morphTargetDictionary?.[name]; const attribute = index == null ? undefined : mesh.geometry.morphAttributes.position?.[index]; return attribute ? [attribute] : []; });\n const base = readAttribute(positions);\n const morphs = new Float32Array(attributes.length * base.length);\n attributes.forEach((attribute, index) => morphs.set(readAttribute(attribute), index * base.length));\n const candidates = core.annotation_morph_candidates(base, morphs, mesh.geometry.morphTargetsRelative);\n mesh.updateWorldMatrix(true, false);\n const skinned = mesh as THREE.SkinnedMesh;\n if (skinned.isSkinnedMesh) skinned.skeleton.update();\n const samples = new Float32Array(candidates.length / 2 * 4);\n const vertex = new THREE.Vector3();\n for (let offset = 0; offset < candidates.length; offset += 2) { mesh.getVertexPosition(candidates[offset], vertex).applyMatrix4(mesh.matrixWorld); samples.set([vertex.x, vertex.y, vertex.z, candidates[offset + 1]], offset * 2); }\n const value = core.annotation_morph_center(JSON.stringify(region), samples);\n return value.length === 3 ? new THREE.Vector3().fromArray(value) : null;\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { NativeAnnotationRuntime } from './runtime';\nimport type { AnnotationAnchoredRegion } from './types';\nimport { getRuntimeAUMorphAnchorPoint } from './runtimeAnnotationSidePreview';\n\ntype Bounds = { min: number[]; max: number[] };\nexport interface AnnotationModelObservation {\n bounds: Bounds;\n quaternion: number[];\n inverse: number[];\n objects: { id: number; name: string; kind: string; parent: number | null; position: number[]; bounds: Bounds | null; matrix: number[]; inverse: number[]; morphNames: string[] }[];\n}\nexport function readAttribute(attribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute): Float32Array {\n const values = new Float32Array(attribute.count * attribute.itemSize);\n for (let index = 0; index < attribute.count; index++) for (let axis = 0; axis < attribute.itemSize; axis++) values[index * attribute.itemSize + axis] = attribute.getComponent(index, axis);\n return values;\n}\nconst bounds = (box: THREE.Box3): Bounds | null => box.isEmpty() ? null : { min: box.min.toArray(), max: box.max.toArray() };\n\n/** Stable native handle table. No region matching or anchor policy lives here. */\nexport class AnnotationModelObserver {\n readonly objects = new Map<number, THREE.Object3D>();\n readonly meshes: THREE.Mesh[] = [];\n private readonly ids = new Map<THREE.Object3D, number>();\n constructor(readonly model: THREE.Object3D) {\n model.traverse(object => {\n const id = this.objects.size + 1;\n this.ids.set(object, id); this.objects.set(id, object);\n if ((object as THREE.Mesh).isMesh) this.meshes.push(object as THREE.Mesh);\n });\n }\n id(object: THREE.Object3D): number | undefined { return this.ids.get(object); }\n capture(): AnnotationModelObservation {\n this.model.updateWorldMatrix(true, true);\n const modelBox = new THREE.Box3().setFromObject(this.model);\n if (modelBox.isEmpty()) modelBox.setFromCenterAndSize(this.model.getWorldPosition(new THREE.Vector3()), new THREE.Vector3());\n return {\n bounds: bounds(modelBox)!, quaternion: this.model.getWorldQuaternion(new THREE.Quaternion()).toArray(), inverse: this.model.matrixWorld.clone().invert().toArray(),\n objects: [...this.objects].map(([id, object]) => {\n const mesh = object as THREE.Mesh;\n const bone = (object as THREE.Bone).isBone;\n return { id, name: object.name, kind: mesh.isMesh ? 'Mesh' : bone ? 'Bone' : object.type, parent: object.parent ? this.ids.get(object.parent) ?? null : null,\n position: object.getWorldPosition(new THREE.Vector3()).toArray(), bounds: bone ? null : bounds(new THREE.Box3().setFromObject(object)), matrix: object.matrixWorld.toArray(), inverse: object.matrixWorld.clone().invert().toArray(), morphNames: Object.keys(mesh.morphTargetDictionary ?? {}) };\n }),\n };\n }\n observe(runtime: NativeAnnotationRuntime): void { runtime.observe_model(JSON.stringify(this.capture())); }\n transforms(runtime: NativeAnnotationRuntime): Float32Array {\n const ids = runtime.tracked_objects();\n if (!ids.length) return new Float32Array();\n this.model.updateWorldMatrix(true, true);\n const values = new Float32Array(ids.length * 17);\n ids.forEach((id, index) => { const object = this.objects.get(id); if (object) { values[index * 17] = id; values.set(object.matrixWorld.elements, index * 17 + 1); } });\n return values;\n }\n morphAnchors(runtime: NativeAnnotationRuntime): Record<string, { x: number; y: number; z: number }> {\n const requests = JSON.parse(runtime.command('morphRequests', '{}', performance.now())) as { objectId: number; region: AnnotationAnchoredRegion }[];\n const anchors: Record<string, { x: number; y: number; z: number }> = {};\n for (const request of requests) {\n const mesh = this.objects.get(request.objectId) as THREE.Mesh | undefined;\n if (!mesh?.isMesh) continue;\n const point = getRuntimeAUMorphAnchorPoint(request.region, mesh);\n if (point) anchors[request.region.name] = { x: point.x, y: point.y, z: point.z };\n }\n return anchors;\n }\n /** Rust selects influenced vertices; Three evaluates the current native pose. */\n observeFocus(runtime: NativeAnnotationRuntime, request: unknown): void {\n const observation = this.capture();\n runtime.observe_model(JSON.stringify(observation));\n const ids = JSON.parse(runtime.command('focusObjects', JSON.stringify(request), performance.now())) as number[];\n const core = requireInitializedEmbodyCore();\n for (const id of ids) {\n const object = this.objects.get(id);\n if (!(object as THREE.Bone | undefined)?.isBone) continue;\n const points: number[] = [];\n for (const nativeMesh of this.meshes) {\n const mesh = nativeMesh as THREE.SkinnedMesh;\n if (!mesh.isSkinnedMesh) continue;\n const index = mesh.skeleton.bones.indexOf(object as THREE.Bone);\n const skinIndices = mesh.geometry.getAttribute('skinIndex');\n const skinWeights = mesh.geometry.getAttribute('skinWeight');\n if (index < 0 || !skinIndices || !skinWeights) continue;\n mesh.skeleton.update();\n const selected = core.annotation_bone_vertices(readAttribute(skinIndices), readAttribute(skinWeights), new Uint32Array([index]));\n const vertex = new THREE.Vector3();\n for (const selectedIndex of selected) { mesh.getVertexPosition(selectedIndex, vertex).applyMatrix4(mesh.matrixWorld); points.push(vertex.x, vertex.y, vertex.z); }\n }\n const measured = core.annotation_point_bounds(new Float32Array(points));\n const entry = observation.objects.find(entry => entry.id === id);\n if (entry && measured.length === 6) entry.bounds = { min: Array.from(measured.slice(0, 3)), max: Array.from(measured.slice(3, 6)) };\n }\n runtime.observe_model(JSON.stringify(observation));\n }\n}\n\nexport function observeAnnotationModel(model: THREE.Object3D): AnnotationModelObservation { return new AnnotationModelObserver(model).capture(); }\n","import type { PerspectiveCamera, Scene } from 'three';\nimport type { CharacterSceneRenderer, CharacterSceneRenderingController } from './scene';\n\n/** Adapter-private binding. Applications pass config.rendering to the camera controller. */\nexport type SceneRenderingBinding = {\n suspend(): Promise<void>;\n prepare(renderer: CharacterSceneRenderer): Promise<void>;\n commit(renderer: CharacterSceneRenderer): Promise<void>;\n onError(error: unknown): void;\n};\n\ntype Owner = {\n scene: Scene;\n camera: PerspectiveCamera;\n binding: SceneRenderingBinding | null;\n disposed: boolean;\n drain: Promise<void> | null;\n settled: () => Promise<unknown> | null;\n reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void;\n};\nconst owners = new WeakMap<CharacterSceneRenderingController, Owner>();\n\nexport function registerSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, settled: () => Promise<unknown> | null, reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void) {\n const owner: Owner = { scene, camera, binding: null, disposed: false, drain: null, settled, reportFailure };\n owners.set(controller, owner);\n return owner;\n}\n\nexport function bindSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, binding: SceneRenderingBinding) {\n const owner = owners.get(controller);\n if (!owner || owner.disposed) throw new Error('Character scene rendering has been disposed or is not owned by Embody.');\n if (owner.scene !== scene || owner.camera !== camera) throw new Error('Rendering and camera controllers must share their scene and camera.');\n if (owner.binding) throw new Error('Character scene rendering already has a camera controller.');\n owner.binding = binding;\n const snapshot = controller.getSnapshot();\n if (snapshot.renderer) void binding.commit(snapshot.renderer).catch(binding.onError);\n if (snapshot.status !== 'ready' && snapshot.status !== 'error') void binding.suspend().catch(binding.onError);\n return () => {\n if (owner.binding === binding) {\n owner.drain = binding.suspend();\n void owner.drain.catch(() => undefined);\n owner.binding = null;\n return Promise.allSettled([owner.drain, owner.settled()]).then(() => undefined);\n }\n return null;\n };\n}\n\nexport function reportSceneRenderingFailure(controller: CharacterSceneRenderingController, error: unknown, renderer?: CharacterSceneRenderer | null) {\n const owner = owners.get(controller);\n if (owner && !owner.disposed) owner.reportFailure(error, renderer);\n}\n","import { Float32BufferAttribute, FloatType } from 'three';\nimport type { BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Object3D, SkinnedMesh } from 'three';\n\n/** Keep joint indices compatible with both native WebGPU and WebGL skinning. */\nexport function prepareModelSkinning(model: Object3D): () => void {\n const replacements: { geometry: BufferGeometry; original: BufferAttribute | InterleavedBufferAttribute; prepared: BufferAttribute }[] = [];\n model.traverse(object => {\n const mesh = object as SkinnedMesh;\n if (!mesh.isSkinnedMesh) return;\n const geometry = mesh.geometry;\n const original = geometry.getAttribute('skinIndex');\n if (!original) return;\n if (original.array instanceof Float32Array && (!('gpuType' in original) || original.gpuType === FloatType)) return;\n\n // Three's native backend widens Uint8/Uint16 attributes in place to Uint32.\n // WebGL then uses vertexAttribIPointer, but its skinIndex shader input is\n // vec4. Float32 preserves every glTF joint index and avoids that mutation.\n // Read components so interleaved indices do not copy adjacent attributes.\n const prepared = new Float32BufferAttribute(original.count * original.itemSize, original.itemSize);\n for (let vertex = 0; vertex < original.count; vertex++) {\n for (let component = 0; component < original.itemSize; component++) {\n prepared.setComponent(vertex, component, original.getComponent(vertex, component));\n }\n }\n prepared.name = original.name;\n prepared.setUsage('data' in original ? original.data.usage : original.usage);\n geometry.setAttribute('skinIndex', prepared);\n replacements.push({ geometry, original, prepared });\n });\n // A replacement renderer may fail after compilation. The old native pipeline\n // still expects its original attribute format, so restore its exact objects.\n return () => {\n for (const { geometry, original, prepared } of replacements) {\n if (geometry.getAttribute('skinIndex') === prepared) geometry.setAttribute('skinIndex', original);\n }\n };\n}\n","import { Timer } from 'three';\nimport type { AnimationMixer, Object3D } from 'three';\n\ntype Binding = { mixer: AnimationMixer; enabled: boolean; afterFrame: () => void };\nconst bindings = new WeakMap<Object3D, Set<Binding>>();\n\n/** Register native playback with the existing scene renderer; never starts a loop. */\nexport function bindPlaybackRendering(model: Object3D, mixer: AnimationMixer, afterFrame: () => void) {\n const binding: Binding = { mixer, enabled: true, afterFrame };\n const entries = bindings.get(model) ?? new Set<Binding>();\n entries.add(binding);\n bindings.set(model, entries);\n return {\n setEnabled(enabled: boolean) { binding.enabled = enabled; },\n dispose() {\n entries.delete(binding);\n if (!entries.size) bindings.delete(model);\n },\n };\n}\n\n/** Called once by the Three render integration, using its native Timer. */\nexport function renderScenePlayback(scene: Object3D, timer: Timer): void {\n const mixers = new Set<AnimationMixer>();\n const active: Binding[] = [];\n scene.traverse((object) => {\n for (const binding of bindings.get(object) ?? []) {\n if (binding.enabled) { active.push(binding); mixers.add(binding.mixer); }\n }\n });\n for (const mixer of mixers) mixer.update(timer.getDelta());\n // Native finished callbacks run inside mixer iteration. Resource release and\n // observers must wait until every mixer has finished sampling this frame.\n for (const binding of active) binding.afterFrame();\n}\n\n/** Frame hook for an existing Three/R3F renderer. Does not create a render loop. */\nexport function createScenePlaybackFrame(scene: Object3D, document?: Document) {\n const timer = new Timer();\n if (document) timer.connect(document);\n let disposed = false;\n let initialized = false;\n return {\n onFrame(timestamp?: number) {\n if (disposed) return;\n timer.update(timestamp);\n // The first render establishes this renderer's timestamp origin.\n if (!initialized) { initialized = true; return; }\n renderScenePlayback(scene, timer);\n },\n dispose() { if (!disposed) { disposed = true; timer.dispose(); } },\n };\n}\n","import * as THREE from 'three';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { prepareModelSkinning } from '../modelSkinning';\n\nfunction captureRenderTarget(renderer: CharacterSceneRenderer): () => void {\n const face = renderer.getActiveCubeFace();\n const mip = renderer.getActiveMipmapLevel();\n if ('isWebGPURenderer' in renderer) {\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n }\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n}\n\n/** Match the lazy bounds used by Three's Frustum.intersectsObject. */\nfunction initializeModelCullingBounds(model: THREE.Object3D): void {\n model.traverseVisible((object) => {\n if (!object.frustumCulled) return;\n const drawable = object as THREE.Mesh & THREE.Line & THREE.Points;\n if (!(drawable.isMesh || drawable.isLine || drawable.isPoints)) return;\n if ('boundingSphere' in drawable) {\n if (drawable.boundingSphere === null && 'computeBoundingSphere' in drawable\n && typeof drawable.computeBoundingSphere === 'function') drawable.computeBoundingSphere();\n } else if (drawable.geometry.boundingSphere === null) drawable.geometry.computeBoundingSphere();\n });\n}\n\n/** Only the model root is exposed; authored child visibility and layers are retained. */\nfunction withPreparedModel<T>(\n scene: THREE.Scene, model: THREE.Object3D, operation: () => T,\n options: { initializeBounds?: boolean } = {},\n): T {\n if (model === scene) throw new Error('Render preparation requires a model, not the controller scene.');\n let ancestor = model;\n while (ancestor.parent) {\n ancestor = ancestor.parent;\n if (!ancestor.visible) throw new Error('Render preparation requires visible model ancestors.');\n }\n if (model.parent && ancestor !== scene) throw new Error('Render preparation requires a detached model or a model in the controller scene.');\n const detached = !model.parent;\n const visible = model.visible;\n const culling = new Map<THREE.Object3D, boolean>();\n try {\n if (detached) scene.add(model);\n model.visible = true;\n if (options.initializeBounds) {\n // Skin bounds use bone.matrixWorld and current morph weights, not the\n // uploaded skeleton buffer. Refresh the same hierarchy the draw will use.\n scene.updateMatrixWorld(true);\n initializeModelCullingBounds(model);\n }\n model.traverseVisible((object) => {\n culling.set(object, object.frustumCulled);\n object.frustumCulled = false;\n });\n return operation();\n } finally {\n culling.forEach((value, object) => { object.frustumCulled = value; });\n model.visible = visible;\n if (detached) scene.remove(model);\n }\n}\n\n/** Three collects visible surfaces before yielding; no shared mutations span the await. */\nexport function compileModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): Promise<unknown> {\n if ('isWebGPURenderer' in renderer && !renderer.hasInitialized()) {\n throw new Error('Model render preparation requires an initialized WebGPU renderer.');\n }\n // Only the caller-owned model is retained across asynchronous compilation.\n // Controller markers may still be replaced/disposed while this is pending.\n return withPreparedModel(scene, model, () => {\n prepareModelSkinning(model);\n return renderer.compileAsync(model, camera, scene);\n });\n}\n\n/** One complete scene draw initializes native geometry/textures and real shadow variants. */\nexport function drawModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): () => void {\n const viewport = renderer.getViewport(new THREE.Vector4());\n const scissor = renderer.getScissor(new THREE.Vector4());\n const scissorTest = renderer.getScissorTest();\n const restoreRenderTarget = captureRenderTarget(renderer);\n const autoClear = renderer.autoClear;\n const clearColor = renderer.getClearColor(Object.assign(new THREE.Color(), { a: 1 }));\n const clearAlpha = renderer.getClearAlpha();\n const native = 'isWebGPURenderer' in renderer ? renderer : null;\n const renderObject = native?.getRenderObjectFunction();\n const mrt = native?.getMRT();\n const background = scene.background;\n const hasBackgroundNode = 'backgroundNode' in scene;\n const backgroundNode = hasBackgroundNode ? scene.backgroundNode : undefined;\n const overrideMaterial = scene.overrideMaterial;\n const sceneName = scene.name;\n const globalShadow = 'autoUpdate' in renderer.shadowMap ? renderer.shadowMap : null;\n const globalAutoUpdate = globalShadow?.autoUpdate;\n const globalNeedsUpdate = globalShadow?.needsUpdate;\n const shadows: { shadow: THREE.LightShadow; layers: number; autoUpdate: boolean; needsUpdate: boolean; remainingUpdate?: boolean }[] = [];\n let rendered = false;\n try {\n withPreparedModel(scene, model, () => {\n if (renderer.shadowMap.enabled) {\n scene.traverseVisible((object) => {\n const light = object as THREE.Light & { shadow?: THREE.LightShadow };\n if (light.isLight && light.castShadow && light.shadow && light.layers.test(camera.layers)) {\n const shadow = light.shadow;\n shadows.push({ shadow, layers: shadow.camera.layers.mask, autoUpdate: shadow.autoUpdate, needsUpdate: shadow.needsUpdate });\n shadow.needsUpdate = true;\n }\n });\n if (globalShadow) globalShadow.needsUpdate = true;\n }\n renderer.autoClear = false;\n // Color backgrounds force a framebuffer clear even with autoClear=false;\n // viewport clipping alone cannot keep that clear off the visible canvas.\n if (scene.background && 'isColor' in scene.background) scene.background = null;\n renderer.setViewport(0, 0, 0, 0);\n renderer.render(scene, camera);\n rendered = true;\n for (const state of shadows) state.remainingUpdate = state.shadow.needsUpdate;\n }, { initializeBounds: true });\n } finally {\n // Restore public state even when a native nested shadow draw throws before\n // Three's own restoration. The draw never changes authored layers/materials.\n restoreRenderTarget();\n renderer.setViewport(viewport);\n renderer.setScissor(scissor);\n renderer.setScissorTest(scissorTest);\n renderer.setClearColor(clearColor, clearAlpha);\n renderer.autoClear = autoClear;\n if (native) { native.setRenderObjectFunction(renderObject ?? null); native.setMRT(mrt ?? null); }\n scene.background = background;\n if (hasBackgroundNode) Object.assign(scene, { backgroundNode });\n else Reflect.deleteProperty(scene, 'backgroundNode');\n scene.overrideMaterial = overrideMaterial;\n scene.name = sceneName;\n for (const { shadow, layers, autoUpdate, needsUpdate, remainingUpdate } of shadows) {\n shadow.camera.layers.mask = layers;\n shadow.autoUpdate = autoUpdate;\n shadow.needsUpdate = rendered ? needsUpdate || !!remainingUpdate : true;\n }\n if (globalShadow) {\n globalShadow.autoUpdate = globalAutoUpdate!;\n globalShadow.needsUpdate = rendered ? globalNeedsUpdate! : true;\n }\n }\n // Cancellation can arrive between this synchronous draw and readiness\n // settlement. The host will not reveal that model, so its static maps expire.\n return () => {\n for (const { shadow } of shadows) shadow.needsUpdate = true;\n if (globalShadow && renderer.shadowMap.enabled) globalShadow.needsUpdate = true;\n };\n}\n","import { annotationConfigInput, annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport { Quaternion, Vector3, type Object3D } from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore, type EmbodyCore, type CameraFlight, type CameraOrbit } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationCharacterConfig, AnnotationLaterality, BoneResolutionProfile, Region } from './types';\nexport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nexport type { AnnotationLaterality, BoneResolutionProfile } from './types';\n\ntype Point = { x: number; y: number; z: number };\ntype Rotation = Point & { w: number };\ntype Bounds = { center: Point; size: Point };\nconst vec = (v: Point) => new Float32Array([v.x, v.y, v.z]);\nconst quat = (q?: Rotation | null) => new Float32Array(q ? [q.x, q.y, q.z, q.w] : []);\nconst bounds = (b?: Bounds | null) => new Float32Array(b ? [b.center.x, b.center.y, b.center.z, b.size.x, b.size.y, b.size.z] : []);\nconst point = (values: ArrayLike<number>, offset = 0): Point => ({ x: values[offset], y: values[offset + 1], z: values[offset + 2] });\nconst framing = (v: ArrayLike<number>) => ({ position: point(v), target: point(v, 3), distance: v[6] });\n\n/** Typed, allocation-only bridge to the canonical Rust camera and marker algorithms. */\nexport class RustAnnotationCameraCore {\n constructor(private readonly core: EmbodyCore) {}\n static async create() { return new RustAnnotationCameraCore(await initEmbodyCore()); }\n normalizeCameraAngle(angle: number) { return this.core.normalize_camera_angle_degrees(angle); }\n worldDirectionForCameraAngle(q: Rotation | undefined, angle: number) { return point(this.core.world_direction_for_camera_angle(quat(q), angle)); }\n resolveFocusCameraDirection(q: Rotation | undefined, effectiveAngle: number, cameraAngle?: number, angleSpace = 'model') {\n return point(this.core.resolve_focus_camera_direction(quat(q), effectiveAngle, cameraAngle != null, angleSpace === 'world'));\n }\n resolveAutoCloseupAngle(offset: number, focusSize: Point, modelSize: Point) { return this.core.resolve_auto_closeup_angle(offset, vec(focusSize), vec(modelSize)); }\n focusPaddingFactor(size: number, closeUp: number, zoom: number, fullBody: number) { return this.core.focus_padding_factor(size, closeUp, zoom, fullBody); }\n solveFocusFraming(o: { focusBounds?: Bounds; modelBounds?: Bounds | null; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; closeUpPaddingFactor: number; zoomPaddingFactor: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_focus_framing(bounds(o.focusBounds), bounds(o.modelBounds), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.closeUpPaddingFactor, o.zoomPaddingFactor, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n solveFullBodyFraming(o: { boxMin: Point; boxMax: Point; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_full_body_framing(vec(o.boxMin), vec(o.boxMax), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }) { return this.core.passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\n shouldShowMarker(o: { hiddenChild: boolean; solo: 'none' | 'soloed' | 'other-soloed'; markerAngle?: number; currentCameraAngle?: number }) {\n return this.core.should_show_marker(o.hiddenChild, o.solo === 'soloed' ? 1 : o.solo === 'other-soloed' ? 2 : 0, o.markerAngle, o.currentCameraAngle);\n }\n resolveViewportConstrainedLineScale(o: { startClip: ArrayLike<number>; endClip: ArrayLike<number>; safeX: number; safeY: number; minLengthRatio?: number }) {\n const v = this.core.resolve_viewport_constrained_line_scale(new Float32Array(o.startClip), new Float32Array(o.endClip), o.safeX, o.safeY, o.minLengthRatio);\n return { visible: v[0] >= 1, lineScale: v[1] };\n }\n resolveViewportSafeBounds(o: { labelScaleX: number; labelScaleY: number; projectionXScale: number; projectionYScale: number; viewportWidth: number; viewportHeight: number; edgePaddingPx?: number }) {\n const v = this.core.resolve_viewport_safe_bounds(o.labelScaleX, o.labelScaleY, o.projectionXScale, o.projectionYScale, o.viewportWidth, o.viewportHeight, o.edgePaddingPx);\n return { safeX: v[0], safeY: v[1] };\n }\n sampleMarkerBezierCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_bezier_curve(vec(start), vec(end), segments); }\n sampleMarkerArcCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_arc_curve(vec(start), vec(end), segments); }\n markerVisibilityAnimationFactors(visible: boolean, t: number) {\n const v = this.core.marker_visibility_animation_factors(visible, t);\n return { itemOpacityFactor: v[0], labelScaleFactor: v[1], lineOpacityFactor: v[2] };\n }\n separateOverlappingMarkerEndpoints(o: { starts: ArrayLike<number>; ends: ArrayLike<number>; modelCenter: Point; modelHeight: number }) { return this.core.separate_overlapping_marker_endpoints(new Float32Array(o.starts), new Float32Array(o.ends), vec(o.modelCenter), o.modelHeight); }\n createCameraFlight(start: Point, startTarget: Point, end: Point, endTarget: Point, duration: number) { return animationHandle(new this.core.CameraFlight(vec(start), vec(startTarget), vec(end), vec(endTarget), duration)); }\n createCameraOrbit(center: Point, radius: number, height: number, duration: number) { return animationHandle(new this.core.CameraOrbit(vec(center), radius, height, duration)); }\n}\n\nfunction animationHandle(handle: CameraFlight | CameraOrbit) {\n let disposed = false;\n return {\n sample(elapsed: number) {\n const v = handle.sample(elapsed);\n return { position: point(v), target: point(v, 3), done: v[6] >= 1 };\n },\n get durationMs() { return handle.duration_ms(); },\n dispose() { if (!disposed) { disposed = true; handle.free(); } },\n };\n}\nexport const createRustAnnotationCameraCore = () => RustAnnotationCameraCore.create();\n\nfunction request<T>(op: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(JSON.stringify({ op, payload }))) as T;\n}\n\n/** Resolve only annotation/profile inputs, preserving host-only data by reference. */\nexport async function resolveAnnotationCharacterConfig<T extends AnnotationCharacterConfig>(config: T): Promise<T> {\n await initEmbodyCore();\n const keys = ['profilePresetId', 'presetId', 'baseProfileId', 'auPresetType', 'annotationRegions', 'regions', 'disabledRegions', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const input: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) input[key] = config[key];\n if (config.profile) {\n input.profile = Object.fromEntries(keys.filter(k => config.profile?.[k] !== undefined).map(k => [k, config.profile![k]]));\n }\n const extended = request<Record<string, unknown>>('profile.extendConfig', { config: input });\n const resolved = { ...config };\n for (const key of keys) if (extended[key] !== undefined) (resolved as Record<string, unknown>)[key] = extended[key];\n resolved.regions = annotationQuery('regions', { config: annotationConfigInput(resolved) });\n return resolved;\n}\n\nexport function resolveBoneNames(names: string[] | undefined, profile?: BoneResolutionProfile | null): string[] {\n return request('profile.resolveBoneNames', { profile: profile ?? {}, names: names ?? [] });\n}\nexport function fuzzyNameMatch(objectName: string, targetName: string, suffixPattern?: string): boolean { return request('name.fuzzyMatch', { objectName, targetName, suffixPattern }); }\nexport function getDefaultAnnotationLaterality(): AnnotationLaterality { return annotationQuery('defaultLaterality', {}); }\nexport function getSemanticHorizontalSignForSide(side: 'left' | 'right', laterality: AnnotationLaterality): 1 | -1 { return annotationQuery('sideSign', { side, laterality }); }\nexport function getSemanticHorizontalSign(name: string, laterality: AnnotationLaterality): 1 | -1 | null { return annotationQuery('semanticSign', { name, laterality }); }\nexport function resolveRegionCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('cameraAngle', { region, laterality }) ?? undefined; }\nexport function resolveRegionVisibilityCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('visibilityAngle', { region, laterality }) ?? undefined; }\nexport function toWorldDirection(model: Object3D | null, direction: Vector3): Vector3 { const value = annotationQuery<Point>('worldDirection', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), direction }); return new Vector3(value.x, value.y, value.z); }\nexport function getWorldDirectionForCameraAngle(model: Object3D | null, angle: number): Vector3 { const v = requireInitializedEmbodyCore().world_direction_for_camera_angle(quat(model?.getWorldQuaternion(new Quaternion())), angle); return new Vector3(v[0], v[1], v[2]); }\nexport function getModelLocalOrbitAngle(model: Object3D | null, center: Vector3, position: Vector3): number { return annotationQuery('orbitAngle', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), center, position }); }\nexport function passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }): boolean { return requireInitializedEmbodyCore().passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\nexport function resolveFaceCenter(model: Object3D, region: Region, profile?: BoneResolutionProfile | null): { center: Vector3; headBonePosition?: Vector3; method: string; debugInfo: string[] } {\n const result = annotationQuery<{ center: Point; headBonePosition: Point | null; method: string; debugInfo: string[] }>('faceCenter', { model: observeAnnotationModel(model), region, profile });\n return { ...result, center: new Vector3(result.center.x, result.center.y, result.center.z), headBonePosition: result.headBonePosition ? new Vector3(result.headBonePosition.x, result.headBonePosition.y, result.headBonePosition.z) : undefined };\n}\nexport function detectAnnotationLaterality(model: Object3D | null, regions: Region[], profile: BoneResolutionProfile | null): AnnotationLaterality { return model ? annotationQuery('laterality', { model: observeAnnotationModel(model), regions, profile }) : getDefaultAnnotationLaterality(); }\n","import { annotationQuery } from './runtime';\n/**\n * Self-contained DOM controls for ThreeAnnotationController\n * No React dependencies - vanilla DOM manipulation\n */\nexport interface DOMControlRegion {\n name: string;\n parent?: string;\n children?: string[];\n}\n\nexport interface DOMControlsConfig {\n /** Container element to append controls to */\n container: HTMLElement;\n /** Callback when user selects a region */\n onRegionSelect: (name: string) => void;\n /** Initial list of regions */\n regions: DOMControlRegion[];\n /** Currently selected region */\n currentRegion?: string;\n /** Initial annotation-marker visibility */\n markersVisible?: boolean;\n /** Callback when the Markers checkbox is toggled */\n onMarkersVisibleChange?: (visible: boolean) => void;\n}\n\n/** Temporary AU preview regions must never appear in the View dropdown. */\nexport const RUNTIME_ANNOTATION_REGION_PREFIX = 'runtime:annotation:';\n\nexport function isRuntimeAnnotationRegionName(name: string): boolean { return annotationQuery('isRuntimeName', { name }); }\nexport function filterCameraViewRegions<T extends { name: string }>(regions: T[]): T[] { return annotationQuery<number[]>('viewRegionIndices', { regions: regions.map(({ name }) => ({ name })) }).map(index => regions[index]); }\n\n/**\n * CSS styles for the DOM controls\n * Scoped with unique class prefix to avoid conflicts\n */\nconst STYLES = `\n.acc-controls {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.7);\n border-radius: 8px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.acc-select {\n background: rgba(255, 255, 255, 0.1);\n color: white;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n width: 160px;\n max-width: 160px;\n min-width: 160px;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='white' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n}\n\n.acc-markers {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n padding-left: 10px;\n border-left: 1px solid rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n font-size: 12px;\n user-select: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.acc-markers input {\n margin: 0;\n cursor: pointer;\n accent-color: #3182ce;\n}\n\n.acc-select:hover {\n background-color: rgba(255, 255, 255, 0.15);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n.acc-select:focus {\n border-color: #3182ce;\n box-shadow: 0 0 0 2px rgba(49, 130, 206, 0.3);\n}\n\n.acc-select option {\n background: #1a202c;\n color: white;\n padding: 8px;\n}\n\n.acc-label {\n color: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-right: 4px;\n}\n`;\n\n// Track if styles have been injected\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected || typeof document === 'undefined') return;\n const style = document.createElement('style');\n style.setAttribute('data-acc-styles', 'true');\n style.textContent = STYLES;\n document.head.appendChild(style);\n stylesInjected = true;\n}\n\n/**\n * Format region name for display\n * Converts snake_case to Title Case\n */\nexport function buildRegionDisplayOptions(regions: DOMControlRegion[]): Array<{ name: string; label: string }> { return annotationQuery('displayOptions', { regions }); }\n\n/**\n * CameraDOMControls - Self-contained DOM UI for region selection\n */\nexport class CameraDOMControls {\n private container: HTMLElement;\n private wrapper: HTMLDivElement;\n private select: HTMLSelectElement;\n private markersCheckbox: HTMLInputElement | null = null;\n private onRegionSelect: (name: string) => void;\n private onMarkersVisibleChange?: (visible: boolean) => void;\n\n constructor(config: DOMControlsConfig) {\n // Inject styles once\n injectStyles();\n\n this.container = config.container;\n this.onRegionSelect = config.onRegionSelect;\n this.onMarkersVisibleChange = config.onMarkersVisibleChange;\n\n // Create wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'acc-controls';\n\n // Create label\n const label = document.createElement('span');\n label.className = 'acc-label';\n label.textContent = 'View:';\n this.wrapper.appendChild(label);\n\n // Create select\n this.select = document.createElement('select');\n this.select.className = 'acc-select';\n this.populateSelect(config.regions, config.currentRegion);\n\n // Handle selection changes\n this.select.addEventListener('change', () => {\n this.onRegionSelect(this.select.value);\n });\n\n this.wrapper.appendChild(this.select);\n\n if (this.onMarkersVisibleChange) {\n const markersLabel = document.createElement('label');\n markersLabel.className = 'acc-markers';\n\n this.markersCheckbox = document.createElement('input');\n this.markersCheckbox.type = 'checkbox';\n this.markersCheckbox.checked = Boolean(config.markersVisible);\n this.markersCheckbox.setAttribute('aria-label', 'Show annotation markers');\n this.markersCheckbox.addEventListener('change', () => {\n this.onMarkersVisibleChange?.(this.markersCheckbox!.checked);\n });\n\n const markersText = document.createElement('span');\n markersText.textContent = 'Markers';\n\n markersLabel.appendChild(this.markersCheckbox);\n markersLabel.appendChild(markersText);\n this.wrapper.appendChild(markersLabel);\n }\n\n // Append to container\n // Ensure container has relative positioning for absolute positioning to work\n const containerStyle = window.getComputedStyle(this.container);\n if (containerStyle.position === 'static') {\n this.container.style.position = 'relative';\n }\n\n this.container.appendChild(this.wrapper);\n }\n\n /**\n * Populate select options\n */\n private populateSelect(regions: DOMControlRegion[], current?: string): void {\n this.select.innerHTML = '';\n\n const viewRegions = filterCameraViewRegions(regions);\n\n if (viewRegions.length === 0) {\n const option = document.createElement('option');\n option.value = '';\n option.textContent = 'No regions';\n option.disabled = true;\n this.select.appendChild(option);\n return;\n }\n\n buildRegionDisplayOptions(viewRegions).forEach(({ name, label }) => {\n const option = document.createElement('option');\n option.value = name;\n option.textContent = label;\n if (name === current) {\n option.selected = true;\n }\n this.select.appendChild(option);\n });\n }\n\n /**\n * Update available regions\n */\n updateRegions(regions: DOMControlRegion[], current?: string): void {\n this.populateSelect(regions, current);\n }\n\n /**\n * Sync Markers checkbox with controller visibility state.\n */\n setMarkersVisible(visible: boolean): void {\n if (!this.markersCheckbox || this.markersCheckbox.checked === visible) return;\n this.markersCheckbox.checked = visible;\n }\n\n /**\n * Set current region (updates select value)\n */\n setCurrentRegion(name: string): void {\n if (this.select.value !== name) {\n this.select.value = name;\n }\n }\n\n /**\n * Show/hide controls\n */\n setVisible(visible: boolean): void {\n this.wrapper.style.display = visible ? 'flex' : 'none';\n }\n\n /**\n * Check if controls are visible\n */\n isVisible(): boolean {\n return this.wrapper.style.display !== 'none';\n }\n\n /**\n * Cleanup and remove from DOM\n */\n dispose(): void {\n this.wrapper.remove();\n }\n}\n","import * as THREE from 'three';\nimport type { NativeAnnotationRuntime } from './runtime';\n\n/** Native event capture and pose observation. Rust integrates every gesture. */\nexport class ThreeAnnotationControls extends THREE.EventDispatcher<{ change: {}; start: {}; end: {} }> {\n readonly target = new THREE.Vector3();\n private disposed = false;\n private previousTouchAction = '';\n private connected = false;\n constructor(public domElement: HTMLElement, private readonly runtime: NativeAnnotationRuntime, private readonly advance: () => void, private readonly captureInput = true) {\n super();\n this.connect(domElement);\n }\n connect(element: HTMLElement): void {\n if (this.disposed || (this.connected && this.domElement === element)) return;\n this.disconnect();\n this.domElement = element;\n if (!this.captureInput) return;\n this.previousTouchAction = element.style.touchAction;\n element.style.touchAction = 'none';\n element.addEventListener('pointerdown', this.down);\n element.addEventListener('pointermove', this.move);\n element.addEventListener('pointerup', this.up);\n element.addEventListener('pointercancel', this.cancel);\n element.addEventListener('lostpointercapture', this.cancel);\n element.addEventListener('wheel', this.wheel, { passive: false });\n element.addEventListener('contextmenu', this.contextMenu);\n this.connected = true;\n }\n disconnect(): void {\n if (!this.connected) return;\n this.connected = false;\n this.domElement.removeEventListener('pointerdown', this.down);\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerup', this.up);\n this.domElement.removeEventListener('pointercancel', this.cancel);\n this.domElement.removeEventListener('lostpointercapture', this.cancel);\n this.domElement.removeEventListener('wheel', this.wheel);\n this.domElement.removeEventListener('contextmenu', this.contextMenu);\n this.domElement.style.touchAction = this.previousTouchAction;\n this.runtime.command('input', '{\"kind\":\"disconnect\"}', performance.now());\n }\n get enabled(): boolean { return this.read().enabled; }\n set enabled(enabled: boolean) { this.settings({ enabled }); }\n get enableDamping(): boolean { return this.read().enableDamping; }\n set enableDamping(enableDamping: boolean) { this.settings({ enableDamping }); }\n get dampingFactor(): number { return this.read().dampingFactor; }\n set dampingFactor(dampingFactor: number) { this.settings({ dampingFactor }); }\n get minDistance(): number { return this.read().minDistance; }\n set minDistance(minDistance: number) { this.settings({ minDistance }); }\n get maxDistance(): number { return this.read().maxDistance; }\n set maxDistance(maxDistance: number) { this.settings({ maxDistance }); }\n private read(): { enabled: boolean; enableDamping: boolean; dampingFactor: number; minDistance: number; maxDistance: number } { if (this.disposed) throw new Error('Annotation controls are disposed.'); return JSON.parse(this.runtime.command('controls', '{}', performance.now())); }\n private settings(value: unknown): void { if (!this.disposed) this.runtime.command('settings', JSON.stringify(value), performance.now()); }\n update(): void { if (!this.disposed) this.advance(); }\n notifyChange(): void { this.dispatchEvent({ type: 'change' }); }\n private send(kind: string, event: PointerEvent): void {\n const rect = this.domElement.getBoundingClientRect();\n this.runtime.command('input', JSON.stringify({ kind, id: event.pointerId, button: event.button, x: event.clientX, y: event.clientY, width: rect.width, height: rect.height, modifier: event.ctrlKey || event.metaKey || event.shiftKey }), performance.now());\n this.advance();\n }\n private readonly down = (event: PointerEvent): void => { this.domElement.setPointerCapture?.(event.pointerId); this.send('down', event); this.dispatchEvent({ type: 'start' }); };\n private readonly move = (event: PointerEvent): void => { this.send('move', event); };\n private readonly up = (event: PointerEvent): void => { this.send('up', event); if (this.domElement.hasPointerCapture?.(event.pointerId)) this.domElement.releasePointerCapture(event.pointerId); this.dispatchEvent({ type: 'end' }); };\n private readonly cancel = (event: PointerEvent): void => { this.send('cancel', event); this.dispatchEvent({ type: 'end' }); };\n private readonly wheel = (event: WheelEvent): void => {\n event.preventDefault();\n this.runtime.command('input', JSON.stringify({ kind: 'wheel', deltaY: event.deltaY, deltaMode: event.deltaMode, width: this.domElement.clientWidth, height: this.domElement.clientHeight }), performance.now());\n this.advance();\n };\n private readonly contextMenu = (event: Event): void => { event.preventDefault(); };\n dispose(): void {\n if (this.disposed) return;\n this.disconnect();\n this.disposed = true;\n }\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationSnapshot, MarkerDescriptor, NativeAnnotationRuntime } from './runtime';\n\ninterface Objects {\n descriptor: string;\n sphere: THREE.Mesh<THREE.SphereGeometry, THREE.MeshBasicMaterial>;\n line: THREE.Line<THREE.BufferGeometry, THREE.LineBasicMaterial>;\n label: THREE.Sprite;\n texture: THREE.CanvasTexture;\n arrow: THREE.Mesh<THREE.ConeGeometry, THREE.MeshBasicMaterial> | null;\n element: HTMLDivElement | null;\n}\n\ntype ParentPosition = { users: number; original: string; priority: string };\nconst positionedParents = new WeakMap<HTMLElement, ParentPosition>();\n\n/** Several annotation views can borrow the same static canvas container. */\nfunction positionOverlayParent(parent: HTMLElement): () => void {\n let position = positionedParents.get(parent);\n if (position) position.users++;\n else {\n const computed = parent.ownerDocument?.defaultView?.getComputedStyle(parent).position ?? parent.style.position;\n if (computed && computed !== 'static') return () => {};\n position = { users: 1, original: parent.style.position ?? '', priority: parent.style.getPropertyPriority?.('position') ?? '' };\n positionedParents.set(parent, position);\n parent.style.position = 'relative';\n }\n const borrowed = position;\n return () => {\n if (--borrowed.users > 0) return;\n positionedParents.delete(parent);\n // A later host edit owns this property; never restore over it.\n if (parent.style.position !== 'relative' || (parent.style.getPropertyPriority?.('position') ?? '') !== '') return;\n if (parent.style.setProperty) parent.style.setProperty('position', borrowed.original, borrowed.priority);\n else parent.style.position = borrowed.original;\n };\n}\n\n/** Applies Rust frame records to native objects. No annotation state machine. */\nexport class ThreeAnnotationRenderer {\n private readonly group = new THREE.Group();\n private readonly objects = new Map<number, Objects>();\n private readonly overlay: HTMLDivElement;\n private readonly raycaster = new THREE.Raycaster();\n private readonly pointer = new THREE.Vector2();\n private readonly viewProjection = new THREE.Matrix4();\n private overlayParent: HTMLElement | null = null;\n private releaseParentPosition: (() => void) | null = null;\n private readonly overlayResizeObserver: ResizeObserver | null;\n private style = '';\n private revision = -1;\n private meshes: THREE.Mesh[] = [];\n setMeshes(meshes: THREE.Mesh[]): void { this.meshes = meshes; }\n\n constructor(\n private readonly runtime: NativeAnnotationRuntime,\n private readonly scene: THREE.Scene,\n private readonly camera: THREE.PerspectiveCamera,\n private domElement: HTMLElement,\n private readonly onPick: (ids: number[]) => void,\n private readonly onHover: (id: number | null) => void,\n ) {\n this.scene.add(this.group);\n this.overlay = document.createElement('div');\n this.overlay.style.cssText = 'position:absolute;pointer-events:none;overflow:hidden;';\n this.overlayResizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.layoutOverlay());\n this.attachOverlay();\n domElement.addEventListener('click', this.click);\n }\n private attachOverlay(): void {\n const parent = this.domElement.parentElement ?? this.domElement;\n if (parent !== this.overlayParent) {\n this.releaseParentPosition?.();\n this.releaseParentPosition = positionOverlayParent(parent);\n this.overlayParent = parent;\n parent.appendChild(this.overlay);\n }\n this.overlayResizeObserver?.disconnect();\n this.overlayResizeObserver?.observe(this.domElement);\n if (parent !== this.domElement) this.overlayResizeObserver?.observe(parent);\n this.layoutOverlay();\n }\n private layoutOverlay(): DOMRect {\n const rect = this.domElement.getBoundingClientRect();\n // offsetParent can change if the host edits its positioning while attached.\n const parent = (this.overlay.offsetParent as HTMLElement | null) ?? this.overlayParent;\n const origin = parent?.getBoundingClientRect();\n this.overlay.style.left = `${rect.left - (origin?.left ?? 0) - (parent?.clientLeft ?? 0) + (parent?.scrollLeft ?? 0)}px`;\n this.overlay.style.top = `${rect.top - (origin?.top ?? 0) - (parent?.clientTop ?? 0) + (parent?.scrollTop ?? 0)}px`;\n this.overlay.style.width = `${rect.width}px`;\n this.overlay.style.height = `${rect.height}px`;\n return rect;\n }\n setDomElement(element: HTMLElement): void {\n if (element === this.domElement) { this.attachOverlay(); return; }\n this.domElement.removeEventListener('click', this.click);\n this.domElement = element;\n this.attachOverlay();\n element.addEventListener('click', this.click);\n }\n sync(snapshot: AnnotationSnapshot): void {\n if (this.revision === snapshot.descriptorRevision && this.style === snapshot.style) return;\n if (this.style !== snapshot.style) this.clear();\n this.style = snapshot.style;\n const ids = new Set(snapshot.descriptors.map(descriptor => descriptor.id));\n for (const id of this.objects.keys()) if (!ids.has(id)) this.remove(id);\n for (const descriptor of snapshot.descriptors) {\n const signature = JSON.stringify(descriptor);\n if (this.objects.get(descriptor.id)?.descriptor === signature) continue;\n this.remove(descriptor.id);\n this.objects.set(descriptor.id, this.create(descriptor, signature));\n }\n this.revision = snapshot.descriptorRevision;\n }\n private create(descriptor: MarkerDescriptor, signature: string): Objects {\n const { style } = descriptor;\n const sphere = new THREE.Mesh(new THREE.SphereGeometry(descriptor.radius, 12, 12), new THREE.MeshBasicMaterial({ color: style.markerColor, transparent: true }));\n const dashed = style.line.style === 'dashed' || style.line.style === 'dotted';\n const material = dashed\n ? new THREE.LineDashedMaterial({ color: style.lineColor, transparent: true, dashSize: style.line.style === 'dotted' ? 0.005 : 0.02, gapSize: 0.01, linewidth: style.line.thickness })\n : new THREE.LineBasicMaterial({ color: style.lineColor, transparent: true, linewidth: style.line.thickness });\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(51), 3));\n const line = new THREE.Line(geometry, material);\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) { sphere.geometry.dispose(); sphere.material.dispose(); geometry.dispose(); material.dispose(); throw new Error('Annotation labels require a 2D canvas context.'); }\n const font = `${style.labelFontSize}px Arial, sans-serif`;\n context.font = font;\n canvas.width = Math.ceil(context.measureText(descriptor.label).width) + 24;\n canvas.height = Math.ceil(style.labelFontSize * 1.5) + 12;\n context.font = font; context.textAlign = 'center'; context.textBaseline = 'middle';\n context.fillStyle = style.labelBackground; context.fillRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = style.labelColor; context.fillText(descriptor.label, canvas.width / 2, canvas.height / 2);\n const texture = new THREE.CanvasTexture(canvas);\n const label = new THREE.Sprite(new THREE.SpriteMaterial({ map: texture, transparent: true, depthTest: true, depthWrite: false, sizeAttenuation: false }));\n const arrow = style.line.arrowHead ? new THREE.Mesh(new THREE.ConeGeometry(descriptor.arrowRadius, descriptor.arrowLength, 8), new THREE.MeshBasicMaterial({ color: style.lineColor, transparent: true })) : null;\n let element: HTMLDivElement | null = null;\n if (this.style === 'html') {\n element = document.createElement('div');\n element.className = 'annotation-html-marker'; element.dataset.annotation = descriptor.name;\n element.textContent = descriptor.htmlText; element.title = descriptor.title; element.setAttribute('aria-label', descriptor.title);\n element.style.cssText = 'position:absolute;pointer-events:auto;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:2px solid white;display:none;align-items:center;justify-content:center;cursor:pointer;font: bold 12px Arial,sans-serif;box-shadow:0 2px 8px rgba(0,0,0,.3);';\n element.style.color = style.labelColor;\n element.addEventListener('mouseenter', () => this.onHover(descriptor.id));\n element.addEventListener('mouseleave', () => this.onHover(null));\n element.addEventListener('click', event => { event.stopPropagation(); this.onPick([descriptor.id]); });\n this.overlay.appendChild(element);\n }\n for (const object of [sphere, line, label, arrow]) if (object) { object.userData.annotationId = descriptor.id; object.visible = false; this.group.add(object); }\n this.runtime.label_metrics(descriptor.id, canvas.width, canvas.height);\n return { descriptor: signature, sphere, line, label, texture, arrow, element };\n }\n update(now: number): void {\n this.camera.updateMatrixWorld();\n this.viewProjection.multiplyMatrices(this.camera.projectionMatrix, this.camera.matrixWorldInverse);\n if ((this.domElement.parentElement ?? this.domElement) !== this.overlayParent) this.attachOverlay();\n const rect = this.layoutOverlay();\n const rays = this.runtime.occlusion_queries();\n const hits = new Float32Array(rays.length / 8 * 2);\n for (let offset = 0; offset < rays.length; offset += 8) {\n this.raycaster.set(new THREE.Vector3().fromArray(rays, offset + 1), new THREE.Vector3().fromArray(rays, offset + 4));\n this.raycaster.near = 0; this.raycaster.far = rays[offset + 7];\n const intersection = this.raycaster.intersectObjects(this.meshes, false)[0];\n hits[offset / 4] = rays[offset]; hits[offset / 4 + 1] = intersection?.distance ?? Infinity;\n }\n this.runtime.observe_occlusion(hits);\n const values = this.runtime.marker_frame(now, new Float32Array(this.camera.projectionMatrix.elements), new Float32Array(this.viewProjection.elements), rect.width, rect.height);\n const stride = requireInitializedEmbodyCore().annotation_marker_frame_stride();\n for (let offset = 0; offset < values.length; offset += stride) {\n const objects = this.objects.get(values[offset]);\n if (!objects) continue;\n const visible = values[offset + 1] === 1;\n const nativeVisible = visible && !objects.element;\n objects.sphere.visible = objects.line.visible = objects.label.visible = nativeVisible;\n if (objects.arrow) objects.arrow.visible = nativeVisible;\n objects.sphere.position.fromArray(values, offset + 2);\n objects.sphere.scale.setScalar(values[offset + 8]);\n objects.sphere.material.opacity = values[offset + 11]; objects.sphere.material.color.setHex(values[offset + 13]);\n objects.line.material.opacity = values[offset + 12]; objects.line.material.color.setHex(values[offset + 14]);\n const positions = objects.line.geometry.getAttribute('position') as THREE.BufferAttribute;\n (positions.array as Float32Array).set(values.subarray(offset + 19, offset + 70)); positions.needsUpdate = true;\n objects.line.geometry.computeBoundingSphere();\n if (objects.line.material instanceof THREE.LineDashedMaterial) objects.line.computeLineDistances();\n objects.label.position.fromArray(values, offset + 5); objects.label.scale.set(values[offset + 9], values[offset + 10], 1);\n objects.label.material.opacity = values[offset + 11];\n if (objects.arrow) { objects.arrow.position.fromArray(values, offset + 5); objects.arrow.quaternion.fromArray(values, offset + 15); objects.arrow.material.opacity = values[offset + 12]; objects.arrow.material.color.setHex(values[offset + 14]); }\n if (objects.element) { objects.element.style.display = visible ? 'flex' : 'none'; objects.element.style.transform = `translate(-50%,-50%) scale(${values[offset + 72]})`; objects.element.style.background = `#${Math.round(values[offset + 13]).toString(16).padStart(6, '0')}`; objects.element.style.left = `${values[offset + 70]}px`; objects.element.style.top = `${values[offset + 71]}px`; objects.element.style.opacity = String(values[offset + 11]); }\n }\n }\n private readonly click = (event: MouseEvent): void => {\n const rect = this.domElement.getBoundingClientRect();\n this.pointer.set((event.clientX - rect.left) / rect.width * 2 - 1, -(event.clientY - rect.top) / rect.height * 2 + 1);\n this.raycaster.near = 0; this.raycaster.far = Infinity;\n this.raycaster.setFromCamera(this.pointer, this.camera);\n // Raycaster reports native hits. Rust decides which annotation is selectable.\n this.onPick(this.raycaster.intersectObjects([...this.objects.values()].flatMap(objects => [objects.sphere, objects.label]), false).map(hit => hit.object.userData.annotationId as number));\n };\n private remove(id: number): void {\n const objects = this.objects.get(id); if (!objects) return;\n for (const object of [objects.sphere, objects.line, objects.arrow]) if (object) { this.group.remove(object); object.geometry.dispose(); object.material.dispose(); }\n this.group.remove(objects.label); objects.label.material.dispose(); objects.texture.dispose(); objects.element?.remove(); this.objects.delete(id);\n }\n clear(): void { for (const id of this.objects.keys()) this.remove(id); this.revision = -1; }\n dispose(): void {\n this.domElement.removeEventListener('click', this.click); this.clear(); this.group.removeFromParent();\n this.overlayResizeObserver?.disconnect(); this.overlay.remove(); this.releaseParentPosition?.();\n this.releaseParentPosition = null; this.overlayParent = null; this.meshes = [];\n }\n}\n","import type * as THREE from 'three';\n\nconst SLICE_BUDGET_MS = 4;\n\n/**\n * Keep Three's native per-mesh raycast, including skinning, morphs and material\n * sides. Yield between meshes once a slice is spent; one mesh is indivisible.\n * A null result means the owning model/region load was replaced or disposed.\n */\nexport async function intersectMeshesInSlices(\n raycaster: THREE.Raycaster,\n meshes: readonly THREE.Mesh[],\n options: { isCurrent: () => boolean; yieldToPaint: () => Promise<void>; now?: () => number },\n): Promise<THREE.Intersection[] | null> {\n const now = options.now ?? (() => performance.now());\n let sliceStart = now();\n const hits: THREE.Intersection[] = [];\n for (const [index, mesh] of meshes.entries()) {\n if (!options.isCurrent()) return null;\n // Let Raycaster apply its native layer checks and Mesh/SkinnedMesh logic.\n // Accumulate separately so earlier meshes' hits aren't sorted repeatedly.\n for (const hit of raycaster.intersectObject(mesh, false)) hits.push(hit);\n if (!options.isCurrent()) return null;\n if (index < meshes.length - 1 && now() - sliceStart >= SLICE_BUDGET_MS) {\n await options.yieldToPaint();\n if (!options.isCurrent()) return null;\n sliceStart = now();\n }\n }\n if (!options.isCurrent()) return null;\n // Same stable distance ordering as Raycaster.intersectObjects(meshes, false).\n return hits.sort((left, right) => left.distance - right.distance);\n}\n","/** Continue in a task after paint, rather than in the animation-frame microtask. */\nexport function waitForCharacterLoadPaint(): Promise<void> {\n return new Promise((resolve) => {\n let frame: number | undefined;\n let task: ReturnType<typeof setTimeout> | undefined;\n const finish = () => {\n clearTimeout(fallback);\n if (task !== undefined) clearTimeout(task);\n if (frame !== undefined && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(frame);\n resolve();\n };\n // Hidden tabs can suspend rAF, including after the visibility check.\n const fallback = setTimeout(finish, 100);\n if (typeof requestAnimationFrame === 'function' &&\n (typeof document === 'undefined' || document.visibilityState !== 'hidden')) {\n frame = requestAnimationFrame(() => { task = setTimeout(finish, 0); });\n } else {\n task = setTimeout(finish, 0);\n }\n });\n}\n","import * as THREE from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { bindSceneRendering, reportSceneRenderingFailure } from '../sceneRenderingBinding';\nimport { prepareModelSkinning } from '../modelSkinning';\nimport { renderScenePlayback } from '../playbackRendering';\nimport { compileModelForRender, drawModelForRender } from './modelRenderPreparation';\nimport { resolveAnnotationCharacterConfig } from './adapter';\nimport { CameraDOMControls } from './DOMControls';\nimport { ThreeAnnotationControls } from './ThreeAnnotationControls';\nimport { ThreeAnnotationRenderer } from './ThreeAnnotationRenderer';\nimport { AnnotationModelObserver } from './modelObservation';\nimport { intersectMeshesInSlices } from './markerSurfaceRaycast';\nimport { waitForCharacterLoadPaint } from './loadFrame';\nimport { annotationConfigInput, annotationProfileInput, type AnnotationSnapshot, type NativeAnnotationRuntime, type SurfaceQuery } from './runtime';\nimport type { ThreeAnnotationControllerConfig, CharacterConfig, AnnotationAnchoredRegion, CameraState, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandedRegionState, RuntimeAnnotationOptions, RuntimeAnnotationRegionSummary, RegionChangeCallback } from './types';\n\nexport interface MarkerStateSnapshot { visible: boolean; style: MarkerStyle; }\ninterface ModelRenderPreparation { promise: Promise<void>; draw: (() => void) | null; cancel: (reason: Error) => void; }\nfunction renderPreparationAborted(): Error { const error = new Error('Model render preparation was cancelled.'); error.name = 'AbortError'; return error; }\n\n/** Native resource owner for one Rust AnnotationRuntime. Await create() or initialize Wasm before construction. */\nexport class ThreeAnnotationController {\n readonly camera: THREE.PerspectiveCamera;\n readonly scene: THREE.Scene;\n readonly controls: ThreeAnnotationControls;\n private readonly runtime: NativeAnnotationRuntime;\n private readonly markerRenderer: ThreeAnnotationRenderer;\n private readonly resolveCharacterConfig: NonNullable<ThreeAnnotationControllerConfig['resolveCharacterConfig']>;\n private readonly selectRegion?: (name: string) => void;\n private domElement: HTMLElement;\n private readonly manageCamera: boolean;\n private observer: AnnotationModelObserver | null = null;\n private hostConfig: CharacterConfig | null = null;\n private configSnapshot: CharacterConfig | null = null;\n private configSnapshotRevision = -1;\n private configSnapshotHost: CharacterConfig | null = null;\n private state: AnnotationSnapshot;\n private domControls: CameraDOMControls | null = null;\n private disposed = false;\n private fallbackFrame: number | null = null;\n private readonly flights = new Map<number, () => void>();\n private readonly markerStateListeners = new Set<(state: MarkerStateSnapshot) => void>();\n private readonly regionListeners = new Set<RegionChangeCallback>();\n private renderer: CharacterSceneRenderer | null = null;\n private readonly playbackTimer = new THREE.Timer();\n private renderFrame: ThreeAnnotationControllerConfig['renderFrame'];\n private resizeRenderer: ThreeAnnotationControllerConfig['resizeRenderer'];\n private onRenderError: ThreeAnnotationControllerConfig['onRenderError'];\n private renderingSuspended = false;\n private unbindRendering: (() => Promise<void> | null) | null = null;\n private renderingFailure: ((error: unknown) => void) | null = null;\n private framePending = false;\n private frameCompletion: Promise<void> | null = null;\n private modelPreparation: ModelRenderPreparation | null = null;\n private renderFailed = false;\n private resizeObserver: ResizeObserver | null = null;\n private boundResizeHandler: (() => void) | null = null;\n\n static async create(config: ThreeAnnotationControllerConfig): Promise<ThreeAnnotationController> { await initEmbodyCore(); return new ThreeAnnotationController(config); }\n constructor(config: ThreeAnnotationControllerConfig, nativeOptions: { captureInput?: boolean; manageCamera?: boolean; markerDefaults?: unknown } = {}) {\n const core = requireInitializedEmbodyCore();\n const settings = Object.fromEntries(['enableDamping', 'dampingFactor', 'minDistance', 'maxDistance', 'transitionDuration', 'zoomPaddingFactor', 'closeUpPaddingFactor', 'fullBodyPaddingFactor'].map(key => [key, config[key as keyof ThreeAnnotationControllerConfig]]));\n this.runtime = new core.AnnotationRuntime(JSON.stringify({ ...settings, markerDefaults: nativeOptions.markerDefaults }));\n this.camera = config.camera; this.scene = config.scene; this.domElement = config.domElement;\n this.manageCamera = nativeOptions.manageCamera ?? true;\n this.resolveCharacterConfig = config.resolveCharacterConfig ?? resolveAnnotationCharacterConfig;\n this.selectRegion = config.onRegionSelect;\n this.controls = new ThreeAnnotationControls(config.domElement, this.runtime, () => { this.update(); this.requestFrame(); }, nativeOptions.captureInput);\n this.state = this.readState();\n if (this.manageCamera) this.applyCameraState(this.state.camera);\n else this.controls.target.copy(this.camera.getWorldDirection(new THREE.Vector3()).add(this.camera.position));\n this.markerRenderer = new ThreeAnnotationRenderer(this.runtime, this.scene, this.camera, this.domElement, ids => this.pick(ids), id => { if (!this.disposed) { this.call('hover', { id }); this.update(); } });\n if (config.showDOMControls ?? true) this.domControls = new CameraDOMControls({ container: config.controlsContainer ?? (config.rendering && config.domElement.tagName === 'CANVAS' ? config.domElement.parentElement ?? config.domElement : config.domElement), regions: [], markersVisible: this.state.visible, onRegionSelect: name => this.select(name), onMarkersVisibleChange: visible => this.setMarkersVisible(visible) });\n this.update();\n this.renderFrame = config.renderFrame;\n this.resizeRenderer = config.resizeRenderer;\n this.onRenderError = config.onRenderError;\n if (config.rendering) {\n const rendering = config.rendering;\n this.renderingFailure = (error) => reportSceneRenderingFailure(rendering, error, this.renderer);\n this.unbindRendering = bindSceneRendering(config.rendering, this.scene, this.camera, {\n suspend: async () => {\n this.renderingSuspended = true;\n const preparation = this.modelPreparation;\n this.cancelModelPreparation();\n // A lost device can reject loop shutdown. Still drain every borrower\n // before allowing the scene owner to release its model resources.\n let stopping: Promise<void>;\n try { stopping = Promise.resolve(this.renderer?.setAnimationLoop(null)); }\n catch (failure) { stopping = Promise.reject(failure); }\n const [stopped] = await Promise.allSettled([\n stopping,\n this.frameCompletion,\n preparation?.promise,\n ]);\n if (stopped.status === 'rejected') throw stopped.reason;\n },\n prepare: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n const model = this.observer?.model;\n if (model) {\n await compileModelForRender(renderer, this.scene, this.camera, model);\n if (this.disposed || model !== this.observer?.model) throw renderPreparationAborted();\n drawModelForRender(renderer, this.scene, this.camera, model);\n } else renderer.render(this.scene, this.camera);\n },\n commit: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n this.cleanupResizeHandling();\n this.controls.disconnect();\n this.controls.connect(renderer.domElement);\n this.domElement = renderer.domElement;\n this.markerRenderer.setDomElement(renderer.domElement);\n this.renderer = renderer;\n this.renderFailed = false;\n this.renderingSuspended = false;\n this.setupResizeHandling();\n this.boundResizeHandler?.();\n await this.startRenderLoop(true);\n if (this.disposed) { this.stopRenderLoop(); throw renderPreparationAborted(); }\n },\n onError: (error) => this.handleRenderError(error),\n });\n } else if (config.renderer) {\n this.renderer = config.renderer;\n void this.startRenderLoop();\n this.setupResizeHandling();\n }\n\n }\n private readState(): AnnotationSnapshot { return JSON.parse(this.runtime.snapshot()) as AnnotationSnapshot; }\n private call<T = void>(operation: string, payload: unknown = {}): T { if (this.disposed) throw new Error('Annotation controller is disposed.'); return JSON.parse(this.runtime.command(operation, JSON.stringify(payload), performance.now())) as T; }\n private sync(): void {\n if (this.disposed || this.runtime.revision() === this.state.revision) return;\n const previous = this.state; this.state = this.readState();\n this.markerRenderer.sync(this.state);\n this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined);\n this.domControls?.setMarkersVisible(this.state.visible);\n if (previous.currentRegion !== this.state.currentRegion && this.state.currentRegion) for (const listener of this.regionListeners) listener(this.state.currentRegion);\n if (previous.visible !== this.state.visible || previous.style !== this.state.style) for (const listener of this.markerStateListeners) listener({ visible: this.state.visible, style: this.state.style });\n }\n private applyCameraState(state: CameraState): void { this.camera.position.fromArray(state.position); this.controls.target.fromArray(state.target); this.camera.lookAt(this.controls.target); this.camera.updateMatrixWorld(); }\n private isCurrent(generation: number): boolean { return !this.disposed && this.runtime.is_current(generation); }\n private requestFrame(): void {\n if (this.disposed || this.renderer || this.fallbackFrame !== null || !this.runtime.needs_frame()) return;\n this.fallbackFrame = requestAnimationFrame(() => { this.fallbackFrame = null; this.update(); this.requestFrame(); });\n }\n private settleFlights(): void {\n const completed = this.runtime.completed_camera_request();\n for (const [id, resolve] of this.flights) if (id <= completed) { this.flights.delete(id); resolve(); }\n }\n private waitForFlight(id: number | null): Promise<void> {\n if (id === null || this.disposed) return Promise.resolve();\n if (this.manageCamera) this.applyCameraState(this.readState().camera); this.sync(); this.settleFlights();\n if (id <= this.runtime.completed_camera_request()) return Promise.resolve();\n const promise = new Promise<void>(resolve => this.flights.set(id, resolve)); this.requestFrame(); return promise;\n }\n private select(name: string): void { if (this.selectRegion) this.selectRegion(name); else void this.focusRegion(name); }\n private pick(ids: number[]): void { if (this.disposed) return; const name = this.call<string | null>('pick', { ids }); this.sync(); this.requestFrame(); if (name) this.select(name); }\n setModel(model: THREE.Object3D): void {\n if (this.disposed) return;\n prepareModelSkinning(model);\n this.cancelModelPreparation();\n const observer = new AnnotationModelObserver(model);\n this.runtime.set_model(JSON.stringify(observer.capture())); this.observer = observer; this.markerRenderer.setMeshes(observer.meshes); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n this.settleFlights(); this.sync();\n }\n /** Drop native and Rust model observations before the host releases its model under a rendering lease. */\n clearModel(): void {\n if (this.disposed) return;\n this.cancelModelPreparation(); this.call('clearModel');\n this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.markerRenderer.setMeshes([]);\n this.settleFlights(); this.sync();\n }\n getModel(): THREE.Object3D | null { return this.observer?.model ?? null; }\n async loadRegions(config: CharacterConfig): Promise<void> {\n if (this.disposed) return;\n const generation = this.call<number>('beginLoad'); this.settleFlights();\n const resolved = await this.resolveCharacterConfig(config);\n if (!this.isCurrent(generation)) return;\n await this.prepareRegionsAndMarkersForReveal(resolved);\n }\n private configure(config: CharacterConfig): void {\n this.cancelModelPreparation(); this.call('configure', { config: annotationConfigInput(config) }); this.hostConfig = config; this.settleFlights(); this.sync();\n }\n prepareRegionsForReveal(config: CharacterConfig): void { if (this.disposed) return; this.configure(config); this.startConfiguredCamera(); }\n async prepareRegionsAndMarkersForReveal(config: CharacterConfig, beforeReveal?: () => Promise<boolean>): Promise<void> {\n if (this.disposed) return; this.configure(config); const generation = this.runtime.generation();\n await this.loadMarkersForCurrentRegions(true);\n if (!this.isCurrent(generation)) return;\n if (beforeReveal && !await beforeReveal()) return;\n if (this.isCurrent(generation)) this.startConfiguredCamera();\n }\n private startConfiguredCamera(): void { this.update(); this.observer?.observeFocus(this.runtime, { configured: true }); void this.waitForFlight(this.call<number | null>('startConfigured')); }\n async loadMarkersForCurrentRegions(sliceSurfaceQueries = false): Promise<void> {\n if (this.disposed || !this.observer) return;\n const observer = this.observer; const generation = this.runtime.generation();\n observer.observe(this.runtime);\n const queries = JSON.parse(this.runtime.plan_markers(JSON.stringify(observer.morphAnchors(this.runtime)))) as SurfaceQuery[];\n for (const initial of queries) {\n let query: SurfaceQuery | null = initial;\n while (query && this.isCurrent(generation)) {\n const raycaster = new THREE.Raycaster(new THREE.Vector3().fromArray(query.origin), new THREE.Vector3().fromArray(query.direction), 0, query.far);\n const hits = sliceSurfaceQueries\n ? await intersectMeshesInSlices(raycaster, observer.meshes, { isCurrent: () => this.isCurrent(generation), yieldToPaint: waitForCharacterLoadPaint })\n : raycaster.intersectObjects(observer.meshes, false);\n if (!hits || !this.isCurrent(generation)) return;\n query = JSON.parse(this.runtime.surface_result(query.generation, query.id, query.phase, new Float32Array(hits.flatMap(hit => hit.point.toArray())))) as SurfaceQuery | null;\n if (sliceSurfaceQueries && query) await waitForCharacterLoadPaint();\n }\n }\n if (!this.isCurrent(generation)) return;\n this.runtime.finish_markers(generation); this.sync(); this.update(); this.requestFrame();\n }\n private rebuild(): void { void this.loadMarkersForCurrentRegions().catch(error => this.handleRenderError(error)); }\n focusRegion(name: string, duration?: number): Promise<void> { return this.focus({ name, duration }); }\n focusBones(bones: string[], duration?: number): Promise<void> { return this.focus({ region: { bones }, duration }); }\n focusMeshes(meshes: string[], duration?: number): Promise<void> { return this.focus({ region: { meshes }, duration }); }\n focusFullBody(duration?: number): Promise<void> { return this.focus({ region: { objects: ['*'] }, duration }); }\n focusObjects(objects: THREE.Object3D[], duration?: number): Promise<void> { return this.focus({ region: { objectIds: objects.flatMap(object => { const id = this.observer?.id(object); return id === undefined ? [] : [id]; }) }, duration }); }\n private focus(request: unknown): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, request); return this.waitForFlight(this.call<number | null>('focus', request)); }\n playIntroAnimation(orbitDuration = 3000, zoomDuration = 1500): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, { intro: true }); return this.waitForFlight(this.call<number | null>('intro', { orbitDuration, zoomDuration })); }\n animateToCameraState(state: CameraState, duration?: number): Promise<void> { if (this.disposed) return Promise.resolve(); return this.waitForFlight(this.call<number>('animateCamera', { ...state, duration })); }\n getCameraState(): CameraState { return { position: this.camera.position.toArray(), target: this.controls.target.toArray() }; }\n setCameraState(state: CameraState): void { if (this.disposed) return; this.call('setCamera', state); this.applyCameraState(this.readState().camera); this.settleFlights(); this.sync(); this.controls.notifyChange(); }\n getRegionNames(): string[] { return this.getAnnotationRegions().map(region => region.name); }\n getCurrentRegion(): string | null { return this.state.currentRegion; }\n getCharacterConfig(): CharacterConfig | null {\n if (!this.hostConfig) return null;\n // React consumers observe this snapshot. Camera/hover frames must not create\n // a new profile identity or trigger another round of editor effects.\n if (this.configSnapshotRevision !== this.state.configRevision || this.configSnapshotHost !== this.hostConfig) {\n this.configSnapshot = { ...this.hostConfig, ...this.state.config };\n this.configSnapshotRevision = this.state.configRevision;\n this.configSnapshotHost = this.hostConfig;\n }\n return this.configSnapshot;\n }\n getAnnotationRegions(): AnnotationAnchoredRegion[] { return structuredClone(this.state.regions); }\n getAnnotationRegion(name: string): AnnotationAnchoredRegion | undefined { return this.getAnnotationRegions().find(region => region.name === name); }\n setCurrentRegion(name: string | null): void { if (this.disposed) return; this.call('select', { name }); this.sync(); }\n getMarkersVisible(): boolean { return this.state.visible; }\n setMarkersVisible(visible: boolean): void {\n if (this.disposed) return;\n this.call('visibility', { visible });\n this.sync();\n // Region preparation defers native marker construction until the first\n // reveal. Rust's loaded state prevents rebuilding on later visibility edits.\n if (visible && !this.state.loaded && this.hostConfig) this.rebuild();\n this.update(); this.requestFrame();\n }\n getMarkerStyle(): MarkerStyle { return this.state.style; }\n setMarkerStyle(style: MarkerStyle): void { if (this.disposed) return; this.call('style', { style }); this.sync(); this.update(); }\n clearMarkers(): void { if (this.disposed) return; this.cancelModelPreparation(); this.call('clear'); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.settleFlights(); this.sync(); }\n subscribeMarkerState(listener: (state: MarkerStateSnapshot) => void): () => void { this.markerStateListeners.add(listener); listener({ visible: this.state.visible, style: this.state.style }); return () => { this.markerStateListeners.delete(listener); }; }\n onRegionChange(listener: RegionChangeCallback): () => void { this.regionListeners.add(listener); return () => { this.regionListeners.delete(listener); }; }\n soloMarker(name: string | null): void { if (this.disposed) return; this.call('solo', { name }); this.sync(); this.update(); }\n getSoloedMarker(): string | null { return this.state.solo; }\n expandRegion(name: string, duration?: number): void { this.expandCommand('expand', name, duration); }\n setRegionExpansion(name: string, expanded: boolean, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand(expanded ? 'expand' : 'collapse', name, duration, animation); }\n collapseRegion(name: string, duration?: number): void { this.expandCommand('collapse', name, duration); }\n toggleRegion(name: string, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand('toggle', name, duration, animation); }\n private expandCommand(operation: string, name: string, duration?: number, animation?: string): void { if (this.disposed) return; this.call(operation, { name, duration, animation }); this.sync(); this.update(); this.requestFrame(); }\n getExpandedRegions(): ExpandedRegionState[] { return structuredClone(this.state.expanded); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): void { this.updateAnnotationRegion(name, { style: { line } }); }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.updateAnnotationRegion(name, { style }); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.updateAnnotationRegion(name, { meshes }); }\n repositionMarker(name: string, position: { x: number; y: number; z: number }): void { this.updateAnnotationRegion(name, { markerAnchor: { type: 'point', position } }); }\n getMarkerPosition(name: string): { x: number; y: number; z: number } | null { return this.disposed ? null : this.call('markerPosition', { name }); }\n updateAnnotationRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { if (this.disposed) return; this.call('updateRegion', { name, update: JSON.parse(JSON.stringify(update, (_key, value) => value === undefined ? null : value)) }); this.sync(); this.rebuild(); }\n removeAnnotationRegion(name: string): void { if (this.disposed) return; this.call('removeRegion', { name }); this.sync(); this.rebuild(); }\n showRuntimeBoneAnnotation(boneName: string, options: RuntimeAnnotationOptions = {}): RuntimeAnnotationRegionSummary { const result = this.call<RuntimeAnnotationRegionSummary>('runtimeBone', { target: boneName, options }); this.sync(); this.rebuild(); return result; }\n showRuntimeAUAnnotations(auId: string | number, profile?: unknown, options: RuntimeAnnotationOptions = {}, morphTargetsByMesh?: unknown): RuntimeAnnotationRegionSummary[] { const result = this.call<RuntimeAnnotationRegionSummary[]>('runtimeAU', { target: String(auId), profile: annotationProfileInput(profile), options, meshes: morphTargetsByMesh }); this.sync(); this.rebuild(); return result; }\n clearRuntimeAnnotations(): string[] { if (this.disposed) return []; const names = this.call<string[]>('clearRuntime'); this.sync(); this.rebuild(); return names; }\n setDOMControlsVisible(visible: boolean): void { this.domControls?.setVisible(visible); }\n updateDOMControls(): void { this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined); this.domControls?.setMarkersVisible(this.state.visible); }\n update(): void {\n if (this.disposed) return;\n const rect = this.domElement.getBoundingClientRect(); const now = performance.now();\n const pose = this.runtime.camera_frame(now, new Float32Array([...this.camera.position.toArray(), ...this.controls.target.toArray(), this.camera.fov, this.camera.aspect, rect.width, rect.height]));\n if (this.manageCamera && pose.length >= 6) { this.camera.position.fromArray(pose); this.controls.target.fromArray(pose, 3); this.camera.lookAt(this.controls.target); }\n if (this.observer) this.runtime.observe_transforms(this.observer.transforms(this.runtime));\n this.sync(); this.markerRenderer.update(now); this.settleFlights();\n if (pose[9] === 1) this.controls.notifyChange();\n }\n dispose(): void {\n if (this.disposed) return; this.disposed = true; this.cancelModelPreparation(); this.stopRenderLoop(); this.cleanupResizeHandling();\n this.playbackTimer.dispose();\n const renderingSettled = this.unbindRendering?.(); this.unbindRendering = null;\n if (this.fallbackFrame !== null) cancelAnimationFrame(this.fallbackFrame); this.fallbackFrame = null;\n this.controls.dispose();\n // A candidate renderer may still be compiling these borrowed marker resources.\n if (renderingSettled) void renderingSettled.then(() => this.markerRenderer.dispose());\n else this.markerRenderer.dispose();\n this.domControls?.dispose(); this.domControls = null;\n this.runtime.dispose(); this.runtime.free(); this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n for (const resolve of this.flights.values()) resolve(); this.flights.clear(); this.markerStateListeners.clear(); this.regionListeners.clear();\n }\n private startRenderLoop(propagateFailure = false): void | Promise<void> {\n if (!this.renderer) return;\n const renderer = this.renderer;\n this.playbackTimer.disconnect();\n const ownerDocument = renderer.domElement?.ownerDocument;\n if (ownerDocument) this.playbackTimer.connect(ownerDocument);\n this.playbackTimer.reset();\n let playbackStarted = false;\n try {\n const started = renderer.setAnimationLoop((timestamp?: number) => {\n if (this.disposed || renderer !== this.renderer) return;\n this.playbackTimer.update(timestamp);\n const samplePlayback = playbackStarted;\n playbackStarted = true;\n if (this.renderFailed || this.renderingSuspended || this.framePending) return;\n try {\n // Native shadows are updated once per camera/frame. Prepare the full\n // scene first and leave its pixels untouched until the next frame.\n const preparationDraw = this.modelPreparation?.draw;\n if (preparationDraw) { preparationDraw(); return; }\n if (samplePlayback) renderScenePlayback(this.scene, this.playbackTimer);\n this.update();\n const frame = this.renderFrame\n ? this.renderFrame(this.renderer!, this.scene, this.camera)\n : this.renderer!.render(this.scene, this.camera);\n if (frame) {\n this.framePending = true;\n this.frameCompletion = Promise.resolve(frame).then(\n () => { this.framePending = false; },\n (error) => { this.framePending = false; this.handleRenderError(error); },\n );\n }\n } catch (error) { this.handleRenderError(error); }\n });\n if (started) return started.catch((error) => {\n if (propagateFailure) throw error;\n if (renderer === this.renderer) this.handleRenderError(error);\n });\n } catch (error) {\n if (propagateFailure) throw error;\n this.handleRenderError(error);\n }\n }\n\n private handleRenderError(error: unknown): void {\n if (this.disposed || this.renderFailed) return;\n this.renderFailed = true;\n this.cancelModelPreparation(error instanceof Error ? error : new Error(String(error)));\n this.stopRenderLoop();\n const failure = error instanceof Error ? error : new Error(String(error));\n if (this.renderingFailure) { this.renderingFailure(failure); return; }\n try {\n if (this.onRenderError) this.onRenderError(failure);\n else console.error('Character camera render loop failed.', failure);\n } catch (callbackError) {\n console.error('Character camera render-error callback failed.', callbackError);\n }\n }\n\n /**\n * Stop the render loop\n */\n private stopRenderLoop(): void {\n this.playbackTimer.reset();\n try {\n const stopped = this.renderer?.setAnimationLoop(null);\n if (stopped) void stopped.catch((error) => console.error('Character camera render loop stop failed.', error));\n } catch (error) { console.error('Character camera render loop stop failed.', error); }\n }\n\n private setupResizeHandling(): void {\n if (!this.renderer) return;\n\n const container = this.domElement.parentElement || this.domElement;\n\n // Create resize handler\n this.boundResizeHandler = () => {\n const width = container.clientWidth || window.innerWidth;\n const height = container.clientHeight || window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n if (this.renderer) {\n if (this.resizeRenderer) {\n this.resizeRenderer(this.renderer, width, height);\n } else {\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n this.renderer.setSize(width, height, false);\n }\n }\n };\n\n // Use ResizeObserver for container size changes\n this.resizeObserver = new ResizeObserver(this.boundResizeHandler);\n this.resizeObserver.observe(container);\n\n // Also listen to window resize as fallback\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Clean up resize handling\n */\n private cleanupResizeHandling(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\n }\n\n // ====== CORE PUBLIC METHODS ======\n\n /**\n * Prepare the currently visible material variants before first reveal.\n * Borrows model/renderer; callers retain them until this promise settles,\n * including after cancellation or controller disposal.\n */\n prepareModelForRender(model: THREE.Object3D, options: { signal?: AbortSignal } = {}): Promise<void> {\n if (this.disposed || options.signal?.aborted) return Promise.reject(renderPreparationAborted());\n if (this.renderingSuspended) return Promise.reject(new Error('Model render preparation is unavailable during renderer replacement.'));\n if (!this.renderer || this.renderFailed) return Promise.reject(new Error('Model render preparation requires an active controller-owned renderer.'));\n const renderer = this.renderer;\n const previous = this.modelPreparation;\n previous?.cancel(renderPreparationAborted());\n let cancelled: Error | null = null;\n let invalidatePreparedShadows: (() => void) | null = null;\n let rejectDraw: ((error: Error) => void) | null = null;\n let resolve!: () => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n const request: ModelRenderPreparation = {\n promise, draw: null,\n cancel: (reason) => {\n cancelled ??= reason;\n invalidatePreparedShadows?.();\n request.draw = null;\n rejectDraw?.(cancelled);\n },\n };\n this.modelPreparation = request;\n const abort = () => request.cancel(renderPreparationAborted());\n options.signal?.addEventListener('abort', abort, { once: true });\n const checkCancelled = () => { if (cancelled) throw cancelled; };\n void (async () => {\n try {\n // Supersession never compiles over a predecessor's borrowed objects.\n if (previous) await previous.promise.catch(() => undefined);\n // A host callback may have started while the predecessor was settling.\n // Read its current completion here, immediately before acquiring state.\n if (this.framePending && this.frameCompletion) await this.frameCompletion;\n checkCancelled();\n const compilation = compileModelForRender(renderer, this.scene, this.camera, model);\n try { await compilation; }\n catch (error) { throw cancelled ?? error; }\n checkCancelled();\n await new Promise<void>((done, failed) => {\n rejectDraw = failed;\n request.draw = () => {\n request.draw = null;\n try {\n checkCancelled();\n invalidatePreparedShadows = drawModelForRender(renderer, this.scene, this.camera, model);\n checkCancelled();\n done();\n } catch (error) { invalidatePreparedShadows?.(); failed(cancelled ?? error); }\n };\n });\n checkCancelled();\n } finally {\n options.signal?.removeEventListener('abort', abort);\n if (this.modelPreparation === request) this.modelPreparation = null;\n }\n })().then(resolve, reject);\n return promise;\n }\n\n private cancelModelPreparation(reason = renderPreparationAborted()): void {\n this.modelPreparation?.cancel(reason);\n }\n\n /**\n * Set the model to use for bone/mesh lookups\n * Must be called after model loads\n */\n\n}\n","import * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { AnnotationAnchoredRegion, CharacterConfig, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandAnimation } from './types';\nexport interface AnnotationMarkersConfig { scene: THREE.Scene; camera: THREE.PerspectiveCamera; domElement: HTMLElement; onSelect: (name: string) => void; config?: Partial<MarkerStyleOverrides> & { lineLength?: number; labelScale?: number }; }\n/** Marker-only native view of the same Rust runtime used by the controller. */\nexport class ThreeAnnotationMarkers {\n protected readonly controller: ThreeAnnotationController;\n constructor(private readonly options: AnnotationMarkersConfig, private readonly style: MarkerStyle = '3d') {\n this.controller = new ThreeAnnotationController({ ...options, onRegionSelect: options.onSelect, showDOMControls: false }, { captureInput: false, manageCamera: false, markerDefaults: options.config });\n this.controller.setMarkersVisible(true);\n }\n setModel(model: THREE.Object3D): void { this.controller.setModel(model); }\n loadRegions(config: CharacterConfig, options: { sliceSurfaceQueries?: boolean } = {}): Promise<void> {\n this.controller.prepareRegionsForReveal({ ...config, markerStyle: this.style, playIntroOnLoad: false, defaultRegion: undefined });\n return this.controller.loadMarkersForCurrentRegions(options.sliceSurfaceQueries);\n }\n setCurrentRegion(name: string | null): void { this.controller.setCurrentRegion(name); }\n updateRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { this.controller.updateAnnotationRegion(name, update); }\n removeRegion(name: string): void { this.controller.removeAnnotationRegion(name); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.controller.updateRegionMeshes(name, meshes); }\n repositionMarker(name: string, position: THREE.Vector3): void { this.controller.repositionMarker(name, position); }\n getMarkerPosition(name: string): THREE.Vector3 | null { const p = this.controller.getMarkerPosition(name); return p ? new THREE.Vector3(p.x, p.y, p.z) : null; }\n updateLineStyle(name: string, line: Partial<LineConfig>): void { this.controller.setRegionLineStyle(name, line); }\n updateMarkerStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.controller.setRegionStyle(name, style); }\n setSoloMarker(name: string | null): void { this.controller.soloMarker(name); }\n getSoloedMarker(): string | null { return this.controller.getSoloedMarker(); }\n expandRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.setRegionExpansion(name, true, animation, duration); }\n collapseRegion(name: string, duration?: number): void { this.controller.collapseRegion(name, duration); }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.toggleRegion(name, animation, duration); }\n getExpandedRegions() { return this.controller.getExpandedRegions(); }\n update(): void { this.controller.update(); }\n setVisible(visible: boolean): void { this.controller.setMarkersVisible(visible); }\n clear(): void { this.controller.clearMarkers(); }\n dispose(): void { this.controller.dispose(); }\n}\n","import { ThreeAnnotationMarkers, type AnnotationMarkersConfig } from './ThreeAnnotationMarkers';\n/** HTML rendering of the same Rust annotation state and layout. */\nexport class HtmlAnnotationMarkers extends ThreeAnnotationMarkers { constructor(options: AnnotationMarkersConfig) { super(options, 'html'); } }\n","import { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport { ThreeAnnotationMarkers } from './ThreeAnnotationMarkers';\nimport { HtmlAnnotationMarkers } from './HtmlAnnotationMarkers';\nimport { CameraDOMControls } from './DOMControls';\nimport type {\n CharacterConfig,\n ThreeAnnotationControllerConfig,\n MarkerStyle,\n LineConfig,\n MarkerStyleOverrides,\n ExpandAnimation,\n ExpandedRegionState,\n} from './types';\n\n/**\n * ThreeAnnotations Configuration\n */\nexport interface ThreeAnnotationsConfig {\n /** Three.js scene */\n scene: THREE.Scene;\n /** Three.js camera */\n camera: THREE.PerspectiveCamera;\n /** Canvas or container element */\n domElement: HTMLElement;\n /** Marker style: '3d' (default) or 'html' */\n markerStyle?: MarkerStyle;\n /** Show DOM controls dropdown. Default: false */\n showControls?: boolean;\n /** Callback when a region is selected */\n onRegionSelect?: (name: string) => void;\n /** Camera controller options */\n cameraOptions?: Partial<ThreeAnnotationControllerConfig>;\n}\n\n/**\n * ThreeAnnotations - Camera & Marker System for Three.js\n *\n * Factory class that creates and manages camera controller and markers.\n *\n * @example\n * ```typescript\n * const annotations = await ThreeAnnotations.create({\n * scene,\n * camera,\n * domElement: canvas,\n * markerStyle: '3d',\n * });\n *\n * annotations.setModel(model);\n * await annotations.loadCharacter(config);\n * annotations.focus('head');\n *\n * // In render loop\n * annotations.update();\n * ```\n */\nexport class ThreeAnnotations {\n private readonly cameraController: ThreeAnnotationController;\n private model: THREE.Object3D | null = null;\n\n static async create(options: ThreeAnnotationsConfig): Promise<ThreeAnnotations> { await initEmbodyCore(); return new ThreeAnnotations(options); }\n\n constructor(options: ThreeAnnotationsConfig) {\n this.cameraController = new ThreeAnnotationController({\n scene: options.scene,\n camera: options.camera,\n domElement: options.domElement,\n showDOMControls: options.showControls ?? false,\n onRegionSelect: options.onRegionSelect,\n ...options.cameraOptions,\n });\n this.cameraController.setMarkersVisible(true);\n if (options.markerStyle) this.cameraController.setMarkerStyle(options.markerStyle);\n }\n\n setModel(model: THREE.Object3D): this {\n this.model = model;\n this.cameraController.setModel(model);\n return this;\n }\n\n async loadCharacter(config: CharacterConfig): Promise<this> {\n await this.cameraController.loadRegions(config);\n return this;\n }\n\n focus(regionName: string, duration?: number): Promise<void> { return this.cameraController.focusRegion(regionName, duration); }\n getRegions(): string[] { return this.cameraController.getRegionNames(); }\n getCurrentRegion(): string | null { return this.cameraController.getCurrentRegion(); }\n setMarkerStyle(style: MarkerStyle): this { this.cameraController.setMarkerStyle(style); return this; }\n setMarkersVisible(visible: boolean): this { this.cameraController.setMarkersVisible(visible); return this; }\n setControlsVisible(visible: boolean): this { this.cameraController.setDOMControlsVisible(visible); return this; }\n getCameraState() { return this.cameraController.getCameraState(); }\n setCameraState(position: [number, number, number], target: [number, number, number], _animate?: boolean): this {\n this.cameraController.setCameraState({ position, target }); return this;\n }\n get controller(): ThreeAnnotationController { return this.cameraController; }\n update(): void { this.cameraController.update(); }\n expandRegion(name: string, duration?: number): this { this.cameraController.expandRegion(name, duration); return this; }\n collapseRegion(name: string, duration?: number): this { this.cameraController.collapseRegion(name, duration); return this; }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): this { this.cameraController.toggleRegion(name, animation, duration); return this; }\n getExpandedRegions(): ExpandedRegionState[] { return this.cameraController.getExpandedRegions(); }\n soloMarker(name: string | null): this { this.cameraController.soloMarker(name); return this; }\n getSoloedMarker(): string | null { return this.cameraController.getSoloedMarker(); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): this { this.cameraController.setRegionLineStyle(name, line); return this; }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): this { this.cameraController.setRegionStyle(name, style); return this; }\n dispose(): void { this.cameraController.dispose(); this.model = null; }\n\n // ============ CHARACTER VALIDATION ============\n\n /**\n * Validate a loaded character model against expected bone/morph mappings\n * @param expectedBones - Map of semantic bone names to actual bone names\n * @param expectedMorphs - List of expected morph target names\n * @returns Validation result with found/missing bones and morphs\n */\n validateCharacter(expectedBones?: Record<string, string>, expectedMorphs?: string[]): CharacterValidationResult {\n return annotationQuery('validateCharacter', { model: this.model ? observeAnnotationModel(this.model) : null, expectedBones, expectedMorphs });\n }\n getBoneNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'bones' }); }\n getMorphNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'morphs' }); }\n getMeshNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'meshes' }); }\n}\n\n// ============ VALIDATION TYPES ============\n\nexport interface ValidationItem {\n name: string;\n semantic?: string;\n}\n\nexport interface ValidationCategory {\n found: ValidationItem[];\n missing: ValidationItem[];\n unexpected: ValidationItem[];\n}\n\nexport interface CharacterValidationResult {\n valid: boolean;\n bones: ValidationCategory;\n morphs: ValidationCategory;\n meshes: { found: string[]; total: number };\n summary: string;\n}\n\n// Re-export for convenience\nexport { ThreeAnnotationController as CameraController } from './ThreeAnnotationController';\nexport { ThreeAnnotationMarkers as Markers3D } from './ThreeAnnotationMarkers';\nexport { HtmlAnnotationMarkers as MarkersHTML } from './HtmlAnnotationMarkers';\nexport { CameraDOMControls as Controls } from './DOMControls';\n","import type { AnnotationAnchoredRegion, AnnotationMarkerAnchor, Region } from './types';\nimport { annotationQuery } from './runtime';\nexport type MarkerAnchorProjectionMode = 'legacy' | 'project' | 'skip';\nexport interface ResolvedMarkerAnchorRegion { region: AnnotationAnchoredRegion; anchor: AnnotationMarkerAnchor | null; source: 'legacy-region' | 'marker-anchor'; projection: MarkerAnchorProjectionMode; useLegacyRegionSemantics: boolean; }\nexport function resolveMarkerAnchorRegion(region: Region): ResolvedMarkerAnchorRegion { return annotationQuery('anchor', { region }); }\nexport function shouldUseFaceCenterForMarkerAnchor(resolved: ResolvedMarkerAnchorRegion): boolean { return annotationQuery('faceAnchor', { resolved }); }\nexport function shouldProjectMarkerAnchorToSurface(resolved: ResolvedMarkerAnchorRegion, legacyDefault: boolean): boolean { return annotationQuery('projectAnchor', { resolved, legacyDefault }); }\n","import { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\n\ntype Lifecycle = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationLifecycle']>;\nexport type LifecycleEffect = { kind: 'visibility' | 'style' | 'previewStart' | 'previewEnd'; visible?: boolean; style?: '3d' | 'html' };\n/** Clock/queue transport only. All deadline and effect decisions belong to Rust. */\nexport class AnnotationLifecycleBridge {\n private readiness: Promise<void> = Promise.resolve();\n private initializing: Promise<void> | null = null;\n private core: Lifecycle | null = null;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private pending: { operation: string; options: unknown; time: number }[] = [];\n private initialized = false;\n private commandRevision = 0;\n constructor(private readonly mode: 'preview' | 'visibility', private readonly duration: number, private readonly apply: (effects: LifecycleEffect[]) => void) {\n this.initialize();\n }\n /** The current attempt; dispatching after a failed attempt can start a retry. */\n get ready(): Promise<void> { return this.readiness; }\n private initialize(): void {\n if (this.initialized) return;\n // Another scene may have retried the shared loader after our earlier failure.\n try { requireInitializedEmbodyCore(); this.initialized = true; }\n catch { /* Queue native calls until the shared loader is ready. */ }\n if (this.initialized) {\n this.readiness = Promise.resolve();\n this.drainPending();\n return;\n }\n if (this.initializing) return;\n this.initializing = initEmbodyCore().then(() => {\n this.initializing = null;\n this.initialized = true;\n this.drainPending();\n }, error => {\n this.initializing = null;\n this.pending = [];\n throw error;\n });\n this.readiness = this.initializing;\n void this.readiness.catch(error => { console.error('Annotation lifecycle initialization failed.', error); });\n }\n private drainPending(): void {\n // Consume the live queue so cleanup from a callback can cancel its tail.\n while (this.pending.length) {\n const entry = this.pending.shift()!;\n this.execute(entry.operation, entry.options, entry.time);\n }\n }\n dispatch(operation: string, options: unknown = {}): void {\n const time = performance.now();\n if (operation === 'dispose') {\n this.pending = [];\n if (!this.initialized) return;\n }\n if (!this.initialized) { this.pending.push({ operation, options, time }); this.initialize(); return; }\n this.execute(operation, options, time);\n }\n private execute(operation: string, options: unknown, time: number): void {\n const revision = ++this.commandRevision;\n if (this.timer !== null) clearTimeout(this.timer); this.timer = null;\n // dispose is reusable host cleanup (including React effect replay). Release\n // the Wasm allocation and create a fresh runtime on the next native call.\n const core = this.core ??= new (requireInitializedEmbodyCore().AnnotationLifecycle)(this.mode, this.duration);\n const effects = JSON.parse(core.command(operation, JSON.stringify(options), time)) as LifecycleEffect[];\n if (operation === 'dispose') { this.core = null; core.free(); }\n this.apply(effects);\n // A callback can dispose/reuse the lifecycle; its newer command owns timers.\n if (operation === 'dispose' || revision !== this.commandRevision) return;\n const deadline = core.deadline();\n if (deadline !== undefined) this.timer = setTimeout(() => this.dispatch('tick'), Math.max(0, deadline - performance.now()));\n }\n isActive(): boolean { return this.core?.is_active() ?? false; }\n}\n","import type { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { MarkerStyle } from './types';\nimport { AnnotationLifecycleBridge } from './lifecycleBridge';\nimport { annotationQuery } from './runtime';\nexport const DEFAULT_MARKER_AUTO_HIDE_MS = 5000;\nexport type MarkerLifecycleRevealOptions = { durationMs?: number; markerStyle?: MarkerStyle; revealDelayMs?: number };\nexport type MarkerLifecycleRevealSource = { markerStyle?: MarkerStyle; playIntroOnLoad?: boolean };\ntype Controller = Pick<ThreeAnnotationController, 'setMarkersVisible' | 'setMarkerStyle'>;\nexport function createMarkerLifecycleRevealOptions(config: MarkerLifecycleRevealSource | null | undefined): MarkerLifecycleRevealOptions { return annotationQuery('revealOptions', { config }); }\nexport function createMarkerVisibilityLifecycle(getController: () => Controller | null, defaultDurationMs = DEFAULT_MARKER_AUTO_HIDE_MS) {\n let owner: Controller | null = null;\n const bridge = new AnnotationLifecycleBridge('visibility', defaultDurationMs, effects => {\n // Controller identity is a borrowed native resource, never serialized state.\n if (getController() !== owner) return;\n for (const effect of effects) { if (effect.kind === 'visibility') owner?.setMarkersVisible(effect.visible!); if (effect.kind === 'style') owner?.setMarkerStyle(effect.style!); }\n });\n const dispatch = (operation: string, options: unknown = {}) => { owner = getController(); bridge.dispatch(operation, options); };\n return { get ready() { return bridge.ready; }, setManualVisibility: (visible: boolean) => dispatch('manual', { visible }), prepareForCharacterLoad: () => dispatch('prepare'), showForCharacterLoad: (options: MarkerLifecycleRevealOptions = {}) => dispatch('reveal', options), dispose: () => bridge.dispatch('dispose') };\n}\n","import { AnnotationLifecycleBridge } from './lifecycleBridge';\nexport const DEFAULT_PREVIEW_AUTO_CLEAR_MS = 1200;\nexport interface RuntimeAnnotationPreviewLifecycleOptions { getDisabled?: () => boolean; getAutoClearMs?: () => number | undefined; onPreviewStart?: () => void; onPreviewEnd?: () => void; }\nexport function createRuntimeAnnotationPreviewLifecycle(options: RuntimeAnnotationPreviewLifecycleOptions) {\n const bridge = new AnnotationLifecycleBridge('preview', DEFAULT_PREVIEW_AUTO_CLEAR_MS, effects => {\n for (const effect of effects) { if (effect.kind === 'previewStart') options.onPreviewStart?.(); if (effect.kind === 'previewEnd') options.onPreviewEnd?.(); }\n });\n return { get ready() { return bridge.ready; },\n start: (forceRefresh = false) => bridge.dispatch('start', { forceRefresh, disabled: options.getDisabled?.(), durationMs: options.getAutoClearMs?.() }),\n end: () => bridge.dispatch('end'), scheduleEnd: () => bridge.dispatch('scheduleEnd', { durationMs: options.getAutoClearMs?.() }),\n isActive: () => bridge.isActive(), dispose: () => bridge.dispatch('dispose'),\n };\n}\n","import type { RuntimeAnnotationSide } from './types';\nimport { annotationProfileInput, annotationQuery } from './runtime';\nexport function inferRuntimeAnnotationPreviewSide(auId: number, profile: { auToMorphs?: unknown; auToBones?: unknown } | null | undefined): RuntimeAnnotationSide | undefined { return annotationQuery<RuntimeAnnotationSide | null>('inferPreviewSide', { au: auId, profile: annotationProfileInput(profile) }) ?? undefined; }\nexport function pickContinuumAnnotationAuId(value: number, negId: number, posId: number, stickyId: number | null): number { return annotationQuery('continuumTarget', { value, negId, posId, stickyId }); }\n","import type { BoneResolutionProfile } from './adapter';\n\n/**\n * Embody serializes bone-resolution inputs into Wasm. Passing a complete\n * character profile also serializes authored vertex deltas and saved clips\n * for every annotation lookup, even though the resolver cannot use them.\n */\nexport function boneResolutionProfile(\n profile: BoneResolutionProfile | null | undefined,\n): BoneResolutionProfile | null {\n if (!profile) return null;\n return {\n bonePrefix: profile.bonePrefix,\n boneSuffix: profile.boneSuffix,\n boneNodes: profile.boneNodes,\n suffixPattern: profile.suffixPattern,\n };\n}\n","import type { AnimationClip, Mesh, Object3D } from 'three';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { requireInitializedEmbodyCore, CC4_HUMANOID_SKELETON_TEMPLATE, HUMANOID_SKELETON_TEMPLATES, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport { ThreeModelInspector, serializeAnimationClips } from './index';\nimport type { Region } from './annotations/types';\nimport type * as Types from './authoringTypes';\n\nexport * from './authoringTypes';\nexport { resolveBoneNames, fuzzyNameMatch } from './annotations/adapter';\nexport {\n DEFAULT_AXIS_TO_CHANNEL, DEFAULT_BONE_MAX_DEGREES, JOINT_CONTROL_SECTION,\n VISEME_KEYS, HAIR_COLOR_PRESETS, DEFAULT_HAIR_COLOR_APPEARANCE, getAUDescriptors, LEGACY_BODY_CONTROL_AUS,\n HUMANOID_SKELETON_TEMPLATES, CC4_HUMANOID_SKELETON_TEMPLATE,\n} from '@lovelace_lol/embody/wasm';\n\nconst json = (value: unknown) => JSON.stringify(value ?? {});\nfunction request<T>(op: string, payload: unknown = {}): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(json({ op, payload }))) as T;\n}\n\nexport const getPreset = (id: Types.PresetType): Types.Profile => request('preset.get', { id });\nexport const extendCharacterConfigWithPreset = <T extends Types.ProfileRuntimeConfig>(config: T): T => request('profile.extendConfig', { config });\nexport const extractProfileOverrides = (config: Types.ProfileRuntimeConfig): Partial<Types.Profile> => request('profile.extractOverrides', { config });\nexport const mergeCharacterRegionsByName = (base?: Region[], override?: Region[]): Region[] => request('profile.mergeRegions', { base, override });\nexport const getMeshNamesForAUProfile = (profile: Types.Profile, auId: number): string[] => request('profile.getMeshNamesForAU', { profile, auId });\nexport const getHumanoidSpecification = (): Types.HumanoidSpecification => request('humanoid.getSpecification');\nexport const setAUMorphTargets = (profile: Types.Profile, auId: number, side: 'left' | 'right' | 'center', targets: Types.MorphTargetRef[]): Types.Profile => request('profile.setAUMorphTargets', { profile, auId, side, targets });\nexport const setHumanoidRoleBinding = (profile: Types.Profile, role: Types.VRMHumanoidRole, boneName: string | null): Types.Profile => request('profile.setHumanoidRoleBinding', { profile, role, boneName });\nexport const resolveHumanoidCharacterization = (profile: Types.Profile): Types.HumanoidCharacterizationResolution => request('profile.resolveHumanoidCharacterization', { profile });\n\nexport const hasLeftRightMorphs = (profile: Types.Profile, auId: number): boolean => request('profile.hasLeftRightMorphs', { profile, auId });\nexport const isMixedAU = (profile: Types.Profile, auId: number): boolean => request('profile.isMixedAU', { profile, auId });\nexport const resolveVisemeProfile = (profile: Partial<Types.Profile>): Types.ResolvedVisemeProfile => request('profile.resolveVisemes', { profile });\n\nexport const isMaxDegreesOnlyAxisBindingUpdate = (update: Types.BoneAxisBindingUpdate): boolean => request('bone.isMaxDegreesOnlyUpdate', { update });\nexport const findNodeKeyForBone = (boneName: string, profile: Types.Profile | null): string | null => profile ? request('bone.findNodeKey', { profile, boneName }) : null;\nexport const ensureBoneNodeKey = (profile: Types.Profile, boneName: string): { nodeKey: string; boneNodes: Record<string, string> } => request('bone.ensureNodeKey', { profile, boneName });\nexport const ensureBilateralBoneNodeKeys = (profile: Types.Profile, leftBoneName: string, rightBoneName: string): Types.Profile => request('bone.ensureBilateralNodeKeys', { profile, leftBoneName, rightBoneName });\nexport const resolveBoneNameForNodeKey = (profile: Types.Profile, nodeKey: string): string | null => request('bone.resolveBoneName', { profile, nodeKey });\nexport const stripConfiguredBoneAffixes = (profile: Pick<Types.Profile, 'bonePrefix' | 'boneSuffix'> | null | undefined, boneName: string): string => request('bone.stripAffixes', { profile: profile ?? {}, boneName });\nexport const inferChiralBoneNamePair = (boneNames: string[], selectedBoneName: string): Types.ChiralBoneNamePair | null => request('bone.inferChiralPair', { boneNames, selectedBoneName });\nexport const formatAxisLabel = (axis: Types.BoneAxisKey): string => request('bone.formatAxisLabel', { axis });\nexport const formatAxisDirectionLabel = (axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection): string => request('bone.formatDirectionLabel', { axis, direction });\nexport const getAxisFromChannel = (channel?: string): Types.BoneAxisKey | null => channel ? request('bone.getAxisFromChannel', { channel }) : null;\nexport const getBoneAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BoneAxisBindingState | null => request('bone.getAxisState', { profile, boneName, axis });\nexport const resolveBoneAxisChannel = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.RotationChannel => request('bone.resolveAxisChannel', { profile, boneName, axis });\nexport const getBilateralAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BilateralAxisBindingState | null => request('bone.getBilateralAxisState', { profile, boneName, axis });\nexport const getAUBoneBindingState = (profile: Types.Profile, auId: number): Types.AUBoneBindingState => request('bone.getAUBindingState', { profile, auId });\nexport const inferEyeControlScope = (profile: Pick<Types.Profile, 'auToBones'>, binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'negativeAuId' | 'positiveAuId'>): Types.BoneControlScope | null => request('bone.inferEyeScope', { profile, binding });\nexport const inferEyeControlFamily = (binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'axis'>): Types.BoneControlFamily | null => request('bone.inferEyeFamily', { binding });\nexport const applyBoneAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyAxisUpdate', { profile, boneName, axis, update });\nexport const applyBilateralAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyBilateralAxisUpdate', { profile, boneName, axis, scope, update });\nexport const applyAUBoneBindingUpdate = (profile: Types.Profile, auId: number, update: { boneName: string | null; axis: Types.BoneAxisKey; direction: Types.BoneAxisDirection; maxDegrees: number | null }): Types.Profile => request('bone.applyAUBindingUpdate', { profile, auId, update });\nexport const createBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createAxisAU', { profile, boneName, axis, direction, name: options.name });\nexport const createBilateralBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createBilateralAxisAU', { profile, boneName, axis, scope, direction, name: options.name });\nexport const buildBoneAuOptions = (profile: Types.Profile): Array<{ value: string; label: string; detail?: string }> => request('bone.buildAUOptions', { profile });\nexport const isJointControlAuInfo = (info?: Pick<Types.AUInfo, 'facePart'> | null): boolean => request('bone.isJointControlInfo', { info });\nexport const classifyAuAsJointControl = (profile: Types.Profile, auId: number, options: { boneName?: string | null; nodeKey?: string | null } = {}): Types.Profile => request('bone.classifyJointControl', { profile, auId, boneName: options.boneName, nodeKey: options.nodeKey });\nexport const resolveContinuumDisplayLabel = (profile: Pick<Types.Profile, 'continuumPairs' | 'continuumLabels' | 'auInfo' | 'boneNodes' | 'bonePrefix' | 'boneSuffix'>, negativeAuId: number, positiveAuId: number): string => request<string | null>('bone.resolveContinuumLabel', { profile, negativeAuId, positiveAuId }) ?? `AU ${negativeAuId} <-> AU ${positiveAuId}`;\n\nfunction inspectModel(model: Object3D, meshes?: Mesh[], profile?: Types.Profile) {\n return new ThreeModelInspector().inspectModel(model, { meshes, profile });\n}\n\nexport function extractModelData(model: Object3D, meshes?: Mesh[], animations: AnimationClip[] = []): Types.ModelData {\n const inspection = inspectModel(model, meshes);\n return JSON.parse(requireInitializedEmbodyCore().extract_model_data_json(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection))));\n}\nexport async function analyzeModel(options: {\n source: { type: 'gltf'; gltf: GLTF } | { type: 'runtime'; model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[] };\n preset?: Types.Profile; suggestCorrections?: boolean;\n}): Promise<Types.ModelAnalysisReport> {\n const source = options.source;\n const model = source.type === 'gltf' ? source.gltf.scene ?? source.gltf.scenes[0] : source.model;\n const animations = source.type === 'gltf' ? source.gltf.animations : source.animations ?? [];\n const inspection = inspectModel(model, source.type === 'runtime' ? source.meshes : undefined);\n return JSON.parse(requireInitializedEmbodyCore().analyze_model_descriptor(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection)), options.preset ? json(options.preset) : '', json({ suggestCorrections: Boolean(options.suggestCorrections) })));\n}\ntype ValidationMesh = { name?: string; morphTargetDictionary?: Record<string, number>; geometry?: { morphTargetDictionary?: Record<string, number> } };\nexport function validateMappings(meshes: unknown[], skeleton: unknown, profile: Partial<Types.Profile>, options: Record<string, unknown> = {}): Types.ValidationResult {\n let nextMorphId = 1;\n const morphTargets: Array<{ id: number; meshId: number; name: string; hostIndex: number }> = [];\n const descriptorMeshes = (meshes ?? []).map((value, index) => {\n const mesh = value as ValidationMesh;\n const id = index + 1;\n const morphTargetIds = Object.entries(mesh.morphTargetDictionary ?? mesh.geometry?.morphTargetDictionary ?? {}).map(([name, hostIndex]) => {\n const morphId = nextMorphId++;\n morphTargets.push({ id: morphId, meshId: id, name, hostIndex });\n return morphId;\n });\n return { id, name: mesh.name ?? '', morphTargetIds, visible: true };\n });\n const bones = ((skeleton as { bones?: Array<string | { name?: string }> } | null)?.bones ?? []).map((bone, index) => ({ id: index + 1, name: typeof bone === 'string' ? bone : bone.name ?? '' }));\n return JSON.parse(requireInitializedEmbodyCore().validate_profile_model(json(profile), json({ meshes: descriptorMeshes, morphTargets, bones, objects: [] }), json(options)));\n}\nexport function validateHumanoidCharacterization(model: Object3D, profile: Types.Profile): Types.HumanoidCharacterizationResolution {\n return JSON.parse(requireInitializedEmbodyCore().validate_humanoid_characterization(json(profile), json(inspectModel(model, undefined, profile).descriptor)));\n}\nexport function normalizeHairColorAppearance(value: Types.HairColorAppearance | string, fallback: Types.HairColorAppearance = DEFAULT_HAIR_COLOR_APPEARANCE): Types.HairColorAppearance {\n return JSON.parse(requireInitializedEmbodyCore().normalize_hair_color_appearance_json(json(value), json(fallback)));\n}\nexport const getHumanoidSkeletonTemplate = (id: string): Types.HumanoidSkeletonTemplate | null => (HUMANOID_SKELETON_TEMPLATES.find(template => template.id === id) ?? null) as unknown as Types.HumanoidSkeletonTemplate | null;\nexport function getHumanoidSkeletonTemplateBoneNames(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): string[] {\n return JSON.parse(requireInitializedEmbodyCore().humanoid_skeleton_template_bone_names(json(template)));\n}\nexport function createValidationSkeletonFromHumanoidTemplate(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): { bones: Array<{ name: string }> } {\n return JSON.parse(requireInitializedEmbodyCore().create_validation_skeleton_json(json(template)));\n}\nexport function computeHumanoidSkeletonTemplateRestBounds(template: Types.HumanoidSkeletonTemplate): Types.HumanoidSkeletonTemplateBounds {\n return Array.from(requireInitializedEmbodyCore().compute_humanoid_skeleton_template_rest_bounds(json(template))) as unknown as Types.HumanoidSkeletonTemplateBounds;\n}\nexport function extractHumanoidSkeletonTemplateFromModel(model: Object3D, options: { id: string; sourceCharacterId: string; sourceAsset?: string; sourceSkinName?: string }): Types.HumanoidSkeletonTemplate {\n return JSON.parse(requireInitializedEmbodyCore().extract_humanoid_skeleton_template_json(json(inspectModel(model).descriptor), json(options)));\n}\n\nexport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\n","import { Matrix4, Quaternion, Vector3 } from 'three';\nimport type { Object3D } from 'three';\n\ntype ReferenceVector3 = Readonly<{ x: number; y: number; z: number }>;\ntype ReferenceQuaternion = Readonly<{ x: number; y: number; z: number; w: number }>;\n\nexport type ThreeReferencePoseNode = Readonly<{\n /** Child-index path relative to the captured model. The model itself has path ''. */\n path: string;\n parentPath: string | null;\n name: string;\n type: string;\n isBone: boolean;\n rotationOrder: Object3D['rotation']['order'];\n /** Authored Euler values for automatic TRS, including rotations beyond one turn. */\n rotationEuler?: ReferenceVector3;\n childCount: number;\n /** For manual matrices, this is a decomposition; matrices remain authoritative for shear. */\n transform: Readonly<{\n position: ReferenceVector3;\n rotation: ReferenceQuaternion;\n scale: ReferenceVector3;\n }>;\n /** Column-major local and world matrices, including shear and non-bone ancestors. */\n localMatrix: readonly number[];\n worldMatrix: readonly number[];\n worldPosition: ReferenceVector3;\n /** Optional morph baseline captured independently from later live influences. */\n morphInfluences?: readonly number[];\n}>;\n\nexport type ThreeModelReferencePose = Readonly<{\n version: 1;\n /** Captured transform above the model root; identity for an unparented model. */\n parentWorldMatrix: readonly number[];\n nodes: readonly ThreeReferencePoseNode[];\n}>;\n\nconst isBone = (object: Object3D) => !!((object as Object3D & { isBone?: boolean }).isBone || object.type === 'Bone');\n\nconst finite = (values: readonly number[], description: string) => {\n if (!values.every(Number.isFinite)) {\n throw new Error(`Cannot capture reference pose: ${description} contains non-finite values`);\n }\n};\n\nconst matrixValues = (matrix: Matrix4, description: string): readonly number[] => {\n const values = matrix.elements.slice();\n finite(values, description);\n return Object.freeze(values);\n};\n\nconst localMatrix = (object: Object3D) => object.matrixAutoUpdate\n ? new Matrix4().compose(object.position, object.quaternion, object.scale)\n : object.matrix.clone();\n\nconst referenceTransform = (object: Object3D, matrix: Matrix4): ThreeReferencePoseNode['transform'] => {\n // Manual matrices can contain shear that TRS cannot represent exactly. Retain the\n // original matrix independently and expose a decomposition only for TRS consumers.\n const position = object.matrixAutoUpdate ? object.position : new Vector3();\n const rotation = object.matrixAutoUpdate ? object.quaternion : new Quaternion();\n const scale = object.matrixAutoUpdate ? object.scale : new Vector3();\n if (!object.matrixAutoUpdate) {\n // r184 substitutes identity TRS for singular matrices. Keep rejecting a\n // missing basis axis instead of inventing its authored rotation and scale.\n const elements = matrix.elements;\n if ([0, 4, 8].some((start) => Math.hypot(elements[start], elements[start + 1], elements[start + 2]) === 0)) {\n throw new Error(`Cannot capture reference pose: manual transform for ${JSON.stringify(object.name)} has a zero-length basis axis`);\n }\n matrix.decompose(position, rotation, scale);\n }\n finite([...position.toArray(), ...rotation.toArray(), ...scale.toArray()], `transform for ${JSON.stringify(object.name)}`);\n return Object.freeze({\n position: Object.freeze({ x: position.x, y: position.y, z: position.z }),\n rotation: Object.freeze({ x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }),\n scale: Object.freeze({ x: scale.x, y: scale.y, z: scale.z }),\n });\n};\n\nconst captureSubtree = (\n object: Object3D,\n path: string,\n parentPath: string | null,\n parentMatrix: Matrix4,\n nodes: ThreeReferencePoseNode[],\n) => {\n const local = localMatrix(object);\n const localValues = matrixValues(local, `local matrix at ${JSON.stringify(path)}`);\n const world = new Matrix4().multiplyMatrices(parentMatrix, local);\n const worldValues = matrixValues(world, `world matrix at ${JSON.stringify(path)}`);\n const influences = (object as Object3D & { morphTargetInfluences?: readonly number[] }).morphTargetInfluences;\n const morphInfluences = influences === undefined ? undefined : Array.from(influences);\n if (morphInfluences) finite(morphInfluences, `morph influences at ${JSON.stringify(path)}`);\n const rotationEuler = object.matrixAutoUpdate\n ? { x: object.rotation.x, y: object.rotation.y, z: object.rotation.z }\n : undefined;\n if (rotationEuler) finite(Object.values(rotationEuler), `Euler rotation at ${JSON.stringify(path)}`);\n nodes.push(Object.freeze({\n path,\n parentPath,\n name: object.name,\n type: object.type,\n isBone: isBone(object),\n rotationOrder: object.rotation.order,\n ...(rotationEuler ? { rotationEuler: Object.freeze(rotationEuler) } : {}),\n childCount: object.children.length,\n transform: referenceTransform(object, local),\n localMatrix: localValues,\n worldMatrix: worldValues,\n worldPosition: Object.freeze({ x: worldValues[12], y: worldValues[13], z: worldValues[14] }),\n ...(morphInfluences ? { morphInfluences: Object.freeze(morphInfluences) } : {}),\n }));\n object.children.forEach((child, index) => captureSubtree(child, `${path}/${index}`, path, world, nodes));\n};\n\nconst matchesNode = (object: Object3D, node: ThreeReferencePoseNode | undefined, path: string, parentPath: string | null) =>\n node !== undefined\n && node.path === path\n && node.parentPath === parentPath\n && node.name === object.name\n && node.type === object.type\n && node.isBone === isBone(object);\n\nconst incompatible = (object: Object3D, path: string) =>\n new Error(`Incompatible reference pose hierarchy at ${JSON.stringify(path)} (${JSON.stringify(object.name)})`);\n\n/**\n * Explicitly capture the authored reference pose before starting animation.\n * This does not infer a skin bind pose or animation frame zero: it snapshots the\n * transforms supplied by the caller, without updating or otherwise mutating the scene.\n * World matrices are calculated from the full ancestor chain's local transforms,\n * not potentially stale matrixWorld values. All returned data is deeply frozen and\n * JSON-serializable; no object, UUID, or live transform references are retained.\n * Existing morph influences are copied as an optional baseline. Non-finite data\n * or manual matrices with a zero-length basis axis/non-finite TRS decomposition throw.\n */\nexport function captureModelReferencePose(model: Object3D): ThreeModelReferencePose {\n const ancestors: Object3D[] = [];\n for (let ancestor = model.parent; ancestor; ancestor = ancestor.parent) ancestors.push(ancestor);\n const parentWorld = new Matrix4();\n for (const ancestor of ancestors.reverse()) parentWorld.multiply(localMatrix(ancestor));\n const parentWorldMatrix = matrixValues(parentWorld, 'parent world matrix');\n const nodes: ThreeReferencePoseNode[] = [];\n\n captureSubtree(model, '', null, parentWorld, nodes);\n return Object.freeze({ version: 1, parentWorldMatrix, nodes: Object.freeze(nodes) });\n}\n\n/**\n * Explicitly extend a reference after appending children, such as a generated\n * skeleton. Existing structural paths, names, kinds and child order must match;\n * removing or inserting before an existing child is incompatible. Existing\n * captured data remains unchanged except child counts. Newly appended subtrees\n * use their current local transforms beneath the CAPTURED parent world matrix,\n * so playback and later scene placement never become the old rig's reference.\n * Returns a new deeply frozen snapshot without mutating the model or previous\n * data. Identical sibling swaps cannot be distinguished by structural identity.\n */\nexport function extendModelReferencePose(\n model: Object3D,\n previous: ThreeModelReferencePose,\n): ThreeModelReferencePose {\n if (previous.version !== 1) throw new Error('Unsupported model reference pose version');\n const nodes: ThreeReferencePoseNode[] = [];\n let index = 0;\n const extend = (object: Object3D, path: string, parentPath: string | null) => {\n const node = previous.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || object.children.length < node.childCount) {\n throw incompatible(object, path);\n }\n // Copy even a deserialized snapshot into frozen data; never freeze or mutate\n // the caller's input, or reuse any current transform/morph values here.\n nodes.push(Object.freeze({\n ...node,\n childCount: object.children.length,\n transform: Object.freeze({\n position: Object.freeze({ ...node.transform.position }),\n rotation: Object.freeze({ ...node.transform.rotation }),\n scale: Object.freeze({ ...node.transform.scale }),\n }),\n localMatrix: Object.freeze([...node.localMatrix]),\n worldMatrix: Object.freeze([...node.worldMatrix]),\n worldPosition: Object.freeze({ ...node.worldPosition }),\n ...(node.rotationEuler ? { rotationEuler: Object.freeze({ ...node.rotationEuler }) } : {}),\n ...(node.morphInfluences ? { morphInfluences: Object.freeze([...node.morphInfluences]) } : {}),\n }));\n for (let childIndex = 0; childIndex < node.childCount; childIndex += 1) {\n extend(object.children[childIndex], `${path}/${childIndex}`, path);\n }\n const parentWorld = new Matrix4().fromArray(node.worldMatrix);\n for (let childIndex = node.childCount; childIndex < object.children.length; childIndex += 1) {\n captureSubtree(object.children[childIndex], `${path}/${childIndex}`, path, parentWorld, nodes);\n }\n };\n extend(model, '', null);\n if (index !== previous.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return Object.freeze({\n version: 1,\n parentWorldMatrix: Object.freeze([...previous.parentWorldMatrix]),\n nodes: Object.freeze(nodes),\n });\n}\n\n/**\n * Resolve captured data against an identically structured model, including a fresh\n * clone/load with new UUIDs. Names, types, bone flags, and child ordering must match;\n * duplicate names are distinguished by structural path, never name lookup.\n * Current transforms and the model's external scene parent are deliberately ignored.\n * An incompatible hierarchy throws before a binding map is returned.\n */\nexport function bindModelReferencePose(\n model: Object3D,\n referencePose: ThreeModelReferencePose,\n): ReadonlyMap<Object3D, ThreeReferencePoseNode> {\n if (referencePose.version !== 1) throw new Error('Unsupported model reference pose version');\n const bindings = new Map<Object3D, ThreeReferencePoseNode>();\n let index = 0;\n const bind = (object: Object3D, path: string, parentPath: string | null) => {\n const node = referencePose.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || node.childCount !== object.children.length) {\n throw incompatible(object, path);\n }\n bindings.set(object, node);\n object.children.forEach((child, childIndex) => bind(child, `${path}/${childIndex}`, path));\n };\n bind(model, '', null);\n if (index !== referencePose.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return bindings;\n}\n","import { PropertyBinding } from 'three';\nimport type { AnimationClip, KeyframeTrack } from 'three';\nimport type { ClipIRTrack, ThreeModelInspection } from './index';\n\n/**\n * Packed morphs must share PropertyMixers with indexed compiled tracks. Euler\n * components avoid Euler.fromArray's incompatible mixer-buffer offset/order.\n */\nexport function withComponentTracks(clip: AnimationClip): AnimationClip {\n let expanded = false;\n const tracks = clip.tracks.flatMap((track) => {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const euler = parsed.propertyName === 'rotation';\n if ((!euler && !['morphTargetInfluences', 'weights'].includes(parsed.propertyName)) || parsed.propertyIndex !== undefined) return [track];\n const cubic = (track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const parts = cubic ? 3 : 1;\n const width = track.getValueSize() / parts;\n if (!Number.isInteger(width) || width < 1 || (euler && width !== 3)) throw new Error(`Invalid component track ${JSON.stringify(track.name)}.`);\n expanded = true;\n return Array.from({ length: width }, (_, component) => {\n const scalar = track.clone();\n scalar.name = `${track.name}[${euler ? ['x', 'y', 'z'][component] : component}]`;\n // Keep tangent/value/tangent storage and the native interpolation factory.\n scalar.values = track.values.slice(0, track.times.length * parts);\n for (let sample = 0; sample < scalar.values.length; sample += 1) scalar.values[sample] = track.values[sample * width + component];\n return scalar;\n });\n });\n if (!expanded) return clip;\n const indexed = clip.clone();\n indexed.tracks = tracks;\n return indexed;\n}\n\n/** One PropertyMixer cache key for every concrete renderer destination. */\nexport function concreteTrackName(target: ClipIRTrack['target'] | undefined, inspection: ThreeModelInspection): string | undefined {\n if (!target) return undefined;\n if (target.kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(target.morphTargetId));\n return binding && `${binding.mesh.uuid}.morphTargetInfluences[${binding.index}]`;\n }\n if (target.kind === 'boneTransform' || target.kind === 'objectTransform') {\n const object = target.kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(target.boneId))\n : inspection.objectBindings.get(Number(target.objectId));\n const property = target.property ?? 'rotation';\n if (!object) return undefined;\n if (property === 'rotation' || property === 'quaternion') return `${object.uuid}.quaternion`;\n if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') return `${object.uuid}.rotation[${property.slice(-1).toLowerCase()}]`;\n if (property === 'position' || property === 'scale') return `${object.uuid}.${property}`;\n }\n if (target.kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(target.meshId));\n return mesh && `${mesh.uuid}.visible`;\n }\n return undefined;\n}\n\n/** Retain authored samples and interpolants; normalize only cloned binding names. */\nexport function cloneWithConcreteTrackNames(clip: AnimationClip, tracks: readonly ClipIRTrack[], inspection: ThreeModelInspection): AnimationClip {\n const native = clip.clone();\n for (let index = 0; index < tracks.length; index += 1) {\n const name = concreteTrackName(tracks[index].target, inspection);\n if (!name) throw new Error('Every native playback track must resolve on the bound model.');\n native.tracks[index].name = name;\n }\n return native;\n}\n","import {\n AdditiveAnimationBlendMode,\n AnimationMixer,\n LoopOnce,\n LoopPingPong,\n LoopRepeat,\n NormalAnimationBlendMode,\n} from 'three';\nimport type { AnimationAction, AnimationClip, KeyframeTrack, Object3D } from 'three';\nimport type { NativePlaybackSession } from '../wasm/index';\nimport { createAnimationClipFromClipIR, serializeAnimationClips } from './index';\nimport type { ClipIR, ThreeModelInspection } from './index';\nimport { bindPlaybackRendering } from './playbackRendering';\nimport { cloneWithConcreteTrackNames, withComponentTracks } from './clipBindings';\n\nexport type ThreeNativeLoop = { mode: 'once' | 'repeat' | 'pingPong'; count?: number | null };\nexport type ThreeNativePlaybackOptions = {\n replace?: string;\n startSeconds?: number;\n speed?: number;\n /** Native contribution only; semantic intensity belongs in the compiled clip. */\n weight?: number;\n blendMode?: 'normal' | 'additive';\n loop?: ThreeNativeLoop;\n finalPose?: 'release' | 'hold';\n};\nexport type ThreeNativePlaybackControl =\n | { type: 'pause' | 'resume' | 'stop' }\n | { type: 'seek'; seconds: number }\n | { type: 'setSpeed'; speed: number }\n | { type: 'setWeight'; weight: number }\n | { type: 'setBlendMode'; blendMode: 'normal' | 'additive' }\n | { type: 'setLoop'; loop: ThreeNativeLoop }\n | { type: 'setFinalPose'; finalPose: 'release' | 'hold' }\n | { type: 'fadeIn' | 'fadeOut'; seconds: number };\nexport type ThreeNativePlaybackEvent =\n | { type: 'completed'; handle: string }\n | { type: 'cancelled'; handle: string; reason: string }\n | { type: 'error'; handle: string; message: string };\nexport type ThreeNativePlaybackBinding = {\n model: Object3D;\n inspection: ThreeModelInspection;\n /** Optional existing native mixer. Otherwise the connector owns one. */\n mixer?: AnimationMixer;\n};\ntype BoundPlayback = ThreeNativePlaybackBinding & { mixer: AnimationMixer };\n\ntype Settings = Required<Omit<ThreeNativePlaybackOptions, 'replace'>>;\ntype Command =\n | { type: 'play'; handle: string; clip: ClipIR; settings: Settings }\n | { type: 'replaceClip'; handle: string; clip: ClipIR }\n | { type: 'control'; handle: string; control: ThreeNativePlaybackControl }\n | { type: 'release'; handle: string };\ntype Batch = { handle?: string; commands: Command[]; events: ThreeNativePlaybackEvent[] };\ntype NativeNotification = { type: 'completed' | 'cancelled' | 'error'; handle: string; message?: string };\ntype PausedFade = { seconds: number; from: number; to: number; weight: number };\ntype Resource = { clip: AnimationClip; action?: AnimationAction; binding: BoundPlayback; fadingOut?: boolean; pausedFade?: PausedFade; explicitlyPaused?: boolean; suspendedPaused?: boolean };\ntype PendingBatch = { batch: Batch; nextCommand: number; clip?: AnimationClip; afterCommands?: () => void };\ntype NativeInterpolant = { resultBuffer: unknown; settings?: unknown; valueSize: number };\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((buffer: unknown) => NativeInterpolant) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\ntype FadeInterpolant = { parameterPositions: ArrayLike<number>; sampleValues: { [index: number]: number }; evaluate(time: number): ArrayLike<number> };\ntype EditableAction = AnimationAction & { _interpolants: NativeInterpolant[]; _interpolantSettings: unknown; _weightInterpolant: FadeInterpolant | null };\nconst sampleSize = (track: KeyframeTrack) => track.getValueSize() / ((track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ? 3 : 1);\n\nconst asError = (error: unknown): Error => error instanceof Error ? error : new Error(String(error));\nconst blendMode = (mode: 'normal' | 'additive') => mode === 'additive' ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\nconst loopMode = (mode: ThreeNativeLoop['mode']) => mode === 'once' ? LoopOnce : mode === 'repeat' ? LoopRepeat : LoopPingPong;\n\nfunction validateBinding(binding: ThreeNativePlaybackBinding): void {\n if (!binding.model?.isObject3D || (binding.mixer && binding.mixer.getRoot() !== binding.model)) {\n throw new Error('Native playback requires a Three model and its render integration mixer.');\n }\n const objects = new Set<Object3D>();\n binding.model.traverse((object) => objects.add(object));\n const { inspection } = binding;\n for (const object of [\n ...inspection.meshBindings.values(), ...inspection.boneBindings.values(),\n ...inspection.objectBindings.values(), ...Array.from(inspection.morphBindings.values(), (entry) => entry.mesh),\n ]) {\n if (!objects.has(object)) throw new Error('Native playback inspection contains an object outside the bound model.');\n }\n}\n\n/**\n * Execute validated Rust commands on the native mixer. There is no\n * clock or update API. Each play owns a unique clip/action; other mixer users\n * remain untouched by stop, replacement, rebind and disposal.\n *\n * The connector owns the supplied Wasm session and frees it after successful\n * disposal. A failed release retains ownership and can be retried by dispose.\n */\nexport class ThreeNativePlaybackConnector {\n private binding: BoundPlayback;\n private rendering: ReturnType<typeof bindPlaybackRendering>;\n private renderingEnabled = true;\n private readonly resources = new Map<string, Resource>();\n private readonly actionHandles = new Map<AnimationAction, string>();\n private readonly listeners = new Set<(event: ThreeNativePlaybackEvent) => void>();\n private readonly pending: PendingBatch[] = [];\n private readonly notifications: NativeNotification[] = [];\n private depth = 0;\n private flushingNotifications = false;\n private notificationScheduled = false;\n private sessionDisposed = false;\n private disposed = false;\n private readonly onError?: (error: Error) => void;\n private readonly onRelease?: (handle: string) => void;\n\n constructor(\n private readonly session: NativePlaybackSession,\n binding: ThreeNativePlaybackBinding & { onError?: (error: Error) => void; onRelease?: (handle: string) => void },\n ) {\n validateBinding(binding);\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.onError = binding.onError;\n this.onRelease = binding.onRelease;\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n }\n\n /** Prepare bindings first; old actions are released before the new binding is exposed. */\n rebind(modelKey: string, profileKey: string, binding: ThreeNativePlaybackBinding = this.binding): void {\n validateBinding(binding);\n this.beforeOperation();\n this.dispatch(this.session.rebind(modelKey, profileKey), undefined, () => {\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n this.rendering.setEnabled(this.renderingEnabled);\n });\n }\n\n play(clip: ClipIR, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n const native = createAnimationClipFromClipIR(clip, this.binding.inspection);\n if (native.tracks.length !== clip.tracks.length) {\n throw new Error('Every playback track must resolve on the bound model.');\n }\n return this.dispatch(this.session.play(JSON.stringify(clip), JSON.stringify(options)), native).handle!;\n }\n\n /**\n * Validate native track bindings through the existing serializer, then retain\n * the native clone's interpolants and authored/additive sample values. Concrete\n * binding names match compiled tracks so Three shares their PropertyMixer.\n */\n playNativeClip(clip: AnimationClip, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) {\n throw new Error('Every native playback track must serialize against the bound model.');\n }\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n const settings = {\n ...options,\n blendMode: options.blendMode ?? (clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal'),\n };\n return this.dispatch(this.session.play(JSON.stringify(ir), JSON.stringify(settings)), native).handle!;\n }\n\n control(handle: string, control: ThreeNativePlaybackControl): void {\n this.beforeOperation();\n this.dispatch(this.session.control(handle, JSON.stringify(control)));\n }\n\n setRendering(enabled: boolean): void {\n this.beforeOperation();\n if (enabled === this.renderingEnabled) return;\n this.renderingEnabled = enabled;\n this.rendering.setEnabled(enabled);\n for (const resource of this.resources.values()) {\n if (!resource.action) continue;\n if (!enabled) {\n resource.suspendedPaused = resource.action.paused;\n this.pauseFade(resource);\n resource.action.paused = true;\n } else if (resource.suspendedPaused !== undefined) {\n resource.action.paused = resource.suspendedPaused;\n if (!resource.explicitlyPaused) this.resumeFade(resource);\n resource.suspendedPaused = undefined;\n }\n }\n }\n\n setTimeScale(value: number): void {\n this.beforeOperation();\n if (!Number.isFinite(value)) throw new Error('Native mixer speed must be finite.');\n this.binding.mixer.timeScale = value;\n }\n\n fadeIn(handle: string, seconds: number): void { this.control(handle, { type: 'fadeIn', seconds }); }\n fadeOut(handle: string, seconds: number): void { this.control(handle, { type: 'fadeOut', seconds }); }\n\n /** Edit authored samples, retaining the native action and its loop/fade progress. */\n replaceClip(handle: string, clip: AnimationClip): void {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const resource = this.resources.get(handle);\n if (!resource) throw new Error('Unknown, foreign or stale playback handle.');\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) throw new Error('Every edited track must resolve on the bound model.');\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n if (native.tracks.length !== resource.clip.tracks.length || native.tracks.some((track, index) => {\n const old = resource.clip.tracks[index];\n return track.name !== old.name || track.ValueTypeName !== old.ValueTypeName || sampleSize(track) !== sampleSize(old);\n })) throw new Error('Editing samples must preserve track bindings; play a new clip to change its bindings.');\n const editable = resource.action as EditableAction | undefined;\n if (!editable || !Array.isArray(editable._interpolants) || editable._interpolants.length !== native.tracks.length) {\n throw new Error('This Three version does not support editing native action samples.');\n }\n this.dispatch(this.session.replace_clip(handle, JSON.stringify(ir)), native);\n }\n\n /** Native state for the owning adapter; never exposed through Polymer. */\n getAction(handle: string): AnimationAction | undefined {\n return this.resources.get(handle)?.action;\n }\n\n /** Deliver native completion after the borrowed mixer has finished sampling. */\n flushEvents(): void {\n if (this.disposed) return;\n this.notificationScheduled = false;\n for (const [handle, resource] of this.resources) {\n // Three evaluates fade weights on its mixer clock. Observe completion;\n // do not calculate a deadline or interpolate another weight here.\n if (resource.fadingOut && resource.action?.getEffectiveWeight() === 0) {\n resource.fadingOut = false;\n this.notifications.push({ type: 'cancelled', handle });\n }\n }\n this.flushNotifications();\n }\n\n subscribe(listener: (event: ThreeNativePlaybackEvent) => void): () => void {\n if (this.disposed) throw new Error('Native playback connector is disposed.');\n this.listeners.add(listener);\n return () => { this.listeners.delete(listener); };\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.retryPending();\n if (!this.sessionDisposed) {\n const batch = this.session.dispose();\n this.sessionDisposed = true;\n this.dispatch(batch);\n }\n // A failed release throws above, leaving listeners, resources and session\n // owned until a later dispose successfully retries the remaining effects.\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.notifications.length = 0;\n this.listeners.clear();\n this.session.free();\n this.disposed = true;\n }\n\n private pauseFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = action?._weightInterpolant;\n if (!action || !fade) return;\n // Preserve Three's own fade segment. Mixer time remains its only clock.\n resource.pausedFade = {\n seconds: Math.max(0, fade.parameterPositions[1] - resource.binding.mixer.time),\n from: fade.evaluate(resource.binding.mixer.time)[0], to: fade.sampleValues[1], weight: action.weight,\n };\n action.stopFading();\n action.setEffectiveWeight(resource.pausedFade.weight * resource.pausedFade.from);\n }\n\n private resumeFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = resource.pausedFade;\n if (!action || !fade) return;\n resource.pausedFade = undefined;\n action.setEffectiveWeight(fade.weight);\n action.fadeIn(fade.seconds);\n const interpolant = action._weightInterpolant!;\n interpolant.sampleValues[0] = fade.from;\n interpolant.sampleValues[1] = fade.to;\n }\n\n private beforeOperation(): void {\n if (this.disposed || this.sessionDisposed) throw new Error('Native playback connector is disposed.');\n this.retryPending();\n }\n\n private retryPending(): void {\n if (this.pending.length) this.drain();\n }\n\n private dispatch(serialized: string, clip?: AnimationClip, afterCommands?: () => void): Batch {\n const batch = JSON.parse(serialized) as Batch;\n this.pending.push({ batch, nextCommand: 0, clip, afterCommands });\n this.drain();\n return batch;\n }\n\n private drain(): void {\n const errors: Error[] = [];\n this.depth += 1;\n try {\n while (this.pending.length) {\n const pending = this.pending[0];\n while (pending.nextCommand < pending.batch.commands.length) {\n const command = pending.batch.commands[pending.nextCommand];\n try {\n this.execute(command, pending.clip);\n } catch (error) {\n // A release failure cannot be represented by a late terminal event.\n // Keep this command and its undelivered events available for retry.\n if (command.type === 'release') throw asError(error);\n const failure = asError(error);\n errors.push(failure);\n this.notifications.push({ type: 'error', handle: command.handle, message: failure.message || 'Native operation failed.' });\n }\n pending.nextCommand += 1;\n }\n pending.afterCommands?.();\n this.pending.shift();\n // Commands have finished before any observer may reenter playback.\n for (const event of pending.batch.events) {\n for (const listener of [...this.listeners]) {\n // An observer failure must not make a successful play look like an\n // allocation failure to its caller and orphan the new handle.\n try { listener(event); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n }\n }\n }\n } finally {\n this.depth -= 1;\n }\n if (this.depth === 0 && !this.flushingNotifications) this.flushNotifications();\n if (errors.length) throw errors[0];\n }\n\n private execute(command: Command, preparedClip?: AnimationClip): void {\n if (command.type === 'release') {\n const resource = this.resources.get(command.handle);\n if (!resource) return;\n resource.action?.stop();\n resource.binding.mixer.uncacheAction(resource.clip, resource.binding.model);\n resource.binding.mixer.uncacheClip(resource.clip);\n if (resource.action) this.actionHandles.delete(resource.action);\n this.resources.delete(command.handle);\n // Releasing a completed held pose is not a second terminal event. The\n // owning facade still needs to retire its resource bookkeeping.\n try { this.onRelease?.(command.handle); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n return;\n }\n if (command.type === 'replaceClip') {\n const resource = this.resources.get(command.handle);\n if (!resource || !preparedClip) throw new Error('Native clip edit has no owned resource.');\n // Three has no public action sample-edit method. Keep this adapter access\n // isolated: rebuild native interpolants with the existing PropertyMixer\n // result buffers, without reading or changing time, loop counters or fades.\n const action = resource.action as EditableAction;\n const tracks = preparedClip.tracks.map((track) => track.clone());\n const interpolants = tracks.map((track, index) => {\n const interpolant = (track as NativeTrack).createInterpolant(action._interpolants[index].resultBuffer);\n if (interpolant.settings) Object.assign(action._interpolantSettings as object, interpolant.settings);\n interpolant.settings = action._interpolantSettings;\n return interpolant;\n });\n resource.clip.tracks = tracks;\n action._interpolants = interpolants;\n return;\n }\n if (command.type === 'play') {\n if (!preparedClip) throw new Error('Native playback has no prepared clip.');\n const resource: Resource = { clip: preparedClip, binding: this.binding };\n this.resources.set(command.handle, resource);\n const settings = command.settings;\n const action = this.binding.mixer.clipAction(preparedClip, this.binding.model, blendMode(settings.blendMode));\n resource.action = action;\n this.actionHandles.set(action, command.handle);\n action.setLoop(loopMode(settings.loop.mode), settings.loop.count ?? Infinity);\n action.clampWhenFinished = settings.finalPose === 'hold';\n action.setEffectiveTimeScale(settings.speed);\n action.setEffectiveWeight(settings.weight);\n action.time = settings.startSeconds;\n if (!this.renderingEnabled) { resource.suspendedPaused = false; action.paused = true; }\n action.play();\n return;\n }\n const resource = this.resources.get(command.handle);\n const action = resource?.action;\n if (!resource || !action) throw new Error('Native playback action is unavailable.');\n const control = command.control;\n switch (control.type) {\n case 'pause':\n resource.explicitlyPaused = true;\n this.pauseFade(resource);\n action.paused = true;\n if (!this.renderingEnabled) this.resources.get(command.handle)!.suspendedPaused = true;\n break;\n case 'resume':\n resource.explicitlyPaused = false;\n if (this.renderingEnabled) { action.paused = false; this.resumeFade(resource); }\n else this.resources.get(command.handle)!.suspendedPaused = false;\n break;\n case 'seek': action.time = control.seconds; break;\n case 'setSpeed': action.setEffectiveTimeScale(control.speed); break;\n case 'setWeight':\n resource.pausedFade = undefined;\n action.setEffectiveWeight(control.weight);\n this.resources.get(command.handle)!.fadingOut = false;\n break;\n case 'setBlendMode': action.blendMode = blendMode(control.blendMode); break;\n case 'setLoop': action.setLoop(loopMode(control.loop.mode), control.loop.count ?? Infinity); break;\n case 'setFinalPose': action.clampWhenFinished = control.finalPose === 'hold'; break;\n case 'fadeIn':\n resource.pausedFade = undefined;\n action.fadeIn(control.seconds); resource.fadingOut = false;\n if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource);\n break;\n case 'fadeOut':\n resource.pausedFade = undefined;\n if (control.seconds === 0) this.notifications.push({ type: 'cancelled', handle: command.handle });\n else { action.fadeOut(control.seconds); resource.fadingOut = true; if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource); }\n break;\n case 'stop': throw new Error('Rust must translate stop into a resource release.');\n }\n }\n\n private readonly finished = (event: { action: AnimationAction }): void => {\n const handle = this.actionHandles.get(event.action);\n if (!handle || this.disposed) return;\n this.notifications.push({ type: this.resources.get(handle)?.fadingOut ? 'cancelled' : 'completed', handle });\n // Three dispatches finished while iterating its active action arrays.\n // Releasing/uncaching an action there would mutate that iteration.\n if (this.notificationScheduled) return;\n this.notificationScheduled = true;\n queueMicrotask(() => {\n this.notificationScheduled = false;\n if (this.disposed) return;\n try { this.flushNotifications(); } catch (error) {\n const failure = asError(error);\n if (this.onError) this.onError(failure);\n else throw failure;\n }\n });\n };\n\n private flushNotifications(): void {\n if (this.flushingNotifications || this.depth > 0 || this.disposed || this.notificationScheduled) return;\n this.flushingNotifications = true;\n try {\n while (this.notifications.length) {\n const event = this.notifications.shift()!;\n this.dispatch(this.session.notify(JSON.stringify(event)));\n }\n } finally {\n this.flushingNotifications = false;\n }\n }\n}\n","import {\n AdditiveAnimationBlendMode, AnimationClip, AnimationUtils, LoopOnce, LoopPingPong,\n NormalAnimationBlendMode, PropertyBinding, Quaternion, Euler, InterpolateDiscrete, InterpolateLinear,\n} from 'three';\nimport type { KeyframeTrack, Mesh, Object3D } from 'three';\nimport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\nimport { initEmbodyCore, requireInitializedEmbodyCore, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport type { RuntimeCore } from '@lovelace_lol/embody/wasm';\nimport {\n ThreeFrameApplier, ThreeModelInspector, createAnimationClipFromClipIR,\n serializeAnimationClips,\n} from './index';\nimport type { ClipIR, ClipIRTrack, ThreeModelInspection } from './index';\nimport {\n bindModelReferencePose, captureModelReferencePose, extendModelReferencePose,\n} from './reference-pose';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nimport { ThreeNativePlaybackConnector } from './nativePlayback';\nimport { withComponentTracks } from './clipBindings';\nimport type { ThreeNativePlaybackControl, ThreeNativePlaybackEvent, ThreeNativePlaybackOptions } from './nativePlayback';\n\ntype JsonObject = Record<string, any>;\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((result?: Float32Array) => { evaluate(time: number): ArrayLike<number> }) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\nexport type RustEmbodyHostConfig = {\n profileMode?: 'preset' | 'profile';\n presetId?: string;\n presetType?: string;\n profile?: JsonObject;\n meshes?: Mesh[];\n referencePose?: ThreeModelReferencePose;\n};\nexport type CharacterPlaybackOptions = JsonObject;\nexport type CharacterPlaybackEvent = ThreeNativePlaybackEvent & { actionId: string; clipName: string };\nexport interface CharacterPlaybackHandle {\n readonly name: string;\n actionId?: string;\n promise: Promise<CharacterPlaybackEvent>;\n readonly finished: Promise<CharacterPlaybackEvent>;\n play(): CharacterPlaybackHandle;\n stop(): CharacterPlaybackHandle;\n cancel(): CharacterPlaybackHandle;\n pause(): CharacterPlaybackHandle;\n resume(): CharacterPlaybackHandle;\n setWeight(value: number): CharacterPlaybackHandle;\n setIntensity(value: number): CharacterPlaybackHandle;\n setSpeed(value: number): CharacterPlaybackHandle;\n setPlaybackRate(value: number): CharacterPlaybackHandle;\n setTime(value: number): CharacterPlaybackHandle;\n seek(value: number): CharacterPlaybackHandle;\n updateParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n setParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n subscribe(listener: ((event: CharacterPlaybackEvent) => void) | { next(event: CharacterPlaybackEvent): void }): () => void;\n}\nexport interface CharacterTransitionHandle {\n promise: Promise<void>;\n pause(): void;\n resume(): void;\n cancel(): void;\n}\n\ntype Source =\n | { name: string; kind: 'native'; clip: AnimationClip }\n | { name: string; kind: 'curves' | 'typed'; input: any; options: CharacterPlaybackOptions }\n | { name: string; kind: 'compiled'; clip: ClipIR };\ntype Playback = {\n id: string;\n source: Source;\n options: CharacterPlaybackOptions;\n connector: ThreeNativePlaybackConnector;\n terminal: boolean;\n inheritedStarts: Map<string, number[]>;\n replay(options: CharacterPlaybackOptions): CharacterPlaybackHandle;\n notify(event: CharacterPlaybackEvent): void;\n};\nconst json = (value: unknown): string => JSON.stringify(value ?? {});\nconst targetKey = (target: ClipIRTrack['target']): string => JSON.stringify([target.kind, target.meshId, target.morphTargetId, target.boneId, target.objectId, target.property]);\nconst copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));\nconst parse = <T = any>(value: string): T => JSON.parse(value);\nconst finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);\nconst intensity = (options: CharacterPlaybackOptions, fallback = 1): number => {\n const value = options.intensityScale ?? options.intensity ?? options.weight;\n return finite(value) ? Math.max(0, Math.min(2, value)) : fallback;\n};\nconst presetId = (value?: string): string => value?.trim().toLowerCase() || 'cc4';\n\nexport function supportsRustEmbodyPreset(value?: string): boolean {\n return requireInitializedEmbodyCore().has_preset(presetId(value));\n}\n\n/** Character commands compile in Rust and play exclusively on the native connector. */\nexport class Embody {\n readonly meshes: Mesh[] = [];\n meshByName = new Map<string, Mesh>();\n bones: ThreeModelInspection['bones'] = {};\n private readonly wasm = requireInitializedEmbodyCore();\n private core: RuntimeCore;\n private readonly inspector = new ThreeModelInspector();\n private readonly applier = new ThreeFrameApplier();\n private readonly references = new WeakMap<Object3D, ThreeModelReferencePose>();\n private referenceBindings: ReadonlyMap<Object3D, ThreeReferencePoseNode> = new Map();\n private boundModel?: Object3D;\n get model(): Object3D | undefined { return this.boundModel; }\n private inspection?: ThreeModelInspection;\n private connector?: ThreeNativePlaybackConnector;\n private profile: JsonObject;\n private profileSource: JsonObject;\n private readonly profileMode: 'preset' | 'profile';\n private readonly preset: string;\n private readonly sources = new Map<string, Source>();\n private readonly playbacks = new Map<string, Playback>();\n private readonly current = new Map<string, Playback>();\n private playDepth = 0;\n private readonly pendingEvents: ThreeNativePlaybackEvent[] = [];\n private bindingGeneration = 0;\n private disposed = false;\n private rendering = true;\n private timeScale = 1;\n private nextLiveTarget = 0;\n private readonly liveTargets = new Map<string, { track: ClipIRTrack; handle: CharacterPlaybackHandle; releasing: boolean }>();\n private readonly hairObjects = new Map<string, Mesh>();\n private hairConfig: JsonObject = {};\n private hairAppearance: JsonObject = {\n hairColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n eyebrowColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n showOutline: false, outlineColor: '#000000', outlineOpacity: 1,\n };\n\n constructor(private readonly config: RustEmbodyHostConfig = {}) {\n const mode = config.profileMode ?? 'preset';\n if (mode !== 'profile' && mode !== 'preset') throw new Error(`Unknown profile mode: ${mode}`);\n if (mode === 'profile' && !config.profile) throw new Error('Resolved profile mode requires a profile object.');\n this.profileMode = mode;\n this.preset = presetId(config.presetId ?? config.presetType);\n if (mode === 'preset' && !this.wasm.has_preset(this.preset)) throw new Error(`Unknown Embody preset: ${this.preset}`);\n this.profileSource = this.validateProfile(config.profile ?? {});\n this.profile = this.resolveProfile(this.profileSource);\n this.core = new this.wasm.RuntimeCore(0);\n }\n\n static async create(config: RustEmbodyHostConfig = {}): Promise<Embody> {\n await initEmbodyCore();\n return new Embody(config);\n }\n\n private assertAlive(): void { if (this.disposed) throw new Error('Character is disposed.'); }\n private requireModel(): Object3D {\n this.assertAlive();\n if (!this.boundModel) throw new Error('Bind a character model with onReady before using this operation.');\n return this.boundModel;\n }\n private requireConnector(): ThreeNativePlaybackConnector {\n this.requireModel();\n if (!this.connector) throw new Error('Character playback is not bound.');\n return this.connector;\n }\n private validateProfile(value: JsonObject): JsonObject {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Embody profile must be a JSON object.');\n return copy(value);\n }\n private resolveProfile(value: JsonObject): JsonObject {\n return this.profileMode === 'profile' ? copy(value) : parse(this.wasm.merge_embedded_preset(this.preset, json(value)));\n }\n\n onReady(options: { model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[]; referencePose?: ThreeModelReferencePose }): void {\n this.assertAlive();\n const model = options.model;\n if (!model?.isObject3D) throw new Error('onReady requires a Three Object3D model.');\n const reference = this.references.get(model) ?? options.referencePose ?? (!this.boundModel ? this.config.referencePose : undefined) ?? captureModelReferencePose(model);\n const inspection = this.inspector.inspectModel(model, { meshes: options.meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n if (options.animations) this.loadAnimationClips(options.animations);\n }\n\n private bind(model: Object3D, reference: ThreeModelReferencePose, inspection: ThreeModelInspection, source: JsonObject, profile: JsonObject, preserveLiveState = true): void {\n // Prepare every fallible profile/reference operation before releasing the old binding.\n const referenceBindings = bindModelReferencePose(model, reference);\n // Inspection stays live; release clips need the separately captured baseline.\n const runtimeDescriptor = {\n ...inspection.descriptor,\n morphTargets: inspection.descriptor.morphTargets.map((morph) => {\n const binding = inspection.morphBindings.get(morph.id);\n const baseline = binding && referenceBindings.get(binding.mesh)?.morphInfluences?.[binding.index];\n return { ...morph, initialValue: baseline ?? morph.initialValue };\n }),\n };\n const replacingModel = !!this.boundModel && this.boundModel !== model;\n const core = new this.wasm.RuntimeCore(0);\n try {\n if (this.profileMode === 'profile') core.configure_with_profile(json(source), json(runtimeDescriptor));\n else core.configure_with_preset(this.preset, json(source), json(runtimeDescriptor));\n if (preserveLiveState && this.boundModel) core.copy_live_state_from(this.core);\n for (const registered of replacingModel ? [] : this.sources.values()) {\n if (registered.kind === 'native') {\n const [clip] = serializeAnimationClips(model, [registered.clip], inspection);\n core.register_animation_clip(json(clip), 'baked');\n }\n }\n } catch (error) { core.free(); throw error; }\n try { this.connector?.dispose(); }\n catch (error) { core.free(); throw error; }\n this.core.free();\n this.core = core;\n if (replacingModel) this.sources.clear();\n this.boundModel = model;\n this.inspection = inspection;\n this.referenceBindings = referenceBindings;\n this.references.set(model, reference);\n this.profileSource = source;\n this.profile = profile;\n this.bindingGeneration += 1;\n this.playbacks.clear();\n this.current.clear();\n this.liveTargets.clear();\n this.meshes.splice(0, this.meshes.length, ...(inspection.morphMeshes.length ? inspection.morphMeshes : inspection.allMeshes));\n this.meshByName = inspection.meshByName;\n this.bones = inspection.bones;\n this.applier.setBindings(inspection);\n this.applier.applyMeshMaterialConfigs(model, profile.meshes ?? {});\n const session = new this.wasm.NativePlaybackSession();\n try {\n this.connector = new ThreeNativePlaybackConnector(session, {\n model, inspection,\n onRelease: (id) => {\n const playback = this.playbacks.get(id);\n if (playback?.terminal) this.forget(playback);\n },\n });\n }\n catch (error) { session.free(); throw error; }\n this.connector.rebind(model.uuid, String(this.bindingGeneration));\n this.connector.setRendering(this.rendering);\n this.connector.setTimeScale(this.timeScale);\n this.connector.subscribe((event) => this.onPlaybackEvent(event));\n this.hairConfig = parse(this.core.get_hair_config_json());\n this.registerHairObjects(inspection.allMeshes.filter((mesh) => ['hair', 'eyebrow'].includes(this.meshCategory(mesh))));\n if (preserveLiveState) this.commitLive();\n }\n\n bindModel(meshes?: Mesh[]): void {\n const model = this.requireModel();\n const reference = this.references.get(model)!;\n const inspection = this.inspector.inspectModel(model, { meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n }\n extendReferencePose(): ThreeModelReferencePose {\n const model = this.requireModel();\n const reference = extendModelReferencePose(model, this.references.get(model)!);\n const inspection = this.inspector.inspectModel(model, { profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n return reference;\n }\n setProfile(value: JsonObject): void {\n this.assertAlive();\n const source = this.validateProfile(value);\n const profile = this.resolveProfile(source);\n if (!this.boundModel) { this.profileSource = source; this.profile = profile; return; }\n const reference = this.references.get(this.boundModel)!;\n const inspection = this.inspector.inspectModel(this.boundModel, { profile, referencePose: reference });\n this.bind(this.boundModel, reference, inspection, source, profile, false);\n }\n getProfile(): JsonObject { return this.profile; }\n getProfileMode(): 'preset' | 'profile' { return this.profileMode; }\n getPresetId(): string | null { return this.profileMode === 'preset' ? this.preset : null; }\n supportsPreset(value?: string): boolean { return supportsRustEmbodyPreset(value); }\n\n private onPlaybackEvent(event: ThreeNativePlaybackEvent): void {\n if (this.playDepth) { this.pendingEvents.push(event); return; }\n const playback = this.playbacks.get(event.handle);\n if (!playback) return;\n playback.terminal = true;\n if (!playback.connector.getAction(playback.id)) {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n playback.notify({ ...event, actionId: event.handle, clipName: playback.source.name });\n }\n private compile(source: Source, options: CharacterPlaybackOptions): ClipIR {\n const buildOptions = { ...('options' in source ? source.options : {}), ...options, intensityScale: intensity(options) };\n switch (source.kind) {\n case 'curves': return parse(this.core.build_clip(source.name, json(source.input), json(buildOptions)));\n case 'typed': return parse(this.core.build_typed_clip(source.name, json(source.input), json(buildOptions)));\n case 'compiled': return source.clip;\n case 'native': throw new Error('Native animation sources do not require AU compilation.');\n }\n }\n\n private restValues(track: KeyframeTrack): number[] | undefined {\n const model = this.requireModel();\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(model, parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ??\n skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) return undefined;\n const reference = this.referenceBindings.get(object);\n if (!reference) return undefined;\n switch (parsed.propertyName) {\n case 'quaternion': return Object.values(reference.transform.rotation);\n case 'rotation': {\n const rotation = reference.transform.rotation;\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), reference.rotationOrder);\n const axis = parsed.propertyIndex;\n return axis === 'x' || axis === 'y' || axis === 'z' ? [euler[axis]] : [euler.x, euler.y, euler.z];\n }\n case 'position': return Object.values(reference.transform.position);\n case 'scale': return Object.values(reference.transform.scale);\n case 'weights':\n case 'morphTargetInfluences': {\n const mesh = object as Mesh;\n const index = typeof parsed.propertyIndex === 'string' && !/^\\d+$/.test(parsed.propertyIndex)\n ? mesh.morphTargetDictionary?.[parsed.propertyIndex] : Number(parsed.propertyIndex);\n return [reference.morphInfluences?.[index ?? -1] ?? 0];\n }\n default: return undefined;\n }\n }\n\n private materialize(source: Source, options: CharacterPlaybackOptions, inheritedStarts = new Map<string, number[]>()): AnimationClip {\n if (!this.inspection) throw new Error('Character has no model inspection.');\n const nativeSource = source.kind === 'native';\n let ir: ClipIR | undefined;\n if (!nativeSource) {\n ir = this.compile(source, options);\n }\n const clip = nativeSource ? withComponentTracks(source.clip).clone() : createAnimationClipFromClipIR(ir!, this.inspection);\n if (ir) {\n const predecessor = this.current.get(source.name);\n const outgoing = predecessor?.connector.getAction(predecessor.id);\n for (let index = 0; index < ir.tracks.length; index += 1) {\n if (!ir.tracks[index].inheritStart) continue;\n const track = clip.tracks[index];\n if (!track) throw new Error('Every inherited track must bind to the character.');\n const startKey = `${index}:${track.name}`;\n let previous = inheritedStarts.get(startKey);\n if (!previous && options.blendMode === 'additive') {\n // Additive inheritance belongs to this request's contribution, not\n // the full mixed pose containing baked clips and other controls.\n const rest = this.restValues(track);\n const candidates = outgoing?.getClip().tracks;\n const oldTrack = candidates?.[index]?.name === track.name ? candidates[index] : candidates?.find((candidate) => candidate.name === track.name);\n if (oldTrack && outgoing) {\n previous = Array.from((oldTrack as NativeTrack).createInterpolant().evaluate(outgoing.time));\n if (outgoing.blendMode === AdditiveAnimationBlendMode && rest) {\n previous = track.ValueTypeName === 'quaternion'\n ? new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(previous)).toArray()\n : previous.map((value, axis) => value + rest[axis]);\n }\n } else if (rest) previous = rest;\n }\n if (previous) track.values.set(previous, 0);\n inheritedStarts.set(startKey, previous ?? Array.from(track.values.subarray(0, track.getValueSize())));\n }\n }\n const authoredAdditive = clip.blendMode === AdditiveAnimationBlendMode;\n const scale = intensity(options);\n const additive = options.blendMode === 'additive' || (options.blendMode === undefined && authoredAdditive);\n // Native custom curves remain exact at their authored settings. Editing\n // strength/blend/easing materializes their native interpolant once into\n // ordinary keyframes; no custom sampling occurs during rendering.\n this.applyEasing(clip, options.easing ?? 'linear', nativeSource && (scale !== 1 || additive !== authoredAdditive));\n if (nativeSource && scale !== 1) {\n for (const track of clip.tracks) {\n const rest = authoredAdditive ? (track.ValueTypeName === 'quaternion' ? [0, 0, 0, 1] : Array(track.getValueSize()).fill(0)) : this.restValues(track);\n if (!rest) continue;\n const stride = track.getValueSize();\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const width = cubic ? stride / 3 : stride;\n for (let offset = 0; offset < track.values.length; offset += stride) {\n const sample = offset + (cubic ? width : 0);\n if (track.ValueTypeName === 'quaternion') {\n const neutral = new Quaternion().fromArray(rest);\n const value = new Quaternion().fromArray(track.values, sample);\n neutral.slerp(value, scale).toArray(track.values, sample);\n } else {\n for (let axis = 0; axis < width; axis += 1) {\n track.values[sample + axis] = rest[axis] + (track.values[sample + axis] - rest[axis]) * scale;\n if (cubic) {\n track.values[offset + axis] *= scale;\n track.values[offset + 2 * width + axis] *= scale;\n }\n }\n }\n }\n }\n }\n if (additive && !authoredAdditive) {\n const reference = clip.clone();\n for (const track of reference.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) track.values.set(rest, offset);\n }\n const explicitReference = options.additiveReferenceTimeSec;\n if (finite(explicitReference)) AnimationUtils.makeClipAdditive(clip, explicitReference * 30, clip.clone(), 30);\n else AnimationUtils.makeClipAdditive(clip, 0, reference, 30);\n }\n if (!additive && authoredAdditive) {\n // Native additive clips contain offsets; restore captured reference values.\n for (const track of clip.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) {\n if (track.ValueTypeName === 'quaternion') new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(track.values, offset)).toArray(track.values, offset);\n else for (let axis = 0; axis < width; axis += 1) track.values[offset + axis] += rest[axis];\n }\n }\n }\n clip.blendMode = additive ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\n return clip;\n }\n\n private applyEasing(clip: AnimationClip, easing: string, resampleCustom = false): void {\n if (easing === 'linear' && !resampleCustom) return;\n const curve = (progress: number): number => {\n switch (easing) {\n case 'easeIn': return progress * progress;\n case 'easeOut': return 1 - (1 - progress) ** 2;\n case 'easeInOut': return progress < 0.5 ? 2 * progress * progress : 1 - (-2 * progress + 2) ** 2 / 2;\n case 'easeInOutCubic': return progress < 0.5 ? 4 * progress ** 3 : 1 - (-2 * progress + 2) ** 3 / 2;\n default: return progress;\n }\n };\n for (const track of clip.tracks) {\n if (track.getInterpolation() === InterpolateDiscrete || track.times.length === 0) continue;\n const customInterpolant = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n if (track.times.length === 1) {\n if (customInterpolant && resampleCustom) {\n track.values = new Float32Array((track as NativeTrack).createInterpolant().evaluate(track.times[0]));\n track.setInterpolation(InterpolateLinear);\n }\n continue;\n }\n if ((customInterpolant || track.getInterpolation() !== InterpolateLinear) && easing === 'linear' && !resampleCustom) continue;\n const stride = track.getValueSize();\n const width = customInterpolant ? stride / 3 : stride;\n const interpolant = (track as NativeTrack).createInterpolant();\n const times: number[] = [];\n const values: number[] = [];\n const append = (time: number, value: ArrayLike<number>) => { times.push(time); for (let axis = 0; axis < width; axis += 1) values.push(value[axis]); };\n for (let index = 0; index < track.times.length - 1; index += 1) {\n const start = track.times[index];\n const end = track.times[index + 1];\n // Retain duplicate keyframe times and their authored values verbatim.\n const offset = index * stride + (customInterpolant ? width : 0);\n append(start, track.values.subarray(offset, offset + width));\n if (end <= start) continue;\n for (let part = 1; part < 16; part += 1) {\n const progress = part / 16;\n append(start + (end - start) * progress, interpolant.evaluate(start + (end - start) * curve(progress)));\n }\n }\n const lastOffset = (track.times.length - 1) * stride + (customInterpolant ? width : 0);\n append(track.times[track.times.length - 1], track.values.subarray(lastOffset, lastOffset + width));\n track.times = new Float32Array(times);\n track.values = new Float32Array(values);\n if (customInterpolant || track.getInterpolation() !== InterpolateLinear) track.setInterpolation(InterpolateLinear);\n }\n }\n\n private nativeOptions(options: CharacterPlaybackOptions, clip: AnimationClip): ThreeNativePlaybackOptions {\n const mode = clip.duration === 0 ? 'once' : options.loopMode ?? (options.loop === true ? 'repeat' : 'once');\n const count = finite(options.repeatCount) && options.repeatCount > 0 ? options.repeatCount : null;\n let speed = options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if (options.reverse === true) speed = -Math.abs(speed);\n return {\n startSeconds: finite(options.time) ? options.time : finite(options.offsetSec) ? options.offsetSec : speed < 0 ? clip.duration : 0,\n speed,\n weight: finite(options.mixerWeight) ? options.mixerWeight : 1,\n blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal',\n loop: { mode: mode === 'once' ? 'once' : mode === 'pingpong' || mode === 'pingPong' ? 'pingPong' : 'repeat', count: mode === 'once' ? 1 : count },\n finalPose: options.finalPose === 'release' || options.clampWhenFinished === false ? 'release' : 'hold',\n };\n }\n private validateEasing(options: CharacterPlaybackOptions): void {\n if (options.easing !== undefined && !['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInOutCubic'].includes(options.easing)) throw new Error(`Unknown playback easing: ${options.easing}`);\n }\n\n private handle(source: Source, options: CharacterPlaybackOptions, autoPlay: boolean): CharacterPlaybackHandle {\n options = { ...('options' in source ? source.options : {}), ...options };\n const listeners = new Set<(event: CharacterPlaybackEvent) => void>();\n const generation = this.bindingGeneration;\n let current: Playback | undefined;\n let resolvePromise: (event: CharacterPlaybackEvent) => void = () => {};\n const result = { name: source.name } as CharacterPlaybackHandle;\n Object.defineProperty(result, 'finished', { get: () => result.promise, enumerable: true });\n const newPromise = () => { result.promise = new Promise((resolve) => { resolvePromise = resolve; }); };\n newPromise();\n result.subscribe = (listener) => {\n const callback = typeof listener === 'function' ? listener : (event: CharacterPlaybackEvent) => listener.next(event);\n listeners.add(callback);\n return () => { listeners.delete(callback); };\n };\n const start = (): CharacterPlaybackHandle => {\n if (generation !== this.bindingGeneration) throw new Error('Playback handle belongs to an obsolete model binding.');\n this.validateEasing(options);\n const connector = this.requireConnector();\n const inheritedStarts = new Map<string, number[]>();\n const clip = this.materialize(source, options, inheritedStarts);\n const hairMotion = this.authoredHeadMotion(clip);\n const previous = this.current.get(source.name);\n const settings = this.nativeOptions(options, clip);\n if (previous && connector.getAction(previous.id)) settings.replace = previous.id;\n if (current) newPromise();\n const resolve = resolvePromise;\n let settled = false;\n this.playDepth += 1;\n let id: string;\n try { id = connector.playNativeClip(clip, settings); }\n catch (error) {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n throw error;\n }\n const playback: Playback = {\n id, source, options: { ...options, intensityScale: intensity(options) }, connector, terminal: false, inheritedStarts,\n replay: (next) => { options = next; return start(); },\n notify: (event) => {\n if (settled) return;\n settled = true;\n resolve(event);\n for (const listener of [...listeners]) {\n try { listener(event); }\n catch (error) { queueMicrotask(() => { throw error; }); }\n }\n },\n };\n current = playback;\n result.actionId = id;\n this.playbacks.set(id, playback);\n this.current.set(source.name, playback);\n const ensure = () => {\n this.assertAlive();\n if (this.connector !== connector || !connector.getAction(id)) throw new Error('Unknown, released or obsolete playback handle.');\n };\n const control = (command: ThreeNativePlaybackControl): CharacterPlaybackHandle => {\n ensure();\n connector.control(id, command);\n if (command.type === 'stop') this.forget(playback);\n return result;\n };\n result.stop = result.cancel = () => {\n if (this.connector !== connector || !connector.getAction(id)) return result;\n ensure();\n const seconds = finite(playback.options.fadeOutSec) ? playback.options.fadeOutSec : 0;\n if (seconds > 0 && !playback.terminal) connector.fadeOut(id, seconds);\n else control({ type: 'stop' });\n return result;\n };\n result.pause = () => control({ type: 'pause' });\n result.resume = () => {\n ensure();\n if (playback.terminal) {\n options = { ...playback.options, time: connector.getAction(id)!.time };\n return start();\n }\n return control({ type: 'resume' });\n };\n result.setSpeed = result.setPlaybackRate = (speed) => { ensure(); this.updatePlayback(playback, { speed }); return result; };\n result.setTime = result.seek = (seconds) => control({ type: 'seek', seconds });\n result.setWeight = result.setIntensity = (value) => {\n ensure();\n this.updatePlayback(playback, { intensityScale: value });\n return result;\n };\n result.updateParams = result.setParams = (value) => { ensure(); this.updatePlayback(playback, value); return result; };\n try {\n const fade = options.fadeInSec ?? options.crossfadeDuration;\n if (finite(fade) && fade > 0) connector.fadeIn(id, fade);\n } finally {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n }\n if (hairMotion && connector.getAction(id)) {\n this.playHairImpulse(hairMotion.horizontal, hairMotion.vertical);\n this.setHairGravity(hairMotion.pitch, clip.duration);\n }\n return result;\n };\n result.play = () => { if (current) options = { ...current.options }; return start(); };\n const beforePlay = () => { throw new Error('Play this compiled clip before changing playback.'); };\n // A prepared clip has options but owns no native action to stop or pause.\n result.stop = result.cancel = () => result;\n result.pause = result.resume = beforePlay;\n result.updateParams = result.setParams = (patch) => {\n this.assertAlive();\n this.validateEasing(patch);\n options = { ...options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if ('time' in patch || 'offsetSec' in patch) options.time = patch.time ?? patch.offsetSec;\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n options.speed = speed;\n delete options.reverse;\n }\n return result;\n };\n result.setWeight = result.setIntensity = (value) => result.updateParams({ intensityScale: value });\n result.setSpeed = result.setPlaybackRate = (speed) => result.updateParams({ speed });\n result.setTime = result.seek = (time) => result.updateParams({ time });\n return autoPlay ? start() : result;\n }\n\n private forget(playback: Playback): void {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n private updatePlayback(playback: Playback, patch: CharacterPlaybackOptions): void {\n this.validateEasing(patch);\n const connector = playback.connector;\n const action = connector.getAction(playback.id);\n if (connector !== this.connector || !action) throw new Error('Unknown, released or obsolete playback handle.');\n const options = { ...playback.options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if (['weight', 'intensity', 'intensityScale', 'blendMode', 'easing', 'balance', 'balanceMap', 'mixWeights'].some((key) => key in patch)) {\n const clip = this.materialize(playback.source, options, playback.inheritedStarts);\n connector.replaceClip(playback.id, clip);\n if ('blendMode' in patch) connector.control(playback.id, { type: 'setBlendMode', blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal' });\n }\n if ('mixerWeight' in patch) connector.control(playback.id, { type: 'setWeight', weight: patch.mixerWeight });\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? action.timeScale;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n connector.control(playback.id, { type: 'setSpeed', speed });\n options.speed = speed;\n delete options.reverse;\n }\n if ('time' in patch || 'offsetSec' in patch) {\n options.time = patch.time ?? patch.offsetSec;\n connector.control(playback.id, { type: 'seek', seconds: options.time });\n }\n if ('loopMode' in patch || 'loop' in patch || 'repeatCount' in patch) {\n if (playback.terminal) {\n playback.replay({ ...options, time: action.time });\n return;\n }\n connector.control(playback.id, { type: 'setLoop', loop: this.nativeOptions(options, action.getClip()).loop! });\n }\n if ('clampWhenFinished' in patch || 'finalPose' in patch) connector.control(playback.id, { type: 'setFinalPose', finalPose: this.nativeOptions(options, action.getClip()).finalPose! });\n playback.options = options;\n if (!connector.getAction(playback.id)) this.forget(playback);\n }\n\n registerAnimationClips(clips: AnimationClip[]): void {\n const model = this.requireModel();\n for (const clip of clips) {\n if (this.sources.get(clip.name)?.kind === 'native' && (this.sources.get(clip.name) as { clip: AnimationClip }).clip === clip) continue;\n const [ir] = serializeAnimationClips(model, [clip], this.inspection!);\n this.core.register_animation_clip(json(ir), 'baked');\n this.sources.set(clip.name, { name: clip.name, kind: 'native', clip });\n }\n }\n loadAnimationClips(clips: AnimationClip[]): void {\n this.stopAllAnimations();\n for (const source of [...this.sources.values()]) if (source.kind === 'native') {\n this.sources.delete(source.name);\n this.core.remove_animation_clip(source.name);\n }\n this.registerAnimationClips(clips ?? []);\n this.restartHair();\n }\n removeAnimationClip(name: string): boolean {\n this.stopAnimation(name);\n this.sources.delete(name);\n return this.core.remove_animation_clip(name);\n }\n getAnimationClips(): any[] { return parse(this.core.get_animation_clips()); }\n playAnimation(name: string, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const source = this.sources.get(name);\n if (!source) throw new Error(`Unknown animation clip: ${name}`);\n return this.handle(source, options, true);\n }\n private build(source: Source, options: CharacterPlaybackOptions, play: boolean): CharacterPlaybackHandle {\n this.requireModel();\n this.validateEasing(options);\n this.compile(source, options);\n this.sources.set(source.name, source);\n return this.handle(source, options, play);\n }\n buildClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n if (options.semanticAnimation) throw new Error('Decode legacy named animation tracks to numeric AU curves before building a clip.');\n return this.build({ name, kind: 'curves', input: copy(curves), options: copy(options) }, options, false);\n }\n snippetToClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildClip(name, curves, options); }\n buildTypedClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return this.build({ name, kind: 'typed', input: copy(channels), options: copy(options) }, options, false);\n }\n typedSnippetToClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(name, channels, options); }\n playSnippet(snippet: string | { name: string; curves: JsonObject }, curvesOrOptions: JsonObject = {}, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return typeof snippet === 'string' ? this.buildClip(snippet, curvesOrOptions, options).play() : this.buildClip(snippet.name, snippet.curves, curvesOrOptions).play();\n }\n playTypedSnippet(snippet: { name: string; channels: any[] }, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(snippet.name, snippet.channels, options).play(); }\n playClip(value: string | CharacterPlaybackHandle): CharacterPlaybackHandle { return typeof value === 'string' ? this.playAnimation(value) : value.play(); }\n supportsClipCurves(): boolean { return true; }\n cleanupSnippet(name: string): void { this.stopAnimation(name); this.sources.delete(name); this.core.cleanup_snippet(name); }\n crossfadeTo(name: string, seconds: number, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const outgoing = [...this.current.values()].filter((playback) => !playback.source.name.startsWith('__embody_'));\n const handle = this.playAnimation(name, { ...options, fadeInSec: seconds });\n for (const playback of outgoing) if (playback.connector.getAction(playback.id)) playback.connector.fadeOut(playback.id, seconds);\n return handle;\n }\n stopAnimation(name: string): void {\n const playback = this.current.get(name);\n if (!playback) return;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n stopAllAnimations(): void {\n for (const playback of [...this.playbacks.values()]) {\n if (playback.source.kind === 'compiled') continue;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n }\n pauseAnimation(name: string): void { const p = this.current.get(name); if (p) p.connector.control(p.id, { type: 'pause' }); }\n resumeAnimation(name: string): void {\n const p = this.current.get(name);\n if (!p) return;\n if (p.terminal) p.replay({ ...p.options, time: p.connector.getAction(p.id)?.time ?? 0 });\n else p.connector.control(p.id, { type: 'resume' });\n }\n pauseAllAnimations(): void { for (const p of this.playbacks.values()) if (!p.terminal) p.connector.control(p.id, { type: 'pause' }); }\n resumeAllAnimations(): void { for (const name of [...this.current.keys()]) this.resumeAnimation(name); }\n updateClipParams(name: string, options: CharacterPlaybackOptions): void { const p = this.current.get(name); if (p) this.updatePlayback(p, options); }\n setAnimationSpeed(name: string, value: number): void { this.updateClipParams(name, { speed: value }); }\n setAnimationIntensity(name: string, value: number): void { this.updateClipParams(name, { intensityScale: value }); }\n setAnimationLoop(name: string, value: boolean): void { this.updateClipParams(name, { loopMode: value ? 'repeat' : 'once' }); }\n setAnimationLoopMode(name: string, value: string): void { this.updateClipParams(name, { loopMode: value }); }\n setAnimationRepeatCount(name: string, value: number | null): void { this.updateClipParams(name, { loopMode: 'repeat', repeatCount: value }); }\n setAnimationReverse(name: string, value: boolean): void { this.updateClipParams(name, { reverse: value }); }\n setAnimationBlendMode(name: string, value: string): void { this.updateClipParams(name, { blendMode: value }); }\n setAnimationEasing(name: string, value: string): void { this.validateEasing({ easing: value }); this.updateClipParams(name, { easing: value }); }\n seekAnimation(name: string, value: number): void { this.updateClipParams(name, { time: value }); }\n setAnimationTime(name: string, value: number): void { this.seekAnimation(name, value); }\n setSnippetTime(name: string, value: number): void { this.seekAnimation(name, value); }\n seekSnippet(name: string, value: number): void { this.seekAnimation(name, value); }\n seek(name: string, value: number): void { this.seekAnimation(name, value); }\n setAnimationTimeScale(value: number): void { this.requireConnector().setTimeScale(value); this.timeScale = value; }\n getAnimationState(name: string): JsonObject {\n const p = this.current.get(name);\n const action = p?.connector.getAction(p.id);\n if (!action || !p) { if (p) this.forget(p); return { name, playing: false, isPlaying: false }; }\n const playing = action.isRunning();\n return { name, actionId: p.id, playing, isPlaying: playing, paused: action.paused, completed: p.terminal,\n time: action.time, duration: action.getClip().duration, speed: action.timeScale,\n intensityScale: intensity(p.options), mixerWeight: action.getEffectiveWeight(),\n loopMode: action.loop === LoopOnce ? 'once' : action.loop === LoopPingPong ? 'pingpong' : 'repeat',\n repeatCount: Number.isFinite(action.repetitions) ? action.repetitions : null,\n blendMode: action.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'replace' };\n }\n getPlayingAnimations(): string[] { return [...this.current.keys()].filter((name) => this.getAnimationState(name).playing); }\n\n private commitLive(durationMs = 0): CharacterPlaybackHandle[] {\n const connector = this.requireConnector();\n const duration = Math.max(0, durationMs) / 1000;\n const clip = parse<ClipIR>(this.core.build_live_clip('__embody_live', duration));\n const touched = new Set(parse<ClipIRTrack['target'][]>(this.core.live_command_targets_json()).map(targetKey));\n const tracks = new Map<string, ClipIRTrack>(clip.tracks.map((track) => [targetKey(track.target), track]));\n const handles: CharacterPlaybackHandle[] = [];\n for (const [key, previous] of this.liveTargets) {\n if (tracks.has(key)) continue;\n if (previous.releasing && !touched.has(key)) continue;\n const action = previous.handle.actionId && connector.getAction(previous.handle.actionId);\n if (!action || duration === 0) {\n previous.handle.stop();\n this.liveTargets.delete(key);\n continue;\n }\n // Fade this action's own contribution. Inheriting the already mixed pose\n // would blend it a second time and jump when the released track disappears.\n const nativeTrack = action.getClip().tracks[0] as NativeTrack;\n const sample = Array.from(nativeTrack.createInterpolant().evaluate(action.time));\n const released: ClipIRTrack = { ...previous.track, times: [0, duration], values: [...sample, ...sample], inheritStart: false };\n const releaseClip = { ...clip, name: previous.handle.name, tracks: [released] };\n const handle = this.handle({ name: releaseClip.name, kind: 'compiled', clip: releaseClip },\n { loopMode: 'once', finalPose: 'release', mixerWeight: action.getEffectiveWeight() }, true);\n connector.fadeOut(handle.actionId!, duration);\n const record = { track: released, handle, releasing: true };\n this.liveTargets.set(key, record);\n void handle.promise.then(() => { if (this.liveTargets.get(key) === record) this.liveTargets.delete(key); });\n handles.push(handle);\n }\n for (const [key, track] of tracks) {\n const previous = this.liveTargets.get(key);\n const endpoint = (value: ClipIRTrack) => value.values.slice(value.values.length / value.times.length * (value.times.length - 1));\n // Rust identifies semantic command destinations. Concrete targets outside\n // that command keep their native action, including an intentionally cancelled one.\n if (previous && !previous.releasing && !touched.has(key) && json(endpoint(previous.track)) === json(endpoint(track))) continue;\n const name = previous?.handle.name ?? `__embody_live_${this.nextLiveTarget++}`;\n const outgoing = previous?.handle.actionId && connector.getAction(previous.handle.actionId);\n let nativeTrack = track;\n if (duration > 0 && outgoing) {\n const start = Array.from((outgoing.getClip().tracks[0] as NativeTrack).createInterpolant().evaluate(outgoing.time));\n nativeTrack = { ...track, values: [...start, ...endpoint(track)], inheritStart: false };\n }\n const targetClip = { ...clip, name, tracks: [nativeTrack] };\n const handle = this.handle({ name, kind: 'compiled', clip: targetClip }, { loopMode: 'once', finalPose: 'hold' }, true);\n this.liveTargets.set(key, { track, handle, releasing: false });\n handles.push(handle);\n }\n return handles;\n }\n private mutateLive(mutate: () => void, durationMs = 0): CharacterPlaybackHandle[] {\n this.requireModel();\n this.core.begin_live_command();\n mutate();\n return this.commitLive(durationMs);\n }\n private transition(handles: CharacterPlaybackHandle[]): CharacterTransitionHandle {\n // A single control may own several concrete tracks. Replacement of one\n // shared target must not settle or cancel its other independent targets.\n let settled = handles.length === 0;\n const promise = Promise.all(handles.map((handle) => handle.promise)).then(() => { settled = true; });\n const control = (command: 'pause' | 'resume' | 'cancel') => {\n if (settled) return;\n for (const handle of handles) {\n const playback = handle.actionId && this.playbacks.get(handle.actionId);\n if (!playback || !playback.connector.getAction(playback.id)) continue;\n if (command === 'cancel' || !playback.terminal) handle[command]();\n }\n };\n return { promise, pause: () => control('pause'), resume: () => control('resume'), cancel: () => control('cancel') };\n }\n setAU(id: number, value: number, balance = this.core.get_au_balance(id)): void { this.mutateLive(() => this.core.set_au_signed(id, value, balance)); }\n getAU(id: number): number { return this.core.get_au(id); }\n getAUBalance(id: number): number { return this.core.get_au_balance(id); }\n getAUDescriptors(): AUDescriptor[] { return parse(this.core.get_au_descriptors_json()); }\n setContinuum(negative: number, positive: number, value: number, balance = NaN): void { this.mutateLive(() => this.core.set_continuum(negative, positive, value, balance)); }\n getContinuum(negative: number, positive: number): number { return this.core.get_continuum(negative, positive); }\n transitionAU(id: number, value: number, durationMs = 200, balance = this.core.get_au_balance(id)): CharacterTransitionHandle { return this.transition(this.mutateLive(() => this.core.set_au_signed(id, value, balance), durationMs)); }\n setViseme(index: number, value: number, jawScale = 1): void { this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }); }\n getViseme(index: number): number { return this.core.get_viseme(index); }\n getVisemeJawScale(index: number): number { return this.core.get_viseme_jaw_scale(index); }\n setVisemeById(id: string, value: number, jawScale = 1): void { const index = this.core.viseme_slot_index(id); if (index < 0) throw new Error(`Unknown viseme: ${id}`); this.setViseme(index, value, jawScale); }\n transitionViseme(index: number, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }, durationMs)); }\n transitionVisemeById(id: string, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { const index = this.core.viseme_slot_index(id); if (index < 0) return this.transition([]); return this.transitionViseme(index, value, durationMs, jawScale); }\n setAUMixWeight(id: number, value: number): void {\n const weight = Math.max(0, Math.min(1, value));\n this.mutateLive(() => this.core.set_au_mix_weight(id, weight));\n (this.profile.auMixDefaults ??= {})[id] = weight;\n (this.profileSource.auMixDefaults ??= {})[id] = weight;\n }\n getAUMixWeight(id: number): number { return this.core.get_au_mix_weight(id); }\n hasLeftRightBones(id: number): boolean { return this.core.has_left_right_bones(id); }\n setMorph(key: string | number, value: number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }); }\n setMorphOnMeshes(meshNames: string[], key: string | number, value: number): void { this.setMorph(key, value, meshNames); }\n releaseMorph(key: string | number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.release_morph_index(key, json(meshNames)); else this.core.release_morph(key, json(meshNames)); }); }\n transitionMorph(key: string | number, value: number, durationMs = 120, meshNames: string[] = []): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }, durationMs)); }\n\n getMorphTargets(): Record<string, string[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.keys(mesh.morphTargetDictionary ?? {}).sort()])); }\n getMorphTargetIndices(): Record<string, { name: string; index: number }[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.entries(mesh.morphTargetDictionary ?? {}).map(([name, index]) => ({ name, index })).sort((a, b) => a.index - b.index)])); }\n addMorphTarget(target: Parameters<ThreeFrameApplier['addMorphTarget']>[1], options?: Parameters<ThreeFrameApplier['addMorphTarget']>[2]): number { const index = this.applier.addMorphTarget(this.requireModel(), target, options); this.bindModel(); return index; }\n addMorphTargets(targets: Parameters<ThreeFrameApplier['addMorphTargets']>[1], options?: Parameters<ThreeFrameApplier['addMorphTargets']>[2]): Record<string, number> { const result = this.applier.addMorphTargets(this.requireModel(), targets, options); this.bindModel(); return result; }\n private meshCategory(mesh: Object3D): string { return this.profile.meshes?.[mesh.name]?.category ?? 'other'; }\n getMeshList(): JsonObject[] { return (this.inspection?.allMeshes ?? []).map((mesh) => ({ name: mesh.name, visible: mesh.visible, morphCount: mesh.morphTargetInfluences?.length ?? 0, category: this.meshCategory(mesh) })); }\n getBones(): ThreeModelInspection['bones'] { return this.bones; }\n private meshProfile(name: string): JsonObject { return (this.profile.meshes ??= {})[name] ??= { category: 'other' }; }\n setMeshVisible(name: string, visible: boolean): void { this.applier.setMeshVisible(this.requireModel(), name, visible); this.meshProfile(name).visible = visible; }\n highlightMesh(name: string | null, color?: number, value?: number): void { this.applier.highlightMesh(this.requireModel(), name, color, value); }\n getMeshMaterialConfig(name: string): Record<string, unknown> | null { return this.applier.getMeshMaterialConfig(this.requireModel(), name); }\n setMeshMaterialConfig(name: string, value: Parameters<ThreeFrameApplier['setMeshMaterialConfig']>[2]): void { this.applier.setMeshMaterialConfig(this.requireModel(), name, value); const entry = this.meshProfile(name); entry.material = { ...entry.material, ...value }; }\n\n registerHairObjects(objects: Object3D[]): { name: string; isMesh: boolean; isEyebrow: boolean }[] {\n this.hairObjects.clear();\n for (const object of objects) if ((object as Mesh).isMesh) this.hairObjects.set(object.name, object as Mesh);\n for (const category of ['hair', 'eyebrow']) {\n const mesh = [...this.hairObjects.values()].find((object) => this.meshCategory(object) === category);\n const material: any = mesh && (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material);\n if (material) this.hairAppearance[`${category}Color`] = { ...this.hairAppearance[`${category}Color`], baseColor: material.color ? `#${material.color.getHexString()}` : '#000000', emissive: material.emissive ? `#${material.emissive.getHexString()}` : '#000000', emissiveIntensity: material.emissiveIntensity ?? 0 };\n }\n this.restartHair();\n return [...this.hairObjects.values()].map((mesh) => ({ name: mesh.name, isMesh: true, isEyebrow: this.meshCategory(mesh) === 'eyebrow' }));\n }\n getRegisteredHairObjects(): Object3D[] { return [...this.hairObjects.values()]; }\n getHairMorphTargets(name?: string): string[] { const meshes = name ? [this.hairObjects.get(name)] : [...this.hairObjects.values()]; return [...new Set(meshes.flatMap((mesh) => Object.keys(mesh?.morphTargetDictionary ?? {})))].sort(); }\n getHairAppearance(): JsonObject { return copy(this.hairAppearance); }\n private setHairAppearance(category: 'hair' | 'eyebrow', value: string | JsonObject): void {\n const key = `${category}Color`;\n const next = parse(this.wasm.normalize_hair_color_appearance_json(json(value), json(this.hairAppearance[key])));\n this.hairAppearance[key] = next;\n this.applier.applyHairAppearance([...this.hairObjects.values()].filter((mesh) => this.meshCategory(mesh) === category), next);\n }\n setHairColor(value: string | JsonObject): void { this.setHairAppearance('hair', value); }\n setEyebrowColor(value: string | JsonObject): void { this.setHairAppearance('eyebrow', value); }\n setHairBaseColor(value: string): void { this.setHairColor({ baseColor: value }); }\n setEyebrowBaseColor(value: string): void { this.setEyebrowColor({ baseColor: value }); }\n setHairGlow(color: string, value: number): void { this.setHairColor({ emissive: color, emissiveIntensity: value }); }\n setEyebrowGlow(color: string, value: number): void { this.setEyebrowColor({ emissive: color, emissiveIntensity: value }); }\n setHairOutline(value: { show: boolean; color?: string; opacity?: number }): void { Object.assign(this.hairAppearance, { showOutline: value.show }, value.color ? { outlineColor: value.color } : {}, value.opacity !== undefined ? { outlineOpacity: value.opacity } : {}); }\n private restartHair(): void {\n for (const name of [...this.current.keys()]) if (name.startsWith('__embody_hair')) this.stopAnimation(name);\n if (!this.hairConfig.enabled || !this.hairObjects.size || !this.connector) return;\n if (this.hairConfig.idleSwayAmount > 0 || this.hairConfig.windStrength > 0) {\n const curves = parse(this.wasm.build_hair_idle_curves(json(this.hairConfig), this.hairConfig.idleClipDuration));\n if (Object.keys(curves).length) this.playSnippet('__embody_hair_idle', curves, { loopMode: 'repeat', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n }\n setHairPhysicsEnabled(value: boolean): void { this.setHairPhysicsConfig({ enabled: value }); }\n isHairPhysicsEnabled(): boolean { return !!this.hairConfig.enabled; }\n setHairPhysicsConfig(value: JsonObject): void { this.hairConfig = parse(this.core.set_hair_config_json(json(value))); this.restartHair(); }\n getHairPhysicsConfig(): JsonObject { return copy(this.hairConfig); }\n validateHairMorphTargets(): string[] {\n return parse(this.core.get_missing_hair_morph_targets_json(json(this.getHairMorphTargets())));\n }\n applyHairStateToObject(name: string, state: JsonObject): void {\n const mesh = this.hairObjects.get(name);\n if (!mesh) return;\n if (state.visible !== undefined) mesh.visible = state.visible;\n if (state.scale) mesh.scale.set(state.scale.x, state.scale.y, state.scale.z);\n if (state.position) mesh.position.set(state.position.x, state.position.y, state.position.z);\n if (state.color) this.applier.applyHairAppearance([mesh], state.color);\n }\n private authoredHeadMotion(clip: AnimationClip): { horizontal: number; vertical: number; pitch: number } | undefined {\n if (!this.hairConfig.enabled || clip.name.startsWith('__embody_hair') || !this.hairObjects.size) return undefined;\n // Serialize native bindings and sample storage only. The core resolves the\n // character's head role and compiles its configured hair response.\n const tracks: Array<{ boneName: string; current: number[]; reference: number[]; samples: number[][] }> = [];\n for (const track of clip.tracks) {\n if (track.ValueTypeName !== 'quaternion') continue;\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(this.requireModel(), parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ?? skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) continue;\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const stride = track.getValueSize();\n const reference = this.restValues(track);\n if (!reference) continue;\n const samples: number[][] = [];\n for (let index = 0; index < track.times.length; index += 1) {\n const offset = index * stride + (cubic ? 4 : 0);\n samples.push(Array.from(track.values.subarray(offset, offset + 4)));\n }\n tracks.push({ boneName: object.name, current: object.quaternion.toArray(), reference, samples });\n }\n return parse(this.core.resolve_hair_motion_json(json(tracks), clip.blendMode === AdditiveAnimationBlendMode)) ?? undefined;\n }\n private setHairGravity(pitch: number, durationSeconds: number): void {\n const clip = parse<ClipIR>(this.core.build_hair_gravity_clip('__embody_hair_gravity', pitch, durationSeconds, json({ meshNames: [...this.hairObjects.keys()], source: 'hair' })));\n if (!clip.tracks.length) return;\n this.handle({ name: clip.name, kind: 'compiled', clip }, { loopMode: 'once', finalPose: 'hold', blendMode: 'additive' }, true);\n }\n playHairImpulse(horizontal: number, vertical: number): CharacterPlaybackHandle | undefined {\n if (!this.hairConfig.enabled || !this.hairObjects.size) return undefined;\n const curves = parse(this.wasm.build_hair_impulse_curves(json(this.hairConfig), this.hairConfig.impulseClipDuration, horizontal, vertical));\n if (!Object.keys(curves).length) return undefined;\n return this.playSnippet('__embody_hair_impulse', curves, { loopMode: 'once', finalPose: 'release', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n start(): void { this.assertAlive(); this.rendering = true; this.connector?.setRendering(true); }\n stop(): void { this.assertAlive(); this.rendering = false; this.connector?.setRendering(false); }\n clear(): void { this.mutateLive(() => this.core.clear()); }\n resetToNeutral(): void { this.clear(); }\n dispose(): void {\n if (this.disposed) return;\n this.connector?.dispose();\n this.core.free();\n this.playbacks.clear();\n this.current.clear();\n this.sources.clear();\n this.hairObjects.clear();\n this.meshes.length = 0;\n this.meshByName.clear();\n this.bones = {};\n this.liveTargets.clear();\n this.connector = undefined;\n this.inspection = undefined;\n this.boundModel = undefined;\n this.disposed = true;\n }\n}\n\nexport function createRustEmbodyHostUnbound(config: RustEmbodyHostConfig = {}): Embody { return new Embody(config); }\nexport async function createRustEmbodyHost(model: Object3D, config: RustEmbodyHostConfig = {}): Promise<Embody> {\n const character = await Embody.create(config);\n try { character.onReady({ model, meshes: config.meshes, referencePose: config.referencePose }); return character; }\n catch (error) { character.dispose(); throw error; }\n}\n","// CSS gradients need no extra renderer resources or animation loop.\nexport const SCENE_INK_BASE_COLOR = '#29333b';\nexport const SCENE_INK_BASE_GRADIENT =\n 'radial-gradient(ellipse at 50% 42%, #46535c 0%, #35414a 42%, #29333b 76%, #252e35 100%)';\n\nexport type SceneInkCssPalette = readonly [string, string, string];\n\nconst DEFAULT_PALETTE: SceneInkCssPalette = ['#7cb8b2', '#627888', '#8b989f'];\n\nexport function createSceneInkBackgroundCss(palette: SceneInkCssPalette = DEFAULT_PALETTE): string {\n const [a, b, c] = palette;\n // Overlapping soft ellipses give the ink irregular edges without a noise\n // shader, blur filter, canvas, pointer listener or frame-by-frame repaint.\n return [\n `radial-gradient(ellipse 46% 62% at calc(20% + var(--scene-ink-shift-x, 0%)) 30%, color-mix(in srgb, ${a} 24%, transparent), transparent 78%)`,\n `radial-gradient(ellipse 32% 44% at 34% calc(52% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${a} 12%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 48% 60% at calc(82% - var(--scene-ink-shift-x, 0%)) 62%, color-mix(in srgb, ${b} 22%, transparent), transparent 80%)`,\n `radial-gradient(ellipse 28% 38% at 68% calc(26% - var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${b} 10%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 50% 38% at 38% calc(78% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${c} 18%, transparent), transparent 82%)`,\n SCENE_INK_BASE_GRADIENT,\n ].join(', ');\n}\n\nexport const DEFAULT_SCENE_INK_BACKGROUND = createSceneInkBackgroundCss();\n","import * as THREE from 'three';\nimport { createSceneInkBackgroundCss, type SceneInkCssPalette } from './sceneInkBackgroundStyle';\n\nexport type SceneInkBackgroundPalette = readonly [\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n];\n\nexport type SceneInkBackground = {\n setPalette: (palette?: SceneInkBackgroundPalette | null) => void;\n dispose: () => void;\n};\n\nconst toCssColor = (tone: THREE.ColorRepresentation) => `#${new THREE.Color(tone).getHexString()}`;\n\nexport function createSceneInkBackground(\n onBackgroundChange?: (background: string) => void,\n): SceneInkBackground {\n let currentBackground = '';\n let disposed = false;\n\n const applyBackground = (palette?: SceneInkBackgroundPalette | null) => {\n if (disposed) return;\n const colors: SceneInkCssPalette | undefined = palette\n ? [toCssColor(palette[0]), toCssColor(palette[1]), toCssColor(palette[2])]\n : undefined;\n const background = createSceneInkBackgroundCss(colors);\n if (background === currentBackground) return;\n currentBackground = background;\n onBackgroundChange?.(background);\n };\n\n applyBackground();\n\n return {\n setPalette: applyBackground,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n },\n };\n}\n","import * as THREE from 'three';\nimport type { SceneInkBackgroundPalette } from './sceneInkBackground';\n\ntype PaletteMaterial = THREE.Material & {\n color?: THREE.Color;\n emissive?: THREE.Color;\n map?: THREE.Texture | null;\n emissiveMap?: THREE.Texture | null;\n};\n\ntype WeightedColor = {\n color: THREE.Color;\n score: number;\n};\n\ntype CachedPalette = {\n materialPalette?: SceneInkBackgroundPalette | null;\n texturePalette?: SceneInkBackgroundPalette | null;\n texturePalettePromise?: Promise<SceneInkBackgroundPalette | null>;\n};\n\nconst paletteCache = new Map<string, CachedPalette>();\nconst MAX_TEXTURE_SAMPLE_SIZE = 10;\nconst MIN_SAMPLE_SATURATION = 0.04;\nconst MIN_CANDIDATE_DISTANCE = 0.12;\n\n/** Reuse the finished palette on character switches without resampling textures. */\nexport function readCachedCharacterPalette(cacheKey: string): SceneInkBackgroundPalette | null {\n const cached = paletteCache.get(cacheKey);\n return cached?.texturePalette ?? cached?.materialPalette ?? null;\n}\n\nexport function resolveCharacterMaterialPalette(\n model: THREE.Object3D,\n cacheKey: string,\n): SceneInkBackgroundPalette | null {\n const cached = getCachedPalette(cacheKey);\n if (cached.materialPalette !== undefined) {\n return cached.materialPalette;\n }\n\n const samples = collectPaletteSamples(model, false);\n const palette = buildPalette(samples);\n cached.materialPalette = palette;\n return palette;\n}\n\nexport function resolveCharacterTexturePalette(\n model: THREE.Object3D,\n cacheKey: string,\n): Promise<SceneInkBackgroundPalette | null> {\n const cached = getCachedPalette(cacheKey);\n if (cached.texturePalette !== undefined) {\n return Promise.resolve(cached.texturePalette);\n }\n if (cached.texturePalettePromise) {\n return cached.texturePalettePromise;\n }\n\n cached.texturePalettePromise = schedulePaletteExtraction(() => {\n const samples = collectPaletteSamples(model, true);\n const palette = buildPalette(samples);\n cached.texturePalette = palette;\n return palette;\n });\n\n return cached.texturePalettePromise;\n}\n\nfunction getCachedPalette(cacheKey: string): CachedPalette {\n const cached = paletteCache.get(cacheKey) ?? {};\n paletteCache.set(cacheKey, cached);\n return cached;\n}\n\nfunction schedulePaletteExtraction(\n extractPalette: () => SceneInkBackgroundPalette | null,\n): Promise<SceneInkBackgroundPalette | null> {\n return new Promise((resolve) => {\n const run = () => resolve(extractPalette());\n\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(run, { timeout: 700 });\n return;\n }\n\n globalThis.setTimeout(run, 0);\n });\n}\n\nfunction collectPaletteSamples(model: THREE.Object3D, includeTextures: boolean): WeightedColor[] {\n const samples: WeightedColor[] = [];\n const seenMaterials = new Set<string>();\n const seenTextures = new Set<string>();\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.material) {\n return;\n }\n\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n for (const material of materials) {\n if (!material || seenMaterials.has(material.uuid)) {\n continue;\n }\n seenMaterials.add(material.uuid);\n collectMaterialSamples(material as PaletteMaterial, samples, seenTextures, includeTextures);\n }\n });\n\n return samples;\n}\n\nfunction collectMaterialSamples(\n material: PaletteMaterial,\n samples: WeightedColor[],\n seenTextures: Set<string>,\n includeTextures: boolean,\n): void {\n pushColorSample(samples, material.color, 1.25);\n pushColorSample(samples, material.emissive, 0.8);\n\n if (!includeTextures) {\n return;\n }\n\n if (material.map && !seenTextures.has(material.map.uuid)) {\n seenTextures.add(material.map.uuid);\n samples.push(...sampleTexture(material.map));\n }\n\n if (material.emissiveMap && !seenTextures.has(material.emissiveMap.uuid)) {\n seenTextures.add(material.emissiveMap.uuid);\n samples.push(...sampleTexture(material.emissiveMap).map(({ color, score }) => ({\n color,\n score: score * 0.65,\n })));\n }\n}\n\nfunction pushColorSample(samples: WeightedColor[], color: THREE.Color | undefined, score: number): void {\n if (!color || !isUsableColor(color)) {\n return;\n }\n\n samples.push({\n color: color.clone(),\n score,\n });\n}\n\nfunction sampleTexture(texture: THREE.Texture): WeightedColor[] {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const image = texture.image as CanvasImageSource | undefined;\n const imageSize = getImageSize(image);\n if (!image || !imageSize) {\n return [];\n }\n\n const canvas = document.createElement('canvas');\n const width = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.width);\n const height = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.height);\n canvas.width = width;\n canvas.height = height;\n\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return [];\n }\n\n try {\n context.drawImage(image, 0, 0, width, height);\n const data = context.getImageData(0, 0, width, height).data;\n const samples: WeightedColor[] = [];\n\n for (let index = 0; index < data.length; index += 4) {\n const alpha = data[index + 3] / 255;\n if (alpha < 0.18) {\n continue;\n }\n\n const color = new THREE.Color(\n data[index] / 255,\n data[index + 1] / 255,\n data[index + 2] / 255,\n );\n if (!isUsableColor(color)) {\n continue;\n }\n\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n samples.push({\n color,\n score: alpha * (0.4 + hsl.s * 1.3),\n });\n }\n\n return samples;\n } catch {\n return [];\n }\n}\n\nfunction getImageSize(image: CanvasImageSource | undefined): { width: number; height: number } | null {\n if (!image || !('width' in image) || !('height' in image)) {\n return null;\n }\n\n const width = Number(image.width);\n const height = Number(image.height);\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nfunction isUsableColor(color: THREE.Color): boolean {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n return hsl.l > 0.05 && hsl.l < 0.94 && hsl.s >= MIN_SAMPLE_SATURATION;\n}\n\nfunction buildPalette(samples: WeightedColor[]): SceneInkBackgroundPalette | null {\n if (samples.length === 0) {\n return null;\n }\n\n const buckets = new Map<number, { color: THREE.Color; score: number }>();\n for (const sample of samples) {\n const hsl = { h: 0, s: 0, l: 0 };\n sample.color.getHSL(hsl);\n const bucketId = Math.floor(hsl.h * 18);\n const bucket = buckets.get(bucketId) ?? { color: new THREE.Color(0, 0, 0), score: 0 };\n bucket.color.r += sample.color.r * sample.score;\n bucket.color.g += sample.color.g * sample.score;\n bucket.color.b += sample.color.b * sample.score;\n bucket.score += sample.score;\n buckets.set(bucketId, bucket);\n }\n\n const candidates = Array.from(buckets.values())\n .filter((bucket) => bucket.score > 0)\n .map((bucket) => ({\n color: massageBackgroundTone(bucket.color.multiplyScalar(1 / bucket.score)),\n score: bucket.score,\n }))\n .sort((a, b) => b.score - a.score);\n\n const selected: THREE.Color[] = [];\n for (const candidate of candidates) {\n const distinctEnough = selected.every((color) => colorDistance(color, candidate.color) >= MIN_CANDIDATE_DISTANCE);\n if (!distinctEnough) {\n continue;\n }\n\n selected.push(candidate.color);\n if (selected.length === 3) {\n break;\n }\n }\n\n if (selected.length === 0) {\n return null;\n }\n\n while (selected.length < 3) {\n selected.push(createCompanionTone(selected[0], selected.length));\n }\n\n return [selected[0], selected[1], selected[2]];\n}\n\nfunction massageBackgroundTone(color: THREE.Color): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n const saturation = THREE.MathUtils.clamp(Math.max(hsl.s * 1.35, 0.46), 0.46, 0.82);\n const lightness = THREE.MathUtils.clamp(hsl.l + 0.08, 0.42, 0.66);\n return new THREE.Color().setHSL(hsl.h, saturation, lightness);\n}\n\nfunction createCompanionTone(source: THREE.Color, index: number): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n source.getHSL(hsl);\n const hueOffset = index === 1 ? 0.075 : -0.065;\n return new THREE.Color().setHSL(\n THREE.MathUtils.euclideanModulo(hsl.h + hueOffset, 1),\n THREE.MathUtils.clamp(hsl.s * (index === 1 ? 0.92 : 0.82), 0.38, 0.76),\n THREE.MathUtils.clamp(hsl.l + (index === 1 ? 0.04 : -0.03), 0.38, 0.68),\n );\n}\n\nfunction colorDistance(a: THREE.Color, b: THREE.Color): number {\n const dr = a.r - b.r;\n const dg = a.g - b.g;\n const db = a.b - b.b;\n return Math.sqrt(dr * dr + dg * dg + db * db);\n}\n","import { Box3 } from 'three';\nimport type { AnimationClip, Mesh, Object3D, Scene } from 'three';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\nexport type CharacterModelLoadResult = { model: Object3D; meshes: Mesh[]; animations: AnimationClip[]; gltf: GLTF | null };\nexport type CharacterModelLoadOptions = { onProgress?: (progress: number) => void; castShadows?: boolean; dracoDecoderPath?: string };\nexport type CharacterModelTransform = { modelOffset?: { x?: number; y?: number; z?: number }; modelRotation?: { x?: number; y?: number; z?: number }; modelScale?: number; modelGroundClearance?: number };\n\nlet draco: DRACOLoader | null = null;\nlet dracoPath = '';\nlet gltfLoader: GLTFLoader | null = null;\nlet gltfLoaderUsesDraco = false;\nlet fbxLoader: FBXLoader | null = null;\n\nconst getGltfLoader = (dracoDecoderPath?: string) => {\n const wantsDraco = typeof dracoDecoderPath === 'string' && dracoDecoderPath.length > 0;\n const normalizedPath = wantsDraco\n ? (dracoDecoderPath!.endsWith('/') ? dracoDecoderPath! : `${dracoDecoderPath!}/`)\n : '';\n\n // Rebuild only when Draco enablement/path changes. Non-Draco assets must not\n // pay for constructing/attaching DRACOLoader at all.\n if (!gltfLoader || gltfLoaderUsesDraco !== wantsDraco || (wantsDraco && normalizedPath !== dracoPath)) {\n draco?.dispose();\n draco = null;\n dracoPath = normalizedPath;\n gltfLoaderUsesDraco = wantsDraco;\n gltfLoader = new GLTFLoader();\n if (wantsDraco) {\n draco = new DRACOLoader().setDecoderPath(normalizedPath).setDecoderConfig({ type: 'wasm' });\n gltfLoader.setDRACOLoader(draco);\n }\n }\n return gltfLoader;\n};\n\nconst prepare = (model: Object3D, castShadows = true) => {\n const meshes: Mesh[] = [];\n model.traverse((object: any) => {\n if (!object.isMesh) return;\n if (castShadows) object.castShadow = true;\n if (object.morphTargetInfluences?.length) meshes.push(object);\n });\n return meshes;\n};\n\nconst progress = (listener?: (progress: number) => void) => {\n let last = -1;\n return (event: ProgressEvent) => {\n if (!listener || !event.lengthComputable) return;\n const next = Math.min(100, Math.max(0, Math.round(event.loaded / event.total * 100)));\n if (next !== last) { last = next; listener(next); }\n };\n};\n\nexport function applyCharacterModelTransform(model: Object3D, value: CharacterModelTransform = {}) {\n if (value.modelOffset) model.position.set(value.modelOffset.x ?? 0, value.modelOffset.y ?? 0, value.modelOffset.z ?? 0);\n if (value.modelRotation) model.rotation.set(...(['x', 'y', 'z'] as const).map((axis) => (value.modelRotation?.[axis] ?? 0) * Math.PI / 180) as [number, number, number]);\n if (Number.isFinite(value.modelScale) && (value.modelScale ?? 0) > 0) model.scale.setScalar(value.modelScale!);\n if (Number.isFinite(value.modelGroundClearance)) { model.updateMatrixWorld(true); const min = new Box3().setFromObject(model).min.y; if (Number.isFinite(min) && min < value.modelGroundClearance!) model.position.y += value.modelGroundClearance! - min; }\n}\n\nexport function disposeCharacterModel(scene: Scene | null, model: Object3D) {\n scene?.remove(model);\n model.traverse((object: any) => {\n object.geometry?.dispose?.();\n for (const material of object.material ? (Array.isArray(object.material) ? object.material : [object.material]) : []) {\n for (const value of Object.values(material) as any[]) if (value?.isTexture) value.dispose?.();\n material.dispose?.();\n }\n });\n}\n\nexport function loadCharacterModel(url: string, options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const done = (model: Object3D, animations: AnimationClip[], gltf: GLTF | null) => ({ model, meshes: prepare(model, options.castShadows), animations, gltf });\n if (/\\.fbx(?:\\?|$)/i.test(url)) {\n fbxLoader ??= new FBXLoader();\n return new Promise((resolve, reject) => fbxLoader!.load(url, (model) => resolve(done(model, model.animations ?? [], null)), progress(options.onProgress), reject));\n }\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.load(url, (gltf) => resolve(done(gltf.scene, gltf.animations ?? [], gltf)), progress(options.onProgress), reject));\n}\n\nexport function parseCharacterModel(data: ArrayBuffer, resourcePath = '', options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.parse(data, resourcePath, (gltf) => resolve({ model: gltf.scene, meshes: prepare(gltf.scene, options.castShadows), animations: gltf.animations ?? [], gltf }), reject));\n}\n","import * as THREE from 'three';\n\nconst THREE_RENDERED_MORPH_SEMANTICS = ['position', 'normal', 'color'] as const;\ntype ThreeRenderedMorphSemantic = typeof THREE_RENDERED_MORPH_SEMANTICS[number];\ntype ThreeMorphAttribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;\n\nexport interface CharacterMorphLayoutRepair {\n meshName: string;\n paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>>;\n removedEmptyChannels: ThreeRenderedMorphSemantic[];\n paddedInfluences: number;\n}\n\nfunction resolveMorphTargetCount(mesh: THREE.Mesh): number {\n const morphAttributes = mesh.geometry.morphAttributes;\n const attributeCount = THREE_RENDERED_MORPH_SEMANTICS.reduce(\n (count, semantic) => Math.max(count, morphAttributes[semantic]?.length ?? 0),\n 0,\n );\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n const dictionaryCount = Object.values(mesh.morphTargetDictionary ?? {}).reduce((count, index) => {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph target dictionary index: ${index}.`,\n );\n }\n return Math.max(count, index + 1);\n }, 0);\n\n return Math.max(attributeCount, influenceCount, dictionaryCount);\n}\n\nfunction createNeutralMorphAttribute(\n mesh: THREE.Mesh,\n semantic: ThreeRenderedMorphSemantic,\n existingAttributes: ThreeMorphAttribute[],\n targetIndex: number,\n): THREE.BufferAttribute {\n const geometry = mesh.geometry;\n const baseAttribute = geometry.getAttribute(semantic);\n const template = baseAttribute ?? existingAttributes.find(Boolean);\n if (!template) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" cannot repair morph ${semantic}[${targetIndex}] `\n + 'because it has no base or existing attribute to copy.',\n );\n }\n\n const neutral = template.clone();\n if (geometry.morphTargetsRelative || !baseAttribute) {\n for (let vertexIndex = 0; vertexIndex < neutral.count; vertexIndex += 1) {\n for (let component = 0; component < neutral.itemSize; component += 1) {\n neutral.setComponent(vertexIndex, component, 0);\n }\n }\n }\n\n const targetName = Object.entries(mesh.morphTargetDictionary ?? {})\n .find(([, index]) => index === targetIndex)?.[0];\n neutral.name = targetName ?? '';\n return neutral;\n}\n\n/** Repair recoverable channel holes before Three.js builds its morph texture. */\nexport function normalizeRenderableCharacterMorphAttributes(\n model: THREE.Object3D,\n): CharacterMorphLayoutRepair[] {\n const repairs: CharacterMorphLayoutRepair[] = [];\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.geometry) return;\n\n const morphAttributes = mesh.geometry.morphAttributes;\n const removedEmptyChannels: ThreeRenderedMorphSemantic[] = [];\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n if (semantic !== 'position' && morphAttributes[semantic]?.length === 0) {\n delete morphAttributes[semantic];\n removedEmptyChannels.push(semantic);\n }\n }\n\n const targetCount = resolveMorphTargetCount(mesh);\n if (targetCount === 0) {\n if (morphAttributes.position?.length === 0) {\n delete morphAttributes.position;\n removedEmptyChannels.push('position');\n }\n if (removedEmptyChannels.length > 0) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels: {},\n removedEmptyChannels,\n paddedInfluences: 0,\n });\n }\n return;\n }\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n if (!positionCount) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has morph targets but no base position attribute.`,\n );\n }\n\n const paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>> = {};\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n let attributes = morphAttributes[semantic];\n if (!attributes) {\n if (semantic !== 'position') continue;\n attributes = [];\n morphAttributes.position = attributes;\n }\n\n const baseAttribute = mesh.geometry.getAttribute(semantic);\n const referenceAttribute = baseAttribute ?? attributes.find(Boolean);\n const expectedItemSize = referenceAttribute?.itemSize;\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n const attribute = attributes[targetIndex];\n if (!attribute) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n mesh,\n semantic,\n attributes,\n targetIndex,\n );\n paddedChannels[semantic] = (paddedChannels[semantic] ?? 0) + 1;\n continue;\n }\n\n if (attribute.count !== positionCount || attribute.itemSize !== expectedItemSize) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph ${semantic}[${targetIndex}] `\n + `(count=${attribute.count}, itemSize=${attribute.itemSize}; `\n + `expected count=${positionCount}, itemSize=${expectedItemSize}).`,\n );\n }\n }\n }\n\n const influences = mesh.morphTargetInfluences ?? [];\n const paddedInfluences = targetCount - influences.length;\n while (influences.length < targetCount) {\n influences.push(0);\n }\n mesh.morphTargetInfluences = influences;\n\n if (\n removedEmptyChannels.length > 0\n || Object.keys(paddedChannels).length > 0\n || paddedInfluences > 0\n ) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels,\n removedEmptyChannels,\n paddedInfluences,\n });\n }\n });\n\n return repairs;\n}\n\nexport function assertRenderableCharacterMorphAttributes(model: THREE.Object3D): void {\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh) return;\n\n const morphAttributes = mesh.geometry?.morphAttributes;\n const primary = morphAttributes?.position\n ?? morphAttributes?.normal\n ?? morphAttributes?.color;\n const targetCount = primary?.length ?? 0;\n if (targetCount === 0) return;\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n const invalidSemantics = THREE_RENDERED_MORPH_SEMANTICS.filter((semantic) => {\n const attributes = morphAttributes[semantic];\n if (semantic === 'position' && !attributes) return true;\n if (!attributes) return false;\n const expectedItemSize = mesh.geometry.getAttribute(semantic)?.itemSize\n ?? attributes.find(Boolean)?.itemSize;\n return attributes.length !== targetCount\n || Array.from({ length: targetCount }, (_, index) => attributes[index])\n .some((attribute) => (\n !attribute\n || attribute.count !== positionCount\n || attribute.itemSize !== expectedItemSize\n ));\n });\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n\n if (invalidSemantics.length > 0 || influenceCount !== targetCount) {\n const channelCounts = THREE_RENDERED_MORPH_SEMANTICS\n .map((semantic) => `${semantic}=${morphAttributes[semantic]?.length ?? 0}`)\n .join(', ');\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid Three.js morph layout `\n + `(${channelCounts}, influences=${influenceCount}, expected=${targetCount}).`,\n );\n }\n });\n}\n\n","import {\n ACESFilmicToneMapping,\n Color,\n DirectionalLight,\n HemisphereLight,\n MathUtils,\n Mesh,\n PCFShadowMap,\n PCFSoftShadowMap,\n PerspectiveCamera,\n PlaneGeometry,\n PMREMGenerator,\n Scene,\n ShadowMaterial,\n SRGBColorSpace,\n WebGLCoordinateSystem,\n WebGLRenderer,\n WebGPUCoordinateSystem,\n} from 'three';\nimport type { ColorRepresentation, CoordinateSystem, Light, LightShadow, OrthographicCamera, RenderTarget, Texture } from 'three';\nimport type { WebGPURenderer } from 'three/webgpu';\nimport { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';\nimport { registerSceneRendering } from './sceneRenderingBinding';\nimport { prepareModelSkinning } from './modelSkinning';\n\nexport type DefaultCharacterLightingSettings = {\n envMapEnabled: boolean;\n environmentIntensity: number;\n environmentBlur: number;\n exposure: number;\n ambientIntensity: number;\n keyIntensity: number;\n fillIntensity: number;\n rimIntensity: number;\n shadowOpacity: number;\n};\n\nexport const DEFAULT_CHARACTER_LIGHTING_PRESETS = {\n cleanStudio: { id: 'cleanStudio', label: 'Soft Studio', settings: { envMapEnabled: true, environmentIntensity: .24, environmentBlur: .04, exposure: 1.08, ambientIntensity: .32, keyIntensity: .52, fillIntensity: .18, rimIntensity: .08, shadowOpacity: .22 } },\n softFill: { id: 'softFill', label: 'Soft Fill', settings: { envMapEnabled: true, environmentIntensity: .3, environmentBlur: .04, exposure: 1.1, ambientIntensity: .38, keyIntensity: .44, fillIntensity: .24, rimIntensity: .1, shadowOpacity: .18 } },\n inspection: { id: 'inspection', label: 'Inspection', settings: { envMapEnabled: true, environmentIntensity: .45, environmentBlur: .035, exposure: 1.18, ambientIntensity: .48, keyIntensity: .58, fillIntensity: .32, rimIntensity: .14, shadowOpacity: .12 } },\n contrast: { id: 'contrast', label: 'Contrast', settings: { envMapEnabled: true, environmentIntensity: .2, environmentBlur: .035, exposure: 1.08, ambientIntensity: .25, keyIntensity: .7, fillIntensity: .12, rimIntensity: .22, shadowOpacity: .28 } },\n} as const;\n\nexport type DefaultCharacterLightingPresetId = keyof typeof DEFAULT_CHARACTER_LIGHTING_PRESETS;\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_ID: DefaultCharacterLightingPresetId = 'cleanStudio';\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_IDS = Object.keys(DEFAULT_CHARACTER_LIGHTING_PRESETS) as DefaultCharacterLightingPresetId[];\nexport const DEFAULT_CHARACTER_LIGHTING_SETTINGS: DefaultCharacterLightingSettings = { ...DEFAULT_CHARACTER_LIGHTING_PRESETS.cleanStudio.settings };\n\nexport const CHARACTER_SCENE_TYPES = {\n studio: { id: 'studio', label: 'Studio', description: 'Transparent background, soft studio lighting, ground shadow.', background: null, lightingPreset: 'cleanStudio', shadowPlane: true },\n showcase: { id: 'showcase', label: 'Showcase', description: 'Dark backdrop with contrasty key/rim lighting for presentation shots.', background: 0x101216, lightingPreset: 'contrast', shadowPlane: true },\n inspection: { id: 'inspection', label: 'Inspection', description: 'Bright, even lighting on a light backdrop for close-up review.', background: 0xe8eaed, lightingPreset: 'inspection', shadowPlane: true },\n void: { id: 'void', label: 'Void', description: 'Transparent background, soft fill lighting, no ground shadow.', background: null, lightingPreset: 'softFill', shadowPlane: false },\n} as const;\nexport type CharacterSceneTypeId = keyof typeof CHARACTER_SCENE_TYPES;\nexport const CHARACTER_SCENE_TYPE_IDS = Object.keys(CHARACTER_SCENE_TYPES) as CharacterSceneTypeId[];\nexport const DEFAULT_CHARACTER_SCENE_TYPE_ID: CharacterSceneTypeId = 'studio';\n\nexport type DefaultCharacterSceneOptions = {\n type?: CharacterSceneTypeId;\n background?: ColorRepresentation | null;\n cameraFov?: number;\n pixelRatioCap?: number;\n shadows?: boolean;\n lightingPreset?: DefaultCharacterLightingPresetId;\n lighting?: Partial<DefaultCharacterLightingSettings>;\n shadowPlane?: boolean;\n manageResize?: boolean;\n};\n/** Saved per-character appearance; renderer preference and DOM ownership stay separate. */\nexport type CharacterSceneConfiguration = Pick<DefaultCharacterSceneOptions,\n 'type' | 'cameraFov' | 'shadows' | 'lightingPreset' | 'lighting' | 'shadowPlane'> & {\n background?: string | number | null;\n };\n\nexport type DefaultCharacterSceneAsyncOptions = DefaultCharacterSceneOptions & {\n /** Auto (default) tries native WebGPU initialization, then falls back to WebGL. */\n renderer?: CharacterSceneRendererPreference;\n /** Persistent settings take precedence over the legacy renderer option. */\n rendering?: Partial<CharacterSceneRenderingSettings>;\n /** Cancels construction, not ownership of a successfully returned scene. */\n signal?: AbortSignal;\n /** Compatibility notification; rendering snapshots also expose device loss. */\n onDeviceLost?: (error: Error) => void;\n};\n\nexport type CharacterSceneRenderer = WebGLRenderer | WebGPURenderer;\nexport type CharacterSceneBackend = 'webgl' | 'webgpu';\nexport type CharacterSceneRendererPreference = 'auto' | CharacterSceneBackend;\n\ntype CharacterScene<R extends CharacterSceneRenderer> = {\n container: HTMLElement;\n scene: Scene;\n renderer: R;\n camera: PerspectiveCamera;\n lighting: ReturnType<typeof createDefaultCharacterLighting>;\n shadowPlane: ReturnType<typeof createShadowPlane> | null;\n sceneType: CharacterSceneTypeId;\n ownsScene: true;\n resize: () => void;\n setSceneSettings: (settings: CharacterSceneConfiguration) => void;\n dispose: () => void;\n};\n\nexport type DefaultCharacterScene = CharacterScene<WebGLRenderer>;\nexport type CharacterSceneRenderingSettings = { preference: CharacterSceneRendererPreference };\nexport type CharacterSceneRenderingStatus = 'initializing' | 'switching' | 'ready' | 'error' | 'lost' | 'disposed';\nexport type CharacterSceneRenderingSnapshot = {\n readonly settings: CharacterSceneRenderingSettings;\n readonly status: CharacterSceneRenderingStatus;\n readonly error: Error | null;\n} & (\n | { readonly backend: 'webgl'; readonly renderer: WebGLRenderer }\n | { readonly backend: 'webgpu'; readonly renderer: WebGPURenderer }\n | { readonly backend: null; readonly renderer: null }\n);\nexport type CharacterSceneRendererLease = { readonly renderer: CharacterSceneRenderer; release(): void };\nexport interface CharacterSceneRenderingController {\n getSettings(): CharacterSceneRenderingSettings;\n getSnapshot(): CharacterSceneRenderingSnapshot;\n setSettings(patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot>;\n subscribe(listener: (snapshot: CharacterSceneRenderingSnapshot) => void): () => void;\n /** Borrow for capture/readback; release in finally. Unavailable during switching/loss. */\n acquireRenderer(): CharacterSceneRendererLease;\n /** Drain borrowed work, then synchronously detach/free caller-owned resources, even after loss/disposal. */\n releaseSceneResources(release: () => void): Promise<void>;\n}\nexport type DefaultCharacterSceneRuntimeOptions = DefaultCharacterSceneAsyncOptions;\nexport type DefaultCharacterSceneRuntime = Omit<CharacterScene<CharacterSceneRenderer>, 'renderer' | 'dispose'> & {\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n dispose(): Promise<void>;\n readonly rendering: CharacterSceneRenderingController;\n readonly ready: Promise<CharacterSceneRenderingSnapshot>;\n};\nexport type ReadyDefaultCharacterScene = (\n | (Omit<DefaultCharacterScene, 'dispose'> & { readonly backend: 'webgl' })\n | (Omit<CharacterScene<WebGPURenderer>, 'dispose'> & { readonly backend: 'webgpu' })\n) & { readonly rendering: CharacterSceneRenderingController; dispose(): Promise<void> };\n\n// Register each resource as it is acquired. A failing disposer must not prevent\n// later resources from being released, and repeated disposal is harmless.\nfunction createDisposer() {\n const callbacks: Array<() => void> = [];\n let disposed = false;\n return {\n add: (callback: () => void) => { callbacks.push(callback); },\n isDisposed: () => disposed,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n let failed = false;\n let firstError: unknown;\n for (const callback of callbacks.reverse()) {\n try { callback(); } catch (error) {\n if (!failed) firstError = error;\n failed = true;\n }\n }\n callbacks.length = 0;\n if (failed) throw firstError;\n },\n };\n}\n\nfunction rollback(dispose: () => void) {\n // Preserve the construction/preparation error after attempting all cleanup.\n try { dispose(); } catch { /* The original failure is more useful to callers. */ }\n}\n\nconst finite = (value: unknown, min: number, max: number, fallback: number) => {\n const number = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(number) ? MathUtils.clamp(number, min, max) : fallback;\n};\n\nconst normalize = (value: Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>): DefaultCharacterLightingSettings => ({\n envMapEnabled: typeof value.envMapEnabled === 'boolean' ? value.envMapEnabled : DEFAULT_CHARACTER_LIGHTING_SETTINGS.envMapEnabled,\n environmentIntensity: finite(value.environmentIntensity, 0, 1.5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentIntensity),\n environmentBlur: finite(value.environmentBlur, 0, .04, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentBlur),\n exposure: finite(value.exposure, .6, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.exposure),\n ambientIntensity: finite(value.ambientIntensity, 0, 1.4, DEFAULT_CHARACTER_LIGHTING_SETTINGS.ambientIntensity),\n keyIntensity: finite(value.keyIntensity, 0, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.keyIntensity),\n fillIntensity: finite(value.fillIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.fillIntensity),\n rimIntensity: finite(value.rimIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.rimIntensity),\n shadowOpacity: finite(value.shadowOpacity, 0, .5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.shadowOpacity),\n});\n\nexport const normalizeDefaultCharacterLightingSettings = (value: unknown) =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? normalize(value as Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>)\n : null;\n\nexport function createShadowPlane(scene: Scene, options: { size?: number; opacity?: number; yPosition?: number } = {}) {\n const plane = new Mesh(new PlaneGeometry(options.size ?? 20, options.size ?? 20), new ShadowMaterial({ opacity: options.opacity ?? .3 }));\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = options.yPosition ?? -.01;\n plane.receiveShadow = true;\n plane.name = 'shadowPlane';\n scene.add(plane);\n return plane;\n}\n\nexport function createDefaultCharacterLighting(scene: Scene, renderer: WebGLRenderer, initial: Partial<DefaultCharacterLightingSettings> = {}) {\n return createCharacterLighting(scene, renderer, () => new PMREMGenerator(renderer), initial);\n}\n\ntype ScenePMREM = { fromScene(scene: Scene, sigma?: number): RenderTarget; dispose(): void };\n\ntype LightingRenderer = {\n renderer: CharacterSceneRenderer;\n pmrem: ScenePMREM;\n environment: RenderTarget | null;\n revision: number;\n dispose(): void;\n};\n\nfunction createCharacterLighting(scene: Scene, renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM, initial: Partial<DefaultCharacterLightingSettings>) {\n const lighting = createMutableCharacterLighting(scene, initial);\n try { lighting.commit(lighting.prepare(renderer, createPMREM)); return lighting.controller; }\n catch (error) { rollback(lighting.controller.dispose); throw error; }\n}\n\n/** Lights/settings stay stable; only backend-specific environment resources move. */\nfunction createMutableCharacterLighting(scene: Scene, initial: Partial<DefaultCharacterLightingSettings>) {\n const lifetime = createDisposer();\n try {\n const ambient = new HemisphereLight(0xf7fbff, 0x6b7280, 0);\n const key = new DirectionalLight(0xfffbf4, 0);\n const fill = new DirectionalLight(0xe8f0ff, 0);\n const rim = new DirectionalLight(0xdde8ff, 0);\n ambient.name = 'embodyCharacterAmbientHemisphereLight'; ambient.position.set(0, 8, 0);\n key.name = 'embodyCharacterKeyLight'; key.position.set(4.5, 7.5, 6.2); key.castShadow = true;\n key.shadow.mapSize.set(2048, 2048); Object.assign(key.shadow.camera, { near: .5, far: 50, left: -10, right: 10, top: 10, bottom: -10 }); key.shadow.bias = -.0001; key.shadow.radius = 4;\n fill.name = 'embodyCharacterFillLight'; fill.position.set(-5.5, 4.2, 4.5);\n rim.name = 'embodyCharacterRimLight'; rim.position.set(-3.5, 4.8, -5.4);\n lifetime.add(() => scene.remove(ambient, key, fill, rim));\n for (const light of [key, fill, rim]) lifetime.add(() => light.dispose());\n scene.add(ambient, key, fill, rim);\n const listeners = new Set<(value: DefaultCharacterLightingSettings) => void>();\n lifetime.add(() => listeners.clear());\n let active: LightingRenderer | null = null;\n let held = false;\n let closed = false;\n let revision = 0;\n let settings = normalize({ ...DEFAULT_CHARACTER_LIGHTING_SETTINGS, ...initial });\n lifetime.add(() => { scene.environment = null; active?.dispose(); active = null; });\n const rebuild = (target: LightingRenderer) => {\n let environment: RenderTarget | null = null;\n if (settings.envMapEnabled) {\n const room = new RoomEnvironment();\n try { environment = target.pmrem.fromScene(room, settings.environmentBlur); } finally { room.dispose(); }\n }\n target.environment?.dispose(); target.environment = environment; target.revision = revision;\n };\n const show = (target: LightingRenderer | null) => {\n if (target) {\n target.renderer.outputColorSpace = SRGBColorSpace;\n target.renderer.toneMapping = ACESFilmicToneMapping;\n target.renderer.toneMappingExposure = settings.exposure;\n }\n scene.environment = target?.environment?.texture ?? null;\n scene.environmentIntensity = settings.envMapEnabled ? settings.environmentIntensity : 0;\n ambient.intensity = settings.ambientIntensity; key.intensity = settings.keyIntensity; fill.intensity = settings.fillIntensity; rim.intensity = settings.rimIntensity;\n const plane = scene.getObjectByName('shadowPlane') as Mesh | undefined;\n for (const material of plane ? (Array.isArray(plane.material) ? plane.material : [plane.material]) : []) if (material instanceof ShadowMaterial) material.opacity = settings.shadowOpacity;\n };\n const prepare = (renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM): LightingRenderer => {\n const resources = createDisposer();\n try {\n const pmrem = createPMREM(); resources.add(() => pmrem.dispose());\n const target: LightingRenderer = { renderer, pmrem, environment: null, revision, dispose: resources.dispose };\n resources.add(() => { target.environment?.dispose(); target.environment = null; });\n rebuild(target); return target;\n } catch (error) { rollback(resources.dispose); throw error; }\n };\n const setSettings = (patch: Partial<DefaultCharacterLightingSettings>) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n const previous = settings; settings = normalize({ ...settings, ...patch }); revision++;\n if (!held) {\n if (active && (previous.envMapEnabled !== settings.envMapEnabled || previous.environmentBlur !== settings.environmentBlur)) rebuild(active);\n show(active);\n }\n listeners.forEach((listener) => listener({ ...settings })); return { ...settings };\n };\n show(null);\n const controller = {\n getSettings: () => ({ ...settings }), getEnvironmentTexture: (): Texture | null => active?.environment?.texture ?? null,\n setSettings, setPreset: (id: DefaultCharacterLightingPresetId) => setSettings(DEFAULT_CHARACTER_LIGHTING_PRESETS[id]?.settings ?? {}),\n subscribe: (listener: (value: DefaultCharacterLightingSettings) => void) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n listeners.add(listener); listener({ ...settings }); return () => { listeners.delete(listener); };\n },\n dispose: lifetime.dispose,\n };\n return {\n controller, prepare, show, close: () => { closed = true; }, revision: () => revision,\n hold: () => { held = true; },\n restore: () => {\n held = false;\n try { if (active && active.revision !== revision) rebuild(active); } finally { show(active); }\n },\n commit: (target: LightingRenderer) => {\n const previous = active; active = target; held = false; show(active);\n return previous;\n },\n };\n } catch (error) { rollback(lifetime.dispose); throw error; }\n}\n\nfunction constructDefaultCharacterScene<R extends CharacterSceneRenderer>(\n container: HTMLElement,\n options: DefaultCharacterSceneOptions,\n renderer: R,\n disposeRenderer: () => void,\n createLighting: (scene: Scene, settings: Partial<DefaultCharacterLightingSettings>) => ReturnType<typeof createDefaultCharacterLighting>,\n) {\n const lifetime = createDisposer();\n lifetime.add(disposeRenderer);\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const width = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const height = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n const ratio = () => Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5);\n renderer.setPixelRatio(ratio()); renderer.setSize(width, height, true); renderer.shadowMap.enabled = options.shadows ?? true; renderer.shadowMap.type = PCFShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n const scene = new Scene(); const background = options.background === undefined ? sceneType.background : options.background; scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, width / height, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(() => lighting.dispose());\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (lifetime.isDisposed()) return;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.setSettings({ ...preset.settings, ...value.lighting });\n renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const resize = () => {\n if (lifetime.isDisposed()) return;\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(ratio()); renderer.setSize(w, h, false);\n };\n const handle: CharacterScene<R> = { container, scene, renderer, camera, lighting, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true, resize, setSceneSettings, dispose: lifetime.dispose };\n const attach = () => {\n lifetime.add(() => { if (renderer.domElement.parentElement === container) container.removeChild(renderer.domElement); });\n container.appendChild(renderer.domElement);\n if (options.manageResize !== false) {\n lifetime.add(() => globalThis.removeEventListener?.('resize', resize));\n globalThis.addEventListener?.('resize', resize);\n }\n };\n return { handle, attach };\n } catch (error) {\n rollback(lifetime.dispose);\n throw error;\n }\n}\n\n/** The existing synchronous WebGL path; it does not wait for shader compilation. */\nexport function createDefaultCharacterScene(container: HTMLElement, options: DefaultCharacterSceneOptions = {}): DefaultCharacterScene {\n const { handle, attach } = constructWebGLScene(container, options);\n try { attach(); return handle; } catch (error) {\n rollback(handle.dispose);\n throw error;\n }\n}\n\nfunction constructWebGLScene(container: HTMLElement, options: DefaultCharacterSceneOptions) {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n return constructDefaultCharacterScene(container, options, renderer, () => renderer.dispose(),\n (scene, settings) => createDefaultCharacterLighting(scene, renderer, settings));\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n if (signal?.aborted) throw new DOMException('Character scene creation was aborted.', 'AbortError');\n}\n\ntype RendererCandidate = (\n | { backend: 'webgl'; renderer: WebGLRenderer }\n | { backend: 'webgpu'; renderer: WebGPURenderer }\n) & { createPMREM(): ScenePMREM; dispose(): void; lost: Error | null };\n\nfunction acquireWebGLRenderer(): RendererCandidate {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const lifetime = createDisposer(); lifetime.add(() => renderer.dispose());\n return { backend: 'webgl', renderer, createPMREM: () => new PMREMGenerator(renderer), dispose: lifetime.dispose, lost: null };\n}\n\n// @types/three r184 omits this backend capability, which failed init still owns.\nfunction disposeBackend(backend: object) {\n if ('dispose' in backend && typeof backend.dispose === 'function') backend.dispose();\n}\n\nasync function acquireNativeRenderer(check: () => void, onLoss: (candidate: RendererCandidate) => void): Promise<RendererCandidate> {\n const lifetime = createDisposer();\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator) || !navigator.gpu) {\n throw new Error('WebGPU is unavailable. Use WebGL or a browser with WebGPU in a secure context.');\n }\n const { WebGPURenderer, PMREMGenerator: WebGPUPMREMGenerator } = await import('three/webgpu');\n check();\n const renderer = new WebGPURenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const initialBackend = renderer.backend;\n const candidate: RendererCandidate = {\n backend: 'webgpu', renderer, lost: null,\n createPMREM: () => new WebGPUPMREMGenerator(renderer), dispose: lifetime.dispose,\n };\n const originalDeviceLost = renderer.onDeviceLost.bind(renderer);\n renderer.onDeviceLost = (info) => {\n originalDeviceLost(info);\n if (lifetime.isDisposed() || candidate.lost) return;\n candidate.lost = new Error(`WebGPU device lost: ${info.message || 'Unknown reason'}`);\n onLoss(candidate);\n };\n lifetime.add(() => {\n try {\n if (renderer.hasInitialized()) renderer.dispose();\n else disposeBackend(renderer.backend);\n } finally {\n if (renderer.backend !== initialBackend) disposeBackend(initialBackend);\n }\n });\n await renderer.init(); check();\n if (candidate.lost) throw candidate.lost;\n if (!('isWebGPUBackend' in renderer.backend) || renderer.backend.isWebGPUBackend !== true) {\n throw new Error('Native WebGPU initialization failed; Three selected WebGL2. Select WebGL to retry.');\n }\n return candidate;\n } catch (error) { rollback(lifetime.dispose); check(); throw error; }\n}\n\nfunction renderingAborted() { return new DOMException('Character scene renderer request was cancelled.', 'AbortError'); }\nfunction rendererPreference(value: unknown): CharacterSceneRendererPreference {\n if (value === 'auto' || value === 'webgl' || value === 'webgpu') return value;\n throw new Error(`Unsupported character scene renderer: ${String(value)}`);\n}\n\n/** Three's WebGPU renderer changes these cameras; WebGLRenderer does not undo it. */\nfunction prepareCameraCoordinates(scene: Scene, camera: PerspectiveCamera, backend: CharacterSceneBackend): () => void {\n const cameras = new Set<PerspectiveCamera | OrthographicCamera>([camera]);\n const shadows: LightShadow<PerspectiveCamera | OrthographicCamera>[] = [];\n scene.traverse(object => {\n const light = object as Light & { shadow?: LightShadow<PerspectiveCamera | OrthographicCamera> };\n if (light.isLight && light.shadow) {\n cameras.add(light.shadow.camera);\n shadows.push(light.shadow);\n }\n });\n const previous = Array.from(cameras, current => [current, current.coordinateSystem] as const);\n const apply = (current: PerspectiveCamera | OrthographicCamera, coordinates: CoordinateSystem) => {\n current.coordinateSystem = coordinates;\n current.updateProjectionMatrix();\n };\n const coordinates = backend === 'webgpu' ? WebGPUCoordinateSystem : WebGLCoordinateSystem;\n cameras.forEach(current => apply(current, coordinates));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n return () => {\n previous.forEach(([current, original]) => apply(current, original));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n };\n}\n\n/** Stable scene ownership, including a recoverable initial renderer failure. */\nexport function createDefaultCharacterSceneRuntime(\n container: HTMLElement,\n options: DefaultCharacterSceneRuntimeOptions = {},\n): DefaultCharacterSceneRuntime {\n throwIfAborted(options.signal);\n const lifetime = createDisposer();\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const scene = new Scene();\n const background = options.background === undefined ? sceneType.background : options.background;\n scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, 1, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createMutableCharacterLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(lighting.controller.dispose);\n let shadowsEnabled = options.shadows ?? true;\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.controller.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n let settings: CharacterSceneRenderingSettings = { preference: rendererPreference(options.rendering?.preference ?? options.renderer ?? 'auto') };\n let active: RendererCandidate | null = null;\n let candidateInUse: RendererCandidate | null = null;\n let status: CharacterSceneRenderingStatus = 'initializing';\n let error: Error | null = null;\n let disposed = false;\n let disposal: Promise<void> | null = null;\n let generation = 0;\n let pending: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let pendingRendererChange: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let leaseCount = 0;\n let pendingResourceReleases = 0;\n let leasesReleased: (() => void) | null = null;\n let leaseBarrier: Promise<void> | null = null;\n let resizeAttached = false;\n const listeners = new Set<(snapshot: CharacterSceneRenderingSnapshot) => void>();\n const getSnapshot = (): CharacterSceneRenderingSnapshot => {\n const common = { settings: { ...settings }, status, error };\n if (active?.backend === 'webgl') return { ...common, backend: 'webgl', renderer: active.renderer };\n if (active?.backend === 'webgpu') return { ...common, backend: 'webgpu', renderer: active.renderer };\n return { ...common, backend: null, renderer: null };\n };\n const notify = () => {\n const snapshot = getSnapshot();\n for (const listener of listeners) {\n try { listener(snapshot); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n }\n };\n const sizeRenderer = (renderer: CharacterSceneRenderer, style = false) => {\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5));\n renderer.setSize(w, h, style);\n };\n const resize = () => { if (!disposed && active) sizeRenderer(active.renderer); };\n lifetime.add(() => { if (resizeAttached) globalThis.removeEventListener?.('resize', resize); });\n const onLoss = (candidate: RendererCandidate) => {\n if (disposed || candidate !== active) return;\n status = status === 'switching' ? 'switching' : 'lost'; error = candidate.lost;\n void Promise.resolve().then(() => candidate.renderer.setAnimationLoop(null)).catch(() => undefined);\n void owner.binding?.suspend().catch((failure) => console.error('Character renderer suspension failed.', failure));\n notify();\n try { options.onDeviceLost?.(candidate.lost!); } catch (failure) { console.error('Character scene device-loss callback failed.', failure); }\n };\n const setSettings = (patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot> => {\n if (disposed) return Promise.reject(renderingAborted());\n let preference: CharacterSceneRendererPreference;\n try { preference = patch.preference === undefined ? settings.preference : rendererPreference(patch.preference); }\n catch (failure) { return Promise.reject(failure); }\n if (pendingRendererChange && preference === settings.preference && (status === 'initializing' || status === 'switching')) return pendingRendererChange;\n if (status === 'ready' && preference === settings.preference) return Promise.resolve(getSnapshot());\n settings = { preference };\n const request = ++generation;\n const previous = pending;\n status = active ? 'switching' : 'initializing'; error = null;\n const execute = async (): Promise<CharacterSceneRenderingSnapshot> => {\n let candidate: RendererCandidate | null = null;\n let environment: LightingRenderer | null = null;\n let suspended = false;\n let attached = false;\n let restoreCameraCoordinates = () => {};\n let restoreModelSkinning = () => {};\n const check = () => {\n if (disposed || generation !== request) throw renderingAborted();\n if (!active) throwIfAborted(options.signal);\n if (candidate?.lost) throw candidate.lost;\n };\n try {\n check();\n if (preference === 'webgl') candidate = acquireWebGLRenderer();\n else {\n try { candidate = await acquireNativeRenderer(check, onLoss); }\n catch (failure) {\n check();\n if (preference !== 'auto' || (failure instanceof Error && failure.name === 'AbortError')) throw failure;\n candidate = acquireWebGLRenderer();\n }\n }\n check();\n candidateInUse = candidate;\n const renderer = candidate.renderer;\n sizeRenderer(renderer, true);\n renderer.shadowMap.enabled = shadowsEnabled;\n // WebGL PCF is already soft in supported Three versions; the old\n // constant warns and is replaced on the first draw. Keep native filtering.\n renderer.shadowMap.type = candidate.backend === 'webgl' ? PCFShadowMap : PCFSoftShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n if (leaseCount) await leaseBarrier;\n check();\n if (owner.drain) await owner.drain;\n check();\n if (owner.binding) { suspended = true; await owner.binding.suspend(); }\n check();\n restoreCameraCoordinates = prepareCameraCoordinates(scene, camera, candidate.backend);\n restoreModelSkinning = prepareModelSkinning(scene);\n lighting.hold();\n // Environment changes during asynchronous compilation are deferred. If\n // authored settings changed meanwhile, prepare that revision before commit.\n do {\n environment?.dispose(); environment = lighting.prepare(renderer, candidate.createPMREM);\n lighting.show(environment);\n if (typeof renderer.compileAsync !== 'function') throw new Error('Async character scenes require Three.js WebGLRenderer.compileAsync.');\n await renderer.compileAsync(scene, camera); check();\n if (owner.binding) await owner.binding.prepare(renderer);\n else if (active) renderer.render(scene, camera);\n check();\n } while (environment.revision !== lighting.revision());\n sizeRenderer(renderer);\n // Stage the new canvas before removing the old one. A failed attach\n // or library binding leaves the old scene/renderer available.\n attached = true; container.appendChild(renderer.domElement);\n if (!resizeAttached && options.manageResize !== false) {\n resizeAttached = true; globalThis.addEventListener?.('resize', resize);\n }\n check();\n await owner.binding?.commit(renderer);\n check();\n const oldRenderer = active;\n const oldEnvironment = lighting.commit(environment); environment = null;\n active = candidate; candidate = null; attached = false;\n rollback(() => { if (oldRenderer?.renderer.domElement.parentElement === container) container.removeChild(oldRenderer.renderer.domElement); });\n rollback(() => oldEnvironment?.dispose());\n rollback(() => oldRenderer?.dispose());\n status = 'ready'; error = null;\n const snapshot = getSnapshot(); notify(); return snapshot;\n } catch (failure) {\n if (suspended) {\n try { await owner.binding?.suspend(); } catch { /* Preserve the switch failure. */ }\n if (owner.drain) await owner.drain.catch(() => undefined);\n }\n if (attached && candidate?.renderer.domElement.parentElement === container) container.removeChild(candidate.renderer.domElement);\n rollback(() => environment?.dispose());\n rollback(() => candidate?.dispose());\n const canceled = disposed || generation !== request || (!active && options.signal?.aborted);\n if (!disposed) {\n rollback(restoreModelSkinning);\n rollback(restoreCameraCoordinates);\n rollback(lighting.restore);\n if (suspended && active && !active.lost) {\n try { await owner.binding?.commit(active.renderer); } catch (resumeError) { owner.reportFailure(resumeError, active.renderer); }\n }\n if (generation === request) {\n status = active?.lost ? 'lost' : 'error';\n error = failure instanceof Error ? failure : new Error(String(failure)); notify();\n }\n }\n if (canceled) throw renderingAborted();\n throw failure;\n } finally { candidateInUse = null; }\n };\n const operation = previous ? previous.catch(() => undefined).then(execute) : Promise.resolve().then(execute);\n pending = operation;\n pendingRendererChange = operation;\n notify();\n const settled = () => {\n if (pending === operation) pending = null;\n if (pendingRendererChange === operation) pendingRendererChange = null;\n };\n void operation.then(settled, settled);\n return operation;\n };\n const rendering: CharacterSceneRenderingController = {\n getSettings: () => ({ ...settings }), getSnapshot, setSettings,\n subscribe: (listener) => {\n if (disposed) throw new Error('Character scene rendering has been disposed.');\n listeners.add(listener);\n try { listener(getSnapshot()); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n return () => { listeners.delete(listener); };\n },\n acquireRenderer: () => {\n if (!active || active.lost || disposed || pendingResourceReleases || (status !== 'ready' && status !== 'error')) throw new Error('Character renderer is not available for capture.');\n if (leaseCount++ === 0) leaseBarrier = new Promise<void>((resolve) => { leasesReleased = resolve; });\n let released = false;\n return { renderer: active.renderer, release: () => {\n if (released) return; released = true;\n if (--leaseCount === 0) { leasesReleased?.(); leasesReleased = null; leaseBarrier = null; }\n } };\n },\n releaseSceneResources: (release) => {\n // Disposal already owns the drain. A later caller can free its resources\n // once that completion settles, including when owned cleanup failed.\n if (disposal) return disposal.then(release, release);\n const previous = pending;\n pendingResourceReleases++;\n const operation = Promise.resolve(previous).catch(() => undefined).then(async () => {\n if (leaseCount) await leaseBarrier;\n if (owner.drain) await owner.drain.catch(() => undefined);\n if (owner.binding) {\n await owner.binding.suspend().catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n try {\n release();\n } finally {\n if (!disposed && active && !active.lost) {\n await owner.binding?.commit(active.renderer).catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n }\n return getSnapshot();\n }).finally(() => { pendingResourceReleases--; });\n // Serialize release with replacement so a recovery requested during the\n // drain cannot compile resources that the callback is about to free.\n pending = operation;\n void operation.then(() => { if (pending === operation) pending = null; }, () => { if (pending === operation) pending = null; });\n return operation.then(() => undefined);\n },\n };\n const owner = registerSceneRendering(rendering, scene, camera, () => pending, (failure, renderer) => {\n if (disposed) return;\n const problem = failure instanceof Error ? failure : new Error(String(failure));\n if (candidateInUse && renderer === candidateInUse.renderer && renderer !== active?.renderer) { candidateInUse.lost = problem; return; }\n if (active) active.lost = problem;\n status = active ? 'lost' : 'error'; error = problem;\n void owner.binding?.suspend().catch(() => undefined);\n notify();\n });\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n let resolve!: () => void;\n let reject!: (failure: unknown) => void;\n disposal = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n void disposal.catch(() => undefined);\n disposed = true; owner.disposed = true; generation++; lighting.close();\n status = 'disposed'; notify(); listeners.clear();\n const drain = owner.binding?.suspend() ?? owner.drain;\n const cleanup = () => {\n try {\n if (active?.renderer.domElement.parentElement === container) container.removeChild(active.renderer.domElement);\n try { lifetime.dispose(); } finally { active?.dispose(); }\n resolve();\n } catch (failure) { reject(failure); }\n };\n // Callers await this before releasing borrowed character resources. The\n // same completion also drains captures and a recently disposed camera.\n if (pending || leaseCount || drain) void Promise.allSettled([pending, drain, leaseBarrier]).then(cleanup);\n else cleanup();\n return disposal;\n };\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (disposed) return;\n shadowsEnabled = value.shadows ?? true;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.controller.setSettings({ ...preset.settings, ...value.lighting });\n if (active) active.renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const ready = setSettings(settings);\n return { container, scene, camera, lighting: lighting.controller, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true,\n rendering, ready, get renderer() { return active?.renderer ?? null; }, get backend() { return active?.backend ?? null; }, resize, setSceneSettings, dispose };\n } catch (failure) { rollback(lifetime.dispose); throw failure; }\n}\n\n/** Compatibility factory: failure releases all owned resources. Use the runtime factory for initial retry. */\nexport async function createDefaultCharacterSceneAsync(\n container: HTMLElement,\n options: DefaultCharacterSceneAsyncOptions = {},\n): Promise<ReadyDefaultCharacterScene> {\n const runtime = createDefaultCharacterSceneRuntime(container, options);\n try {\n const snapshot = await runtime.ready;\n if (!snapshot.renderer) throw new Error('Character scene renderer was not initialized.');\n const handle: ReadyDefaultCharacterScene = snapshot.backend === 'webgl'\n ? { ...runtime, renderer: snapshot.renderer, backend: 'webgl' }\n : { ...runtime, renderer: snapshot.renderer, backend: 'webgpu' };\n // Existing callers keep their non-null contract after first success. Read\n // rendering.getSnapshot() when an atomic backend/renderer pair is needed.\n Object.defineProperties(handle, {\n renderer: { get: () => runtime.renderer }, backend: { get: () => runtime.backend },\n shadowPlane: { get: () => runtime.shadowPlane }, sceneType: { get: () => runtime.sceneType },\n });\n return handle;\n } catch (failure) {\n try { await runtime.dispose(); } catch { /* Preserve acquisition failure. */ }\n throw failure;\n }\n}\n","import { PerspectiveCamera } from 'three';\nimport { createSceneInkBackground } from './sceneInkBackground';\nimport { resolveCharacterMaterialPalette, resolveCharacterTexturePalette } from './characterTexturePalette';\nimport type { Camera, Scene } from 'three';\nimport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { Embody } from './character';\nimport type { RustEmbodyHostConfig } from './character';\nimport { loadCharacterModel, applyCharacterModelTransform, disposeCharacterModel } from './model';\nimport type { CharacterModelLoadOptions, CharacterModelLoadResult, CharacterModelTransform } from './model';\nimport { normalizeRenderableCharacterMorphAttributes, assertRenderableCharacterMorphAttributes } from './modelMorphLayout';\nimport { validateMappings } from './authoring';\nimport { createDefaultCharacterSceneAsync } from './scene';\nimport type { CharacterSceneBackend, CharacterSceneConfiguration, CharacterSceneRenderer, CharacterSceneRenderingController, DefaultCharacterSceneAsyncOptions, ReadyDefaultCharacterScene } from './scene';\nimport { ThreeAnnotationController } from './annotations/ThreeAnnotationController';\nimport type { AnnotationCharacterConfig, ThreeAnnotationControllerConfig } from './annotations/types';\nimport type { Profile } from './authoringTypes';\n\nexport interface CharacterHostCharacterOptions extends CharacterModelTransform {\n modelUrl: string;\n presetType?: string;\n profile?: Partial<Profile>;\n annotationConfig?: AnnotationCharacterConfig;\n scene?: CharacterSceneConfiguration;\n}\nexport interface CharacterHostExternalScene {\n scene: Scene;\n renderer: CharacterSceneRenderer;\n backend?: CharacterSceneBackend;\n rendering?: CharacterSceneRenderingController;\n camera: Camera;\n mountCanvas?: boolean;\n manageResize?: boolean;\n setSceneSettings?: (settings: CharacterSceneConfiguration) => void;\n}\nexport type CharacterHostModelLoader = (modelUrl: string, options: CharacterModelLoadOptions & { signal: AbortSignal }) => Promise<CharacterModelLoadResult>;\nexport type CharacterHostPreparation = CharacterModelLoadResult & {\n engine: Embody;\n character: CharacterHostCharacterOptions;\n signal: AbortSignal;\n};\nexport type CharacterHostReady = CharacterHostPreparation & {\n scene: Scene;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n rendering: CharacterSceneRenderingController | null;\n};\nexport interface CharacterHostOptions {\n signal?: AbortSignal;\n container: HTMLElement;\n character: CharacterHostCharacterOptions;\n embody?: RustEmbodyHostConfig;\n scene?: Omit<DefaultCharacterSceneAsyncOptions, 'signal'>;\n external?: CharacterHostExternalScene;\n loader?: CharacterModelLoadOptions;\n /** Storage authorization and byte caching remain with the application. */\n loadModel?: CharacterHostModelLoader;\n /** Replays authored mesh edits through the bound engine before GPU preparation. */\n prepareCharacter?: (context: CharacterHostPreparation) => void | Promise<void>;\n onCharacterReady?: (context: CharacterHostReady) => void | Promise<void>;\n /** Default true for compatibility. Editors can retain clips in a lazy catalog. */\n registerEmbeddedAnimations?: boolean;\n camera?: Omit<Partial<ThreeAnnotationControllerConfig>, 'scene' | 'camera' | 'renderer' | 'rendering' | 'domElement'>;\n autoStart?: boolean;\n renderLoop?: boolean;\n autoFrame?: boolean;\n}\nexport interface CharacterHost extends CharacterModelLoadResult {\n engine: Embody;\n scene: Scene;\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n readonly rendering: CharacterSceneRenderingController | null;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n lighting: ReadyDefaultCharacterScene['lighting'] | null;\n ownsScene: boolean;\n container: HTMLElement;\n setCharacter(character: CharacterHostCharacterOptions, loader?: CharacterModelLoadOptions, signal?: AbortSignal): Promise<void>;\n resize(): void;\n dispose(): Promise<void>;\n}\n\n/** Acquire, prepare and reveal a character using the existing native render owner. */\nexport async function createCharacterHost(options: CharacterHostOptions): Promise<CharacterHost> {\n if (!options.container) throw new Error('createCharacterHost requires a container HTMLElement');\n if (!options.character?.modelUrl) throw new Error('createCharacterHost requires character.modelUrl');\n let loaded: CharacterModelLoadResult | undefined;\n let state: ReadyDefaultCharacterScene | CharacterHostExternalScene | undefined;\n let engine: Embody | undefined;\n let controller: ThreeAnnotationController | undefined;\n let host: CharacterHost | undefined;\n let disposed = false;\n let disposal: Promise<void> | undefined;\n let switching: Promise<void> = Promise.resolve();\n let activeChange: AbortController | undefined;\n let request = 0;\n let mountedCanvas: HTMLCanvasElement | undefined;\n const previousBackground = options.container.style?.background ?? '';\n let backgroundRevision = 0;\n const applyCharacterBackground = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n const revision = ++backgroundRevision;\n const settings = sceneSettings(character);\n // Explicit appearance (including transparency) and external scenes remain authoritative.\n const usePalette = !options.external && settings.background === undefined\n && (settings.type === undefined || settings.type === 'studio');\n if (options.container.style) options.container.style.background = previousBackground;\n if (!usePalette) return;\n const background = createSceneInkBackground(css => {\n if (!disposed && revision === backgroundRevision && options.container.style) options.container.style.background = css;\n });\n const key = character.modelUrl;\n const materialPalette = resolveCharacterMaterialPalette(value.model, key);\n background.setPalette(materialPalette);\n void resolveCharacterTexturePalette(value.model, key).then(palette => {\n background.setPalette(palette ?? materialPalette);\n background.dispose();\n });\n };\n const visibility = new WeakMap<CharacterModelLoadResult['model'], boolean>();\n const lifetime = new AbortController();\n const initial = new AbortController();\n activeChange = initial;\n const aborted = () => new DOMException('Character host request was cancelled', 'AbortError');\n const cancel = () => { lifetime.abort(); activeChange?.abort(); };\n const cancelCreation = () => initial.abort();\n options.signal?.addEventListener('abort', cancelCreation, { once: true });\n if (options.signal?.aborted) cancelCreation();\n const check = (signal: AbortSignal) => { if (disposed || lifetime.signal.aborted || signal.aborted) throw aborted(); };\n const releaseModel = async (value: CharacterModelLoadResult) => {\n const release = () => disposeCharacterModel(state?.scene ?? null, value.model);\n if (state?.rendering) await state.rendering.releaseSceneResources(release);\n else release();\n };\n const acquireModel = (character: CharacterHostCharacterOptions, loader: CharacterModelLoadOptions | undefined, signal: AbortSignal) =>\n (options.loadModel ?? loadCharacterModel)(character.modelUrl, { ...loader, signal });\n const sceneSettings = (character: CharacterHostCharacterOptions): CharacterSceneConfiguration => {\n const { background, ...value } = { ...options.scene, ...character.scene };\n // Runtime factory options also accept Three.Color; saved character data does not.\n return { ...value, ...(background === undefined ? {} : {\n background: background && typeof background === 'object' ? background.getHex() : background,\n }) };\n };\n const acquireRenderer = async (signal: AbortSignal) => {\n const rendering = state?.rendering;\n if (!rendering) return undefined;\n try { await rendering.setSettings(rendering.getSettings()); }\n catch (error) { if (!rendering.getSnapshot().renderer) throw error; }\n check(signal);\n return rendering.acquireRenderer();\n };\n const makeEngine = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n let profile = character.profile ?? options.embody?.profile;\n let annotationConfig = character.annotationConfig;\n if (profile) {\n const bones: Array<{ name: string }> = [];\n value.model.traverse(object => { if ((object as { isBone?: boolean }).isBone && object.name) bones.push({ name: object.name }); });\n const validation = validateMappings(value.meshes, { bones }, profile, { suggestCorrections: true, useResolvedNames: true, minConfidence: 0.8 });\n if (validation.suggestedConfig && validation.corrections?.some(correction => correction.applied)) {\n profile = { ...profile, ...validation.suggestedConfig };\n if (annotationConfig) annotationConfig = { ...annotationConfig, ...validation.suggestedConfig };\n }\n }\n const resolvedCharacter = { ...character, profile, annotationConfig };\n const next = new Embody({ ...options.embody, presetType: character.presetType ?? options.embody?.presetType, profile });\n try {\n next.onReady({ model: value.model, meshes: value.meshes,\n ...(options.registerEmbeddedAnimations === false ? {} : { animations: value.animations }) });\n next.stop();\n return { next, character: resolvedCharacter };\n } catch (error) {\n try { next.dispose(); } catch { /* Preserve the binding failure. */ }\n throw error;\n }\n };\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n disposed = true;\n backgroundRevision += 1;\n if (options.container.style) options.container.style.background = previousBackground;\n cancel();\n options.signal?.removeEventListener('abort', cancelCreation);\n disposal = (async () => {\n let failure: unknown;\n const attempt = async (release: () => unknown) => { try { await release(); } catch (error) { failure ??= error; } };\n // Cancel a preparation draw before joining an operation waiting on that draw.\n await attempt(() => controller?.dispose());\n await switching.catch(() => {});\n await attempt(() => engine?.dispose());\n const ownedScene = !options.external && state && 'dispose' in state ? state : undefined;\n if (ownedScene) await attempt(() => ownedScene.dispose());\n if (loaded) await attempt(() => releaseModel(loaded!));\n mountedCanvas?.remove();\n if (failure !== undefined) throw failure;\n })();\n return disposal;\n };\n const prepare = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n check(signal);\n state?.setSceneSettings?.(sceneSettings(character));\n visibility.set(value.model, value.model.visible);\n value.model.visible = false;\n value.model.userData.embodyCharacterModel = true;\n await options.prepareCharacter?.({ ...value, engine: next, character, signal });\n check(signal);\n normalizeRenderableCharacterMorphAttributes(value.model);\n assertRenderableCharacterMorphAttributes(value.model);\n // Authored morph replay can add meshes/targets. Inspect the final layout.\n if (options.prepareCharacter) next.bindModel();\n value.model.updateMatrixWorld(true);\n state!.scene.add(value.model);\n if (controller) await controller.prepareModelForRender(value.model, { signal });\n check(signal);\n };\n const frameCharacter = async (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n if (!controller) return;\n controller.setModel(value.model);\n if (character.annotationConfig) controller.prepareRegionsForReveal(character.annotationConfig);\n else if (options.autoFrame !== false) await controller.focusFullBody(0);\n };\n const ready = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n await frameCharacter(value, character);\n check(signal);\n await options.onCharacterReady?.({ ...value, engine: next, character, signal,\n scene: state!.scene, camera: state!.camera, cameraController: controller ?? null, rendering: state!.rendering ?? null });\n check(signal);\n };\n try {\n check(initial.signal);\n loaded = await acquireModel(options.character, options.loader, initial.signal);\n check(initial.signal);\n state = options.external ?? await createDefaultCharacterSceneAsync(options.container, { ...options.scene, ...options.character.scene, signal: initial.signal });\n check(initial.signal);\n await initEmbodyCore();\n check(initial.signal);\n if (options.external?.mountCanvas && !state.renderer.domElement.parentElement) {\n mountedCanvas = state.renderer.domElement;\n options.container.appendChild(mountedCanvas);\n }\n if (options.renderLoop ?? !options.external) {\n if (!(state.camera instanceof PerspectiveCamera)) throw new Error('Character host rendering requires a PerspectiveCamera');\n controller = new ThreeAnnotationController({ ...options.camera,\n scene: state.scene, camera: state.camera, domElement: state.renderer.domElement,\n ...(state.rendering ? { rendering: state.rendering } : { renderer: state.renderer }),\n showDOMControls: options.camera?.showDOMControls ?? false,\n });\n }\n applyCharacterModelTransform(loaded.model, options.character);\n loaded.model.updateMatrixWorld(true);\n const first = makeEngine(loaded, options.character);\n engine = first.next;\n let currentCharacter = first.character;\n const initialLease = await acquireRenderer(initial.signal);\n try {\n await prepare(loaded, engine, first.character, initial.signal);\n await ready(loaded, engine, first.character, initial.signal);\n loaded.model.visible = visibility.get(loaded.model) ?? true;\n applyCharacterBackground(loaded, first.character);\n } finally { initialLease?.release(); }\n if (options.autoStart !== false) engine.start();\n const sceneState = state;\n const rendering = state.rendering ?? null;\n host = {\n engine, scene: state.scene, camera: state.camera, cameraController: controller ?? null,\n get renderer() { return rendering ? rendering.getSnapshot().renderer : sceneState.renderer; },\n get backend() { return rendering ? rendering.getSnapshot().backend : sceneState.backend ?? null; },\n rendering, model: loaded.model, meshes: loaded.meshes, animations: loaded.animations, gltf: loaded.gltf,\n lighting: 'lighting' in state ? state.lighting : null,\n ownsScene: !options.external, container: options.container,\n resize() { if ('resize' in sceneState) sceneState.resize(); },\n setCharacter(character, loader = options.loader, signal) {\n if (disposed || lifetime.signal.aborted) return Promise.reject(aborted());\n if (!character.modelUrl) return Promise.reject(new Error('setCharacter requires character.modelUrl'));\n activeChange?.abort();\n const operation = new AbortController();\n const abort = () => operation.abort();\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n activeChange = operation;\n const generation = ++request;\n const change = switching.catch(() => {}).then(async () => {\n check(operation.signal);\n if (generation !== request) throw aborted();\n const next = await acquireModel(character, loader, operation.signal);\n let nextEngine: Embody | undefined;\n let lease: Awaited<ReturnType<typeof acquireRenderer>> = undefined;\n let cameraChanged = false;\n let previous: CharacterModelLoadResult | undefined;\n try {\n check(operation.signal);\n lease = await acquireRenderer(operation.signal);\n applyCharacterModelTransform(next.model, character);\n next.model.updateMatrixWorld(true);\n const prepared = makeEngine(next, character);\n nextEngine = prepared.next;\n await prepare(next, nextEngine, prepared.character, operation.signal);\n cameraChanged = true;\n await ready(next, nextEngine, prepared.character, operation.signal);\n check(operation.signal);\n previous = loaded!;\n engine!.dispose();\n engine = nextEngine;\n loaded = next;\n currentCharacter = prepared.character;\n applyCharacterBackground(next, currentCharacter);\n host!.engine = engine;\n host!.model = next.model;\n host!.meshes = next.meshes;\n host!.animations = next.animations;\n host!.gltf = next.gltf;\n previous.model.visible = false;\n next.model.visible = visibility.get(next.model) ?? true;\n if (options.autoStart !== false) engine.start();\n } catch (error) {\n if (loaded !== next) {\n try { state?.setSceneSettings?.(sceneSettings(currentCharacter)); } catch { /* Preserve replacement failure. */ }\n if (cameraChanged && !disposed && controller && loaded) {\n try { await frameCharacter(loaded, currentCharacter); } catch { /* Preserve replacement failure. */ }\n }\n try { nextEngine?.dispose(); } catch { /* Still release the acquired model. */ }\n lease?.release();\n lease = undefined;\n try { await releaseModel(next); } catch { /* Preserve the replacement failure. */ }\n }\n throw error;\n } finally { lease?.release(); }\n if (previous) await releaseModel(previous);\n });\n switching = change.finally(() => signal?.removeEventListener('abort', abort));\n return switching;\n },\n dispose,\n };\n options.signal?.removeEventListener('abort', cancelCreation);\n return host;\n } catch (error) {\n try { await dispose(); } catch { /* Preserve the acquisition error. */ }\n throw error;\n }\n}\n","/**\n * SkeletonOverlay - 3D bone visualization overlay for the Three.js scene.\n *\n * Renders each bone as an elongated octahedral shape (Blender-style armature)\n * stretched from parent joint to child joint. Updates in real-time via\n * onBeforeRender callback, following bone animation.\n */\nimport { fuzzyNameMatch } from '../authoring';\nimport * as THREE from 'three';\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BoneTreeNode {\n name: string;\n depth: number;\n parent: string | null;\n children: string[];\n isMapped: boolean;\n /** Semantic key if this bone is mapped (e.g., 'HEAD', 'JAW') */\n semanticKey: string | null;\n /** Full semantic-key set for tree badge rendering when a row resolves multiple mappings */\n semanticKeys?: string[];\n /** Live reference to the Three.js bone object */\n boneObject: THREE.Bone;\n}\n\ninterface BoneVisualization {\n mesh: THREE.Mesh;\n parentBone: THREE.Bone;\n childBone: THREE.Bone | null;\n boneName: string;\n isMapped: boolean;\n}\n\nexport interface SkeletonOverlayOptions {\n opacityScale?: number;\n focusSelectedBone?: boolean;\n}\n\ntype OverlayAxisKey = 'pitch' | 'yaw' | 'roll';\nexport type SkeletonOverlayAxisKey = OverlayAxisKey;\ntype SkeletonOverlayRotationChannel = 'rx' | 'ry' | 'rz';\n\nexport interface AxisGizmoPointerData {\n axis: SkeletonOverlayAxisKey;\n channel: SkeletonOverlayRotationChannel;\n boneName: string;\n point: THREE.Vector3;\n origin: THREE.Vector3;\n quaternion: THREE.Quaternion;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst COLORS = {\n mapped: 0x4a9aaa,\n unmapped: 0x5a6a7a,\n highlighted: 0xd4a040,\n selected: 0x63b3ed,\n} as const;\n\nconst OPACITY = {\n mapped: 0.58,\n unmapped: 0.38,\n highlighted: 0.7,\n selected: 0.8,\n context: 0.46,\n muted: 0.16,\n} as const;\n\nconst AXIS_GIZMO_COLORS: Record<OverlayAxisKey, number> = {\n pitch: 0xff7a5c,\n yaw: 0x61d095,\n roll: 0x69a8ff,\n};\n\nconst AXIS_GIZMO_IDLE_OPACITY = 0.72;\nconst AXIS_GIZMO_MUTED_OPACITY = 0.26;\nconst AXIS_GIZMO_ACTIVE_OPACITY = 0.96;\nconst AXIS_GIZMO_RADIUS_FACTOR = 0.48;\nconst AXIS_GIZMO_MIN_RADIUS = 0.025;\nconst AXIS_GIZMO_MAX_RADIUS = 0.14;\nconst AXIS_GIZMO_SCREEN_RADIUS_PX = 54;\nconst AXIS_GIZMO_ACTIVE_SCALE = 1.05;\nconst AXIS_GIZMO_HIT_TUBE = 0.15;\nconst VISIBILITY_FADE_MS = 180;\nconst VISIBILITY_EPSILON = 0.01;\n\n/** Default length for leaf bones (no children) */\nconst LEAF_BONE_LENGTH = 0.02;\n\n/** Width ratio of octahedron mid-section relative to bone length */\nconst WIDTH_RATIO = 0.1;\n\n/** Position of mid-section along bone axis (0 = parent, 1 = child) */\nconst MID_POSITION = 0.2;\n\n/** Helper/root bones that can introduce non-deforming rig offsets */\nconst ROOT_HELPER_NAME_PATTERN = /armature|bone.?root|rootjoint|(?:^|[_\\W])root(?:$|[_\\W])/i;\nconst HIP_NAME_PATTERN = /(?:^|[_\\W])hip(?:$|[_\\W]|\\d)/i;\nconst PELVIS_NAME_PATTERN = /(?:^|[_\\W])pelvis(?:$|[_\\W]|\\d)/i;\n/** Distance threshold for treating two joints as occupying the same point */\nconst POSITION_EPSILON = 1e-4;\nconst DEFAULT_AXIS_CHANNELS: Record<OverlayAxisKey, SkeletonOverlayRotationChannel> = {\n pitch: 'rx',\n yaw: 'ry',\n roll: 'rz',\n};\n\n// ── Geometry ───────────────────────────────────────────────────────────────\n\n/**\n * Creates a unit octahedral bone geometry (Blender-style).\n * Two pyramids joined at a wider mid-section, extending along +Z axis from 0 to 1.\n *\n * Vertices:\n * root (0,0,0) → mid cross-section at z=0.2 → tip (0,0,1)\n */\nfunction createOctahedralBoneGeometry(): THREE.BufferGeometry {\n const w = WIDTH_RATIO;\n\n // 6 vertices: root, 4 mid-section corners, tip\n const positions = new Float32Array([\n // Face 0: root → mid1 → mid2\n 0, 0, 0, w, w, MID_POSITION, -w, w, MID_POSITION,\n // Face 1: root → mid2 → mid3\n 0, 0, 0, -w, w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 2: root → mid3 → mid4\n 0, 0, 0, -w, -w, MID_POSITION, w, -w, MID_POSITION,\n // Face 3: root → mid4 → mid1\n 0, 0, 0, w, -w, MID_POSITION, w, w, MID_POSITION,\n // Face 4: tip → mid2 → mid1\n 0, 0, 1, -w, w, MID_POSITION, w, w, MID_POSITION,\n // Face 5: tip → mid3 → mid2\n 0, 0, 1, -w, -w, MID_POSITION, -w, w, MID_POSITION,\n // Face 6: tip → mid4 → mid3\n 0, 0, 1, w, -w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 7: tip → mid1 → mid4\n 0, 0, 1, w, w, MID_POSITION, w, -w, MID_POSITION,\n ]);\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.computeVertexNormals();\n return geometry;\n}\n\nfunction collectBones(root: THREE.Object3D): THREE.Bone[] {\n const bones = new Set<THREE.Bone>();\n root.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n bones.add(obj as THREE.Bone);\n }\n if ((obj as THREE.SkinnedMesh).isSkinnedMesh) {\n const skinned = obj as THREE.SkinnedMesh;\n skinned.skeleton?.bones?.forEach((bone) => bones.add(bone));\n }\n });\n return Array.from(bones);\n}\n\nfunction isBone(obj: THREE.Object3D | null | undefined): obj is THREE.Bone {\n return !!obj && (obj as THREE.Bone).isBone;\n}\n\nfunction countBoneSubtree(bone: THREE.Bone): number {\n let count = 1;\n for (const child of bone.children) {\n if (isBone(child)) {\n count += countBoneSubtree(child);\n }\n }\n return count;\n}\n\nfunction resolveTopLevelHelperRoot(root: THREE.Object3D): THREE.Bone | null {\n const topLevelBones = collectBones(root).filter((bone) => !isBone(bone.parent));\n if (topLevelBones.length !== 1) return null;\n\n let helperRoot = topLevelBones[0];\n while (ROOT_HELPER_NAME_PATTERN.test(helperRoot.name)) {\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length !== 1) break;\n\n const onlyChild = boneChildren[0];\n if (!ROOT_HELPER_NAME_PATTERN.test(onlyChild.name)) break;\n helperRoot = onlyChild;\n }\n\n return ROOT_HELPER_NAME_PATTERN.test(helperRoot.name) ? helperRoot : null;\n}\n\nfunction resolveBodyDisplayRoot(root: THREE.Object3D): THREE.Bone | null {\n const helperRoot = resolveTopLevelHelperRoot(root);\n if (!helperRoot) return null;\n\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length === 0) return null;\n if (boneChildren.length === 1) return boneChildren[0];\n\n // Export rigs sometimes hang tiny attachment helpers off the root alongside\n // one real body subtree. Start the overlay at that dominant body child.\n const subtreeSizes = boneChildren\n .map((child) => ({ child, size: countBoneSubtree(child) }))\n .sort((left, right) => right.size - left.size);\n\n const [largest, secondLargest] = subtreeSizes;\n if (!largest || largest.size < 3) return null;\n if (!secondLargest || secondLargest.size <= 2 || largest.size >= secondLargest.size * 3) {\n return largest.child;\n }\n\n return null;\n}\n\nfunction collectBoneChildren(bone: THREE.Object3D): THREE.Bone[] {\n return bone.children.filter(isBone);\n}\n\nfunction hasZeroLengthConnection(parentBone: THREE.Bone, childBone: THREE.Bone): boolean {\n parentBone.getWorldPosition(_parentPos);\n childBone.getWorldPosition(_childPos);\n return _parentPos.distanceToSquared(_childPos) <= POSITION_EPSILON * POSITION_EPSILON;\n}\n\nfunction hasRootHelperAncestor(bone: THREE.Bone): boolean {\n let current: THREE.Object3D | null = bone.parent;\n while (isBone(current)) {\n if (ROOT_HELPER_NAME_PATTERN.test(current.name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction shouldSkipRootHelperConnection(parentBone: THREE.Bone, boneChildren: THREE.Bone[]): boolean {\n if (boneChildren.length !== 1) return false;\n const childBone = boneChildren[0];\n\n if (ROOT_HELPER_NAME_PATTERN.test(parentBone.name)) {\n if (!isBone(parentBone.parent)) return true;\n\n // Nested human rig helpers still produce a useless centerline when the\n // helper feeds into a hip whose pelvis child collapses to the same point.\n return collectBoneChildren(childBone).some((grandChild) => hasZeroLengthConnection(childBone, grandChild));\n }\n\n return (\n hasRootHelperAncestor(parentBone) &&\n HIP_NAME_PATTERN.test(parentBone.name) &&\n PELVIS_NAME_PATTERN.test(childBone.name) &&\n hasZeroLengthConnection(parentBone, childBone)\n );\n}\n\nfunction setRayFromPointer(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n): boolean {\n const rect = domElement.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n\n _mouse.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n _mouse.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n _raycaster.setFromCamera(_mouse, camera);\n return true;\n}\n\n// ── Reusable temp objects (avoid GC) ───────────────────────────────────────\n\nconst _parentPos = new THREE.Vector3();\nconst _childPos = new THREE.Vector3();\nconst _direction = new THREE.Vector3();\nconst _zAxis = new THREE.Vector3(0, 0, 1);\nconst _quaternion = new THREE.Quaternion();\nconst _bonePos = new THREE.Vector3();\nconst _boneQuat = new THREE.Quaternion();\nconst _boneEuler = new THREE.Euler();\nconst _mouse = new THREE.Vector2();\nconst _raycaster = new THREE.Raycaster();\nconst _cameraSpacePosition = new THREE.Vector3();\nconst _planeNormal = new THREE.Vector3();\nconst _dragPlane = new THREE.Plane();\nconst _planeHit = new THREE.Vector3();\n\nexport function resolveSkeletonOverlayStartBoneName(\n root: THREE.Object3D,\n): string | null {\n return resolveBodyDisplayRoot(root)?.name ?? null;\n}\n\n// ── SkeletonOverlay Class ──────────────────────────────────────────────────\n\nexport class SkeletonOverlay {\n private scene: THREE.Scene;\n private group: THREE.Group;\n private visualizations: BoneVisualization[] = [];\n private boneTree: BoneTreeNode[] = [];\n private mappedBoneNames: Set<string>;\n private semanticKeyMap: Map<string, string>; // boneName → semanticKey\n private boneLookup = new Map<string, THREE.Bone>();\n\n // Shared geometry and materials\n private sharedGeometry: THREE.BufferGeometry;\n private mappedMaterial: THREE.MeshBasicMaterial;\n private unmappedMaterial: THREE.MeshBasicMaterial;\n private highlightMaterial: THREE.MeshBasicMaterial;\n private selectedMaterial: THREE.MeshBasicMaterial;\n private contextMaterial: THREE.MeshBasicMaterial;\n private mutedMaterial: THREE.MeshBasicMaterial;\n private axisRingGeometry: THREE.TorusGeometry;\n private axisRingHitGeometry: THREE.TorusGeometry;\n private axisCenterGeometry: THREE.SphereGeometry;\n private pitchRingMaterial: THREE.MeshBasicMaterial;\n private yawRingMaterial: THREE.MeshBasicMaterial;\n private rollRingMaterial: THREE.MeshBasicMaterial;\n private axisHitMaterial: THREE.MeshBasicMaterial;\n private axisCenterMaterial: THREE.MeshBasicMaterial;\n private axisGizmoGroup: THREE.Group;\n private axisGizmoMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n private axisGizmoHitMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n\n // Sentinel mesh for per-frame updates (stored for disposal)\n private sentinelMesh: THREE.Mesh | null = null;\n\n // State\n private highlightedBone: string | null = null;\n private selectedBone: string | null = null;\n private activeAxis: OverlayAxisKey | null = null;\n private opacityScale: number;\n private focusSelectedBone: boolean;\n private visibilityAlpha = 0;\n private visibilityTarget = 0;\n private visibilityLastFrameAt = 0;\n\n constructor(\n scene: THREE.Scene,\n mappedBoneNames: Set<string>,\n semanticKeyMap: Map<string, string>,\n options: SkeletonOverlayOptions = {},\n ) {\n this.scene = scene;\n this.mappedBoneNames = mappedBoneNames;\n this.semanticKeyMap = semanticKeyMap;\n this.opacityScale = THREE.MathUtils.clamp(options.opacityScale ?? 1, 0, 1);\n this.focusSelectedBone = options.focusSelectedBone ?? false;\n\n this.group = new THREE.Group();\n this.group.name = 'SkeletonOverlay';\n this.group.renderOrder = 999;\n this.group.visible = false;\n\n this.sharedGeometry = createOctahedralBoneGeometry();\n\n const materialOpts: Partial<THREE.MeshBasicMaterialParameters> = {\n transparent: true,\n depthTest: false,\n depthWrite: false,\n side: THREE.DoubleSide,\n };\n\n this.mappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.mapped, opacity: OPACITY.mapped });\n this.unmappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.unmapped });\n this.highlightMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.highlighted, opacity: OPACITY.highlighted });\n this.selectedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.selected });\n this.contextMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.context });\n this.mutedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.muted });\n this.mappedMaterial.forceSinglePass = true;\n this.unmappedMaterial.forceSinglePass = true;\n this.highlightMaterial.forceSinglePass = true;\n this.selectedMaterial.forceSinglePass = true;\n this.contextMaterial.forceSinglePass = true;\n this.mutedMaterial.forceSinglePass = true;\n\n this.axisRingGeometry = new THREE.TorusGeometry(1, 0.032, 10, 120);\n this.axisRingHitGeometry = new THREE.TorusGeometry(1, AXIS_GIZMO_HIT_TUBE, 8, 64);\n this.axisCenterGeometry = new THREE.SphereGeometry(0.082, 12, 8);\n this.pitchRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.pitch, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.yawRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.yaw, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.rollRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.roll, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.axisHitMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, opacity: 0 });\n this.axisHitMaterial.colorWrite = false;\n this.axisCenterMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: 0xf5f7fa, opacity: 0.92 });\n\n this.axisGizmoGroup = new THREE.Group();\n this.axisGizmoGroup.name = 'SelectedBoneAxisGizmo';\n this.axisGizmoGroup.visible = false;\n this.axisGizmoGroup.renderOrder = 1000;\n\n const pitchRing = new THREE.Mesh(this.axisRingGeometry, this.pitchRingMaterial);\n pitchRing.renderOrder = 1000;\n pitchRing.userData.axis = 'pitch';\n const pitchHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n pitchHit.userData.axis = 'pitch';\n\n const yawRing = new THREE.Mesh(this.axisRingGeometry, this.yawRingMaterial);\n yawRing.renderOrder = 1000;\n yawRing.userData.axis = 'yaw';\n const yawHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n yawHit.userData.axis = 'yaw';\n\n const rollRing = new THREE.Mesh(this.axisRingGeometry, this.rollRingMaterial);\n rollRing.renderOrder = 1000;\n rollRing.userData.axis = 'roll';\n const rollHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n rollHit.rotation.copy(rollRing.rotation);\n rollHit.userData.axis = 'roll';\n\n const center = new THREE.Mesh(this.axisCenterGeometry, this.axisCenterMaterial);\n center.renderOrder = 1001;\n\n this.axisGizmoMeshes = {\n pitch: pitchRing,\n yaw: yawRing,\n roll: rollRing,\n };\n this.axisGizmoHitMeshes = {\n pitch: pitchHit,\n yaw: yawHit,\n roll: rollHit,\n };\n\n Object.values(this.axisGizmoMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n Object.values(this.axisGizmoHitMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n center.frustumCulled = false;\n this.axisGizmoGroup.add(center);\n this.syncAxisGizmoChannels();\n this.syncVisibilityOpacity();\n this.updateAxisGizmoAppearance();\n }\n\n /**\n * Build the skeleton visualization from a scene root.\n * Traverses to find all THREE.Bone instances and creates octahedral meshes.\n */\n loadSkeleton(root: THREE.Object3D): void {\n this.clear();\n root.updateWorldMatrix(true, true);\n\n // Collect all bones\n const allBones = collectSkeletonBones(root);\n const includedBones = new Set(allBones);\n this.boneLookup = new Map(allBones.map((bone) => [bone.name, bone]));\n\n if (allBones.length === 0) return;\n\n // Build tree data for UI\n this.boneTree = allBones.map((bone) => {\n const isMapped = this.mappedBoneNames.has(bone.name);\n const semanticKey = this.semanticKeyMap.get(bone.name) ?? null;\n const boneChildren = bone.children\n .filter((c): c is THREE.Bone => isBone(c) && includedBones.has(c))\n .map((c) => c.name);\n const parentName = bone.parent && isBone(bone.parent) && includedBones.has(bone.parent)\n ? bone.parent.name\n : null;\n\n // Compute depth by walking up\n let depth = 0;\n let current: THREE.Object3D | null = bone.parent;\n while (current && isBone(current) && includedBones.has(current)) {\n depth++;\n current = current.parent;\n }\n\n return {\n name: bone.name,\n depth,\n parent: parentName,\n children: boneChildren,\n isMapped,\n semanticKey,\n boneObject: bone,\n };\n });\n\n // Create visualization meshes for each bone→child connection\n for (const bone of allBones) {\n const boneChildren = bone.children.filter(\n (c): c is THREE.Bone => isBone(c) && includedBones.has(c),\n );\n\n if (boneChildren.length > 0) {\n // Root/helper bones often exist only for rig transforms and produce\n // a misleading centerline (for example between a character's legs).\n if (shouldSkipRootHelperConnection(bone, boneChildren)) {\n continue;\n }\n\n for (const child of boneChildren) {\n this.createBoneMesh(bone, child);\n }\n } else {\n this.createBoneMesh(bone, null);\n }\n }\n\n this.group.add(this.axisGizmoGroup);\n\n // Attach onBeforeRender to a sentinel mesh for per-frame updates\n const sentinelGeo = new THREE.SphereGeometry(1e-6, 4, 2);\n const sentinelMat = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: 0,\n depthWrite: false,\n depthTest: false,\n });\n sentinelMat.colorWrite = false;\n const sentinel = new THREE.Mesh(sentinelGeo, sentinelMat);\n sentinel.visible = true;\n sentinel.frustumCulled = false;\n sentinel.onBeforeRender = (renderer, _scene, camera) => this.update(camera, renderer.domElement);\n this.sentinelMesh = sentinel;\n this.group.add(sentinel);\n\n this.scene.add(this.group);\n this.update();\n }\n\n private createBoneMesh(parentBone: THREE.Bone, childBone: THREE.Bone | null): void {\n const isMapped = this.mappedBoneNames.has(parentBone.name);\n const material = isMapped ? this.mappedMaterial : this.unmappedMaterial;\n\n const mesh = new THREE.Mesh(this.sharedGeometry, material);\n mesh.name = `bone_vis_${parentBone.name}${childBone ? `_${childBone.name}` : '_leaf'}`;\n mesh.frustumCulled = false;\n mesh.renderOrder = 999;\n\n // Store bone name for picking\n mesh.userData.boneName = parentBone.name;\n\n this.visualizations.push({\n mesh,\n parentBone,\n childBone,\n boneName: parentBone.name,\n isMapped,\n });\n\n this.group.add(mesh);\n }\n\n /** Called each frame via onBeforeRender. Updates all bone mesh transforms. */\n private update(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n this.advanceVisibility();\n\n for (const vis of this.visualizations) {\n vis.parentBone.getWorldPosition(_parentPos);\n\n if (vis.childBone) {\n vis.childBone.getWorldPosition(_childPos);\n } else {\n // Leaf bone: extend a short distance along bone's local Y axis\n _childPos.set(0, LEAF_BONE_LENGTH, 0);\n vis.parentBone.localToWorld(_childPos);\n }\n\n // Compute direction and length\n _direction.subVectors(_childPos, _parentPos);\n const length = _direction.length();\n\n if (length < 0.0001) {\n vis.mesh.visible = false;\n continue;\n }\n\n vis.mesh.visible = this.visibilityAlpha > VISIBILITY_EPSILON;\n\n // Orient: geometry is authored along +Z, align it with parent→child direction\n _direction.normalize();\n _quaternion.setFromUnitVectors(_zAxis, _direction);\n\n vis.mesh.position.copy(_parentPos);\n vis.mesh.quaternion.copy(_quaternion);\n vis.mesh.scale.set(length, length, length);\n }\n\n this.updateAxisGizmo(camera, domElement);\n }\n\n private syncVisibilityOpacity(): void {\n const alpha = this.visibilityAlpha * this.opacityScale;\n this.mappedMaterial.opacity = OPACITY.mapped * alpha;\n this.unmappedMaterial.opacity = OPACITY.unmapped * alpha;\n this.highlightMaterial.opacity = OPACITY.highlighted * alpha;\n this.selectedMaterial.opacity = OPACITY.selected * alpha;\n this.contextMaterial.opacity = OPACITY.context * alpha;\n this.mutedMaterial.opacity = OPACITY.muted * alpha;\n }\n\n private syncGroupVisibility(): void {\n this.group.visible = this.visualizations.length > 0 && (\n this.visibilityTarget > 0 ||\n this.visibilityAlpha > VISIBILITY_EPSILON ||\n this.selectedBone != null\n );\n }\n\n private advanceVisibility(): void {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const deltaMs = this.visibilityLastFrameAt > 0 ? now - this.visibilityLastFrameAt : 16;\n this.visibilityLastFrameAt = now;\n\n if (Math.abs(this.visibilityAlpha - this.visibilityTarget) > VISIBILITY_EPSILON) {\n const step = deltaMs / VISIBILITY_FADE_MS;\n if (this.visibilityTarget > this.visibilityAlpha) {\n this.visibilityAlpha = Math.min(this.visibilityTarget, this.visibilityAlpha + step);\n } else {\n this.visibilityAlpha = Math.max(this.visibilityTarget, this.visibilityAlpha - step);\n }\n } else {\n this.visibilityAlpha = this.visibilityTarget;\n }\n\n if (this.visibilityAlpha <= VISIBILITY_EPSILON && this.visibilityTarget === 0) {\n this.visibilityAlpha = 0;\n }\n\n this.syncVisibilityOpacity();\n this.syncGroupVisibility();\n }\n\n private resolveSelectedBoneObject(): THREE.Bone | null {\n if (!this.selectedBone) return null;\n return this.boneLookup.get(this.selectedBone) ?? null;\n }\n\n private resolveBoneRelativeAxisGizmoRadius(bone: THREE.Bone): number {\n bone.getWorldPosition(_parentPos);\n\n let referenceLength = 0;\n for (const child of bone.children) {\n if (!isBone(child)) continue;\n child.getWorldPosition(_childPos);\n const nextDistance = _parentPos.distanceTo(_childPos);\n if (nextDistance <= 0.0001) continue;\n referenceLength = referenceLength === 0 ? nextDistance : Math.min(referenceLength, nextDistance);\n }\n\n if (referenceLength <= 0.0001 && isBone(bone.parent)) {\n bone.parent.getWorldPosition(_childPos);\n referenceLength = _parentPos.distanceTo(_childPos);\n }\n\n if (referenceLength <= 0.0001) {\n referenceLength = LEAF_BONE_LENGTH;\n }\n\n return THREE.MathUtils.clamp(\n referenceLength * AXIS_GIZMO_RADIUS_FACTOR,\n AXIS_GIZMO_MIN_RADIUS,\n AXIS_GIZMO_MAX_RADIUS,\n );\n }\n\n private resolveScreenSpaceAxisGizmoRadius(\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number | null {\n if (!camera || !domElement) return null;\n\n const rect = domElement.getBoundingClientRect();\n const viewportHeight = domElement.clientHeight || rect.height;\n if (viewportHeight <= 0) return null;\n\n if ((camera as THREE.PerspectiveCamera).isPerspectiveCamera) {\n const perspectiveCamera = camera as THREE.PerspectiveCamera;\n _cameraSpacePosition.copy(origin).applyMatrix4(perspectiveCamera.matrixWorldInverse);\n const depth = -_cameraSpacePosition.z;\n if (!Number.isFinite(depth) || depth <= perspectiveCamera.near) return null;\n\n const visibleWorldHeight = 2\n * depth\n * Math.tan(THREE.MathUtils.degToRad(perspectiveCamera.getEffectiveFOV()) / 2);\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n if ((camera as THREE.OrthographicCamera).isOrthographicCamera) {\n const orthographicCamera = camera as THREE.OrthographicCamera;\n const visibleWorldHeight = (orthographicCamera.top - orthographicCamera.bottom) / orthographicCamera.zoom;\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n return null;\n }\n\n private resolveAxisGizmoRadius(\n bone: THREE.Bone,\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number {\n return this.resolveScreenSpaceAxisGizmoRadius(origin, camera, domElement)\n ?? this.resolveBoneRelativeAxisGizmoRadius(bone);\n }\n\n private updateAxisGizmoAppearance(): void {\n const hasSelection = !!this.selectedBone;\n this.axisGizmoGroup.visible = hasSelection && this.group.visible;\n\n const meshes: Array<[OverlayAxisKey, THREE.Mesh, THREE.Mesh]> = [\n ['pitch', this.axisGizmoMeshes.pitch, this.axisGizmoHitMeshes.pitch],\n ['yaw', this.axisGizmoMeshes.yaw, this.axisGizmoHitMeshes.yaw],\n ['roll', this.axisGizmoMeshes.roll, this.axisGizmoHitMeshes.roll],\n ];\n\n meshes.forEach(([axis, mesh, hitMesh]) => {\n const material = mesh.material as THREE.MeshBasicMaterial;\n const isActive = this.activeAxis === axis;\n const baseOpacity = this.activeAxis == null\n ? AXIS_GIZMO_IDLE_OPACITY\n : isActive\n ? AXIS_GIZMO_ACTIVE_OPACITY\n : AXIS_GIZMO_MUTED_OPACITY;\n material.opacity = hasSelection ? baseOpacity : 0;\n const scale = isActive ? AXIS_GIZMO_ACTIVE_SCALE : 1;\n mesh.scale.setScalar(scale);\n hitMesh.scale.setScalar(scale);\n });\n this.axisCenterMaterial.opacity = hasSelection ? 0.92 : 0;\n }\n\n private updateAxisGizmo(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n const selectedBone = this.resolveSelectedBoneObject();\n if (!selectedBone || !this.group.visible) {\n this.axisGizmoGroup.visible = false;\n return;\n }\n\n selectedBone.getWorldPosition(_bonePos);\n selectedBone.getWorldQuaternion(_boneQuat);\n const radius = this.resolveAxisGizmoRadius(selectedBone, _bonePos, camera, domElement);\n\n this.axisGizmoGroup.visible = true;\n this.axisGizmoGroup.position.copy(_bonePos);\n this.axisGizmoGroup.quaternion.copy(_boneQuat);\n this.axisGizmoGroup.scale.setScalar(radius);\n this.updateAxisGizmoAppearance();\n this.axisGizmoGroup.updateWorldMatrix(true, true);\n }\n\n private applyAxisRingChannel(\n mesh: THREE.Mesh,\n hitMesh: THREE.Mesh,\n axis: SkeletonOverlayAxisKey,\n ): void {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n mesh.rotation.set(0, 0, 0);\n hitMesh.rotation.set(0, 0, 0);\n\n if (channel === 'rx') {\n mesh.rotation.y = Math.PI / 2;\n hitMesh.rotation.y = Math.PI / 2;\n return;\n }\n\n if (channel === 'ry') {\n mesh.rotation.x = Math.PI / 2;\n hitMesh.rotation.x = Math.PI / 2;\n }\n }\n\n private syncAxisGizmoChannels(): void {\n (Object.keys(this.axisGizmoMeshes) as OverlayAxisKey[]).forEach((axis) => {\n this.applyAxisRingChannel(\n this.axisGizmoMeshes[axis],\n this.axisGizmoHitMeshes[axis],\n axis,\n );\n });\n }\n\n private getSelectedBonePointerData(): Omit<AxisGizmoPointerData, 'axis' | 'point' | 'channel'> | null {\n const bone = this.resolveSelectedBoneObject();\n if (!bone || !this.selectedBone) return null;\n\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n\n return {\n boneName: this.selectedBone,\n origin: _bonePos.clone(),\n quaternion: _boneQuat.clone(),\n };\n }\n\n private getAxisPlaneNormal(axis: SkeletonOverlayAxisKey, quaternion: THREE.Quaternion): THREE.Vector3 {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n if (channel === 'rx') {\n return _planeNormal.set(1, 0, 0).applyQuaternion(quaternion).normalize();\n }\n if (channel === 'ry') {\n return _planeNormal.set(0, 1, 0).applyQuaternion(quaternion).normalize();\n }\n return _planeNormal.set(0, 0, 1).applyQuaternion(quaternion).normalize();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────\n\n getBoneTree(): BoneTreeNode[] {\n return this.boneTree;\n }\n\n setVisible(visible: boolean): void {\n this.visibilityTarget = visible ? 1 : 0;\n this.visibilityLastFrameAt = 0;\n this.syncGroupVisibility();\n this.advanceVisibility();\n this.updateAxisGizmoAppearance();\n }\n\n isVisible(): boolean {\n return this.visibilityTarget > 0;\n }\n\n setHighlighted(boneName: string | null): void {\n this.highlightedBone = boneName;\n this.refreshBoneMaterials();\n }\n\n setSelected(boneName: string | null): void {\n this.selectedBone = boneName;\n\n this.refreshBoneMaterials();\n this.syncGroupVisibility();\n this.updateAxisGizmo();\n }\n\n setActiveAxis(axis: OverlayAxisKey | null): void {\n this.activeAxis = axis;\n this.updateAxisGizmoAppearance();\n }\n\n /** Get world position and rotation for a bone by name */\n getBoneTransform(boneName: string): { position: [number, number, number]; rotation: [number, number, number] } | null {\n const node = this.boneTree.find((b) => b.name === boneName);\n if (!node) return null;\n\n const bone = node.boneObject;\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n _boneEuler.setFromQuaternion(_boneQuat);\n\n return {\n position: [_bonePos.x, _bonePos.y, _bonePos.z],\n rotation: [\n THREE.MathUtils.radToDeg(_boneEuler.x),\n THREE.MathUtils.radToDeg(_boneEuler.y),\n THREE.MathUtils.radToDeg(_boneEuler.z),\n ],\n };\n }\n\n pickBone(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): string | null {\n if (!this.group.visible || this.visibilityTarget <= 0 || this.visibilityAlpha <= 0.35) {\n return null;\n }\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n const hits = _raycaster.intersectObjects(\n this.visualizations.map((visualization) => visualization.mesh),\n false,\n );\n const hit = hits[0];\n if (!hit) return null;\n\n return typeof hit.object.userData.boneName === 'string'\n ? hit.object.userData.boneName\n : null;\n }\n\n pickAxisGizmo(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) return null;\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const hits = _raycaster.intersectObjects(Object.values(this.axisGizmoHitMeshes), false);\n const hit = hits[0];\n if (!hit) return null;\n\n const axis: unknown = hit.object.userData.axis;\n if (axis !== 'pitch' && axis !== 'yaw' && axis !== 'roll') {\n return null;\n }\n\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.point.clone(),\n };\n }\n\n projectPointerToAxisPlane(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n axis: SkeletonOverlayAxisKey,\n ): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) {\n return null;\n }\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const normal = this.getAxisPlaneNormal(axis, base.quaternion);\n _dragPlane.setFromNormalAndCoplanarPoint(normal, base.origin);\n const hit = _raycaster.ray.intersectPlane(_dragPlane, _planeHit);\n if (!hit) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.clone(),\n };\n }\n\n private isSelectedContextBone(boneName: string): boolean {\n if (!this.selectedBone || boneName === this.selectedBone) return false;\n const selectedBone = this.boneLookup.get(this.selectedBone);\n const bone = this.boneLookup.get(boneName);\n if (!selectedBone || !bone) return false;\n return bone.parent === selectedBone || selectedBone.parent === bone;\n }\n\n private resolveBoneMaterial(boneName: string, isMapped: boolean): THREE.MeshBasicMaterial {\n if (boneName === this.selectedBone) {\n return this.selectedMaterial;\n }\n if (boneName === this.highlightedBone) {\n return this.highlightMaterial;\n }\n if (this.focusSelectedBone && this.selectedBone) {\n return this.isSelectedContextBone(boneName) ? this.contextMaterial : this.mutedMaterial;\n }\n return isMapped ? this.mappedMaterial : this.unmappedMaterial;\n }\n\n private refreshBoneMaterials(): void {\n for (const vis of this.visualizations) {\n vis.mesh.material = this.resolveBoneMaterial(vis.boneName, vis.isMapped);\n }\n }\n\n private clear(): void {\n // Dispose sentinel mesh resources before clearing\n if (this.sentinelMesh) {\n this.sentinelMesh.geometry.dispose();\n (this.sentinelMesh.material as THREE.Material).dispose();\n this.sentinelMesh = null;\n }\n // Remove all children from group\n while (this.group.children.length > 0) {\n this.group.remove(this.group.children[0]);\n }\n this.visualizations = [];\n this.boneTree = [];\n this.boneLookup.clear();\n this.axisGizmoGroup.visible = false;\n this.group.visible = false;\n }\n\n dispose(): void {\n this.scene.remove(this.group);\n this.clear();\n\n this.sharedGeometry.dispose();\n this.mappedMaterial.dispose();\n this.unmappedMaterial.dispose();\n this.highlightMaterial.dispose();\n this.selectedMaterial.dispose();\n this.contextMaterial.dispose();\n this.mutedMaterial.dispose();\n this.axisRingGeometry.dispose();\n this.axisRingHitGeometry.dispose();\n this.axisCenterGeometry.dispose();\n this.pitchRingMaterial.dispose();\n this.yawRingMaterial.dispose();\n this.rollRingMaterial.dispose();\n this.axisHitMaterial.dispose();\n this.axisCenterMaterial.dispose();\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nexport function collectSkeletonBones(root: THREE.Object3D): THREE.Bone[] {\n const startBone = resolveBodyDisplayRoot(root);\n return collectBones(startBone ?? root);\n}\n\n/**\n * Find the model root from a scene by locating the first bone\n * and walking up to the top-level scene child.\n */\nexport function findModelRoot(scene: THREE.Scene): THREE.Object3D | null {\n const roots: {\n tagged?: THREE.Object3D;\n bone?: THREE.Object3D;\n skinned?: THREE.Object3D;\n } = {};\n\n scene.traverse((obj) => {\n if (!roots.tagged && (obj.userData?.embodyCharacterModel === true || obj.userData?.loomlargeCharacterModel === true)) {\n roots.tagged = obj;\n }\n if (!roots.bone && (obj as THREE.Bone).isBone) {\n roots.bone = obj;\n }\n if (!roots.skinned && (obj as THREE.SkinnedMesh).isSkinnedMesh) {\n roots.skinned = obj;\n }\n });\n\n if (roots.tagged) return roots.tagged;\n\n const anchor = roots.bone ?? roots.skinned;\n if (!anchor) return null;\n\n // Walk up to find the direct child of the scene\n let current: THREE.Object3D | null = anchor;\n while (current && current.parent && current.parent !== scene) {\n current = current.parent;\n }\n\n return current;\n}\n\n/**\n * Build a set of mapped bone names and a semantic key lookup\n * from an engine's profile configuration.\n */\nexport function buildMappedBoneInfo(profile: {\n boneNodes?: Record<string, string>;\n bonePrefix?: string;\n boneSuffix?: string;\n suffixPattern?: string;\n}, actualBoneNames: Iterable<string> = []): { mappedNames: Set<string>; semanticKeyMap: Map<string, string>; semanticKeysMap: Map<string, string[]> } {\n const mappedNames = new Set<string>();\n const semanticKeyMap = new Map<string, string>();\n const semanticKeysMap = new Map<string, string[]>();\n const actualNames = Array.from(new Set(actualBoneNames));\n\n const boneNodes = profile.boneNodes || {};\n const prefix = profile.bonePrefix || '';\n const suffix = profile.boneSuffix || '';\n const addSemanticKey = (boneName: string, semanticKey: string) => {\n mappedNames.add(boneName);\n if (!semanticKeyMap.has(boneName)) {\n semanticKeyMap.set(boneName, semanticKey);\n }\n\n const existing = semanticKeysMap.get(boneName) ?? [];\n if (!existing.includes(semanticKey)) {\n semanticKeysMap.set(boneName, [...existing, semanticKey]);\n }\n };\n\n for (const [semanticKey, nodeName] of Object.entries(boneNodes)) {\n const fullName = prefix + nodeName + suffix;\n addSemanticKey(fullName, semanticKey);\n // Also add raw name for fuzzy matching\n if (fullName !== nodeName) {\n addSemanticKey(nodeName, semanticKey);\n }\n actualNames.forEach((actualName) => {\n if (\n fuzzyNameMatch(actualName, fullName, profile.suffixPattern)\n || fuzzyNameMatch(actualName, nodeName, profile.suffixPattern)\n ) {\n addSemanticKey(actualName, semanticKey);\n }\n });\n }\n\n return { mappedNames, semanticKeyMap, semanticKeysMap };\n}\n","import * as THREE from 'three';\n\nconst DEFAULT_THRESHOLD = 1e-4;\nconst DEFAULT_MAX_POINTS = 12000;\n\nconst COLOR_LOW = { r: 1.0, g: 0.78, b: 0.28 };\nconst COLOR_HIGH = { r: 1.0, g: 0.36, b: 0.16 };\n\nexport interface MorphVertexPreviewOptions {\n threshold?: number;\n maxPoints?: number;\n}\n\nexport interface MorphVertexPreviewSample {\n indices: Uint32Array;\n intensities: Float32Array;\n}\n\nexport interface MorphVertexPreviewRenderData {\n positions: Float32Array;\n colors: Float32Array;\n pointCount: number;\n meshCount: number;\n}\n\nfunction getMorphPositionAttribute(\n mesh: THREE.Mesh,\n morphName: string,\n): THREE.BufferAttribute | THREE.InterleavedBufferAttribute | null {\n const morphIndex = mesh.morphTargetDictionary?.[morphName];\n if (morphIndex == null) return null;\n\n const morphPositions = mesh.geometry.morphAttributes.position;\n return morphPositions?.[morphIndex] ?? null;\n}\n\nfunction getDeltaMagnitudeAtIndex(\n mesh: THREE.Mesh,\n morphAttribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n index: number,\n): number {\n const geometry = mesh.geometry;\n const relative = geometry.morphTargetsRelative;\n const basePositions = geometry.getAttribute('position');\n if (!basePositions) return 0;\n\n const dx = morphAttribute.getX(index) - (relative ? 0 : basePositions.getX(index));\n const dy = morphAttribute.getY(index) - (relative ? 0 : basePositions.getY(index));\n const dz = morphAttribute.getZ(index) - (relative ? 0 : basePositions.getZ(index));\n return Math.hypot(dx, dy, dz);\n}\n\nexport function resolveMorphPreviewMeshes(\n root: THREE.Object3D,\n morphName: string,\n meshNames?: string[],\n): THREE.Mesh[] {\n const nameFilter = meshNames?.length ? new Set(meshNames) : null;\n const meshes: THREE.Mesh[] = [];\n\n root.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (!mesh.isMesh) return;\n if (nameFilter && !nameFilter.has(mesh.name)) return;\n if (mesh.morphTargetDictionary?.[morphName] == null) return;\n meshes.push(mesh);\n });\n\n return meshes;\n}\n\nexport function buildMorphVertexPreviewSample(\n mesh: THREE.Mesh,\n morphName: string,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewSample | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const morphAttribute = getMorphPositionAttribute(mesh, morphName);\n if (!morphAttribute) return null;\n\n const candidateIndices: number[] = [];\n const magnitudes: number[] = [];\n\n for (let index = 0; index < morphAttribute.count; index += 1) {\n const magnitude = getDeltaMagnitudeAtIndex(mesh, morphAttribute, index);\n if (magnitude <= threshold) continue;\n candidateIndices.push(index);\n magnitudes.push(magnitude);\n }\n\n if (candidateIndices.length === 0) return null;\n\n const stride = candidateIndices.length > maxPoints ? Math.ceil(candidateIndices.length / maxPoints) : 1;\n const sampleCount = Math.ceil(candidateIndices.length / stride);\n const indices = new Uint32Array(sampleCount);\n const intensities = new Float32Array(sampleCount);\n\n let maxMagnitude = 0;\n let cursor = 0;\n for (let i = 0; i < candidateIndices.length; i += stride) {\n const magnitude = magnitudes[i] ?? 0;\n indices[cursor] = candidateIndices[i] ?? 0;\n intensities[cursor] = magnitude;\n maxMagnitude = Math.max(maxMagnitude, magnitude);\n cursor += 1;\n }\n\n const normalizer = maxMagnitude > 0 ? 1 / maxMagnitude : 1;\n for (let i = 0; i < intensities.length; i += 1) {\n intensities[i] *= normalizer;\n }\n\n return { indices, intensities };\n}\n\nfunction writePointColor(colors: Float32Array, offset: number, intensity: number): void {\n colors[offset] = COLOR_LOW.r + (COLOR_HIGH.r - COLOR_LOW.r) * intensity;\n colors[offset + 1] = COLOR_LOW.g + (COLOR_HIGH.g - COLOR_LOW.g) * intensity;\n colors[offset + 2] = COLOR_LOW.b + (COLOR_HIGH.b - COLOR_LOW.b) * intensity;\n}\n\nexport function buildMorphVertexPreviewRenderData(\n meshes: THREE.Mesh[],\n morphName: string,\n cache: Map<string, MorphVertexPreviewSample>,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewRenderData | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const sampledMeshes: Array<{ mesh: THREE.Mesh; sample: MorphVertexPreviewSample }> = [];\n let pointCount = 0;\n\n for (const mesh of meshes) {\n const cacheKey = `${mesh.uuid}:${morphName}:${threshold}:${maxPoints}`;\n let sample = cache.get(cacheKey) ?? null;\n if (!sample) {\n sample = buildMorphVertexPreviewSample(mesh, morphName, { threshold, maxPoints });\n if (sample) cache.set(cacheKey, sample);\n }\n if (!sample) continue;\n sampledMeshes.push({ mesh, sample });\n pointCount += sample.indices.length;\n }\n\n if (pointCount === 0) return null;\n\n const positions = new Float32Array(pointCount * 3);\n const colors = new Float32Array(pointCount * 3);\n const vertex = new THREE.Vector3();\n let cursor = 0;\n\n for (const { mesh, sample } of sampledMeshes) {\n mesh.updateWorldMatrix(true, false);\n const skinnedMesh = mesh as THREE.SkinnedMesh;\n if (skinnedMesh.isSkinnedMesh && skinnedMesh.skeleton) {\n skinnedMesh.skeleton.update();\n }\n\n for (let i = 0; i < sample.indices.length; i += 1) {\n mesh.getVertexPosition(sample.indices[i] ?? 0, vertex);\n vertex.applyMatrix4(mesh.matrixWorld);\n\n const offset = cursor * 3;\n positions[offset] = vertex.x;\n positions[offset + 1] = vertex.y;\n positions[offset + 2] = vertex.z;\n writePointColor(colors, offset, sample.intensities[i] ?? 0);\n cursor += 1;\n }\n }\n\n return {\n positions,\n colors,\n pointCount,\n meshCount: sampledMeshes.length,\n };\n}\n\ntype PreviewRenderBinding = {\n callbacks: Set<() => void>;\n previous: THREE.Scene['onBeforeRender'];\n render: THREE.Scene['onBeforeRender'];\n};\nconst previewRenderBindings = new WeakMap<THREE.Scene, PreviewRenderBinding>();\n\nfunction bindPreviewRender(scene: THREE.Scene, update: () => void): () => void {\n let binding = previewRenderBindings.get(scene);\n if (!binding) {\n const previous = scene.onBeforeRender;\n const callbacks = new Set<() => void>();\n const render: THREE.Scene['onBeforeRender'] = function (...args) {\n previous.apply(scene, args);\n callbacks.forEach(callback => callback());\n };\n binding = { callbacks, previous, render };\n scene.onBeforeRender = render;\n previewRenderBindings.set(scene, binding);\n }\n binding.callbacks.add(update);\n const current = binding;\n return () => {\n current.callbacks.delete(update);\n if (current.callbacks.size > 0) return;\n if (scene.onBeforeRender === current.render) scene.onBeforeRender = current.previous;\n if (previewRenderBindings.get(scene) === current) previewRenderBindings.delete(scene);\n };\n}\n\n/** Editor overlay sampled by the existing Three render loop, without a separate frame timer. */\nexport class MorphVertexPreview {\n private readonly cache = new Map<string, MorphVertexPreviewSample>();\n private points: THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> | null = null;\n private active: { morphName: string; meshNames?: string[] } | null = null;\n private disposed = false;\n private unbindRender: (() => void) | null = null;\n\n constructor(\n private readonly scene: THREE.Scene,\n private readonly options: MorphVertexPreviewOptions = {},\n ) {}\n\n show(morphName: string, meshNames?: string[]): void {\n if (this.disposed) return;\n if (meshNames?.length === 0) {\n this.hide();\n return;\n }\n this.active = { morphName, meshNames: meshNames?.slice() };\n this.unbindRender ??= bindPreviewRender(this.scene, () => this.update());\n this.update();\n }\n\n hide(): void {\n this.active = null;\n this.unbindRender?.();\n this.unbindRender = null;\n if (this.points) this.points.visible = false;\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.hide();\n this.cache.clear();\n if (!this.points) return;\n this.points.removeFromParent();\n this.points.geometry.dispose();\n this.points.material.dispose();\n this.points = null;\n }\n\n private createPoints(): THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> {\n const points = new THREE.Points(new THREE.BufferGeometry(), new THREE.PointsMaterial({\n size: 0.012,\n sizeAttenuation: true,\n transparent: true,\n opacity: 0.9,\n depthWrite: false,\n vertexColors: true,\n toneMapped: false,\n }));\n points.name = 'MorphVertexPreviewPoints';\n points.renderOrder = 500;\n points.frustumCulled = false;\n points.visible = false;\n this.scene.add(points);\n this.points = points;\n return points;\n }\n\n private update(): void {\n if (this.disposed || !this.active) return;\n const { morphName, meshNames } = this.active;\n const meshes = resolveMorphPreviewMeshes(this.scene, morphName, meshNames);\n const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options);\n if (!data) {\n if (this.points) this.points.visible = false;\n return;\n }\n const points = this.points ?? this.createPoints();\n this.updateAttribute(points.geometry, 'position', data.positions, data.pointCount);\n this.updateAttribute(points.geometry, 'color', data.colors, data.pointCount);\n points.geometry.computeBoundingSphere();\n points.material.size = data.pointCount > 6000 ? 0.009 : 0.012;\n points.visible = true;\n }\n\n private updateAttribute(\n geometry: THREE.BufferGeometry,\n name: string,\n values: Float32Array,\n pointCount: number,\n ): void {\n const attribute = geometry.getAttribute(name) as THREE.BufferAttribute | undefined;\n if (!attribute || attribute.count !== pointCount) {\n geometry.setAttribute(name, new THREE.BufferAttribute(values, 3));\n return;\n }\n attribute.array.set(values);\n attribute.needsUpdate = true;\n }\n}\n","import {\n AdditiveBlending,\n AnimationClip,\n BufferAttribute,\n Euler,\n InterpolateDiscrete,\n MultiplyBlending,\n NoBlending,\n NormalBlending,\n NumberKeyframeTrack,\n PropertyBinding,\n Quaternion,\n QuaternionKeyframeTrack,\n SubtractiveBlending,\n VectorKeyframeTrack,\n} from 'three';\nexport * from './annotations/index';\nexport * from './authoring';\nexport * from './character';\nexport * from './characterHost';\nexport { renderScenePlayback, createScenePlaybackFrame } from './playbackRendering';\nimport { bindModelReferencePose } from './reference-pose';\nimport { concreteTrackName, withComponentTracks } from './clipBindings';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\n\nexport { captureModelReferencePose, bindModelReferencePose, extendModelReferencePose } from './reference-pose';\nexport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nexport { ThreeNativePlaybackConnector } from './nativePlayback';\nexport type {\n ThreeNativeLoop,\n ThreeNativePlaybackOptions,\n ThreeNativePlaybackControl,\n ThreeNativePlaybackEvent,\n ThreeNativePlaybackBinding,\n} from './nativePlayback';\nimport type {\n KeyframeTrack,\n Material,\n Mesh,\n Object3D,\n} from 'three';\n\nexport const THREE_BLENDING_MODES = {\n Normal: NormalBlending,\n Additive: AdditiveBlending,\n Subtractive: SubtractiveBlending,\n Multiply: MultiplyBlending,\n None: NoBlending,\n} as const;\nexport const BLENDING_MODES = THREE_BLENDING_MODES;\n\ntype BoneEntry = {\n obj: Object3D;\n basePos: { x: number; y: number; z: number };\n baseQuat: ReturnType<Object3D['quaternion']['clone']>;\n baseEuler: { x: number; y: number; z: number; order: string };\n};\n\nconst MORPH_ATTRIBUTE_SEMANTICS = ['position', 'normal', 'tangent', 'color'] as const;\ntype MorphAttributeSemantic = typeof MORPH_ATTRIBUTE_SEMANTICS[number];\n\ntype MorphTargetInput = {\n meshName: string;\n name: string;\n relative?: boolean;\n position: ArrayLike<number>;\n normal?: ArrayLike<number>;\n tangent?: ArrayLike<number>;\n color?: ArrayLike<number>;\n};\n\ntype AddMorphTargetOptions = {\n forceGeometryReplacement?: boolean;\n replace?: boolean;\n resetInfluence?: boolean;\n};\n\ntype MorphMutationStage = {\n mesh: Mesh;\n sourceGeometry: Mesh['geometry'];\n geometry: Mesh['geometry'];\n dictionary: Record<string, number>;\n influences: number[];\n};\n\nconst createNeutralMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base) throw new Error(`Cannot create ${semantic} morph data without a base attribute`);\n\n const values = new Float32Array(base.count * base.itemSize);\n if (!geometry.morphTargetsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n values[vertexIndex * base.itemSize + component] = base.getComponent(vertexIndex, component);\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nconst createMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n data: ArrayLike<number>,\n sourceIsRelative: boolean,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base || data.length !== base.count * base.itemSize) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const values = new Float32Array(Array.from(data));\n const destinationIsRelative = geometry.morphTargetsRelative;\n if (sourceIsRelative !== destinationIsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n const offset = vertexIndex * base.itemSize + component;\n const baseValue = base.getComponent(vertexIndex, component);\n values[offset] = destinationIsRelative\n ? values[offset] - baseValue\n : values[offset] + baseValue;\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nexport type ThreeModelInspection = {\n descriptor: Record<string, unknown> & {\n morphTargets: Array<{\n id: number;\n meshId: number | undefined;\n name: string;\n hostIndex: number;\n initialValue: number;\n }>;\n };\n meshByName: Map<string, Mesh>;\n allMeshes: Mesh[];\n morphMeshes: Mesh[];\n bones: Record<string, BoneEntry>;\n meshBindings: Map<number, Mesh>;\n morphBindings: Map<number, { mesh: Mesh; index: number }>;\n boneBindings: Map<number, Object3D>;\n objectBindings: Map<number, Object3D>;\n};\n\nconst transform = (obj: Object3D) => ({\n position: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n rotation: { x: obj.quaternion.x, y: obj.quaternion.y, z: obj.quaternion.z, w: obj.quaternion.w },\n scale: { x: obj.scale.x, y: obj.scale.y, z: obj.scale.z },\n});\n\nconst snapshot = (obj: Object3D, reference?: ThreeReferencePoseNode): BoneEntry => {\n if (!reference) {\n return {\n obj,\n basePos: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n baseQuat: obj.quaternion.clone(),\n baseEuler: { x: obj.rotation.x, y: obj.rotation.y, z: obj.rotation.z, order: obj.rotation.order },\n };\n }\n const { position, rotation } = reference.transform;\n const baseQuat = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(baseQuat, reference.rotationOrder);\n return {\n obj,\n basePos: { ...position },\n baseQuat,\n baseEuler: { x: euler.x, y: euler.y, z: euler.z, order: reference.rotationOrder },\n };\n};\n\nconst boneDepth = (obj: Object3D) => {\n let depth = 0;\n let parent = obj.parent;\n while (parent) {\n if ((parent as any).isBone || parent.type === 'Bone') depth += 1;\n parent = parent.parent;\n }\n return depth;\n};\n\nconst morphEntries = (mesh: Mesh) => {\n const dictionary = mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> }).morphTargetDictionary;\n if (dictionary) {\n return Object.entries(dictionary)\n .map(([name, index]) => ({ name, index }))\n .sort((left, right) => left.index - right.index);\n }\n return (mesh.morphTargetInfluences ?? []).map((_, index) => ({ name: `morph_${index}`, index }));\n};\n\nexport class ThreeModelInspector {\n inspectModel(model: Object3D, options: {\n meshes?: Mesh[];\n profile?: any;\n /** Explicit reference captured before playback; omitted keeps legacy current-pose inspection. */\n referencePose?: ThreeModelReferencePose;\n } = {}): ThreeModelInspection {\n const references = options.referencePose ? bindModelReferencePose(model, options.referencePose) : undefined;\n const restTransform = (object: Object3D) => {\n const reference = references?.get(object);\n return reference ? {\n position: { ...reference.transform.position },\n rotation: { ...reference.transform.rotation },\n scale: { ...reference.transform.scale },\n } : transform(object);\n };\n const objects: Object3D[] = [];\n const allMeshes: Mesh[] = [];\n const boneObjects: Object3D[] = [];\n model.traverse((obj: any) => {\n objects.push(obj);\n if (obj.isMesh) allMeshes.push(obj);\n if (obj.isBone || obj.type === 'Bone') boneObjects.push(obj);\n });\n const inputMeshes = options.meshes ?? [];\n const morphMeshes = Array.from(new Set([...inputMeshes, ...allMeshes.filter((mesh) => morphEntries(mesh).length > 0)]));\n const meshByName = new Map(allMeshes.filter((mesh) => mesh.name).map((mesh) => [mesh.name, mesh]));\n const meshBindings = new Map(allMeshes.map((mesh, index) => [index + 1, mesh]));\n const boneBindings = new Map(boneObjects.map((bone, index) => [index + 1, bone]));\n const objectBindings = new Map(objects.map((object, index) => [index + 1, object]));\n const meshIds = new Map(Array.from(meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map(Array.from(boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map(Array.from(objectBindings, ([id, object]) => [object, id]));\n const morphBindings = new Map<number, { mesh: Mesh; index: number }>();\n const morphTargets: ThreeModelInspection['descriptor']['morphTargets'] = [];\n const morphIdsByMesh = new Map<Mesh, number[]>();\n let morphId = 1;\n for (const mesh of allMeshes) {\n const ids: number[] = [];\n for (const entry of morphEntries(mesh)) {\n ids.push(morphId);\n morphBindings.set(morphId, { mesh, index: entry.index });\n morphTargets.push({\n id: morphId,\n meshId: meshIds.get(mesh),\n name: entry.name,\n hostIndex: entry.index,\n initialValue: mesh.morphTargetInfluences?.[entry.index] ?? 0,\n });\n morphId += 1;\n }\n morphIdsByMesh.set(mesh, ids);\n }\n const bones: Record<string, BoneEntry> = {};\n for (const bone of boneObjects) {\n if (bone.name) bones[bone.name] = snapshot(bone, references?.get(bone));\n }\n const profile = options.profile;\n if (profile?.boneNodes) {\n for (const [key, base] of Object.entries(profile.boneNodes as Record<string, string>)) {\n const prefix = profile.bonePrefix ?? '';\n const suffix = profile.boneSuffix ?? '';\n const name = `${base.startsWith(prefix) ? '' : prefix}${base}${base.endsWith(suffix) ? '' : suffix}`;\n const object = model.getObjectByName(name) ?? model.getObjectByName(base);\n if (object) bones[key] = bones[object.name] ?? snapshot(object, references?.get(object));\n }\n }\n return {\n descriptor: {\n id: model.uuid,\n name: model.name || undefined,\n meshes: allMeshes.map((mesh) => ({\n id: meshIds.get(mesh),\n name: mesh.name,\n morphTargetIds: morphIdsByMesh.get(mesh) ?? [],\n visible: mesh.visible,\n })),\n morphTargets,\n bones: boneObjects.map((bone) => {\n const world = references?.get(bone)?.worldPosition ?? bone.getWorldPosition(bone.position.clone());\n const parent = bone.parent && ((bone.parent as any).isBone || bone.parent.type === 'Bone')\n ? bone.parent.name || null\n : null;\n return {\n id: boneIds.get(bone),\n name: bone.name,\n parentName: parent,\n worldPosition: { x: world.x, y: world.y, z: world.z },\n depth: boneDepth(bone),\n restTransform: restTransform(bone),\n };\n }),\n objects: objects.map((object) => ({\n id: objectIds.get(object),\n name: object.name,\n isBone: !!((object as any).isBone || object.type === 'Bone'),\n isCamera: !!(object as any).isCamera,\n restTransform: restTransform(object),\n })),\n },\n meshByName,\n allMeshes,\n morphMeshes,\n bones,\n meshBindings,\n morphBindings,\n boneBindings,\n objectBindings,\n };\n }\n}\n\nconst findTrackTarget = (model: Object3D, track: KeyframeTrack) => {\n try {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const key = parsed.objectName === 'bones' && parsed.objectIndex\n ? String(parsed.objectIndex)\n : parsed.nodeName;\n const object = key\n ? model.getObjectByProperty('uuid', key) ?? PropertyBinding.findNode(model, key)\n : model;\n return { parsed, object };\n } catch {\n return null;\n }\n};\n\nexport type ClipIRTrack = {\n id?: number;\n channelId?: number;\n target: {\n kind?: string;\n meshId?: number;\n morphTargetId?: number;\n boneId?: number;\n objectId?: number;\n property?: string;\n };\n valueType: string;\n times: number[];\n values: number[];\n interpolation?: string;\n /** Replace the first sample with the bound property's current value. */\n inheritStart?: boolean;\n sourceName?: string;\n};\n\nexport type ClipIR = {\n name: string;\n durationSeconds?: number;\n channels?: Array<{ id: number; kind: string; name?: string }>;\n tracks: ClipIRTrack[];\n};\n\n/**\n * Convert host-neutral ClipIR (concrete morph/bone tracks) into a Three.js\n * AnimationClip. The host AnimationMixer owns playback and lerping.\n *\n * Inherited starts are captured from the current scene during this call. Cache\n * the ClipIR and call this again immediately before each play/replay, including\n * utterance replacement. Reusing a returned AnimationClip retains its old start.\n * The source ClipIR is never modified. A delayed inherited first key holds the\n * captured pose until that timestamp, matching ordinary Three track sampling.\n */\nexport function createAnimationClipFromClipIR(\n clip: ClipIR,\n inspection: ThreeModelInspection,\n): AnimationClip {\n const tracks: KeyframeTrack[] = [];\n for (const track of clip.tracks ?? []) {\n const kind = track.target?.kind;\n const trackName = concreteTrackName(track.target, inspection);\n if (!trackName) continue;\n const times = Array.from(track.times ?? []);\n const values = Array.from(track.values ?? []);\n if (!times.length || !values.length) continue;\n // Imported step tracks must keep their hold semantics on the host mixer.\n // Omitted/linear interpolation retains the existing Three default.\n const interpolation = track.interpolation === 'step' ? InterpolateDiscrete : undefined;\n\n if (kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(track.target.morphTargetId));\n if (!binding?.mesh) continue;\n if (track.inheritStart) {\n values[0] = binding.mesh.morphTargetInfluences?.[binding.index] ?? 0;\n }\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n continue;\n }\n\n if (kind === 'boneTransform' || kind === 'objectTransform') {\n const object = kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(track.target.boneId))\n : inspection.objectBindings.get(Number(track.target.objectId));\n if (!object) continue;\n const property = track.target.property ?? 'rotation';\n if (property === 'rotation' || property === 'quaternion') {\n if (track.inheritStart) object.quaternion.toArray(values, 0);\n tracks.push(new QuaternionKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') {\n const axis = property.slice(-1).toLowerCase() as 'x' | 'y' | 'z';\n if (track.inheritStart) values[0] = object.rotation[axis];\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'position') {\n if (track.inheritStart) object.position.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'scale') {\n if (track.inheritStart) object.scale.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n }\n continue;\n }\n\n if (kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(track.target.meshId));\n if (!mesh) continue;\n if (track.inheritStart) values[0] = Number(mesh.visible);\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n }\n }\n\n const duration = Number.isFinite(clip.durationSeconds)\n ? Number(clip.durationSeconds)\n : -1;\n return new AnimationClip(clip.name || 'clip', duration, tracks);\n}\n\nexport function serializeAnimationClips(\n model: Object3D,\n clips: readonly AnimationClip[],\n inspection: ThreeModelInspection,\n) {\n const meshIds = new Map(Array.from(inspection.meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map<object, number>(Array.from(inspection.boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map<object, number>(Array.from(inspection.objectBindings, ([id, object]) => [object, id]));\n return clips.map((clip) => {\n const tracks: ClipIRTrack[] = [];\n const channelKinds = new Map<string, number>();\n const channelId = (kind: 'face' | 'body' | 'scene') => {\n const existing = channelKinds.get(kind);\n if (existing) return existing;\n const id = channelKinds.size + 1;\n channelKinds.set(kind, id);\n return id;\n };\n withComponentTracks(clip).tracks.forEach((track, index) => {\n const found = findTrackTarget(model, track);\n if (!found?.object) return;\n const { parsed, object } = found;\n let target: ClipIRTrack['target'] | null = null;\n const property = parsed.propertyName;\n if ((property === 'morphTargetInfluences' || property === 'weights') && (object as any).isMesh) {\n const mesh = object as Mesh;\n const requested = parsed.propertyIndex;\n const indexValue = typeof requested === 'number'\n ? requested\n : Number.isFinite(Number(requested))\n ? Number(requested)\n : mesh.morphTargetDictionary?.[String(requested)];\n const binding = Array.from(inspection.morphBindings).find(([, entry]) => entry.mesh === mesh && entry.index === indexValue);\n if (binding) target = { kind: 'morphTarget', meshId: meshIds.get(mesh), morphTargetId: binding[0] };\n } else if (property === 'visible' && (object as any).isMesh) {\n target = { kind: 'meshVisibility', meshId: meshIds.get(object as Mesh) };\n } else {\n const transformProperty = property === 'rotation' && ['x', 'y', 'z'].includes(String(parsed.propertyIndex))\n ? `euler${String(parsed.propertyIndex).toUpperCase()}`\n : property === 'quaternion'\n ? 'rotation'\n : property === 'position'\n ? 'position'\n : property === 'scale'\n ? 'scale'\n : null;\n if (transformProperty) {\n const boneId = boneIds.get(object);\n target = boneId\n ? { kind: 'boneTransform', boneId, property: transformProperty }\n : { kind: 'objectTransform', objectId: objectIds.get(object), property: transformProperty };\n }\n }\n if (!target) return;\n const kind = target.kind === 'morphTarget'\n ? 'face'\n : target.kind === 'boneTransform'\n ? 'body'\n : 'scene';\n // glTF cubic tracks store in-tangent/value/out-tangent per key. The\n // registry/validation view describes values; native playback retains\n // the original track and its Three interpolant, including its tangents.\n const cubic = !!(track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline;\n const size = track.getValueSize() / (cubic ? 3 : 1);\n if (!Array.from(track.values).every(Number.isFinite)) {\n throw new Error(`Animation track ${JSON.stringify(track.name)} contains non-finite samples.`);\n }\n const values = cubic\n ? Array.from(track.times).flatMap((_, key) => Array.from(track.values.slice((key * 3 + 1) * size, (key * 3 + 2) * size)))\n : Array.from(track.values);\n tracks.push({\n id: index + 1,\n channelId: channelId(kind),\n target,\n valueType: size === 4 ? 'quat' : size === 3 ? 'vec3' : 'scalar',\n times: Array.from(track.times),\n values,\n interpolation: track.getInterpolation() === InterpolateDiscrete ? 'step' : 'linear',\n sourceName: track.name,\n });\n });\n return {\n name: clip.name,\n durationSeconds: clip.duration,\n channels: Array.from(channelKinds, ([kind, id]) => ({ id, kind, name: kind })),\n tracks,\n };\n });\n}\n\ntype MaterialConfig = {\n renderOrder?: number;\n transparent?: boolean;\n opacity?: number;\n depthWrite?: boolean;\n depthTest?: boolean;\n blending?: keyof typeof THREE_BLENDING_MODES;\n};\n\nconst materials = (value: Material | Material[] | undefined): Material[] =>\n value ? (Array.isArray(value) ? value : [value]) : [];\n\nexport class ThreeFrameApplier {\n private meshes = new Map<number, Mesh>();\n private morphs = new Map<number, { mesh: Mesh; index: number }>();\n private bones = new Map<number, Object3D>();\n private objects = new Map<number, Object3D>();\n private originalEmissive = new Map<string, { color: number; intensity: number }>();\n\n setBindings(inspection: ThreeModelInspection) {\n this.meshes = new Map(inspection.meshBindings);\n this.morphs = new Map(inspection.morphBindings);\n this.bones = new Map(inspection.boneBindings);\n this.objects = new Map(inspection.objectBindings);\n }\n\n applyPackedMorphFrameDelta(values: ArrayLike<number>, stride = 4) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const binding = this.morphs.get(values[offset + 1]);\n if (binding?.mesh.morphTargetInfluences) {\n binding.mesh.morphTargetInfluences[binding.index] = values[offset + 2] ?? 0;\n }\n }\n }\n\n applyPackedBoneFrameDelta(values: ArrayLike<number>, stride = 9) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const bone = this.bones.get(values[offset]);\n if (!bone) continue;\n const flags = values[offset + 8] ?? 0;\n if (flags & 1) bone.position.set(values[offset + 1], values[offset + 2], values[offset + 3]);\n if (flags & 2) bone.quaternion.set(values[offset + 4], values[offset + 5], values[offset + 6], values[offset + 7]).normalize();\n bone.updateMatrixWorld(false);\n }\n }\n\n applySceneFrame(frame: string | Record<string, any>) {\n const value = typeof frame === 'string' ? JSON.parse(frame) : frame;\n for (const write of value.boneScales ?? []) this.bones.get(write.boneId)?.scale.fromArray(write.scale);\n for (const write of value.objects ?? []) {\n const object = this.objects.get(write.objectId);\n if (!object) continue;\n if (write.position) object.position.fromArray(write.position);\n if (write.rotation) object.quaternion.fromArray(write.rotation).normalize();\n if (write.scale) object.scale.fromArray(write.scale);\n object.updateMatrixWorld(false);\n }\n for (const write of value.meshes ?? []) {\n const mesh = this.meshes.get(write.meshId);\n if (mesh) mesh.visible = write.visible;\n }\n }\n\n applyMeshMaterialConfigs(root: Object3D, configs: Record<string, { visible?: boolean; material?: MaterialConfig }>) {\n root.traverse((object: any) => {\n if (!object.isMesh || !object.name) return;\n const config = configs[object.name];\n if (!config) return;\n // Profile replay runs when a model binds and when its profile changes.\n // A visibility-only entry is just as authored as a material override.\n if (typeof config.visible === 'boolean') object.visible = config.visible;\n if (config.material) this.applyMaterial(object, config.material);\n });\n }\n\n getMeshMaterialConfig(root: Object3D, name: string) {\n let result: Record<string, unknown> | null = null;\n this.visitMesh(root, name, (mesh) => {\n const material: any = materials((mesh as any).material)[0];\n if (!material) return;\n const blending = Object.entries(THREE_BLENDING_MODES).find(([, value]) => value === material.blending)?.[0] ?? 'Normal';\n result = { renderOrder: mesh.renderOrder, transparent: material.transparent, opacity: material.opacity, depthWrite: material.depthWrite, depthTest: material.depthTest, blending };\n });\n return result;\n }\n\n setMeshMaterialConfig(root: Object3D, name: string, config: MaterialConfig) {\n this.visitMesh(root, name, (mesh) => this.applyMaterial(mesh, config));\n }\n\n setMeshVisible(root: Object3D, name: string, visible: boolean) {\n this.visitMesh(root, name, (mesh) => { mesh.visible = visible; });\n }\n\n highlightMesh(root: Object3D, name: string | null, color = 0x00ffff, intensity = 0.5) {\n root.traverse((object: any) => {\n if (!object.isMesh) return;\n for (const material of materials(object.material) as any[]) {\n if (!material.emissive) continue;\n const key = `${object.uuid}:${material.uuid}`;\n if (name === object.name) {\n if (!this.originalEmissive.has(key)) this.originalEmissive.set(key, { color: material.emissive.getHex(), intensity: material.emissiveIntensity ?? 0 });\n material.emissive.setHex(color);\n material.emissiveIntensity = intensity;\n } else {\n const original = this.originalEmissive.get(key);\n if (original) {\n material.emissive.setHex(original.color);\n material.emissiveIntensity = original.intensity;\n }\n }\n }\n });\n }\n\n applyHairAppearance(meshes: readonly Mesh[], appearance: any) {\n for (const mesh of meshes) {\n for (const material of materials((mesh as any).material) as any[]) {\n if (appearance.baseColor && material.color) material.color.set(appearance.baseColor);\n if (appearance.emissive && material.emissive) material.emissive.set(appearance.emissive);\n if (typeof appearance.emissiveIntensity === 'number') material.emissiveIntensity = appearance.emissiveIntensity;\n material.needsUpdate = true;\n }\n }\n }\n\n addMorphTarget(\n root: Object3D,\n target: MorphTargetInput,\n options: AddMorphTargetOptions = {},\n ) {\n return this.addMorphTargets(root, [target], options)[`${target.meshName}:${target.name}`];\n }\n\n addMorphTargets(\n root: Object3D,\n targets: readonly MorphTargetInput[],\n options: AddMorphTargetOptions = {},\n ) {\n if (targets.length === 0) return {};\n\n const stages = new Map<string, MorphMutationStage>();\n const result: Record<string, number> = {};\n const batchKeys = new Set<string>();\n\n try {\n for (const target of targets) {\n const key = `${target.meshName}:${target.name}`;\n if (batchKeys.has(key)) throw new Error(`Morph target appears more than once in batch: ${key}`);\n batchKeys.add(key);\n\n let stage = stages.get(target.meshName);\n if (!stage) {\n const mesh = root.getObjectByName(target.meshName) as Mesh | null;\n if (!mesh || !(mesh as any).isMesh) throw new Error(`Mesh not found: ${target.meshName}`);\n stage = {\n mesh,\n sourceGeometry: mesh.geometry,\n geometry: mesh.geometry.clone(),\n dictionary: {\n ...(mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> })\n .morphTargetDictionary\n ?? {}),\n },\n influences: [...(mesh.morphTargetInfluences ?? [])],\n };\n stages.set(target.meshName, stage);\n }\n\n result[key] = this.applyMorphTargetToStage(stage, target, options);\n }\n } catch (error) {\n for (const stage of stages.values()) stage.geometry.dispose();\n throw error;\n }\n\n const replaceGeometry = options.forceGeometryReplacement !== false;\n for (const stage of stages.values()) {\n const committedGeometry: any = replaceGeometry ? stage.geometry : stage.sourceGeometry;\n if (!replaceGeometry) {\n committedGeometry.morphAttributes = stage.geometry.morphAttributes;\n committedGeometry.morphTargetsRelative = stage.geometry.morphTargetsRelative;\n committedGeometry.boundingBox = stage.geometry.boundingBox;\n committedGeometry.boundingSphere = stage.geometry.boundingSphere;\n }\n committedGeometry.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.geometry = committedGeometry;\n stage.mesh.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.morphTargetInfluences = [...stage.influences];\n if (!replaceGeometry) stage.geometry.dispose();\n }\n if (replaceGeometry) {\n const replacedGeometries = new Set(Array.from(stages.values(), (stage) => stage.sourceGeometry));\n for (const sourceGeometry of replacedGeometries) {\n let stillInUse = false;\n root.traverse((object: any) => {\n if (object.isMesh && object.geometry === sourceGeometry) stillInUse = true;\n });\n if (!stillInUse) sourceGeometry.dispose();\n }\n }\n\n return result;\n }\n\n private applyMorphTargetToStage(\n stage: MorphMutationStage,\n target: MorphTargetInput,\n options: AddMorphTargetOptions,\n ) {\n const geometry: any = stage.geometry;\n const dictionary = stage.dictionary;\n if (!target.name?.trim()) throw new Error(`Morph target name is required for mesh: ${target.meshName}`);\n const configuredIndex = dictionary[target.name];\n const existing = Number.isInteger(configuredIndex) && configuredIndex >= 0\n ? configuredIndex\n : undefined;\n if (existing !== undefined && !options.replace) throw new Error(`Morph target already exists: ${target.name}`);\n\n const usedIndices = Object.values(dictionary)\n .map((value) => {\n if (!Number.isInteger(value) || value < 0) throw new Error(`Invalid morph target index on ${target.meshName}: ${value}`);\n return value;\n });\n const currentTargetCount = Math.max(\n 0,\n ...Object.values(geometry.morphAttributes as Record<string, unknown[]>).map((attributes) => attributes?.length ?? 0),\n usedIndices.length > 0 ? Math.max(...usedIndices) + 1 : 0,\n stage.influences.length,\n );\n const index = existing ?? currentTargetCount;\n const targetCount = Math.max(currentTargetCount, index + 1);\n const sourceIsRelative = target.relative !== false;\n if (currentTargetCount === 0) geometry.morphTargetsRelative = sourceIsRelative;\n\n for (const semantic of MORPH_ATTRIBUTE_SEMANTICS) {\n const data = target[semantic] as ArrayLike<number> | undefined;\n const existingAttributes = geometry.morphAttributes[semantic] as Array<BufferAttribute | undefined> | undefined;\n if (!data && existingAttributes?.length === 0) {\n delete geometry.morphAttributes[semantic];\n continue;\n }\n if (!data && !existingAttributes) continue;\n\n const base = geometry.getAttribute(semantic);\n if (!base || (data && data.length !== base.count * base.itemSize)) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const attributes = [...(existingAttributes ?? [])];\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n if (targetIndex === index && data) {\n attributes[targetIndex] = createMorphAttribute(\n geometry,\n semantic,\n target.name,\n data,\n sourceIsRelative,\n );\n } else if (!attributes[targetIndex] || targetIndex === index) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n geometry,\n semantic,\n targetIndex === index ? target.name : `morph_${targetIndex}`,\n );\n }\n }\n geometry.morphAttributes[semantic] = attributes;\n }\n\n dictionary[target.name] = index;\n geometry.morphTargetDictionary = { ...dictionary };\n while (stage.influences.length < targetCount) stage.influences.push(0);\n if (options.resetInfluence !== false) stage.influences[index] = 0;\n geometry.computeBoundingBox?.();\n geometry.computeBoundingSphere?.();\n return index;\n }\n\n private applyMaterial(mesh: Mesh, config: MaterialConfig) {\n if (typeof config.renderOrder === 'number') mesh.renderOrder = config.renderOrder;\n for (const material of materials((mesh as any).material) as any[]) {\n if (typeof config.opacity === 'number') material.opacity = config.opacity;\n if (typeof config.transparent === 'boolean') material.transparent = config.transparent;\n else if (typeof config.opacity === 'number' && config.opacity < 1) material.transparent = true;\n if (typeof config.depthWrite === 'boolean') material.depthWrite = config.depthWrite;\n if (typeof config.depthTest === 'boolean') material.depthTest = config.depthTest;\n if (config.blending) material.blending = THREE_BLENDING_MODES[config.blending];\n material.needsUpdate = true;\n }\n }\n\n private visitMesh(root: Object3D, name: string, visit: (mesh: Mesh) => void) {\n root.traverse((object: any) => { if (object.isMesh && object.name === name) visit(object); });\n }\n}\n\nexport const collectMorphMeshes = (root: Object3D) => {\n const meshes: Mesh[] = [];\n root.traverse((object: any) => { if (object.isMesh && morphEntries(object).length > 0) meshes.push(object); });\n return meshes;\n};\n\nexport * from './model';\nexport * from './scene';\n\nexport * from './editor/SkeletonOverlay';\nexport * from './editor/morphVertexPreview';\n"]}
|