@zephyr3d/scene 0.9.5 → 0.9.7

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.
Files changed (621) hide show
  1. package/dist/animation/joint_dynamics/controller.js +92 -32
  2. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  3. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  4. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/joint_dynamics/solver.js +71 -27
  8. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  9. package/dist/animation/joint_dynamics_modifier.js +21 -20
  10. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  11. package/dist/animation/skeleton.js +7 -10
  12. package/dist/animation/skeleton.js.map +1 -1
  13. package/dist/app/engine.js +134 -140
  14. package/dist/app/engine.js.map +1 -1
  15. package/dist/app/scriptregistry.js +47 -16
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +3 -1
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +346 -7
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/avatar/wardrobe.js +20 -16
  22. package/dist/avatar/wardrobe.js.map +1 -1
  23. package/dist/camera/camera.js +416 -210
  24. package/dist/camera/camera.js.map +1 -1
  25. package/dist/index.d.ts +1350 -621
  26. package/dist/index.js +6 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/material/blinn.js +1 -1
  29. package/dist/material/blinn.js.map +1 -1
  30. package/dist/material/lambert.js +1 -1
  31. package/dist/material/lambert.js.map +1 -1
  32. package/dist/material/material.js +23 -1
  33. package/dist/material/material.js.map +1 -1
  34. package/dist/material/meshmaterial.js +178 -23
  35. package/dist/material/meshmaterial.js.map +1 -1
  36. package/dist/material/mixins/albedocolor.js +4 -4
  37. package/dist/material/mixins/albedocolor.js.map +1 -1
  38. package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
  39. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/lambert.js +2 -1
  41. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
  43. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
  45. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
  47. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  48. package/dist/material/mixins/lit.js +1 -1
  49. package/dist/material/mixins/lit.js.map +1 -1
  50. package/dist/material/mixins/pbr/common.js +276 -65
  51. package/dist/material/mixins/pbr/common.js.map +1 -1
  52. package/dist/material/mixins/texture.js +3 -3
  53. package/dist/material/mixins/texture.js.map +1 -1
  54. package/dist/material/mixins/vertexcolor.js +2 -2
  55. package/dist/material/mixins/vertexcolor.js.map +1 -1
  56. package/dist/material/msdf_text.js +3 -3
  57. package/dist/material/msdf_text.js.map +1 -1
  58. package/dist/material/mtoon.js +574 -0
  59. package/dist/material/mtoon.js.map +1 -0
  60. package/dist/material/pbrblueprint.js +499 -336
  61. package/dist/material/pbrblueprint.js.map +1 -1
  62. package/dist/material/pbrmr.js +118 -100
  63. package/dist/material/pbrmr.js.map +1 -1
  64. package/dist/material/pbrsg.js +1 -1
  65. package/dist/material/pbrsg.js.map +1 -1
  66. package/dist/material/shader/helper.js +324 -294
  67. package/dist/material/shader/helper.js.map +1 -1
  68. package/dist/material/subsurfaceprofile.js +812 -0
  69. package/dist/material/subsurfaceprofile.js.map +1 -0
  70. package/dist/material/unlit.js +1 -1
  71. package/dist/material/unlit.js.map +1 -1
  72. package/dist/posteffect/compositor.js +46 -11
  73. package/dist/posteffect/compositor.js.map +1 -1
  74. package/dist/posteffect/ssr.js +422 -96
  75. package/dist/posteffect/ssr.js.map +1 -1
  76. package/dist/posteffect/sss.js +1053 -0
  77. package/dist/posteffect/sss.js.map +1 -0
  78. package/dist/posteffect/taa.js +61 -60
  79. package/dist/posteffect/taa.js.map +1 -1
  80. package/dist/render/abuffer_oit.js +63 -12
  81. package/dist/render/abuffer_oit.js.map +1 -1
  82. package/dist/render/cluster_light.js +6 -5
  83. package/dist/render/cluster_light.js.map +1 -1
  84. package/dist/render/drawable.js +1 -5
  85. package/dist/render/drawable.js.map +1 -1
  86. package/dist/render/drawable_mixin.js +2 -1
  87. package/dist/render/drawable_mixin.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +2 -1
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +2 -1
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +2 -1
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/lightpass.js +110 -23
  95. package/dist/render/lightpass.js.map +1 -1
  96. package/dist/render/render_queue.js +51 -8
  97. package/dist/render/render_queue.js.map +1 -1
  98. package/dist/render/renderer.js +80 -66
  99. package/dist/render/renderer.js.map +1 -1
  100. package/dist/render/rendergraph/device_pool_allocator.js +8 -0
  101. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  102. package/dist/render/rendergraph/forward_plus_builder.js +481 -95
  103. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  104. package/dist/render/rendergraph/history_resource_manager.js +55 -0
  105. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  106. package/dist/render/rendergraph/history_resources.js +3 -1
  107. package/dist/render/rendergraph/history_resources.js.map +1 -1
  108. package/dist/render/rendergraph/types.js.map +1 -1
  109. package/dist/render/renderpass.js +10 -4
  110. package/dist/render/renderpass.js.map +1 -1
  111. package/dist/render/sky.js +31 -1
  112. package/dist/render/sky.js.map +1 -1
  113. package/dist/render/weightedblended_oit.js +23 -5
  114. package/dist/render/weightedblended_oit.js.map +1 -1
  115. package/dist/scene/basesprite.js +4 -2
  116. package/dist/scene/basesprite.js.map +1 -1
  117. package/dist/scene/batchgroup.js +3 -1
  118. package/dist/scene/batchgroup.js.map +1 -1
  119. package/dist/scene/environment.js +11 -1
  120. package/dist/scene/environment.js.map +1 -1
  121. package/dist/scene/light.js +21 -3
  122. package/dist/scene/light.js.map +1 -1
  123. package/dist/scene/mesh.js +29 -14
  124. package/dist/scene/mesh.js.map +1 -1
  125. package/dist/scene/meshdrawable.js +6 -0
  126. package/dist/scene/meshdrawable.js.map +1 -1
  127. package/dist/scene/msdftext.js +5 -2
  128. package/dist/scene/msdftext.js.map +1 -1
  129. package/dist/scene/msdftextsprite.js +5 -3
  130. package/dist/scene/msdftextsprite.js.map +1 -1
  131. package/dist/scene/particlesys.js +3 -1
  132. package/dist/scene/particlesys.js.map +1 -1
  133. package/dist/scene/scene.js +6 -5
  134. package/dist/scene/scene.js.map +1 -1
  135. package/dist/scene/terrain-cm/grass.js +4 -2
  136. package/dist/scene/terrain-cm/grass.js.map +1 -1
  137. package/dist/scene/terrain-cm/grassmaterial.js +2 -1
  138. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  139. package/dist/scene/terrain-cm/terrain-cm.js +4 -2
  140. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  141. package/dist/scene/water.js +4 -2
  142. package/dist/scene/water.js.map +1 -1
  143. package/dist/shaders/shadow.js +26 -393
  144. package/dist/shaders/shadow.js.map +1 -1
  145. package/dist/shadow/esm.js +112 -12
  146. package/dist/shadow/esm.js.map +1 -1
  147. package/dist/shadow/pcf_opt.js +2 -2
  148. package/dist/shadow/pcf_opt.js.map +1 -1
  149. package/dist/shadow/pcf_pd.js +19 -10
  150. package/dist/shadow/pcf_pd.js.map +1 -1
  151. package/dist/shadow/shader.js +58 -7
  152. package/dist/shadow/shader.js.map +1 -1
  153. package/dist/shadow/shadow_impl.js +6 -0
  154. package/dist/shadow/shadow_impl.js.map +1 -1
  155. package/dist/shadow/shadow_region.js +229 -0
  156. package/dist/shadow/shadow_region.js.map +1 -0
  157. package/dist/shadow/shadowmapper.js +67 -59
  158. package/dist/shadow/shadowmapper.js.map +1 -1
  159. package/dist/shadow/vsm.js +45 -19
  160. package/dist/shadow/vsm.js.map +1 -1
  161. package/dist/text/font/cff_font.js +890 -0
  162. package/dist/text/font/cff_font.js.map +1 -0
  163. package/dist/text/font/font_asset.js +17 -3
  164. package/dist/text/font/font_asset.js.map +1 -1
  165. package/dist/utility/blueprint/common/constants.js +8 -8
  166. package/dist/utility/blueprint/common/constants.js.map +1 -1
  167. package/dist/utility/blueprint/material/pbr.js +31 -4
  168. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  169. package/dist/utility/blueprint/material/texture.js +1 -17
  170. package/dist/utility/blueprint/material/texture.js.map +1 -1
  171. package/dist/utility/serialization/manager.js +327 -359
  172. package/dist/utility/serialization/manager.js.map +1 -1
  173. package/dist/utility/serialization/scene/animation.js +5 -2
  174. package/dist/utility/serialization/scene/animation.js.map +1 -1
  175. package/dist/utility/serialization/scene/batch.js +4 -1
  176. package/dist/utility/serialization/scene/batch.js.map +1 -1
  177. package/dist/utility/serialization/scene/camera.js +249 -54
  178. package/dist/utility/serialization/scene/camera.js.map +1 -1
  179. package/dist/utility/serialization/scene/common.js +37 -1
  180. package/dist/utility/serialization/scene/common.js.map +1 -1
  181. package/dist/utility/serialization/scene/light.js +42 -3
  182. package/dist/utility/serialization/scene/light.js.map +1 -1
  183. package/dist/utility/serialization/scene/material.js +1112 -646
  184. package/dist/utility/serialization/scene/material.js.map +1 -1
  185. package/dist/utility/serialization/scene/mesh.js +7 -4
  186. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  187. package/dist/utility/serialization/scene/node.js +31 -12
  188. package/dist/utility/serialization/scene/node.js.map +1 -1
  189. package/dist/utility/serialization/scene/particle.js +4 -1
  190. package/dist/utility/serialization/scene/particle.js.map +1 -1
  191. package/dist/utility/serialization/scene/primitive.js +3 -1
  192. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  193. package/dist/utility/serialization/scene/scene.js +18 -0
  194. package/dist/utility/serialization/scene/scene.js.map +1 -1
  195. package/dist/utility/serialization/scene/sprite.js +6 -3
  196. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  197. package/dist/utility/serialization/scene/terrain.js +5 -2
  198. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  199. package/dist/utility/serialization/scene/text.js +3 -1
  200. package/dist/utility/serialization/scene/text.js.map +1 -1
  201. package/dist/utility/serialization/scene/water.js +4 -1
  202. package/dist/utility/serialization/scene/water.js.map +1 -1
  203. package/dist/utility/textures/ltcdata.js +6 -0
  204. package/dist/utility/textures/ltcdata.js.map +1 -0
  205. package/dist/utility/textures/ltclut.js +61 -0
  206. package/dist/utility/textures/ltclut.js.map +1 -0
  207. package/dist/values.js +9 -1
  208. package/dist/values.js.map +1 -1
  209. package/package.json +3 -3
  210. package/dist/animation/ik/ik_chain_builder.js +0 -68
  211. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  212. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  213. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  214. package/dist/animation/ik/ik_track.js +0 -96
  215. package/dist/animation/ik/ik_track.js.map +0 -1
  216. package/dist/animation/ik_postprocessor.js +0 -71
  217. package/dist/animation/ik_postprocessor.js.map +0 -1
  218. package/dist/animation/joint_dynamics/math.js +0 -16
  219. package/dist/animation/joint_dynamics/math.js.map +0 -1
  220. package/dist/animation/manual_transform_processor.js +0 -156
  221. package/dist/animation/manual_transform_processor.js.map +0 -1
  222. package/dist/animation/skeleton_postprocessor.js +0 -50
  223. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  224. package/dist/animation/spring2/collision.js +0 -469
  225. package/dist/animation/spring2/collision.js.map +0 -1
  226. package/dist/animation/spring2/constraints.js +0 -329
  227. package/dist/animation/spring2/constraints.js.map +0 -1
  228. package/dist/animation/spring2/controller.js +0 -434
  229. package/dist/animation/spring2/controller.js.map +0 -1
  230. package/dist/animation/spring2/math.js +0 -16
  231. package/dist/animation/spring2/math.js.map +0 -1
  232. package/dist/animation/spring2/solver.js +0 -624
  233. package/dist/animation/spring2/solver.js.map +0 -1
  234. package/dist/animation/spring2/spring_system.js +0 -118
  235. package/dist/animation/spring2/spring_system.js.map +0 -1
  236. package/dist/animation/spring2/types.js +0 -19
  237. package/dist/animation/spring2/types.js.map +0 -1
  238. package/dist/animation/spring_postprocessor.js +0 -54
  239. package/dist/animation/spring_postprocessor.js.map +0 -1
  240. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
  241. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  242. package/dist/asset/loaders/gltf/helpers.js +0 -331
  243. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  244. package/dist/material/sprite3d.js +0 -301
  245. package/dist/material/sprite3d.js.map +0 -1
  246. package/dist/material/sprite3d_std.js +0 -116
  247. package/dist/material/sprite3d_std.js.map +0 -1
  248. package/dist/material/sprite3dblueprint.js +0 -235
  249. package/dist/material/sprite3dblueprint.js.map +0 -1
  250. package/dist/material/sprite_sdf.js +0 -106
  251. package/dist/material/sprite_sdf.js.map +0 -1
  252. package/dist/material/terrainmaterial.js +0 -368
  253. package/dist/material/terrainmaterial.js.map +0 -1
  254. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  255. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  256. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  257. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  258. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  259. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  260. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  261. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  262. package/dist/render/deferredlightpass.js +0 -510
  263. package/dist/render/deferredlightpass.js.map +0 -1
  264. package/dist/render/deferredshadowlightpass.js +0 -428
  265. package/dist/render/deferredshadowlightpass.js.map +0 -1
  266. package/dist/render/gbufferpass.js +0 -50
  267. package/dist/render/gbufferpass.js.map +0 -1
  268. package/dist/scene/sdftextsprite.js +0 -322
  269. package/dist/scene/sdftextsprite.js.map +0 -1
  270. package/dist/scene/sprite3d.js +0 -18
  271. package/dist/scene/sprite3d.js.map +0 -1
  272. package/dist/scene/terrain/grass.js +0 -280
  273. package/dist/scene/terrain/grass.js.map +0 -1
  274. package/dist/scene/terrain/heightfield.js +0 -475
  275. package/dist/scene/terrain/heightfield.js.map +0 -1
  276. package/dist/scene/terrain/patch.js +0 -532
  277. package/dist/scene/terrain/patch.js.map +0 -1
  278. package/dist/scene/terrain/quadtree.js +0 -461
  279. package/dist/scene/terrain/quadtree.js.map +0 -1
  280. package/dist/scene/terrain/terrain.js +0 -231
  281. package/dist/scene/terrain/terrain.js.map +0 -1
  282. package/dist/src/animation/animation.js +0 -127
  283. package/dist/src/animation/animation.js.map +0 -1
  284. package/dist/src/animation/animationset.js +0 -255
  285. package/dist/src/animation/animationset.js.map +0 -1
  286. package/dist/src/animation/animationtrack.js +0 -34
  287. package/dist/src/animation/animationtrack.js.map +0 -1
  288. package/dist/src/animation/eulerrotationtrack.js +0 -52
  289. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  290. package/dist/src/animation/morphtarget.js +0 -93
  291. package/dist/src/animation/morphtarget.js.map +0 -1
  292. package/dist/src/animation/morphtrack.js +0 -70
  293. package/dist/src/animation/morphtrack.js.map +0 -1
  294. package/dist/src/animation/proptrack.js +0 -161
  295. package/dist/src/animation/proptrack.js.map +0 -1
  296. package/dist/src/animation/rotationtrack.js +0 -51
  297. package/dist/src/animation/rotationtrack.js.map +0 -1
  298. package/dist/src/animation/scaletrack.js +0 -50
  299. package/dist/src/animation/scaletrack.js.map +0 -1
  300. package/dist/src/animation/skeleton.js +0 -204
  301. package/dist/src/animation/skeleton.js.map +0 -1
  302. package/dist/src/animation/translationtrack.js +0 -50
  303. package/dist/src/animation/translationtrack.js.map +0 -1
  304. package/dist/src/app/app.js +0 -129
  305. package/dist/src/app/app.js.map +0 -1
  306. package/dist/src/app/inputmgr.js +0 -267
  307. package/dist/src/app/inputmgr.js.map +0 -1
  308. package/dist/src/asset/assetmanager.js +0 -404
  309. package/dist/src/asset/assetmanager.js.map +0 -1
  310. package/dist/src/asset/builtin.js +0 -337
  311. package/dist/src/asset/builtin.js.map +0 -1
  312. package/dist/src/asset/loaders/dds/dds.js +0 -470
  313. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  314. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  315. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  316. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  317. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  318. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  319. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  320. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  321. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  322. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  323. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  324. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  325. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  326. package/dist/src/asset/loaders/loader.js +0 -45
  327. package/dist/src/asset/loaders/loader.js.map +0 -1
  328. package/dist/src/asset/model.js +0 -414
  329. package/dist/src/asset/model.js.map +0 -1
  330. package/dist/src/blitter/bilateralblur.js +0 -221
  331. package/dist/src/blitter/bilateralblur.js.map +0 -1
  332. package/dist/src/blitter/blitter.js +0 -390
  333. package/dist/src/blitter/blitter.js.map +0 -1
  334. package/dist/src/blitter/box.js +0 -118
  335. package/dist/src/blitter/box.js.map +0 -1
  336. package/dist/src/blitter/copy.js +0 -22
  337. package/dist/src/blitter/copy.js.map +0 -1
  338. package/dist/src/blitter/gaussianblur.js +0 -228
  339. package/dist/src/blitter/gaussianblur.js.map +0 -1
  340. package/dist/src/camera/base.js +0 -92
  341. package/dist/src/camera/base.js.map +0 -1
  342. package/dist/src/camera/camera.js +0 -1005
  343. package/dist/src/camera/camera.js.map +0 -1
  344. package/dist/src/camera/fps.js +0 -238
  345. package/dist/src/camera/fps.js.map +0 -1
  346. package/dist/src/camera/orbit.js +0 -245
  347. package/dist/src/camera/orbit.js.map +0 -1
  348. package/dist/src/camera/orthocamera.js +0 -167
  349. package/dist/src/camera/orthocamera.js.map +0 -1
  350. package/dist/src/camera/perspectivecamera.js +0 -141
  351. package/dist/src/camera/perspectivecamera.js.map +0 -1
  352. package/dist/src/index.js +0 -120
  353. package/dist/src/index.js.map +0 -1
  354. package/dist/src/material/blinn.js +0 -81
  355. package/dist/src/material/blinn.js.map +0 -1
  356. package/dist/src/material/grassmaterial.js +0 -113
  357. package/dist/src/material/grassmaterial.js.map +0 -1
  358. package/dist/src/material/lambert.js +0 -92
  359. package/dist/src/material/lambert.js.map +0 -1
  360. package/dist/src/material/material.js +0 -301
  361. package/dist/src/material/material.js.map +0 -1
  362. package/dist/src/material/meshmaterial.js +0 -704
  363. package/dist/src/material/meshmaterial.js.map +0 -1
  364. package/dist/src/material/mixins/albedocolor.js +0 -76
  365. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  366. package/dist/src/material/mixins/foliage.js +0 -47
  367. package/dist/src/material/mixins/foliage.js.map +0 -1
  368. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  369. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  370. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  371. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  372. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  373. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  374. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  375. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  376. package/dist/src/material/mixins/lit.js +0 -476
  377. package/dist/src/material/mixins/lit.js.map +0 -1
  378. package/dist/src/material/mixins/pbr/common.js +0 -918
  379. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  380. package/dist/src/material/mixins/texture.js +0 -172
  381. package/dist/src/material/mixins/texture.js.map +0 -1
  382. package/dist/src/material/mixins/vertexcolor.js +0 -56
  383. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  384. package/dist/src/material/particle.js +0 -178
  385. package/dist/src/material/particle.js.map +0 -1
  386. package/dist/src/material/pbrmr.js +0 -97
  387. package/dist/src/material/pbrmr.js.map +0 -1
  388. package/dist/src/material/pbrsg.js +0 -97
  389. package/dist/src/material/pbrsg.js.map +0 -1
  390. package/dist/src/material/shader/helper.js +0 -1209
  391. package/dist/src/material/shader/helper.js.map +0 -1
  392. package/dist/src/material/terrain-cm.js +0 -606
  393. package/dist/src/material/terrain-cm.js.map +0 -1
  394. package/dist/src/material/terrainmaterial.js +0 -375
  395. package/dist/src/material/terrainmaterial.js.map +0 -1
  396. package/dist/src/material/unlit.js +0 -41
  397. package/dist/src/material/unlit.js.map +0 -1
  398. package/dist/src/material/water.js +0 -417
  399. package/dist/src/material/water.js.map +0 -1
  400. package/dist/src/posteffect/bloom.js +0 -361
  401. package/dist/src/posteffect/bloom.js.map +0 -1
  402. package/dist/src/posteffect/compositor.js +0 -226
  403. package/dist/src/posteffect/compositor.js.map +0 -1
  404. package/dist/src/posteffect/fxaa.js +0 -273
  405. package/dist/src/posteffect/fxaa.js.map +0 -1
  406. package/dist/src/posteffect/grayscale.js +0 -69
  407. package/dist/src/posteffect/grayscale.js.map +0 -1
  408. package/dist/src/posteffect/motionblur.js +0 -96
  409. package/dist/src/posteffect/motionblur.js.map +0 -1
  410. package/dist/src/posteffect/posteffect.js +0 -126
  411. package/dist/src/posteffect/posteffect.js.map +0 -1
  412. package/dist/src/posteffect/sao.js +0 -324
  413. package/dist/src/posteffect/sao.js.map +0 -1
  414. package/dist/src/posteffect/ssr.js +0 -489
  415. package/dist/src/posteffect/ssr.js.map +0 -1
  416. package/dist/src/posteffect/taa.js +0 -172
  417. package/dist/src/posteffect/taa.js.map +0 -1
  418. package/dist/src/posteffect/tonemap.js +0 -94
  419. package/dist/src/posteffect/tonemap.js.map +0 -1
  420. package/dist/src/render/abuffer_oit.js +0 -361
  421. package/dist/src/render/abuffer_oit.js.map +0 -1
  422. package/dist/src/render/clipmap.js +0 -851
  423. package/dist/src/render/clipmap.js.map +0 -1
  424. package/dist/src/render/cluster_light.js +0 -333
  425. package/dist/src/render/cluster_light.js.map +0 -1
  426. package/dist/src/render/cull_visitor.js +0 -187
  427. package/dist/src/render/cull_visitor.js.map +0 -1
  428. package/dist/src/render/depthpass.js +0 -68
  429. package/dist/src/render/depthpass.js.map +0 -1
  430. package/dist/src/render/drawable_mixin.js +0 -227
  431. package/dist/src/render/drawable_mixin.js.map +0 -1
  432. package/dist/src/render/envlight.js +0 -463
  433. package/dist/src/render/envlight.js.map +0 -1
  434. package/dist/src/render/fbm_wavegenerator.js +0 -251
  435. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  436. package/dist/src/render/fft_wavegenerator.js +0 -1006
  437. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  438. package/dist/src/render/fullscreenquad.js +0 -38
  439. package/dist/src/render/fullscreenquad.js.map +0 -1
  440. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  441. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  442. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  443. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  444. package/dist/src/render/hzb.js +0 -273
  445. package/dist/src/render/hzb.js.map +0 -1
  446. package/dist/src/render/lightpass.js +0 -172
  447. package/dist/src/render/lightpass.js.map +0 -1
  448. package/dist/src/render/objectcolorpass.js +0 -51
  449. package/dist/src/render/objectcolorpass.js.map +0 -1
  450. package/dist/src/render/primitive.js +0 -364
  451. package/dist/src/render/primitive.js.map +0 -1
  452. package/dist/src/render/render_queue.js +0 -467
  453. package/dist/src/render/render_queue.js.map +0 -1
  454. package/dist/src/render/renderbundle_wrapper.js +0 -152
  455. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  456. package/dist/src/render/renderer.js +0 -455
  457. package/dist/src/render/renderer.js.map +0 -1
  458. package/dist/src/render/renderpass.js +0 -200
  459. package/dist/src/render/renderpass.js.map +0 -1
  460. package/dist/src/render/shadowmap_pass.js +0 -56
  461. package/dist/src/render/shadowmap_pass.js.map +0 -1
  462. package/dist/src/render/sky.js +0 -1103
  463. package/dist/src/render/sky.js.map +0 -1
  464. package/dist/src/render/weightedblended_oit.js +0 -168
  465. package/dist/src/render/weightedblended_oit.js.map +0 -1
  466. package/dist/src/scene/batchgroup.js +0 -162
  467. package/dist/src/scene/batchgroup.js.map +0 -1
  468. package/dist/src/scene/environment.js +0 -209
  469. package/dist/src/scene/environment.js.map +0 -1
  470. package/dist/src/scene/graph_node.js +0 -72
  471. package/dist/src/scene/graph_node.js.map +0 -1
  472. package/dist/src/scene/light.js +0 -416
  473. package/dist/src/scene/light.js.map +0 -1
  474. package/dist/src/scene/mesh.js +0 -341
  475. package/dist/src/scene/mesh.js.map +0 -1
  476. package/dist/src/scene/octree.js +0 -649
  477. package/dist/src/scene/octree.js.map +0 -1
  478. package/dist/src/scene/particlesys.js +0 -738
  479. package/dist/src/scene/particlesys.js.map +0 -1
  480. package/dist/src/scene/raycast_visitor.js +0 -103
  481. package/dist/src/scene/raycast_visitor.js.map +0 -1
  482. package/dist/src/scene/scene.js +0 -284
  483. package/dist/src/scene/scene.js.map +0 -1
  484. package/dist/src/scene/scene_node.js +0 -732
  485. package/dist/src/scene/scene_node.js.map +0 -1
  486. package/dist/src/scene/terrain/grass.js +0 -278
  487. package/dist/src/scene/terrain/grass.js.map +0 -1
  488. package/dist/src/scene/terrain/heightfield.js +0 -475
  489. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  490. package/dist/src/scene/terrain/patch.js +0 -530
  491. package/dist/src/scene/terrain/patch.js.map +0 -1
  492. package/dist/src/scene/terrain/quadtree.js +0 -461
  493. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  494. package/dist/src/scene/terrain/terrain.js +0 -246
  495. package/dist/src/scene/terrain/terrain.js.map +0 -1
  496. package/dist/src/scene/terrain-cm/grass.js +0 -594
  497. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  498. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  499. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  500. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  501. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  502. package/dist/src/scene/water.js +0 -374
  503. package/dist/src/scene/water.js.map +0 -1
  504. package/dist/src/shaders/atmosphere.js +0 -957
  505. package/dist/src/shaders/atmosphere.js.map +0 -1
  506. package/dist/src/shaders/fog.js +0 -112
  507. package/dist/src/shaders/fog.js.map +0 -1
  508. package/dist/src/shaders/misc.js +0 -266
  509. package/dist/src/shaders/misc.js.map +0 -1
  510. package/dist/src/shaders/noise.js +0 -222
  511. package/dist/src/shaders/noise.js.map +0 -1
  512. package/dist/src/shaders/pbr.js +0 -51
  513. package/dist/src/shaders/pbr.js.map +0 -1
  514. package/dist/src/shaders/shadow.js +0 -636
  515. package/dist/src/shaders/shadow.js.map +0 -1
  516. package/dist/src/shaders/ssr.js +0 -490
  517. package/dist/src/shaders/ssr.js.map +0 -1
  518. package/dist/src/shaders/temporal.js +0 -215
  519. package/dist/src/shaders/temporal.js.map +0 -1
  520. package/dist/src/shaders/water.js +0 -756
  521. package/dist/src/shaders/water.js.map +0 -1
  522. package/dist/src/shadow/esm.js +0 -237
  523. package/dist/src/shadow/esm.js.map +0 -1
  524. package/dist/src/shadow/pcf_opt.js +0 -181
  525. package/dist/src/shadow/pcf_opt.js.map +0 -1
  526. package/dist/src/shadow/pcf_pd.js +0 -189
  527. package/dist/src/shadow/pcf_pd.js.map +0 -1
  528. package/dist/src/shadow/shader.js +0 -37
  529. package/dist/src/shadow/shader.js.map +0 -1
  530. package/dist/src/shadow/shadow_impl.js +0 -15
  531. package/dist/src/shadow/shadow_impl.js.map +0 -1
  532. package/dist/src/shadow/shadowmapper.js +0 -790
  533. package/dist/src/shadow/shadowmapper.js.map +0 -1
  534. package/dist/src/shadow/ssm.js +0 -159
  535. package/dist/src/shadow/ssm.js.map +0 -1
  536. package/dist/src/shadow/vsm.js +0 -297
  537. package/dist/src/shadow/vsm.js.map +0 -1
  538. package/dist/src/shapes/box.js +0 -386
  539. package/dist/src/shapes/box.js.map +0 -1
  540. package/dist/src/shapes/cylinder.js +0 -125
  541. package/dist/src/shapes/cylinder.js.map +0 -1
  542. package/dist/src/shapes/plane.js +0 -88
  543. package/dist/src/shapes/plane.js.map +0 -1
  544. package/dist/src/shapes/shape.js +0 -87
  545. package/dist/src/shapes/shape.js.map +0 -1
  546. package/dist/src/shapes/sphere.js +0 -114
  547. package/dist/src/shapes/sphere.js.map +0 -1
  548. package/dist/src/shapes/tetrahedron.js +0 -188
  549. package/dist/src/shapes/tetrahedron.js.map +0 -1
  550. package/dist/src/shapes/torus.js +0 -111
  551. package/dist/src/shapes/torus.js.map +0 -1
  552. package/dist/src/utility/aabbtree.js +0 -400
  553. package/dist/src/utility/aabbtree.js.map +0 -1
  554. package/dist/src/utility/bounding_volume.js +0 -29
  555. package/dist/src/utility/bounding_volume.js.map +0 -1
  556. package/dist/src/utility/debug.js +0 -28
  557. package/dist/src/utility/debug.js.map +0 -1
  558. package/dist/src/utility/draco/decoder.js +0 -116
  559. package/dist/src/utility/draco/decoder.js.map +0 -1
  560. package/dist/src/utility/misc.js +0 -105
  561. package/dist/src/utility/misc.js.map +0 -1
  562. package/dist/src/utility/panorama.js +0 -163
  563. package/dist/src/utility/panorama.js.map +0 -1
  564. package/dist/src/utility/pmrem.js +0 -354
  565. package/dist/src/utility/pmrem.js.map +0 -1
  566. package/dist/src/utility/rendermipmap.js +0 -115
  567. package/dist/src/utility/rendermipmap.js.map +0 -1
  568. package/dist/src/utility/serialization/json.js +0 -402
  569. package/dist/src/utility/serialization/json.js.map +0 -1
  570. package/dist/src/utility/serialization/manager.js +0 -623
  571. package/dist/src/utility/serialization/manager.js.map +0 -1
  572. package/dist/src/utility/serialization/scene/animation.js +0 -248
  573. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  574. package/dist/src/utility/serialization/scene/batch.js +0 -59
  575. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  576. package/dist/src/utility/serialization/scene/camera.js +0 -790
  577. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  578. package/dist/src/utility/serialization/scene/common.js +0 -222
  579. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  580. package/dist/src/utility/serialization/scene/light.js +0 -575
  581. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  582. package/dist/src/utility/serialization/scene/material.js +0 -1111
  583. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  584. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  585. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  586. package/dist/src/utility/serialization/scene/misc.js +0 -39
  587. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  588. package/dist/src/utility/serialization/scene/node.js +0 -451
  589. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  590. package/dist/src/utility/serialization/scene/particle.js +0 -425
  591. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  592. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  593. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  594. package/dist/src/utility/serialization/scene/scene.js +0 -704
  595. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  596. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  597. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  598. package/dist/src/utility/serialization/scene/water.js +0 -465
  599. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  600. package/dist/src/utility/shprojector.js +0 -297
  601. package/dist/src/utility/shprojector.js.map +0 -1
  602. package/dist/src/utility/textures/ggxlut.js +0 -213
  603. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  604. package/dist/src/utility/textures/gradientnoise.js +0 -62
  605. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  606. package/dist/src/utility/textures/randomnoise.js +0 -41
  607. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  608. package/dist/src/values.js +0 -162
  609. package/dist/src/values.js.map +0 -1
  610. package/dist/utility/blueprint/material/common.js +0 -7
  611. package/dist/utility/blueprint/material/common.js.map +0 -1
  612. package/dist/utility/serialization/blueprint/constants.js +0 -255
  613. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  614. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  615. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  616. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  617. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  618. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  619. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  620. package/dist/utility/serialization/scene/spring_script.js +0 -596
  621. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sources":["../../../src/animation/joint_dynamics/controller.ts"],"sourcesContent":["// High-level orchestrator - SPCRJointDynamicsController API\r\n\r\nimport {\r\n EPSILON,\r\n type PointR,\r\n type PointRW,\r\n type Constraint,\r\n type ColliderR,\r\n type ColliderRW,\r\n type GrabberR,\r\n type GrabberRW,\r\n type AngleLimitConfig,\r\n type FlatPlane,\r\n type TransformAccess,\r\n type BoneNode\r\n} from './types';\r\nimport { buildConstraints, buildSurfaceFaces, type ConstraintBuildOptions } from './constraints';\r\nimport { simulate, applyResult, applyAngleLimits, type SimulationParams } from './solver';\r\nimport type { DeepPartial, Nullable } from '@zephyr3d/base';\r\nimport { InterpolatorScalar, Vector3, Quaternion, Matrix4x4, clamp01 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../scene';\r\n\r\n/**\r\n * Depth-based physics parameter curves.\r\n * Each curve is evaluated with t = pointDepth / maxDepth (0 at root, 1 at tip).\r\n * This allows parameters to vary smoothly along the bone chain.\r\n *\r\n * @public\r\n */\r\nexport interface PhysicsCurves {\r\n /** Scales point mass by depth */\r\n massScale: InterpolatorScalar;\r\n /** Scales gravity strength by depth */\r\n gravityScale: InterpolatorScalar;\r\n /** Scales wind force effect by depth (also multiplied by depth rate) */\r\n windForceScale: InterpolatorScalar;\r\n /** Velocity damping [0-1]. Higher = less damping. Controls how much velocity is preserved */\r\n resistance: InterpolatorScalar;\r\n /** Restore-to-animation stiffness [0-1]. Higher = bone stays closer to animated pose */\r\n hardness: InterpolatorScalar;\r\n /** Friction multiplier by depth. Scales collision friction accumulation */\r\n friction: InterpolatorScalar;\r\n /** Collision radius by depth, mapped from VRM SpringBone hitRadius when available */\r\n pointRadius: InterpolatorScalar;\r\n /** Extra slack length for horizontal/shear constraints (allows stretching) */\r\n sliderJointLength: InterpolatorScalar;\r\n /** Global shrink stiffness multiplier (applied to all constraint types) */\r\n allShrinkScale: InterpolatorScalar;\r\n /** Global stretch stiffness multiplier (applied to all constraint types) */\r\n allStretchScale: InterpolatorScalar;\r\n /** Structural vertical constraint shrink stiffness by depth */\r\n structuralShrinkVertical: InterpolatorScalar;\r\n /** Structural vertical constraint stretch stiffness by depth */\r\n structuralStretchVertical: InterpolatorScalar;\r\n /** Structural horizontal constraint shrink stiffness by depth */\r\n structuralShrinkHorizontal: InterpolatorScalar;\r\n /** Structural horizontal constraint stretch stiffness by depth */\r\n structuralStretchHorizontal: InterpolatorScalar;\r\n /** Shear constraint shrink stiffness by depth */\r\n shearShrink: InterpolatorScalar;\r\n /** Shear constraint stretch stiffness by depth */\r\n shearStretch: InterpolatorScalar;\r\n /** Bending vertical constraint shrink stiffness by depth */\r\n bendingShrinkVertical: InterpolatorScalar;\r\n /** Bending vertical constraint stretch stiffness by depth */\r\n bendingStretchVertical: InterpolatorScalar;\r\n /** Bending horizontal constraint shrink stiffness by depth */\r\n bendingShrinkHorizontal: InterpolatorScalar;\r\n /** Bending horizontal constraint stretch stiffness by depth */\r\n bendingStretchHorizontal: InterpolatorScalar;\r\n /** Fake wave amplitude by depth (sinusoidal pseudo-wind on leaf bones) */\r\n fakeWavePower: InterpolatorScalar;\r\n /** Fake wave frequency offset by depth */\r\n fakeWaveFreq: InterpolatorScalar;\r\n}\r\n\r\n/**\r\n * Top-level configuration for the physics controller\r\n * @public\r\n **/\r\nexport interface ControllerConfig {\r\n /** Global gravity vector */\r\n gravity: Vector3;\r\n /** Global wind force vector applied to all dynamic points */\r\n windForce: Vector3;\r\n /** Number of constraint relaxation iterations per substep. Higher = more stable but slower */\r\n relaxation: number;\r\n /** Number of simulation substeps per frame. Higher = more stable at cost of performance */\r\n subSteps: number;\r\n /** Max root bone slide distance per substep. Excess is distributed as offset. -1 = unlimited */\r\n rootSlideLimit: number;\r\n /** Max root bone rotation angle (degrees) per substep. Excess is distributed. -1 = unlimited */\r\n rootRotateLimit: number;\r\n /** Upper limit for horizontal/shear constraint shrink power. Prevents over-compression */\r\n constraintShrinkLimit: number;\r\n /** Global blend ratio between physics and animation [0-1]. 0 = full physics, 1 = full animation */\r\n blendRatio: number;\r\n /** Target frame rate for stabilization (currently unused, reserved) */\r\n stabilizationFrameRate: number;\r\n /** Enable sinusoidal fake wave effect on leaf bones */\r\n isFakeWave: boolean;\r\n /** Fake wave global speed (accumulates over time) */\r\n fakeWaveSpeed: number;\r\n /** Fake wave global amplitude multiplier */\r\n fakeWavePower: number;\r\n /** Enable triangle-based surface collision (cloth vs colliders) */\r\n enableSurfaceCollision: boolean;\r\n /** Enable broad-phase pruning before precise collider tests */\r\n enableBroadPhase: boolean;\r\n /** Preserve each joint's initial local twist (axial roll) after physics simulation */\r\n preserveTwist: boolean;\r\n /** Post-simulation angle limiting between parent-child bones */\r\n angleLimitConfig: AngleLimitConfig;\r\n /** Depth-based physics parameter curves */\r\n curves: PhysicsCurves;\r\n /** Which constraint types to generate and their collision flags */\r\n constraintOptions: ConstraintBuildOptions;\r\n}\r\n\r\n/**\r\n * Partial runtime update for JointDynamics controller configuration.\r\n *\r\n * @public\r\n */\r\nexport type ControllerConfigUpdate = DeepPartial<ControllerConfig, 2>;\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics collider.\r\n * @public\r\n */\r\nexport interface JointDynamicsColliderHandle {\r\n readonly type: 'collider';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics flat plane.\r\n * @public\r\n */\r\nexport interface JointDynamicsFlatPlaneHandle {\r\n readonly type: 'flatPlane';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics grabber.\r\n * @public\r\n */\r\nexport interface JointDynamicsGrabberHandle {\r\n readonly type: 'grabber';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime collider.\r\n * @public\r\n */\r\nexport interface JointDynamicsColliderSnapshot {\r\n r: ColliderR;\r\n transform: Nullable<SceneNode>;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime flat plane.\r\n * @public\r\n */\r\nexport interface JointDynamicsFlatPlaneSnapshot {\r\n up: Vector3;\r\n position: Vector3;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime grabber.\r\n * @public\r\n */\r\nexport interface JointDynamicsGrabberSnapshot {\r\n r: GrabberR;\r\n transform: Nullable<SceneNode>;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * High-level controller for joint dynamics simulation.\r\n *\r\n * This class manages the physics simulation for a hierarchy of bones, including constraints,\r\n * colliders, and grabbers. It provides an API for initializing the system with bone data and\r\n * transforms, stepping the simulation each frame, and modifying colliders and grabbers at runtime.\r\n * The controller handles the internal state and logic for blending between animation and physics,\r\n * applying forces, and enforcing constraints.\r\n *\r\n * @public\r\n */\r\nexport class JointDynamicsSystemController {\r\n private _config: ControllerConfig;\r\n private _pointsR: PointR[] = [];\r\n private _pointsRW: PointRW[] = [];\r\n private _constraints: Constraint[] = [];\r\n private _collidersR: ColliderR[] = [];\r\n private _collidersRW: ColliderRW[] = [];\r\n private _grabbersR: GrabberR[] = [];\r\n private _grabbersRW: GrabberRW[] = [];\r\n private _movableLimitTargets: Vector3[] = [];\r\n private _flatPlanes: FlatPlane[] = [];\r\n private _flatPlaneEnabled: boolean[] = [];\r\n private _flatPlaneAll: FlatPlane[] = [];\r\n private _surfaceConstraints: number[] = [];\r\n private _positionsToTransform: Vector3[] = [];\r\n private _fakeWaveCounter = 0;\r\n private _previousRootPosition = Vector3.zero();\r\n private _previousRootRotation = Quaternion.identity();\r\n private _rootTransform: TransformAccess | null = null;\r\n private _rootPoints: BoneNode[] = [];\r\n private _allPoints: BoneNode[] = [];\r\n private _parentMap = new Map<number, number>();\r\n private _maxPointDepth = 0;\r\n private _pointTransforms: TransformAccess[] = [];\r\n private _colliderTransforms: TransformAccess[] = [];\r\n private _grabberTransforms: TransformAccess[] = [];\r\n private _colliderHandleIds: number[] = [];\r\n private _flatPlaneHandleIds: number[] = [];\r\n private _grabberHandleIds: number[] = [];\r\n private _colliderHandleToIndex = new Map<number, number>();\r\n private _flatPlaneHandleToIndex = new Map<number, number>();\r\n private _grabberHandleToIndex = new Map<number, number>();\r\n private _baseSystemScale = 1;\r\n private _currentSystemScale = 1;\r\n private _basePointParentLengths: number[] = [];\r\n private _baseConstraintLengths: number[] = [];\r\n private _nextColliderHandleId = 1;\r\n private _nextFlatPlaneHandleId = 1;\r\n private _nextGrabberHandleId = 1;\r\n private _initialized = false;\r\n private _isPaused = false;\r\n private _fadeState: 'none' | 'in' | 'out' = 'none';\r\n private _fadeTimer = 0;\r\n private _fadeDuration = 0;\r\n\r\n constructor(config: ControllerConfig) {\r\n this._config = this._sanitizeControllerConfig(this._cloneControllerConfig(config));\r\n }\r\n\r\n /**\r\n * Initializes the physics system.\r\n * @param rootTransform - Root bone transform used to detect root motion.\r\n * @param rootPoints - Root nodes of the bone hierarchy. Multiple roots are allowed.\r\n * @param pointTransforms - Transform array for all physics points. Order must match `BoneNode.index`.\r\n * @param colliders - Collider array (spheres/capsules).\r\n * @param grabbers - Grabber array used for interactions such as mouse dragging.\r\n * @param flatPlanes - Plane limiters such as the floor to prevent penetration.\r\n */\r\n initialize(\r\n rootTransform: TransformAccess,\r\n rootPoints: BoneNode[],\r\n pointTransforms: TransformAccess[],\r\n colliders: Array<{ r: ColliderR; transform: TransformAccess }>,\r\n grabbers: Array<{\r\n r: GrabberR;\r\n transform: TransformAccess;\r\n enabled: boolean;\r\n }>,\r\n flatPlanes: Array<{ up: Vector3; position: Vector3 }>\r\n ): void {\r\n this._rootTransform = rootTransform;\r\n this._baseSystemScale = this._getSystemUniformScale();\r\n this._currentSystemScale = this._baseSystemScale;\r\n this._rootPoints = [...rootPoints];\r\n this._pointTransforms = pointTransforms;\r\n this._colliderTransforms = colliders.map((c) => c.transform);\r\n this._grabberTransforms = grabbers.map((g) => g.transform);\r\n\r\n // Build constraints\r\n this._rebuildConstraints();\r\n this._baseConstraintLengths = this._constraints.map((constraint) => constraint.length);\r\n\r\n // Flatten bone hierarchy to point list, build parent map\r\n const allPoints: BoneNode[] = [];\r\n this._parentMap = new Map<number, number>(); // child index -> parent index\r\n const walk = (node: BoneNode) => {\r\n allPoints.push(node);\r\n for (const c of node.children) {\r\n this._parentMap.set(c.index, node.index);\r\n walk(c);\r\n }\r\n };\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n\r\n this._allPoints = allPoints;\r\n this._maxPointDepth = allPoints.length > 0 ? Math.max(...allPoints.map((p) => p.depth)) : 0;\r\n\r\n // Compute boneAxis from transforms: local-space direction to first child\r\n // This is critical for correct bone rotation in skinned meshes\r\n for (const p of allPoints) {\r\n if (!p.boneAxis && p.children.length > 0) {\r\n const childPos = pointTransforms[p.children[0].index].getWorldPosition();\r\n const parentPos = pointTransforms[p.index].getWorldPosition();\r\n // InverseTransformPoint: convert child world pos to parent local space\r\n const parentRot = pointTransforms[p.index].getWorldRotation();\r\n const parentScale = pointTransforms[p.index].getLocalScale();\r\n const diff = Vector3.sub(childPos, parentPos);\r\n const invRot = Quaternion.inverse(parentRot);\r\n const localDir = invRot.transform(diff);\r\n // Apply inverse scale\r\n const unscaled = new Vector3(\r\n parentScale.x !== 0 ? localDir.x / parentScale.x : 0,\r\n parentScale.y !== 0 ? localDir.y / parentScale.y : 0,\r\n parentScale.z !== 0 ? localDir.z / parentScale.z : 0\r\n );\r\n p.boneAxis = Vector3.normalize(unscaled);\r\n }\r\n }\r\n\r\n // Build PointR/RW arrays\r\n this._pointsR = allPoints.map((p) => this._createPointR(p));\r\n this._basePointParentLengths = this._pointsR.map((point) => point.parentLength);\r\n this._pointsRW = allPoints.map(() => this._createPointRW());\r\n this._positionsToTransform = new Array(allPoints.length).fill(Vector3.zero());\r\n\r\n // Initialize colliders\r\n this._collidersR = colliders.map((c) => c.r);\r\n this._collidersRW = colliders.map((c) => this._createColliderRW(c.transform));\r\n this._colliderHandleIds = this._collidersR.map(() => this._nextColliderHandleId++);\r\n this._rebuildColliderHandleMap();\r\n\r\n // Initialize grabbers\r\n this._grabbersR = grabbers.map((g) => g.r);\r\n this._grabbersRW = grabbers.map((g) => ({\r\n enabled: g.enabled ? 1 : 0,\r\n position: g.transform.getWorldPosition()\r\n }));\r\n this._grabberHandleIds = this._grabbersR.map(() => this._nextGrabberHandleId++);\r\n this._rebuildGrabberHandleMap();\r\n\r\n // Flat planes\r\n this._flatPlanes = flatPlanes.map((fp) => ({\r\n normal: Vector3.normalize(fp.up),\r\n distance: -Vector3.dot(Vector3.normalize(fp.up), fp.position)\r\n }));\r\n this._flatPlaneAll = [...this._flatPlanes];\r\n this._flatPlaneEnabled = this._flatPlaneAll.map(() => true);\r\n this._flatPlaneHandleIds = this._flatPlaneAll.map(() => this._nextFlatPlaneHandleId++);\r\n this._rebuildFlatPlaneHandleMap();\r\n\r\n // Capture initial state\r\n this._previousRootPosition = rootTransform.getWorldPosition();\r\n this._previousRootRotation = rootTransform.getWorldRotation();\r\n\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const pos = pointTransforms[i].getWorldPosition();\r\n this._pointsRW[i].positionCurrent = pos.clone();\r\n this._pointsRW[i].positionPrevious = pos.clone();\r\n this._pointsRW[i].positionCurrentTransform = pos.clone();\r\n this._pointsRW[i].positionPreviousTransform = pos.clone();\r\n this._pointsRW[i].positionToTransform = pos.clone();\r\n this._pointsRW[i].directionPrevious = Vector3.axisPZ();\r\n this._pointsRW[i].fakeWindDirection = Vector3.axisPZ();\r\n this._pointsRW[i].grabberIndex = -1;\r\n this._pointsRW[i].grabberDistance = 0;\r\n this._pointsRW[i].friction = 0;\r\n }\r\n\r\n this._initialized = true;\r\n }\r\n\r\n /**\r\n * Advances the simulation by one frame.\r\n * Internal flow: read current transforms, run Verlet integration and constraint solving,\r\n * then write the result back to the transforms.\r\n * @param deltaTime - Frame delta time in seconds. Internally subdivided by `subSteps`.\r\n */\r\n step(deltaTime: number): void {\r\n if (!this._initialized || !this._rootTransform) {\r\n return;\r\n }\r\n\r\n // Update fade\r\n if (this._fadeState !== 'none') {\r\n this._fadeTimer += deltaTime;\r\n if (this._fadeTimer >= this._fadeDuration) {\r\n this._fadeState = 'none';\r\n this._fadeTimer = 0;\r\n }\r\n }\r\n\r\n const blendRatio = this._computeBlendRatio();\r\n this._updateScaleDependentParameters();\r\n\r\n // Capture current transforms\r\n const rootPos = this._rootTransform.getWorldPosition();\r\n const rootRot = this._rootTransform.getWorldRotation();\r\n\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n this._pointsRW[i].positionPreviousTransform = this._pointsRW[i].positionCurrentTransform.clone();\r\n this._pointsRW[i].positionCurrentTransform = this._pointTransforms[i].getWorldPosition();\r\n }\r\n\r\n for (let i = 0; i < this._collidersRW.length; i++) {\r\n const t = this._colliderTransforms[i];\r\n this._collidersRW[i].positionPreviousTransform = this._collidersRW[i].positionCurrentTransform.clone();\r\n this._collidersRW[i].directionPreviousTransform =\r\n this._collidersRW[i].directionCurrentTransform.clone();\r\n this._collidersRW[i].positionCurrentTransform = t.getWorldPosition();\r\n this._collidersRW[i].directionCurrentTransform = t.getWorldRotation();\r\n this._collidersRW[i].worldScale = t.getWorldScale();\r\n this._collidersRW[i].worldToLocal = Matrix4x4.compose(\r\n this._collidersRW[i].worldScale,\r\n this._collidersRW[i].directionCurrentTransform,\r\n this._collidersRW[i].positionCurrentTransform\r\n ).inplaceInvertAffine();\r\n }\r\n\r\n for (let i = 0; i < this._grabbersRW.length; i++) {\r\n this._grabbersRW[i].position = this._grabberTransforms[i].getWorldPosition();\r\n }\r\n\r\n // Run simulation\r\n const params: SimulationParams = {\r\n isPaused: this._isPaused,\r\n stepTime: deltaTime,\r\n subSteps: this._config.subSteps,\r\n rootPosition: rootPos,\r\n previousRootPosition: this._previousRootPosition,\r\n rootSlideLimit: this._config.rootSlideLimit,\r\n rootRotation: rootRot,\r\n previousRootRotation: this._previousRootRotation,\r\n rootRotateLimit: this._config.rootRotateLimit,\r\n windForce: this._config.windForce,\r\n enableSurfaceCollision: this._config.enableSurfaceCollision,\r\n surfaceConstraints: this._surfaceConstraints,\r\n relaxation: this._config.relaxation,\r\n constraintShrinkLimit: this._config.constraintShrinkLimit,\r\n blendRatio,\r\n isFakeWave: this._config.isFakeWave,\r\n fakeWaveSpeed: this._config.fakeWaveSpeed,\r\n fakeWavePower: this._config.fakeWavePower,\r\n fakeWaveCounter: this._fakeWaveCounter,\r\n collisionScale: 1.0,\r\n enableBroadPhase: this._config.enableBroadPhase\r\n };\r\n\r\n const result = simulate(\r\n params,\r\n this._pointsR,\r\n this._pointsRW,\r\n this._constraints,\r\n this._collidersR,\r\n this._collidersRW,\r\n this._grabbersR,\r\n this._grabbersRW,\r\n this._movableLimitTargets,\r\n this._flatPlanes\r\n );\r\n\r\n this._positionsToTransform = result.positionsToTransform;\r\n this._fakeWaveCounter = result.fakeWaveCounter;\r\n\r\n // Angle limits\r\n if (this._config.angleLimitConfig.angleLimit >= 0) {\r\n applyAngleLimits(this._pointsR, this._pointsRW, this._config.angleLimitConfig);\r\n }\r\n\r\n // Apply results\r\n const transformRots = this._pointTransforms.map((t) => t.getWorldRotation());\r\n const transformLocalRots = this._pointTransforms.map((t) => t.getLocalRotation());\r\n const outputs = applyResult(\r\n this._pointsR,\r\n this._pointsRW,\r\n this._positionsToTransform,\r\n blendRatio,\r\n transformRots,\r\n transformLocalRots,\r\n this._config.preserveTwist\r\n );\r\n\r\n for (let i = 0; i < outputs.length; i++) {\r\n this._pointTransforms[i].setWorldPosition(outputs[i].position);\r\n this._pointTransforms[i].setWorldRotation(outputs[i].rotation);\r\n }\r\n\r\n this._previousRootPosition = rootPos;\r\n this._previousRootRotation = rootRot;\r\n }\r\n\r\n /**\r\n * Returns the simulated results for all points as world-space positions and rotations.\r\n * Usually this does not need to be called manually because `step()` already writes the\r\n * output back to the transforms.\r\n */\r\n getResults(): Array<{ position: Vector3; rotation: Quaternion }> {\r\n const transformRots = this._pointTransforms.map((t) => t.getWorldRotation());\r\n const transformLocalRots = this._pointTransforms.map((t) => t.getLocalRotation());\r\n const outputs = applyResult(\r\n this._pointsR,\r\n this._pointsRW,\r\n this._positionsToTransform,\r\n this._config.blendRatio,\r\n transformRots,\r\n transformLocalRots,\r\n this._config.preserveTwist\r\n );\r\n return outputs.map((o) => ({ position: o.position, rotation: o.rotation }));\r\n }\r\n\r\n /**\r\n * Returns a detached snapshot of the current runtime configuration.\r\n */\r\n getConfig(): ControllerConfig {\r\n return this._cloneControllerConfig(this._config);\r\n }\r\n\r\n /**\r\n * Returns detached collider snapshots for persistence.\r\n */\r\n getColliderSnapshots(): JointDynamicsColliderSnapshot[] {\r\n return this._collidersR.map((r, index) => ({\r\n r: { ...r },\r\n transform: this._colliderTransforms[index]?.node ?? null,\r\n enabled: this._collidersRW[index]?.enabled !== 0\r\n }));\r\n }\r\n\r\n /**\r\n * Returns detached flat-plane snapshots for persistence.\r\n */\r\n getFlatPlaneSnapshots(): JointDynamicsFlatPlaneSnapshot[] {\r\n return this._flatPlaneAll.map((plane, index) => ({\r\n up: plane.normal.clone(),\r\n position: Vector3.scale(plane.normal, -plane.distance),\r\n enabled: this._flatPlaneEnabled[index] ?? true\r\n }));\r\n }\r\n\r\n /**\r\n * Returns detached grabber snapshots for persistence.\r\n */\r\n getGrabberSnapshots(): JointDynamicsGrabberSnapshot[] {\r\n return this._grabbersR.map((r, index) => ({\r\n r: { ...r },\r\n transform: this._grabberTransforms[index]?.node ?? null,\r\n enabled: this._grabbersRW[index]?.enabled !== 0\r\n }));\r\n }\r\n\r\n /**\r\n * Replaces the runtime configuration.\r\n *\r\n * If the controller is already initialized, cached per-point parameters and generated\r\n * constraints are refreshed immediately so editor-driven changes take effect in the next step.\r\n *\r\n * @param config - Complete controller configuration to apply.\r\n */\r\n setConfig(config: ControllerConfig): void {\r\n this._config = this._sanitizeControllerConfig(this._cloneControllerConfig(config));\r\n this._refreshCachedSimulationConfig();\r\n }\r\n\r\n /**\r\n * Applies a partial runtime configuration update.\r\n *\r\n * This is intended for editor workflows that tweak one or more simulation parameters live.\r\n * The controller updates only the affected caches: global step parameters are applied directly,\r\n * per-point curve/gravity changes rebuild cached point coefficients, and constraint option\r\n * changes rebuild the generated constraints.\r\n *\r\n * @param config - Partial configuration update.\r\n */\r\n updateConfig(config: ControllerConfigUpdate): void {\r\n let refreshPoints = false;\r\n let refreshConstraints = false;\r\n\r\n if (config.gravity) {\r\n this._config.gravity = config.gravity.clone();\r\n refreshPoints = true;\r\n }\r\n if (config.windForce) {\r\n this._config.windForce = config.windForce.clone();\r\n }\r\n if (typeof config.relaxation === 'number') {\r\n this._config.relaxation = Math.max(0, Math.trunc(config.relaxation));\r\n }\r\n if (typeof config.subSteps === 'number') {\r\n this._config.subSteps = Math.max(1, Math.trunc(config.subSteps));\r\n }\r\n if (typeof config.rootSlideLimit === 'number') {\r\n this._config.rootSlideLimit = config.rootSlideLimit;\r\n }\r\n if (typeof config.rootRotateLimit === 'number') {\r\n this._config.rootRotateLimit = config.rootRotateLimit;\r\n }\r\n if (typeof config.constraintShrinkLimit === 'number') {\r\n this._config.constraintShrinkLimit = Math.max(0, config.constraintShrinkLimit);\r\n }\r\n if (typeof config.blendRatio === 'number') {\r\n this._config.blendRatio = clamp01(config.blendRatio);\r\n }\r\n if (typeof config.stabilizationFrameRate === 'number') {\r\n this._config.stabilizationFrameRate = config.stabilizationFrameRate;\r\n }\r\n if (typeof config.isFakeWave === 'boolean') {\r\n this._config.isFakeWave = config.isFakeWave;\r\n }\r\n if (typeof config.fakeWaveSpeed === 'number') {\r\n this._config.fakeWaveSpeed = config.fakeWaveSpeed;\r\n }\r\n if (typeof config.fakeWavePower === 'number') {\r\n this._config.fakeWavePower = config.fakeWavePower;\r\n }\r\n if (typeof config.enableSurfaceCollision === 'boolean') {\r\n this._config.enableSurfaceCollision = config.enableSurfaceCollision;\r\n if (!config.constraintOptions || config.constraintOptions.enableSurfaceCollision === undefined) {\r\n this._config.constraintOptions.enableSurfaceCollision = config.enableSurfaceCollision;\r\n refreshConstraints = true;\r\n }\r\n }\r\n if (typeof config.enableBroadPhase === 'boolean') {\r\n this._config.enableBroadPhase = config.enableBroadPhase;\r\n }\r\n if (typeof config.preserveTwist === 'boolean') {\r\n this._config.preserveTwist = config.preserveTwist;\r\n }\r\n\r\n if (config.angleLimitConfig) {\r\n if (typeof config.angleLimitConfig.angleLimit === 'number') {\r\n this._config.angleLimitConfig.angleLimit = config.angleLimitConfig.angleLimit;\r\n }\r\n if (typeof config.angleLimitConfig.limitFromRoot === 'boolean') {\r\n this._config.angleLimitConfig.limitFromRoot = config.angleLimitConfig.limitFromRoot;\r\n }\r\n }\r\n\r\n if (config.curves) {\r\n const curveKeys: Array<keyof PhysicsCurves> = [\r\n 'massScale',\r\n 'gravityScale',\r\n 'windForceScale',\r\n 'resistance',\r\n 'hardness',\r\n 'friction',\r\n 'pointRadius',\r\n 'sliderJointLength',\r\n 'allShrinkScale',\r\n 'allStretchScale',\r\n 'structuralShrinkVertical',\r\n 'structuralStretchVertical',\r\n 'structuralShrinkHorizontal',\r\n 'structuralStretchHorizontal',\r\n 'shearShrink',\r\n 'shearStretch',\r\n 'bendingShrinkVertical',\r\n 'bendingStretchVertical',\r\n 'bendingShrinkHorizontal',\r\n 'bendingStretchHorizontal',\r\n 'fakeWavePower',\r\n 'fakeWaveFreq'\r\n ];\r\n for (const key of curveKeys) {\r\n const curve = config.curves[key];\r\n if (curve !== undefined) {\r\n this._config.curves[key] = this._cloneInterpolatorScalar(curve);\r\n refreshPoints = true;\r\n }\r\n }\r\n }\r\n\r\n if (config.constraintOptions) {\r\n const optionKeys: Array<keyof ConstraintBuildOptions> = [\r\n 'structuralVertical',\r\n 'structuralHorizontal',\r\n 'shear',\r\n 'bendingVertical',\r\n 'bendingHorizontal',\r\n 'isLoop',\r\n 'collideStructuralVertical',\r\n 'collideStructuralHorizontal',\r\n 'collideShear',\r\n 'enableSurfaceCollision'\r\n ];\r\n for (const key of optionKeys) {\r\n const value = config.constraintOptions[key];\r\n if (value !== undefined) {\r\n this._config.constraintOptions[key] = value;\r\n if (key === 'enableSurfaceCollision' && config.enableSurfaceCollision === undefined) {\r\n this._config.enableSurfaceCollision = value;\r\n }\r\n refreshConstraints = true;\r\n }\r\n }\r\n }\r\n\r\n if (refreshConstraints) {\r\n this._rebuildConstraints();\r\n this._baseConstraintLengths = this._constraints.map((constraint) => constraint.length);\r\n this._updateScaleDependentParameters(true);\r\n }\r\n if (refreshPoints) {\r\n this._refreshPointParameters();\r\n }\r\n }\r\n\r\n /**\r\n * Compensates for teleportation by resetting the previous root transform to the current one.\r\n * Call this after a character warp or teleport to avoid a large root-motion impulse on the\r\n * next simulation step.\r\n */\r\n warp(): void {\r\n if (!this._rootTransform) {\r\n return;\r\n }\r\n this._previousRootPosition = this._rootTransform.getWorldPosition();\r\n this._previousRootRotation = this._rootTransform.getWorldRotation();\r\n }\r\n\r\n /**\r\n * Resets all physics state.\r\n * Each simulated point is snapped back to the current transform position and grab state\r\n * is cleared.\r\n */\r\n reset(): void {\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const pos = this._pointTransforms[i].getWorldPosition();\r\n this._pointsRW[i].positionCurrent = pos.clone();\r\n this._pointsRW[i].positionPrevious = pos.clone();\r\n this._pointsRW[i].grabberIndex = -1;\r\n }\r\n this._fakeWaveCounter = 0;\r\n }\r\n\r\n /**\r\n * Releases a fixed point so it becomes dynamic, for example when cloth is detached.\r\n * The point state is reset to avoid a sudden impulse.\r\n * @param index - Point index.\r\n */\r\n releasePoint(index: number): void {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return;\r\n }\r\n (this._pointsR[index] as any).weight = 1;\r\n const pos = this._pointTransforms[index].getWorldPosition();\r\n this._pointsRW[index].positionCurrent = pos.clone();\r\n this._pointsRW[index].positionPrevious = pos.clone();\r\n this._pointsRW[index].grabberIndex = -1;\r\n }\r\n\r\n /**\r\n * Fixes a dynamic point back to the animation pose, for example when an item is reattached.\r\n * The point grab state is cleared.\r\n * @param index - Point index.\r\n */\r\n fixPoint(index: number): void {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return;\r\n }\r\n (this._pointsR[index] as any).weight = 0;\r\n this._pointsRW[index].grabberIndex = -1;\r\n }\r\n\r\n /**\r\n * Returns whether a point is fixed to animation (`weight = 0`).\r\n * @param index - Point index.\r\n */\r\n isPointFixed(index: number): boolean {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return false;\r\n }\r\n return this._pointsR[index].weight <= EPSILON;\r\n }\r\n\r\n /** Gets the total number of physics points. */\r\n get pointCount(): number {\r\n return this._pointsR.length;\r\n }\r\n\r\n /**\r\n * Fades physics in by blending from animation pose to simulation.\r\n * `blendRatio` moves from `1` (animation only) to `0` (physics only).\r\n * @param seconds - Transition duration in seconds.\r\n */\r\n fadeIn(seconds: number): void {\r\n this._fadeState = 'in';\r\n this._fadeTimer = 0;\r\n this._fadeDuration = seconds;\r\n }\r\n\r\n /**\r\n * Fades physics out by blending from simulation back to animation pose.\r\n * `blendRatio` moves from `0` (physics only) to `1` (animation only).\r\n * @param seconds - Transition duration in seconds.\r\n */\r\n fadeOut(seconds: number): void {\r\n this._fadeState = 'out';\r\n this._fadeTimer = 0;\r\n this._fadeDuration = seconds;\r\n }\r\n\r\n /**\r\n * Sets the global wind force vector.\r\n * The final wind contribution is still scaled per point by `windForceScale` and mass.\r\n * @param wind - Wind vector in world space.\r\n */\r\n setWindForce(wind: Vector3): void {\r\n this._config.windForce = wind.clone();\r\n }\r\n\r\n /**\r\n * Enable/disable broad-phase pruning for runtime performance comparison\r\n * @param enabled - `true` to enable broad-phase, `false` to disable.\r\n */\r\n setBroadPhaseEnabled(enabled: boolean): void {\r\n this._config.enableBroadPhase = enabled;\r\n }\r\n\r\n /** The blend ratio for the physics simulation */\r\n get blendRatio(): number {\r\n return this._config.blendRatio;\r\n }\r\n\r\n set blendRatio(value: number) {\r\n this._config.blendRatio = clamp01(value);\r\n }\r\n\r\n /**\r\n * Pauses or resumes the physics simulation.\r\n * While paused, the system still follows root motion but skips force integration and\r\n * constraint solving.\r\n * @param paused - `true` to pause, `false` to resume.\r\n */\r\n setPaused(paused: boolean): void {\r\n this._isPaused = paused;\r\n }\r\n\r\n /**\r\n * Enable or disable a collider by current array index.\r\n * Transform state is still read from the collider's TransformAccess each frame.\r\n * Prefer setColliderEnabled(handle, enabled) for runtime-owned colliders.\r\n *\r\n * @param index - Collider index in the current array. Note that this may change when colliders are added or removed.\r\n * @param enabled - `true` to enable the collider, `false` to disable it.\r\n *\r\n * @returns `true` if the index is valid and the collider was updated, `false` if the index is out of range.\r\n */\r\n setColliderEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index >= 0 && index < this._collidersRW.length) {\r\n this._collidersRW[index].enabled = enabled ? 1 : 0;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime collider by stable handle.\r\n *\r\n * @param handle - Stable handle for the collider to enable or disable.\r\n * @param enabled - `true` to enable the collider, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setColliderEnabled(handle: JointDynamicsColliderHandle, enabled: boolean): boolean {\r\n const index = this._getColliderIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setColliderEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a collider at runtime.\r\n * @param r - Read-only collider data such as shape and size.\r\n * @param transform - TransformAccess that provides the collider's position and rotation each frame.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCollider(r: ColliderR, transform: TransformAccess): JointDynamicsColliderHandle {\r\n const id = this._nextColliderHandleId++;\r\n this._collidersR.push(r);\r\n this._colliderTransforms.push(transform);\r\n this._collidersRW.push(this._createColliderRW(transform));\r\n this._colliderHandleIds.push(id);\r\n this._colliderHandleToIndex.set(id, this._collidersR.length - 1);\r\n return { type: 'collider', id };\r\n }\r\n\r\n /**\r\n * Remove a collider by stable handle.\r\n * @param handle - Stable handle for the collider to remove.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeCollider(handle: JointDynamicsColliderHandle): boolean {\r\n const index = this._getColliderIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeColliderAt(index);\r\n }\r\n\r\n /**\r\n * Remove a collider by current array index.\r\n * @param index - Collider index in the current array. Note that this may change when colliders are added or removed.\r\n * Prefer removeCollider(handle) for runtime-owned colliders.\r\n */\r\n removeColliderAt(index: number): boolean {\r\n if (index < 0 || index >= this._collidersR.length) {\r\n return false;\r\n }\r\n this._collidersR.splice(index, 1);\r\n this._colliderTransforms.splice(index, 1);\r\n this._collidersRW.splice(index, 1);\r\n this._colliderHandleIds.splice(index, 1);\r\n this._rebuildColliderHandleMap();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a flat plane by current array index.\r\n * @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.\r\n * @param enabled - `true` to enable the flat plane, `false` to disable it.\r\n * @returns `true` if the index is valid and the flat plane was updated, `false` if the index is out of range.\r\n */\r\n setFlatPlaneEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index < 0 || index >= this._flatPlaneAll.length) {\r\n return false;\r\n }\r\n this._flatPlaneEnabled[index] = enabled;\r\n this._rebuildActiveFlatPlanes();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime flat plane by stable handle.\r\n * @param handle - Stable handle for the flat plane to enable or disable.\r\n * @param enabled - `true` to enable the flat plane, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setFlatPlaneEnabled(handle: JointDynamicsFlatPlaneHandle, enabled: boolean): boolean {\r\n const index = this._getFlatPlaneIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setFlatPlaneEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a flat plane at runtime.\r\n * @param up - Up direction of the plane. The normal is computed as `Vector3.normalize(up)`.\r\n * @param position - A point on the plane. The distance is computed as `-Vector3.dot(normal, position)`.\r\n * @returns A stable handle that remains valid until this flat plane is removed.\r\n */\r\n addFlatPlane(up: Vector3, position: Vector3): JointDynamicsFlatPlaneHandle {\r\n const id = this._nextFlatPlaneHandleId++;\r\n const normal = Vector3.normalize(up);\r\n this._flatPlaneAll.push({\r\n normal,\r\n distance: -Vector3.dot(normal, position)\r\n });\r\n this._flatPlaneEnabled.push(true);\r\n this._flatPlaneHandleIds.push(id);\r\n this._flatPlaneHandleToIndex.set(id, this._flatPlaneAll.length - 1);\r\n this._rebuildActiveFlatPlanes();\r\n return { type: 'flatPlane', id };\r\n }\r\n\r\n /**\r\n * Remove a flat plane by stable handle.\r\n * @param handle - Stable handle for the flat plane to remove.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlane(handle: JointDynamicsFlatPlaneHandle): boolean {\r\n const index = this._getFlatPlaneIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeFlatPlaneAt(index);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by current array index.\r\n * @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.\r\n * @returns true if the index was valid and the flat plane was removed, false if the index was out of range.\r\n */\r\n removeFlatPlaneAt(index: number): boolean {\r\n if (index < 0 || index >= this._flatPlaneAll.length) {\r\n return false;\r\n }\r\n this._flatPlaneAll.splice(index, 1);\r\n this._flatPlaneEnabled.splice(index, 1);\r\n this._flatPlaneHandleIds.splice(index, 1);\r\n this._rebuildFlatPlaneHandleMap();\r\n this._rebuildActiveFlatPlanes();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a grabber by current array index.\r\n * Transform state is still read from the grabber's TransformAccess each frame.\r\n * Prefer setGrabberEnabled(handle, enabled) for runtime-owned grabbers.\r\n *\r\n * @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.\r\n * @param enabled - `true` to enable the grabber, `false` to disable it.\r\n * @returns `true` if the index is valid and the grabber was updated, `false` if the index is out of range.\r\n */\r\n setGrabberEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index >= 0 && index < this._grabbersRW.length) {\r\n this._grabbersRW[index].enabled = enabled ? 1 : 0;\r\n if (!enabled) {\r\n this._releaseGrabber(index);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime grabber by stable handle.\r\n * @param handle - Stable handle for the grabber to enable or disable.\r\n * @param enabled - `true` to enable the grabber, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setGrabberEnabled(handle: JointDynamicsGrabberHandle, enabled: boolean): boolean {\r\n const index = this._getGrabberIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setGrabberEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a grabber at runtime.\r\n * @param r - Read-only grabber data such as interaction radius.\r\n * @param transform - TransformAccess that provides the grabber's position each frame.\r\n * @param enabled - Whether the grabber starts enabled. The grabber can still be moved by its transform while disabled, but it won't affect any points until enabled.\r\n * @returns A stable handle that remains valid until this grabber is removed.\r\n */\r\n addGrabber(r: GrabberR, transform: TransformAccess, enabled = false): JointDynamicsGrabberHandle {\r\n const id = this._nextGrabberHandleId++;\r\n this._grabbersR.push(r);\r\n this._grabberTransforms.push(transform);\r\n this._grabbersRW.push({\r\n enabled: enabled ? 1 : 0,\r\n position: transform.getWorldPosition()\r\n });\r\n this._grabberHandleIds.push(id);\r\n this._grabberHandleToIndex.set(id, this._grabbersR.length - 1);\r\n return { type: 'grabber', id };\r\n }\r\n\r\n /**\r\n * Remove a grabber by stable handle.\r\n * @param handle - Stable handle for the grabber to remove.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabber(handle: JointDynamicsGrabberHandle): boolean {\r\n const index = this._getGrabberIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeGrabberAt(index);\r\n }\r\n\r\n /**\r\n * Remove a grabber by current array index.\r\n * Prefer removeGrabber(handle) for runtime-owned grabbers.\r\n *\r\n * @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.\r\n * @returns true if the index was valid and the grabber was removed, false if the index was out of range.\r\n */\r\n removeGrabberAt(index: number): boolean {\r\n if (index < 0 || index >= this._grabbersR.length) {\r\n return false;\r\n }\r\n this._grabbersR.splice(index, 1);\r\n this._grabberTransforms.splice(index, 1);\r\n this._grabbersRW.splice(index, 1);\r\n this._grabberHandleIds.splice(index, 1);\r\n this._rebuildGrabberHandleMap();\r\n\r\n this._releaseGrabber(index);\r\n for (const ptRW of this._pointsRW) {\r\n if (ptRW.grabberIndex > index) {\r\n ptRW.grabberIndex--;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Gets the number of runtime colliders. */\r\n get colliderCount(): number {\r\n return this._collidersR.length;\r\n }\r\n\r\n /** Gets the number of runtime flat planes. */\r\n get flatPlaneCount(): number {\r\n return this._flatPlaneAll.length;\r\n }\r\n\r\n /** Gets the number of runtime grabbers. */\r\n get grabberCount(): number {\r\n return this._grabbersR.length;\r\n }\r\n\r\n private _computeBlendRatio(): number {\r\n if (this._fadeState === 'in') {\r\n return 1.0 - clamp01(this._fadeTimer / this._fadeDuration);\r\n }\r\n if (this._fadeState === 'out') {\r\n return clamp01(this._fadeTimer / this._fadeDuration);\r\n }\r\n return this._config.blendRatio;\r\n }\r\n\r\n private _refreshCachedSimulationConfig(): void {\r\n this._rebuildConstraints();\r\n this._refreshPointParameters();\r\n }\r\n\r\n private _getColliderIndex(handle: JointDynamicsColliderHandle): number {\r\n if (handle.type !== 'collider') {\r\n return -1;\r\n }\r\n return this._colliderHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _getGrabberIndex(handle: JointDynamicsGrabberHandle): number {\r\n if (handle.type !== 'grabber') {\r\n return -1;\r\n }\r\n return this._grabberHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _getFlatPlaneIndex(handle: JointDynamicsFlatPlaneHandle): number {\r\n if (handle.type !== 'flatPlane') {\r\n return -1;\r\n }\r\n return this._flatPlaneHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _releaseGrabber(index: number): void {\r\n for (const ptRW of this._pointsRW) {\r\n if (ptRW.grabberIndex === index) {\r\n ptRW.grabberIndex = -1;\r\n ptRW.grabberDistance = 0;\r\n }\r\n }\r\n }\r\n\r\n private _rebuildColliderHandleMap(): void {\r\n this._colliderHandleToIndex.clear();\r\n for (let i = 0; i < this._colliderHandleIds.length; i++) {\r\n this._colliderHandleToIndex.set(this._colliderHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildFlatPlaneHandleMap(): void {\r\n this._flatPlaneHandleToIndex.clear();\r\n for (let i = 0; i < this._flatPlaneHandleIds.length; i++) {\r\n this._flatPlaneHandleToIndex.set(this._flatPlaneHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildActiveFlatPlanes(): void {\r\n this._flatPlanes = [];\r\n for (let i = 0; i < this._flatPlaneAll.length; i++) {\r\n if (this._flatPlaneEnabled[i]) {\r\n this._flatPlanes.push(this._flatPlaneAll[i]);\r\n }\r\n }\r\n }\r\n\r\n private _rebuildGrabberHandleMap(): void {\r\n this._grabberHandleToIndex.clear();\r\n for (let i = 0; i < this._grabberHandleIds.length; i++) {\r\n this._grabberHandleToIndex.set(this._grabberHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildConstraints(): void {\r\n if (this._rootPoints.length === 0) {\r\n this._constraints = [];\r\n this._surfaceConstraints = [];\r\n return;\r\n }\r\n this._constraints = buildConstraints(this._rootPoints, this._config.constraintOptions);\r\n this._surfaceConstraints = buildSurfaceFaces(this._rootPoints, this._config.constraintOptions.isLoop);\r\n }\r\n\r\n private _getSystemUniformScale(): number {\r\n if (!this._rootTransform) {\r\n return 1;\r\n }\r\n const scale = this._rootTransform.getWorldScale();\r\n return Math.max((Math.abs(scale.x) + Math.abs(scale.y) + Math.abs(scale.z)) / 3, EPSILON);\r\n }\r\n\r\n private _updateScaleDependentParameters(force = false): void {\r\n const systemScale = this._getSystemUniformScale();\r\n const scaleChanged = Math.abs(systemScale - this._currentSystemScale) > EPSILON;\r\n if (!force && !scaleChanged) {\r\n return;\r\n }\r\n this._currentSystemScale = systemScale;\r\n const ratio = this._baseSystemScale > EPSILON ? systemScale / this._baseSystemScale : 1;\r\n for (let i = 0; i < this._pointsR.length; i++) {\r\n this._pointsR[i].parentLength =\r\n (this._basePointParentLengths[i] ?? this._pointsR[i].parentLength) * ratio;\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].length = (this._baseConstraintLengths[i] ?? this._constraints[i].length) * ratio;\r\n }\r\n this._refreshPointParameters();\r\n if (scaleChanged) {\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const pos = this._pointTransforms[i].getWorldPosition();\r\n this._pointsRW[i].positionCurrent = pos.clone();\r\n this._pointsRW[i].positionPrevious = pos.clone();\r\n this._pointsRW[i].positionCurrentTransform = pos.clone();\r\n this._pointsRW[i].positionPreviousTransform = pos.clone();\r\n }\r\n this.warp();\r\n }\r\n }\r\n\r\n private _refreshPointParameters(): void {\r\n if (!this._initialized) {\r\n return;\r\n }\r\n for (let i = 0; i < this._allPoints.length; i++) {\r\n this._applyConfigToPoint(this._pointsR[i], this._allPoints[i]);\r\n }\r\n }\r\n\r\n private _createPointR(node: BoneNode): PointR {\r\n const parentIdx = this._parentMap.get(node.index) ?? -1;\r\n const childIdx = node.children.length > 0 ? node.children[0].index : -1;\r\n\r\n // Capture initial local transform for rotation blending\r\n const t = this._pointTransforms[node.index];\r\n const initLocalPos = t.getLocalPosition();\r\n const initLocalRot = t.getLocalRotation();\r\n const initLocalScale = t.getLocalScale();\r\n\r\n // BoneAxis: local-space direction to first child (computed in initialize)\r\n const boneAxis = node.boneAxis ?? new Vector3(0, -1, 0);\r\n\r\n // ParentLength: distance to parent\r\n let parentLength = 0;\r\n if (parentIdx !== -1) {\r\n const pPos = this._pointTransforms[parentIdx].getWorldPosition();\r\n const cPos = this._pointTransforms[node.index].getWorldPosition();\r\n parentLength = Vector3.distance(pPos, cPos);\r\n }\r\n\r\n const point: PointR = {\r\n parent: parentIdx,\r\n child: childIdx,\r\n applyInvertCollision: 0,\r\n movableLimitIndex: -1,\r\n movableLimitRadius: 0,\r\n weight: node.isFixed ? 0 : 1,\r\n mass: 0,\r\n resistance: 0,\r\n hardness: 0,\r\n frictionScale: 0,\r\n sliderJointLength: 0,\r\n parentLength,\r\n structuralShrinkVertical: 0,\r\n structuralStretchVertical: 0,\r\n structuralShrinkHorizontal: 0,\r\n structuralStretchHorizontal: 0,\r\n shearShrink: 0,\r\n shearStretch: 0,\r\n bendingShrinkVertical: 0,\r\n bendingStretchVertical: 0,\r\n bendingShrinkHorizontal: 0,\r\n bendingStretchHorizontal: 0,\r\n windForceScale: 0,\r\n fakeWavePower: 0,\r\n fakeWaveFreq: 0,\r\n forceFadeRatio: 0,\r\n pointRadius: 0,\r\n gravity: Vector3.zero(),\r\n boneAxis,\r\n initialLocalScale: initLocalScale,\r\n initialLocalRotation: initLocalRot,\r\n initialLocalTwist: (() => {\r\n const tw = new Quaternion();\r\n initLocalRot.decomposeSwingTwist(boneAxis, undefined, tw);\r\n return tw;\r\n })(),\r\n initialLocalPosition: initLocalPos\r\n };\r\n this._applyConfigToPoint(point, node);\r\n return point;\r\n }\r\n\r\n private _applyConfigToPoint(point: PointR, node: BoneNode): void {\r\n const rate = this._maxPointDepth > 0 ? node.depth / this._maxPointDepth : 0;\r\n const c = this._config.curves;\r\n const allShrinkScale = c.allShrinkScale.evaluate(rate);\r\n const allStretchScale = c.allStretchScale.evaluate(rate);\r\n\r\n point.mass = c.massScale.evaluate(rate);\r\n point.resistance = clamp01(c.resistance.evaluate(rate));\r\n point.hardness = clamp01(c.hardness.evaluate(rate));\r\n point.frictionScale = c.friction.evaluate(rate);\r\n point.sliderJointLength = c.sliderJointLength.evaluate(rate);\r\n point.structuralShrinkVertical = c.structuralShrinkVertical.evaluate(rate) * allShrinkScale * 0.5;\r\n point.structuralStretchVertical = c.structuralStretchVertical.evaluate(rate) * allStretchScale * 0.5;\r\n point.structuralShrinkHorizontal = c.structuralShrinkHorizontal.evaluate(rate) * allShrinkScale * 0.5;\r\n point.structuralStretchHorizontal = c.structuralStretchHorizontal.evaluate(rate) * allStretchScale * 0.5;\r\n point.shearShrink = c.shearShrink.evaluate(rate) * allShrinkScale * 0.5;\r\n point.shearStretch = c.shearStretch.evaluate(rate) * allStretchScale * 0.5;\r\n point.bendingShrinkVertical = c.bendingShrinkVertical.evaluate(rate) * allShrinkScale * 0.5;\r\n point.bendingStretchVertical = c.bendingStretchVertical.evaluate(rate) * allStretchScale * 0.5;\r\n point.bendingShrinkHorizontal = c.bendingShrinkHorizontal.evaluate(rate) * allShrinkScale * 0.5;\r\n point.bendingStretchHorizontal = c.bendingStretchHorizontal.evaluate(rate) * allStretchScale * 0.5;\r\n point.windForceScale = c.windForceScale.evaluate(rate) * rate;\r\n point.fakeWavePower = c.fakeWavePower.evaluate(rate);\r\n point.fakeWaveFreq = c.fakeWaveFreq.evaluate(rate);\r\n const systemScale = this._currentSystemScale;\r\n point.pointRadius = Math.max(0, c.pointRadius.evaluate(rate) * systemScale);\r\n point.gravity = Vector3.scale(this._config.gravity, c.gravityScale.evaluate(rate) * systemScale);\r\n }\r\n\r\n private _createPointRW(): PointRW {\r\n return {\r\n positionToTransform: Vector3.zero(),\r\n positionCurrentTransform: Vector3.zero(),\r\n positionPreviousTransform: Vector3.zero(),\r\n positionCurrent: Vector3.zero(),\r\n positionPrevious: Vector3.zero(),\r\n directionPrevious: Vector3.axisPZ(),\r\n fakeWindDirection: Vector3.axisPZ(),\r\n grabberIndex: -1,\r\n grabberDistance: 0,\r\n friction: 0\r\n };\r\n }\r\n\r\n private _createColliderRW(transform: TransformAccess): ColliderRW {\r\n const pos = transform.getWorldPosition();\r\n const rot = transform.getWorldRotation();\r\n const scale = transform.getWorldScale();\r\n return {\r\n positionCurrent: pos.clone(),\r\n directionCurrent: Vector3.zero(),\r\n boundsCenter: pos.clone(),\r\n boundsRadius: 0,\r\n positionCurrentTransform: pos.clone(),\r\n positionPreviousTransform: pos.clone(),\r\n directionCurrentTransform: rot.clone(),\r\n directionPreviousTransform: rot.clone(),\r\n worldToLocal: Matrix4x4.identity(),\r\n worldScale: scale.clone(),\r\n localBoundsMin: Vector3.zero(),\r\n localBoundsMax: Vector3.zero(),\r\n radius: 0,\r\n height: 0,\r\n enabled: 1\r\n };\r\n }\r\n\r\n private _cloneControllerConfig(config: ControllerConfig): ControllerConfig {\r\n const curves: PhysicsCurves = {\r\n massScale: this._cloneInterpolatorScalar(config.curves.massScale),\r\n gravityScale: this._cloneInterpolatorScalar(config.curves.gravityScale),\r\n windForceScale: this._cloneInterpolatorScalar(config.curves.windForceScale),\r\n resistance: this._cloneInterpolatorScalar(config.curves.resistance),\r\n hardness: this._cloneInterpolatorScalar(config.curves.hardness),\r\n friction: this._cloneInterpolatorScalar(config.curves.friction),\r\n pointRadius: this._cloneInterpolatorScalar(config.curves.pointRadius),\r\n sliderJointLength: this._cloneInterpolatorScalar(config.curves.sliderJointLength),\r\n allShrinkScale: this._cloneInterpolatorScalar(config.curves.allShrinkScale),\r\n allStretchScale: this._cloneInterpolatorScalar(config.curves.allStretchScale),\r\n structuralShrinkVertical: this._cloneInterpolatorScalar(config.curves.structuralShrinkVertical),\r\n structuralStretchVertical: this._cloneInterpolatorScalar(config.curves.structuralStretchVertical),\r\n structuralShrinkHorizontal: this._cloneInterpolatorScalar(config.curves.structuralShrinkHorizontal),\r\n structuralStretchHorizontal: this._cloneInterpolatorScalar(config.curves.structuralStretchHorizontal),\r\n shearShrink: this._cloneInterpolatorScalar(config.curves.shearShrink),\r\n shearStretch: this._cloneInterpolatorScalar(config.curves.shearStretch),\r\n bendingShrinkVertical: this._cloneInterpolatorScalar(config.curves.bendingShrinkVertical),\r\n bendingStretchVertical: this._cloneInterpolatorScalar(config.curves.bendingStretchVertical),\r\n bendingShrinkHorizontal: this._cloneInterpolatorScalar(config.curves.bendingShrinkHorizontal),\r\n bendingStretchHorizontal: this._cloneInterpolatorScalar(config.curves.bendingStretchHorizontal),\r\n fakeWavePower: this._cloneInterpolatorScalar(config.curves.fakeWavePower),\r\n fakeWaveFreq: this._cloneInterpolatorScalar(config.curves.fakeWaveFreq)\r\n };\r\n return {\r\n gravity: config.gravity.clone(),\r\n windForce: config.windForce.clone(),\r\n relaxation: config.relaxation,\r\n subSteps: config.subSteps,\r\n rootSlideLimit: config.rootSlideLimit,\r\n rootRotateLimit: config.rootRotateLimit,\r\n constraintShrinkLimit: config.constraintShrinkLimit,\r\n blendRatio: config.blendRatio,\r\n stabilizationFrameRate: config.stabilizationFrameRate,\r\n isFakeWave: config.isFakeWave,\r\n fakeWaveSpeed: config.fakeWaveSpeed,\r\n fakeWavePower: config.fakeWavePower,\r\n enableSurfaceCollision: config.enableSurfaceCollision,\r\n enableBroadPhase: config.enableBroadPhase,\r\n preserveTwist: config.preserveTwist,\r\n angleLimitConfig: {\r\n angleLimit: config.angleLimitConfig.angleLimit,\r\n limitFromRoot: config.angleLimitConfig.limitFromRoot\r\n },\r\n curves,\r\n constraintOptions: {\r\n structuralVertical: config.constraintOptions.structuralVertical,\r\n structuralHorizontal: config.constraintOptions.structuralHorizontal,\r\n shear: config.constraintOptions.shear,\r\n bendingVertical: config.constraintOptions.bendingVertical,\r\n bendingHorizontal: config.constraintOptions.bendingHorizontal,\r\n isLoop: config.constraintOptions.isLoop,\r\n collideStructuralVertical: config.constraintOptions.collideStructuralVertical,\r\n collideStructuralHorizontal: config.constraintOptions.collideStructuralHorizontal,\r\n collideShear: config.constraintOptions.collideShear,\r\n enableSurfaceCollision: config.constraintOptions.enableSurfaceCollision\r\n }\r\n };\r\n }\r\n\r\n private _cloneInterpolatorScalar(curve: InterpolatorScalar): InterpolatorScalar {\r\n return new InterpolatorScalar(\r\n curve.mode,\r\n new Float32Array(curve.inputs),\r\n new Float32Array(curve.outputs)\r\n );\r\n }\r\n\r\n private _sanitizeControllerConfig(config: ControllerConfig): ControllerConfig {\r\n config.relaxation = Math.max(0, Math.trunc(config.relaxation));\r\n config.subSteps = Math.max(1, Math.trunc(config.subSteps));\r\n config.constraintShrinkLimit = Math.max(0, config.constraintShrinkLimit);\r\n config.blendRatio = clamp01(config.blendRatio);\r\n return config;\r\n }\r\n}\r\n"],"names":["JointDynamicsSystemController","_config","_pointsR","_pointsRW","_constraints","_collidersR","_collidersRW","_grabbersR","_grabbersRW","_movableLimitTargets","_flatPlanes","_flatPlaneEnabled","_flatPlaneAll","_surfaceConstraints","_positionsToTransform","_fakeWaveCounter","_previousRootPosition","Vector3","zero","_previousRootRotation","Quaternion","identity","_rootTransform","_rootPoints","_allPoints","_parentMap","Map","_maxPointDepth","_pointTransforms","_colliderTransforms","_grabberTransforms","_colliderHandleIds","_flatPlaneHandleIds","_grabberHandleIds","_colliderHandleToIndex","_flatPlaneHandleToIndex","_grabberHandleToIndex","_baseSystemScale","_currentSystemScale","_basePointParentLengths","_baseConstraintLengths","_nextColliderHandleId","_nextFlatPlaneHandleId","_nextGrabberHandleId","_initialized","_isPaused","_fadeState","_fadeTimer","_fadeDuration","config","_sanitizeControllerConfig","_cloneControllerConfig","initialize","rootTransform","rootPoints","pointTransforms","colliders","grabbers","flatPlanes","_getSystemUniformScale","map","c","transform","g","_rebuildConstraints","constraint","length","allPoints","walk","node","push","children","set","index","r","Math","max","p","depth","boneAxis","childPos","getWorldPosition","parentPos","parentRot","getWorldRotation","parentScale","getLocalScale","diff","sub","invRot","inverse","localDir","unscaled","x","y","z","normalize","_createPointR","point","parentLength","_createPointRW","Array","fill","_createColliderRW","_rebuildColliderHandleMap","enabled","position","_rebuildGrabberHandleMap","fp","normal","up","distance","dot","_rebuildFlatPlaneHandleMap","i","pos","positionCurrent","clone","positionPrevious","positionCurrentTransform","positionPreviousTransform","positionToTransform","directionPrevious","axisPZ","fakeWindDirection","grabberIndex","grabberDistance","friction","step","deltaTime","blendRatio","_computeBlendRatio","_updateScaleDependentParameters","rootPos","rootRot","t","directionPreviousTransform","directionCurrentTransform","worldScale","getWorldScale","worldToLocal","Matrix4x4","compose","inplaceInvertAffine","params","isPaused","stepTime","subSteps","rootPosition","previousRootPosition","rootSlideLimit","rootRotation","previousRootRotation","rootRotateLimit","windForce","enableSurfaceCollision","surfaceConstraints","relaxation","constraintShrinkLimit","isFakeWave","fakeWaveSpeed","fakeWavePower","fakeWaveCounter","collisionScale","enableBroadPhase","result","simulate","positionsToTransform","angleLimitConfig","angleLimit","applyAngleLimits","transformRots","transformLocalRots","getLocalRotation","outputs","applyResult","preserveTwist","setWorldPosition","setWorldRotation","rotation","getResults","o","getConfig","getColliderSnapshots","getFlatPlaneSnapshots","plane","scale","getGrabberSnapshots","setConfig","_refreshCachedSimulationConfig","updateConfig","refreshPoints","refreshConstraints","gravity","trunc","clamp01","stabilizationFrameRate","constraintOptions","undefined","limitFromRoot","curves","curveKeys","key","curve","_cloneInterpolatorScalar","optionKeys","value","_refreshPointParameters","warp","reset","releasePoint","weight","fixPoint","isPointFixed","EPSILON","pointCount","fadeIn","seconds","fadeOut","setWindForce","wind","setBroadPhaseEnabled","setPaused","paused","setColliderEnabledAt","setColliderEnabled","handle","_getColliderIndex","addCollider","id","type","removeCollider","removeColliderAt","splice","setFlatPlaneEnabledAt","_rebuildActiveFlatPlanes","setFlatPlaneEnabled","_getFlatPlaneIndex","addFlatPlane","removeFlatPlane","removeFlatPlaneAt","setGrabberEnabledAt","_releaseGrabber","setGrabberEnabled","_getGrabberIndex","addGrabber","removeGrabber","removeGrabberAt","ptRW","colliderCount","flatPlaneCount","grabberCount","get","clear","buildConstraints","buildSurfaceFaces","isLoop","abs","force","systemScale","scaleChanged","ratio","_applyConfigToPoint","parentIdx","childIdx","initLocalPos","getLocalPosition","initLocalRot","initLocalScale","pPos","cPos","parent","child","applyInvertCollision","movableLimitIndex","movableLimitRadius","isFixed","mass","resistance","hardness","frictionScale","sliderJointLength","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","windForceScale","fakeWaveFreq","forceFadeRatio","pointRadius","initialLocalScale","initialLocalRotation","initialLocalTwist","tw","decomposeSwingTwist","initialLocalPosition","rate","allShrinkScale","evaluate","allStretchScale","massScale","gravityScale","rot","directionCurrent","boundsCenter","boundsRadius","localBoundsMin","localBoundsMax","radius","height","structuralVertical","structuralHorizontal","shear","bendingVertical","bendingHorizontal","collideStructuralVertical","collideStructuralHorizontal","collideShear","InterpolatorScalar","mode","Float32Array","inputs"],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sources":["../../../src/animation/joint_dynamics/controller.ts"],"sourcesContent":["// High-level orchestrator - SPCRJointDynamicsController API\r\n\r\nimport {\r\n EPSILON,\r\n type PointR,\r\n type PointRW,\r\n type Constraint,\r\n type ColliderR,\r\n type ColliderRW,\r\n type GrabberR,\r\n type GrabberRW,\r\n type AngleLimitConfig,\r\n type FlatPlane,\r\n type TransformAccess,\r\n type BoneNode\r\n} from './types';\r\nimport { buildConstraints, buildSurfaceFaces, type ConstraintBuildOptions } from './constraints';\r\nimport { simulate, applyResult, applyAngleLimits, extractLocalTwist, type SimulationParams } from './solver';\r\nimport type { DeepPartial, Nullable } from '@zephyr3d/base';\r\nimport { InterpolatorScalar, Vector3, Quaternion, Matrix4x4, clamp01 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../scene';\r\n\r\n/**\r\n * Depth-based physics parameter curves.\r\n * Each curve is evaluated with t = pointDepth / maxDepth (0 at root, 1 at tip).\r\n * This allows parameters to vary smoothly along the bone chain.\r\n *\r\n * @public\r\n */\r\nexport interface PhysicsCurves {\r\n /** Scales point mass by depth */\r\n massScale: InterpolatorScalar;\r\n /** Scales gravity strength by depth */\r\n gravityScale: InterpolatorScalar;\r\n /** Scales wind force effect by depth (also multiplied by depth rate) */\r\n windForceScale: InterpolatorScalar;\r\n /** Velocity damping [0-1]. Higher = less damping. Controls how much velocity is preserved */\r\n resistance: InterpolatorScalar;\r\n /** Restore-to-animation stiffness [0-1]. Higher = bone stays closer to animated pose */\r\n hardness: InterpolatorScalar;\r\n /** Friction multiplier by depth. Scales collision friction accumulation */\r\n friction: InterpolatorScalar;\r\n /** Collision radius by depth, mapped from VRM SpringBone hitRadius when available */\r\n pointRadius: InterpolatorScalar;\r\n /** Extra slack length for horizontal/shear constraints (allows stretching) */\r\n sliderJointLength: InterpolatorScalar;\r\n /** Global shrink stiffness multiplier (applied to all constraint types) */\r\n allShrinkScale: InterpolatorScalar;\r\n /** Global stretch stiffness multiplier (applied to all constraint types) */\r\n allStretchScale: InterpolatorScalar;\r\n /** Structural vertical constraint shrink stiffness by depth */\r\n structuralShrinkVertical: InterpolatorScalar;\r\n /** Structural vertical constraint stretch stiffness by depth */\r\n structuralStretchVertical: InterpolatorScalar;\r\n /** Structural horizontal constraint shrink stiffness by depth */\r\n structuralShrinkHorizontal: InterpolatorScalar;\r\n /** Structural horizontal constraint stretch stiffness by depth */\r\n structuralStretchHorizontal: InterpolatorScalar;\r\n /** Shear constraint shrink stiffness by depth */\r\n shearShrink: InterpolatorScalar;\r\n /** Shear constraint stretch stiffness by depth */\r\n shearStretch: InterpolatorScalar;\r\n /** Bending vertical constraint shrink stiffness by depth */\r\n bendingShrinkVertical: InterpolatorScalar;\r\n /** Bending vertical constraint stretch stiffness by depth */\r\n bendingStretchVertical: InterpolatorScalar;\r\n /** Bending horizontal constraint shrink stiffness by depth */\r\n bendingShrinkHorizontal: InterpolatorScalar;\r\n /** Bending horizontal constraint stretch stiffness by depth */\r\n bendingStretchHorizontal: InterpolatorScalar;\r\n /** Fake wave amplitude by depth (sinusoidal pseudo-wind on leaf bones) */\r\n fakeWavePower: InterpolatorScalar;\r\n /** Fake wave frequency offset by depth */\r\n fakeWaveFreq: InterpolatorScalar;\r\n}\r\n\r\n/**\r\n * Top-level configuration for the physics controller\r\n * @public\r\n **/\r\nexport interface ControllerConfig {\r\n /** Global gravity vector */\r\n gravity: Vector3;\r\n /** Global wind force vector applied to all dynamic points */\r\n windForce: Vector3;\r\n /** Number of constraint relaxation iterations per substep. Higher = more stable but slower */\r\n relaxation: number;\r\n /** Number of simulation substeps per frame. Higher = more stable at cost of performance */\r\n subSteps: number;\r\n /** Max system-local root slide distance retained after root motion. Excess is applied to physics state. -1 = unlimited */\r\n rootSlideLimit: number;\r\n /** Max root bone rotation angle (degrees) per substep. Excess is distributed. -1 = unlimited */\r\n rootRotateLimit: number;\r\n /** Upper limit for horizontal/shear constraint shrink power. Prevents over-compression */\r\n constraintShrinkLimit: number;\r\n /** Global blend ratio between physics and animation [0-1]. 0 = full physics, 1 = full animation */\r\n blendRatio: number;\r\n /** Target frame rate for stabilization (currently unused, reserved) */\r\n stabilizationFrameRate: number;\r\n /** Enable sinusoidal fake wave effect on leaf bones */\r\n isFakeWave: boolean;\r\n /** Fake wave global speed (accumulates over time) */\r\n fakeWaveSpeed: number;\r\n /** Fake wave global amplitude multiplier */\r\n fakeWavePower: number;\r\n /** Enable triangle-based surface collision (cloth vs colliders) */\r\n enableSurfaceCollision: boolean;\r\n /** Enable broad-phase pruning before precise collider tests */\r\n enableBroadPhase: boolean;\r\n /** Preserve each joint's initial local twist (axial roll) after physics simulation */\r\n preserveTwist: boolean;\r\n /** Post-simulation angle limiting between parent-child bones */\r\n angleLimitConfig: AngleLimitConfig;\r\n /** Depth-based physics parameter curves */\r\n curves: PhysicsCurves;\r\n /** Which constraint types to generate and their collision flags */\r\n constraintOptions: ConstraintBuildOptions;\r\n}\r\n\r\n/**\r\n * Partial runtime update for JointDynamics controller configuration.\r\n *\r\n * @public\r\n */\r\nexport type ControllerConfigUpdate = DeepPartial<ControllerConfig, 2>;\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics collider.\r\n * @public\r\n */\r\nexport interface JointDynamicsColliderHandle {\r\n readonly type: 'collider';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics flat plane.\r\n * @public\r\n */\r\nexport interface JointDynamicsFlatPlaneHandle {\r\n readonly type: 'flatPlane';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Stable runtime handle for a JointDynamics grabber.\r\n * @public\r\n */\r\nexport interface JointDynamicsGrabberHandle {\r\n readonly type: 'grabber';\r\n readonly id: number;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime collider.\r\n * @public\r\n */\r\nexport interface JointDynamicsColliderSnapshot {\r\n r: ColliderR;\r\n transform: Nullable<SceneNode>;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime flat plane.\r\n * @public\r\n */\r\nexport interface JointDynamicsFlatPlaneSnapshot {\r\n up: Vector3;\r\n position: Vector3;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * Serializable snapshot of a runtime grabber.\r\n * @public\r\n */\r\nexport interface JointDynamicsGrabberSnapshot {\r\n r: GrabberR;\r\n transform: Nullable<SceneNode>;\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * High-level controller for joint dynamics simulation.\r\n *\r\n * This class manages the physics simulation for a hierarchy of bones, including constraints,\r\n * colliders, and grabbers. It provides an API for initializing the system with bone data and\r\n * transforms, stepping the simulation each frame, and modifying colliders and grabbers at runtime.\r\n * The controller handles the internal state and logic for blending between animation and physics,\r\n * applying forces, and enforcing constraints.\r\n *\r\n * @public\r\n */\r\nexport class JointDynamicsSystemController {\r\n private _config: ControllerConfig;\r\n private _pointsR: PointR[] = [];\r\n private _pointsRW: PointRW[] = [];\r\n private _constraints: Constraint[] = [];\r\n private _collidersR: ColliderR[] = [];\r\n private _collidersRW: ColliderRW[] = [];\r\n private _grabbersR: GrabberR[] = [];\r\n private _grabbersRW: GrabberRW[] = [];\r\n private _movableLimitTargets: Vector3[] = [];\r\n private _flatPlanes: FlatPlane[] = [];\r\n private _flatPlaneEnabled: boolean[] = [];\r\n private _flatPlaneAll: FlatPlane[] = [];\r\n private _surfaceConstraints: number[] = [];\r\n private _positionsToTransform: Vector3[] = [];\r\n private _fakeWaveCounter = 0;\r\n private _previousRootPosition = Vector3.zero();\r\n private _previousRootRotation = Quaternion.identity();\r\n private _rootTransform: TransformAccess | null = null;\r\n private _rootPoints: BoneNode[] = [];\r\n private _allPoints: BoneNode[] = [];\r\n private _parentMap = new Map<number, number>();\r\n private _maxPointDepth = 0;\r\n private _pointTransforms: TransformAccess[] = [];\r\n private _colliderTransforms: TransformAccess[] = [];\r\n private _grabberTransforms: TransformAccess[] = [];\r\n private _colliderHandleIds: number[] = [];\r\n private _flatPlaneHandleIds: number[] = [];\r\n private _grabberHandleIds: number[] = [];\r\n private _colliderHandleToIndex = new Map<number, number>();\r\n private _flatPlaneHandleToIndex = new Map<number, number>();\r\n private _grabberHandleToIndex = new Map<number, number>();\r\n private _lastOutputLocalRotations: Quaternion[] = [];\r\n private _baseSystemScale = 1;\r\n private _currentSystemScale = 1;\r\n private _basePointParentLengths: number[] = [];\r\n private _baseConstraintLengths: number[] = [];\r\n private _nextColliderHandleId = 1;\r\n private _nextFlatPlaneHandleId = 1;\r\n private _nextGrabberHandleId = 1;\r\n private _initialized = false;\r\n private _isPaused = false;\r\n private _fadeState: 'none' | 'in' | 'out' = 'none';\r\n private _fadeTimer = 0;\r\n private _fadeDuration = 0;\r\n\r\n constructor(config: ControllerConfig) {\r\n this._config = this._sanitizeControllerConfig(this._cloneControllerConfig(config));\r\n }\r\n\r\n /**\r\n * Initializes the physics system.\r\n * @param rootTransform - Root bone transform used to detect root motion.\r\n * @param rootPoints - Root nodes of the bone hierarchy. Multiple roots are allowed.\r\n * @param pointTransforms - Transform array for all physics points. Order must match `BoneNode.index`.\r\n * @param colliders - Collider array (spheres/capsules).\r\n * @param grabbers - Grabber array used for interactions such as mouse dragging.\r\n * @param flatPlanes - Plane limiters such as the floor to prevent penetration.\r\n */\r\n initialize(\r\n rootTransform: TransformAccess,\r\n rootPoints: BoneNode[],\r\n pointTransforms: TransformAccess[],\r\n colliders: Array<{ r: ColliderR; transform: TransformAccess }>,\r\n grabbers: Array<{\r\n r: GrabberR;\r\n transform: TransformAccess;\r\n enabled: boolean;\r\n }>,\r\n flatPlanes: Array<{ up: Vector3; position: Vector3 }>\r\n ): void {\r\n this._rootTransform = rootTransform;\r\n this._baseSystemScale = this._getSystemUniformScale();\r\n this._currentSystemScale = this._baseSystemScale;\r\n this._rootPoints = [...rootPoints];\r\n this._pointTransforms = pointTransforms;\r\n this._colliderTransforms = colliders.map((c) => c.transform);\r\n this._grabberTransforms = grabbers.map((g) => g.transform);\r\n\r\n // Build constraints\r\n this._rebuildConstraints();\r\n this._baseConstraintLengths = this._constraints.map((constraint) => constraint.length);\r\n\r\n // Flatten bone hierarchy to point list, build parent map\r\n const allPoints: BoneNode[] = [];\r\n const visitedPoints = new Set<number>();\r\n this._parentMap = new Map<number, number>(); // child index -> parent index\r\n const walk = (node: BoneNode) => {\r\n if (visitedPoints.has(node.index)) {\r\n return;\r\n }\r\n visitedPoints.add(node.index);\r\n allPoints.push(node);\r\n for (const c of node.children) {\r\n this._parentMap.set(c.index, node.index);\r\n walk(c);\r\n }\r\n };\r\n for (const r of rootPoints) {\r\n walk(r);\r\n }\r\n allPoints.sort((a, b) => a.index - b.index);\r\n\r\n this._allPoints = allPoints;\r\n this._maxPointDepth = allPoints.length > 0 ? Math.max(...allPoints.map((p) => p.depth)) : 0;\r\n\r\n // Compute boneAxis from transforms: local-space direction to first child\r\n // This is critical for correct bone rotation in skinned meshes\r\n for (const p of allPoints) {\r\n if (!p.boneAxis && p.children.length > 0) {\r\n const childPos = pointTransforms[p.children[0].index].getWorldPosition();\r\n const parentPos = pointTransforms[p.index].getWorldPosition();\r\n // InverseTransformPoint: convert child world pos to parent local space\r\n const parentRot = pointTransforms[p.index].getWorldRotation();\r\n const parentScale = pointTransforms[p.index].getLocalScale();\r\n const diff = Vector3.sub(childPos, parentPos);\r\n const invRot = Quaternion.inverse(parentRot);\r\n const localDir = invRot.transform(diff);\r\n // Apply inverse scale\r\n const unscaled = new Vector3(\r\n parentScale.x !== 0 ? localDir.x / parentScale.x : 0,\r\n parentScale.y !== 0 ? localDir.y / parentScale.y : 0,\r\n parentScale.z !== 0 ? localDir.z / parentScale.z : 0\r\n );\r\n p.boneAxis = Vector3.normalize(unscaled);\r\n }\r\n }\r\n\r\n // Build PointR/RW arrays\r\n this._pointsR = allPoints.map((p) => this._createPointR(p));\r\n this._basePointParentLengths = this._pointsR.map((point) => point.parentLength);\r\n this._pointsRW = allPoints.map(() => this._createPointRW());\r\n this._positionsToTransform = new Array(allPoints.length).fill(Vector3.zero());\r\n this._clearOutputTransformCache();\r\n\r\n // Initialize colliders\r\n this._collidersR = colliders.map((c) => c.r);\r\n this._collidersRW = colliders.map((c) => this._createColliderRW(c.transform));\r\n this._colliderHandleIds = this._collidersR.map(() => this._nextColliderHandleId++);\r\n this._rebuildColliderHandleMap();\r\n\r\n // Initialize grabbers\r\n this._grabbersR = grabbers.map((g) => g.r);\r\n this._grabbersRW = grabbers.map((g) => ({\r\n enabled: g.enabled ? 1 : 0,\r\n position: g.transform.getWorldPosition()\r\n }));\r\n this._grabberHandleIds = this._grabbersR.map(() => this._nextGrabberHandleId++);\r\n this._rebuildGrabberHandleMap();\r\n\r\n // Flat planes\r\n this._flatPlanes = flatPlanes.map((fp) => ({\r\n normal: Vector3.normalize(fp.up),\r\n distance: -Vector3.dot(Vector3.normalize(fp.up), fp.position)\r\n }));\r\n this._flatPlaneAll = [...this._flatPlanes];\r\n this._flatPlaneEnabled = this._flatPlaneAll.map(() => true);\r\n this._flatPlaneHandleIds = this._flatPlaneAll.map(() => this._nextFlatPlaneHandleId++);\r\n this._rebuildFlatPlaneHandleMap();\r\n\r\n // Capture initial state\r\n this._previousRootPosition = rootTransform.getWorldPosition();\r\n this._previousRootRotation = rootTransform.getWorldRotation();\r\n\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const pos = pointTransforms[i].getWorldPosition();\r\n this._pointsRW[i].positionCurrent = pos.clone();\r\n this._pointsRW[i].positionPrevious = pos.clone();\r\n this._pointsRW[i].positionCurrentTransform = pos.clone();\r\n this._pointsRW[i].positionPreviousTransform = pos.clone();\r\n this._pointsRW[i].positionToTransform = pos.clone();\r\n this._pointsRW[i].directionPrevious = Vector3.axisPZ();\r\n this._pointsRW[i].fakeWindDirection = Vector3.axisPZ();\r\n this._pointsRW[i].grabberIndex = -1;\r\n this._pointsRW[i].grabberDistance = 0;\r\n this._pointsRW[i].friction = 0;\r\n }\r\n\r\n this._initialized = true;\r\n }\r\n\r\n /**\r\n * Advances the simulation by one frame.\r\n * Internal flow: read current transforms, run Verlet integration and constraint solving,\r\n * then write the result back to the transforms.\r\n * @param deltaTime - Frame delta time in seconds. Internally subdivided by `subSteps`.\r\n */\r\n step(deltaTime: number): void {\r\n if (!this._initialized || !this._rootTransform) {\r\n return;\r\n }\r\n\r\n // Update fade\r\n if (this._fadeState !== 'none') {\r\n this._fadeTimer += deltaTime;\r\n if (this._fadeTimer >= this._fadeDuration) {\r\n this._fadeState = 'none';\r\n this._fadeTimer = 0;\r\n }\r\n }\r\n\r\n const blendRatio = this._computeBlendRatio();\r\n this._updateScaleDependentParameters();\r\n const rootSlideLimit =\r\n this._config.rootSlideLimit < 0 ? -1 : this._config.rootSlideLimit * this._currentSystemScale;\r\n\r\n // Capture current transforms\r\n const rootPos = this._rootTransform.getWorldPosition();\r\n const rootRot = this._rootTransform.getWorldRotation();\r\n\r\n const inputLocalRotations = this._getInputLocalRotations();\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n this._pointsRW[i].positionPreviousTransform = this._pointsRW[i].positionCurrentTransform.clone();\r\n this._pointsRW[i].positionCurrentTransform = this._pointTransforms[i].getWorldPosition();\r\n }\r\n\r\n for (let i = 0; i < this._collidersRW.length; i++) {\r\n const t = this._colliderTransforms[i];\r\n this._collidersRW[i].positionPreviousTransform = this._collidersRW[i].positionCurrentTransform.clone();\r\n this._collidersRW[i].directionPreviousTransform =\r\n this._collidersRW[i].directionCurrentTransform.clone();\r\n this._collidersRW[i].positionCurrentTransform = t.getWorldPosition();\r\n this._collidersRW[i].directionCurrentTransform = t.getWorldRotation();\r\n this._collidersRW[i].worldScale = t.getWorldScale();\r\n this._collidersRW[i].worldToLocal = Matrix4x4.compose(\r\n this._collidersRW[i].worldScale,\r\n this._collidersRW[i].directionCurrentTransform,\r\n this._collidersRW[i].positionCurrentTransform\r\n ).inplaceInvertAffine();\r\n }\r\n\r\n for (let i = 0; i < this._grabbersRW.length; i++) {\r\n this._grabbersRW[i].position = this._grabberTransforms[i].getWorldPosition();\r\n }\r\n\r\n // Run simulation\r\n const params: SimulationParams = {\r\n isPaused: this._isPaused,\r\n stepTime: deltaTime,\r\n subSteps: this._config.subSteps,\r\n rootPosition: rootPos,\r\n previousRootPosition: this._previousRootPosition,\r\n rootSlideLimit,\r\n rootRotation: rootRot,\r\n previousRootRotation: this._previousRootRotation,\r\n rootRotateLimit: this._config.rootRotateLimit,\r\n windForce: this._config.windForce,\r\n enableSurfaceCollision: this._config.enableSurfaceCollision,\r\n surfaceConstraints: this._surfaceConstraints,\r\n relaxation: this._config.relaxation,\r\n constraintShrinkLimit: this._config.constraintShrinkLimit,\r\n blendRatio,\r\n isFakeWave: this._config.isFakeWave,\r\n fakeWaveSpeed: this._config.fakeWaveSpeed,\r\n fakeWavePower: this._config.fakeWavePower,\r\n fakeWaveCounter: this._fakeWaveCounter,\r\n collisionScale: 1.0,\r\n enableBroadPhase: this._config.enableBroadPhase\r\n };\r\n\r\n const result = simulate(\r\n params,\r\n this._pointsR,\r\n this._pointsRW,\r\n this._constraints,\r\n this._collidersR,\r\n this._collidersRW,\r\n this._grabbersR,\r\n this._grabbersRW,\r\n this._movableLimitTargets,\r\n this._flatPlanes\r\n );\r\n\r\n this._positionsToTransform = result.positionsToTransform;\r\n this._fakeWaveCounter = result.fakeWaveCounter;\r\n\r\n // Angle limits\r\n if (this._config.angleLimitConfig.angleLimit >= 0) {\r\n applyAngleLimits(this._pointsR, this._pointsRW, this._config.angleLimitConfig);\r\n }\r\n\r\n // Apply results\r\n const transformRots = this._pointTransforms.map((t) => t.getWorldRotation());\r\n const transformLocalRots = inputLocalRotations;\r\n const sceneParentRots = this._pointTransforms.map((t) => this._getSceneParentWorldRotation(t));\r\n const outputs = applyResult(\r\n this._pointsR,\r\n this._pointsRW,\r\n this._positionsToTransform,\r\n blendRatio,\r\n transformRots,\r\n transformLocalRots,\r\n this._config.preserveTwist,\r\n sceneParentRots\r\n );\r\n\r\n for (let i = 0; i < outputs.length; i++) {\r\n this._pointTransforms[i].setWorldPosition(outputs[i].position);\r\n this._pointTransforms[i].setWorldRotation(outputs[i].rotation);\r\n }\r\n this._lastOutputLocalRotations = this._pointTransforms.map((t) => t.getLocalRotation());\r\n\r\n this._previousRootPosition = rootPos;\r\n this._previousRootRotation = rootRot;\r\n }\r\n\r\n /**\r\n * Returns the simulated results for all points as world-space positions and rotations.\r\n * Usually this does not need to be called manually because `step()` already writes the\r\n * output back to the transforms.\r\n */\r\n getResults(): Array<{ position: Vector3; rotation: Quaternion }> {\r\n const transformRots = this._pointTransforms.map((t) => t.getWorldRotation());\r\n const transformLocalRots = this._getInputLocalRotations();\r\n const sceneParentRots = this._pointTransforms.map((t) => this._getSceneParentWorldRotation(t));\r\n const outputs = applyResult(\r\n this._pointsR,\r\n this._pointsRW,\r\n this._positionsToTransform,\r\n this._config.blendRatio,\r\n transformRots,\r\n transformLocalRots,\r\n this._config.preserveTwist,\r\n sceneParentRots\r\n );\r\n return outputs.map((o) => ({ position: o.position, rotation: o.rotation }));\r\n }\r\n\r\n /**\r\n * Returns a detached snapshot of the current runtime configuration.\r\n */\r\n getConfig(): ControllerConfig {\r\n return this._cloneControllerConfig(this._config);\r\n }\r\n\r\n /**\r\n * Returns detached collider snapshots for persistence.\r\n */\r\n getColliderSnapshots(): JointDynamicsColliderSnapshot[] {\r\n return this._collidersR.map((r, index) => ({\r\n r: { ...r },\r\n transform: this._colliderTransforms[index]?.node ?? null,\r\n enabled: this._collidersRW[index]?.enabled !== 0\r\n }));\r\n }\r\n\r\n /**\r\n * Returns detached flat-plane snapshots for persistence.\r\n */\r\n getFlatPlaneSnapshots(): JointDynamicsFlatPlaneSnapshot[] {\r\n return this._flatPlaneAll.map((plane, index) => ({\r\n up: plane.normal.clone(),\r\n position: Vector3.scale(plane.normal, -plane.distance),\r\n enabled: this._flatPlaneEnabled[index] ?? true\r\n }));\r\n }\r\n\r\n /**\r\n * Returns detached grabber snapshots for persistence.\r\n */\r\n getGrabberSnapshots(): JointDynamicsGrabberSnapshot[] {\r\n return this._grabbersR.map((r, index) => ({\r\n r: { ...r },\r\n transform: this._grabberTransforms[index]?.node ?? null,\r\n enabled: this._grabbersRW[index]?.enabled !== 0\r\n }));\r\n }\r\n\r\n /**\r\n * Replaces the runtime configuration.\r\n *\r\n * If the controller is already initialized, cached per-point parameters and generated\r\n * constraints are refreshed immediately so editor-driven changes take effect in the next step.\r\n *\r\n * @param config - Complete controller configuration to apply.\r\n */\r\n setConfig(config: ControllerConfig): void {\r\n this._config = this._sanitizeControllerConfig(this._cloneControllerConfig(config));\r\n this._clearOutputTransformCache();\r\n this._refreshCachedSimulationConfig();\r\n }\r\n\r\n /**\r\n * Applies a partial runtime configuration update.\r\n *\r\n * This is intended for editor workflows that tweak one or more simulation parameters live.\r\n * The controller updates only the affected caches: global step parameters are applied directly,\r\n * per-point curve/gravity changes rebuild cached point coefficients, and constraint option\r\n * changes rebuild the generated constraints.\r\n *\r\n * @param config - Partial configuration update.\r\n */\r\n updateConfig(config: ControllerConfigUpdate): void {\r\n let refreshPoints = false;\r\n let refreshConstraints = false;\r\n\r\n if (config.gravity) {\r\n this._config.gravity = config.gravity.clone();\r\n refreshPoints = true;\r\n }\r\n if (config.windForce) {\r\n this._config.windForce = config.windForce.clone();\r\n }\r\n if (typeof config.relaxation === 'number') {\r\n this._config.relaxation = Math.max(0, Math.trunc(config.relaxation));\r\n }\r\n if (typeof config.subSteps === 'number') {\r\n this._config.subSteps = Math.max(1, Math.trunc(config.subSteps));\r\n }\r\n if (typeof config.rootSlideLimit === 'number') {\r\n this._config.rootSlideLimit = config.rootSlideLimit;\r\n }\r\n if (typeof config.rootRotateLimit === 'number') {\r\n this._config.rootRotateLimit = config.rootRotateLimit;\r\n }\r\n if (typeof config.constraintShrinkLimit === 'number') {\r\n this._config.constraintShrinkLimit = Math.max(0, config.constraintShrinkLimit);\r\n }\r\n if (typeof config.blendRatio === 'number') {\r\n this._config.blendRatio = clamp01(config.blendRatio);\r\n }\r\n if (typeof config.stabilizationFrameRate === 'number') {\r\n this._config.stabilizationFrameRate = config.stabilizationFrameRate;\r\n }\r\n if (typeof config.isFakeWave === 'boolean') {\r\n this._config.isFakeWave = config.isFakeWave;\r\n }\r\n if (typeof config.fakeWaveSpeed === 'number') {\r\n this._config.fakeWaveSpeed = config.fakeWaveSpeed;\r\n }\r\n if (typeof config.fakeWavePower === 'number') {\r\n this._config.fakeWavePower = config.fakeWavePower;\r\n }\r\n if (typeof config.enableSurfaceCollision === 'boolean') {\r\n this._config.enableSurfaceCollision = config.enableSurfaceCollision;\r\n if (!config.constraintOptions || config.constraintOptions.enableSurfaceCollision === undefined) {\r\n this._config.constraintOptions.enableSurfaceCollision = config.enableSurfaceCollision;\r\n refreshConstraints = true;\r\n }\r\n }\r\n if (typeof config.enableBroadPhase === 'boolean') {\r\n this._config.enableBroadPhase = config.enableBroadPhase;\r\n }\r\n if (typeof config.preserveTwist === 'boolean') {\r\n this._config.preserveTwist = config.preserveTwist;\r\n this._clearOutputTransformCache();\r\n }\r\n\r\n if (config.angleLimitConfig) {\r\n if (typeof config.angleLimitConfig.angleLimit === 'number') {\r\n this._config.angleLimitConfig.angleLimit = config.angleLimitConfig.angleLimit;\r\n }\r\n if (typeof config.angleLimitConfig.limitFromRoot === 'boolean') {\r\n this._config.angleLimitConfig.limitFromRoot = config.angleLimitConfig.limitFromRoot;\r\n }\r\n }\r\n\r\n if (config.curves) {\r\n const curveKeys: Array<keyof PhysicsCurves> = [\r\n 'massScale',\r\n 'gravityScale',\r\n 'windForceScale',\r\n 'resistance',\r\n 'hardness',\r\n 'friction',\r\n 'pointRadius',\r\n 'sliderJointLength',\r\n 'allShrinkScale',\r\n 'allStretchScale',\r\n 'structuralShrinkVertical',\r\n 'structuralStretchVertical',\r\n 'structuralShrinkHorizontal',\r\n 'structuralStretchHorizontal',\r\n 'shearShrink',\r\n 'shearStretch',\r\n 'bendingShrinkVertical',\r\n 'bendingStretchVertical',\r\n 'bendingShrinkHorizontal',\r\n 'bendingStretchHorizontal',\r\n 'fakeWavePower',\r\n 'fakeWaveFreq'\r\n ];\r\n for (const key of curveKeys) {\r\n const curve = config.curves[key];\r\n if (curve !== undefined) {\r\n this._config.curves[key] = this._cloneInterpolatorScalar(curve);\r\n refreshPoints = true;\r\n }\r\n }\r\n }\r\n\r\n if (config.constraintOptions) {\r\n const optionKeys: Array<keyof ConstraintBuildOptions> = [\r\n 'structuralVertical',\r\n 'structuralHorizontal',\r\n 'shear',\r\n 'bendingVertical',\r\n 'bendingHorizontal',\r\n 'isLoop',\r\n 'collideStructuralVertical',\r\n 'collideStructuralHorizontal',\r\n 'collideShear',\r\n 'enableSurfaceCollision'\r\n ];\r\n for (const key of optionKeys) {\r\n const value = config.constraintOptions[key];\r\n if (value !== undefined) {\r\n this._config.constraintOptions[key] = value;\r\n if (key === 'enableSurfaceCollision' && config.enableSurfaceCollision === undefined) {\r\n this._config.enableSurfaceCollision = value;\r\n }\r\n refreshConstraints = true;\r\n }\r\n }\r\n }\r\n\r\n if (refreshConstraints) {\r\n this._rebuildConstraints();\r\n this._baseConstraintLengths = this._constraints.map((constraint) => constraint.length);\r\n this._updateScaleDependentParameters(true);\r\n }\r\n if (refreshPoints) {\r\n this._refreshPointParameters();\r\n }\r\n }\r\n\r\n /**\r\n * Resets all physics state after teleportation.\r\n * @deprecated Use {@link JointDynamicsSystemController.reset}. This method is kept as a compatibility alias.\r\n */\r\n warp(): void {\r\n this.reset();\r\n }\r\n\r\n /**\r\n * Resets all physics state.\r\n * Simulated points, transform history, root-motion history, grab state and wave phase are\r\n * snapped back to the current scene transforms. Runtime configuration and fixed/released\r\n * point weights are preserved.\r\n */\r\n reset(): void {\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const pos = this._pointTransforms[i].getWorldPosition();\r\n const ptRW = this._pointsRW[i];\r\n ptRW.positionCurrent = pos.clone();\r\n ptRW.positionPrevious = pos.clone();\r\n ptRW.positionCurrentTransform = pos.clone();\r\n ptRW.positionPreviousTransform = pos.clone();\r\n ptRW.positionToTransform = pos.clone();\r\n this._positionsToTransform[i] = pos.clone();\r\n ptRW.fakeWindDirection = Vector3.axisPZ();\r\n ptRW.grabberIndex = -1;\r\n ptRW.grabberDistance = 0;\r\n ptRW.friction = 0;\r\n }\r\n for (let i = 0; i < this._pointsRW.length; i++) {\r\n const parent = this._pointsR[i]?.parent ?? -1;\r\n if (parent !== -1) {\r\n const direction = Vector3.sub(\r\n this._pointsRW[i].positionCurrent,\r\n this._pointsRW[parent].positionCurrent\r\n );\r\n this._pointsRW[i].directionPrevious = direction.magnitudeSq > EPSILON ? direction : Vector3.axisPZ();\r\n } else {\r\n this._pointsRW[i].directionPrevious = Vector3.axisPZ();\r\n }\r\n }\r\n for (let i = 0; i < this._collidersRW.length; i++) {\r\n const transform = this._colliderTransforms[i];\r\n const pos = transform.getWorldPosition();\r\n const rot = transform.getWorldRotation();\r\n const scale = transform.getWorldScale();\r\n const colRW = this._collidersRW[i];\r\n colRW.positionCurrentTransform = pos.clone();\r\n colRW.positionPreviousTransform = pos.clone();\r\n colRW.directionCurrentTransform = rot.clone();\r\n colRW.directionPreviousTransform = rot.clone();\r\n colRW.worldScale = scale.clone();\r\n colRW.worldToLocal = Matrix4x4.compose(scale, rot, pos).inplaceInvertAffine();\r\n }\r\n for (let i = 0; i < this._grabbersRW.length; i++) {\r\n this._grabbersRW[i].position = this._grabberTransforms[i].getWorldPosition();\r\n }\r\n if (this._rootTransform) {\r\n this._previousRootPosition = this._rootTransform.getWorldPosition();\r\n this._previousRootRotation = this._rootTransform.getWorldRotation();\r\n }\r\n this._fakeWaveCounter = 0;\r\n this._clearOutputTransformCache();\r\n }\r\n\r\n /**\r\n * Releases a fixed point so it becomes dynamic, for example when cloth is detached.\r\n * The point state is reset to avoid a sudden impulse.\r\n * @param index - Point index.\r\n */\r\n releasePoint(index: number): void {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return;\r\n }\r\n (this._pointsR[index] as any).weight = 1;\r\n const pos = this._pointTransforms[index].getWorldPosition();\r\n this._pointsRW[index].positionCurrent = pos.clone();\r\n this._pointsRW[index].positionPrevious = pos.clone();\r\n this._pointsRW[index].grabberIndex = -1;\r\n }\r\n\r\n /**\r\n * Fixes a dynamic point back to the animation pose, for example when an item is reattached.\r\n * The point grab state is cleared.\r\n * @param index - Point index.\r\n */\r\n fixPoint(index: number): void {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return;\r\n }\r\n (this._pointsR[index] as any).weight = 0;\r\n this._pointsRW[index].grabberIndex = -1;\r\n }\r\n\r\n /**\r\n * Returns whether a point is fixed to animation (`weight = 0`).\r\n * @param index - Point index.\r\n */\r\n isPointFixed(index: number): boolean {\r\n if (index < 0 || index >= this._pointsR.length) {\r\n return false;\r\n }\r\n return this._pointsR[index].weight <= EPSILON;\r\n }\r\n\r\n /** Gets the total number of physics points. */\r\n get pointCount(): number {\r\n return this._pointsR.length;\r\n }\r\n\r\n /**\r\n * Fades physics in by blending from animation pose to simulation.\r\n * `blendRatio` moves from `1` (animation only) to `0` (physics only).\r\n * @param seconds - Transition duration in seconds.\r\n */\r\n fadeIn(seconds: number): void {\r\n this._fadeState = 'in';\r\n this._fadeTimer = 0;\r\n this._fadeDuration = seconds;\r\n }\r\n\r\n /**\r\n * Fades physics out by blending from simulation back to animation pose.\r\n * `blendRatio` moves from `0` (physics only) to `1` (animation only).\r\n * @param seconds - Transition duration in seconds.\r\n */\r\n fadeOut(seconds: number): void {\r\n this._fadeState = 'out';\r\n this._fadeTimer = 0;\r\n this._fadeDuration = seconds;\r\n }\r\n\r\n /**\r\n * Sets the global wind force vector.\r\n * The final wind contribution is still scaled per point by `windForceScale` and mass.\r\n * @param wind - Wind vector in world space.\r\n */\r\n setWindForce(wind: Vector3): void {\r\n this._config.windForce = wind.clone();\r\n }\r\n\r\n /**\r\n * Enable/disable broad-phase pruning for runtime performance comparison\r\n * @param enabled - `true` to enable broad-phase, `false` to disable.\r\n */\r\n setBroadPhaseEnabled(enabled: boolean): void {\r\n this._config.enableBroadPhase = enabled;\r\n }\r\n\r\n /** The blend ratio for the physics simulation */\r\n get blendRatio(): number {\r\n return this._config.blendRatio;\r\n }\r\n\r\n set blendRatio(value: number) {\r\n this._config.blendRatio = clamp01(value);\r\n }\r\n\r\n /**\r\n * Pauses or resumes the physics simulation.\r\n * While paused, the system still follows root motion but skips force integration and\r\n * constraint solving.\r\n * @param paused - `true` to pause, `false` to resume.\r\n */\r\n setPaused(paused: boolean): void {\r\n this._isPaused = paused;\r\n }\r\n\r\n /**\r\n * Enable or disable a collider by current array index.\r\n * Transform state is still read from the collider's TransformAccess each frame.\r\n * Prefer setColliderEnabled(handle, enabled) for runtime-owned colliders.\r\n *\r\n * @param index - Collider index in the current array. Note that this may change when colliders are added or removed.\r\n * @param enabled - `true` to enable the collider, `false` to disable it.\r\n *\r\n * @returns `true` if the index is valid and the collider was updated, `false` if the index is out of range.\r\n */\r\n setColliderEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index >= 0 && index < this._collidersRW.length) {\r\n this._collidersRW[index].enabled = enabled ? 1 : 0;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime collider by stable handle.\r\n *\r\n * @param handle - Stable handle for the collider to enable or disable.\r\n * @param enabled - `true` to enable the collider, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setColliderEnabled(handle: JointDynamicsColliderHandle, enabled: boolean): boolean {\r\n const index = this._getColliderIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setColliderEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a collider at runtime.\r\n * @param r - Read-only collider data such as shape and size.\r\n * @param transform - TransformAccess that provides the collider's position and rotation each frame.\r\n * @returns A stable handle that remains valid until this collider is removed.\r\n */\r\n addCollider(r: ColliderR, transform: TransformAccess): JointDynamicsColliderHandle {\r\n const id = this._nextColliderHandleId++;\r\n this._collidersR.push(r);\r\n this._colliderTransforms.push(transform);\r\n this._collidersRW.push(this._createColliderRW(transform));\r\n this._colliderHandleIds.push(id);\r\n this._colliderHandleToIndex.set(id, this._collidersR.length - 1);\r\n return { type: 'collider', id };\r\n }\r\n\r\n /**\r\n * Remove a collider by stable handle.\r\n * @param handle - Stable handle for the collider to remove.\r\n * @returns true if the collider existed and was removed.\r\n */\r\n removeCollider(handle: JointDynamicsColliderHandle): boolean {\r\n const index = this._getColliderIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeColliderAt(index);\r\n }\r\n\r\n /**\r\n * Remove a collider by current array index.\r\n * @param index - Collider index in the current array. Note that this may change when colliders are added or removed.\r\n * Prefer removeCollider(handle) for runtime-owned colliders.\r\n */\r\n removeColliderAt(index: number): boolean {\r\n if (index < 0 || index >= this._collidersR.length) {\r\n return false;\r\n }\r\n this._collidersR.splice(index, 1);\r\n this._colliderTransforms.splice(index, 1);\r\n this._collidersRW.splice(index, 1);\r\n this._colliderHandleIds.splice(index, 1);\r\n this._rebuildColliderHandleMap();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a flat plane by current array index.\r\n * @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.\r\n * @param enabled - `true` to enable the flat plane, `false` to disable it.\r\n * @returns `true` if the index is valid and the flat plane was updated, `false` if the index is out of range.\r\n */\r\n setFlatPlaneEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index < 0 || index >= this._flatPlaneAll.length) {\r\n return false;\r\n }\r\n this._flatPlaneEnabled[index] = enabled;\r\n this._rebuildActiveFlatPlanes();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime flat plane by stable handle.\r\n * @param handle - Stable handle for the flat plane to enable or disable.\r\n * @param enabled - `true` to enable the flat plane, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setFlatPlaneEnabled(handle: JointDynamicsFlatPlaneHandle, enabled: boolean): boolean {\r\n const index = this._getFlatPlaneIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setFlatPlaneEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a flat plane at runtime.\r\n * @param up - Up direction of the plane. The normal is computed as `Vector3.normalize(up)`.\r\n * @param position - A point on the plane. The distance is computed as `-Vector3.dot(normal, position)`.\r\n * @returns A stable handle that remains valid until this flat plane is removed.\r\n */\r\n addFlatPlane(up: Vector3, position: Vector3): JointDynamicsFlatPlaneHandle {\r\n const id = this._nextFlatPlaneHandleId++;\r\n const normal = Vector3.normalize(up);\r\n this._flatPlaneAll.push({\r\n normal,\r\n distance: -Vector3.dot(normal, position)\r\n });\r\n this._flatPlaneEnabled.push(true);\r\n this._flatPlaneHandleIds.push(id);\r\n this._flatPlaneHandleToIndex.set(id, this._flatPlaneAll.length - 1);\r\n this._rebuildActiveFlatPlanes();\r\n return { type: 'flatPlane', id };\r\n }\r\n\r\n /**\r\n * Remove a flat plane by stable handle.\r\n * @param handle - Stable handle for the flat plane to remove.\r\n * @returns true if the flat plane existed and was removed.\r\n */\r\n removeFlatPlane(handle: JointDynamicsFlatPlaneHandle): boolean {\r\n const index = this._getFlatPlaneIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeFlatPlaneAt(index);\r\n }\r\n\r\n /**\r\n * Remove a flat plane by current array index.\r\n * @param index - Flat plane index in the current array. Note that this may change when flat planes are added or removed.\r\n * @returns true if the index was valid and the flat plane was removed, false if the index was out of range.\r\n */\r\n removeFlatPlaneAt(index: number): boolean {\r\n if (index < 0 || index >= this._flatPlaneAll.length) {\r\n return false;\r\n }\r\n this._flatPlaneAll.splice(index, 1);\r\n this._flatPlaneEnabled.splice(index, 1);\r\n this._flatPlaneHandleIds.splice(index, 1);\r\n this._rebuildFlatPlaneHandleMap();\r\n this._rebuildActiveFlatPlanes();\r\n return true;\r\n }\r\n\r\n /**\r\n * Enable or disable a grabber by current array index.\r\n * Transform state is still read from the grabber's TransformAccess each frame.\r\n * Prefer setGrabberEnabled(handle, enabled) for runtime-owned grabbers.\r\n *\r\n * @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.\r\n * @param enabled - `true` to enable the grabber, `false` to disable it.\r\n * @returns `true` if the index is valid and the grabber was updated, `false` if the index is out of range.\r\n */\r\n setGrabberEnabledAt(index: number, enabled: boolean): boolean {\r\n if (index >= 0 && index < this._grabbersRW.length) {\r\n this._grabbersRW[index].enabled = enabled ? 1 : 0;\r\n if (!enabled) {\r\n this._releaseGrabber(index);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Enable or disable a runtime grabber by stable handle.\r\n * @param handle - Stable handle for the grabber to enable or disable.\r\n * @param enabled - `true` to enable the grabber, `false` to disable it.\r\n * @returns true if the handle is still valid.\r\n */\r\n setGrabberEnabled(handle: JointDynamicsGrabberHandle, enabled: boolean): boolean {\r\n const index = this._getGrabberIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.setGrabberEnabledAt(index, enabled);\r\n }\r\n\r\n /**\r\n * Add a grabber at runtime.\r\n * @param r - Read-only grabber data such as interaction radius.\r\n * @param transform - TransformAccess that provides the grabber's position each frame.\r\n * @param enabled - Whether the grabber starts enabled. The grabber can still be moved by its transform while disabled, but it won't affect any points until enabled.\r\n * @returns A stable handle that remains valid until this grabber is removed.\r\n */\r\n addGrabber(r: GrabberR, transform: TransformAccess, enabled = false): JointDynamicsGrabberHandle {\r\n const id = this._nextGrabberHandleId++;\r\n this._grabbersR.push(r);\r\n this._grabberTransforms.push(transform);\r\n this._grabbersRW.push({\r\n enabled: enabled ? 1 : 0,\r\n position: transform.getWorldPosition()\r\n });\r\n this._grabberHandleIds.push(id);\r\n this._grabberHandleToIndex.set(id, this._grabbersR.length - 1);\r\n return { type: 'grabber', id };\r\n }\r\n\r\n /**\r\n * Remove a grabber by stable handle.\r\n * @param handle - Stable handle for the grabber to remove.\r\n * @returns true if the grabber existed and was removed.\r\n */\r\n removeGrabber(handle: JointDynamicsGrabberHandle): boolean {\r\n const index = this._getGrabberIndex(handle);\r\n if (index === -1) {\r\n return false;\r\n }\r\n return this.removeGrabberAt(index);\r\n }\r\n\r\n /**\r\n * Remove a grabber by current array index.\r\n * Prefer removeGrabber(handle) for runtime-owned grabbers.\r\n *\r\n * @param index - Grabber index in the current array. Note that this may change when grabbers are added or removed.\r\n * @returns true if the index was valid and the grabber was removed, false if the index was out of range.\r\n */\r\n removeGrabberAt(index: number): boolean {\r\n if (index < 0 || index >= this._grabbersR.length) {\r\n return false;\r\n }\r\n this._grabbersR.splice(index, 1);\r\n this._grabberTransforms.splice(index, 1);\r\n this._grabbersRW.splice(index, 1);\r\n this._grabberHandleIds.splice(index, 1);\r\n this._rebuildGrabberHandleMap();\r\n\r\n this._releaseGrabber(index);\r\n for (const ptRW of this._pointsRW) {\r\n if (ptRW.grabberIndex > index) {\r\n ptRW.grabberIndex--;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Gets the number of runtime colliders. */\r\n get colliderCount(): number {\r\n return this._collidersR.length;\r\n }\r\n\r\n /** Gets the number of runtime flat planes. */\r\n get flatPlaneCount(): number {\r\n return this._flatPlaneAll.length;\r\n }\r\n\r\n /** Gets the number of runtime grabbers. */\r\n get grabberCount(): number {\r\n return this._grabbersR.length;\r\n }\r\n\r\n private _computeBlendRatio(): number {\r\n if (this._fadeState === 'in') {\r\n return 1.0 - clamp01(this._fadeTimer / this._fadeDuration);\r\n }\r\n if (this._fadeState === 'out') {\r\n return clamp01(this._fadeTimer / this._fadeDuration);\r\n }\r\n return this._config.blendRatio;\r\n }\r\n\r\n private _refreshCachedSimulationConfig(): void {\r\n this._rebuildConstraints();\r\n this._refreshPointParameters();\r\n }\r\n\r\n private _getColliderIndex(handle: JointDynamicsColliderHandle): number {\r\n if (handle.type !== 'collider') {\r\n return -1;\r\n }\r\n return this._colliderHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _getGrabberIndex(handle: JointDynamicsGrabberHandle): number {\r\n if (handle.type !== 'grabber') {\r\n return -1;\r\n }\r\n return this._grabberHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _getFlatPlaneIndex(handle: JointDynamicsFlatPlaneHandle): number {\r\n if (handle.type !== 'flatPlane') {\r\n return -1;\r\n }\r\n return this._flatPlaneHandleToIndex.get(handle.id) ?? -1;\r\n }\r\n\r\n private _releaseGrabber(index: number): void {\r\n for (const ptRW of this._pointsRW) {\r\n if (ptRW.grabberIndex === index) {\r\n ptRW.grabberIndex = -1;\r\n ptRW.grabberDistance = 0;\r\n }\r\n }\r\n }\r\n\r\n private _rebuildColliderHandleMap(): void {\r\n this._colliderHandleToIndex.clear();\r\n for (let i = 0; i < this._colliderHandleIds.length; i++) {\r\n this._colliderHandleToIndex.set(this._colliderHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildFlatPlaneHandleMap(): void {\r\n this._flatPlaneHandleToIndex.clear();\r\n for (let i = 0; i < this._flatPlaneHandleIds.length; i++) {\r\n this._flatPlaneHandleToIndex.set(this._flatPlaneHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildActiveFlatPlanes(): void {\r\n this._flatPlanes = [];\r\n for (let i = 0; i < this._flatPlaneAll.length; i++) {\r\n if (this._flatPlaneEnabled[i]) {\r\n this._flatPlanes.push(this._flatPlaneAll[i]);\r\n }\r\n }\r\n }\r\n\r\n private _rebuildGrabberHandleMap(): void {\r\n this._grabberHandleToIndex.clear();\r\n for (let i = 0; i < this._grabberHandleIds.length; i++) {\r\n this._grabberHandleToIndex.set(this._grabberHandleIds[i], i);\r\n }\r\n }\r\n\r\n private _rebuildConstraints(): void {\r\n if (this._rootPoints.length === 0) {\r\n this._constraints = [];\r\n this._surfaceConstraints = [];\r\n return;\r\n }\r\n this._constraints = buildConstraints(this._rootPoints, this._config.constraintOptions);\r\n this._surfaceConstraints = buildSurfaceFaces(this._rootPoints, this._config.constraintOptions.isLoop);\r\n }\r\n\r\n private _getSystemUniformScale(): number {\r\n if (!this._rootTransform) {\r\n return 1;\r\n }\r\n const scale = this._rootTransform.getWorldScale();\r\n return Math.max((Math.abs(scale.x) + Math.abs(scale.y) + Math.abs(scale.z)) / 3, EPSILON);\r\n }\r\n\r\n private _getSceneParentWorldRotation(transform: TransformAccess): Quaternion | undefined {\r\n const parent = transform.node?.parent;\r\n if (!parent) {\r\n return undefined;\r\n }\r\n const rotation = new Quaternion();\r\n parent.worldMatrix.decompose(null, rotation, null);\r\n return rotation;\r\n }\r\n\r\n private _clearOutputTransformCache(): void {\r\n this._lastOutputLocalRotations = [];\r\n }\r\n\r\n private _getInputLocalRotations(): Quaternion[] {\r\n return this._pointTransforms.map((transform, index) => {\r\n const localRotation = transform.getLocalRotation();\r\n const lastOutput = this._lastOutputLocalRotations[index];\r\n if (\r\n lastOutput &&\r\n Quaternion.angleBetween(localRotation, lastOutput) <= EPSILON &&\r\n this._pointsR[index]\r\n ) {\r\n return this._pointsR[index].initialLocalRotation.clone();\r\n }\r\n return localRotation;\r\n });\r\n }\r\n\r\n private _updateScaleDependentParameters(force = false): void {\r\n const systemScale = this._getSystemUniformScale();\r\n const scaleChanged = Math.abs(systemScale - this._currentSystemScale) > EPSILON;\r\n if (!force && !scaleChanged) {\r\n return;\r\n }\r\n this._currentSystemScale = systemScale;\r\n const ratio = this._baseSystemScale > EPSILON ? systemScale / this._baseSystemScale : 1;\r\n for (let i = 0; i < this._pointsR.length; i++) {\r\n this._pointsR[i].parentLength =\r\n (this._basePointParentLengths[i] ?? this._pointsR[i].parentLength) * ratio;\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].length = (this._baseConstraintLengths[i] ?? this._constraints[i].length) * ratio;\r\n }\r\n this._refreshPointParameters();\r\n if (scaleChanged) {\r\n this.reset();\r\n }\r\n }\r\n\r\n private _refreshPointParameters(): void {\r\n if (!this._initialized) {\r\n return;\r\n }\r\n for (let i = 0; i < this._allPoints.length; i++) {\r\n this._applyConfigToPoint(this._pointsR[i], this._allPoints[i]);\r\n }\r\n }\r\n\r\n private _createPointR(node: BoneNode): PointR {\r\n const parentIdx = this._parentMap.get(node.index) ?? -1;\r\n const childIdx = node.children.length > 0 ? node.children[0].index : -1;\r\n\r\n // Capture initial local transform for rotation blending\r\n const t = this._pointTransforms[node.index];\r\n const initLocalPos = t.getLocalPosition();\r\n const initLocalRot = t.getLocalRotation();\r\n const initLocalScale = t.getLocalScale();\r\n\r\n // BoneAxis: local-space direction to first child (computed in initialize)\r\n const boneAxis = node.boneAxis ?? new Vector3(0, -1, 0);\r\n\r\n // ParentLength: distance to parent\r\n let parentLength = 0;\r\n if (parentIdx !== -1) {\r\n const pPos = this._pointTransforms[parentIdx].getWorldPosition();\r\n const cPos = this._pointTransforms[node.index].getWorldPosition();\r\n parentLength = Vector3.distance(pPos, cPos);\r\n }\r\n\r\n const point: PointR = {\r\n parent: parentIdx,\r\n child: childIdx,\r\n applyInvertCollision: 0,\r\n movableLimitIndex: -1,\r\n movableLimitRadius: 0,\r\n weight: node.isFixed ? 0 : 1,\r\n mass: 0,\r\n resistance: 0,\r\n hardness: 0,\r\n frictionScale: 0,\r\n sliderJointLength: 0,\r\n parentLength,\r\n structuralShrinkVertical: 0,\r\n structuralStretchVertical: 0,\r\n structuralShrinkHorizontal: 0,\r\n structuralStretchHorizontal: 0,\r\n shearShrink: 0,\r\n shearStretch: 0,\r\n bendingShrinkVertical: 0,\r\n bendingStretchVertical: 0,\r\n bendingShrinkHorizontal: 0,\r\n bendingStretchHorizontal: 0,\r\n windForceScale: 0,\r\n fakeWavePower: 0,\r\n fakeWaveFreq: 0,\r\n forceFadeRatio: 0,\r\n pointRadius: 0,\r\n gravity: Vector3.zero(),\r\n boneAxis,\r\n initialLocalScale: initLocalScale,\r\n initialLocalRotation: initLocalRot,\r\n initialLocalTwist: extractLocalTwist(initLocalRot, boneAxis),\r\n initialLocalPosition: initLocalPos\r\n };\r\n this._applyConfigToPoint(point, node);\r\n return point;\r\n }\r\n\r\n private _applyConfigToPoint(point: PointR, node: BoneNode): void {\r\n const rate = this._maxPointDepth > 0 ? node.depth / this._maxPointDepth : 0;\r\n const c = this._config.curves;\r\n const allShrinkScale = c.allShrinkScale.evaluate(rate);\r\n const allStretchScale = c.allStretchScale.evaluate(rate);\r\n\r\n point.mass = c.massScale.evaluate(rate);\r\n point.resistance = clamp01(c.resistance.evaluate(rate));\r\n point.hardness = clamp01(c.hardness.evaluate(rate));\r\n point.frictionScale = c.friction.evaluate(rate);\r\n point.sliderJointLength = c.sliderJointLength.evaluate(rate);\r\n point.structuralShrinkVertical = c.structuralShrinkVertical.evaluate(rate) * allShrinkScale * 0.5;\r\n point.structuralStretchVertical = c.structuralStretchVertical.evaluate(rate) * allStretchScale * 0.5;\r\n point.structuralShrinkHorizontal = c.structuralShrinkHorizontal.evaluate(rate) * allShrinkScale * 0.5;\r\n point.structuralStretchHorizontal = c.structuralStretchHorizontal.evaluate(rate) * allStretchScale * 0.5;\r\n point.shearShrink = c.shearShrink.evaluate(rate) * allShrinkScale * 0.5;\r\n point.shearStretch = c.shearStretch.evaluate(rate) * allStretchScale * 0.5;\r\n point.bendingShrinkVertical = c.bendingShrinkVertical.evaluate(rate) * allShrinkScale * 0.5;\r\n point.bendingStretchVertical = c.bendingStretchVertical.evaluate(rate) * allStretchScale * 0.5;\r\n point.bendingShrinkHorizontal = c.bendingShrinkHorizontal.evaluate(rate) * allShrinkScale * 0.5;\r\n point.bendingStretchHorizontal = c.bendingStretchHorizontal.evaluate(rate) * allStretchScale * 0.5;\r\n point.windForceScale = c.windForceScale.evaluate(rate) * rate;\r\n point.fakeWavePower = c.fakeWavePower.evaluate(rate);\r\n point.fakeWaveFreq = c.fakeWaveFreq.evaluate(rate);\r\n const systemScale = this._currentSystemScale;\r\n point.pointRadius = Math.max(0, c.pointRadius.evaluate(rate) * systemScale);\r\n point.gravity = Vector3.scale(this._config.gravity, c.gravityScale.evaluate(rate) * systemScale);\r\n }\r\n\r\n private _createPointRW(): PointRW {\r\n return {\r\n positionToTransform: Vector3.zero(),\r\n positionCurrentTransform: Vector3.zero(),\r\n positionPreviousTransform: Vector3.zero(),\r\n positionCurrent: Vector3.zero(),\r\n positionPrevious: Vector3.zero(),\r\n directionPrevious: Vector3.axisPZ(),\r\n fakeWindDirection: Vector3.axisPZ(),\r\n grabberIndex: -1,\r\n grabberDistance: 0,\r\n friction: 0\r\n };\r\n }\r\n\r\n private _createColliderRW(transform: TransformAccess): ColliderRW {\r\n const pos = transform.getWorldPosition();\r\n const rot = transform.getWorldRotation();\r\n const scale = transform.getWorldScale();\r\n return {\r\n positionCurrent: pos.clone(),\r\n directionCurrent: Vector3.zero(),\r\n boundsCenter: pos.clone(),\r\n boundsRadius: 0,\r\n positionCurrentTransform: pos.clone(),\r\n positionPreviousTransform: pos.clone(),\r\n directionCurrentTransform: rot.clone(),\r\n directionPreviousTransform: rot.clone(),\r\n worldToLocal: Matrix4x4.identity(),\r\n worldScale: scale.clone(),\r\n localBoundsMin: Vector3.zero(),\r\n localBoundsMax: Vector3.zero(),\r\n radius: 0,\r\n height: 0,\r\n enabled: 1\r\n };\r\n }\r\n\r\n private _cloneControllerConfig(config: ControllerConfig): ControllerConfig {\r\n const curves: PhysicsCurves = {\r\n massScale: this._cloneInterpolatorScalar(config.curves.massScale),\r\n gravityScale: this._cloneInterpolatorScalar(config.curves.gravityScale),\r\n windForceScale: this._cloneInterpolatorScalar(config.curves.windForceScale),\r\n resistance: this._cloneInterpolatorScalar(config.curves.resistance),\r\n hardness: this._cloneInterpolatorScalar(config.curves.hardness),\r\n friction: this._cloneInterpolatorScalar(config.curves.friction),\r\n pointRadius: this._cloneInterpolatorScalar(config.curves.pointRadius),\r\n sliderJointLength: this._cloneInterpolatorScalar(config.curves.sliderJointLength),\r\n allShrinkScale: this._cloneInterpolatorScalar(config.curves.allShrinkScale),\r\n allStretchScale: this._cloneInterpolatorScalar(config.curves.allStretchScale),\r\n structuralShrinkVertical: this._cloneInterpolatorScalar(config.curves.structuralShrinkVertical),\r\n structuralStretchVertical: this._cloneInterpolatorScalar(config.curves.structuralStretchVertical),\r\n structuralShrinkHorizontal: this._cloneInterpolatorScalar(config.curves.structuralShrinkHorizontal),\r\n structuralStretchHorizontal: this._cloneInterpolatorScalar(config.curves.structuralStretchHorizontal),\r\n shearShrink: this._cloneInterpolatorScalar(config.curves.shearShrink),\r\n shearStretch: this._cloneInterpolatorScalar(config.curves.shearStretch),\r\n bendingShrinkVertical: this._cloneInterpolatorScalar(config.curves.bendingShrinkVertical),\r\n bendingStretchVertical: this._cloneInterpolatorScalar(config.curves.bendingStretchVertical),\r\n bendingShrinkHorizontal: this._cloneInterpolatorScalar(config.curves.bendingShrinkHorizontal),\r\n bendingStretchHorizontal: this._cloneInterpolatorScalar(config.curves.bendingStretchHorizontal),\r\n fakeWavePower: this._cloneInterpolatorScalar(config.curves.fakeWavePower),\r\n fakeWaveFreq: this._cloneInterpolatorScalar(config.curves.fakeWaveFreq)\r\n };\r\n return {\r\n gravity: config.gravity.clone(),\r\n windForce: config.windForce.clone(),\r\n relaxation: config.relaxation,\r\n subSteps: config.subSteps,\r\n rootSlideLimit: config.rootSlideLimit,\r\n rootRotateLimit: config.rootRotateLimit,\r\n constraintShrinkLimit: config.constraintShrinkLimit,\r\n blendRatio: config.blendRatio,\r\n stabilizationFrameRate: config.stabilizationFrameRate,\r\n isFakeWave: config.isFakeWave,\r\n fakeWaveSpeed: config.fakeWaveSpeed,\r\n fakeWavePower: config.fakeWavePower,\r\n enableSurfaceCollision: config.enableSurfaceCollision,\r\n enableBroadPhase: config.enableBroadPhase,\r\n preserveTwist: config.preserveTwist,\r\n angleLimitConfig: {\r\n angleLimit: config.angleLimitConfig.angleLimit,\r\n limitFromRoot: config.angleLimitConfig.limitFromRoot\r\n },\r\n curves,\r\n constraintOptions: {\r\n structuralVertical: config.constraintOptions.structuralVertical,\r\n structuralHorizontal: config.constraintOptions.structuralHorizontal,\r\n shear: config.constraintOptions.shear,\r\n bendingVertical: config.constraintOptions.bendingVertical,\r\n bendingHorizontal: config.constraintOptions.bendingHorizontal,\r\n isLoop: config.constraintOptions.isLoop,\r\n collideStructuralVertical: config.constraintOptions.collideStructuralVertical,\r\n collideStructuralHorizontal: config.constraintOptions.collideStructuralHorizontal,\r\n collideShear: config.constraintOptions.collideShear,\r\n enableSurfaceCollision: config.constraintOptions.enableSurfaceCollision\r\n }\r\n };\r\n }\r\n\r\n private _cloneInterpolatorScalar(curve: InterpolatorScalar): InterpolatorScalar {\r\n return new InterpolatorScalar(\r\n curve.mode,\r\n new Float32Array(curve.inputs),\r\n new Float32Array(curve.outputs)\r\n );\r\n }\r\n\r\n private _sanitizeControllerConfig(config: ControllerConfig): ControllerConfig {\r\n config.relaxation = Math.max(0, Math.trunc(config.relaxation));\r\n config.subSteps = Math.max(1, Math.trunc(config.subSteps));\r\n config.constraintShrinkLimit = Math.max(0, config.constraintShrinkLimit);\r\n config.blendRatio = clamp01(config.blendRatio);\r\n return config;\r\n }\r\n}\r\n"],"names":["JointDynamicsSystemController","_config","_pointsR","_pointsRW","_constraints","_collidersR","_collidersRW","_grabbersR","_grabbersRW","_movableLimitTargets","_flatPlanes","_flatPlaneEnabled","_flatPlaneAll","_surfaceConstraints","_positionsToTransform","_fakeWaveCounter","_previousRootPosition","Vector3","zero","_previousRootRotation","Quaternion","identity","_rootTransform","_rootPoints","_allPoints","_parentMap","Map","_maxPointDepth","_pointTransforms","_colliderTransforms","_grabberTransforms","_colliderHandleIds","_flatPlaneHandleIds","_grabberHandleIds","_colliderHandleToIndex","_flatPlaneHandleToIndex","_grabberHandleToIndex","_lastOutputLocalRotations","_baseSystemScale","_currentSystemScale","_basePointParentLengths","_baseConstraintLengths","_nextColliderHandleId","_nextFlatPlaneHandleId","_nextGrabberHandleId","_initialized","_isPaused","_fadeState","_fadeTimer","_fadeDuration","config","_sanitizeControllerConfig","_cloneControllerConfig","initialize","rootTransform","rootPoints","pointTransforms","colliders","grabbers","flatPlanes","_getSystemUniformScale","map","c","transform","g","_rebuildConstraints","constraint","length","allPoints","visitedPoints","Set","walk","node","has","index","add","push","children","set","r","sort","a","b","Math","max","p","depth","boneAxis","childPos","getWorldPosition","parentPos","parentRot","getWorldRotation","parentScale","getLocalScale","diff","sub","invRot","inverse","localDir","unscaled","x","y","z","normalize","_createPointR","point","parentLength","_createPointRW","Array","fill","_clearOutputTransformCache","_createColliderRW","_rebuildColliderHandleMap","enabled","position","_rebuildGrabberHandleMap","fp","normal","up","distance","dot","_rebuildFlatPlaneHandleMap","i","pos","positionCurrent","clone","positionPrevious","positionCurrentTransform","positionPreviousTransform","positionToTransform","directionPrevious","axisPZ","fakeWindDirection","grabberIndex","grabberDistance","friction","step","deltaTime","blendRatio","_computeBlendRatio","_updateScaleDependentParameters","rootSlideLimit","rootPos","rootRot","inputLocalRotations","_getInputLocalRotations","t","directionPreviousTransform","directionCurrentTransform","worldScale","getWorldScale","worldToLocal","Matrix4x4","compose","inplaceInvertAffine","params","isPaused","stepTime","subSteps","rootPosition","previousRootPosition","rootRotation","previousRootRotation","rootRotateLimit","windForce","enableSurfaceCollision","surfaceConstraints","relaxation","constraintShrinkLimit","isFakeWave","fakeWaveSpeed","fakeWavePower","fakeWaveCounter","collisionScale","enableBroadPhase","result","simulate","positionsToTransform","angleLimitConfig","angleLimit","applyAngleLimits","transformRots","transformLocalRots","sceneParentRots","_getSceneParentWorldRotation","outputs","applyResult","preserveTwist","setWorldPosition","setWorldRotation","rotation","getLocalRotation","getResults","o","getConfig","getColliderSnapshots","getFlatPlaneSnapshots","plane","scale","getGrabberSnapshots","setConfig","_refreshCachedSimulationConfig","updateConfig","refreshPoints","refreshConstraints","gravity","trunc","clamp01","stabilizationFrameRate","constraintOptions","undefined","limitFromRoot","curves","curveKeys","key","curve","_cloneInterpolatorScalar","optionKeys","value","_refreshPointParameters","warp","reset","ptRW","parent","direction","magnitudeSq","EPSILON","rot","colRW","releasePoint","weight","fixPoint","isPointFixed","pointCount","fadeIn","seconds","fadeOut","setWindForce","wind","setBroadPhaseEnabled","setPaused","paused","setColliderEnabledAt","setColliderEnabled","handle","_getColliderIndex","addCollider","id","type","removeCollider","removeColliderAt","splice","setFlatPlaneEnabledAt","_rebuildActiveFlatPlanes","setFlatPlaneEnabled","_getFlatPlaneIndex","addFlatPlane","removeFlatPlane","removeFlatPlaneAt","setGrabberEnabledAt","_releaseGrabber","setGrabberEnabled","_getGrabberIndex","addGrabber","removeGrabber","removeGrabberAt","colliderCount","flatPlaneCount","grabberCount","get","clear","buildConstraints","buildSurfaceFaces","isLoop","abs","worldMatrix","decompose","localRotation","lastOutput","angleBetween","initialLocalRotation","force","systemScale","scaleChanged","ratio","_applyConfigToPoint","parentIdx","childIdx","initLocalPos","getLocalPosition","initLocalRot","initLocalScale","pPos","cPos","child","applyInvertCollision","movableLimitIndex","movableLimitRadius","isFixed","mass","resistance","hardness","frictionScale","sliderJointLength","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","windForceScale","fakeWaveFreq","forceFadeRatio","pointRadius","initialLocalScale","initialLocalTwist","extractLocalTwist","initialLocalPosition","rate","allShrinkScale","evaluate","allStretchScale","massScale","gravityScale","directionCurrent","boundsCenter","boundsRadius","localBoundsMin","localBoundsMax","radius","height","structuralVertical","structuralHorizontal","shear","bendingVertical","bendingHorizontal","collideStructuralVertical","collideStructuralHorizontal","collideShear","InterpolatorScalar","mode","Float32Array","inputs"],"mappings":";;;;;AAAA;AAuLA;;;;;;;;;;AAUC,IACM,MAAMA,6BAAAA,CAAAA;IACHC,OAA0B;AAC1BC,IAAAA,QAAAA,GAAqB,EAAE;AACvBC,IAAAA,SAAAA,GAAuB,EAAE;AACzBC,IAAAA,YAAAA,GAA6B,EAAE;AAC/BC,IAAAA,WAAAA,GAA2B,EAAE;AAC7BC,IAAAA,YAAAA,GAA6B,EAAE;AAC/BC,IAAAA,UAAAA,GAAyB,EAAE;AAC3BC,IAAAA,WAAAA,GAA2B,EAAE;AAC7BC,IAAAA,oBAAAA,GAAkC,EAAE;AACpCC,IAAAA,WAAAA,GAA2B,EAAE;AAC7BC,IAAAA,iBAAAA,GAA+B,EAAE;AACjCC,IAAAA,aAAAA,GAA6B,EAAE;AAC/BC,IAAAA,mBAAAA,GAAgC,EAAE;AAClCC,IAAAA,qBAAAA,GAAmC,EAAE;AACrCC,IAAAA,gBAAAA,GAAmB,CAAE;IACrBC,qBAAwBC,GAAAA,OAAAA,CAAQC,IAAI,EAAG;IACvCC,qBAAwBC,GAAAA,UAAAA,CAAWC,QAAQ,EAAG;AAC9CC,IAAAA,cAAAA,GAAyC,IAAK;AAC9CC,IAAAA,WAAAA,GAA0B,EAAE;AAC5BC,IAAAA,UAAAA,GAAyB,EAAE;AAC3BC,IAAAA,UAAAA,GAAa,IAAIC,GAAsB,EAAA;AACvCC,IAAAA,cAAAA,GAAiB,CAAE;AACnBC,IAAAA,gBAAAA,GAAsC,EAAE;AACxCC,IAAAA,mBAAAA,GAAyC,EAAE;AAC3CC,IAAAA,kBAAAA,GAAwC,EAAE;AAC1CC,IAAAA,kBAAAA,GAA+B,EAAE;AACjCC,IAAAA,mBAAAA,GAAgC,EAAE;AAClCC,IAAAA,iBAAAA,GAA8B,EAAE;AAChCC,IAAAA,sBAAAA,GAAyB,IAAIR,GAAsB,EAAA;AACnDS,IAAAA,uBAAAA,GAA0B,IAAIT,GAAsB,EAAA;AACpDU,IAAAA,qBAAAA,GAAwB,IAAIV,GAAsB,EAAA;AAClDW,IAAAA,yBAAAA,GAA0C,EAAE;AAC5CC,IAAAA,gBAAAA,GAAmB,CAAE;AACrBC,IAAAA,mBAAAA,GAAsB,CAAE;AACxBC,IAAAA,uBAAAA,GAAoC,EAAE;AACtCC,IAAAA,sBAAAA,GAAmC,EAAE;AACrCC,IAAAA,qBAAAA,GAAwB,CAAE;AAC1BC,IAAAA,sBAAAA,GAAyB,CAAE;AAC3BC,IAAAA,oBAAAA,GAAuB,CAAE;AACzBC,IAAAA,YAAAA,GAAe,KAAM;AACrBC,IAAAA,SAAAA,GAAY,KAAM;AAClBC,IAAAA,UAAAA,GAAoC,MAAO;AAC3CC,IAAAA,UAAAA,GAAa,CAAE;AACfC,IAAAA,aAAAA,GAAgB,CAAE;AAE1B,IAAA,WAAA,CAAYC,MAAwB,CAAE;QACpC,IAAI,CAACjD,OAAO,GAAG,IAAI,CAACkD,yBAAyB,CAAC,IAAI,CAACC,sBAAsB,CAACF,MAAAA,CAAAA,CAAAA;AAC5E;AAEA;;;;;;;;AAQC,MACDG,UACEC,CAAAA,aAA8B,EAC9BC,UAAsB,EACtBC,eAAkC,EAClCC,SAA8D,EAC9DC,QAIE,EACFC,UAAqD,EAC/C;QACN,IAAI,CAACrC,cAAc,GAAGgC,aAAAA;AACtB,QAAA,IAAI,CAAChB,gBAAgB,GAAG,IAAI,CAACsB,sBAAsB,EAAA;AACnD,QAAA,IAAI,CAACrB,mBAAmB,GAAG,IAAI,CAACD,gBAAgB;QAChD,IAAI,CAACf,WAAW,GAAG;AAAIgC,YAAAA,GAAAA;AAAW,SAAA;QAClC,IAAI,CAAC3B,gBAAgB,GAAG4B,eAAAA;QACxB,IAAI,CAAC3B,mBAAmB,GAAG4B,SAAAA,CAAUI,GAAG,CAAC,CAACC,CAAMA,GAAAA,CAAAA,CAAEC,SAAS,CAAA;QAC3D,IAAI,CAACjC,kBAAkB,GAAG4B,QAAAA,CAASG,GAAG,CAAC,CAACG,CAAMA,GAAAA,CAAAA,CAAED,SAAS,CAAA;;AAGzD,QAAA,IAAI,CAACE,mBAAmB,EAAA;AACxB,QAAA,IAAI,CAACxB,sBAAsB,GAAG,IAAI,CAACrC,YAAY,CAACyD,GAAG,CAAC,CAACK,UAAeA,GAAAA,UAAAA,CAAWC,MAAM,CAAA;;AAGrF,QAAA,MAAMC,YAAwB,EAAE;AAChC,QAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;AAC1B,QAAA,IAAI,CAAC7C,UAAU,GAAG,IAAIC;AACtB,QAAA,MAAM6C,OAAO,CAACC,IAAAA,GAAAA;AACZ,YAAA,IAAIH,aAAcI,CAAAA,GAAG,CAACD,IAAAA,CAAKE,KAAK,CAAG,EAAA;AACjC,gBAAA;AACF;YACAL,aAAcM,CAAAA,GAAG,CAACH,IAAAA,CAAKE,KAAK,CAAA;AAC5BN,YAAAA,SAAAA,CAAUQ,IAAI,CAACJ,IAAAA,CAAAA;AACf,YAAA,KAAK,MAAMV,CAAAA,IAAKU,IAAKK,CAAAA,QAAQ,CAAE;gBAC7B,IAAI,CAACpD,UAAU,CAACqD,GAAG,CAAChB,CAAEY,CAAAA,KAAK,EAAEF,IAAAA,CAAKE,KAAK,CAAA;gBACvCH,IAAKT,CAAAA,CAAAA,CAAAA;AACP;AACF,SAAA;QACA,KAAK,MAAMiB,KAAKxB,UAAY,CAAA;YAC1BgB,IAAKQ,CAAAA,CAAAA,CAAAA;AACP;QACAX,SAAUY,CAAAA,IAAI,CAAC,CAACC,CAAAA,EAAGC,IAAMD,CAAEP,CAAAA,KAAK,GAAGQ,CAAAA,CAAER,KAAK,CAAA;QAE1C,IAAI,CAAClD,UAAU,GAAG4C,SAAAA;AAClB,QAAA,IAAI,CAACzC,cAAc,GAAGyC,SAAUD,CAAAA,MAAM,GAAG,CAAIgB,GAAAA,IAAAA,CAAKC,GAAG,CAAA,GAAIhB,UAAUP,GAAG,CAAC,CAACwB,CAAMA,GAAAA,CAAAA,CAAEC,KAAK,CAAK,CAAA,GAAA,CAAA;;;QAI1F,KAAK,MAAMD,KAAKjB,SAAW,CAAA;YACzB,IAAI,CAACiB,EAAEE,QAAQ,IAAIF,EAAER,QAAQ,CAACV,MAAM,GAAG,CAAG,EAAA;gBACxC,MAAMqB,QAAAA,GAAWhC,eAAe,CAAC6B,CAAER,CAAAA,QAAQ,CAAC,CAAA,CAAE,CAACH,KAAK,CAAC,CAACe,gBAAgB,EAAA;AACtE,gBAAA,MAAMC,YAAYlC,eAAe,CAAC6B,EAAEX,KAAK,CAAC,CAACe,gBAAgB,EAAA;;AAE3D,gBAAA,MAAME,YAAYnC,eAAe,CAAC6B,EAAEX,KAAK,CAAC,CAACkB,gBAAgB,EAAA;AAC3D,gBAAA,MAAMC,cAAcrC,eAAe,CAAC6B,EAAEX,KAAK,CAAC,CAACoB,aAAa,EAAA;AAC1D,gBAAA,MAAMC,IAAO9E,GAAAA,OAAAA,CAAQ+E,GAAG,CAACR,QAAUE,EAAAA,SAAAA,CAAAA;gBACnC,MAAMO,MAAAA,GAAS7E,UAAW8E,CAAAA,OAAO,CAACP,SAAAA,CAAAA;gBAClC,MAAMQ,QAAAA,GAAWF,MAAOlC,CAAAA,SAAS,CAACgC,IAAAA,CAAAA;;AAElC,gBAAA,MAAMK,QAAW,GAAA,IAAInF,OACnB4E,CAAAA,WAAAA,CAAYQ,CAAC,KAAK,CAAA,GAAIF,QAASE,CAAAA,CAAC,GAAGR,WAAYQ,CAAAA,CAAC,GAAG,CAAA,EACnDR,YAAYS,CAAC,KAAK,CAAIH,GAAAA,QAAAA,CAASG,CAAC,GAAGT,WAAYS,CAAAA,CAAC,GAAG,CACnDT,EAAAA,WAAAA,CAAYU,CAAC,KAAK,IAAIJ,QAASI,CAAAA,CAAC,GAAGV,WAAAA,CAAYU,CAAC,GAAG,CAAA,CAAA;AAErDlB,gBAAAA,CAAAA,CAAEE,QAAQ,GAAGtE,OAAQuF,CAAAA,SAAS,CAACJ,QAAAA,CAAAA;AACjC;AACF;;QAGA,IAAI,CAAClG,QAAQ,GAAGkE,SAAUP,CAAAA,GAAG,CAAC,CAACwB,CAAM,GAAA,IAAI,CAACoB,aAAa,CAACpB,CAAAA,CAAAA,CAAAA;AACxD,QAAA,IAAI,CAAC7C,uBAAuB,GAAG,IAAI,CAACtC,QAAQ,CAAC2D,GAAG,CAAC,CAAC6C,KAAUA,GAAAA,KAAAA,CAAMC,YAAY,CAAA;QAC9E,IAAI,CAACxG,SAAS,GAAGiE,SAAAA,CAAUP,GAAG,CAAC,IAAM,IAAI,CAAC+C,cAAc,EAAA,CAAA;QACxD,IAAI,CAAC9F,qBAAqB,GAAG,IAAI+F,KAAAA,CAAMzC,SAAUD,CAAAA,MAAM,CAAE2C,CAAAA,IAAI,CAAC7F,OAAAA,CAAQC,IAAI,EAAA,CAAA;AAC1E,QAAA,IAAI,CAAC6F,0BAA0B,EAAA;;QAG/B,IAAI,CAAC1G,WAAW,GAAGoD,SAAAA,CAAUI,GAAG,CAAC,CAACC,CAAMA,GAAAA,CAAAA,CAAEiB,CAAC,CAAA;AAC3C,QAAA,IAAI,CAACzE,YAAY,GAAGmD,SAAAA,CAAUI,GAAG,CAAC,CAACC,CAAAA,GAAM,IAAI,CAACkD,iBAAiB,CAAClD,EAAEC,SAAS,CAAA,CAAA;AAC3E,QAAA,IAAI,CAAChC,kBAAkB,GAAG,IAAI,CAAC1B,WAAW,CAACwD,GAAG,CAAC,IAAM,IAAI,CAACnB,qBAAqB,EAAA,CAAA;AAC/E,QAAA,IAAI,CAACuE,yBAAyB,EAAA;;QAG9B,IAAI,CAAC1G,UAAU,GAAGmD,QAAAA,CAASG,GAAG,CAAC,CAACG,CAAMA,GAAAA,CAAAA,CAAEe,CAAC,CAAA;QACzC,IAAI,CAACvE,WAAW,GAAGkD,QAAAA,CAASG,GAAG,CAAC,CAACG,KAAO;gBACtCkD,OAASlD,EAAAA,CAAAA,CAAEkD,OAAO,GAAG,CAAI,GAAA,CAAA;gBACzBC,QAAUnD,EAAAA,CAAAA,CAAED,SAAS,CAAC0B,gBAAgB;aACxC,CAAA,CAAA;AACA,QAAA,IAAI,CAACxD,iBAAiB,GAAG,IAAI,CAAC1B,UAAU,CAACsD,GAAG,CAAC,IAAM,IAAI,CAACjB,oBAAoB,EAAA,CAAA;AAC5E,QAAA,IAAI,CAACwE,wBAAwB,EAAA;;QAG7B,IAAI,CAAC1G,WAAW,GAAGiD,UAAAA,CAAWE,GAAG,CAAC,CAACwD,MAAQ;AACzCC,gBAAAA,MAAAA,EAAQrG,OAAQuF,CAAAA,SAAS,CAACa,EAAAA,CAAGE,EAAE,CAAA;gBAC/BC,QAAU,EAAA,CAACvG,OAAQwG,CAAAA,GAAG,CAACxG,OAAAA,CAAQuF,SAAS,CAACa,EAAGE,CAAAA,EAAE,CAAGF,EAAAA,EAAAA,CAAGF,QAAQ;aAC9D,CAAA,CAAA;QACA,IAAI,CAACvG,aAAa,GAAG;AAAI,YAAA,GAAA,IAAI,CAACF;AAAY,SAAA;QAC1C,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACC,aAAa,CAACiD,GAAG,CAAC,IAAM,IAAA,CAAA;AACtD,QAAA,IAAI,CAAC7B,mBAAmB,GAAG,IAAI,CAACpB,aAAa,CAACiD,GAAG,CAAC,IAAM,IAAI,CAAClB,sBAAsB,EAAA,CAAA;AACnF,QAAA,IAAI,CAAC+E,0BAA0B,EAAA;;AAG/B,QAAA,IAAI,CAAC1G,qBAAqB,GAAGsC,aAAAA,CAAcmC,gBAAgB,EAAA;AAC3D,QAAA,IAAI,CAACtE,qBAAqB,GAAGmC,aAAAA,CAAcsC,gBAAgB,EAAA;QAE3D,IAAK,IAAI+B,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACxH,SAAS,CAACgE,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAMC,GAAMpE,GAAAA,eAAe,CAACmE,CAAAA,CAAE,CAAClC,gBAAgB,EAAA;YAC/C,IAAI,CAACtF,SAAS,CAACwH,CAAAA,CAAE,CAACE,eAAe,GAAGD,IAAIE,KAAK,EAAA;YAC7C,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACI,gBAAgB,GAAGH,IAAIE,KAAK,EAAA;YAC9C,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACK,wBAAwB,GAAGJ,IAAIE,KAAK,EAAA;YACtD,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACM,yBAAyB,GAAGL,IAAIE,KAAK,EAAA;YACvD,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACO,mBAAmB,GAAGN,IAAIE,KAAK,EAAA;YACjD,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACQ,iBAAiB,GAAGlH,QAAQmH,MAAM,EAAA;YACpD,IAAI,CAACjI,SAAS,CAACwH,CAAAA,CAAE,CAACU,iBAAiB,GAAGpH,QAAQmH,MAAM,EAAA;AACpD,YAAA,IAAI,CAACjI,SAAS,CAACwH,EAAE,CAACW,YAAY,GAAG,EAAC;AAClC,YAAA,IAAI,CAACnI,SAAS,CAACwH,CAAE,CAAA,CAACY,eAAe,GAAG,CAAA;AACpC,YAAA,IAAI,CAACpI,SAAS,CAACwH,CAAE,CAAA,CAACa,QAAQ,GAAG,CAAA;AAC/B;QAEA,IAAI,CAAC3F,YAAY,GAAG,IAAA;AACtB;AAEA;;;;;MAMA4F,IAAAA,CAAKC,SAAiB,EAAQ;QAC5B,IAAI,CAAC,IAAI,CAAC7F,YAAY,IAAI,CAAC,IAAI,CAACvB,cAAc,EAAE;AAC9C,YAAA;AACF;;AAGA,QAAA,IAAI,IAAI,CAACyB,UAAU,KAAK,MAAQ,EAAA;YAC9B,IAAI,CAACC,UAAU,IAAI0F,SAAAA;AACnB,YAAA,IAAI,IAAI,CAAC1F,UAAU,IAAI,IAAI,CAACC,aAAa,EAAE;gBACzC,IAAI,CAACF,UAAU,GAAG,MAAA;gBAClB,IAAI,CAACC,UAAU,GAAG,CAAA;AACpB;AACF;QAEA,MAAM2F,UAAAA,GAAa,IAAI,CAACC,kBAAkB,EAAA;AAC1C,QAAA,IAAI,CAACC,+BAA+B,EAAA;AACpC,QAAA,MAAMC,iBACJ,IAAI,CAAC7I,OAAO,CAAC6I,cAAc,GAAG,CAAI,GAAA,EAAK,GAAA,IAAI,CAAC7I,OAAO,CAAC6I,cAAc,GAAG,IAAI,CAACvG,mBAAmB;;AAG/F,QAAA,MAAMwG,OAAU,GAAA,IAAI,CAACzH,cAAc,CAACmE,gBAAgB,EAAA;AACpD,QAAA,MAAMuD,OAAU,GAAA,IAAI,CAAC1H,cAAc,CAACsE,gBAAgB,EAAA;QAEpD,MAAMqD,mBAAAA,GAAsB,IAAI,CAACC,uBAAuB,EAAA;QACxD,IAAK,IAAIvB,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACxH,SAAS,CAACgE,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAC9C,YAAA,IAAI,CAACxH,SAAS,CAACwH,CAAAA,CAAE,CAACM,yBAAyB,GAAG,IAAI,CAAC9H,SAAS,CAACwH,CAAAA,CAAE,CAACK,wBAAwB,CAACF,KAAK,EAAA;AAC9F,YAAA,IAAI,CAAC3H,SAAS,CAACwH,CAAAA,CAAE,CAACK,wBAAwB,GAAG,IAAI,CAACpG,gBAAgB,CAAC+F,CAAAA,CAAE,CAAClC,gBAAgB,EAAA;AACxF;QAEA,IAAK,IAAIkC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACrH,YAAY,CAAC6D,MAAM,EAAEwD,CAAK,EAAA,CAAA;AACjD,YAAA,MAAMwB,CAAI,GAAA,IAAI,CAACtH,mBAAmB,CAAC8F,CAAE,CAAA;AACrC,YAAA,IAAI,CAACrH,YAAY,CAACqH,CAAAA,CAAE,CAACM,yBAAyB,GAAG,IAAI,CAAC3H,YAAY,CAACqH,CAAAA,CAAE,CAACK,wBAAwB,CAACF,KAAK,EAAA;AACpG,YAAA,IAAI,CAACxH,YAAY,CAACqH,CAAAA,CAAE,CAACyB,0BAA0B,GAC7C,IAAI,CAAC9I,YAAY,CAACqH,CAAAA,CAAE,CAAC0B,yBAAyB,CAACvB,KAAK,EAAA;YACtD,IAAI,CAACxH,YAAY,CAACqH,CAAAA,CAAE,CAACK,wBAAwB,GAAGmB,EAAE1D,gBAAgB,EAAA;YAClE,IAAI,CAACnF,YAAY,CAACqH,CAAAA,CAAE,CAAC0B,yBAAyB,GAAGF,EAAEvD,gBAAgB,EAAA;YACnE,IAAI,CAACtF,YAAY,CAACqH,CAAAA,CAAE,CAAC2B,UAAU,GAAGH,EAAEI,aAAa,EAAA;AACjD,YAAA,IAAI,CAACjJ,YAAY,CAACqH,CAAAA,CAAE,CAAC6B,YAAY,GAAGC,SAAUC,CAAAA,OAAO,CACnD,IAAI,CAACpJ,YAAY,CAACqH,EAAE,CAAC2B,UAAU,EAC/B,IAAI,CAAChJ,YAAY,CAACqH,CAAAA,CAAE,CAAC0B,yBAAyB,EAC9C,IAAI,CAAC/I,YAAY,CAACqH,CAAAA,CAAE,CAACK,wBAAwB,EAC7C2B,mBAAmB,EAAA;AACvB;QAEA,IAAK,IAAIhC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACnH,WAAW,CAAC2D,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAChD,YAAA,IAAI,CAACnH,WAAW,CAACmH,CAAAA,CAAE,CAACR,QAAQ,GAAG,IAAI,CAACrF,kBAAkB,CAAC6F,CAAAA,CAAE,CAAClC,gBAAgB,EAAA;AAC5E;;AAGA,QAAA,MAAMmE,MAA2B,GAAA;YAC/BC,QAAU,EAAA,IAAI,CAAC/G,SAAS;YACxBgH,QAAUpB,EAAAA,SAAAA;AACVqB,YAAAA,QAAAA,EAAU,IAAI,CAAC9J,OAAO,CAAC8J,QAAQ;YAC/BC,YAAcjB,EAAAA,OAAAA;YACdkB,oBAAsB,EAAA,IAAI,CAACjJ,qBAAqB;AAChD8H,YAAAA,cAAAA;YACAoB,YAAclB,EAAAA,OAAAA;YACdmB,oBAAsB,EAAA,IAAI,CAAChJ,qBAAqB;AAChDiJ,YAAAA,eAAAA,EAAiB,IAAI,CAACnK,OAAO,CAACmK,eAAe;AAC7CC,YAAAA,SAAAA,EAAW,IAAI,CAACpK,OAAO,CAACoK,SAAS;AACjCC,YAAAA,sBAAAA,EAAwB,IAAI,CAACrK,OAAO,CAACqK,sBAAsB;YAC3DC,kBAAoB,EAAA,IAAI,CAAC1J,mBAAmB;AAC5C2J,YAAAA,UAAAA,EAAY,IAAI,CAACvK,OAAO,CAACuK,UAAU;AACnCC,YAAAA,qBAAAA,EAAuB,IAAI,CAACxK,OAAO,CAACwK,qBAAqB;AACzD9B,YAAAA,UAAAA;AACA+B,YAAAA,UAAAA,EAAY,IAAI,CAACzK,OAAO,CAACyK,UAAU;AACnCC,YAAAA,aAAAA,EAAe,IAAI,CAAC1K,OAAO,CAAC0K,aAAa;AACzCC,YAAAA,aAAAA,EAAe,IAAI,CAAC3K,OAAO,CAAC2K,aAAa;YACzCC,eAAiB,EAAA,IAAI,CAAC9J,gBAAgB;YACtC+J,cAAgB,EAAA,GAAA;AAChBC,YAAAA,gBAAAA,EAAkB,IAAI,CAAC9K,OAAO,CAAC8K;AACjC,SAAA;AAEA,QAAA,MAAMC,SAASC,QACbrB,CAAAA,MAAAA,EACA,IAAI,CAAC1J,QAAQ,EACb,IAAI,CAACC,SAAS,EACd,IAAI,CAACC,YAAY,EACjB,IAAI,CAACC,WAAW,EAChB,IAAI,CAACC,YAAY,EACjB,IAAI,CAACC,UAAU,EACf,IAAI,CAACC,WAAW,EAChB,IAAI,CAACC,oBAAoB,EACzB,IAAI,CAACC,WAAW,CAAA;AAGlB,QAAA,IAAI,CAACI,qBAAqB,GAAGkK,MAAAA,CAAOE,oBAAoB;AACxD,QAAA,IAAI,CAACnK,gBAAgB,GAAGiK,MAAAA,CAAOH,eAAe;;QAG9C,IAAI,IAAI,CAAC5K,OAAO,CAACkL,gBAAgB,CAACC,UAAU,IAAI,CAAG,EAAA;AACjDC,YAAAA,gBAAAA,CAAiB,IAAI,CAACnL,QAAQ,EAAE,IAAI,CAACC,SAAS,EAAE,IAAI,CAACF,OAAO,CAACkL,gBAAgB,CAAA;AAC/E;;QAGA,MAAMG,aAAAA,GAAgB,IAAI,CAAC1J,gBAAgB,CAACiC,GAAG,CAAC,CAACsF,CAAMA,GAAAA,CAAAA,CAAEvD,gBAAgB,EAAA,CAAA;AACzE,QAAA,MAAM2F,kBAAqBtC,GAAAA,mBAAAA;AAC3B,QAAA,MAAMuC,eAAkB,GAAA,IAAI,CAAC5J,gBAAgB,CAACiC,GAAG,CAAC,CAACsF,CAAM,GAAA,IAAI,CAACsC,4BAA4B,CAACtC,CAAAA,CAAAA,CAAAA;QAC3F,MAAMuC,OAAAA,GAAUC,YACd,IAAI,CAACzL,QAAQ,EACb,IAAI,CAACC,SAAS,EACd,IAAI,CAACW,qBAAqB,EAC1B6H,YACA2C,aACAC,EAAAA,kBAAAA,EACA,IAAI,CAACtL,OAAO,CAAC2L,aAAa,EAC1BJ,eAAAA,CAAAA;AAGF,QAAA,IAAK,IAAI7D,CAAI,GAAA,CAAA,EAAGA,IAAI+D,OAAQvH,CAAAA,MAAM,EAAEwD,CAAK,EAAA,CAAA;YACvC,IAAI,CAAC/F,gBAAgB,CAAC+F,CAAE,CAAA,CAACkE,gBAAgB,CAACH,OAAO,CAAC/D,CAAE,CAAA,CAACR,QAAQ,CAAA;YAC7D,IAAI,CAACvF,gBAAgB,CAAC+F,CAAE,CAAA,CAACmE,gBAAgB,CAACJ,OAAO,CAAC/D,CAAE,CAAA,CAACoE,QAAQ,CAAA;AAC/D;AACA,QAAA,IAAI,CAAC1J,yBAAyB,GAAG,IAAI,CAACT,gBAAgB,CAACiC,GAAG,CAAC,CAACsF,CAAMA,GAAAA,CAAAA,CAAE6C,gBAAgB,EAAA,CAAA;QAEpF,IAAI,CAAChL,qBAAqB,GAAG+H,OAAAA;QAC7B,IAAI,CAAC5H,qBAAqB,GAAG6H,OAAAA;AAC/B;AAEA;;;;AAIC,MACDiD,UAAiE,GAAA;QAC/D,MAAMX,aAAAA,GAAgB,IAAI,CAAC1J,gBAAgB,CAACiC,GAAG,CAAC,CAACsF,CAAMA,GAAAA,CAAAA,CAAEvD,gBAAgB,EAAA,CAAA;QACzE,MAAM2F,kBAAAA,GAAqB,IAAI,CAACrC,uBAAuB,EAAA;AACvD,QAAA,MAAMsC,eAAkB,GAAA,IAAI,CAAC5J,gBAAgB,CAACiC,GAAG,CAAC,CAACsF,CAAM,GAAA,IAAI,CAACsC,4BAA4B,CAACtC,CAAAA,CAAAA,CAAAA;QAC3F,MAAMuC,OAAAA,GAAUC,WACd,CAAA,IAAI,CAACzL,QAAQ,EACb,IAAI,CAACC,SAAS,EACd,IAAI,CAACW,qBAAqB,EAC1B,IAAI,CAACb,OAAO,CAAC0I,UAAU,EACvB2C,aAAAA,EACAC,kBACA,EAAA,IAAI,CAACtL,OAAO,CAAC2L,aAAa,EAC1BJ,eAAAA,CAAAA;AAEF,QAAA,OAAOE,OAAQ7H,CAAAA,GAAG,CAAC,CAACqI,KAAO;AAAE/E,gBAAAA,QAAAA,EAAU+E,EAAE/E,QAAQ;AAAE4E,gBAAAA,QAAAA,EAAUG,EAAEH;aAAS,CAAA,CAAA;AAC1E;AAEA;;AAEC,MACDI,SAA8B,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC/I,sBAAsB,CAAC,IAAI,CAACnD,OAAO,CAAA;AACjD;AAEA;;AAEC,MACDmM,oBAAwD,GAAA;QACtD,OAAO,IAAI,CAAC/L,WAAW,CAACwD,GAAG,CAAC,CAACkB,CAAGL,EAAAA,KAAAA,IAAW;gBACzCK,CAAG,EAAA;AAAE,oBAAA,GAAGA;AAAE,iBAAA;AACVhB,gBAAAA,SAAAA,EAAW,IAAI,CAAClC,mBAAmB,CAAC6C,KAAAA,CAAM,EAAEF,IAAQ,IAAA,IAAA;AACpD0C,gBAAAA,OAAAA,EAAS,IAAI,CAAC5G,YAAY,CAACoE,KAAAA,CAAM,EAAEwC,OAAY,KAAA;aACjD,CAAA,CAAA;AACF;AAEA;;AAEC,MACDmF,qBAA0D,GAAA;QACxD,OAAO,IAAI,CAACzL,aAAa,CAACiD,GAAG,CAAC,CAACyI,KAAO5H,EAAAA,KAAAA,IAAW;gBAC/C6C,EAAI+E,EAAAA,KAAAA,CAAMhF,MAAM,CAACQ,KAAK,EAAA;gBACtBX,QAAUlG,EAAAA,OAAAA,CAAQsL,KAAK,CAACD,KAAAA,CAAMhF,MAAM,EAAE,CAACgF,MAAM9E,QAAQ,CAAA;AACrDN,gBAAAA,OAAAA,EAAS,IAAI,CAACvG,iBAAiB,CAAC+D,MAAM,IAAI;aAC5C,CAAA,CAAA;AACF;AAEA;;AAEC,MACD8H,mBAAsD,GAAA;QACpD,OAAO,IAAI,CAACjM,UAAU,CAACsD,GAAG,CAAC,CAACkB,CAAGL,EAAAA,KAAAA,IAAW;gBACxCK,CAAG,EAAA;AAAE,oBAAA,GAAGA;AAAE,iBAAA;AACVhB,gBAAAA,SAAAA,EAAW,IAAI,CAACjC,kBAAkB,CAAC4C,KAAAA,CAAM,EAAEF,IAAQ,IAAA,IAAA;AACnD0C,gBAAAA,OAAAA,EAAS,IAAI,CAAC1G,WAAW,CAACkE,KAAAA,CAAM,EAAEwC,OAAY,KAAA;aAChD,CAAA,CAAA;AACF;AAEA;;;;;;;MAQAuF,SAAAA,CAAUvJ,MAAwB,EAAQ;QACxC,IAAI,CAACjD,OAAO,GAAG,IAAI,CAACkD,yBAAyB,CAAC,IAAI,CAACC,sBAAsB,CAACF,MAAAA,CAAAA,CAAAA;AAC1E,QAAA,IAAI,CAAC6D,0BAA0B,EAAA;AAC/B,QAAA,IAAI,CAAC2F,8BAA8B,EAAA;AACrC;AAEA;;;;;;;;;MAUAC,YAAAA,CAAazJ,MAA8B,EAAQ;AACjD,QAAA,IAAI0J,aAAgB,GAAA,KAAA;AACpB,QAAA,IAAIC,kBAAqB,GAAA,KAAA;QAEzB,IAAI3J,MAAAA,CAAO4J,OAAO,EAAE;YAClB,IAAI,CAAC7M,OAAO,CAAC6M,OAAO,GAAG5J,MAAO4J,CAAAA,OAAO,CAAChF,KAAK,EAAA;YAC3C8E,aAAgB,GAAA,IAAA;AAClB;QACA,IAAI1J,MAAAA,CAAOmH,SAAS,EAAE;YACpB,IAAI,CAACpK,OAAO,CAACoK,SAAS,GAAGnH,MAAOmH,CAAAA,SAAS,CAACvC,KAAK,EAAA;AACjD;AACA,QAAA,IAAI,OAAO5E,MAAAA,CAAOsH,UAAU,KAAK,QAAU,EAAA;AACzC,YAAA,IAAI,CAACvK,OAAO,CAACuK,UAAU,GAAGrF,IAAAA,CAAKC,GAAG,CAAC,CAAGD,EAAAA,IAAAA,CAAK4H,KAAK,CAAC7J,OAAOsH,UAAU,CAAA,CAAA;AACpE;AACA,QAAA,IAAI,OAAOtH,MAAAA,CAAO6G,QAAQ,KAAK,QAAU,EAAA;AACvC,YAAA,IAAI,CAAC9J,OAAO,CAAC8J,QAAQ,GAAG5E,IAAAA,CAAKC,GAAG,CAAC,CAAGD,EAAAA,IAAAA,CAAK4H,KAAK,CAAC7J,OAAO6G,QAAQ,CAAA,CAAA;AAChE;AACA,QAAA,IAAI,OAAO7G,MAAAA,CAAO4F,cAAc,KAAK,QAAU,EAAA;AAC7C,YAAA,IAAI,CAAC7I,OAAO,CAAC6I,cAAc,GAAG5F,OAAO4F,cAAc;AACrD;AACA,QAAA,IAAI,OAAO5F,MAAAA,CAAOkH,eAAe,KAAK,QAAU,EAAA;AAC9C,YAAA,IAAI,CAACnK,OAAO,CAACmK,eAAe,GAAGlH,OAAOkH,eAAe;AACvD;AACA,QAAA,IAAI,OAAOlH,MAAAA,CAAOuH,qBAAqB,KAAK,QAAU,EAAA;YACpD,IAAI,CAACxK,OAAO,CAACwK,qBAAqB,GAAGtF,KAAKC,GAAG,CAAC,CAAGlC,EAAAA,MAAAA,CAAOuH,qBAAqB,CAAA;AAC/E;AACA,QAAA,IAAI,OAAOvH,MAAAA,CAAOyF,UAAU,KAAK,QAAU,EAAA;AACzC,YAAA,IAAI,CAAC1I,OAAO,CAAC0I,UAAU,GAAGqE,OAAAA,CAAQ9J,OAAOyF,UAAU,CAAA;AACrD;AACA,QAAA,IAAI,OAAOzF,MAAAA,CAAO+J,sBAAsB,KAAK,QAAU,EAAA;AACrD,YAAA,IAAI,CAAChN,OAAO,CAACgN,sBAAsB,GAAG/J,OAAO+J,sBAAsB;AACrE;AACA,QAAA,IAAI,OAAO/J,MAAAA,CAAOwH,UAAU,KAAK,SAAW,EAAA;AAC1C,YAAA,IAAI,CAACzK,OAAO,CAACyK,UAAU,GAAGxH,OAAOwH,UAAU;AAC7C;AACA,QAAA,IAAI,OAAOxH,MAAAA,CAAOyH,aAAa,KAAK,QAAU,EAAA;AAC5C,YAAA,IAAI,CAAC1K,OAAO,CAAC0K,aAAa,GAAGzH,OAAOyH,aAAa;AACnD;AACA,QAAA,IAAI,OAAOzH,MAAAA,CAAO0H,aAAa,KAAK,QAAU,EAAA;AAC5C,YAAA,IAAI,CAAC3K,OAAO,CAAC2K,aAAa,GAAG1H,OAAO0H,aAAa;AACnD;AACA,QAAA,IAAI,OAAO1H,MAAAA,CAAOoH,sBAAsB,KAAK,SAAW,EAAA;AACtD,YAAA,IAAI,CAACrK,OAAO,CAACqK,sBAAsB,GAAGpH,OAAOoH,sBAAsB;YACnE,IAAI,CAACpH,OAAOgK,iBAAiB,IAAIhK,OAAOgK,iBAAiB,CAAC5C,sBAAsB,KAAK6C,SAAW,EAAA;gBAC9F,IAAI,CAAClN,OAAO,CAACiN,iBAAiB,CAAC5C,sBAAsB,GAAGpH,OAAOoH,sBAAsB;gBACrFuC,kBAAqB,GAAA,IAAA;AACvB;AACF;AACA,QAAA,IAAI,OAAO3J,MAAAA,CAAO6H,gBAAgB,KAAK,SAAW,EAAA;AAChD,YAAA,IAAI,CAAC9K,OAAO,CAAC8K,gBAAgB,GAAG7H,OAAO6H,gBAAgB;AACzD;AACA,QAAA,IAAI,OAAO7H,MAAAA,CAAO0I,aAAa,KAAK,SAAW,EAAA;AAC7C,YAAA,IAAI,CAAC3L,OAAO,CAAC2L,aAAa,GAAG1I,OAAO0I,aAAa;AACjD,YAAA,IAAI,CAAC7E,0BAA0B,EAAA;AACjC;QAEA,IAAI7D,MAAAA,CAAOiI,gBAAgB,EAAE;AAC3B,YAAA,IAAI,OAAOjI,MAAOiI,CAAAA,gBAAgB,CAACC,UAAU,KAAK,QAAU,EAAA;gBAC1D,IAAI,CAACnL,OAAO,CAACkL,gBAAgB,CAACC,UAAU,GAAGlI,MAAAA,CAAOiI,gBAAgB,CAACC,UAAU;AAC/E;AACA,YAAA,IAAI,OAAOlI,MAAOiI,CAAAA,gBAAgB,CAACiC,aAAa,KAAK,SAAW,EAAA;gBAC9D,IAAI,CAACnN,OAAO,CAACkL,gBAAgB,CAACiC,aAAa,GAAGlK,MAAAA,CAAOiI,gBAAgB,CAACiC,aAAa;AACrF;AACF;QAEA,IAAIlK,MAAAA,CAAOmK,MAAM,EAAE;AACjB,YAAA,MAAMC,SAAwC,GAAA;AAC5C,gBAAA,WAAA;AACA,gBAAA,cAAA;AACA,gBAAA,gBAAA;AACA,gBAAA,YAAA;AACA,gBAAA,UAAA;AACA,gBAAA,UAAA;AACA,gBAAA,aAAA;AACA,gBAAA,mBAAA;AACA,gBAAA,gBAAA;AACA,gBAAA,iBAAA;AACA,gBAAA,0BAAA;AACA,gBAAA,2BAAA;AACA,gBAAA,4BAAA;AACA,gBAAA,6BAAA;AACA,gBAAA,aAAA;AACA,gBAAA,cAAA;AACA,gBAAA,uBAAA;AACA,gBAAA,wBAAA;AACA,gBAAA,yBAAA;AACA,gBAAA,0BAAA;AACA,gBAAA,eAAA;AACA,gBAAA;AACD,aAAA;YACD,KAAK,MAAMC,OAAOD,SAAW,CAAA;AAC3B,gBAAA,MAAME,KAAQtK,GAAAA,MAAAA,CAAOmK,MAAM,CAACE,GAAI,CAAA;AAChC,gBAAA,IAAIC,UAAUL,SAAW,EAAA;oBACvB,IAAI,CAAClN,OAAO,CAACoN,MAAM,CAACE,IAAI,GAAG,IAAI,CAACE,wBAAwB,CAACD,KAAAA,CAAAA;oBACzDZ,aAAgB,GAAA,IAAA;AAClB;AACF;AACF;QAEA,IAAI1J,MAAAA,CAAOgK,iBAAiB,EAAE;AAC5B,YAAA,MAAMQ,UAAkD,GAAA;AACtD,gBAAA,oBAAA;AACA,gBAAA,sBAAA;AACA,gBAAA,OAAA;AACA,gBAAA,iBAAA;AACA,gBAAA,mBAAA;AACA,gBAAA,QAAA;AACA,gBAAA,2BAAA;AACA,gBAAA,6BAAA;AACA,gBAAA,cAAA;AACA,gBAAA;AACD,aAAA;YACD,KAAK,MAAMH,OAAOG,UAAY,CAAA;AAC5B,gBAAA,MAAMC,KAAQzK,GAAAA,MAAAA,CAAOgK,iBAAiB,CAACK,GAAI,CAAA;AAC3C,gBAAA,IAAII,UAAUR,SAAW,EAAA;AACvB,oBAAA,IAAI,CAAClN,OAAO,CAACiN,iBAAiB,CAACK,IAAI,GAAGI,KAAAA;AACtC,oBAAA,IAAIJ,GAAQ,KAAA,wBAAA,IAA4BrK,MAAOoH,CAAAA,sBAAsB,KAAK6C,SAAW,EAAA;AACnF,wBAAA,IAAI,CAAClN,OAAO,CAACqK,sBAAsB,GAAGqD,KAAAA;AACxC;oBACAd,kBAAqB,GAAA,IAAA;AACvB;AACF;AACF;AAEA,QAAA,IAAIA,kBAAoB,EAAA;AACtB,YAAA,IAAI,CAAC5I,mBAAmB,EAAA;AACxB,YAAA,IAAI,CAACxB,sBAAsB,GAAG,IAAI,CAACrC,YAAY,CAACyD,GAAG,CAAC,CAACK,UAAeA,GAAAA,UAAAA,CAAWC,MAAM,CAAA;YACrF,IAAI,CAAC0E,+BAA+B,CAAC,IAAA,CAAA;AACvC;AACA,QAAA,IAAI+D,aAAe,EAAA;AACjB,YAAA,IAAI,CAACgB,uBAAuB,EAAA;AAC9B;AACF;AAEA;;;AAGC,MACDC,IAAa,GAAA;AACX,QAAA,IAAI,CAACC,KAAK,EAAA;AACZ;AAEA;;;;;AAKC,MACDA,KAAc,GAAA;QACZ,IAAK,IAAInG,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACxH,SAAS,CAACgE,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAMC,MAAM,IAAI,CAAChG,gBAAgB,CAAC+F,CAAAA,CAAE,CAAClC,gBAAgB,EAAA;AACrD,YAAA,MAAMsI,IAAO,GAAA,IAAI,CAAC5N,SAAS,CAACwH,CAAE,CAAA;YAC9BoG,IAAKlG,CAAAA,eAAe,GAAGD,GAAAA,CAAIE,KAAK,EAAA;YAChCiG,IAAKhG,CAAAA,gBAAgB,GAAGH,GAAAA,CAAIE,KAAK,EAAA;YACjCiG,IAAK/F,CAAAA,wBAAwB,GAAGJ,GAAAA,CAAIE,KAAK,EAAA;YACzCiG,IAAK9F,CAAAA,yBAAyB,GAAGL,GAAAA,CAAIE,KAAK,EAAA;YAC1CiG,IAAK7F,CAAAA,mBAAmB,GAAGN,GAAAA,CAAIE,KAAK,EAAA;AACpC,YAAA,IAAI,CAAChH,qBAAqB,CAAC6G,CAAE,CAAA,GAAGC,IAAIE,KAAK,EAAA;YACzCiG,IAAK1F,CAAAA,iBAAiB,GAAGpH,OAAAA,CAAQmH,MAAM,EAAA;YACvC2F,IAAKzF,CAAAA,YAAY,GAAG,EAAC;AACrByF,YAAAA,IAAAA,CAAKxF,eAAe,GAAG,CAAA;AACvBwF,YAAAA,IAAAA,CAAKvF,QAAQ,GAAG,CAAA;AAClB;QACA,IAAK,IAAIb,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACxH,SAAS,CAACgE,MAAM,EAAEwD,CAAK,EAAA,CAAA;YAC9C,MAAMqG,MAAAA,GAAS,IAAI,CAAC9N,QAAQ,CAACyH,CAAE,CAAA,EAAEqG,UAAU,EAAC;YAC5C,IAAIA,MAAAA,KAAW,EAAI,EAAA;AACjB,gBAAA,MAAMC,YAAYhN,OAAQ+E,CAAAA,GAAG,CAC3B,IAAI,CAAC7F,SAAS,CAACwH,CAAAA,CAAE,CAACE,eAAe,EACjC,IAAI,CAAC1H,SAAS,CAAC6N,MAAAA,CAAO,CAACnG,eAAe,CAAA;AAExC,gBAAA,IAAI,CAAC1H,SAAS,CAACwH,CAAAA,CAAE,CAACQ,iBAAiB,GAAG8F,SAAAA,CAAUC,WAAW,GAAGC,OAAUF,GAAAA,SAAAA,GAAYhN,QAAQmH,MAAM,EAAA;aAC7F,MAAA;gBACL,IAAI,CAACjI,SAAS,CAACwH,CAAAA,CAAE,CAACQ,iBAAiB,GAAGlH,QAAQmH,MAAM,EAAA;AACtD;AACF;QACA,IAAK,IAAIT,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACrH,YAAY,CAAC6D,MAAM,EAAEwD,CAAK,EAAA,CAAA;AACjD,YAAA,MAAM5D,SAAY,GAAA,IAAI,CAAClC,mBAAmB,CAAC8F,CAAE,CAAA;YAC7C,MAAMC,GAAAA,GAAM7D,UAAU0B,gBAAgB,EAAA;YACtC,MAAM2I,GAAAA,GAAMrK,UAAU6B,gBAAgB,EAAA;YACtC,MAAM2G,KAAAA,GAAQxI,UAAUwF,aAAa,EAAA;AACrC,YAAA,MAAM8E,KAAQ,GAAA,IAAI,CAAC/N,YAAY,CAACqH,CAAE,CAAA;YAClC0G,KAAMrG,CAAAA,wBAAwB,GAAGJ,GAAAA,CAAIE,KAAK,EAAA;YAC1CuG,KAAMpG,CAAAA,yBAAyB,GAAGL,GAAAA,CAAIE,KAAK,EAAA;YAC3CuG,KAAMhF,CAAAA,yBAAyB,GAAG+E,GAAAA,CAAItG,KAAK,EAAA;YAC3CuG,KAAMjF,CAAAA,0BAA0B,GAAGgF,GAAAA,CAAItG,KAAK,EAAA;YAC5CuG,KAAM/E,CAAAA,UAAU,GAAGiD,KAAAA,CAAMzE,KAAK,EAAA;YAC9BuG,KAAM7E,CAAAA,YAAY,GAAGC,SAAUC,CAAAA,OAAO,CAAC6C,KAAO6B,EAAAA,GAAAA,EAAKxG,KAAK+B,mBAAmB,EAAA;AAC7E;QACA,IAAK,IAAIhC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACnH,WAAW,CAAC2D,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAChD,YAAA,IAAI,CAACnH,WAAW,CAACmH,CAAAA,CAAE,CAACR,QAAQ,GAAG,IAAI,CAACrF,kBAAkB,CAAC6F,CAAAA,CAAE,CAAClC,gBAAgB,EAAA;AAC5E;QACA,IAAI,IAAI,CAACnE,cAAc,EAAE;AACvB,YAAA,IAAI,CAACN,qBAAqB,GAAG,IAAI,CAACM,cAAc,CAACmE,gBAAgB,EAAA;AACjE,YAAA,IAAI,CAACtE,qBAAqB,GAAG,IAAI,CAACG,cAAc,CAACsE,gBAAgB,EAAA;AACnE;QACA,IAAI,CAAC7E,gBAAgB,GAAG,CAAA;AACxB,QAAA,IAAI,CAACgG,0BAA0B,EAAA;AACjC;AAEA;;;;MAKAuH,YAAAA,CAAa5J,KAAa,EAAQ;QAChC,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAACxE,QAAQ,CAACiE,MAAM,EAAE;AAC9C,YAAA;AACF;AACC,QAAA,IAAI,CAACjE,QAAQ,CAACwE,KAAM,CAAA,CAAS6J,MAAM,GAAG,CAAA;AACvC,QAAA,MAAM3G,MAAM,IAAI,CAAChG,gBAAgB,CAAC8C,KAAAA,CAAM,CAACe,gBAAgB,EAAA;QACzD,IAAI,CAACtF,SAAS,CAACuE,KAAAA,CAAM,CAACmD,eAAe,GAAGD,IAAIE,KAAK,EAAA;QACjD,IAAI,CAAC3H,SAAS,CAACuE,KAAAA,CAAM,CAACqD,gBAAgB,GAAGH,IAAIE,KAAK,EAAA;AAClD,QAAA,IAAI,CAAC3H,SAAS,CAACuE,MAAM,CAAC4D,YAAY,GAAG,EAAC;AACxC;AAEA;;;;MAKAkG,QAAAA,CAAS9J,KAAa,EAAQ;QAC5B,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAACxE,QAAQ,CAACiE,MAAM,EAAE;AAC9C,YAAA;AACF;AACC,QAAA,IAAI,CAACjE,QAAQ,CAACwE,KAAM,CAAA,CAAS6J,MAAM,GAAG,CAAA;AACvC,QAAA,IAAI,CAACpO,SAAS,CAACuE,MAAM,CAAC4D,YAAY,GAAG,EAAC;AACxC;AAEA;;;MAIAmG,YAAAA,CAAa/J,KAAa,EAAW;QACnC,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAACxE,QAAQ,CAACiE,MAAM,EAAE;YAC9C,OAAO,KAAA;AACT;AACA,QAAA,OAAO,IAAI,CAACjE,QAAQ,CAACwE,KAAM,CAAA,CAAC6J,MAAM,IAAIJ,OAAAA;AACxC;oDAGA,IAAIO,UAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAACxO,QAAQ,CAACiE,MAAM;AAC7B;AAEA;;;;MAKAwK,MAAAA,CAAOC,OAAe,EAAQ;QAC5B,IAAI,CAAC7L,UAAU,GAAG,IAAA;QAClB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,aAAa,GAAG2L,OAAAA;AACvB;AAEA;;;;MAKAC,OAAAA,CAAQD,OAAe,EAAQ;QAC7B,IAAI,CAAC7L,UAAU,GAAG,KAAA;QAClB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,aAAa,GAAG2L,OAAAA;AACvB;AAEA;;;;MAKAE,YAAAA,CAAaC,IAAa,EAAQ;AAChC,QAAA,IAAI,CAAC9O,OAAO,CAACoK,SAAS,GAAG0E,KAAKjH,KAAK,EAAA;AACrC;AAEA;;;MAIAkH,oBAAAA,CAAqB9H,OAAgB,EAAQ;AAC3C,QAAA,IAAI,CAACjH,OAAO,CAAC8K,gBAAgB,GAAG7D,OAAAA;AAClC;sDAGA,IAAIyB,UAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC1I,OAAO,CAAC0I,UAAU;AAChC;IAEA,IAAIA,UAAAA,CAAWgF,KAAa,EAAE;AAC5B,QAAA,IAAI,CAAC1N,OAAO,CAAC0I,UAAU,GAAGqE,OAAQW,CAAAA,KAAAA,CAAAA;AACpC;AAEA;;;;;MAMAsB,SAAAA,CAAUC,MAAe,EAAQ;QAC/B,IAAI,CAACpM,SAAS,GAAGoM,MAAAA;AACnB;AAEA;;;;;;;;;AASC,MACDC,oBAAqBzK,CAAAA,KAAa,EAAEwC,OAAgB,EAAW;QAC7D,IAAIxC,KAAAA,IAAS,KAAKA,KAAQ,GAAA,IAAI,CAACpE,YAAY,CAAC6D,MAAM,EAAE;YAClD,IAAI,CAAC7D,YAAY,CAACoE,KAAAA,CAAM,CAACwC,OAAO,GAAGA,UAAU,CAAI,GAAA,CAAA;YACjD,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AAEA;;;;;;AAMC,MACDkI,kBAAmBC,CAAAA,MAAmC,EAAEnI,OAAgB,EAAW;AACjF,QAAA,MAAMxC,KAAQ,GAAA,IAAI,CAAC4K,iBAAiB,CAACD,MAAAA,CAAAA;QACrC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;AACA,QAAA,OAAO,IAAI,CAACyK,oBAAoB,CAACzK,KAAOwC,EAAAA,OAAAA,CAAAA;AAC1C;AAEA;;;;;AAKC,MACDqI,WAAYxK,CAAAA,CAAY,EAAEhB,SAA0B,EAA+B;QACjF,MAAMyL,EAAAA,GAAK,IAAI,CAAC9M,qBAAqB,EAAA;AACrC,QAAA,IAAI,CAACrC,WAAW,CAACuE,IAAI,CAACG,CAAAA,CAAAA;AACtB,QAAA,IAAI,CAAClD,mBAAmB,CAAC+C,IAAI,CAACb,SAAAA,CAAAA;QAC9B,IAAI,CAACzD,YAAY,CAACsE,IAAI,CAAC,IAAI,CAACoC,iBAAiB,CAACjD,SAAAA,CAAAA,CAAAA;AAC9C,QAAA,IAAI,CAAChC,kBAAkB,CAAC6C,IAAI,CAAC4K,EAAAA,CAAAA;QAC7B,IAAI,CAACtN,sBAAsB,CAAC4C,GAAG,CAAC0K,EAAI,EAAA,IAAI,CAACnP,WAAW,CAAC8D,MAAM,GAAG,CAAA,CAAA;QAC9D,OAAO;YAAEsL,IAAM,EAAA,UAAA;AAAYD,YAAAA;AAAG,SAAA;AAChC;AAEA;;;;MAKAE,cAAAA,CAAeL,MAAmC,EAAW;AAC3D,QAAA,MAAM3K,KAAQ,GAAA,IAAI,CAAC4K,iBAAiB,CAACD,MAAAA,CAAAA;QACrC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;QACA,OAAO,IAAI,CAACiL,gBAAgB,CAACjL,KAAAA,CAAAA;AAC/B;AAEA;;;;MAKAiL,gBAAAA,CAAiBjL,KAAa,EAAW;QACvC,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAACrE,WAAW,CAAC8D,MAAM,EAAE;YACjD,OAAO,KAAA;AACT;AACA,QAAA,IAAI,CAAC9D,WAAW,CAACuP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AAC/B,QAAA,IAAI,CAAC7C,mBAAmB,CAAC+N,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACpE,YAAY,CAACsP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AAChC,QAAA,IAAI,CAAC3C,kBAAkB,CAAC6N,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACtC,QAAA,IAAI,CAACuC,yBAAyB,EAAA;QAC9B,OAAO,IAAA;AACT;AAEA;;;;;AAKC,MACD4I,qBAAsBnL,CAAAA,KAAa,EAAEwC,OAAgB,EAAW;QAC9D,IAAIxC,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAAC9D,aAAa,CAACuD,MAAM,EAAE;YACnD,OAAO,KAAA;AACT;AACA,QAAA,IAAI,CAACxD,iBAAiB,CAAC+D,KAAAA,CAAM,GAAGwC,OAAAA;AAChC,QAAA,IAAI,CAAC4I,wBAAwB,EAAA;QAC7B,OAAO,IAAA;AACT;AAEA;;;;;AAKC,MACDC,mBAAoBV,CAAAA,MAAoC,EAAEnI,OAAgB,EAAW;AACnF,QAAA,MAAMxC,KAAQ,GAAA,IAAI,CAACsL,kBAAkB,CAACX,MAAAA,CAAAA;QACtC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;AACA,QAAA,OAAO,IAAI,CAACmL,qBAAqB,CAACnL,KAAOwC,EAAAA,OAAAA,CAAAA;AAC3C;AAEA;;;;;AAKC,MACD+I,YAAa1I,CAAAA,EAAW,EAAEJ,QAAiB,EAAgC;QACzE,MAAMqI,EAAAA,GAAK,IAAI,CAAC7M,sBAAsB,EAAA;QACtC,MAAM2E,MAAAA,GAASrG,OAAQuF,CAAAA,SAAS,CAACe,EAAAA,CAAAA;AACjC,QAAA,IAAI,CAAC3G,aAAa,CAACgE,IAAI,CAAC;AACtB0C,YAAAA,MAAAA;AACAE,YAAAA,QAAAA,EAAU,CAACvG,OAAAA,CAAQwG,GAAG,CAACH,MAAQH,EAAAA,QAAAA;AACjC,SAAA,CAAA;AACA,QAAA,IAAI,CAACxG,iBAAiB,CAACiE,IAAI,CAAC,IAAA,CAAA;AAC5B,QAAA,IAAI,CAAC5C,mBAAmB,CAAC4C,IAAI,CAAC4K,EAAAA,CAAAA;QAC9B,IAAI,CAACrN,uBAAuB,CAAC2C,GAAG,CAAC0K,EAAI,EAAA,IAAI,CAAC5O,aAAa,CAACuD,MAAM,GAAG,CAAA,CAAA;AACjE,QAAA,IAAI,CAAC2L,wBAAwB,EAAA;QAC7B,OAAO;YAAEL,IAAM,EAAA,WAAA;AAAaD,YAAAA;AAAG,SAAA;AACjC;AAEA;;;;MAKAU,eAAAA,CAAgBb,MAAoC,EAAW;AAC7D,QAAA,MAAM3K,KAAQ,GAAA,IAAI,CAACsL,kBAAkB,CAACX,MAAAA,CAAAA;QACtC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;QACA,OAAO,IAAI,CAACyL,iBAAiB,CAACzL,KAAAA,CAAAA;AAChC;AAEA;;;;MAKAyL,iBAAAA,CAAkBzL,KAAa,EAAW;QACxC,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAAC9D,aAAa,CAACuD,MAAM,EAAE;YACnD,OAAO,KAAA;AACT;AACA,QAAA,IAAI,CAACvD,aAAa,CAACgP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACjC,QAAA,IAAI,CAAC/D,iBAAiB,CAACiP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACrC,QAAA,IAAI,CAAC1C,mBAAmB,CAAC4N,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACgD,0BAA0B,EAAA;AAC/B,QAAA,IAAI,CAACoI,wBAAwB,EAAA;QAC7B,OAAO,IAAA;AACT;AAEA;;;;;;;;AAQC,MACDM,mBAAoB1L,CAAAA,KAAa,EAAEwC,OAAgB,EAAW;QAC5D,IAAIxC,KAAAA,IAAS,KAAKA,KAAQ,GAAA,IAAI,CAAClE,WAAW,CAAC2D,MAAM,EAAE;YACjD,IAAI,CAAC3D,WAAW,CAACkE,KAAAA,CAAM,CAACwC,OAAO,GAAGA,UAAU,CAAI,GAAA,CAAA;AAChD,YAAA,IAAI,CAACA,OAAS,EAAA;gBACZ,IAAI,CAACmJ,eAAe,CAAC3L,KAAAA,CAAAA;AACvB;YACA,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AAEA;;;;;AAKC,MACD4L,iBAAkBjB,CAAAA,MAAkC,EAAEnI,OAAgB,EAAW;AAC/E,QAAA,MAAMxC,KAAQ,GAAA,IAAI,CAAC6L,gBAAgB,CAAClB,MAAAA,CAAAA;QACpC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;AACA,QAAA,OAAO,IAAI,CAAC0L,mBAAmB,CAAC1L,KAAOwC,EAAAA,OAAAA,CAAAA;AACzC;AAEA;;;;;;AAMC,MACDsJ,WAAWzL,CAAW,EAAEhB,SAA0B,EAAEmD,OAAAA,GAAU,KAAK,EAA8B;QAC/F,MAAMsI,EAAAA,GAAK,IAAI,CAAC5M,oBAAoB,EAAA;AACpC,QAAA,IAAI,CAACrC,UAAU,CAACqE,IAAI,CAACG,CAAAA,CAAAA;AACrB,QAAA,IAAI,CAACjD,kBAAkB,CAAC8C,IAAI,CAACb,SAAAA,CAAAA;AAC7B,QAAA,IAAI,CAACvD,WAAW,CAACoE,IAAI,CAAC;AACpBsC,YAAAA,OAAAA,EAASA,UAAU,CAAI,GAAA,CAAA;AACvBC,YAAAA,QAAAA,EAAUpD,UAAU0B,gBAAgB;AACtC,SAAA,CAAA;AACA,QAAA,IAAI,CAACxD,iBAAiB,CAAC2C,IAAI,CAAC4K,EAAAA,CAAAA;QAC5B,IAAI,CAACpN,qBAAqB,CAAC0C,GAAG,CAAC0K,EAAI,EAAA,IAAI,CAACjP,UAAU,CAAC4D,MAAM,GAAG,CAAA,CAAA;QAC5D,OAAO;YAAEsL,IAAM,EAAA,SAAA;AAAWD,YAAAA;AAAG,SAAA;AAC/B;AAEA;;;;MAKAiB,aAAAA,CAAcpB,MAAkC,EAAW;AACzD,QAAA,MAAM3K,KAAQ,GAAA,IAAI,CAAC6L,gBAAgB,CAAClB,MAAAA,CAAAA;QACpC,IAAI3K,KAAAA,KAAU,EAAI,EAAA;YAChB,OAAO,KAAA;AACT;QACA,OAAO,IAAI,CAACgM,eAAe,CAAChM,KAAAA,CAAAA;AAC9B;AAEA;;;;;;MAOAgM,eAAAA,CAAgBhM,KAAa,EAAW;QACtC,IAAIA,KAAAA,GAAQ,KAAKA,KAAS,IAAA,IAAI,CAACnE,UAAU,CAAC4D,MAAM,EAAE;YAChD,OAAO,KAAA;AACT;AACA,QAAA,IAAI,CAAC5D,UAAU,CAACqP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AAC9B,QAAA,IAAI,CAAC5C,kBAAkB,CAAC8N,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACtC,QAAA,IAAI,CAAClE,WAAW,CAACoP,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AAC/B,QAAA,IAAI,CAACzC,iBAAiB,CAAC2N,MAAM,CAAClL,KAAO,EAAA,CAAA,CAAA;AACrC,QAAA,IAAI,CAAC0C,wBAAwB,EAAA;QAE7B,IAAI,CAACiJ,eAAe,CAAC3L,KAAAA,CAAAA;AACrB,QAAA,KAAK,MAAMqJ,IAAAA,IAAQ,IAAI,CAAC5N,SAAS,CAAE;YACjC,IAAI4N,IAAAA,CAAKzF,YAAY,GAAG5D,KAAO,EAAA;AAC7BqJ,gBAAAA,IAAAA,CAAKzF,YAAY,EAAA;AACnB;AACF;QACA,OAAO,IAAA;AACT;iDAGA,IAAIqI,aAAwB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAACtQ,WAAW,CAAC8D,MAAM;AAChC;mDAGA,IAAIyM,cAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAChQ,aAAa,CAACuD,MAAM;AAClC;gDAGA,IAAI0M,YAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAACtQ,UAAU,CAAC4D,MAAM;AAC/B;IAEQyE,kBAA6B,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC7F,UAAU,KAAK,IAAM,EAAA;YAC5B,OAAO,GAAA,GAAMiK,QAAQ,IAAI,CAAChK,UAAU,GAAG,IAAI,CAACC,aAAa,CAAA;AAC3D;AACA,QAAA,IAAI,IAAI,CAACF,UAAU,KAAK,KAAO,EAAA;AAC7B,YAAA,OAAOiK,QAAQ,IAAI,CAAChK,UAAU,GAAG,IAAI,CAACC,aAAa,CAAA;AACrD;AACA,QAAA,OAAO,IAAI,CAAChD,OAAO,CAAC0I,UAAU;AAChC;IAEQ+D,8BAAuC,GAAA;AAC7C,QAAA,IAAI,CAACzI,mBAAmB,EAAA;AACxB,QAAA,IAAI,CAAC2J,uBAAuB,EAAA;AAC9B;AAEQ0B,IAAAA,iBAAAA,CAAkBD,MAAmC,EAAU;QACrE,IAAIA,MAAAA,CAAOI,IAAI,KAAK,UAAY,EAAA;AAC9B,YAAA,OAAO,EAAC;AACV;QACA,OAAO,IAAI,CAACvN,sBAAsB,CAAC4O,GAAG,CAACzB,MAAAA,CAAOG,EAAE,CAAA,IAAK,EAAC;AACxD;AAEQe,IAAAA,gBAAAA,CAAiBlB,MAAkC,EAAU;QACnE,IAAIA,MAAAA,CAAOI,IAAI,KAAK,SAAW,EAAA;AAC7B,YAAA,OAAO,EAAC;AACV;QACA,OAAO,IAAI,CAACrN,qBAAqB,CAAC0O,GAAG,CAACzB,MAAAA,CAAOG,EAAE,CAAA,IAAK,EAAC;AACvD;AAEQQ,IAAAA,kBAAAA,CAAmBX,MAAoC,EAAU;QACvE,IAAIA,MAAAA,CAAOI,IAAI,KAAK,WAAa,EAAA;AAC/B,YAAA,OAAO,EAAC;AACV;QACA,OAAO,IAAI,CAACtN,uBAAuB,CAAC2O,GAAG,CAACzB,MAAAA,CAAOG,EAAE,CAAA,IAAK,EAAC;AACzD;AAEQa,IAAAA,eAAAA,CAAgB3L,KAAa,EAAQ;AAC3C,QAAA,KAAK,MAAMqJ,IAAAA,IAAQ,IAAI,CAAC5N,SAAS,CAAE;YACjC,IAAI4N,IAAAA,CAAKzF,YAAY,KAAK5D,KAAO,EAAA;gBAC/BqJ,IAAKzF,CAAAA,YAAY,GAAG,EAAC;AACrByF,gBAAAA,IAAAA,CAAKxF,eAAe,GAAG,CAAA;AACzB;AACF;AACF;IAEQtB,yBAAkC,GAAA;QACxC,IAAI,CAAC/E,sBAAsB,CAAC6O,KAAK,EAAA;QACjC,IAAK,IAAIpJ,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC5F,kBAAkB,CAACoC,MAAM,EAAEwD,CAAK,EAAA,CAAA;YACvD,IAAI,CAACzF,sBAAsB,CAAC4C,GAAG,CAAC,IAAI,CAAC/C,kBAAkB,CAAC4F,CAAAA,CAAE,EAAEA,CAAAA,CAAAA;AAC9D;AACF;IAEQD,0BAAmC,GAAA;QACzC,IAAI,CAACvF,uBAAuB,CAAC4O,KAAK,EAAA;QAClC,IAAK,IAAIpJ,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC3F,mBAAmB,CAACmC,MAAM,EAAEwD,CAAK,EAAA,CAAA;YACxD,IAAI,CAACxF,uBAAuB,CAAC2C,GAAG,CAAC,IAAI,CAAC9C,mBAAmB,CAAC2F,CAAAA,CAAE,EAAEA,CAAAA,CAAAA;AAChE;AACF;IAEQmI,wBAAiC,GAAA;QACvC,IAAI,CAACpP,WAAW,GAAG,EAAE;QACrB,IAAK,IAAIiH,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC/G,aAAa,CAACuD,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAClD,YAAA,IAAI,IAAI,CAAChH,iBAAiB,CAACgH,EAAE,EAAE;gBAC7B,IAAI,CAACjH,WAAW,CAACkE,IAAI,CAAC,IAAI,CAAChE,aAAa,CAAC+G,CAAE,CAAA,CAAA;AAC7C;AACF;AACF;IAEQP,wBAAiC,GAAA;QACvC,IAAI,CAAChF,qBAAqB,CAAC2O,KAAK,EAAA;QAChC,IAAK,IAAIpJ,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC1F,iBAAiB,CAACkC,MAAM,EAAEwD,CAAK,EAAA,CAAA;YACtD,IAAI,CAACvF,qBAAqB,CAAC0C,GAAG,CAAC,IAAI,CAAC7C,iBAAiB,CAAC0F,CAAAA,CAAE,EAAEA,CAAAA,CAAAA;AAC5D;AACF;IAEQ1D,mBAA4B,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC1C,WAAW,CAAC4C,MAAM,KAAK,CAAG,EAAA;YACjC,IAAI,CAAC/D,YAAY,GAAG,EAAE;YACtB,IAAI,CAACS,mBAAmB,GAAG,EAAE;AAC7B,YAAA;AACF;AACA,QAAA,IAAI,CAACT,YAAY,GAAG4Q,gBAAAA,CAAiB,IAAI,CAACzP,WAAW,EAAE,IAAI,CAACtB,OAAO,CAACiN,iBAAiB,CAAA;AACrF,QAAA,IAAI,CAACrM,mBAAmB,GAAGoQ,iBAAAA,CAAkB,IAAI,CAAC1P,WAAW,EAAE,IAAI,CAACtB,OAAO,CAACiN,iBAAiB,CAACgE,MAAM,CAAA;AACtG;IAEQtN,sBAAiC,GAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAACtC,cAAc,EAAE;YACxB,OAAO,CAAA;AACT;AACA,QAAA,MAAMiL,KAAQ,GAAA,IAAI,CAACjL,cAAc,CAACiI,aAAa,EAAA;QAC/C,OAAOpE,IAAAA,CAAKC,GAAG,CAAC,CAACD,KAAKgM,GAAG,CAAC5E,KAAMlG,CAAAA,CAAC,CAAIlB,GAAAA,IAAAA,CAAKgM,GAAG,CAAC5E,KAAAA,CAAMjG,CAAC,CAAA,GAAInB,IAAKgM,CAAAA,GAAG,CAAC5E,KAAMhG,CAAAA,CAAC,CAAA,IAAK,CAAG4H,EAAAA,OAAAA,CAAAA;AACnF;AAEQ1C,IAAAA,4BAAAA,CAA6B1H,SAA0B,EAA0B;QACvF,MAAMiK,MAAAA,GAASjK,SAAUS,CAAAA,IAAI,EAAEwJ,MAAAA;AAC/B,QAAA,IAAI,CAACA,MAAQ,EAAA;YACX,OAAOb,SAAAA;AACT;AACA,QAAA,MAAMpB,WAAW,IAAI3K,UAAAA,EAAAA;AACrB4M,QAAAA,MAAAA,CAAOoD,WAAW,CAACC,SAAS,CAAC,MAAMtF,QAAU,EAAA,IAAA,CAAA;QAC7C,OAAOA,QAAAA;AACT;IAEQhF,0BAAmC,GAAA;QACzC,IAAI,CAAC1E,yBAAyB,GAAG,EAAE;AACrC;IAEQ6G,uBAAwC,GAAA;AAC9C,QAAA,OAAO,IAAI,CAACtH,gBAAgB,CAACiC,GAAG,CAAC,CAACE,SAAWW,EAAAA,KAAAA,GAAAA;YAC3C,MAAM4M,aAAAA,GAAgBvN,UAAUiI,gBAAgB,EAAA;AAChD,YAAA,MAAMuF,UAAa,GAAA,IAAI,CAAClP,yBAAyB,CAACqC,KAAM,CAAA;AACxD,YAAA,IACE6M,UACAnQ,IAAAA,UAAAA,CAAWoQ,YAAY,CAACF,aAAeC,EAAAA,UAAAA,CAAAA,IAAepD,OACtD,IAAA,IAAI,CAACjO,QAAQ,CAACwE,KAAAA,CAAM,EACpB;gBACA,OAAO,IAAI,CAACxE,QAAQ,CAACwE,MAAM,CAAC+M,oBAAoB,CAAC3J,KAAK,EAAA;AACxD;YACA,OAAOwJ,aAAAA;AACT,SAAA,CAAA;AACF;IAEQzI,+BAAgC6I,CAAAA,KAAAA,GAAQ,KAAK,EAAQ;QAC3D,MAAMC,WAAAA,GAAc,IAAI,CAAC/N,sBAAsB,EAAA;QAC/C,MAAMgO,YAAAA,GAAezM,KAAKgM,GAAG,CAACQ,cAAc,IAAI,CAACpP,mBAAmB,CAAI4L,GAAAA,OAAAA;QACxE,IAAI,CAACuD,KAAS,IAAA,CAACE,YAAc,EAAA;AAC3B,YAAA;AACF;QACA,IAAI,CAACrP,mBAAmB,GAAGoP,WAAAA;QAC3B,MAAME,KAAAA,GAAQ,IAAI,CAACvP,gBAAgB,GAAG6L,UAAUwD,WAAc,GAAA,IAAI,CAACrP,gBAAgB,GAAG,CAAA;QACtF,IAAK,IAAIqF,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACzH,QAAQ,CAACiE,MAAM,EAAEwD,CAAK,EAAA,CAAA;YAC7C,IAAI,CAACzH,QAAQ,CAACyH,CAAAA,CAAE,CAAChB,YAAY,GAC3B,CAAC,IAAI,CAACnE,uBAAuB,CAACmF,CAAAA,CAAE,IAAI,IAAI,CAACzH,QAAQ,CAACyH,CAAE,CAAA,CAAChB,YAAW,IAAKkL,KAAAA;AACzE;QACA,IAAK,IAAIlK,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACvH,YAAY,CAAC+D,MAAM,EAAEwD,CAAK,EAAA,CAAA;YACjD,IAAI,CAACvH,YAAY,CAACuH,CAAAA,CAAE,CAACxD,MAAM,GAAG,CAAC,IAAI,CAAC1B,sBAAsB,CAACkF,CAAAA,CAAE,IAAI,IAAI,CAACvH,YAAY,CAACuH,CAAE,CAAA,CAACxD,MAAK,IAAK0N,KAAAA;AAClG;AACA,QAAA,IAAI,CAACjE,uBAAuB,EAAA;AAC5B,QAAA,IAAIgE,YAAc,EAAA;AAChB,YAAA,IAAI,CAAC9D,KAAK,EAAA;AACZ;AACF;IAEQF,uBAAgC,GAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC/K,YAAY,EAAE;AACtB,YAAA;AACF;QACA,IAAK,IAAI8E,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACnG,UAAU,CAAC2C,MAAM,EAAEwD,CAAK,EAAA,CAAA;AAC/C,YAAA,IAAI,CAACmK,mBAAmB,CAAC,IAAI,CAAC5R,QAAQ,CAACyH,CAAAA,CAAE,EAAE,IAAI,CAACnG,UAAU,CAACmG,CAAE,CAAA,CAAA;AAC/D;AACF;AAEQlB,IAAAA,aAAAA,CAAcjC,IAAc,EAAU;QAC5C,MAAMuN,SAAAA,GAAY,IAAI,CAACtQ,UAAU,CAACqP,GAAG,CAACtM,IAAAA,CAAKE,KAAK,CAAA,IAAK,EAAC;AACtD,QAAA,MAAMsN,QAAWxN,GAAAA,IAAAA,CAAKK,QAAQ,CAACV,MAAM,GAAG,CAAA,GAAIK,IAAKK,CAAAA,QAAQ,CAAC,CAAA,CAAE,CAACH,KAAK,GAAG,EAAC;;AAGtE,QAAA,MAAMyE,IAAI,IAAI,CAACvH,gBAAgB,CAAC4C,IAAAA,CAAKE,KAAK,CAAC;QAC3C,MAAMuN,YAAAA,GAAe9I,EAAE+I,gBAAgB,EAAA;QACvC,MAAMC,YAAAA,GAAehJ,EAAE6C,gBAAgB,EAAA;QACvC,MAAMoG,cAAAA,GAAiBjJ,EAAErD,aAAa,EAAA;;QAGtC,MAAMP,QAAAA,GAAWf,KAAKe,QAAQ,IAAI,IAAItE,OAAQ,CAAA,CAAA,EAAG,EAAI,EAAA,CAAA,CAAA;;AAGrD,QAAA,IAAI0F,YAAe,GAAA,CAAA;QACnB,IAAIoL,SAAAA,KAAc,EAAI,EAAA;AACpB,YAAA,MAAMM,OAAO,IAAI,CAACzQ,gBAAgB,CAACmQ,SAAAA,CAAU,CAACtM,gBAAgB,EAAA;YAC9D,MAAM6M,IAAAA,GAAO,IAAI,CAAC1Q,gBAAgB,CAAC4C,IAAKE,CAAAA,KAAK,CAAC,CAACe,gBAAgB,EAAA;YAC/DkB,YAAe1F,GAAAA,OAAAA,CAAQuG,QAAQ,CAAC6K,IAAMC,EAAAA,IAAAA,CAAAA;AACxC;AAEA,QAAA,MAAM5L,KAAgB,GAAA;YACpBsH,MAAQ+D,EAAAA,SAAAA;YACRQ,KAAOP,EAAAA,QAAAA;YACPQ,oBAAsB,EAAA,CAAA;AACtBC,YAAAA,iBAAAA,EAAmB,EAAC;YACpBC,kBAAoB,EAAA,CAAA;YACpBnE,MAAQ/J,EAAAA,IAAAA,CAAKmO,OAAO,GAAG,CAAI,GAAA,CAAA;YAC3BC,IAAM,EAAA,CAAA;YACNC,UAAY,EAAA,CAAA;YACZC,QAAU,EAAA,CAAA;YACVC,aAAe,EAAA,CAAA;YACfC,iBAAmB,EAAA,CAAA;AACnBrM,YAAAA,YAAAA;YACAsM,wBAA0B,EAAA,CAAA;YAC1BC,yBAA2B,EAAA,CAAA;YAC3BC,0BAA4B,EAAA,CAAA;YAC5BC,2BAA6B,EAAA,CAAA;YAC7BC,WAAa,EAAA,CAAA;YACbC,YAAc,EAAA,CAAA;YACdC,qBAAuB,EAAA,CAAA;YACvBC,sBAAwB,EAAA,CAAA;YACxBC,uBAAyB,EAAA,CAAA;YACzBC,wBAA0B,EAAA,CAAA;YAC1BC,cAAgB,EAAA,CAAA;YAChB/I,aAAe,EAAA,CAAA;YACfgJ,YAAc,EAAA,CAAA;YACdC,cAAgB,EAAA,CAAA;YAChBC,WAAa,EAAA,CAAA;AACbhH,YAAAA,OAAAA,EAAS7L,QAAQC,IAAI,EAAA;AACrBqE,YAAAA,QAAAA;YACAwO,iBAAmB3B,EAAAA,cAAAA;YACnBX,oBAAsBU,EAAAA,YAAAA;AACtB6B,YAAAA,iBAAAA,EAAmBC,kBAAkB9B,YAAc5M,EAAAA,QAAAA,CAAAA;YACnD2O,oBAAsBjC,EAAAA;AACxB,SAAA;QACA,IAAI,CAACH,mBAAmB,CAACpL,KAAOlC,EAAAA,IAAAA,CAAAA;QAChC,OAAOkC,KAAAA;AACT;IAEQoL,mBAAoBpL,CAAAA,KAAa,EAAElC,IAAc,EAAQ;AAC/D,QAAA,MAAM2P,IAAO,GAAA,IAAI,CAACxS,cAAc,GAAG,CAAA,GAAI6C,IAAKc,CAAAA,KAAK,GAAG,IAAI,CAAC3D,cAAc,GAAG,CAAA;AAC1E,QAAA,MAAMmC,CAAI,GAAA,IAAI,CAAC7D,OAAO,CAACoN,MAAM;AAC7B,QAAA,MAAM+G,cAAiBtQ,GAAAA,CAAAA,CAAEsQ,cAAc,CAACC,QAAQ,CAACF,IAAAA,CAAAA;AACjD,QAAA,MAAMG,eAAkBxQ,GAAAA,CAAAA,CAAEwQ,eAAe,CAACD,QAAQ,CAACF,IAAAA,CAAAA;AAEnDzN,QAAAA,KAAAA,CAAMkM,IAAI,GAAG9O,CAAAA,CAAEyQ,SAAS,CAACF,QAAQ,CAACF,IAAAA,CAAAA;AAClCzN,QAAAA,KAAAA,CAAMmM,UAAU,GAAG7F,OAAAA,CAAQlJ,EAAE+O,UAAU,CAACwB,QAAQ,CAACF,IAAAA,CAAAA,CAAAA;AACjDzN,QAAAA,KAAAA,CAAMoM,QAAQ,GAAG9F,OAAAA,CAAQlJ,EAAEgP,QAAQ,CAACuB,QAAQ,CAACF,IAAAA,CAAAA,CAAAA;AAC7CzN,QAAAA,KAAAA,CAAMqM,aAAa,GAAGjP,CAAAA,CAAE0E,QAAQ,CAAC6L,QAAQ,CAACF,IAAAA,CAAAA;AAC1CzN,QAAAA,KAAAA,CAAMsM,iBAAiB,GAAGlP,CAAAA,CAAEkP,iBAAiB,CAACqB,QAAQ,CAACF,IAAAA,CAAAA;QACvDzN,KAAMuM,CAAAA,wBAAwB,GAAGnP,CAAEmP,CAAAA,wBAAwB,CAACoB,QAAQ,CAACF,QAAQC,cAAiB,GAAA,GAAA;QAC9F1N,KAAMwM,CAAAA,yBAAyB,GAAGpP,CAAEoP,CAAAA,yBAAyB,CAACmB,QAAQ,CAACF,QAAQG,eAAkB,GAAA,GAAA;QACjG5N,KAAMyM,CAAAA,0BAA0B,GAAGrP,CAAEqP,CAAAA,0BAA0B,CAACkB,QAAQ,CAACF,QAAQC,cAAiB,GAAA,GAAA;QAClG1N,KAAM0M,CAAAA,2BAA2B,GAAGtP,CAAEsP,CAAAA,2BAA2B,CAACiB,QAAQ,CAACF,QAAQG,eAAkB,GAAA,GAAA;QACrG5N,KAAM2M,CAAAA,WAAW,GAAGvP,CAAEuP,CAAAA,WAAW,CAACgB,QAAQ,CAACF,QAAQC,cAAiB,GAAA,GAAA;QACpE1N,KAAM4M,CAAAA,YAAY,GAAGxP,CAAEwP,CAAAA,YAAY,CAACe,QAAQ,CAACF,QAAQG,eAAkB,GAAA,GAAA;QACvE5N,KAAM6M,CAAAA,qBAAqB,GAAGzP,CAAEyP,CAAAA,qBAAqB,CAACc,QAAQ,CAACF,QAAQC,cAAiB,GAAA,GAAA;QACxF1N,KAAM8M,CAAAA,sBAAsB,GAAG1P,CAAE0P,CAAAA,sBAAsB,CAACa,QAAQ,CAACF,QAAQG,eAAkB,GAAA,GAAA;QAC3F5N,KAAM+M,CAAAA,uBAAuB,GAAG3P,CAAE2P,CAAAA,uBAAuB,CAACY,QAAQ,CAACF,QAAQC,cAAiB,GAAA,GAAA;QAC5F1N,KAAMgN,CAAAA,wBAAwB,GAAG5P,CAAE4P,CAAAA,wBAAwB,CAACW,QAAQ,CAACF,QAAQG,eAAkB,GAAA,GAAA;AAC/F5N,QAAAA,KAAAA,CAAMiN,cAAc,GAAG7P,CAAAA,CAAE6P,cAAc,CAACU,QAAQ,CAACF,IAAQA,CAAAA,GAAAA,IAAAA;AACzDzN,QAAAA,KAAAA,CAAMkE,aAAa,GAAG9G,CAAAA,CAAE8G,aAAa,CAACyJ,QAAQ,CAACF,IAAAA,CAAAA;AAC/CzN,QAAAA,KAAAA,CAAMkN,YAAY,GAAG9P,CAAAA,CAAE8P,YAAY,CAACS,QAAQ,CAACF,IAAAA,CAAAA;QAC7C,MAAMxC,WAAAA,GAAc,IAAI,CAACpP,mBAAmB;QAC5CmE,KAAMoN,CAAAA,WAAW,GAAG3O,IAAAA,CAAKC,GAAG,CAAC,CAAGtB,EAAAA,CAAAA,CAAEgQ,WAAW,CAACO,QAAQ,CAACF,IAAQxC,CAAAA,GAAAA,WAAAA,CAAAA;AAC/DjL,QAAAA,KAAAA,CAAMoG,OAAO,GAAG7L,OAAAA,CAAQsL,KAAK,CAAC,IAAI,CAACtM,OAAO,CAAC6M,OAAO,EAAEhJ,CAAE0Q,CAAAA,YAAY,CAACH,QAAQ,CAACF,IAAQxC,CAAAA,GAAAA,WAAAA,CAAAA;AACtF;IAEQ/K,cAA0B,GAAA;QAChC,OAAO;AACLsB,YAAAA,mBAAAA,EAAqBjH,QAAQC,IAAI,EAAA;AACjC8G,YAAAA,wBAAAA,EAA0B/G,QAAQC,IAAI,EAAA;AACtC+G,YAAAA,yBAAAA,EAA2BhH,QAAQC,IAAI,EAAA;AACvC2G,YAAAA,eAAAA,EAAiB5G,QAAQC,IAAI,EAAA;AAC7B6G,YAAAA,gBAAAA,EAAkB9G,QAAQC,IAAI,EAAA;AAC9BiH,YAAAA,iBAAAA,EAAmBlH,QAAQmH,MAAM,EAAA;AACjCC,YAAAA,iBAAAA,EAAmBpH,QAAQmH,MAAM,EAAA;AACjCE,YAAAA,YAAAA,EAAc,EAAC;YACfC,eAAiB,EAAA,CAAA;YACjBC,QAAU,EAAA;AACZ,SAAA;AACF;AAEQxB,IAAAA,iBAAAA,CAAkBjD,SAA0B,EAAc;QAChE,MAAM6D,GAAAA,GAAM7D,UAAU0B,gBAAgB,EAAA;QACtC,MAAM2I,GAAAA,GAAMrK,UAAU6B,gBAAgB,EAAA;QACtC,MAAM2G,KAAAA,GAAQxI,UAAUwF,aAAa,EAAA;QACrC,OAAO;AACL1B,YAAAA,eAAAA,EAAiBD,IAAIE,KAAK,EAAA;AAC1B2M,YAAAA,gBAAAA,EAAkBxT,QAAQC,IAAI,EAAA;AAC9BwT,YAAAA,YAAAA,EAAc9M,IAAIE,KAAK,EAAA;YACvB6M,YAAc,EAAA,CAAA;AACd3M,YAAAA,wBAAAA,EAA0BJ,IAAIE,KAAK,EAAA;AACnCG,YAAAA,yBAAAA,EAA2BL,IAAIE,KAAK,EAAA;AACpCuB,YAAAA,yBAAAA,EAA2B+E,IAAItG,KAAK,EAAA;AACpCsB,YAAAA,0BAAAA,EAA4BgF,IAAItG,KAAK,EAAA;AACrC0B,YAAAA,YAAAA,EAAcC,UAAUpI,QAAQ,EAAA;AAChCiI,YAAAA,UAAAA,EAAYiD,MAAMzE,KAAK,EAAA;AACvB8M,YAAAA,cAAAA,EAAgB3T,QAAQC,IAAI,EAAA;AAC5B2T,YAAAA,cAAAA,EAAgB5T,QAAQC,IAAI,EAAA;YAC5B4T,MAAQ,EAAA,CAAA;YACRC,MAAQ,EAAA,CAAA;YACR7N,OAAS,EAAA;AACX,SAAA;AACF;AAEQ9D,IAAAA,sBAAAA,CAAuBF,MAAwB,EAAoB;AACzE,QAAA,MAAMmK,MAAwB,GAAA;AAC5BkH,YAAAA,SAAAA,EAAW,IAAI,CAAC9G,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACkH,SAAS,CAAA;AAChEC,YAAAA,YAAAA,EAAc,IAAI,CAAC/G,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACmH,YAAY,CAAA;AACtEb,YAAAA,cAAAA,EAAgB,IAAI,CAAClG,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACsG,cAAc,CAAA;AAC1Ed,YAAAA,UAAAA,EAAY,IAAI,CAACpF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACwF,UAAU,CAAA;AAClEC,YAAAA,QAAAA,EAAU,IAAI,CAACrF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACyF,QAAQ,CAAA;AAC9DtK,YAAAA,QAAAA,EAAU,IAAI,CAACiF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC7E,QAAQ,CAAA;AAC9DsL,YAAAA,WAAAA,EAAa,IAAI,CAACrG,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACyG,WAAW,CAAA;AACpEd,YAAAA,iBAAAA,EAAmB,IAAI,CAACvF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC2F,iBAAiB,CAAA;AAChFoB,YAAAA,cAAAA,EAAgB,IAAI,CAAC3G,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC+G,cAAc,CAAA;AAC1EE,YAAAA,eAAAA,EAAiB,IAAI,CAAC7G,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACiH,eAAe,CAAA;AAC5ErB,YAAAA,wBAAAA,EAA0B,IAAI,CAACxF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC4F,wBAAwB,CAAA;AAC9FC,YAAAA,yBAAAA,EAA2B,IAAI,CAACzF,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC6F,yBAAyB,CAAA;AAChGC,YAAAA,0BAAAA,EAA4B,IAAI,CAAC1F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC8F,0BAA0B,CAAA;AAClGC,YAAAA,2BAAAA,EAA6B,IAAI,CAAC3F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAAC+F,2BAA2B,CAAA;AACpGC,YAAAA,WAAAA,EAAa,IAAI,CAAC5F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACgG,WAAW,CAAA;AACpEC,YAAAA,YAAAA,EAAc,IAAI,CAAC7F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACiG,YAAY,CAAA;AACtEC,YAAAA,qBAAAA,EAAuB,IAAI,CAAC9F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACkG,qBAAqB,CAAA;AACxFC,YAAAA,sBAAAA,EAAwB,IAAI,CAAC/F,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACmG,sBAAsB,CAAA;AAC1FC,YAAAA,uBAAAA,EAAyB,IAAI,CAAChG,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACoG,uBAAuB,CAAA;AAC5FC,YAAAA,wBAAAA,EAA0B,IAAI,CAACjG,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACqG,wBAAwB,CAAA;AAC9F9I,YAAAA,aAAAA,EAAe,IAAI,CAAC6C,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACzC,aAAa,CAAA;AACxEgJ,YAAAA,YAAAA,EAAc,IAAI,CAACnG,wBAAwB,CAACvK,MAAOmK,CAAAA,MAAM,CAACuG,YAAY;AACxE,SAAA;QACA,OAAO;YACL9G,OAAS5J,EAAAA,MAAAA,CAAO4J,OAAO,CAAChF,KAAK,EAAA;YAC7BuC,SAAWnH,EAAAA,MAAAA,CAAOmH,SAAS,CAACvC,KAAK,EAAA;AACjC0C,YAAAA,UAAAA,EAAYtH,OAAOsH,UAAU;AAC7BT,YAAAA,QAAAA,EAAU7G,OAAO6G,QAAQ;AACzBjB,YAAAA,cAAAA,EAAgB5F,OAAO4F,cAAc;AACrCsB,YAAAA,eAAAA,EAAiBlH,OAAOkH,eAAe;AACvCK,YAAAA,qBAAAA,EAAuBvH,OAAOuH,qBAAqB;AACnD9B,YAAAA,UAAAA,EAAYzF,OAAOyF,UAAU;AAC7BsE,YAAAA,sBAAAA,EAAwB/J,OAAO+J,sBAAsB;AACrDvC,YAAAA,UAAAA,EAAYxH,OAAOwH,UAAU;AAC7BC,YAAAA,aAAAA,EAAezH,OAAOyH,aAAa;AACnCC,YAAAA,aAAAA,EAAe1H,OAAO0H,aAAa;AACnCN,YAAAA,sBAAAA,EAAwBpH,OAAOoH,sBAAsB;AACrDS,YAAAA,gBAAAA,EAAkB7H,OAAO6H,gBAAgB;AACzCa,YAAAA,aAAAA,EAAe1I,OAAO0I,aAAa;YACnCT,gBAAkB,EAAA;gBAChBC,UAAYlI,EAAAA,MAAAA,CAAOiI,gBAAgB,CAACC,UAAU;gBAC9CgC,aAAelK,EAAAA,MAAAA,CAAOiI,gBAAgB,CAACiC;AACzC,aAAA;AACAC,YAAAA,MAAAA;YACAH,iBAAmB,EAAA;gBACjB8H,kBAAoB9R,EAAAA,MAAAA,CAAOgK,iBAAiB,CAAC8H,kBAAkB;gBAC/DC,oBAAsB/R,EAAAA,MAAAA,CAAOgK,iBAAiB,CAAC+H,oBAAoB;gBACnEC,KAAOhS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACgI,KAAK;gBACrCC,eAAiBjS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACiI,eAAe;gBACzDC,iBAAmBlS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACkI,iBAAiB;gBAC7DlE,MAAQhO,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACgE,MAAM;gBACvCmE,yBAA2BnS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACmI,yBAAyB;gBAC7EC,2BAA6BpS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACoI,2BAA2B;gBACjFC,YAAcrS,EAAAA,MAAAA,CAAOgK,iBAAiB,CAACqI,YAAY;gBACnDjL,sBAAwBpH,EAAAA,MAAAA,CAAOgK,iBAAiB,CAAC5C;AACnD;AACF,SAAA;AACF;AAEQmD,IAAAA,wBAAAA,CAAyBD,KAAyB,EAAsB;AAC9E,QAAA,OAAO,IAAIgI,kBAAAA,CACThI,KAAMiI,CAAAA,IAAI,EACV,IAAIC,YAAalI,CAAAA,KAAAA,CAAMmI,MAAM,CAAA,EAC7B,IAAID,YAAAA,CAAalI,MAAM9B,OAAO,CAAA,CAAA;AAElC;AAEQvI,IAAAA,yBAAAA,CAA0BD,MAAwB,EAAoB;QAC5EA,MAAOsH,CAAAA,UAAU,GAAGrF,IAAAA,CAAKC,GAAG,CAAC,GAAGD,IAAK4H,CAAAA,KAAK,CAAC7J,MAAAA,CAAOsH,UAAU,CAAA,CAAA;QAC5DtH,MAAO6G,CAAAA,QAAQ,GAAG5E,IAAAA,CAAKC,GAAG,CAAC,GAAGD,IAAK4H,CAAAA,KAAK,CAAC7J,MAAAA,CAAO6G,QAAQ,CAAA,CAAA;AACxD7G,QAAAA,MAAAA,CAAOuH,qBAAqB,GAAGtF,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAGlC,OAAOuH,qBAAqB,CAAA;AACvEvH,QAAAA,MAAAA,CAAOyF,UAAU,GAAGqE,OAAQ9J,CAAAA,MAAAA,CAAOyF,UAAU,CAAA;QAC7C,OAAOzF,MAAAA;AACT;AACF;;;;"}