@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual_texture.js","sources":["../../../src/render/virtualtexture/virtual_texture.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\n\r\n/**\r\n * One level of the virtual space: an independent grid of pages\r\n * @public\r\n */\r\nexport interface VirtualTextureLevel {\r\n pagesX: number;\r\n pagesY: number;\r\n}\r\n\r\n/**\r\n * Levels of a mip chained virtual texture, from the finest level down to a single page\r\n * @param virtualSize - Virtual texture size in texels, a power of two\r\n * @param pageSize - Page size in texels, a power of two not larger than virtualSize\r\n * @public\r\n */\r\nexport function virtualMipChain(virtualSize: number, pageSize: number): VirtualTextureLevel[];\r\n/**\r\n * Levels of a mip chained virtual texture with a different width and height. Each level halves\r\n * both axes, an axis stopping at one page, down to a single page.\r\n * @param virtualWidth - Virtual texture width in texels, a power of two\r\n * @param virtualHeight - Virtual texture height in texels, a power of two\r\n * @param pageSize - Page size in texels, a power of two not larger than either size\r\n * @public\r\n */\r\nexport function virtualMipChain(\r\n virtualWidth: number,\r\n virtualHeight: number,\r\n pageSize: number\r\n): VirtualTextureLevel[];\r\nexport function virtualMipChain(a: number, b: number, c?: number): VirtualTextureLevel[] {\r\n const [width, height, pageSize] = c === undefined ? [a, a, b] : [a, b, c];\r\n if (\r\n !isPowerOf2(width) ||\r\n !isPowerOf2(height) ||\r\n !isPowerOf2(pageSize) ||\r\n pageSize > Math.min(width, height)\r\n ) {\r\n throw new Error('virtualMipChain(): sizes must be powers of two with pageSize <= virtual size');\r\n }\r\n const levels: VirtualTextureLevel[] = [];\r\n for (let x = width / pageSize, y = height / pageSize; ; x = Math.max(1, x >> 1), y = Math.max(1, y >> 1)) {\r\n levels.push({ pagesX: x, pagesY: y });\r\n if (x === 1 && y === 1) {\r\n break;\r\n }\r\n }\r\n return levels;\r\n}\r\n\r\n/**\r\n * A plane of the physical pool, stored in an atlas texture\r\n * @public\r\n */\r\nexport interface VirtualTexturePlane {\r\n name: string;\r\n /** Must be usable as a write-only storage texture */\r\n format: TextureFormat;\r\n}\r\n\r\n/**\r\n * Options of a {@link VirtualTexture}\r\n * @public\r\n */\r\nexport interface VirtualTextureOptions {\r\n /** Levels of the virtual space, finest first, see {@link virtualMipChain} */\r\n levels: VirtualTextureLevel[];\r\n /** Page content size in texels, default 128 */\r\n pageSize?: number;\r\n /** Border texels on each side of a page, default 4 */\r\n border?: number;\r\n /** Physical atlas size in texels, default 4096 */\r\n atlasSize?: number;\r\n planes: VirtualTexturePlane[];\r\n /** Maximum page loads considered per update, default 16384 */\r\n loadCapacity?: number;\r\n /** Maximum pages filled per update (new allocations plus refills), default 16 */\r\n allocBudget?: number;\r\n /** Frames an unrequested page keeps its mapping, default 1000 */\r\n maxPageAge?: number;\r\n /**\r\n * Frames a page requested lately stays in use even if not requested this update, so it is not\r\n * handed to a new request. Default 15, zero to disable.\r\n */\r\n freeThreshold?: number;\r\n /**\r\n * Raise the requested mip level while the pool is oversubscribed, so demand settles at what\r\n * the pool can hold instead of pages being evicted and requested again forever.\r\n */\r\n residencyMipBias?: boolean;\r\n /**\r\n * Pool residency above which the mip bias rises, default 0.95\r\n */\r\n residencyUpperBound?: number;\r\n /**\r\n * Pool residency below which the mip bias falls, Default 0.8.\r\n */\r\n residencyLowerBound?: number;\r\n}\r\n\r\n/**\r\n * Consistency of the page management, see {@link VirtualTexture.validate}. Every count must be 0.\r\n * @public\r\n */\r\nexport interface VirtualTextureValidation {\r\n /** Physical pages missing from the LRU order */\r\n lostPages: number;\r\n /** Physical pages listed more than once in the LRU order */\r\n duplicatePages: number;\r\n /** Resident page table entries whose physical page belongs to another page */\r\n wrongOwner: number;\r\n /** Physical pages mapped by more than one resident entry */\r\n sharedPages: number;\r\n /** Pages of the pinned levels not resident */\r\n pinnedMissing: number;\r\n /** Page table entries with no mapping at all, not even an ancestor */\r\n unmapped: number;\r\n}\r\n\r\n/**\r\n * Counters read back from the GPU for debugging, a few frames late\r\n * @public\r\n */\r\nexport interface VirtualTextureStats {\r\n /** Pages already resident and requested again */\r\n requested: number;\r\n /** New pages mapped */\r\n allocated: number;\r\n /** Pages whose mapping was taken over by a new one */\r\n evicted: number;\r\n /** Resident pages refilled after an invalidation */\r\n refilled: number;\r\n /** Pages dropped by age */\r\n expired: number;\r\n /** Requests of unmapped pages */\r\n loads: number;\r\n /** Loads beyond loadCapacity */\r\n dropped: number;\r\n /** Physical pages still available after allocation */\r\n available: number;\r\n /** Size of the next LRU list, must equal the physical page count */\r\n lruSize: number;\r\n /** Residency mip bias in effect, see {@link VirtualTextureOptions.residencyMipBias} */\r\n mipBias: number;\r\n}\r\n\r\nconst INDEX_NONE = 0xffffffff;\r\nconst MAX_LEVELS = 16;\r\nconst MAX_RECTS = 8;\r\nconst LIST_LRU = 0;\r\nconst LIST_AVAILABLE = 1;\r\nconst LIST_EMPTY = 2;\r\nconst LIST_REQUESTED = 3;\r\n// Page table encoding\r\nconst PT_PHYS_MASK = 0xffff;\r\nconst PT_LOD_SHIFT = 20;\r\nconst PT_LOD_MASK = 0x3f;\r\nconst PT_THIS_LOD = 0x40000000;\r\nconst PT_ANY_LOD = 0x80000000;\r\n/** Resident at this level; JS bitwise results are signed, hence the unsigned shift */\r\nconst PT_MAPPED = (PT_ANY_LOD | PT_THIS_LOD) >>> 0;\r\n// Physical page metadata flags\r\nconst META_ALLOCATED = 1;\r\nconst META_DIRTY = 2;\r\nconst META_PINNED = 4;\r\n// Counter slots\r\nconst C_LOAD = 0;\r\nconst C_FILL = 1;\r\nconst C_CUT = 2;\r\nconst C_REMAIN = 3;\r\nconst C_TIE = 4;\r\nconst C_HIST = 8;\r\nconst C_STAT_REQUESTED = 40;\r\nconst C_STAT_ALLOCATED = 41;\r\nconst C_STAT_EVICTED = 42;\r\nconst C_STAT_REFILLED = 43;\r\nconst C_STAT_DROPPED = 44;\r\nconst C_STAT_EXPIRED = 45;\r\nconst NUM_COUNTERS = 64;\r\n// Residency mip bias\r\nconst RESIDENCY_ADJUSTMENT_RATE = 0.2;\r\nconst RESIDENCY_MAX_MIP_BIAS = 4;\r\nconst RESIDENCY_LOCKED_UPPER_BOUND = 0.65;\r\nconst HIST_PINNED_BUCKET = 31;\r\nconst GROUP = 64;\r\nconst PACK_GROUP = 256;\r\nconst FILL_GROUP = 8;\r\n\r\nfunction isPowerOf2(n: number) {\r\n return n > 0 && (n & (n - 1)) === 0;\r\n}\r\n\r\ntype Resources = Record<string, GPUDataBuffer | Texture2D>;\r\n\r\n/**\r\n * GPU driven sparse virtual texture.\r\n *\r\n * Per frame: shaders mark pages with {@link VirtualTexture.request}, then {@link VirtualTexture.update}\r\n * maps pages, {@link VirtualTexture.fill} lets the owner write the new pages, and shaders read\r\n * through {@link VirtualTexture.resolve}. All of it runs on the GPU in the same frame.\r\n *\r\n * @public\r\n */\r\nexport class VirtualTexture extends Disposable {\r\n private readonly _device: AbstractDevice;\r\n private readonly _levels: VirtualTextureLevel[];\r\n private readonly _levelOffsets: number[];\r\n private readonly _totalPages: number;\r\n private readonly _pageSize: number;\r\n private readonly _border: number;\r\n private readonly _slotSize: number;\r\n private readonly _atlasSize: number;\r\n private readonly _slotsPerRow: number;\r\n private readonly _physicalPages: number;\r\n private readonly _loadCapacity: number;\r\n private readonly _allocBudget: number;\r\n private readonly _maxPageAge: number;\r\n private readonly _freeThreshold: number;\r\n private readonly _pinnedFromLevel: number;\r\n private readonly _mipChain: boolean;\r\n private readonly _planes: VirtualTexturePlane[];\r\n private readonly _planeTextures: Texture2D[];\r\n private readonly _params: GPUDataBuffer;\r\n private readonly _paramData: Uint32Array<ArrayBuffer>;\r\n private readonly _rects: GPUDataBuffer;\r\n private readonly _rectData: Float32Array<ArrayBuffer>;\r\n private readonly _pendingRects: number[][];\r\n private readonly _pageTable: GPUDataBuffer;\r\n private readonly _pageRequest: GPUDataBuffer;\r\n private readonly _meta: GPUDataBuffer;\r\n private readonly _lists: [GPUDataBuffer, GPUDataBuffer];\r\n private readonly _listCounts: GPUDataBuffer;\r\n private readonly _loadList: GPUDataBuffer;\r\n private readonly _fillList: GPUDataBuffer;\r\n private readonly _counters: GPUDataBuffer;\r\n private readonly _dispatchArgs: GPUDataBuffer;\r\n /** Persistent across updates: (mip bias, upper bound or -1 when disabled, lower bound, locked page residency) */\r\n private readonly _state: GPUDataBuffer;\r\n /**\r\n * Readback copy of the counters, the list counts and the state, in that order. Kept rather\r\n * than created per read: a single read is in flight at a time (see _statsPending).\r\n */\r\n private readonly _statsReadback: GPUDataBuffer;\r\n private readonly _programs: Map<string, GPUProgram>;\r\n private readonly _bindGroups: Map<string, BindGroup>;\r\n private _parity: number;\r\n private _stats: Nullable<VirtualTextureStats>;\r\n private _statsPending: boolean;\r\n private _updateCount: number;\r\n private _debugTexture: Nullable<Texture2D>;\r\n constructor(device: AbstractDevice, options: VirtualTextureOptions) {\r\n super();\r\n if (device.type !== 'webgpu' || !device.getDeviceCaps().miscCaps.supportDispatchIndirect) {\r\n throw new Error('VirtualTexture requires WebGPU');\r\n }\r\n this._device = device;\r\n this._levels = options.levels.map((l) => ({ pagesX: l.pagesX, pagesY: l.pagesY }));\r\n if (this._levels.length === 0 || this._levels.length > MAX_LEVELS) {\r\n throw new Error(`VirtualTexture: 1 to ${MAX_LEVELS} levels are supported`);\r\n }\r\n this._levelOffsets = [];\r\n let total = 0;\r\n for (const l of this._levels) {\r\n this._levelOffsets.push(total);\r\n total += l.pagesX * l.pagesY;\r\n }\r\n this._totalPages = total;\r\n this._mipChain = this._levels.every(\r\n (l, i) =>\r\n l.pagesX === Math.max(1, this._levels[0].pagesX >> i) &&\r\n l.pagesY === Math.max(1, this._levels[0].pagesY >> i)\r\n );\r\n this._pageSize = options.pageSize ?? 128;\r\n this._border = options.border ?? 4;\r\n this._slotSize = this._pageSize + 2 * this._border;\r\n this._atlasSize = options.atlasSize ?? 4096;\r\n this._slotsPerRow = Math.floor(this._atlasSize / this._slotSize);\r\n this._physicalPages = this._slotsPerRow * this._slotsPerRow;\r\n if (this._physicalPages < 1 || this._physicalPages > PT_PHYS_MASK) {\r\n throw new Error('VirtualTexture: invalid physical page count');\r\n }\r\n this._loadCapacity = options.loadCapacity ?? 16384;\r\n this._allocBudget = Math.max(1, Math.min(options.allocBudget ?? 16, this._physicalPages));\r\n this._maxPageAge = options.maxPageAge ?? 1000;\r\n this._freeThreshold = Math.max(0, options.freeThreshold ?? 15);\r\n let pinnedFrom = this._levels.length - 1;\r\n let pinnedPages = this.levelPages(pinnedFrom);\r\n while (pinnedFrom > 0 && pinnedPages + this.levelPages(pinnedFrom - 1) <= this._physicalPages / 8) {\r\n pinnedFrom--;\r\n pinnedPages += this.levelPages(pinnedFrom);\r\n }\r\n if (pinnedPages > this._physicalPages) {\r\n throw new Error('VirtualTexture: physical pool too small for the coarsest level');\r\n }\r\n this._pinnedFromLevel = pinnedFrom;\r\n this._planes = options.planes.slice();\r\n this._planeTextures = this._planes.map((plane) => {\r\n const tex = device.createTexture2D(plane.format, this._atlasSize, this._atlasSize, {\r\n writable: true,\r\n mipmapping: false\r\n })!;\r\n tex.name = `VirtualTexture.${plane.name}`;\r\n return tex;\r\n });\r\n const storage = (bytes: number) =>\r\n device.createBuffer(Math.max(16, bytes), { usage: 'uniform', storage: true })!;\r\n this._params = device.createBuffer((4 + MAX_LEVELS) * 16, { usage: 'uniform' })!;\r\n this._paramData = new Uint32Array((4 + MAX_LEVELS) * 4);\r\n this._rects = device.createBuffer(MAX_RECTS * 16, { usage: 'uniform' })!;\r\n this._rectData = new Float32Array(MAX_RECTS * 4);\r\n this._pendingRects = [];\r\n this._pageTable = storage(total * 4);\r\n this._pageRequest = storage(total * 4);\r\n this._meta = storage(this._physicalPages * 16);\r\n this._lists = [storage(this._physicalPages * 16), storage(this._physicalPages * 16)];\r\n this._listCounts = storage(16);\r\n this._loadList = storage(this._loadCapacity * 12);\r\n this._fillList = storage(this._allocBudget * 8);\r\n this._counters = storage(NUM_COUNTERS * 4);\r\n this._dispatchArgs = device.createBuffer(6 * 4, { usage: 'indirect', storage: true })!;\r\n this._state = storage(16);\r\n this._statsReadback = device.createBuffer(NUM_COUNTERS * 4 + 32, { usage: 'read' })!;\r\n const upper = options.residencyUpperBound ?? 0.95;\r\n const lower = Math.min(upper, options.residencyLowerBound ?? 0.8);\r\n // x: mip bias, y: upper bound (negative when disabled), z: lower bound, w: locked residency\r\n this._state.bufferSubData(\r\n 0,\r\n new Float32Array([0, options.residencyMipBias ? upper : -1, lower, pinnedPages / this._physicalPages])\r\n );\r\n // The first update reads the previous REQUESTED list as its LRU order: every page, in order\r\n const initialLists = new Uint32Array(this._physicalPages * 4);\r\n for (let i = 0; i < this._physicalPages; i++) {\r\n initialLists[LIST_REQUESTED * this._physicalPages + i] = i;\r\n }\r\n // update() flips the parity before running, so the first one writes _lists[1] and reads its\r\n // previous lists from _lists[0]\r\n this._parity = 0;\r\n this._lists[this._parity].bufferSubData(0, initialLists);\r\n this._programs = new Map();\r\n this._bindGroups = new Map();\r\n this._stats = null;\r\n this._statsPending = false;\r\n this._updateCount = 0;\r\n this._debugTexture = null;\r\n this.writeParams(0);\r\n }\r\n /** Levels of the virtual space */\r\n get levels(): readonly VirtualTextureLevel[] {\r\n return this._levels;\r\n }\r\n get pageSize() {\r\n return this._pageSize;\r\n }\r\n get border() {\r\n return this._border;\r\n }\r\n get atlasSize() {\r\n return this._atlasSize;\r\n }\r\n get physicalPageCount() {\r\n return this._physicalPages;\r\n }\r\n /** First level kept resident at all times */\r\n get pinnedFromLevel() {\r\n return this._pinnedFromLevel;\r\n }\r\n get allocBudget() {\r\n return this._allocBudget;\r\n }\r\n /**\r\n * Last counters read back from the GPU, null until the first read back completes. The\r\n * residency mip bias there is the value the shaders add in {@link VirtualTexture.computeLevel}.\r\n */\r\n get stats() {\r\n return this._stats;\r\n }\r\n getPlaneTexture(name: string) {\r\n const index = this._planes.findIndex((p) => p.name === name);\r\n return index >= 0 ? this._planeTextures[index] : null;\r\n }\r\n /** Marks every resident page for refilling */\r\n invalidate() {\r\n this.invalidateRegion(0, 0, 1, 1);\r\n }\r\n /**\r\n * Marks the resident pages overlapping a region, in normalized virtual coordinates, for\r\n * refilling. Pages in use (requested within freeThreshold, or pinned) keep their mapping and\r\n * old content until refilled, ahead of new allocations; cached pages no longer in use are\r\n * unmapped. A page counts with its border, so pages next to the region are refilled too.\r\n */\r\n invalidateRegion(u0: number, v0: number, u1: number, v1: number) {\r\n this._pendingRects.push([u0, v0, u1, v1]);\r\n }\r\n /**\r\n * Maps the pages requested since the last update. Runs compute passes, so it must be called\r\n * outside of render passes. `stamp` must increase with every frame (not every camera).\r\n */\r\n update(stamp: number) {\r\n const device = this._device;\r\n this._parity ^= 1;\r\n this.writeParams(stamp);\r\n const N = this._physicalPages;\r\n const groups = (n: number) => Math.max(1, Math.ceil(n / GROUP));\r\n this.dispatch('clear', groups(Math.max(this._totalPages, NUM_COUNTERS)));\r\n while (this._pendingRects.length > 0) {\r\n const rects = this._pendingRects.splice(0, MAX_RECTS);\r\n this._rectData.fill(0);\r\n rects.forEach((r, i) => this._rectData.set(r, i * 4));\r\n this._rects.bufferSubData(0, this._rectData);\r\n this._paramData[13] = rects.length;\r\n this._params.bufferSubData(0, this._paramData);\r\n this.dispatch('invalidate', groups(N));\r\n }\r\n this.dispatch(`updatePhysical${this._parity}`, groups(N));\r\n this.dispatch(`pack${this._parity}`, 1);\r\n this.dispatch(`appendEmpty${this._parity}`, groups(N));\r\n this.dispatch(`appendEmptyCount${this._parity}`, 1);\r\n this.dispatch('gather', groups(this._totalPages));\r\n this.dispatch('select', 1);\r\n const allocate = this.getProgram(`allocate${this._parity}`);\r\n device.setProgram(allocate);\r\n device.setBindGroup(0, this.getBindGroup(`allocate${this._parity}`));\r\n device.computeIndirect(this._dispatchArgs, 0);\r\n this.dispatch('finalize', 1);\r\n this.dispatch(`appendAvailable${this._parity}`, groups(N));\r\n this.dispatch(`appendAvailableCount${this._parity}`, 1);\r\n if (this._mipChain) {\r\n const l0 = this._levels[0];\r\n this.dispatch('propagate', Math.ceil(l0.pagesX / FILL_GROUP), Math.ceil(l0.pagesY / FILL_GROUP));\r\n }\r\n this._updateCount++;\r\n if (!this._statsPending && this._updateCount % 30 === 1) {\r\n this.readStats();\r\n }\r\n }\r\n /**\r\n * Builds a compute program filling the pages mapped by the last update. Each workgroup fills\r\n * one page, border included, calling `fillTexel` once per texel. The program belongs to the\r\n * caller, who disposes it.\r\n *\r\n * @param label - Program label\r\n * @param setup - Declares the owner's own bindings (group 0)\r\n * @param fillTexel - Returns one value per plane for a texel. `texel` is the texel centre in\r\n * the level's texel space; border texels lie outside the page and must be computed the same\r\n * way, which is what keeps filtering continuous across pages.\r\n */\r\n createFillProgram(\r\n label: string,\r\n setup: Nullable<(scope: PBGlobalScope) => void>,\r\n fillTexel: (scope: PBInsideFunctionScope, level: PBShaderExp, texel: PBShaderExp) => PBShaderExp[]\r\n ) {\r\n const that = this;\r\n const S = this._slotSize;\r\n const iterations = Math.ceil(S / FILL_GROUP);\r\n return this._device.buildComputeProgram({\r\n label,\r\n workgroupSize: [FILL_GROUP, FILL_GROUP, 1],\r\n compute(pb) {\r\n that.declareParams(pb, this);\r\n this.zVT_fillList = pb.uint[0]().storageBufferReadonly(0);\r\n that._planes.forEach((plane, i) => {\r\n this[`zVT_plane${i}`] = (pb.texStorage2D as any)[plane.format]().storage(0);\r\n });\r\n setup?.(this);\r\n that.defineLevelOf(pb);\r\n pb.main(function () {\r\n this.$l.entry = this.$builtins.workGroupId.x;\r\n this.$l.pageId = this.zVT_fillList.at(pb.mul(this.entry, 2));\r\n this.$if(pb.equal(this.pageId, INDEX_NONE), function () {\r\n this.$return();\r\n });\r\n this.$l.phys = this.zVT_fillList.at(pb.add(pb.mul(this.entry, 2), 1));\r\n this.$l.level = this.zVT_levelOf(this.pageId);\r\n this.$l.info = this.zVT_params.at(pb.add(this.level, 4));\r\n this.$l.local = pb.sub(this.pageId, this.info.x);\r\n this.$l.page = pb.uvec2(\r\n pb.sub(this.local, pb.mul(pb.div(this.local, this.info.y), this.info.y)),\r\n pb.div(this.local, this.info.y)\r\n );\r\n this.$l.origin = pb.mul(\r\n pb.uvec2(\r\n pb.sub(this.phys, pb.mul(pb.div(this.phys, that._slotsPerRow), that._slotsPerRow)),\r\n pb.div(this.phys, that._slotsPerRow)\r\n ),\r\n S\r\n );\r\n this.$for(pb.uint('iy'), 0, iterations, function () {\r\n this.$l.ty = pb.add(pb.mul(this.iy, FILL_GROUP), this.$builtins.localInvocationId.y);\r\n this.$for(pb.uint('ix'), 0, iterations, function () {\r\n this.$l.tx = pb.add(pb.mul(this.ix, FILL_GROUP), this.$builtins.localInvocationId.x);\r\n this.$if(pb.and(pb.lessThan(this.tx, S), pb.lessThan(this.ty, S)), function () {\r\n this.$l.texel = pb.add(\r\n pb.sub(\r\n pb.mul(pb.vec2(pb.float(this.page.x), pb.float(this.page.y)), that._pageSize),\r\n pb.vec2(that._border)\r\n ),\r\n pb.add(pb.vec2(pb.float(this.tx), pb.float(this.ty)), pb.vec2(0.5))\r\n );\r\n const values = fillTexel(this, this.level, this.texel);\r\n values.forEach((v, i) => {\r\n pb.textureStore(this[`zVT_plane${i}`], pb.add(this.origin, pb.uvec2(this.tx, this.ty)), v);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n }\r\n })!;\r\n }\r\n /**\r\n * Fills the pages mapped by the last update. `bindGroup` comes from the fill program's layout\r\n * with the owner's own bindings set; the core ones are set here.\r\n */\r\n fill(program: GPUProgram, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('zVT_params', this._params);\r\n bindGroup.setBuffer('zVT_fillList', this._fillList);\r\n this._planeTextures.forEach((tex, i) => bindGroup.setTexture(`zVT_plane${i}`, tex));\r\n this._device.setProgram(program);\r\n this._device.setBindGroup(0, bindGroup);\r\n this._device.computeIndirect(this._dispatchArgs, 12);\r\n }\r\n /**\r\n * Declares the bindings used by {@link VirtualTexture.request}, {@link VirtualTexture.resolve}\r\n * and {@link VirtualTexture.computeLevel} in a render program.\r\n */\r\n declareBindings(scope: PBGlobalScope, group: number, requests = scope.$builder.shaderKind !== 'vertex') {\r\n const pb = scope.$builder;\r\n this.declareParams(pb, scope, group);\r\n scope.zVT_pageTable = pb.uint[0]().storageBufferReadonly(group);\r\n scope.zVT_state = pb.vec4[0]().storageBufferReadonly(group);\r\n if (requests) {\r\n scope.zVT_pageRequest = pb.atomic_uint[0]().storageBuffer(group);\r\n }\r\n }\r\n applyBindings(bindGroup: BindGroup, withRequests = true) {\r\n bindGroup.setBuffer('zVT_params', this._params);\r\n bindGroup.setBuffer('zVT_pageTable', this._pageTable);\r\n bindGroup.setBuffer('zVT_state', this._state);\r\n if (withRequests) {\r\n bindGroup.setBuffer('zVT_pageRequest', this._pageRequest);\r\n }\r\n }\r\n /**\r\n * Size in texels of a level, as a vec2. Usable wherever the core bindings are declared,\r\n * including the `fillTexel` callback of {@link VirtualTexture.createFillProgram}, where\r\n * `texel / levelTexels(level)` is the virtual uv of the texel.\r\n */\r\n levelTexels(scope: PBInsideFunctionScope, level: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const info = scope.zVT_params.at(pb.add(pb.uint(level), 4)) as PBShaderExp;\r\n return pb.mul(pb.vec2(pb.float(info.y), pb.float(info.z)), this._pageSize) as PBShaderExp;\r\n }\r\n /** Mip level from the screen derivatives of a virtual uv, fragment shaders only */\r\n computeLevel(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return this.levelFromFootprint(scope, pb.dpdx(uv), pb.dpdy(uv));\r\n }\r\n /**\r\n * Mip level from the change of the virtual uv across one pixel in x and in y, for marking in\r\n * compute shaders where there are no screen derivatives (e.g. from reconstructed neighbours).\r\n * Includes the residency mip bias, like {@link VirtualTexture.computeLevel}.\r\n */\r\n levelFromFootprint(scope: PBInsideFunctionScope, duvdx: PBShaderExp, duvdy: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const size = [this._levels[0].pagesX * this._pageSize, this._levels[0].pagesY * this._pageSize];\r\n pb.func('zVT_levelFromFootprint', [pb.vec2('duvdx'), pb.vec2('duvdy')], function () {\r\n this.$l.dx = pb.mul(this.duvdx, pb.vec2(size[0], size[1]));\r\n this.$l.dy = pb.mul(this.duvdy, pb.vec2(size[0], size[1]));\r\n this.$l.d = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));\r\n this.$return(\r\n pb.clamp(\r\n pb.add(pb.mul(pb.log2(pb.max(this.d, 1e-8)), 0.5), this.zVT_state.at(0).x),\r\n 0,\r\n pb.float(pb.sub(this.zVT_params.at(1).x, 1))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope().zVT_levelFromFootprint(duvdx, duvdy) as PBShaderExp;\r\n }\r\n /**\r\n * Requests the page covering `uv` at `level`. With `prefetch`, also requests the ancestor at\r\n * most two levels finer than what is resident now, so the texture refines gradually.\r\n */\r\n request(scope: PBInsideFunctionScope, level: PBShaderExp, uv: PBShaderExp, prefetch = true) {\r\n const pb = scope.$builder;\r\n this.definePageId(pb);\r\n pb.func(`zVT_request${prefetch ? 'P' : ''}`, [pb.uint('level'), pb.vec2('uv')], function () {\r\n this.$l.id = this.zVT_pageId(this.level, this.uv);\r\n pb.atomicAdd(this.zVT_pageRequest.at(this.id), 1);\r\n if (prefetch) {\r\n this.$l.e = this.zVT_pageTable.at(this.id);\r\n this.$if(\r\n pb.and(\r\n pb.equal(pb.compAnd(this.e, PT_THIS_LOD), 0),\r\n pb.notEqual(pb.compAnd(this.e, PT_ANY_LOD), 0)\r\n ),\r\n function () {\r\n this.$l.hit = pb.add(this.level, pb.compAnd(pb.sar(this.e, PT_LOD_SHIFT), PT_LOD_MASK));\r\n this.$l.pre = pb.sub(this.hit, pb.min(this.hit, 2));\r\n this.$if(pb.greaterThan(this.pre, this.level), function () {\r\n pb.atomicAdd(this.zVT_pageRequest.at(this.zVT_pageId(this.pre, this.uv)), 1);\r\n });\r\n }\r\n );\r\n }\r\n });\r\n pb.getGlobalScope()[`zVT_request${prefetch ? 'P' : ''}`](pb.uint(level), uv);\r\n }\r\n /**\r\n * Physical location of `uv` at `level`: (atlas u, atlas v, level actually hit, 1 if any page\r\n * is mapped else 0). One page table read; unmapped pages already point at their nearest\r\n * resident ancestor.\r\n */\r\n resolve(scope: PBInsideFunctionScope, level: PBShaderExp, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n this.definePageId(pb);\r\n pb.func('zVT_resolve', [pb.uint('level'), pb.vec2('uv')], function () {\r\n this.$l.e = this.zVT_pageTable.at(this.zVT_pageId(this.level, this.uv));\r\n this.$l.hit = pb.add(this.level, pb.compAnd(pb.sar(this.e, PT_LOD_SHIFT), PT_LOD_MASK));\r\n this.$l.phys = pb.compAnd(this.e, PT_PHYS_MASK);\r\n this.$l.info = this.zVT_params.at(pb.add(pb.min(this.hit, pb.sub(this.zVT_params.at(1).x, 1)), 4));\r\n this.$l.inPage = pb.fract(pb.mul(this.uv, pb.vec2(pb.float(this.info.y), pb.float(this.info.z))));\r\n this.$l.origin = pb.mul(\r\n pb.vec2(\r\n pb.float(pb.sub(this.phys, pb.mul(pb.div(this.phys, that._slotsPerRow), that._slotsPerRow))),\r\n pb.float(pb.div(this.phys, that._slotsPerRow))\r\n ),\r\n that._slotSize\r\n );\r\n this.$return(\r\n pb.vec4(\r\n pb.div(\r\n pb.add(pb.add(this.origin, pb.vec2(that._border)), pb.mul(this.inPage, that._pageSize)),\r\n that._atlasSize\r\n ),\r\n pb.float(this.hit),\r\n pb.float(pb.notEqual(pb.compAnd(this.e, PT_ANY_LOD), 0))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope().zVT_resolve(pb.uint(level), uv) as PBShaderExp;\r\n }\r\n /**\r\n * An rgba8 view of the page table for one level, magnified to the finest level's page grid:\r\n * bright green = resident and requested this update, dim green = resident, cyan = pinned,\r\n * blue = pointing at an ancestor (darker the further up), black = nothing mapped.\r\n */\r\n renderDebugTexture(level: number) {\r\n const l0 = this._levels[0];\r\n if (!this._debugTexture) {\r\n this._debugTexture = this._device.createTexture2D('rgba8unorm', l0.pagesX, l0.pagesY, {\r\n writable: true,\r\n mipmapping: false,\r\n samplerOptions: { magFilter: 'nearest', minFilter: 'nearest', mipFilter: 'none' }\r\n })!;\r\n this._debugTexture.name = 'VirtualTexture.debug';\r\n }\r\n const bindGroup = this.getBindGroup('debug');\r\n bindGroup.setValue('zVT_debugLevel', Math.min(Math.max(0, level | 0), this._levels.length - 1));\r\n bindGroup.setTexture('zVT_debug', this._debugTexture);\r\n this._device.setProgram(this.getProgram('debug'));\r\n this._device.setBindGroup(0, bindGroup);\r\n this._device.compute(Math.ceil(l0.pagesX / FILL_GROUP), Math.ceil(l0.pagesY / FILL_GROUP), 1);\r\n return this._debugTexture;\r\n }\r\n /**\r\n * Reads the page table, the physical page metadata and lists back and checks the invariants\r\n * of the page management. Debugging aid: the read back costs a GPU sync and a few hundred KB.\r\n * Must be called after an update and before the next one.\r\n */\r\n async validate(): Promise<VirtualTextureValidation> {\r\n const N = this._physicalPages;\r\n const table = new Uint8Array(this._totalPages * 4);\r\n const meta = new Uint8Array(N * 16);\r\n const lists = new Uint8Array(N * 16);\r\n const counts = new Uint8Array(16);\r\n await Promise.all([\r\n this._pageTable.getBufferSubData(table),\r\n this._meta.getBufferSubData(meta),\r\n this._lists[this._parity].getBufferSubData(lists),\r\n this._listCounts.getBufferSubData(counts)\r\n ]);\r\n const pt = new Uint32Array(table.buffer);\r\n const m = new Uint32Array(meta.buffer);\r\n const l = new Uint32Array(lists.buffer);\r\n const requestedCount = new Int32Array(counts.buffer)[LIST_REQUESTED];\r\n const result: VirtualTextureValidation = {\r\n lostPages: 0,\r\n duplicatePages: 0,\r\n wrongOwner: 0,\r\n sharedPages: 0,\r\n pinnedMissing: 0,\r\n unmapped: 0\r\n };\r\n const seen = new Uint8Array(N);\r\n for (let i = 0; i < Math.min(requestedCount, N); i++) {\r\n const p = l[LIST_REQUESTED * N + i];\r\n if (p >= N || seen[p]) {\r\n result.duplicatePages++;\r\n } else {\r\n seen[p] = 1;\r\n }\r\n }\r\n result.lostPages = seen.reduce((n, v) => n + (v ? 0 : 1), 0);\r\n const users = new Uint32Array(N);\r\n for (let id = 0; id < this._totalPages; id++) {\r\n const e = pt[id];\r\n if (e & PT_THIS_LOD) {\r\n const p = e & PT_PHYS_MASK;\r\n if (p >= N || m[p * 4] !== id || !(m[p * 4 + 3] & META_ALLOCATED)) {\r\n result.wrongOwner++;\r\n } else if (++users[p] === 2) {\r\n result.sharedPages++;\r\n }\r\n } else if (!(e & PT_ANY_LOD)) {\r\n result.unmapped++;\r\n }\r\n }\r\n for (let level = this._pinnedFromLevel; level < this._levels.length; level++) {\r\n for (let i = 0; i < this.levelPages(level); i++) {\r\n if (!(pt[this._levelOffsets[level] + i] & PT_THIS_LOD)) {\r\n result.pinnedMissing++;\r\n }\r\n }\r\n }\r\n if (!this._mipChain) {\r\n // Without ancestors to fall back on, unmapped entries are expected\r\n result.unmapped = 0;\r\n }\r\n return result;\r\n }\r\n private levelPages(level: number) {\r\n return this._levels[level].pagesX * this._levels[level].pagesY;\r\n }\r\n private writeParams(stamp: number) {\r\n const d = this._paramData;\r\n d.set([this._totalPages, this._physicalPages, stamp, this._maxPageAge], 0);\r\n d.set([this._levels.length, this._allocBudget, this._loadCapacity, this._pinnedFromLevel], 4);\r\n d.set([this._slotsPerRow, this._slotSize, this._border, this._pageSize], 8);\r\n d.set([this._atlasSize, 0, this._mipChain ? 1 : 0, this._freeThreshold], 12);\r\n this._levels.forEach((l, i) => d.set([this._levelOffsets[i], l.pagesX, l.pagesY, 0], 16 + i * 4));\r\n this._params.bufferSubData(0, d);\r\n }\r\n private readStats() {\r\n this._statsPending = true;\r\n const countersBytes = NUM_COUNTERS * 4;\r\n this._device.copyBuffer(this._counters, this._statsReadback, 0, 0, countersBytes);\r\n this._device.copyBuffer(this._listCounts, this._statsReadback, 0, countersBytes, 16);\r\n this._device.copyBuffer(this._state, this._statsReadback, 0, countersBytes + 16, 16);\r\n this._statsReadback\r\n .getBufferSubData()\r\n .then((data) => {\r\n const c = new Uint32Array(data.buffer, data.byteOffset, NUM_COUNTERS);\r\n const l = new Int32Array(data.buffer, data.byteOffset + countersBytes, 4);\r\n const state = new Float32Array(data.buffer, data.byteOffset + countersBytes + 16, 4);\r\n this._stats = {\r\n requested: c[C_STAT_REQUESTED],\r\n allocated: c[C_STAT_ALLOCATED],\r\n evicted: c[C_STAT_EVICTED],\r\n refilled: c[C_STAT_REFILLED],\r\n expired: c[C_STAT_EXPIRED],\r\n loads: Math.min(c[C_LOAD], this._loadCapacity),\r\n dropped: c[C_STAT_DROPPED],\r\n available: Math.max(0, l[LIST_AVAILABLE]),\r\n lruSize: l[LIST_REQUESTED],\r\n mipBias: state[0]\r\n };\r\n })\r\n .catch(() => {})\r\n .finally(() => {\r\n this._statsPending = false;\r\n });\r\n }\r\n private dispatch(name: string, x: number, y = 1) {\r\n this._device.setProgram(this.getProgram(name));\r\n this._device.setBindGroup(0, this.getBindGroup(name));\r\n this._device.compute(x, y, 1);\r\n }\r\n private getProgram(name: string) {\r\n let program = this._programs.get(name);\r\n if (!program) {\r\n program = this.buildProgram(name);\r\n this._programs.set(name, program);\r\n }\r\n return program;\r\n }\r\n private getBindGroup(name: string) {\r\n let bindGroup = this._bindGroups.get(name);\r\n if (!bindGroup) {\r\n const program = this.getProgram(name);\r\n bindGroup = this._device.createBindGroup(program.bindGroupLayouts[0]);\r\n const parity = Number(name[name.length - 1]);\r\n const resources: Resources = {\r\n zVT_params: this._params,\r\n zVT_rects: this._rects,\r\n zVT_pageTable: this._pageTable,\r\n zVT_pageRequest: this._pageRequest,\r\n zVT_meta: this._meta,\r\n zVT_listCounts: this._listCounts,\r\n zVT_loadList: this._loadList,\r\n zVT_fillList: this._fillList,\r\n zVT_counters: this._counters,\r\n zVT_dispatchArgs: this._dispatchArgs,\r\n zVT_state: this._state\r\n };\r\n if (parity === 0 || parity === 1) {\r\n resources.zVT_lists = this._lists[parity];\r\n resources.zVT_prevLists = this._lists[parity ^ 1];\r\n }\r\n // Layout entries carry the builder's block names (zUBC_*); the variable names map to them\r\n // through nameMap, which setBuffer resolves\r\n const layout = program.bindGroupLayouts[0];\r\n for (const [resName, res] of Object.entries(resources)) {\r\n if (layout.nameMap?.[resName] || layout.entries.some((e) => e.name === resName)) {\r\n bindGroup.setBuffer(resName, res as GPUDataBuffer);\r\n }\r\n }\r\n this._bindGroups.set(name, bindGroup);\r\n }\r\n return bindGroup;\r\n }\r\n // ---------------------------------------------------------------- shader building blocks\r\n private declareParams(pb: ProgramBuilder, scope: PBGlobalScope, group = 0) {\r\n // [0] (totalPages, physicalPages, stamp, maxPageAge)\r\n // [1] (numLevels, allocBudget, loadCapacity, pinnedFromLevel)\r\n // [2] (slotsPerRow, slotSize, border, pageSize)\r\n // [3] (atlasSize, numRects, mipChain, freeThreshold)\r\n // [4 + l] (first page id, pagesX, pagesY, 0) of level l\r\n scope.zVT_params = pb.uvec4[4 + MAX_LEVELS]().uniformBuffer(group);\r\n }\r\n private defineLevelOf(pb: ProgramBuilder) {\r\n pb.func('zVT_levelOf', [pb.uint('id')], function () {\r\n this.$l.level = pb.uint(0);\r\n this.$for(pb.uint('l'), 1, MAX_LEVELS, function () {\r\n this.$if(\r\n pb.or(\r\n pb.greaterThanEqual(this.l, this.zVT_params.at(1).x),\r\n pb.lessThan(this.id, this.zVT_params.at(pb.add(this.l, 4)).x)\r\n ),\r\n function () {\r\n this.$break();\r\n }\r\n );\r\n this.level = this.l;\r\n });\r\n this.$return(this.level);\r\n });\r\n }\r\n private definePageId(pb: ProgramBuilder) {\r\n pb.func('zVT_pageId', [pb.uint('level'), pb.vec2('uv')], function () {\r\n this.$l.info = this.zVT_params.at(pb.add(pb.min(this.level, pb.sub(this.zVT_params.at(1).x, 1)), 4));\r\n this.$l.pages = pb.vec2(pb.float(this.info.y), pb.float(this.info.z));\r\n this.$l.pc = pb.uvec2(\r\n pb.clamp(pb.floor(pb.mul(this.uv, this.pages)), pb.vec2(0), pb.sub(this.pages, pb.vec2(1)))\r\n );\r\n this.$return(pb.add(this.info.x, pb.add(pb.mul(this.pc.y, this.info.y), this.pc.x)));\r\n });\r\n }\r\n private definePush(pb: ProgramBuilder) {\r\n pb.func('zVT_push', [pb.uint('list'), pb.uint('page')], function () {\r\n this.$l.offset = pb.atomicAdd(this.zVT_listCounts.at(this.list), 1);\r\n this.$if(pb.lessThan(this.offset, pb.int(this.zVT_params.at(0).y)), function () {\r\n this.zVT_lists.setAt(\r\n pb.add(pb.mul(this.list, this.zVT_params.at(0).y), pb.uint(this.offset)),\r\n this.page\r\n );\r\n });\r\n });\r\n }\r\n private buildProgram(name: string): GPUProgram {\r\n const that = this;\r\n const base = name.replace(/[01]$/, '');\r\n const common = (pb: ProgramBuilder, scope: PBGlobalScope) => {\r\n that.declareParams(pb, scope);\r\n };\r\n const lists = (pb: ProgramBuilder, scope: PBGlobalScope) => {\r\n scope.zVT_lists = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_listCounts = pb.atomic_int[0]().storageBuffer(0);\r\n };\r\n const program = (\r\n workgroupSize: [number, number, number],\r\n body: (pb: ProgramBuilder, scope: PBGlobalScope) => void\r\n ) =>\r\n this._device.buildComputeProgram({\r\n label: `VirtualTexture.${name}`,\r\n workgroupSize,\r\n compute(pb) {\r\n common(pb, this);\r\n body(pb, this);\r\n }\r\n })!;\r\n const loadCount = (pb: ProgramBuilder, scope: PBInsideFunctionScope) =>\r\n pb.atomicAdd(scope.zVT_listCounts.at(LIST_AVAILABLE), 0);\r\n switch (base) {\r\n case 'clear':\r\n return program([GROUP, 1, 1], (pb, scope) => {\r\n scope.zVT_pageTable = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n scope.zVT_listCounts = pb.atomic_int[0]().storageBuffer(0);\r\n pb.main(function () {\r\n this.$l.i = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.i, this.zVT_params.at(0).x), function () {\r\n this.zVT_pageTable.setAt(this.i, pb.uint(0));\r\n });\r\n this.$if(pb.lessThan(this.i, NUM_COUNTERS), function () {\r\n pb.atomicExchange(this.zVT_counters.at(this.i), 0);\r\n });\r\n this.$if(pb.lessThan(this.i, 4), function () {\r\n pb.atomicExchange(this.zVT_listCounts.at(this.i), 0);\r\n });\r\n });\r\n });\r\n // Marks the resident pages inside the queued regions dirty\r\n case 'invalidate':\r\n return program([GROUP, 1, 1], (pb, scope) => {\r\n scope.zVT_rects = pb.vec4[MAX_RECTS]().uniformBuffer(0);\r\n scope.zVT_meta = pb.uint[0]().storageBuffer(0);\r\n that.defineLevelOf(pb);\r\n pb.main(function () {\r\n this.$l.p = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.p, this.zVT_params.at(0).y), function () {\r\n this.$l.flags = this.zVT_meta.at(pb.add(pb.mul(this.p, 4), 3));\r\n this.$if(pb.notEqual(pb.compAnd(this.flags, META_ALLOCATED), 0), function () {\r\n this.$l.owner = this.zVT_meta.at(pb.mul(this.p, 4));\r\n this.$l.info = this.zVT_params.at(pb.add(this.zVT_levelOf(this.owner), 4));\r\n this.$l.local = pb.sub(this.owner, this.info.x);\r\n this.$l.page = pb.vec2(\r\n pb.float(pb.sub(this.local, pb.mul(pb.div(this.local, this.info.y), this.info.y))),\r\n pb.float(pb.div(this.local, this.info.y))\r\n );\r\n // The page with its border: a border texel is sampled when filtering across the\r\n // page edge, so an edit next to a page changes it too. One more texel covers the\r\n // bilinear footprint of the outermost border texel.\r\n this.$l.margin = pb.div(\r\n pb.float(pb.add(this.zVT_params.at(2).z, 1)),\r\n pb.float(this.zVT_params.at(2).w)\r\n );\r\n this.$l.lo = pb.div(\r\n pb.sub(this.page, pb.vec2(this.margin)),\r\n pb.vec2(pb.float(this.info.y), pb.float(this.info.z))\r\n );\r\n this.$l.hi = pb.div(\r\n pb.add(this.page, pb.vec2(pb.add(1, this.margin))),\r\n pb.vec2(pb.float(this.info.y), pb.float(this.info.z))\r\n );\r\n this.$for(pb.uint('r'), 0, this.zVT_params.at(3).y, function () {\r\n this.$l.rect = this.zVT_rects.at(this.r);\r\n this.$if(\r\n pb.and(\r\n pb.all(pb.lessThan(this.lo, this.rect.zw)),\r\n pb.all(pb.greaterThan(this.hi, this.rect.xy))\r\n ),\r\n function () {\r\n this.flags = pb.compOr(this.flags, META_DIRTY);\r\n }\r\n );\r\n });\r\n this.zVT_meta.setAt(pb.add(pb.mul(this.p, 4), 3), this.flags);\r\n });\r\n });\r\n });\r\n });\r\n case 'updatePhysical':\r\n return program([GROUP, 1, 1], (pb, scope) => {\r\n lists(pb, scope);\r\n scope.zVT_prevLists = pb.uint[0]().storageBufferReadonly(0);\r\n scope.zVT_pageTable = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_pageRequest = pb.atomic_uint[0]().storageBuffer(0);\r\n scope.zVT_meta = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_fillList = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n that.definePush(pb);\r\n pb.main(function () {\r\n this.$l.i = this.$builtins.globalInvocationId.x;\r\n this.$l.N = this.zVT_params.at(0).y;\r\n this.$if(pb.lessThan(this.i, this.N), function () {\r\n this.$l.p = this.zVT_prevLists.at(pb.add(pb.mul(this.N, LIST_REQUESTED), this.i));\r\n this.$l.m = pb.mul(this.p, 4);\r\n this.$l.flags = this.zVT_meta.at(pb.add(this.m, 3));\r\n this.$l.next = pb.uint(0);\r\n this.$l.removed = false;\r\n this.$if(pb.notEqual(pb.compAnd(this.flags, META_ALLOCATED), 0), function () {\r\n this.$l.owner = this.zVT_meta.at(this.m);\r\n this.$l.requestedNow = pb.greaterThan(\r\n pb.atomicAdd(this.zVT_pageRequest.at(this.owner), 0),\r\n 0\r\n );\r\n this.$l.age = pb.sub(this.zVT_params.at(0).z, this.zVT_meta.at(pb.add(this.m, 2)));\r\n // In use: requested now, pinned, or requested within the free threshold\r\n this.$l.requested = pb.or(\r\n pb.or(this.requestedNow, pb.notEqual(pb.compAnd(this.flags, META_PINNED), 0)),\r\n pb.lessThanEqual(this.age, this.zVT_params.at(3).w)\r\n );\r\n this.$if(\r\n pb.or(\r\n this.requested,\r\n pb.and(\r\n pb.lessThanEqual(this.age, this.zVT_params.at(0).w),\r\n pb.equal(pb.compAnd(this.flags, META_DIRTY), 0)\r\n )\r\n ),\r\n function () {\r\n this.next = this.flags;\r\n this.zVT_pageTable.setAt(this.owner, pb.compOr(pb.uint(PT_MAPPED), this.p));\r\n this.$if(this.requested, function () {\r\n this.zVT_push(LIST_REQUESTED, this.p);\r\n this.removed = true;\r\n this.$if(this.requestedNow, function () {\r\n this.zVT_meta.setAt(pb.add(this.m, 2), this.zVT_params.at(0).z);\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_REQUESTED), 1);\r\n });\r\n this.$if(pb.notEqual(pb.compAnd(this.flags, META_DIRTY), 0), function () {\r\n this.$l.slot = pb.atomicAdd(this.zVT_counters.at(C_FILL), 1);\r\n this.$if(pb.lessThan(this.slot, this.zVT_params.at(1).y), function () {\r\n this.zVT_fillList.setAt(pb.mul(this.slot, 2), this.owner);\r\n this.zVT_fillList.setAt(pb.add(pb.mul(this.slot, 2), 1), this.p);\r\n this.next = pb.compAnd(this.next, pb.uint(~META_DIRTY >>> 0));\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_REFILLED), 1);\r\n });\r\n });\r\n });\r\n }\r\n ).$else(function () {\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_EXPIRED), 1);\r\n });\r\n });\r\n this.$if(pb.equal(this.next, 0), function () {\r\n this.zVT_push(LIST_EMPTY, this.p);\r\n this.removed = true;\r\n });\r\n this.zVT_meta.setAt(pb.add(this.m, 3), this.next);\r\n this.zVT_lists.setAt(\r\n pb.add(pb.mul(this.N, LIST_LRU), this.i),\r\n pb.select(this.p, pb.uint(INDEX_NONE), this.removed)\r\n );\r\n });\r\n });\r\n });\r\n case 'pack':\r\n return program([PACK_GROUP, 1, 1], (pb, scope) => {\r\n lists(pb, scope);\r\n scope.zVT_scan = pb.uint[PACK_GROUP]().workgroup();\r\n pb.main(function () {\r\n this.$l.lid = this.$builtins.localInvocationId.x;\r\n this.$l.N = this.zVT_params.at(0).y;\r\n this.$l.total = pb.uint(0);\r\n this.$l.chunks = pb.div(pb.add(this.N, PACK_GROUP - 1), PACK_GROUP);\r\n this.$for(pb.uint('c'), 0, this.chunks, function () {\r\n this.$l.idx = pb.add(pb.mul(this.c, PACK_GROUP), this.lid);\r\n this.$l.v = pb.uint(INDEX_NONE);\r\n this.$if(pb.lessThan(this.idx, this.N), function () {\r\n this.v = this.zVT_lists.at(pb.add(pb.mul(this.N, LIST_LRU), this.idx));\r\n });\r\n this.$l.valid = pb.select(pb.uint(0), pb.uint(1), pb.notEqual(this.v, INDEX_NONE));\r\n this.zVT_scan.setAt(this.lid, this.valid);\r\n pb.workgroupBarrier();\r\n for (let offset = 1; offset < PACK_GROUP; offset *= 2) {\r\n this.$l[`t${offset}`] = pb.uint(0);\r\n this.$if(pb.greaterThanEqual(this.lid, offset), function () {\r\n this[`t${offset}`] = this.zVT_scan.at(pb.sub(this.lid, offset));\r\n });\r\n pb.workgroupBarrier();\r\n this.zVT_scan.setAt(this.lid, pb.add(this.zVT_scan.at(this.lid), this[`t${offset}`]));\r\n pb.workgroupBarrier();\r\n }\r\n this.$if(pb.notEqual(this.valid, 0), function () {\r\n this.zVT_lists.setAt(\r\n pb.add(\r\n pb.mul(this.N, LIST_AVAILABLE),\r\n pb.add(this.total, pb.sub(this.zVT_scan.at(this.lid), 1))\r\n ),\r\n this.v\r\n );\r\n });\r\n this.total = pb.add(this.total, this.zVT_scan.at(PACK_GROUP - 1));\r\n pb.workgroupBarrier();\r\n });\r\n this.$if(pb.equal(this.lid, 0), function () {\r\n pb.atomicExchange(this.zVT_listCounts.at(LIST_AVAILABLE), pb.int(this.total));\r\n });\r\n });\r\n });\r\n case 'appendEmpty':\r\n case 'appendAvailable':\r\n case 'appendEmptyCount':\r\n case 'appendAvailableCount': {\r\n const input = base.startsWith('appendEmpty') ? LIST_EMPTY : LIST_AVAILABLE;\r\n const output = base.startsWith('appendEmpty') ? LIST_AVAILABLE : LIST_REQUESTED;\r\n const counts = base.endsWith('Count');\r\n return program([counts ? 1 : GROUP, 1, 1], (pb, scope) => {\r\n lists(pb, scope);\r\n pb.main(function () {\r\n this.$l.N = pb.int(this.zVT_params.at(0).y);\r\n this.$l.inCount = pb.max(pb.atomicAdd(this.zVT_listCounts.at(input), 0), 0);\r\n this.$l.outCount = pb.max(pb.atomicAdd(this.zVT_listCounts.at(output), 0), 0);\r\n this.$l.copy = pb.max(0, pb.min(this.inCount, pb.sub(this.N, this.outCount)));\r\n if (counts) {\r\n pb.atomicExchange(this.zVT_listCounts.at(output), pb.add(this.outCount, this.copy));\r\n pb.atomicExchange(this.zVT_listCounts.at(input), 0);\r\n } else {\r\n this.$l.i = pb.int(this.$builtins.globalInvocationId.x);\r\n this.$if(pb.lessThan(this.i, this.copy), function () {\r\n this.zVT_lists.setAt(\r\n pb.uint(pb.add(pb.mul(this.N, output), pb.add(this.outCount, this.i))),\r\n this.zVT_lists.at(pb.uint(pb.add(pb.mul(this.N, input), this.i)))\r\n );\r\n });\r\n }\r\n });\r\n });\r\n }\r\n case 'gather':\r\n return program([GROUP, 1, 1], (pb, scope) => {\r\n scope.zVT_pageTable = pb.uint[0]().storageBufferReadonly(0);\r\n scope.zVT_pageRequest = pb.atomic_uint[0]().storageBuffer(0);\r\n scope.zVT_loadList = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n that.defineLevelOf(pb);\r\n pb.main(function () {\r\n this.$l.i = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.lessThan(this.i, this.zVT_params.at(0).x), function () {\r\n this.$l.count = pb.atomicExchange(this.zVT_pageRequest.at(this.i), 0);\r\n this.$l.level = this.zVT_levelOf(this.i);\r\n this.$l.pinned = pb.greaterThanEqual(this.level, this.zVT_params.at(1).w);\r\n this.$if(this.pinned, function () {\r\n this.count = pb.max(this.count, 1);\r\n });\r\n this.$if(\r\n pb.and(\r\n pb.greaterThan(this.count, 0),\r\n pb.equal(pb.compAnd(this.zVT_pageTable.at(this.i), PT_THIS_LOD), 0)\r\n ),\r\n function () {\r\n this.$l.priority = pb.mul(this.count, pb.add(this.level, 1));\r\n this.$l.bucket = pb.select(\r\n pb.min(pb.uint(pb.floor(pb.log2(pb.float(this.priority)))), 30),\r\n pb.uint(HIST_PINNED_BUCKET),\r\n this.pinned\r\n );\r\n this.$l.slot = pb.atomicAdd(this.zVT_counters.at(C_LOAD), 1);\r\n this.$if(pb.lessThan(this.slot, this.zVT_params.at(1).z), function () {\r\n this.zVT_loadList.setAt(pb.mul(this.slot, 3), this.i);\r\n this.zVT_loadList.setAt(pb.add(pb.mul(this.slot, 3), 1), this.bucket);\r\n this.zVT_loadList.setAt(pb.add(pb.mul(this.slot, 3), 2), this.level);\r\n pb.atomicAdd(this.zVT_counters.at(pb.add(this.bucket, C_HIST)), 1);\r\n }).$else(function () {\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_DROPPED), 1);\r\n });\r\n }\r\n );\r\n });\r\n });\r\n });\r\n case 'select':\r\n return program([1, 1, 1], (pb, scope) => {\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n scope.zVT_listCounts = pb.atomic_int[0]().storageBuffer(0);\r\n scope.zVT_dispatchArgs = pb.uint[0]().storageBuffer(0);\r\n pb.main(function () {\r\n this.$l.available = pb.uint(pb.max(loadCount(pb, this), 0));\r\n this.$l.budget = this.zVT_params.at(1).y;\r\n this.$l.refills = pb.min(pb.atomicAdd(this.zVT_counters.at(C_FILL), 0), this.budget);\r\n this.$l.quota = pb.min(pb.sub(this.budget, this.refills), this.available);\r\n this.$l.taken = pb.uint(0);\r\n this.$l.cut = pb.uint(INDEX_NONE);\r\n this.$for(pb.int('k'), 0, 32, function () {\r\n this.$l.b = pb.uint(pb.sub(31, this.k));\r\n this.$l.h = pb.atomicAdd(this.zVT_counters.at(pb.add(this.b, C_HIST)), 0);\r\n this.$if(pb.lessThanEqual(pb.add(this.taken, this.h), this.quota), function () {\r\n this.taken = pb.add(this.taken, this.h);\r\n }).$else(function () {\r\n this.cut = this.b;\r\n this.$break();\r\n });\r\n });\r\n pb.atomicExchange(this.zVT_counters.at(C_CUT), this.cut);\r\n pb.atomicExchange(this.zVT_counters.at(C_REMAIN), pb.sub(this.quota, this.taken));\r\n this.$l.loads = pb.min(pb.atomicAdd(this.zVT_counters.at(C_LOAD), 0), this.zVT_params.at(1).z);\r\n this.zVT_dispatchArgs.setAt(0, pb.div(pb.add(this.loads, GROUP - 1), GROUP));\r\n this.zVT_dispatchArgs.setAt(1, pb.uint(1));\r\n this.zVT_dispatchArgs.setAt(2, pb.uint(1));\r\n });\r\n });\r\n case 'allocate':\r\n return program([GROUP, 1, 1], (pb, scope) => {\r\n lists(pb, scope);\r\n scope.zVT_pageTable = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_meta = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_loadList = pb.uint[0]().storageBufferReadonly(0);\r\n scope.zVT_fillList = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n that.definePush(pb);\r\n pb.main(function () {\r\n this.$l.k = this.$builtins.globalInvocationId.x;\r\n this.$l.loads = pb.min(pb.atomicAdd(this.zVT_counters.at(C_LOAD), 0), this.zVT_params.at(1).z);\r\n this.$if(pb.lessThan(this.k, this.loads), function () {\r\n this.$l.id = this.zVT_loadList.at(pb.mul(this.k, 3));\r\n this.$l.bucket = this.zVT_loadList.at(pb.add(pb.mul(this.k, 3), 1));\r\n this.$l.level = this.zVT_loadList.at(pb.add(pb.mul(this.k, 3), 2));\r\n this.$l.cut = pb.atomicAdd(this.zVT_counters.at(C_CUT), 0);\r\n this.$l.take = pb.or(pb.equal(this.cut, INDEX_NONE), pb.greaterThan(this.bucket, this.cut));\r\n this.$if(pb.equal(this.bucket, this.cut), function () {\r\n this.take = pb.lessThan(\r\n pb.atomicAdd(this.zVT_counters.at(C_TIE), 1),\r\n pb.atomicAdd(this.zVT_counters.at(C_REMAIN), 0)\r\n );\r\n });\r\n this.$l.slot = pb.uint(INDEX_NONE);\r\n this.$if(this.take, function () {\r\n // A fill slot first: a page mapped without one would show another page's texels\r\n this.slot = pb.atomicAdd(this.zVT_counters.at(C_FILL), 1);\r\n this.take = pb.lessThan(this.slot, this.zVT_params.at(1).y);\r\n });\r\n this.$if(this.take, function () {\r\n this.$l.top = pb.atomicSub(this.zVT_listCounts.at(LIST_AVAILABLE), 1);\r\n // Out of pages: the slot stays reserved but empty, the fill pass skips it\r\n this.$if(pb.lessThanEqual(this.top, 0), function () {\r\n this.zVT_fillList.setAt(pb.mul(this.slot, 2), pb.uint(INDEX_NONE));\r\n });\r\n this.$if(pb.greaterThan(this.top, 0), function () {\r\n this.$l.N = this.zVT_params.at(0).y;\r\n this.$l.p = this.zVT_lists.at(\r\n pb.add(pb.mul(this.N, LIST_AVAILABLE), pb.uint(pb.sub(this.top, 1)))\r\n );\r\n this.$l.m = pb.mul(this.p, 4);\r\n this.$if(\r\n pb.notEqual(pb.compAnd(this.zVT_meta.at(pb.add(this.m, 3)), META_ALLOCATED), 0),\r\n function () {\r\n this.zVT_pageTable.setAt(this.zVT_meta.at(this.m), pb.uint(0));\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_EVICTED), 1);\r\n }\r\n );\r\n this.zVT_pageTable.setAt(this.id, pb.compOr(pb.uint(PT_MAPPED), this.p));\r\n this.zVT_meta.setAt(this.m, this.id);\r\n this.zVT_meta.setAt(pb.add(this.m, 1), this.level);\r\n this.zVT_meta.setAt(pb.add(this.m, 2), this.zVT_params.at(0).z);\r\n this.zVT_meta.setAt(\r\n pb.add(this.m, 3),\r\n pb.select(\r\n pb.uint(META_ALLOCATED),\r\n pb.uint(META_ALLOCATED | META_PINNED),\r\n pb.greaterThanEqual(this.level, this.zVT_params.at(1).w)\r\n )\r\n );\r\n this.zVT_push(LIST_REQUESTED, this.p);\r\n this.zVT_fillList.setAt(pb.mul(this.slot, 2), this.id);\r\n this.zVT_fillList.setAt(pb.add(pb.mul(this.slot, 2), 1), this.p);\r\n pb.atomicAdd(this.zVT_counters.at(C_STAT_ALLOCATED), 1);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n case 'finalize':\r\n return program([1, 1, 1], (pb, scope) => {\r\n scope.zVT_counters = pb.atomic_uint[0]().storageBuffer(0);\r\n scope.zVT_dispatchArgs = pb.uint[0]().storageBuffer(0);\r\n scope.zVT_listCounts = pb.atomic_int[0]().storageBuffer(0);\r\n scope.zVT_state = pb.vec4[0]().storageBuffer(0);\r\n pb.main(function () {\r\n this.$l.state = this.zVT_state.at(0);\r\n this.$l.residency = pb.div(\r\n pb.float(pb.max(pb.atomicAdd(this.zVT_listCounts.at(LIST_REQUESTED), 0), 0)),\r\n pb.float(this.zVT_params.at(0).y)\r\n );\r\n this.$l.bias = this.state.x;\r\n this.$if(\r\n pb.and(pb.greaterThan(this.bias, 0), pb.lessThan(this.residency, this.state.z)),\r\n function () {\r\n this.bias = pb.sub(\r\n this.bias,\r\n pb.mul(RESIDENCY_ADJUSTMENT_RATE, pb.sub(this.state.z, this.residency))\r\n );\r\n }\r\n ).$elseif(pb.greaterThan(this.residency, this.state.y), function () {\r\n this.bias = pb.add(\r\n this.bias,\r\n pb.mul(RESIDENCY_ADJUSTMENT_RATE, pb.sub(this.residency, this.state.y))\r\n );\r\n });\r\n this.bias = pb.clamp(this.bias, 0, RESIDENCY_MAX_MIP_BIAS);\r\n this.$if(\r\n pb.or(pb.lessThan(this.state.y, 0), pb.greaterThan(this.state.w, RESIDENCY_LOCKED_UPPER_BOUND)),\r\n function () {\r\n this.bias = pb.float(0);\r\n }\r\n );\r\n this.zVT_state.setAt(0, pb.vec4(this.bias, this.state.yzw));\r\n this.zVT_dispatchArgs.setAt(\r\n 3,\r\n pb.min(pb.atomicAdd(this.zVT_counters.at(C_FILL), 0), this.zVT_params.at(1).y)\r\n );\r\n this.zVT_dispatchArgs.setAt(4, pb.uint(1));\r\n this.zVT_dispatchArgs.setAt(5, pb.uint(1));\r\n });\r\n });\r\n case 'propagate':\r\n return program([FILL_GROUP, FILL_GROUP, 1], (pb, scope) => {\r\n scope.zVT_pageTable = pb.uint[0]().storageBuffer(0);\r\n pb.main(function () {\r\n this.$l.xy = this.$builtins.globalInvocationId.xy;\r\n this.$l.info0 = this.zVT_params.at(4);\r\n this.$if(\r\n pb.and(pb.lessThan(this.xy.x, this.info0.y), pb.lessThan(this.xy.y, this.info0.z)),\r\n function () {\r\n this.$l.numLevels = this.zVT_params.at(1).x;\r\n this.$l.mapped = false;\r\n this.$l.mappedLevel = pb.uint(0);\r\n this.$l.mappedPhys = pb.uint(0);\r\n this.$for(pb.uint('k'), 0, this.numLevels, function () {\r\n this.$l.l = pb.sub(pb.sub(this.numLevels, 1), this.k);\r\n this.$l.info = this.zVT_params.at(pb.add(this.l, 4));\r\n this.$l.v = pb.uvec2(pb.sar(this.xy.x, this.l), pb.sar(this.xy.y, this.l));\r\n this.$l.id = pb.add(this.info.x, pb.add(pb.mul(this.v.y, this.info.y), this.v.x));\r\n this.$l.e = this.zVT_pageTable.at(this.id);\r\n this.$if(pb.notEqual(pb.compAnd(this.e, PT_THIS_LOD), 0), function () {\r\n this.mapped = true;\r\n this.mappedLevel = this.l;\r\n this.mappedPhys = pb.compAnd(this.e, PT_PHYS_MASK);\r\n }).$elseif(\r\n pb.and(\r\n this.mapped,\r\n pb.equal(pb.uvec2(pb.sal(this.v.x, this.l), pb.sal(this.v.y, this.l)), this.xy)\r\n ),\r\n function () {\r\n this.zVT_pageTable.setAt(\r\n this.id,\r\n pb.compOr(\r\n pb.compOr(\r\n pb.uint(PT_ANY_LOD),\r\n pb.sal(pb.sub(this.mappedLevel, this.l), PT_LOD_SHIFT)\r\n ),\r\n this.mappedPhys\r\n )\r\n );\r\n }\r\n );\r\n });\r\n }\r\n );\r\n });\r\n });\r\n case 'debug':\r\n return program([FILL_GROUP, FILL_GROUP, 1], (pb, scope) => {\r\n scope.zVT_pageTable = pb.uint[0]().storageBufferReadonly(0);\r\n scope.zVT_meta = pb.uint[0]().storageBufferReadonly(0);\r\n scope.zVT_debugLevel = pb.uint().uniform(0);\r\n scope.zVT_debug = pb.texStorage2D.rgba8unorm().storage(0);\r\n pb.main(function () {\r\n this.$l.xy = this.$builtins.globalInvocationId.xy;\r\n this.$l.info0 = this.zVT_params.at(4);\r\n this.$if(\r\n pb.and(pb.lessThan(this.xy.x, this.info0.y), pb.lessThan(this.xy.y, this.info0.z)),\r\n function () {\r\n this.$l.l = this.zVT_debugLevel;\r\n this.$l.info = this.zVT_params.at(pb.add(this.l, 4));\r\n this.$l.v = pb.uvec2(pb.sar(this.xy.x, this.l), pb.sar(this.xy.y, this.l));\r\n this.$l.e = this.zVT_pageTable.at(\r\n pb.add(this.info.x, pb.add(pb.mul(this.v.y, this.info.y), this.v.x))\r\n );\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$if(pb.notEqual(pb.compAnd(this.e, PT_THIS_LOD), 0), function () {\r\n this.$l.m = pb.mul(pb.compAnd(this.e, PT_PHYS_MASK), 4);\r\n this.$l.fresh = pb.equal(this.zVT_meta.at(pb.add(this.m, 2)), this.zVT_params.at(0).z);\r\n this.color = pb.vec4(0, pb.select(0.45, 1, this.fresh), 0, 1);\r\n this.$if(\r\n pb.notEqual(pb.compAnd(this.zVT_meta.at(pb.add(this.m, 3)), META_PINNED), 0),\r\n function () {\r\n this.color = pb.vec4(0, 0.8, 0.8, 1);\r\n }\r\n );\r\n }).$elseif(pb.notEqual(pb.compAnd(this.e, PT_ANY_LOD), 0), function () {\r\n this.$l.lod = pb.float(pb.compAnd(pb.sar(this.e, PT_LOD_SHIFT), PT_LOD_MASK));\r\n this.color = pb.vec4(0.1, 0.1, pb.max(0.25, pb.sub(1, pb.mul(this.lod, 0.12))), 1);\r\n });\r\n pb.textureStore(this.zVT_debug, this.xy, this.color);\r\n }\r\n );\r\n });\r\n });\r\n default:\r\n throw new Error(`VirtualTexture: unknown program ${name}`);\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const tex of this._planeTextures) {\r\n tex.dispose();\r\n }\r\n for (const buffer of [\r\n this._params,\r\n this._rects,\r\n this._pageTable,\r\n this._pageRequest,\r\n this._meta,\r\n ...this._lists,\r\n this._listCounts,\r\n this._loadList,\r\n this._fillList,\r\n this._counters,\r\n this._dispatchArgs,\r\n this._state,\r\n this._statsReadback\r\n ]) {\r\n buffer.dispose();\r\n }\r\n for (const bindGroup of this._bindGroups.values()) {\r\n bindGroup.dispose();\r\n }\r\n for (const program of this._programs.values()) {\r\n program.dispose();\r\n }\r\n this._debugTexture?.dispose();\r\n }\r\n}\r\n"],"names":["virtualMipChain","a","b","c","width","height","pageSize","undefined","isPowerOf2","Math","min","Error","levels","x","y","max","push","pagesX","pagesY","INDEX_NONE","MAX_LEVELS","MAX_RECTS","LIST_LRU","LIST_AVAILABLE","LIST_EMPTY","LIST_REQUESTED","PT_PHYS_MASK","PT_LOD_SHIFT","PT_LOD_MASK","PT_THIS_LOD","PT_ANY_LOD","PT_MAPPED","META_ALLOCATED","META_DIRTY","META_PINNED","C_LOAD","C_FILL","C_CUT","C_REMAIN","C_TIE","C_HIST","C_STAT_REQUESTED","C_STAT_ALLOCATED","C_STAT_EVICTED","C_STAT_REFILLED","C_STAT_DROPPED","C_STAT_EXPIRED","NUM_COUNTERS","RESIDENCY_ADJUSTMENT_RATE","RESIDENCY_MAX_MIP_BIAS","RESIDENCY_LOCKED_UPPER_BOUND","HIST_PINNED_BUCKET","GROUP","PACK_GROUP","FILL_GROUP","n","VirtualTexture","Disposable","_device","_levels","_levelOffsets","_totalPages","_pageSize","_border","_slotSize","_atlasSize","_slotsPerRow","_physicalPages","_loadCapacity","_allocBudget","_maxPageAge","_freeThreshold","_pinnedFromLevel","_mipChain","_planes","_planeTextures","_params","_paramData","_rects","_rectData","_pendingRects","_pageTable","_pageRequest","_meta","_lists","_listCounts","_loadList","_fillList","_counters","_dispatchArgs","_programs","_bindGroups","_parity","_stats","_statsPending","_updateCount","_debugTexture","device","options","type","getDeviceCaps","miscCaps","supportDispatchIndirect","map","l","length","total","every","i","border","atlasSize","floor","loadCapacity","allocBudget","maxPageAge","freeThreshold","pinnedFrom","pinnedPages","levelPages","planes","slice","plane","tex","createTexture2D","format","writable","mipmapping","name","storage","bytes","createBuffer","usage","Uint32Array","Float32Array","_state","_statsReadback","upper","residencyUpperBound","lower","residencyLowerBound","bufferSubData","residencyMipBias","initialLists","Map","writeParams","physicalPageCount","pinnedFromLevel","stats","getPlaneTexture","index","findIndex","p","invalidate","invalidateRegion","u0","v0","u1","v1","update","stamp","N","groups","ceil","dispatch","rects","splice","fill","forEach","r","set","allocate","getProgram","setProgram","setBindGroup","getBindGroup","computeIndirect","l0","readStats","createFillProgram","label","setup","fillTexel","that","S","iterations","buildComputeProgram","workgroupSize","compute","pb","declareParams","zVT_fillList","uint","storageBufferReadonly","texStorage2D","defineLevelOf","main","$l","entry","$builtins","workGroupId","pageId","at","mul","$if","equal","$return","phys","add","level","zVT_levelOf","info","zVT_params","local","sub","page","uvec2","div","origin","$for","ty","iy","localInvocationId","tx","ix","and","lessThan","texel","vec2","float","values","v","textureStore","program","bindGroup","setBuffer","setTexture","declareBindings","scope","group","requests","$builder","shaderKind","zVT_pageTable","zVT_state","vec4","zVT_pageRequest","atomic_uint","storageBuffer","applyBindings","withRequests","levelTexels","z","computeLevel","uv","levelFromFootprint","dpdx","dpdy","duvdx","duvdy","size","func","dx","dy","d","dot","clamp","log2","getGlobalScope","zVT_levelFromFootprint","request","prefetch","definePageId","id","zVT_pageId","atomicAdd","e","compAnd","notEqual","hit","sar","pre","greaterThan","resolve","inPage","fract","zVT_resolve","renderDebugTexture","samplerOptions","magFilter","minFilter","mipFilter","setValue","validate","table","Uint8Array","meta","lists","counts","Promise","all","getBufferSubData","pt","buffer","m","requestedCount","Int32Array","result","lostPages","duplicatePages","wrongOwner","sharedPages","pinnedMissing","unmapped","seen","reduce","users","countersBytes","copyBuffer","then","data","byteOffset","state","requested","allocated","evicted","refilled","expired","loads","dropped","available","lruSize","mipBias","catch","finally","get","buildProgram","createBindGroup","bindGroupLayouts","parity","Number","resources","zVT_rects","zVT_meta","zVT_listCounts","zVT_loadList","zVT_counters","zVT_dispatchArgs","zVT_lists","zVT_prevLists","layout","resName","res","Object","entries","nameMap","some","uvec4","uniformBuffer","or","greaterThanEqual","$break","pages","pc","definePush","offset","list","int","setAt","base","replace","common","atomic_int","body","loadCount","globalInvocationId","atomicExchange","flags","owner","margin","w","lo","hi","rect","zw","xy","compOr","next","removed","requestedNow","age","lessThanEqual","zVT_push","slot","$else","select","zVT_scan","workgroup","lid","chunks","idx","valid","workgroupBarrier","input","startsWith","output","endsWith","inCount","outCount","copy","count","pinned","priority","bucket","budget","refills","quota","taken","cut","k","h","take","top","atomicSub","residency","bias","$elseif","yzw","info0","numLevels","mapped","mappedLevel","mappedPhys","sal","zVT_debugLevel","uniform","zVT_debug","rgba8unorm","color","fresh","lod","onDispose","dispose"],"mappings":";;AA4CO,SAASA,eAAgBC,CAAAA,CAAS,EAAEC,CAAS,EAAEC,CAAU,EAAA;AAC9D,IAAA,MAAM,CAACC,KAAOC,EAAAA,MAAAA,EAAQC,QAAS,CAAA,GAAGH,MAAMI,SAAY,GAAA;AAACN,QAAAA,CAAAA;AAAGA,QAAAA,CAAAA;AAAGC,QAAAA;KAAE,GAAG;AAACD,QAAAA,CAAAA;AAAGC,QAAAA,CAAAA;AAAGC,QAAAA;AAAE,KAAA;AACzE,IAAA,IACE,CAACK,UAAAA,CAAWJ,KACZ,CAAA,IAAA,CAACI,WAAWH,MACZ,CAAA,IAAA,CAACG,UAAWF,CAAAA,QAAAA,CAAAA,IACZA,QAAWG,GAAAA,IAAAA,CAAKC,GAAG,CAACN,OAAOC,MAC3B,CAAA,EAAA;AACA,QAAA,MAAM,IAAIM,KAAM,CAAA,8EAAA,CAAA;AAClB;AACA,IAAA,MAAMC,SAAgC,EAAE;IACxC,IAAK,IAAIC,IAAIT,KAAQE,GAAAA,QAAAA,EAAUQ,IAAIT,MAASC,GAAAA,QAAAA,GAAYO,IAAIJ,IAAKM,CAAAA,GAAG,CAAC,CAAGF,EAAAA,CAAAA,IAAK,IAAIC,CAAIL,GAAAA,IAAAA,CAAKM,GAAG,CAAC,CAAA,EAAGD,KAAK,CAAI,CAAA,CAAA;AACxGF,QAAAA,MAAAA,CAAOI,IAAI,CAAC;YAAEC,MAAQJ,EAAAA,CAAAA;YAAGK,MAAQJ,EAAAA;AAAE,SAAA,CAAA;QACnC,IAAID,CAAAA,KAAM,CAAKC,IAAAA,CAAAA,KAAM,CAAG,EAAA;AACtB,YAAA;AACF;AACF;IACA,OAAOF,MAAAA;AACT;AAkGA,MAAMO,UAAa,GAAA,UAAA;AACnB,MAAMC,UAAa,GAAA,EAAA;AACnB,MAAMC,SAAY,GAAA,CAAA;AAClB,MAAMC,QAAW,GAAA,CAAA;AACjB,MAAMC,cAAiB,GAAA,CAAA;AACvB,MAAMC,UAAa,GAAA,CAAA;AACnB,MAAMC,cAAiB,GAAA,CAAA;AACvB;AACA,MAAMC,YAAe,GAAA,MAAA;AACrB,MAAMC,YAAe,GAAA,EAAA;AACrB,MAAMC,WAAc,GAAA,IAAA;AACpB,MAAMC,WAAc,GAAA,UAAA;AACpB,MAAMC,UAAa,GAAA,UAAA;AACnB,uFACA,MAAMC,SAAAA,GAAY,CAACD,UAAAA,GAAaD,WAAU,MAAO,CAAA;AACjD;AACA,MAAMG,cAAiB,GAAA,CAAA;AACvB,MAAMC,UAAa,GAAA,CAAA;AACnB,MAAMC,WAAc,GAAA,CAAA;AACpB;AACA,MAAMC,MAAS,GAAA,CAAA;AACf,MAAMC,MAAS,GAAA,CAAA;AACf,MAAMC,KAAQ,GAAA,CAAA;AACd,MAAMC,QAAW,GAAA,CAAA;AACjB,MAAMC,KAAQ,GAAA,CAAA;AACd,MAAMC,MAAS,GAAA,CAAA;AACf,MAAMC,gBAAmB,GAAA,EAAA;AACzB,MAAMC,gBAAmB,GAAA,EAAA;AACzB,MAAMC,cAAiB,GAAA,EAAA;AACvB,MAAMC,eAAkB,GAAA,EAAA;AACxB,MAAMC,cAAiB,GAAA,EAAA;AACvB,MAAMC,cAAiB,GAAA,EAAA;AACvB,MAAMC,YAAe,GAAA,EAAA;AACrB;AACA,MAAMC,yBAA4B,GAAA,GAAA;AAClC,MAAMC,sBAAyB,GAAA,CAAA;AAC/B,MAAMC,4BAA+B,GAAA,IAAA;AACrC,MAAMC,kBAAqB,GAAA,EAAA;AAC3B,MAAMC,KAAQ,GAAA,EAAA;AACd,MAAMC,UAAa,GAAA,GAAA;AACnB,MAAMC,UAAa,GAAA,CAAA;AAEnB,SAAS9C,WAAW+C,CAAS,EAAA;AAC3B,IAAA,OAAOA,IAAI,CAAK,IAACA,CAAAA,CAAKA,GAAAA,CAAAA,GAAI,CAAC,MAAO,CAAA;AACpC;AAIA;;;;;;;;IASO,MAAMC,cAAuBC,SAAAA,UAAAA,CAAAA;IACjBC,OAAwB;IACxBC,OAA+B;IAC/BC,aAAwB;IACxBC,WAAoB;IACpBC,SAAkB;IAClBC,OAAgB;IAChBC,SAAkB;IAClBC,UAAmB;IACnBC,YAAqB;IACrBC,cAAuB;IACvBC,aAAsB;IACtBC,YAAqB;IACrBC,WAAoB;IACpBC,cAAuB;IACvBC,gBAAyB;IACzBC,SAAmB;IACnBC,OAA+B;IAC/BC,cAA4B;IAC5BC,OAAuB;IACvBC,UAAqC;IACrCC,MAAsB;IACtBC,SAAqC;IACrCC,aAA0B;IAC1BC,UAA0B;IAC1BC,YAA4B;IAC5BC,KAAqB;IACrBC,MAAuC;IACvCC,WAA2B;IAC3BC,SAAyB;IACzBC,SAAyB;IACzBC,SAAyB;IACzBC,aAA6B;sHAE9C,MAAuC;AACvC;;;AAGC,MACD,cAA+C;IAC9BC,SAAmC;IACnCC,WAAoC;IAC7CC,OAAgB;IAChBC,MAAsC;IACtCC,aAAuB;IACvBC,YAAqB;IACrBC,aAAmC;IAC3C,WAAYC,CAAAA,MAAsB,EAAEC,OAA8B,CAAE;QAClE,KAAK,EAAA;QACL,IAAID,MAAAA,CAAOE,IAAI,KAAK,QAAY,IAAA,CAACF,MAAOG,CAAAA,aAAa,EAAGC,CAAAA,QAAQ,CAACC,uBAAuB,EAAE;AACxF,YAAA,MAAM,IAAI3F,KAAM,CAAA,gCAAA,CAAA;AAClB;QACA,IAAI,CAAC+C,OAAO,GAAGuC,MAAAA;QACf,IAAI,CAACtC,OAAO,GAAGuC,OAAQtF,CAAAA,MAAM,CAAC2F,GAAG,CAAC,CAACC,CAAAA,IAAO;AAAEvF,gBAAAA,MAAAA,EAAQuF,EAAEvF,MAAM;AAAEC,gBAAAA,MAAAA,EAAQsF,EAAEtF;aAAO,CAAA,CAAA;AAC/E,QAAA,IAAI,IAAI,CAACyC,OAAO,CAAC8C,MAAM,KAAK,CAAK,IAAA,IAAI,CAAC9C,OAAO,CAAC8C,MAAM,GAAGrF,UAAY,EAAA;AACjE,YAAA,MAAM,IAAIT,KAAM,CAAA,CAAC,qBAAqB,EAAES,UAAAA,CAAW,qBAAqB,CAAC,CAAA;AAC3E;QACA,IAAI,CAACwC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI8C,KAAQ,GAAA,CAAA;AACZ,QAAA,KAAK,MAAMF,CAAAA,IAAK,IAAI,CAAC7C,OAAO,CAAE;AAC5B,YAAA,IAAI,CAACC,aAAa,CAAC5C,IAAI,CAAC0F,KAAAA,CAAAA;AACxBA,YAAAA,KAAAA,IAASF,CAAEvF,CAAAA,MAAM,GAAGuF,CAAAA,CAAEtF,MAAM;AAC9B;QACA,IAAI,CAAC2C,WAAW,GAAG6C,KAAAA;AACnB,QAAA,IAAI,CAACjC,SAAS,GAAG,IAAI,CAACd,OAAO,CAACgD,KAAK,CACjC,CAACH,CAAGI,EAAAA,CAAAA,GACFJ,EAAEvF,MAAM,KAAKR,KAAKM,GAAG,CAAC,GAAG,IAAI,CAAC4C,OAAO,CAAC,EAAE,CAAC1C,MAAM,IAAI2F,CACnDJ,CAAAA,IAAAA,CAAAA,CAAEtF,MAAM,KAAKT,IAAAA,CAAKM,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC4C,OAAO,CAAC,CAAE,CAAA,CAACzC,MAAM,IAAI0F,CAAAA,CAAAA,CAAAA;AAEvD,QAAA,IAAI,CAAC9C,SAAS,GAAGoC,OAAAA,CAAQ5F,QAAQ,IAAI,GAAA;AACrC,QAAA,IAAI,CAACyD,OAAO,GAAGmC,OAAAA,CAAQW,MAAM,IAAI,CAAA;QACjC,IAAI,CAAC7C,SAAS,GAAG,IAAI,CAACF,SAAS,GAAG,CAAA,GAAI,IAAI,CAACC,OAAO;AAClD,QAAA,IAAI,CAACE,UAAU,GAAGiC,OAAAA,CAAQY,SAAS,IAAI,IAAA;AACvC,QAAA,IAAI,CAAC5C,YAAY,GAAGzD,IAAAA,CAAKsG,KAAK,CAAC,IAAI,CAAC9C,UAAU,GAAG,IAAI,CAACD,SAAS,CAAA;QAC/D,IAAI,CAACG,cAAc,GAAG,IAAI,CAACD,YAAY,GAAG,IAAI,CAACA,YAAY;QAC3D,IAAI,IAAI,CAACC,cAAc,GAAG,KAAK,IAAI,CAACA,cAAc,GAAGzC,YAAc,EAAA;AACjE,YAAA,MAAM,IAAIf,KAAM,CAAA,6CAAA,CAAA;AAClB;AACA,QAAA,IAAI,CAACyD,aAAa,GAAG8B,OAAAA,CAAQc,YAAY,IAAI,KAAA;AAC7C,QAAA,IAAI,CAAC3C,YAAY,GAAG5D,IAAKM,CAAAA,GAAG,CAAC,CAAGN,EAAAA,IAAAA,CAAKC,GAAG,CAACwF,QAAQe,WAAW,IAAI,EAAI,EAAA,IAAI,CAAC9C,cAAc,CAAA,CAAA;AACvF,QAAA,IAAI,CAACG,WAAW,GAAG4B,OAAAA,CAAQgB,UAAU,IAAI,IAAA;QACzC,IAAI,CAAC3C,cAAc,GAAG9D,IAAAA,CAAKM,GAAG,CAAC,CAAA,EAAGmF,OAAQiB,CAAAA,aAAa,IAAI,EAAA,CAAA;AAC3D,QAAA,IAAIC,aAAa,IAAI,CAACzD,OAAO,CAAC8C,MAAM,GAAG,CAAA;AACvC,QAAA,IAAIY,WAAc,GAAA,IAAI,CAACC,UAAU,CAACF,UAAAA,CAAAA;AAClC,QAAA,MAAOA,UAAa,GAAA,CAAA,IAAKC,WAAc,GAAA,IAAI,CAACC,UAAU,CAACF,UAAAA,GAAa,CAAM,CAAA,IAAA,IAAI,CAACjD,cAAc,GAAG,CAAG,CAAA;AACjGiD,YAAAA,UAAAA,EAAAA;YACAC,WAAe,IAAA,IAAI,CAACC,UAAU,CAACF,UAAAA,CAAAA;AACjC;AACA,QAAA,IAAIC,WAAc,GAAA,IAAI,CAAClD,cAAc,EAAE;AACrC,YAAA,MAAM,IAAIxD,KAAM,CAAA,gEAAA,CAAA;AAClB;QACA,IAAI,CAAC6D,gBAAgB,GAAG4C,UAAAA;AACxB,QAAA,IAAI,CAAC1C,OAAO,GAAGwB,OAAQqB,CAAAA,MAAM,CAACC,KAAK,EAAA;QACnC,IAAI,CAAC7C,cAAc,GAAG,IAAI,CAACD,OAAO,CAAC6B,GAAG,CAAC,CAACkB,KAAAA,GAAAA;AACtC,YAAA,MAAMC,GAAMzB,GAAAA,MAAAA,CAAO0B,eAAe,CAACF,MAAMG,MAAM,EAAE,IAAI,CAAC3D,UAAU,EAAE,IAAI,CAACA,UAAU,EAAE;gBACjF4D,QAAU,EAAA,IAAA;gBACVC,UAAY,EAAA;AACd,aAAA,CAAA;AACAJ,YAAAA,GAAAA,CAAIK,IAAI,GAAG,CAAC,eAAe,EAAEN,KAAAA,CAAMM,IAAI,CAAE,CAAA;YACzC,OAAOL,GAAAA;AACT,SAAA,CAAA;QACA,MAAMM,OAAAA,GAAU,CAACC,KAAAA,GACfhC,MAAOiC,CAAAA,YAAY,CAACzH,IAAKM,CAAAA,GAAG,CAAC,EAAA,EAAIkH,KAAQ,CAAA,EAAA;gBAAEE,KAAO,EAAA,SAAA;gBAAWH,OAAS,EAAA;AAAK,aAAA,CAAA;QAC7E,IAAI,CAACpD,OAAO,GAAGqB,MAAOiC,CAAAA,YAAY,CAAE,CAAA,CAAA,GAAI9G,UAAS,IAAK,EAAI,EAAA;YAAE+G,KAAO,EAAA;AAAU,SAAA,CAAA;QAC7E,IAAI,CAACtD,UAAU,GAAG,IAAIuD,YAAY,CAAC,CAAIhH,GAAAA,UAAS,IAAK,CAAA,CAAA;AACrD,QAAA,IAAI,CAAC0D,MAAM,GAAGmB,OAAOiC,YAAY,CAAC7G,YAAY,EAAI,EAAA;YAAE8G,KAAO,EAAA;AAAU,SAAA,CAAA;AACrE,QAAA,IAAI,CAACpD,SAAS,GAAG,IAAIsD,aAAahH,SAAY,GAAA,CAAA,CAAA;QAC9C,IAAI,CAAC2D,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAACC,UAAU,GAAG+C,OAAAA,CAAQtB,KAAQ,GAAA,CAAA,CAAA;AAClC,QAAA,IAAI,CAACxB,YAAY,GAAG8C,OAAAA,CAAQtB,KAAQ,GAAA,CAAA,CAAA;AACpC,QAAA,IAAI,CAACvB,KAAK,GAAG6C,QAAQ,IAAI,CAAC7D,cAAc,GAAG,EAAA,CAAA;QAC3C,IAAI,CAACiB,MAAM,GAAG;YAAC4C,OAAQ,CAAA,IAAI,CAAC7D,cAAc,GAAG,EAAA,CAAA;YAAK6D,OAAQ,CAAA,IAAI,CAAC7D,cAAc,GAAG,EAAA;AAAI,SAAA;QACpF,IAAI,CAACkB,WAAW,GAAG2C,OAAQ,CAAA,EAAA,CAAA;AAC3B,QAAA,IAAI,CAAC1C,SAAS,GAAG0C,QAAQ,IAAI,CAAC5D,aAAa,GAAG,EAAA,CAAA;AAC9C,QAAA,IAAI,CAACmB,SAAS,GAAGyC,QAAQ,IAAI,CAAC3D,YAAY,GAAG,CAAA,CAAA;AAC7C,QAAA,IAAI,CAACmB,SAAS,GAAGwC,OAAAA,CAAQjF,YAAe,GAAA,CAAA,CAAA;AACxC,QAAA,IAAI,CAAC0C,aAAa,GAAGQ,OAAOiC,YAAY,CAAC,IAAI,CAAG,EAAA;YAAEC,KAAO,EAAA,UAAA;YAAYH,OAAS,EAAA;AAAK,SAAA,CAAA;QACnF,IAAI,CAACM,MAAM,GAAGN,OAAQ,CAAA,EAAA,CAAA;QACtB,IAAI,CAACO,cAAc,GAAGtC,MAAAA,CAAOiC,YAAY,CAACnF,YAAAA,GAAe,IAAI,EAAI,EAAA;YAAEoF,KAAO,EAAA;AAAO,SAAA,CAAA;QACjF,MAAMK,KAAAA,GAAQtC,OAAQuC,CAAAA,mBAAmB,IAAI,IAAA;AAC7C,QAAA,MAAMC,QAAQjI,IAAKC,CAAAA,GAAG,CAAC8H,KAAOtC,EAAAA,OAAAA,CAAQyC,mBAAmB,IAAI,GAAA,CAAA;;AAE7D,QAAA,IAAI,CAACL,MAAM,CAACM,aAAa,CACvB,CAAA,EACA,IAAIP,YAAa,CAAA;AAAC,YAAA,CAAA;YAAGnC,OAAQ2C,CAAAA,gBAAgB,GAAGL,KAAAA,GAAQ,EAAC;AAAGE,YAAAA,KAAAA;YAAOrB,WAAc,GAAA,IAAI,CAAClD;AAAe,SAAA,CAAA,CAAA;;AAGvG,QAAA,MAAM2E,eAAe,IAAIV,WAAAA,CAAY,IAAI,CAACjE,cAAc,GAAG,CAAA,CAAA;QAC3D,IAAK,IAAIyC,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAACzC,cAAc,EAAEyC,CAAK,EAAA,CAAA;AAC5CkC,YAAAA,YAAY,CAACrH,cAAiB,GAAA,IAAI,CAAC0C,cAAc,GAAGyC,EAAE,GAAGA,CAAAA;AAC3D;;;QAGA,IAAI,CAAChB,OAAO,GAAG,CAAA;QACf,IAAI,CAACR,MAAM,CAAC,IAAI,CAACQ,OAAO,CAAC,CAACgD,aAAa,CAAC,CAAGE,EAAAA,YAAAA,CAAAA;QAC3C,IAAI,CAACpD,SAAS,GAAG,IAAIqD,GAAAA,EAAAA;QACrB,IAAI,CAACpD,WAAW,GAAG,IAAIoD,GAAAA,EAAAA;QACvB,IAAI,CAAClD,MAAM,GAAG,IAAA;QACd,IAAI,CAACC,aAAa,GAAG,KAAA;QACrB,IAAI,CAACC,YAAY,GAAG,CAAA;QACpB,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACgD,WAAW,CAAC,CAAA,CAAA;AACnB;uCAEA,IAAIpI,MAAyC,GAAA;QAC3C,OAAO,IAAI,CAAC+C,OAAO;AACrB;AACA,IAAA,IAAIrD,QAAW,GAAA;QACb,OAAO,IAAI,CAACwD,SAAS;AACvB;AACA,IAAA,IAAI+C,MAAS,GAAA;QACX,OAAO,IAAI,CAAC9C,OAAO;AACrB;AACA,IAAA,IAAI+C,SAAY,GAAA;QACd,OAAO,IAAI,CAAC7C,UAAU;AACxB;AACA,IAAA,IAAIgF,iBAAoB,GAAA;QACtB,OAAO,IAAI,CAAC9E,cAAc;AAC5B;kDAEA,IAAI+E,eAAkB,GAAA;QACpB,OAAO,IAAI,CAAC1E,gBAAgB;AAC9B;AACA,IAAA,IAAIyC,WAAc,GAAA;QAChB,OAAO,IAAI,CAAC5C,YAAY;AAC1B;AACA;;;AAGC,MACD,IAAI8E,KAAQ,GAAA;QACV,OAAO,IAAI,CAACtD,MAAM;AACpB;AACAuD,IAAAA,eAAAA,CAAgBrB,IAAY,EAAE;QAC5B,MAAMsB,KAAAA,GAAQ,IAAI,CAAC3E,OAAO,CAAC4E,SAAS,CAAC,CAACC,CAAAA,GAAMA,CAAExB,CAAAA,IAAI,KAAKA,IAAAA,CAAAA;AACvD,QAAA,OAAOsB,SAAS,CAAI,GAAA,IAAI,CAAC1E,cAAc,CAAC0E,MAAM,GAAG,IAAA;AACnD;AACA,mDACAG,UAAa,GAAA;AACX,QAAA,IAAI,CAACC,gBAAgB,CAAC,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,CAAA;AACjC;AACA;;;;;MAMAA,gBAAAA,CAAiBC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAE;AAC/D,QAAA,IAAI,CAAC7E,aAAa,CAAChE,IAAI,CAAC;AAAC0I,YAAAA,EAAAA;AAAIC,YAAAA,EAAAA;AAAIC,YAAAA,EAAAA;AAAIC,YAAAA;AAAG,SAAA,CAAA;AAC1C;AACA;;;MAIAC,MAAAA,CAAOC,KAAa,EAAE;QACpB,MAAM9D,MAAAA,GAAS,IAAI,CAACvC,OAAO;QAC3B,IAAI,CAACkC,OAAO,IAAI,CAAA;QAChB,IAAI,CAACoD,WAAW,CAACe,KAAAA,CAAAA;QACjB,MAAMC,CAAAA,GAAI,IAAI,CAAC7F,cAAc;QAC7B,MAAM8F,MAAAA,GAAS,CAAC1G,CAAAA,GAAc9C,IAAKM,CAAAA,GAAG,CAAC,CAAGN,EAAAA,IAAAA,CAAKyJ,IAAI,CAAC3G,CAAIH,GAAAA,KAAAA,CAAAA,CAAAA;QACxD,IAAI,CAAC+G,QAAQ,CAAC,OAASF,EAAAA,MAAAA,CAAOxJ,IAAKM,CAAAA,GAAG,CAAC,IAAI,CAAC8C,WAAW,EAAEd,YAAAA,CAAAA,CAAAA,CAAAA;AACzD,QAAA,MAAO,IAAI,CAACiC,aAAa,CAACyB,MAAM,GAAG,CAAG,CAAA;AACpC,YAAA,MAAM2D,QAAQ,IAAI,CAACpF,aAAa,CAACqF,MAAM,CAAC,CAAGhJ,EAAAA,SAAAA,CAAAA;AAC3C,YAAA,IAAI,CAAC0D,SAAS,CAACuF,IAAI,CAAC,CAAA,CAAA;AACpBF,YAAAA,KAAAA,CAAMG,OAAO,CAAC,CAACC,CAAAA,EAAG5D,CAAM,GAAA,IAAI,CAAC7B,SAAS,CAAC0F,GAAG,CAACD,CAAAA,EAAG5D,CAAI,GAAA,CAAA,CAAA,CAAA;YAClD,IAAI,CAAC9B,MAAM,CAAC8D,aAAa,CAAC,CAAG,EAAA,IAAI,CAAC7D,SAAS,CAAA;AAC3C,YAAA,IAAI,CAACF,UAAU,CAAC,EAAG,CAAA,GAAGuF,MAAM3D,MAAM;YAClC,IAAI,CAAC7B,OAAO,CAACgE,aAAa,CAAC,CAAG,EAAA,IAAI,CAAC/D,UAAU,CAAA;AAC7C,YAAA,IAAI,CAACsF,QAAQ,CAAC,YAAA,EAAcF,MAAOD,CAAAA,CAAAA,CAAAA,CAAAA;AACrC;QACA,IAAI,CAACG,QAAQ,CAAC,CAAC,cAAc,EAAE,IAAI,CAACvE,OAAO,CAAE,CAAA,EAAEqE,MAAOD,CAAAA,CAAAA,CAAAA,CAAAA;QACtD,IAAI,CAACG,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,CAACvE,OAAO,CAAA,CAAE,EAAE,CAAA,CAAA;QACrC,IAAI,CAACuE,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,CAACvE,OAAO,CAAE,CAAA,EAAEqE,MAAOD,CAAAA,CAAAA,CAAAA,CAAAA;QACnD,IAAI,CAACG,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAACvE,OAAO,CAAA,CAAE,EAAE,CAAA,CAAA;AACjD,QAAA,IAAI,CAACuE,QAAQ,CAAC,UAAUF,MAAO,CAAA,IAAI,CAACpG,WAAW,CAAA,CAAA;QAC/C,IAAI,CAACsG,QAAQ,CAAC,QAAU,EAAA,CAAA,CAAA;QACxB,MAAMO,QAAAA,GAAW,IAAI,CAACC,UAAU,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC/E,OAAO,CAAE,CAAA,CAAA;AAC1DK,QAAAA,MAAAA,CAAO2E,UAAU,CAACF,QAAAA,CAAAA;AAClBzE,QAAAA,MAAAA,CAAO4E,YAAY,CAAC,CAAG,EAAA,IAAI,CAACC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAClF,OAAO,CAAE,CAAA,CAAA,CAAA;AAClEK,QAAAA,MAAAA,CAAO8E,eAAe,CAAC,IAAI,CAACtF,aAAa,EAAE,CAAA,CAAA;QAC3C,IAAI,CAAC0E,QAAQ,CAAC,UAAY,EAAA,CAAA,CAAA;QAC1B,IAAI,CAACA,QAAQ,CAAC,CAAC,eAAe,EAAE,IAAI,CAACvE,OAAO,CAAE,CAAA,EAAEqE,MAAOD,CAAAA,CAAAA,CAAAA,CAAAA;QACvD,IAAI,CAACG,QAAQ,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAACvE,OAAO,CAAA,CAAE,EAAE,CAAA,CAAA;QACrD,IAAI,IAAI,CAACnB,SAAS,EAAE;AAClB,YAAA,MAAMuG,EAAK,GAAA,IAAI,CAACrH,OAAO,CAAC,CAAE,CAAA;AAC1B,YAAA,IAAI,CAACwG,QAAQ,CAAC,WAAa1J,EAAAA,IAAAA,CAAKyJ,IAAI,CAACc,EAAAA,CAAG/J,MAAM,GAAGqC,aAAa7C,IAAKyJ,CAAAA,IAAI,CAACc,EAAAA,CAAG9J,MAAM,GAAGoC,UAAAA,CAAAA,CAAAA;AACtF;AACA,QAAA,IAAI,CAACyC,YAAY,EAAA;QACjB,IAAI,CAAC,IAAI,CAACD,aAAa,IAAI,IAAI,CAACC,YAAY,GAAG,EAAA,KAAO,CAAG,EAAA;AACvD,YAAA,IAAI,CAACkF,SAAS,EAAA;AAChB;AACF;AACA;;;;;;;;;;AAUC,MACDC,kBACEC,KAAa,EACbC,KAA+C,EAC/CC,SAAkG,EAClG;AACA,QAAA,MAAMC,OAAO,IAAI;QACjB,MAAMC,CAAAA,GAAI,IAAI,CAACvH,SAAS;AACxB,QAAA,MAAMwH,UAAa/K,GAAAA,IAAAA,CAAKyJ,IAAI,CAACqB,CAAIjI,GAAAA,UAAAA,CAAAA;AACjC,QAAA,OAAO,IAAI,CAACI,OAAO,CAAC+H,mBAAmB,CAAC;AACtCN,YAAAA,KAAAA;YACAO,aAAe,EAAA;AAACpI,gBAAAA,UAAAA;AAAYA,gBAAAA,UAAAA;AAAY,gBAAA;AAAE,aAAA;AAC1CqI,YAAAA,OAAAA,CAAAA,CAAQC,EAAE,EAAA;gBACRN,IAAKO,CAAAA,aAAa,CAACD,EAAAA,EAAI,IAAI,CAAA;gBAC3B,IAAI,CAACE,YAAY,GAAGF,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAE,EAAGC,CAAAA,qBAAqB,CAAC,CAAA,CAAA;AACvDV,gBAAAA,IAAAA,CAAK5G,OAAO,CAAC6F,OAAO,CAAC,CAAC9C,KAAOb,EAAAA,CAAAA,GAAAA;AAC3B,oBAAA,IAAI,CAAC,CAAC,SAAS,EAAEA,CAAAA,CAAAA,CAAG,CAAC,GAAIgF,EAAGK,CAAAA,YAAY,CAASxE,KAAAA,CAAMG,MAAM,CAAC,EAAA,CAAGI,OAAO,CAAC,CAAA,CAAA;AAC3E,iBAAA,CAAA;AACAoD,gBAAAA,KAAAA,GAAQ,IAAI,CAAA;AACZE,gBAAAA,IAAAA,CAAKY,aAAa,CAACN,EAAAA,CAAAA;AACnBA,gBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;oBACN,IAAI,CAACC,EAAE,CAACC,KAAK,GAAG,IAAI,CAACC,SAAS,CAACC,WAAW,CAAC1L,CAAC;AAC5C,oBAAA,IAAI,CAACuL,EAAE,CAACI,MAAM,GAAG,IAAI,CAACV,YAAY,CAACW,EAAE,CAACb,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACL,KAAK,EAAE,CAAA,CAAA,CAAA;oBACzD,IAAI,CAACM,GAAG,CAACf,EAAGgB,CAAAA,KAAK,CAAC,IAAI,CAACJ,MAAM,EAAErL,UAAa,CAAA,EAAA,WAAA;AAC1C,wBAAA,IAAI,CAAC0L,OAAO,EAAA;AACd,qBAAA,CAAA;oBACA,IAAI,CAACT,EAAE,CAACU,IAAI,GAAG,IAAI,CAAChB,YAAY,CAACW,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACL,KAAK,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;oBAClE,IAAI,CAACD,EAAE,CAACY,KAAK,GAAG,IAAI,CAACC,WAAW,CAAC,IAAI,CAACT,MAAM,CAAA;AAC5C,oBAAA,IAAI,CAACJ,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACC,KAAK,EAAE,CAAA,CAAA,CAAA;AACrD,oBAAA,IAAI,CAACZ,EAAE,CAACgB,KAAK,GAAGxB,GAAGyB,GAAG,CAAC,IAAI,CAACb,MAAM,EAAE,IAAI,CAACU,IAAI,CAACrM,CAAC,CAAA;oBAC/C,IAAI,CAACuL,EAAE,CAACkB,IAAI,GAAG1B,EAAG2B,CAAAA,KAAK,CACrB3B,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACD,KAAK,EAAExB,EAAGc,CAAAA,GAAG,CAACd,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACJ,KAAK,EAAE,IAAI,CAACF,IAAI,CAACpM,CAAC,GAAG,IAAI,CAACoM,IAAI,CAACpM,CAAC,CAAA,CAAA,EACtE8K,GAAG4B,GAAG,CAAC,IAAI,CAACJ,KAAK,EAAE,IAAI,CAACF,IAAI,CAACpM,CAAC,CAAA,CAAA;AAEhC,oBAAA,IAAI,CAACsL,EAAE,CAACqB,MAAM,GAAG7B,EAAAA,CAAGc,GAAG,CACrBd,EAAAA,CAAG2B,KAAK,CACN3B,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACP,IAAI,EAAElB,GAAGc,GAAG,CAACd,GAAG4B,GAAG,CAAC,IAAI,CAACV,IAAI,EAAExB,IAAKpH,CAAAA,YAAY,GAAGoH,IAAKpH,CAAAA,YAAY,IAChF0H,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,EAAExB,IAAAA,CAAKpH,YAAY,CAErCqH,CAAAA,EAAAA,CAAAA,CAAAA;oBAEF,IAAI,CAACmC,IAAI,CAAC9B,EAAAA,CAAGG,IAAI,CAAC,IAAA,CAAA,EAAO,GAAGP,UAAY,EAAA,WAAA;wBACtC,IAAI,CAACY,EAAE,CAACuB,EAAE,GAAG/B,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkB,EAAE,EAAEtK,UAAa,CAAA,EAAA,IAAI,CAACgJ,SAAS,CAACuB,iBAAiB,CAAC/M,CAAC,CAAA;wBACnF,IAAI,CAAC4M,IAAI,CAAC9B,EAAAA,CAAGG,IAAI,CAAC,IAAA,CAAA,EAAO,GAAGP,UAAY,EAAA,WAAA;4BACtC,IAAI,CAACY,EAAE,CAAC0B,EAAE,GAAGlC,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACqB,EAAE,EAAEzK,UAAa,CAAA,EAAA,IAAI,CAACgJ,SAAS,CAACuB,iBAAiB,CAAChN,CAAC,CAAA;4BACnF,IAAI,CAAC8L,GAAG,CAACf,EAAAA,CAAGoC,GAAG,CAACpC,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAACH,EAAE,EAAEvC,IAAIK,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACN,EAAE,EAAEpC,CAAK,CAAA,CAAA,EAAA,WAAA;AACjE,gCAAA,IAAI,CAACa,EAAE,CAAC8B,KAAK,GAAGtC,EAAAA,CAAGmB,GAAG,CACpBnB,EAAGyB,CAAAA,GAAG,CACJzB,EAAAA,CAAGc,GAAG,CAACd,EAAAA,CAAGuC,IAAI,CAACvC,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACd,IAAI,CAACzM,CAAC,CAAA,EAAG+K,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACd,IAAI,CAACxM,CAAC,CAAA,CAAA,EAAIwK,IAAKxH,CAAAA,SAAS,CAC5E8H,EAAAA,EAAAA,CAAGuC,IAAI,CAAC7C,IAAKvH,CAAAA,OAAO,CAEtB6H,CAAAA,EAAAA,EAAAA,CAAGmB,GAAG,CAACnB,GAAGuC,IAAI,CAACvC,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACN,EAAE,GAAGlC,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACT,EAAE,CAAI/B,CAAAA,EAAAA,EAAAA,CAAGuC,IAAI,CAAC,GAAA,CAAA,CAAA,CAAA;gCAEhE,MAAME,MAAAA,GAAShD,SAAU,CAAA,IAAI,EAAE,IAAI,CAAC2B,KAAK,EAAE,IAAI,CAACkB,KAAK,CAAA;gCACrDG,MAAO9D,CAAAA,OAAO,CAAC,CAAC+D,CAAG1H,EAAAA,CAAAA,GAAAA;oCACjBgF,EAAG2C,CAAAA,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE3H,CAAG,CAAA,CAAA,CAAC,EAAEgF,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACU,MAAM,EAAE7B,EAAG2B,CAAAA,KAAK,CAAC,IAAI,CAACO,EAAE,EAAE,IAAI,CAACH,EAAE,CAAIW,CAAAA,EAAAA,CAAAA,CAAAA;AAC1F,iCAAA,CAAA;AACF,6BAAA,CAAA;AACF,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;AACF;AACA;;;AAGC,MACDhE,IAAKkE,CAAAA,OAAmB,EAAEC,SAAoB,EAAE;AAC9CA,QAAAA,SAAAA,CAAUC,SAAS,CAAC,YAAc,EAAA,IAAI,CAAC9J,OAAO,CAAA;AAC9C6J,QAAAA,SAAAA,CAAUC,SAAS,CAAC,cAAgB,EAAA,IAAI,CAACnJ,SAAS,CAAA;AAClD,QAAA,IAAI,CAACZ,cAAc,CAAC4F,OAAO,CAAC,CAAC7C,GAAAA,EAAKd,CAAM6H,GAAAA,SAAAA,CAAUE,UAAU,CAAC,CAAC,SAAS,EAAE/H,GAAG,EAAEc,GAAAA,CAAAA,CAAAA;AAC9E,QAAA,IAAI,CAAChE,OAAO,CAACkH,UAAU,CAAC4D,OAAAA,CAAAA;AACxB,QAAA,IAAI,CAAC9K,OAAO,CAACmH,YAAY,CAAC,CAAG4D,EAAAA,SAAAA,CAAAA;QAC7B,IAAI,CAAC/K,OAAO,CAACqH,eAAe,CAAC,IAAI,CAACtF,aAAa,EAAE,EAAA,CAAA;AACnD;AACA;;;AAGC,MACDmJ,eAAgBC,CAAAA,KAAoB,EAAEC,KAAa,EAAEC,QAAAA,GAAWF,KAAMG,CAAAA,QAAQ,CAACC,UAAU,KAAK,QAAQ,EAAE;QACtG,MAAMrD,EAAAA,GAAKiD,MAAMG,QAAQ;AACzB,QAAA,IAAI,CAACnD,aAAa,CAACD,EAAAA,EAAIiD,KAAOC,EAAAA,KAAAA,CAAAA;QAC9BD,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC8C,KAAAA,CAAAA;QACzDD,KAAMM,CAAAA,SAAS,GAAGvD,EAAGwD,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGpD,qBAAqB,CAAC8C,KAAAA,CAAAA;AACrD,QAAA,IAAIC,QAAU,EAAA;YACZF,KAAMQ,CAAAA,eAAe,GAAGzD,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAACT,KAAAA,CAAAA;AAC5D;AACF;AACAU,IAAAA,aAAAA,CAAcf,SAAoB,EAAEgB,YAAe,GAAA,IAAI,EAAE;AACvDhB,QAAAA,SAAAA,CAAUC,SAAS,CAAC,YAAc,EAAA,IAAI,CAAC9J,OAAO,CAAA;AAC9C6J,QAAAA,SAAAA,CAAUC,SAAS,CAAC,eAAiB,EAAA,IAAI,CAACzJ,UAAU,CAAA;AACpDwJ,QAAAA,SAAAA,CAAUC,SAAS,CAAC,WAAa,EAAA,IAAI,CAACpG,MAAM,CAAA;AAC5C,QAAA,IAAImH,YAAc,EAAA;AAChBhB,YAAAA,SAAAA,CAAUC,SAAS,CAAC,iBAAmB,EAAA,IAAI,CAACxJ,YAAY,CAAA;AAC1D;AACF;AACA;;;;AAIC,MACDwK,WAAYb,CAAAA,KAA4B,EAAE7B,KAAkB,EAAE;QAC5D,MAAMpB,EAAAA,GAAKiD,MAAMG,QAAQ;AACzB,QAAA,MAAM9B,IAAO2B,GAAAA,KAAAA,CAAM1B,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGG,IAAI,CAACiB,KAAQ,CAAA,EAAA,CAAA,CAAA,CAAA;QACxD,OAAOpB,EAAAA,CAAGc,GAAG,CAACd,EAAAA,CAAGuC,IAAI,CAACvC,EAAAA,CAAGwC,KAAK,CAAClB,IAAAA,CAAKpM,CAAC,CAAG8K,EAAAA,EAAAA,CAAGwC,KAAK,CAAClB,IAAAA,CAAKyC,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC7L,SAAS,CAAA;AAC3E;AACA,wFACA8L,YAAAA,CAAaf,KAA4B,EAAEgB,EAAe,EAAE;QAC1D,MAAMjE,EAAAA,GAAKiD,MAAMG,QAAQ;QACzB,OAAO,IAAI,CAACc,kBAAkB,CAACjB,KAAAA,EAAOjD,EAAGmE,CAAAA,IAAI,CAACF,EAAAA,CAAAA,EAAKjE,EAAGoE,CAAAA,IAAI,CAACH,EAAAA,CAAAA,CAAAA;AAC7D;AACA;;;;AAIC,MACDC,mBAAmBjB,KAA4B,EAAEoB,KAAkB,EAAEC,KAAkB,EAAE;QACvF,MAAMtE,EAAAA,GAAKiD,MAAMG,QAAQ;AACzB,QAAA,MAAMmB,IAAO,GAAA;YAAC,IAAI,CAACxM,OAAO,CAAC,CAAA,CAAE,CAAC1C,MAAM,GAAG,IAAI,CAAC6C,SAAS;YAAE,IAAI,CAACH,OAAO,CAAC,CAAA,CAAE,CAACzC,MAAM,GAAG,IAAI,CAAC4C;AAAU,SAAA;QAC/F8H,EAAGwE,CAAAA,IAAI,CAAC,wBAA0B,EAAA;AAACxE,YAAAA,EAAAA,CAAGuC,IAAI,CAAC,OAAA,CAAA;AAAUvC,YAAAA,EAAAA,CAAGuC,IAAI,CAAC,OAAA;SAAS,EAAE,WAAA;YACtE,IAAI,CAAC/B,EAAE,CAACiE,EAAE,GAAGzE,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACuD,KAAK,EAAErE,EAAAA,CAAGuC,IAAI,CAACgC,IAAI,CAAC,CAAE,CAAA,EAAEA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA;YACxD,IAAI,CAAC/D,EAAE,CAACkE,EAAE,GAAG1E,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACwD,KAAK,EAAEtE,EAAAA,CAAGuC,IAAI,CAACgC,IAAI,CAAC,CAAE,CAAA,EAAEA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACxD,YAAA,IAAI,CAAC/D,EAAE,CAACmE,CAAC,GAAG3E,EAAAA,CAAG7K,GAAG,CAAC6K,EAAG4E,CAAAA,GAAG,CAAC,IAAI,CAACH,EAAE,EAAE,IAAI,CAACA,EAAE,CAAGzE,EAAAA,EAAAA,CAAG4E,GAAG,CAAC,IAAI,CAACF,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA;YACpE,IAAI,CAACzD,OAAO,CACVjB,EAAAA,CAAG6E,KAAK,CACN7E,EAAAA,CAAGmB,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAACd,EAAG8E,CAAAA,IAAI,CAAC9E,EAAG7K,CAAAA,GAAG,CAAC,IAAI,CAACwP,CAAC,EAAE,IAAQ,CAAA,CAAA,EAAA,GAAA,CAAA,EAAM,IAAI,CAACpB,SAAS,CAAC1C,EAAE,CAAC,GAAG5L,CAAC,CAAA,EACzE,CACA+K,EAAAA,EAAAA,CAAGwC,KAAK,CAACxC,GAAGyB,GAAG,CAAC,IAAI,CAACF,UAAU,CAACV,EAAE,CAAC,CAAG5L,CAAAA,CAAAA,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA;AAG/C,SAAA,CAAA;AACA,QAAA,OAAO+K,EAAG+E,CAAAA,cAAc,EAAGC,CAAAA,sBAAsB,CAACX,KAAOC,EAAAA,KAAAA,CAAAA;AAC3D;AACA;;;MAIAW,OAAAA,CAAQhC,KAA4B,EAAE7B,KAAkB,EAAE6C,EAAe,EAAEiB,QAAW,GAAA,IAAI,EAAE;QAC1F,MAAMlF,EAAAA,GAAKiD,MAAMG,QAAQ;QACzB,IAAI,CAAC+B,YAAY,CAACnF,EAAAA,CAAAA;QAClBA,EAAGwE,CAAAA,IAAI,CAAC,CAAC,WAAW,EAAEU,QAAW,GAAA,GAAA,GAAM,IAAI,EAAE;AAAClF,YAAAA,EAAAA,CAAGG,IAAI,CAAC,OAAA,CAAA;AAAUH,YAAAA,EAAAA,CAAGuC,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AAC9E,YAAA,IAAI,CAAC/B,EAAE,CAAC4E,EAAE,GAAG,IAAI,CAACC,UAAU,CAAC,IAAI,CAACjE,KAAK,EAAE,IAAI,CAAC6C,EAAE,CAAA;YAChDjE,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAAC7B,eAAe,CAAC5C,EAAE,CAAC,IAAI,CAACuE,EAAE,CAAG,EAAA,CAAA,CAAA;AAC/C,YAAA,IAAIF,QAAU,EAAA;AACZ,gBAAA,IAAI,CAAC1E,EAAE,CAAC+E,CAAC,GAAG,IAAI,CAACjC,aAAa,CAACzC,EAAE,CAAC,IAAI,CAACuE,EAAE,CAAA;AACzC,gBAAA,IAAI,CAACrE,GAAG,CACNf,EAAAA,CAAGoC,GAAG,CACJpC,EAAGgB,CAAAA,KAAK,CAAChB,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEtP,WAAc,CAAA,EAAA,CAAA,CAAA,EAC1C+J,EAAGyF,CAAAA,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAErP,aAAa,CAE9C,CAAA,CAAA,EAAA,WAAA;oBACE,IAAI,CAACsK,EAAE,CAACkF,GAAG,GAAG1F,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACC,KAAK,EAAEpB,EAAGwF,CAAAA,OAAO,CAACxF,EAAG2F,CAAAA,GAAG,CAAC,IAAI,CAACJ,CAAC,EAAExP,YAAeC,CAAAA,EAAAA,WAAAA,CAAAA,CAAAA;AAC1E,oBAAA,IAAI,CAACwK,EAAE,CAACoF,GAAG,GAAG5F,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACiE,GAAG,EAAE1F,EAAGlL,CAAAA,GAAG,CAAC,IAAI,CAAC4Q,GAAG,EAAE,CAAA,CAAA,CAAA;AAChD,oBAAA,IAAI,CAAC3E,GAAG,CAACf,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAACD,GAAG,EAAE,IAAI,CAACxE,KAAK,CAAG,EAAA,WAAA;AAC7CpB,wBAAAA,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAAC7B,eAAe,CAAC5C,EAAE,CAAC,IAAI,CAACwE,UAAU,CAAC,IAAI,CAACO,GAAG,EAAE,IAAI,CAAC3B,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA;AAC5E,qBAAA,CAAA;AACF,iBAAA,CAAA;AAEJ;AACF,SAAA,CAAA;AACAjE,QAAAA,EAAAA,CAAG+E,cAAc,EAAE,CAAC,CAAC,WAAW,EAAEG,QAAAA,GAAW,GAAM,GAAA,EAAA,CAAA,CAAI,CAAC,CAAClF,EAAGG,CAAAA,IAAI,CAACiB,KAAQ6C,CAAAA,EAAAA,EAAAA,CAAAA;AAC3E;AACA;;;;AAIC,MACD6B,QAAQ7C,KAA4B,EAAE7B,KAAkB,EAAE6C,EAAe,EAAE;QACzE,MAAMjE,EAAAA,GAAKiD,MAAMG,QAAQ;AACzB,QAAA,MAAM1D,OAAO,IAAI;QACjB,IAAI,CAACyF,YAAY,CAACnF,EAAAA,CAAAA;QAClBA,EAAGwE,CAAAA,IAAI,CAAC,aAAe,EAAA;AAACxE,YAAAA,EAAAA,CAAGG,IAAI,CAAC,OAAA,CAAA;AAAUH,YAAAA,EAAAA,CAAGuC,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;YACxD,IAAI,CAAC/B,EAAE,CAAC+E,CAAC,GAAG,IAAI,CAACjC,aAAa,CAACzC,EAAE,CAAC,IAAI,CAACwE,UAAU,CAAC,IAAI,CAACjE,KAAK,EAAE,IAAI,CAAC6C,EAAE,CAAA,CAAA;YACrE,IAAI,CAACzD,EAAE,CAACkF,GAAG,GAAG1F,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACC,KAAK,EAAEpB,EAAGwF,CAAAA,OAAO,CAACxF,EAAG2F,CAAAA,GAAG,CAAC,IAAI,CAACJ,CAAC,EAAExP,YAAeC,CAAAA,EAAAA,WAAAA,CAAAA,CAAAA;YAC1E,IAAI,CAACwK,EAAE,CAACU,IAAI,GAAGlB,EAAGwF,CAAAA,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEzP,YAAAA,CAAAA;AAClC,YAAA,IAAI,CAAC0K,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGlL,CAAAA,GAAG,CAAC,IAAI,CAAC4Q,GAAG,EAAE1F,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACF,UAAU,CAACV,EAAE,CAAC,CAAG5L,CAAAA,CAAAA,CAAC,EAAE,CAAK,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;AAC/F,YAAA,IAAI,CAACuL,EAAE,CAACuF,MAAM,GAAG/F,EAAGgG,CAAAA,KAAK,CAAChG,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACmD,EAAE,EAAEjE,EAAGuC,CAAAA,IAAI,CAACvC,EAAAA,CAAGwC,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACpM,CAAC,CAAG8K,EAAAA,EAAAA,CAAGwC,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACyC,CAAC,CAAA,CAAA,CAAA,CAAA;YAC7F,IAAI,CAACvD,EAAE,CAACqB,MAAM,GAAG7B,EAAGc,CAAAA,GAAG,CACrBd,EAAAA,CAAGuC,IAAI,CACLvC,GAAGwC,KAAK,CAACxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACP,IAAI,EAAElB,EAAGc,CAAAA,GAAG,CAACd,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAACV,IAAI,EAAExB,IAAAA,CAAKpH,YAAY,CAAGoH,EAAAA,IAAAA,CAAKpH,YAAY,CAAA,CAAA,CAAA,EACzF0H,EAAGwC,CAAAA,KAAK,CAACxC,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACV,IAAI,EAAExB,IAAKpH,CAAAA,YAAY,CAE9CoH,CAAAA,CAAAA,EAAAA,IAAAA,CAAKtH,SAAS,CAAA;YAEhB,IAAI,CAAC6I,OAAO,CACVjB,EAAGwD,CAAAA,IAAI,CACLxD,EAAAA,CAAG4B,GAAG,CACJ5B,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACU,MAAM,EAAE7B,EAAGuC,CAAAA,IAAI,CAAC7C,IAAAA,CAAKvH,OAAO,CAAA,CAAA,EAAI6H,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACiF,MAAM,EAAErG,IAAKxH,CAAAA,SAAS,CACrFwH,CAAAA,EAAAA,IAAAA,CAAKrH,UAAU,CAAA,EAEjB2H,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACkD,GAAG,CACjB1F,EAAAA,EAAAA,CAAGwC,KAAK,CAACxC,EAAGyF,CAAAA,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAErP,UAAa,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAG3D,SAAA,CAAA;QACA,OAAO8J,EAAAA,CAAG+E,cAAc,EAAGkB,CAAAA,WAAW,CAACjG,EAAGG,CAAAA,IAAI,CAACiB,KAAQ6C,CAAAA,EAAAA,EAAAA,CAAAA;AACzD;AACA;;;;MAKAiC,kBAAAA,CAAmB9E,KAAa,EAAE;AAChC,QAAA,MAAMhC,EAAK,GAAA,IAAI,CAACrH,OAAO,CAAC,CAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAACqC,aAAa,EAAE;AACvB,YAAA,IAAI,CAACA,aAAa,GAAG,IAAI,CAACtC,OAAO,CAACiE,eAAe,CAAC,cAAcqD,EAAG/J,CAAAA,MAAM,EAAE+J,EAAAA,CAAG9J,MAAM,EAAE;gBACpF2G,QAAU,EAAA,IAAA;gBACVC,UAAY,EAAA,KAAA;gBACZiK,cAAgB,EAAA;oBAAEC,SAAW,EAAA,SAAA;oBAAWC,SAAW,EAAA,SAAA;oBAAWC,SAAW,EAAA;AAAO;AAClF,aAAA,CAAA;AACA,YAAA,IAAI,CAAClM,aAAa,CAAC+B,IAAI,GAAG,sBAAA;AAC5B;AACA,QAAA,MAAM0G,SAAY,GAAA,IAAI,CAAC3D,YAAY,CAAC,OAAA,CAAA;AACpC2D,QAAAA,SAAAA,CAAU0D,QAAQ,CAAC,gBAAA,EAAkB1R,IAAKC,CAAAA,GAAG,CAACD,IAAKM,CAAAA,GAAG,CAAC,CAAA,EAAGiM,QAAQ,CAAI,CAAA,EAAA,IAAI,CAACrJ,OAAO,CAAC8C,MAAM,GAAG,CAAA,CAAA,CAAA;AAC5FgI,QAAAA,SAAAA,CAAUE,UAAU,CAAC,WAAa,EAAA,IAAI,CAAC3I,aAAa,CAAA;QACpD,IAAI,CAACtC,OAAO,CAACkH,UAAU,CAAC,IAAI,CAACD,UAAU,CAAC,OAAA,CAAA,CAAA;AACxC,QAAA,IAAI,CAACjH,OAAO,CAACmH,YAAY,CAAC,CAAG4D,EAAAA,SAAAA,CAAAA;AAC7B,QAAA,IAAI,CAAC/K,OAAO,CAACiI,OAAO,CAAClL,IAAAA,CAAKyJ,IAAI,CAACc,EAAAA,CAAG/J,MAAM,GAAGqC,aAAa7C,IAAKyJ,CAAAA,IAAI,CAACc,EAAG9J,CAAAA,MAAM,GAAGoC,UAAa,CAAA,EAAA,CAAA,CAAA;QAC3F,OAAO,IAAI,CAAC0C,aAAa;AAC3B;AACA;;;;AAIC,MACD,MAAMoM,QAA8C,GAAA;QAClD,MAAMpI,CAAAA,GAAI,IAAI,CAAC7F,cAAc;AAC7B,QAAA,MAAMkO,QAAQ,IAAIC,UAAAA,CAAW,IAAI,CAACzO,WAAW,GAAG,CAAA,CAAA;QAChD,MAAM0O,IAAAA,GAAO,IAAID,UAAAA,CAAWtI,CAAI,GAAA,EAAA,CAAA;QAChC,MAAMwI,KAAAA,GAAQ,IAAIF,UAAAA,CAAWtI,CAAI,GAAA,EAAA,CAAA;QACjC,MAAMyI,MAAAA,GAAS,IAAIH,UAAW,CAAA,EAAA,CAAA;QAC9B,MAAMI,OAAAA,CAAQC,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC1N,UAAU,CAAC2N,gBAAgB,CAACP,KAAAA,CAAAA;AACjC,YAAA,IAAI,CAAClN,KAAK,CAACyN,gBAAgB,CAACL,IAAAA,CAAAA;YAC5B,IAAI,CAACnN,MAAM,CAAC,IAAI,CAACQ,OAAO,CAAC,CAACgN,gBAAgB,CAACJ,KAAAA,CAAAA;AAC3C,YAAA,IAAI,CAACnN,WAAW,CAACuN,gBAAgB,CAACH,MAAAA;AACnC,SAAA,CAAA;AACD,QAAA,MAAMI,EAAK,GAAA,IAAIzK,WAAYiK,CAAAA,KAAAA,CAAMS,MAAM,CAAA;AACvC,QAAA,MAAMC,CAAI,GAAA,IAAI3K,WAAYmK,CAAAA,IAAAA,CAAKO,MAAM,CAAA;AACrC,QAAA,MAAMtM,CAAI,GAAA,IAAI4B,WAAYoK,CAAAA,KAAAA,CAAMM,MAAM,CAAA;AACtC,QAAA,MAAME,iBAAiB,IAAIC,UAAAA,CAAWR,OAAOK,MAAM,CAAC,CAACrR,cAAe,CAAA;AACpE,QAAA,MAAMyR,MAAmC,GAAA;YACvCC,SAAW,EAAA,CAAA;YACXC,cAAgB,EAAA,CAAA;YAChBC,UAAY,EAAA,CAAA;YACZC,WAAa,EAAA,CAAA;YACbC,aAAe,EAAA,CAAA;YACfC,QAAU,EAAA;AACZ,SAAA;QACA,MAAMC,IAAAA,GAAO,IAAInB,UAAWtI,CAAAA,CAAAA,CAAAA;QAC5B,IAAK,IAAIpD,IAAI,CAAGA,EAAAA,CAAAA,GAAInG,KAAKC,GAAG,CAACsS,cAAgBhJ,EAAAA,CAAAA,CAAAA,EAAIpD,CAAK,EAAA,CAAA;AACpD,YAAA,MAAM2C,CAAI/C,GAAAA,CAAC,CAAC/E,cAAAA,GAAiBuI,IAAIpD,CAAE,CAAA;AACnC,YAAA,IAAI2C,CAAKS,IAAAA,CAAAA,IAAKyJ,IAAI,CAAClK,EAAE,EAAE;AACrB2J,gBAAAA,MAAAA,CAAOE,cAAc,EAAA;aAChB,MAAA;gBACLK,IAAI,CAAClK,EAAE,GAAG,CAAA;AACZ;AACF;AACA2J,QAAAA,MAAAA,CAAOC,SAAS,GAAGM,IAAKC,CAAAA,MAAM,CAAC,CAACnQ,CAAG+K,EAAAA,CAAAA,GAAM/K,CAAK+K,IAAAA,CAAI,GAAA,CAAA,GAAI,CAAA,CAAI,EAAA,CAAA,CAAA;QAC1D,MAAMqF,KAAAA,GAAQ,IAAIvL,WAAY4B,CAAAA,CAAAA,CAAAA;QAC9B,IAAK,IAAIgH,KAAK,CAAGA,EAAAA,EAAAA,GAAK,IAAI,CAACnN,WAAW,EAAEmN,EAAM,EAAA,CAAA;YAC5C,MAAMG,CAAAA,GAAI0B,EAAE,CAAC7B,EAAG,CAAA;AAChB,YAAA,IAAIG,IAAItP,WAAa,EAAA;AACnB,gBAAA,MAAM0H,IAAI4H,CAAIzP,GAAAA,YAAAA;AACd,gBAAA,IAAI6H,KAAKS,CAAK+I,IAAAA,CAAC,CAACxJ,CAAAA,GAAI,EAAE,KAAKyH,EAAAA,IAAM,EAAE+B,CAAC,CAACxJ,CAAAA,GAAI,IAAI,CAAE,CAAA,GAAGvH,cAAa,CAAI,EAAA;AACjEkR,oBAAAA,MAAAA,CAAOG,UAAU,EAAA;AACnB,iBAAA,MAAO,IAAI,EAAEM,KAAK,CAACpK,CAAAA,CAAE,KAAK,CAAG,EAAA;AAC3B2J,oBAAAA,MAAAA,CAAOI,WAAW,EAAA;AACpB;AACF,aAAA,MAAO,IAAI,EAAEnC,CAAAA,GAAIrP,UAAS,CAAI,EAAA;AAC5BoR,gBAAAA,MAAAA,CAAOM,QAAQ,EAAA;AACjB;AACF;AACA,QAAA,IAAK,IAAIxG,KAAAA,GAAQ,IAAI,CAACxI,gBAAgB,EAAEwI,KAAQ,GAAA,IAAI,CAACrJ,OAAO,CAAC8C,MAAM,EAAEuG,KAAS,EAAA,CAAA;YAC5E,IAAK,IAAIpG,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAACU,UAAU,CAAC0F,KAAAA,CAAAA,EAAQpG,CAAK,EAAA,CAAA;AAC/C,gBAAA,IAAI,EAAEiM,EAAE,CAAC,IAAI,CAACjP,aAAa,CAACoJ,KAAM,CAAA,GAAGpG,CAAE,CAAA,GAAG/E,WAAU,CAAI,EAAA;AACtDqR,oBAAAA,MAAAA,CAAOK,aAAa,EAAA;AACtB;AACF;AACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC9O,SAAS,EAAE;;AAEnByO,YAAAA,MAAAA,CAAOM,QAAQ,GAAG,CAAA;AACpB;QACA,OAAON,MAAAA;AACT;AACQ5L,IAAAA,UAAAA,CAAW0F,KAAa,EAAE;AAChC,QAAA,OAAO,IAAI,CAACrJ,OAAO,CAACqJ,MAAM,CAAC/L,MAAM,GAAG,IAAI,CAAC0C,OAAO,CAACqJ,KAAAA,CAAM,CAAC9L,MAAM;AAChE;AACQ8H,IAAAA,WAAAA,CAAYe,KAAa,EAAE;QACjC,MAAMwG,CAAAA,GAAI,IAAI,CAAC1L,UAAU;AACzB0L,QAAAA,CAAAA,CAAE9F,GAAG,CAAC;AAAC,YAAA,IAAI,CAAC5G,WAAW;AAAE,YAAA,IAAI,CAACM,cAAc;AAAE4F,YAAAA,KAAAA;AAAO,YAAA,IAAI,CAACzF;SAAY,EAAE,CAAA,CAAA;AACxEiM,QAAAA,CAAAA,CAAE9F,GAAG,CAAC;YAAC,IAAI,CAAC9G,OAAO,CAAC8C,MAAM;AAAE,YAAA,IAAI,CAACpC,YAAY;AAAE,YAAA,IAAI,CAACD,aAAa;AAAE,YAAA,IAAI,CAACI;SAAiB,EAAE,CAAA,CAAA;AAC3F+L,QAAAA,CAAAA,CAAE9F,GAAG,CAAC;AAAC,YAAA,IAAI,CAACvG,YAAY;AAAE,YAAA,IAAI,CAACF,SAAS;AAAE,YAAA,IAAI,CAACD,OAAO;AAAE,YAAA,IAAI,CAACD;SAAU,EAAE,CAAA,CAAA;AACzEyM,QAAAA,CAAAA,CAAE9F,GAAG,CAAC;AAAC,YAAA,IAAI,CAACxG,UAAU;AAAE,YAAA,CAAA;YAAG,IAAI,CAACQ,SAAS,GAAG,CAAI,GAAA,CAAA;AAAG,YAAA,IAAI,CAACF;SAAe,EAAE,EAAA,CAAA;QACzE,IAAI,CAACZ,OAAO,CAAC4G,OAAO,CAAC,CAAC/D,CAAGI,EAAAA,CAAAA,GAAM2J,CAAE9F,CAAAA,GAAG,CAAC;gBAAC,IAAI,CAAC7G,aAAa,CAACgD,CAAE,CAAA;AAAEJ,gBAAAA,CAAAA,CAAEvF,MAAM;AAAEuF,gBAAAA,CAAAA,CAAEtF,MAAM;AAAE,gBAAA;AAAE,aAAA,EAAE,KAAK0F,CAAI,GAAA,CAAA,CAAA,CAAA;AAC9F,QAAA,IAAI,CAAChC,OAAO,CAACgE,aAAa,CAAC,CAAG2H,EAAAA,CAAAA,CAAAA;AAChC;IACQtF,SAAY,GAAA;QAClB,IAAI,CAACnF,aAAa,GAAG,IAAA;AACrB,QAAA,MAAM8N,gBAAgB7Q,YAAe,GAAA,CAAA;AACrC,QAAA,IAAI,CAACW,OAAO,CAACmQ,UAAU,CAAC,IAAI,CAACrO,SAAS,EAAE,IAAI,CAAC+C,cAAc,EAAE,GAAG,CAAGqL,EAAAA,aAAAA,CAAAA;AACnE,QAAA,IAAI,CAAClQ,OAAO,CAACmQ,UAAU,CAAC,IAAI,CAACxO,WAAW,EAAE,IAAI,CAACkD,cAAc,EAAE,GAAGqL,aAAe,EAAA,EAAA,CAAA;AACjF,QAAA,IAAI,CAAClQ,OAAO,CAACmQ,UAAU,CAAC,IAAI,CAACvL,MAAM,EAAE,IAAI,CAACC,cAAc,EAAE,CAAA,EAAGqL,gBAAgB,EAAI,EAAA,EAAA,CAAA;AACjF,QAAA,IAAI,CAACrL,cAAc,CAChBqK,gBAAgB,EAChBkB,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAAAA;YACL,MAAM5T,CAAAA,GAAI,IAAIiI,WAAY2L,CAAAA,IAAAA,CAAKjB,MAAM,EAAEiB,IAAAA,CAAKC,UAAU,EAAEjR,YAAAA,CAAAA;YACxD,MAAMyD,CAAAA,GAAI,IAAIyM,UAAWc,CAAAA,IAAAA,CAAKjB,MAAM,EAAEiB,IAAAA,CAAKC,UAAU,GAAGJ,aAAe,EAAA,CAAA,CAAA;YACvE,MAAMK,KAAAA,GAAQ,IAAI5L,YAAAA,CAAa0L,IAAKjB,CAAAA,MAAM,EAAEiB,IAAKC,CAAAA,UAAU,GAAGJ,aAAAA,GAAgB,EAAI,EAAA,CAAA,CAAA;YAClF,IAAI,CAAC/N,MAAM,GAAG;gBACZqO,SAAW/T,EAAAA,CAAC,CAACsC,gBAAiB,CAAA;gBAC9B0R,SAAWhU,EAAAA,CAAC,CAACuC,gBAAiB,CAAA;gBAC9B0R,OAASjU,EAAAA,CAAC,CAACwC,cAAe,CAAA;gBAC1B0R,QAAUlU,EAAAA,CAAC,CAACyC,eAAgB,CAAA;gBAC5B0R,OAASnU,EAAAA,CAAC,CAAC2C,cAAe,CAAA;gBAC1ByR,KAAO9T,EAAAA,IAAAA,CAAKC,GAAG,CAACP,CAAC,CAACgC,MAAO,CAAA,EAAE,IAAI,CAACiC,aAAa,CAAA;gBAC7CoQ,OAASrU,EAAAA,CAAC,CAAC0C,cAAe,CAAA;AAC1B4R,gBAAAA,SAAAA,EAAWhU,KAAKM,GAAG,CAAC,CAAGyF,EAAAA,CAAC,CAACjF,cAAe,CAAA,CAAA;gBACxCmT,OAASlO,EAAAA,CAAC,CAAC/E,cAAe,CAAA;gBAC1BkT,OAASV,EAAAA,KAAK,CAAC,CAAE;AACnB,aAAA;AACF,SAAA,CAAA,CACCW,KAAK,CAAC,IAAO,EAAA,CAAA,CACbC,OAAO,CAAC,IAAA;YACP,IAAI,CAAC/O,aAAa,GAAG,KAAA;AACvB,SAAA,CAAA;AACJ;AACQqE,IAAAA,QAAAA,CAASpC,IAAY,EAAElH,CAAS,EAAEC,CAAAA,GAAI,CAAC,EAAE;QAC/C,IAAI,CAAC4C,OAAO,CAACkH,UAAU,CAAC,IAAI,CAACD,UAAU,CAAC5C,IAAAA,CAAAA,CAAAA;QACxC,IAAI,CAACrE,OAAO,CAACmH,YAAY,CAAC,CAAG,EAAA,IAAI,CAACC,YAAY,CAAC/C,IAAAA,CAAAA,CAAAA;AAC/C,QAAA,IAAI,CAACrE,OAAO,CAACiI,OAAO,CAAC9K,GAAGC,CAAG,EAAA,CAAA,CAAA;AAC7B;AACQ6J,IAAAA,UAAAA,CAAW5C,IAAY,EAAE;AAC/B,QAAA,IAAIyG,UAAU,IAAI,CAAC9I,SAAS,CAACoP,GAAG,CAAC/M,IAAAA,CAAAA;AACjC,QAAA,IAAI,CAACyG,OAAS,EAAA;YACZA,OAAU,GAAA,IAAI,CAACuG,YAAY,CAAChN,IAAAA,CAAAA;AAC5B,YAAA,IAAI,CAACrC,SAAS,CAAC+E,GAAG,CAAC1C,IAAMyG,EAAAA,OAAAA,CAAAA;AAC3B;QACA,OAAOA,OAAAA;AACT;AACQ1D,IAAAA,YAAAA,CAAa/C,IAAY,EAAE;AACjC,QAAA,IAAI0G,YAAY,IAAI,CAAC9I,WAAW,CAACmP,GAAG,CAAC/M,IAAAA,CAAAA;AACrC,QAAA,IAAI,CAAC0G,SAAW,EAAA;AACd,YAAA,MAAMD,OAAU,GAAA,IAAI,CAAC7D,UAAU,CAAC5C,IAAAA,CAAAA;YAChC0G,SAAY,GAAA,IAAI,CAAC/K,OAAO,CAACsR,eAAe,CAACxG,OAAAA,CAAQyG,gBAAgB,CAAC,CAAE,CAAA,CAAA;AACpE,YAAA,MAAMC,SAASC,MAAOpN,CAAAA,IAAI,CAACA,IAAKtB,CAAAA,MAAM,GAAG,CAAE,CAAA,CAAA;AAC3C,YAAA,MAAM2O,SAAuB,GAAA;gBAC3BjI,UAAY,EAAA,IAAI,CAACvI,OAAO;gBACxByQ,SAAW,EAAA,IAAI,CAACvQ,MAAM;gBACtBoK,aAAe,EAAA,IAAI,CAACjK,UAAU;gBAC9BoK,eAAiB,EAAA,IAAI,CAACnK,YAAY;gBAClCoQ,QAAU,EAAA,IAAI,CAACnQ,KAAK;gBACpBoQ,cAAgB,EAAA,IAAI,CAAClQ,WAAW;gBAChCmQ,YAAc,EAAA,IAAI,CAAClQ,SAAS;gBAC5BwG,YAAc,EAAA,IAAI,CAACvG,SAAS;gBAC5BkQ,YAAc,EAAA,IAAI,CAACjQ,SAAS;gBAC5BkQ,gBAAkB,EAAA,IAAI,CAACjQ,aAAa;gBACpC0J,SAAW,EAAA,IAAI,CAAC7G;AAClB,aAAA;YACA,IAAI4M,MAAAA,KAAW,CAAKA,IAAAA,MAAAA,KAAW,CAAG,EAAA;AAChCE,gBAAAA,SAAAA,CAAUO,SAAS,GAAG,IAAI,CAACvQ,MAAM,CAAC8P,MAAO,CAAA;AACzCE,gBAAAA,SAAAA,CAAUQ,aAAa,GAAG,IAAI,CAACxQ,MAAM,CAAC8P,SAAS,CAAE,CAAA;AACnD;;;AAGA,YAAA,MAAMW,MAASrH,GAAAA,OAAAA,CAAQyG,gBAAgB,CAAC,CAAE,CAAA;YAC1C,KAAK,MAAM,CAACa,OAASC,EAAAA,GAAAA,CAAI,IAAIC,MAAOC,CAAAA,OAAO,CAACb,SAAY,CAAA,CAAA;AACtD,gBAAA,IAAIS,OAAOK,OAAO,GAAGJ,OAAAA,CAAQ,IAAID,MAAOI,CAAAA,OAAO,CAACE,IAAI,CAAC,CAAChF,CAAAA,GAAMA,CAAEpJ,CAAAA,IAAI,KAAK+N,OAAU,CAAA,EAAA;oBAC/ErH,SAAUC,CAAAA,SAAS,CAACoH,OAASC,EAAAA,GAAAA,CAAAA;AAC/B;AACF;AACA,YAAA,IAAI,CAACpQ,WAAW,CAAC8E,GAAG,CAAC1C,IAAM0G,EAAAA,SAAAA,CAAAA;AAC7B;QACA,OAAOA,SAAAA;AACT;;AAEQ5C,IAAAA,aAAAA,CAAcD,EAAkB,EAAEiD,KAAoB,EAAEC,KAAAA,GAAQ,CAAC,EAAE;;;;;;QAMzED,KAAM1B,CAAAA,UAAU,GAAGvB,EAAGwK,CAAAA,KAAK,CAAC,CAAIhV,GAAAA,UAAAA,CAAW,EAAGiV,CAAAA,aAAa,CAACvH,KAAAA,CAAAA;AAC9D;AACQ5C,IAAAA,aAAAA,CAAcN,EAAkB,EAAE;QACxCA,EAAGwE,CAAAA,IAAI,CAAC,aAAe,EAAA;AAACxE,YAAAA,EAAAA,CAAGG,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AACtC,YAAA,IAAI,CAACK,EAAE,CAACY,KAAK,GAAGpB,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;YACxB,IAAI,CAAC2B,IAAI,CAAC9B,EAAAA,CAAGG,IAAI,CAAC,GAAA,CAAA,EAAM,GAAG3K,UAAY,EAAA,WAAA;gBACrC,IAAI,CAACuL,GAAG,CACNf,EAAAA,CAAG0K,EAAE,CACH1K,EAAAA,CAAG2K,gBAAgB,CAAC,IAAI,CAAC/P,CAAC,EAAE,IAAI,CAAC2G,UAAU,CAACV,EAAE,CAAC,GAAG5L,CAAC,CAAA,EACnD+K,GAAGqC,QAAQ,CAAC,IAAI,CAAC+C,EAAE,EAAE,IAAI,CAAC7D,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACvG,CAAC,EAAE,CAAA,CAAA,CAAA,CAAI3F,CAAC,CAE9D,CAAA,EAAA,WAAA;AACE,oBAAA,IAAI,CAAC2V,MAAM,EAAA;AACb,iBAAA,CAAA;AAEF,gBAAA,IAAI,CAACxJ,KAAK,GAAG,IAAI,CAACxG,CAAC;AACrB,aAAA,CAAA;AACA,YAAA,IAAI,CAACqG,OAAO,CAAC,IAAI,CAACG,KAAK,CAAA;AACzB,SAAA,CAAA;AACF;AACQ+D,IAAAA,YAAAA,CAAanF,EAAkB,EAAE;QACvCA,EAAGwE,CAAAA,IAAI,CAAC,YAAc,EAAA;AAACxE,YAAAA,EAAAA,CAAGG,IAAI,CAAC,OAAA,CAAA;AAAUH,YAAAA,EAAAA,CAAGuC,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AACvD,YAAA,IAAI,CAAC/B,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGlL,CAAAA,GAAG,CAAC,IAAI,CAACsM,KAAK,EAAEpB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACF,UAAU,CAACV,EAAE,CAAC,CAAG5L,CAAAA,CAAAA,CAAC,EAAE,CAAK,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;YACjG,IAAI,CAACuL,EAAE,CAACqK,KAAK,GAAG7K,GAAGuC,IAAI,CAACvC,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACpM,CAAC,CAAA,EAAG8K,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACyC,CAAC,CAAA,CAAA;AACnE,YAAA,IAAI,CAACvD,EAAE,CAACsK,EAAE,GAAG9K,GAAG2B,KAAK,CACnB3B,EAAG6E,CAAAA,KAAK,CAAC7E,EAAG7E,CAAAA,KAAK,CAAC6E,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACmD,EAAE,EAAE,IAAI,CAAC4G,KAAK,CAAI7K,CAAAA,EAAAA,EAAAA,CAAGuC,IAAI,CAAC,CAAA,CAAA,EAAIvC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACoJ,KAAK,EAAE7K,EAAAA,CAAGuC,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAEzF,YAAA,IAAI,CAACtB,OAAO,CAACjB,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACG,IAAI,CAACrM,CAAC,EAAE+K,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACgK,EAAE,CAAC5V,CAAC,EAAE,IAAI,CAACoM,IAAI,CAACpM,CAAC,CAAG,EAAA,IAAI,CAAC4V,EAAE,CAAC7V,CAAC,CAAA,CAAA,CAAA;AACnF,SAAA,CAAA;AACF;AACQ8V,IAAAA,UAAAA,CAAW/K,EAAkB,EAAE;QACrCA,EAAGwE,CAAAA,IAAI,CAAC,UAAY,EAAA;AAACxE,YAAAA,EAAAA,CAAGG,IAAI,CAAC,MAAA,CAAA;AAASH,YAAAA,EAAAA,CAAGG,IAAI,CAAC,MAAA;SAAQ,EAAE,WAAA;AACtD,YAAA,IAAI,CAACK,EAAE,CAACwK,MAAM,GAAGhL,GAAGsF,SAAS,CAAC,IAAI,CAACqE,cAAc,CAAC9I,EAAE,CAAC,IAAI,CAACoK,IAAI,CAAG,EAAA,CAAA,CAAA;YACjE,IAAI,CAAClK,GAAG,CAACf,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC2I,MAAM,EAAEhL,GAAGkL,GAAG,CAAC,IAAI,CAAC3J,UAAU,CAACV,EAAE,CAAC,CAAG3L,CAAAA,CAAAA,CAAC,CAAI,CAAA,EAAA,WAAA;AAClE,gBAAA,IAAI,CAAC6U,SAAS,CAACoB,KAAK,CAClBnL,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACmK,IAAI,EAAE,IAAI,CAAC1J,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC,CAAG8K,EAAAA,EAAAA,CAAGG,IAAI,CAAC,IAAI,CAAC6K,MAAM,CACtE,CAAA,EAAA,IAAI,CAACtJ,IAAI,CAAA;AAEb,aAAA,CAAA;AACF,SAAA,CAAA;AACF;AACQyH,IAAAA,YAAAA,CAAahN,IAAY,EAAc;AAC7C,QAAA,MAAMuD,OAAO,IAAI;AACjB,QAAA,MAAM0L,IAAOjP,GAAAA,IAAAA,CAAKkP,OAAO,CAAC,OAAS,EAAA,EAAA,CAAA;QACnC,MAAMC,MAAAA,GAAS,CAACtL,EAAoBiD,EAAAA,KAAAA,GAAAA;YAClCvD,IAAKO,CAAAA,aAAa,CAACD,EAAIiD,EAAAA,KAAAA,CAAAA;AACzB,SAAA;QACA,MAAM2D,KAAAA,GAAQ,CAAC5G,EAAoBiD,EAAAA,KAAAA,GAAAA;YACjCA,KAAM8G,CAAAA,SAAS,GAAG/J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;YAC7CV,KAAM0G,CAAAA,cAAc,GAAG3J,EAAGuL,CAAAA,UAAU,CAAC,CAAE,CAAA,EAAA,CAAG5H,aAAa,CAAC,CAAA,CAAA;AAC1D,SAAA;QACA,MAAMf,OAAAA,GAAU,CACd9C,aACA0L,EAAAA,IAAAA,GAEA,IAAI,CAAC1T,OAAO,CAAC+H,mBAAmB,CAAC;gBAC/BN,KAAO,EAAA,CAAC,eAAe,EAAEpD,IAAM,CAAA,CAAA;AAC/B2D,gBAAAA,aAAAA;AACAC,gBAAAA,OAAAA,CAAAA,CAAQC,EAAE,EAAA;AACRsL,oBAAAA,MAAAA,CAAOtL,IAAI,IAAI,CAAA;AACfwL,oBAAAA,IAAAA,CAAKxL,IAAI,IAAI,CAAA;AACf;AACF,aAAA,CAAA;AACF,QAAA,MAAMyL,SAAY,GAAA,CAACzL,EAAoBiD,EAAAA,KAAAA,GACrCjD,EAAGsF,CAAAA,SAAS,CAACrC,KAAAA,CAAM0G,cAAc,CAAC9I,EAAE,CAAClL,cAAiB,CAAA,EAAA,CAAA,CAAA;QACxD,OAAQyV,IAAAA;YACN,KAAK,OAAA;AACH,gBAAA,OAAOxI,OAAQ,CAAA;AAACpL,oBAAAA,KAAAA;AAAO,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;oBACjCA,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBACjDV,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBACvDV,KAAM0G,CAAAA,cAAc,GAAG3J,EAAGuL,CAAAA,UAAU,CAAC,CAAE,CAAA,EAAA,CAAG5H,aAAa,CAAC,CAAA,CAAA;AACxD3D,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAACxF,CAAC,GAAG,IAAI,CAAC0F,SAAS,CAACgL,kBAAkB,CAACzW,CAAC;AAC/C,wBAAA,IAAI,CAAC8L,GAAG,CAACf,GAAGqC,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE,IAAI,CAACuG,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG5L,CAAC,CAAG,EAAA,WAAA;4BACrD,IAAI,CAACqO,aAAa,CAAC6H,KAAK,CAAC,IAAI,CAACnQ,CAAC,EAAEgF,EAAGG,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAC3C,yBAAA,CAAA;wBACA,IAAI,CAACY,GAAG,CAACf,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE7D,YAAe,CAAA,EAAA,WAAA;4BAC1C6I,EAAG2L,CAAAA,cAAc,CAAC,IAAI,CAAC9B,YAAY,CAAChJ,EAAE,CAAC,IAAI,CAAC7F,CAAC,CAAG,EAAA,CAAA,CAAA;AAClD,yBAAA,CAAA;wBACA,IAAI,CAAC+F,GAAG,CAACf,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;4BAC/BgF,EAAG2L,CAAAA,cAAc,CAAC,IAAI,CAAChC,cAAc,CAAC9I,EAAE,CAAC,IAAI,CAAC7F,CAAC,CAAG,EAAA,CAAA,CAAA;AACpD,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;;YAEF,KAAK,YAAA;AACH,gBAAA,OAAO4H,OAAQ,CAAA;AAACpL,oBAAAA,KAAAA;AAAO,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;oBACjCA,KAAMwG,CAAAA,SAAS,GAAGzJ,EAAGwD,CAAAA,IAAI,CAAC/N,SAAU,CAAA,EAAA,CAAGgV,aAAa,CAAC,CAAA,CAAA;oBACrDxH,KAAMyG,CAAAA,QAAQ,GAAG1J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;AAC5CjE,oBAAAA,IAAAA,CAAKY,aAAa,CAACN,EAAAA,CAAAA;AACnBA,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAAC7C,CAAC,GAAG,IAAI,CAAC+C,SAAS,CAACgL,kBAAkB,CAACzW,CAAC;AAC/C,wBAAA,IAAI,CAAC8L,GAAG,CAACf,GAAGqC,QAAQ,CAAC,IAAI,CAAC1E,CAAC,EAAE,IAAI,CAAC4D,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC,CAAG,EAAA,WAAA;4BACrD,IAAI,CAACsL,EAAE,CAACoL,KAAK,GAAG,IAAI,CAAClC,QAAQ,CAAC7I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACnD,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AAC3D,4BAAA,IAAI,CAACoD,GAAG,CAACf,EAAAA,CAAGyF,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACoG,KAAK,EAAExV,iBAAiB,CAAI,CAAA,EAAA,WAAA;AAC/D,gCAAA,IAAI,CAACoK,EAAE,CAACqL,KAAK,GAAG,IAAI,CAACnC,QAAQ,CAAC7I,EAAE,CAACb,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACnD,CAAC,EAAE,CAAA,CAAA,CAAA;gCAChD,IAAI,CAAC6C,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACE,WAAW,CAAC,IAAI,CAACwK,KAAK,CAAG,EAAA,CAAA,CAAA,CAAA;AACvE,gCAAA,IAAI,CAACrL,EAAE,CAACgB,KAAK,GAAGxB,GAAGyB,GAAG,CAAC,IAAI,CAACoK,KAAK,EAAE,IAAI,CAACvK,IAAI,CAACrM,CAAC,CAAA;gCAC9C,IAAI,CAACuL,EAAE,CAACkB,IAAI,GAAG1B,GAAGuC,IAAI,CACpBvC,EAAGwC,CAAAA,KAAK,CAACxC,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACD,KAAK,EAAExB,EAAAA,CAAGc,GAAG,CAACd,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACJ,KAAK,EAAE,IAAI,CAACF,IAAI,CAACpM,CAAC,CAAA,EAAG,IAAI,CAACoM,IAAI,CAACpM,CAAC,CAC/E8K,CAAAA,CAAAA,EAAAA,EAAAA,CAAGwC,KAAK,CAACxC,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAACJ,KAAK,EAAE,IAAI,CAACF,IAAI,CAACpM,CAAC,CAAA,CAAA,CAAA;;;;AAKzC,gCAAA,IAAI,CAACsL,EAAE,CAACsL,MAAM,GAAG9L,EAAG4B,CAAAA,GAAG,CACrB5B,EAAAA,CAAGwC,KAAK,CAACxC,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACI,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAGkD,CAAC,EAAE,KACzC/D,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACjB,UAAU,CAACV,EAAE,CAAC,GAAGkL,CAAC,CAAA,CAAA;AAElC,gCAAA,IAAI,CAACvL,EAAE,CAACwL,EAAE,GAAGhM,EAAAA,CAAG4B,GAAG,CACjB5B,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACC,IAAI,EAAE1B,EAAGuC,CAAAA,IAAI,CAAC,IAAI,CAACuJ,MAAM,CAAA,CAAA,EACrC9L,GAAGuC,IAAI,CAACvC,GAAGwC,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACpM,CAAC,CAAA,EAAG8K,GAAGwC,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACyC,CAAC,CAAA,CAAA,CAAA;gCAErD,IAAI,CAACvD,EAAE,CAACyL,EAAE,GAAGjM,EAAG4B,CAAAA,GAAG,CACjB5B,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACO,IAAI,EAAE1B,EAAAA,CAAGuC,IAAI,CAACvC,EAAAA,CAAGmB,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC2K,MAAM,KAC/C9L,EAAGuC,CAAAA,IAAI,CAACvC,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACpM,CAAC,GAAG8K,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAAClB,IAAI,CAACyC,CAAC,CAAA,CAAA,CAAA;AAErD,gCAAA,IAAI,CAACjC,IAAI,CAAC9B,EAAGG,CAAAA,IAAI,CAAC,GAAM,CAAA,EAAA,CAAA,EAAG,IAAI,CAACoB,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC,EAAE,WAAA;AAClD,oCAAA,IAAI,CAACsL,EAAE,CAAC0L,IAAI,GAAG,IAAI,CAACzC,SAAS,CAAC5I,EAAE,CAAC,IAAI,CAACjC,CAAC,CAAA;AACvC,oCAAA,IAAI,CAACmC,GAAG,CACNf,EAAGoC,CAAAA,GAAG,CACJpC,EAAG+G,CAAAA,GAAG,CAAC/G,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC2J,EAAE,EAAE,IAAI,CAACE,IAAI,CAACC,EAAE,CACxCnM,CAAAA,EAAAA,EAAAA,CAAG+G,GAAG,CAAC/G,GAAG6F,WAAW,CAAC,IAAI,CAACoG,EAAE,EAAE,IAAI,CAACC,IAAI,CAACE,EAAE,CAE7C,CAAA,CAAA,EAAA,WAAA;wCACE,IAAI,CAACR,KAAK,GAAG5L,EAAAA,CAAGqM,MAAM,CAAC,IAAI,CAACT,KAAK,EAAEvV,UAAAA,CAAAA;AACrC,qCAAA,CAAA;AAEJ,iCAAA,CAAA;AACA,gCAAA,IAAI,CAACqT,QAAQ,CAACyB,KAAK,CAACnL,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACnD,CAAC,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAACiO,KAAK,CAAA;AAC9D,6BAAA,CAAA;AACF,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,gBAAA;AACH,gBAAA,OAAOhJ,OAAQ,CAAA;AAACpL,oBAAAA,KAAAA;AAAO,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;AACjC2D,oBAAAA,KAAAA,CAAM5G,EAAIiD,EAAAA,KAAAA,CAAAA;oBACVA,KAAM+G,CAAAA,aAAa,GAAGhK,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC,CAAA,CAAA;oBACzD6C,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBACjDV,KAAMQ,CAAAA,eAAe,GAAGzD,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBAC1DV,KAAMyG,CAAAA,QAAQ,GAAG1J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBAC5CV,KAAM/C,CAAAA,YAAY,GAAGF,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBAChDV,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;AACvDjE,oBAAAA,IAAAA,CAAKqL,UAAU,CAAC/K,EAAAA,CAAAA;AAChBA,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAACxF,CAAC,GAAG,IAAI,CAAC0F,SAAS,CAACgL,kBAAkB,CAACzW,CAAC;AAC/C,wBAAA,IAAI,CAACuL,EAAE,CAACpC,CAAC,GAAG,IAAI,CAACmD,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC;AACnC,wBAAA,IAAI,CAAC6L,GAAG,CAACf,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE,IAAI,CAACoD,CAAC,CAAG,EAAA,WAAA;4BACpC,IAAI,CAACoC,EAAE,CAAC7C,CAAC,GAAG,IAAI,CAACqM,aAAa,CAACnJ,EAAE,CAACb,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAEvI,cAAAA,CAAAA,EAAiB,IAAI,CAACmF,CAAC,CAAA,CAAA;4BAC/E,IAAI,CAACwF,EAAE,CAAC2G,CAAC,GAAGnH,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACnD,CAAC,EAAE,CAAA,CAAA;AAC3B,4BAAA,IAAI,CAAC6C,EAAE,CAACoL,KAAK,GAAG,IAAI,CAAClC,QAAQ,CAAC7I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,CAAA;AAChD,4BAAA,IAAI,CAAC3G,EAAE,CAAC8L,IAAI,GAAGtM,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AACvB,4BAAA,IAAI,CAACK,EAAE,CAAC+L,OAAO,GAAG,KAAA;AAClB,4BAAA,IAAI,CAACxL,GAAG,CAACf,EAAAA,CAAGyF,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACoG,KAAK,EAAExV,iBAAiB,CAAI,CAAA,EAAA,WAAA;AAC/D,gCAAA,IAAI,CAACoK,EAAE,CAACqL,KAAK,GAAG,IAAI,CAACnC,QAAQ,CAAC7I,EAAE,CAAC,IAAI,CAACsG,CAAC,CAAA;gCACvC,IAAI,CAAC3G,EAAE,CAACgM,YAAY,GAAGxM,EAAG6F,CAAAA,WAAW,CACnC7F,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAAC7B,eAAe,CAAC5C,EAAE,CAAC,IAAI,CAACgL,KAAK,CAAA,EAAG,CAClD,CAAA,EAAA,CAAA,CAAA;AAEF,gCAAA,IAAI,CAACrL,EAAE,CAACiM,GAAG,GAAGzM,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACF,UAAU,CAACV,EAAE,CAAC,CAAGkD,CAAAA,CAAAA,CAAC,EAAE,IAAI,CAAC2F,QAAQ,CAAC7I,EAAE,CAACb,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;;AAE9E,gCAAA,IAAI,CAAC3G,EAAE,CAAC8H,SAAS,GAAGtI,EAAAA,CAAG0K,EAAE,CACvB1K,EAAAA,CAAG0K,EAAE,CAAC,IAAI,CAAC8B,YAAY,EAAExM,EAAGyF,CAAAA,QAAQ,CAACzF,EAAGwF,CAAAA,OAAO,CAAC,IAAI,CAACoG,KAAK,EAAEtV,cAAc,CAC1E0J,CAAAA,CAAAA,EAAAA,EAAAA,CAAG0M,aAAa,CAAC,IAAI,CAACD,GAAG,EAAE,IAAI,CAAClL,UAAU,CAACV,EAAE,CAAC,GAAGkL,CAAC,CAAA,CAAA;AAEpD,gCAAA,IAAI,CAAChL,GAAG,CACNf,GAAG0K,EAAE,CACH,IAAI,CAACpC,SAAS,EACdtI,EAAAA,CAAGoC,GAAG,CACJpC,EAAAA,CAAG0M,aAAa,CAAC,IAAI,CAACD,GAAG,EAAE,IAAI,CAAClL,UAAU,CAACV,EAAE,CAAC,CAAGkL,CAAAA,CAAAA,CAAC,GAClD/L,EAAGgB,CAAAA,KAAK,CAAChB,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACoG,KAAK,EAAEvV,aAAa,CAGjD,CAAA,CAAA,CAAA,EAAA,WAAA;AACE,oCAAA,IAAI,CAACiW,IAAI,GAAG,IAAI,CAACV,KAAK;AACtB,oCAAA,IAAI,CAACtI,aAAa,CAAC6H,KAAK,CAAC,IAAI,CAACU,KAAK,EAAE7L,EAAGqM,CAAAA,MAAM,CAACrM,EAAGG,CAAAA,IAAI,CAAChK,SAAY,CAAA,EAAA,IAAI,CAACwH,CAAC,CAAA,CAAA;AACzE,oCAAA,IAAI,CAACoD,GAAG,CAAC,IAAI,CAACuH,SAAS,EAAE,WAAA;AACvB,wCAAA,IAAI,CAACqE,QAAQ,CAAC9W,cAAgB,EAAA,IAAI,CAAC8H,CAAC,CAAA;wCACpC,IAAI,CAAC4O,OAAO,GAAG,IAAA;AACf,wCAAA,IAAI,CAACxL,GAAG,CAAC,IAAI,CAACyL,YAAY,EAAE,WAAA;4CAC1B,IAAI,CAAC9C,QAAQ,CAACyB,KAAK,CAACnL,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC5F,UAAU,CAACV,EAAE,CAAC,GAAGkD,CAAC,CAAA;4CAC9D/D,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAChK,gBAAmB,CAAA,EAAA,CAAA,CAAA;AACvD,yCAAA,CAAA;AACA,wCAAA,IAAI,CAACkK,GAAG,CAACf,EAAAA,CAAGyF,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACoG,KAAK,EAAEvV,aAAa,CAAI,CAAA,EAAA,WAAA;AAC3D,4CAAA,IAAI,CAACmK,EAAE,CAACoM,IAAI,GAAG5M,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACrK,MAAS,CAAA,EAAA,CAAA,CAAA;AAC1D,4CAAA,IAAI,CAACuK,GAAG,CAACf,GAAGqC,QAAQ,CAAC,IAAI,CAACuK,IAAI,EAAE,IAAI,CAACrL,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC,CAAG,EAAA,WAAA;AACxD,gDAAA,IAAI,CAACgL,YAAY,CAACiL,KAAK,CAACnL,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,CAAI,CAAA,EAAA,IAAI,CAACf,KAAK,CAAA;AACxD,gDAAA,IAAI,CAAC3L,YAAY,CAACiL,KAAK,CAACnL,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAACjP,CAAC,CAAA;AAC/D,gDAAA,IAAI,CAAC2O,IAAI,GAAGtM,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAAC8G,IAAI,EAAEtM,EAAAA,CAAGG,IAAI,CAAC,EAAgB,KAAA,CAAA,CAAA,CAAA;gDAC1DH,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAC7J,eAAkB,CAAA,EAAA,CAAA,CAAA;AACtD,6CAAA,CAAA;AACF,yCAAA,CAAA;AACF,qCAAA,CAAA;AACF,iCAAA,CAAA,CACA6V,KAAK,CAAC,WAAA;oCACN7M,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAC3J,cAAiB,CAAA,EAAA,CAAA,CAAA;AACrD,iCAAA,CAAA;AACF,6BAAA,CAAA;4BACA,IAAI,CAAC6J,GAAG,CAACf,EAAGgB,CAAAA,KAAK,CAAC,IAAI,CAACsL,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAC/B,gCAAA,IAAI,CAACK,QAAQ,CAAC/W,UAAY,EAAA,IAAI,CAAC+H,CAAC,CAAA;gCAChC,IAAI,CAAC4O,OAAO,GAAG,IAAA;AACjB,6BAAA,CAAA;AACA,4BAAA,IAAI,CAAC7C,QAAQ,CAACyB,KAAK,CAACnL,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAACmF,IAAI,CAAA;AAChD,4BAAA,IAAI,CAACvC,SAAS,CAACoB,KAAK,CAClBnL,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAE1I,QAAAA,CAAAA,EAAW,IAAI,CAACsF,CAAC,CAAA,EACvCgF,EAAG8M,CAAAA,MAAM,CAAC,IAAI,CAACnP,CAAC,EAAEqC,GAAGG,IAAI,CAAC5K,UAAa,CAAA,EAAA,IAAI,CAACgX,OAAO,CAAA,CAAA;AAEvD,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,MAAA;AACH,gBAAA,OAAO3J,OAAQ,CAAA;AAACnL,oBAAAA,UAAAA;AAAY,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACuI,EAAIiD,EAAAA,KAAAA,GAAAA;AACtC2D,oBAAAA,KAAAA,CAAM5G,EAAIiD,EAAAA,KAAAA,CAAAA;AACVA,oBAAAA,KAAAA,CAAM8J,QAAQ,GAAG/M,EAAAA,CAAGG,IAAI,CAAC1I,UAAAA,CAAW,GAAGuV,SAAS,EAAA;AAChDhN,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAACyM,GAAG,GAAG,IAAI,CAACvM,SAAS,CAACuB,iBAAiB,CAAChN,CAAC;AAChD,wBAAA,IAAI,CAACuL,EAAE,CAACpC,CAAC,GAAG,IAAI,CAACmD,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC;AACnC,wBAAA,IAAI,CAACsL,EAAE,CAAC1F,KAAK,GAAGkF,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AACxB,wBAAA,IAAI,CAACK,EAAE,CAAC0M,MAAM,GAAGlN,GAAG4B,GAAG,CAAC5B,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAAC/C,CAAC,EAAE3G,aAAa,CAAIA,CAAAA,EAAAA,UAAAA,CAAAA;wBACxD,IAAI,CAACqK,IAAI,CAAC9B,EAAGG,CAAAA,IAAI,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC+M,MAAM,EAAE,WAAA;AACtC,4BAAA,IAAI,CAAC1M,EAAE,CAAC2M,GAAG,GAAGnN,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACvM,CAAC,EAAEkD,UAAa,CAAA,EAAA,IAAI,CAACwV,GAAG,CAAA;AACzD,4BAAA,IAAI,CAACzM,EAAE,CAACkC,CAAC,GAAG1C,EAAAA,CAAGG,IAAI,CAAC5K,UAAAA,CAAAA;AACpB,4BAAA,IAAI,CAACwL,GAAG,CAACf,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC8K,GAAG,EAAE,IAAI,CAAC/O,CAAC,CAAG,EAAA,WAAA;gCACtC,IAAI,CAACsE,CAAC,GAAG,IAAI,CAACqH,SAAS,CAAClJ,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAE1I,QAAAA,CAAAA,EAAW,IAAI,CAACyX,GAAG,CAAA,CAAA;AACtE,6BAAA,CAAA;4BACA,IAAI,CAAC3M,EAAE,CAAC4M,KAAK,GAAGpN,EAAG8M,CAAAA,MAAM,CAAC9M,EAAAA,CAAGG,IAAI,CAAC,IAAIH,EAAGG,CAAAA,IAAI,CAAC,CAAIH,CAAAA,EAAAA,EAAAA,CAAGyF,QAAQ,CAAC,IAAI,CAAC/C,CAAC,EAAEnN,UAAAA,CAAAA,CAAAA;4BACtE,IAAI,CAACwX,QAAQ,CAAC5B,KAAK,CAAC,IAAI,CAAC8B,GAAG,EAAE,IAAI,CAACG,KAAK,CAAA;AACxCpN,4BAAAA,EAAAA,CAAGqN,gBAAgB,EAAA;AACnB,4BAAA,IAAK,IAAIrC,MAAS,GAAA,CAAA,EAAGA,MAASvT,GAAAA,UAAAA,EAAYuT,UAAU,CAAG,CAAA;gCACrD,IAAI,CAACxK,EAAE,CAAC,CAAC,CAAC,EAAEwK,MAAAA,CAAAA,CAAQ,CAAC,GAAGhL,EAAGG,CAAAA,IAAI,CAAC,CAAA,CAAA;gCAChC,IAAI,CAACY,GAAG,CAACf,EAAG2K,CAAAA,gBAAgB,CAAC,IAAI,CAACsC,GAAG,EAAEjC,MAAS,CAAA,EAAA,WAAA;AAC9C,oCAAA,IAAI,CAAC,CAAC,CAAC,EAAEA,MAAQ,CAAA,CAAA,CAAC,GAAG,IAAI,CAAC+B,QAAQ,CAAClM,EAAE,CAACb,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACwL,GAAG,EAAEjC,MAAAA,CAAAA,CAAAA;AACzD,iCAAA,CAAA;AACAhL,gCAAAA,EAAAA,CAAGqN,gBAAgB,EAAA;AACnB,gCAAA,IAAI,CAACN,QAAQ,CAAC5B,KAAK,CAAC,IAAI,CAAC8B,GAAG,EAAEjN,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAAC4L,QAAQ,CAAClM,EAAE,CAAC,IAAI,CAACoM,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,EAAEjC,MAAAA,CAAAA,CAAQ,CAAC,CAAA,CAAA;AACnFhL,gCAAAA,EAAAA,CAAGqN,gBAAgB,EAAA;AACrB;4BACA,IAAI,CAACtM,GAAG,CAACf,EAAGyF,CAAAA,QAAQ,CAAC,IAAI,CAAC2H,KAAK,EAAE,CAAI,CAAA,EAAA,WAAA;AACnC,gCAAA,IAAI,CAACrD,SAAS,CAACoB,KAAK,CAClBnL,GAAGmB,GAAG,CACJnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAEzI,cAAAA,CAAAA,EACfqK,GAAGmB,GAAG,CAAC,IAAI,CAACrG,KAAK,EAAEkF,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACsL,QAAQ,CAAClM,EAAE,CAAC,IAAI,CAACoM,GAAG,GAAG,CAExD,CAAA,CAAA,CAAA,EAAA,IAAI,CAACvK,CAAC,CAAA;AAEV,6BAAA,CAAA;AACA,4BAAA,IAAI,CAAC5H,KAAK,GAAGkF,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACrG,KAAK,EAAE,IAAI,CAACiS,QAAQ,CAAClM,EAAE,CAACpJ,UAAa,GAAA,CAAA,CAAA,CAAA;AAC9DuI,4BAAAA,EAAAA,CAAGqN,gBAAgB,EAAA;AACrB,yBAAA,CAAA;wBACA,IAAI,CAACtM,GAAG,CAACf,EAAGgB,CAAAA,KAAK,CAAC,IAAI,CAACiM,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AAC9BjN,4BAAAA,EAAAA,CAAG2L,cAAc,CAAC,IAAI,CAAChC,cAAc,CAAC9I,EAAE,CAAClL,cAAAA,CAAAA,EAAiBqK,EAAGkL,CAAAA,GAAG,CAAC,IAAI,CAACpQ,KAAK,CAAA,CAAA;AAC7E,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,aAAA;YACL,KAAK,iBAAA;YACL,KAAK,kBAAA;YACL,KAAK,sBAAA;AAAwB,gBAAA;AAC3B,oBAAA,MAAMwS,KAAQlC,GAAAA,IAAAA,CAAKmC,UAAU,CAAC,iBAAiB3X,UAAaD,GAAAA,cAAAA;AAC5D,oBAAA,MAAM6X,MAASpC,GAAAA,IAAAA,CAAKmC,UAAU,CAAC,iBAAiB5X,cAAiBE,GAAAA,cAAAA;oBACjE,MAAMgR,MAAAA,GAASuE,IAAKqC,CAAAA,QAAQ,CAAC,OAAA,CAAA;AAC7B,oBAAA,OAAO7K,OAAQ,CAAA;AAACiE,wBAAAA,MAAAA,GAAS,CAAIrP,GAAAA,KAAAA;AAAO,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;AAC9C2D,wBAAAA,KAAAA,CAAM5G,EAAIiD,EAAAA,KAAAA,CAAAA;AACVjD,wBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;AACN,4BAAA,IAAI,CAACC,EAAE,CAACpC,CAAC,GAAG4B,EAAGkL,CAAAA,GAAG,CAAC,IAAI,CAAC3J,UAAU,CAACV,EAAE,CAAC,GAAG3L,CAAC,CAAA;AAC1C,4BAAA,IAAI,CAACsL,EAAE,CAACkN,OAAO,GAAG1N,EAAAA,CAAG7K,GAAG,CAAC6K,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACqE,cAAc,CAAC9I,EAAE,CAACyM,QAAQ,CAAI,CAAA,EAAA,CAAA,CAAA;AACzE,4BAAA,IAAI,CAAC9M,EAAE,CAACmN,QAAQ,GAAG3N,EAAAA,CAAG7K,GAAG,CAAC6K,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACqE,cAAc,CAAC9I,EAAE,CAAC2M,SAAS,CAAI,CAAA,EAAA,CAAA,CAAA;4BAC3E,IAAI,CAAChN,EAAE,CAACoN,IAAI,GAAG5N,GAAG7K,GAAG,CAAC,CAAG6K,EAAAA,EAAAA,CAAGlL,GAAG,CAAC,IAAI,CAAC4Y,OAAO,EAAE1N,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACrD,CAAC,EAAE,IAAI,CAACuP,QAAQ,CAAA,CAAA,CAAA;AAC1E,4BAAA,IAAI9G,MAAQ,EAAA;AACV7G,gCAAAA,EAAAA,CAAG2L,cAAc,CAAC,IAAI,CAAChC,cAAc,CAAC9I,EAAE,CAAC2M,MAAAA,CAAAA,EAASxN,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACwM,QAAQ,EAAE,IAAI,CAACC,IAAI,CAAA,CAAA;gCACjF5N,EAAG2L,CAAAA,cAAc,CAAC,IAAI,CAAChC,cAAc,CAAC9I,EAAE,CAACyM,KAAQ,CAAA,EAAA,CAAA,CAAA;6BAC5C,MAAA;AACL,gCAAA,IAAI,CAAC9M,EAAE,CAACxF,CAAC,GAAGgF,EAAGkL,CAAAA,GAAG,CAAC,IAAI,CAACxK,SAAS,CAACgL,kBAAkB,CAACzW,CAAC,CAAA;AACtD,gCAAA,IAAI,CAAC8L,GAAG,CAACf,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE,IAAI,CAAC4S,IAAI,CAAG,EAAA,WAAA;oCACvC,IAAI,CAAC7D,SAAS,CAACoB,KAAK,CAClBnL,GAAGG,IAAI,CAACH,EAAGmB,CAAAA,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAEoP,MAAAA,CAAAA,EAASxN,GAAGmB,GAAG,CAAC,IAAI,CAACwM,QAAQ,EAAE,IAAI,CAAC3S,CAAC,CACnE,CAAA,CAAA,EAAA,IAAI,CAAC+O,SAAS,CAAClJ,EAAE,CAACb,EAAGG,CAAAA,IAAI,CAACH,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAEkP,KAAAA,CAAAA,EAAQ,IAAI,CAACtS,CAAC,CAAA,CAAA,CAAA,CAAA;AAElE,iCAAA,CAAA;AACF;AACF,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF;YACA,KAAK,QAAA;AACH,gBAAA,OAAO4H,OAAQ,CAAA;AAACpL,oBAAAA,KAAAA;AAAO,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;oBACjCA,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC,CAAA,CAAA;oBACzD6C,KAAMQ,CAAAA,eAAe,GAAGzD,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBAC1DV,KAAM2G,CAAAA,YAAY,GAAG5J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBAChDV,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;AACvDjE,oBAAAA,IAAAA,CAAKY,aAAa,CAACN,EAAAA,CAAAA;AACnBA,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAACxF,CAAC,GAAG,IAAI,CAAC0F,SAAS,CAACgL,kBAAkB,CAACzW,CAAC;AAC/C,wBAAA,IAAI,CAAC8L,GAAG,CAACf,GAAGqC,QAAQ,CAAC,IAAI,CAACrH,CAAC,EAAE,IAAI,CAACuG,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG5L,CAAC,CAAG,EAAA,WAAA;AACrD,4BAAA,IAAI,CAACuL,EAAE,CAACqN,KAAK,GAAG7N,GAAG2L,cAAc,CAAC,IAAI,CAAClI,eAAe,CAAC5C,EAAE,CAAC,IAAI,CAAC7F,CAAC,CAAG,EAAA,CAAA,CAAA;4BACnE,IAAI,CAACwF,EAAE,CAACY,KAAK,GAAG,IAAI,CAACC,WAAW,CAAC,IAAI,CAACrG,CAAC,CAAA;AACvC,4BAAA,IAAI,CAACwF,EAAE,CAACsN,MAAM,GAAG9N,EAAAA,CAAG2K,gBAAgB,CAAC,IAAI,CAACvJ,KAAK,EAAE,IAAI,CAACG,UAAU,CAACV,EAAE,CAAC,GAAGkL,CAAC,CAAA;AACxE,4BAAA,IAAI,CAAChL,GAAG,CAAC,IAAI,CAAC+M,MAAM,EAAE,WAAA;gCACpB,IAAI,CAACD,KAAK,GAAG7N,EAAAA,CAAG7K,GAAG,CAAC,IAAI,CAAC0Y,KAAK,EAAE,CAAA,CAAA;AAClC,6BAAA,CAAA;AACA,4BAAA,IAAI,CAAC9M,GAAG,CACNf,EAAAA,CAAGoC,GAAG,CACJpC,EAAG6F,CAAAA,WAAW,CAAC,IAAI,CAACgI,KAAK,EAAE,CAC3B7N,CAAAA,EAAAA,EAAAA,CAAGgB,KAAK,CAAChB,EAAGwF,CAAAA,OAAO,CAAC,IAAI,CAAClC,aAAa,CAACzC,EAAE,CAAC,IAAI,CAAC7F,CAAC,CAAA,EAAG/E,cAAc,CAEnE,CAAA,CAAA,EAAA,WAAA;AACE,gCAAA,IAAI,CAACuK,EAAE,CAACuN,QAAQ,GAAG/N,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC+M,KAAK,EAAE7N,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACC,KAAK,EAAE,CAAA,CAAA,CAAA;AACzD,gCAAA,IAAI,CAACZ,EAAE,CAACwN,MAAM,GAAGhO,EAAG8M,CAAAA,MAAM,CACxB9M,EAAAA,CAAGlL,GAAG,CAACkL,EAAAA,CAAGG,IAAI,CAACH,GAAG7E,KAAK,CAAC6E,EAAG8E,CAAAA,IAAI,CAAC9E,EAAAA,CAAGwC,KAAK,CAAC,IAAI,CAACuL,QAAQ,CAAM,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAC5D/N,GAAGG,IAAI,CAAC5I,kBACR,CAAA,EAAA,IAAI,CAACuW,MAAM,CAAA;AAEb,gCAAA,IAAI,CAACtN,EAAE,CAACoM,IAAI,GAAG5M,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACtK,MAAS,CAAA,EAAA,CAAA,CAAA;AAC1D,gCAAA,IAAI,CAACwK,GAAG,CAACf,GAAGqC,QAAQ,CAAC,IAAI,CAACuK,IAAI,EAAE,IAAI,CAACrL,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAGkD,CAAC,CAAG,EAAA,WAAA;AACxD,oCAAA,IAAI,CAAC6F,YAAY,CAACuB,KAAK,CAACnL,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC5R,CAAC,CAAA;AACpD,oCAAA,IAAI,CAAC4O,YAAY,CAACuB,KAAK,CAACnL,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAACoB,MAAM,CAAA;AACpE,oCAAA,IAAI,CAACpE,YAAY,CAACuB,KAAK,CAACnL,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAACxL,KAAK,CAAA;AACnEpB,oCAAAA,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACb,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAAC6M,MAAM,EAAEpX,MAAU,CAAA,CAAA,EAAA,CAAA,CAAA;AAClE,iCAAA,CAAA,CAAGiW,KAAK,CAAC,WAAA;oCACP7M,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAC5J,cAAiB,CAAA,EAAA,CAAA,CAAA;AACrD,iCAAA,CAAA;AACF,6BAAA,CAAA;AAEJ,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,QAAA;AACH,gBAAA,OAAO2L,OAAQ,CAAA;AAAC,oBAAA,CAAA;AAAG,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAAC5C,EAAIiD,EAAAA,KAAAA,GAAAA;oBAC7BA,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBACvDV,KAAM0G,CAAAA,cAAc,GAAG3J,EAAGuL,CAAAA,UAAU,CAAC,CAAE,CAAA,EAAA,CAAG5H,aAAa,CAAC,CAAA,CAAA;oBACxDV,KAAM6G,CAAAA,gBAAgB,GAAG9J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;AACpD3D,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;AACN,wBAAA,IAAI,CAACC,EAAE,CAACqI,SAAS,GAAG7I,EAAGG,CAAAA,IAAI,CAACH,EAAAA,CAAG7K,GAAG,CAACsW,SAAUzL,CAAAA,EAAAA,EAAI,IAAI,CAAG,EAAA,CAAA,CAAA,CAAA;AACxD,wBAAA,IAAI,CAACQ,EAAE,CAACyN,MAAM,GAAG,IAAI,CAAC1M,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC;wBACxC,IAAI,CAACsL,EAAE,CAAC0N,OAAO,GAAGlO,EAAGlL,CAAAA,GAAG,CAACkL,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACrK,MAAS,CAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAACyX,MAAM,CAAA;wBACnF,IAAI,CAACzN,EAAE,CAAC2N,KAAK,GAAGnO,EAAGlL,CAAAA,GAAG,CAACkL,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACwM,MAAM,EAAE,IAAI,CAACC,OAAO,CAAA,EAAG,IAAI,CAACrF,SAAS,CAAA;AACxE,wBAAA,IAAI,CAACrI,EAAE,CAAC4N,KAAK,GAAGpO,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AACxB,wBAAA,IAAI,CAACK,EAAE,CAAC6N,GAAG,GAAGrO,EAAAA,CAAGG,IAAI,CAAC5K,UAAAA,CAAAA;wBACtB,IAAI,CAACuM,IAAI,CAAC9B,EAAAA,CAAGkL,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG,EAAI,EAAA,WAAA;AAC5B,4BAAA,IAAI,CAAC1K,EAAE,CAAClM,CAAC,GAAG0L,EAAGG,CAAAA,IAAI,CAACH,EAAAA,CAAGyB,GAAG,CAAC,EAAI,EAAA,IAAI,CAAC6M,CAAC,CAAA,CAAA;4BACrC,IAAI,CAAC9N,EAAE,CAAC+N,CAAC,GAAGvO,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAAC7M,CAAC,EAAEsC,MAAU,CAAA,CAAA,EAAA,CAAA,CAAA;4BACvE,IAAI,CAACmK,GAAG,CAACf,EAAAA,CAAG0M,aAAa,CAAC1M,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACiN,KAAK,EAAE,IAAI,CAACG,CAAC,GAAG,IAAI,CAACJ,KAAK,CAAG,EAAA,WAAA;AACjE,gCAAA,IAAI,CAACC,KAAK,GAAGpO,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACiN,KAAK,EAAE,IAAI,CAACG,CAAC,CAAA;AACxC,6BAAA,CAAA,CAAG1B,KAAK,CAAC,WAAA;AACP,gCAAA,IAAI,CAACwB,GAAG,GAAG,IAAI,CAAC/Z,CAAC;AACjB,gCAAA,IAAI,CAACsW,MAAM,EAAA;AACb,6BAAA,CAAA;AACF,yBAAA,CAAA;wBACA5K,EAAG2L,CAAAA,cAAc,CAAC,IAAI,CAAC9B,YAAY,CAAChJ,EAAE,CAACpK,KAAAA,CAAAA,EAAQ,IAAI,CAAC4X,GAAG,CAAA;AACvDrO,wBAAAA,EAAAA,CAAG2L,cAAc,CAAC,IAAI,CAAC9B,YAAY,CAAChJ,EAAE,CAACnK,QAAAA,CAAAA,EAAWsJ,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC0M,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;wBAC/E,IAAI,CAAC5N,EAAE,CAACmI,KAAK,GAAG3I,EAAGlL,CAAAA,GAAG,CAACkL,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACtK,MAAAA,CAAAA,EAAS,CAAI,CAAA,EAAA,IAAI,CAACgL,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAGkD,CAAC,CAAA;AAC7F,wBAAA,IAAI,CAAC+F,gBAAgB,CAACqB,KAAK,CAAC,GAAGnL,EAAG4B,CAAAA,GAAG,CAAC5B,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACwH,KAAK,EAAEnR,QAAQ,CAAIA,CAAAA,EAAAA,KAAAA,CAAAA,CAAAA;wBACrE,IAAI,CAACsS,gBAAgB,CAACqB,KAAK,CAAC,CAAGnL,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;wBACvC,IAAI,CAAC2J,gBAAgB,CAACqB,KAAK,CAAC,CAAGnL,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;AACzC,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,UAAA;AACH,gBAAA,OAAOyC,OAAQ,CAAA;AAACpL,oBAAAA,KAAAA;AAAO,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAACwI,EAAIiD,EAAAA,KAAAA,GAAAA;AACjC2D,oBAAAA,KAAAA,CAAM5G,EAAIiD,EAAAA,KAAAA,CAAAA;oBACVA,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBACjDV,KAAMyG,CAAAA,QAAQ,GAAG1J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBAC5CV,KAAM2G,CAAAA,YAAY,GAAG5J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC,CAAA,CAAA;oBACxD6C,KAAM/C,CAAAA,YAAY,GAAGF,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBAChDV,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;AACvDjE,oBAAAA,IAAAA,CAAKqL,UAAU,CAAC/K,EAAAA,CAAAA;AAChBA,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAAC8N,CAAC,GAAG,IAAI,CAAC5N,SAAS,CAACgL,kBAAkB,CAACzW,CAAC;wBAC/C,IAAI,CAACuL,EAAE,CAACmI,KAAK,GAAG3I,EAAGlL,CAAAA,GAAG,CAACkL,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACtK,MAAAA,CAAAA,EAAS,CAAI,CAAA,EAAA,IAAI,CAACgL,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAGkD,CAAC,CAAA;AAC7F,wBAAA,IAAI,CAAChD,GAAG,CAACf,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAACiM,CAAC,EAAE,IAAI,CAAC3F,KAAK,CAAG,EAAA,WAAA;AACxC,4BAAA,IAAI,CAACnI,EAAE,CAAC4E,EAAE,GAAG,IAAI,CAACwE,YAAY,CAAC/I,EAAE,CAACb,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACwN,CAAC,EAAE,CAAA,CAAA,CAAA;4BACjD,IAAI,CAAC9N,EAAE,CAACwN,MAAM,GAAG,IAAI,CAACpE,YAAY,CAAC/I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACwN,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;4BAChE,IAAI,CAAC9N,EAAE,CAACY,KAAK,GAAG,IAAI,CAACwI,YAAY,CAAC/I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAACnB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACwN,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AAC/D,4BAAA,IAAI,CAAC9N,EAAE,CAAC6N,GAAG,GAAGrO,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACpK,KAAQ,CAAA,EAAA,CAAA,CAAA;4BACxD,IAAI,CAAC+J,EAAE,CAACgO,IAAI,GAAGxO,GAAG0K,EAAE,CAAC1K,EAAGgB,CAAAA,KAAK,CAAC,IAAI,CAACqN,GAAG,EAAE9Y,UAAayK,CAAAA,EAAAA,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAACmI,MAAM,EAAE,IAAI,CAACK,GAAG,CAAA,CAAA;AACzF,4BAAA,IAAI,CAACtN,GAAG,CAACf,EAAAA,CAAGgB,KAAK,CAAC,IAAI,CAACgN,MAAM,EAAE,IAAI,CAACK,GAAG,CAAG,EAAA,WAAA;gCACxC,IAAI,CAACG,IAAI,GAAGxO,EAAGqC,CAAAA,QAAQ,CACrBrC,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAClK,KAAAA,CAAAA,EAAQ,CAC1CqJ,CAAAA,EAAAA,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACnK,QAAW,CAAA,EAAA,CAAA,CAAA,CAAA;AAEjD,6BAAA,CAAA;AACA,4BAAA,IAAI,CAAC8J,EAAE,CAACoM,IAAI,GAAG5M,EAAAA,CAAGG,IAAI,CAAC5K,UAAAA,CAAAA;AACvB,4BAAA,IAAI,CAACwL,GAAG,CAAC,IAAI,CAACyN,IAAI,EAAE,WAAA;;AAElB,gCAAA,IAAI,CAAC5B,IAAI,GAAG5M,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACrK,MAAS,CAAA,EAAA,CAAA,CAAA;AACvD,gCAAA,IAAI,CAACgY,IAAI,GAAGxO,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACuK,IAAI,EAAE,IAAI,CAACrL,UAAU,CAACV,EAAE,CAAC,GAAG3L,CAAC,CAAA;AAC5D,6BAAA,CAAA;AACA,4BAAA,IAAI,CAAC6L,GAAG,CAAC,IAAI,CAACyN,IAAI,EAAE,WAAA;AAClB,gCAAA,IAAI,CAAChO,EAAE,CAACiO,GAAG,GAAGzO,EAAG0O,CAAAA,SAAS,CAAC,IAAI,CAAC/E,cAAc,CAAC9I,EAAE,CAAClL,cAAiB,CAAA,EAAA,CAAA,CAAA;;gCAEnE,IAAI,CAACoL,GAAG,CAACf,EAAG0M,CAAAA,aAAa,CAAC,IAAI,CAAC+B,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACtC,oCAAA,IAAI,CAACvO,YAAY,CAACiL,KAAK,CAACnL,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,CAAI5M,CAAAA,EAAAA,EAAAA,CAAGG,IAAI,CAAC5K,UAAAA,CAAAA,CAAAA;AACxD,iCAAA,CAAA;gCACA,IAAI,CAACwL,GAAG,CAACf,EAAG6F,CAAAA,WAAW,CAAC,IAAI,CAAC4I,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACpC,oCAAA,IAAI,CAACjO,EAAE,CAACpC,CAAC,GAAG,IAAI,CAACmD,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC;AACnC,oCAAA,IAAI,CAACsL,EAAE,CAAC7C,CAAC,GAAG,IAAI,CAACoM,SAAS,CAAClJ,EAAE,CAC3Bb,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC1C,CAAC,EAAEzI,iBAAiBqK,EAAGG,CAAAA,IAAI,CAACH,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACgN,GAAG,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA;oCAElE,IAAI,CAACjO,EAAE,CAAC2G,CAAC,GAAGnH,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACnD,CAAC,EAAE,CAAA,CAAA;oCAC3B,IAAI,CAACoD,GAAG,CACNf,EAAGyF,CAAAA,QAAQ,CAACzF,EAAGwF,CAAAA,OAAO,CAAC,IAAI,CAACkE,QAAQ,CAAC7I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAK/Q,CAAAA,CAAAA,EAAAA,cAAAA,CAAAA,EAAiB,CAC7E,CAAA,EAAA,WAAA;AACE,wCAAA,IAAI,CAACkN,aAAa,CAAC6H,KAAK,CAAC,IAAI,CAACzB,QAAQ,CAAC7I,EAAE,CAAC,IAAI,CAACsG,CAAC,CAAGnH,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;wCAC3DH,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAC9J,cAAiB,CAAA,EAAA,CAAA,CAAA;AACrD,qCAAA,CAAA;AAEF,oCAAA,IAAI,CAACuM,aAAa,CAAC6H,KAAK,CAAC,IAAI,CAAC/F,EAAE,EAAEpF,EAAGqM,CAAAA,MAAM,CAACrM,EAAGG,CAAAA,IAAI,CAAChK,SAAY,CAAA,EAAA,IAAI,CAACwH,CAAC,CAAA,CAAA;oCACtE,IAAI,CAAC+L,QAAQ,CAACyB,KAAK,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAAC/B,EAAE,CAAA;AACnC,oCAAA,IAAI,CAACsE,QAAQ,CAACyB,KAAK,CAACnL,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC/F,KAAK,CAAA;oCACjD,IAAI,CAACsI,QAAQ,CAACyB,KAAK,CAACnL,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC5F,UAAU,CAACV,EAAE,CAAC,GAAGkD,CAAC,CAAA;AAC9D,oCAAA,IAAI,CAAC2F,QAAQ,CAACyB,KAAK,CACjBnL,GAAGmB,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,EACfnH,GAAG8M,MAAM,CACP9M,GAAGG,IAAI,CAAC/J,cACR4J,CAAAA,EAAAA,EAAAA,CAAGG,IAAI,CAAC/J,cAAAA,GAAiBE,cACzB0J,EAAG2K,CAAAA,gBAAgB,CAAC,IAAI,CAACvJ,KAAK,EAAE,IAAI,CAACG,UAAU,CAACV,EAAE,CAAC,GAAGkL,CAAC,CAAA,CAAA,CAAA;AAG3D,oCAAA,IAAI,CAACY,QAAQ,CAAC9W,cAAgB,EAAA,IAAI,CAAC8H,CAAC,CAAA;AACpC,oCAAA,IAAI,CAACuC,YAAY,CAACiL,KAAK,CAACnL,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,CAAI,CAAA,EAAA,IAAI,CAACxH,EAAE,CAAA;AACrD,oCAAA,IAAI,CAAClF,YAAY,CAACiL,KAAK,CAACnL,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC8L,IAAI,EAAE,IAAI,CAAI,CAAA,EAAA,IAAI,CAACjP,CAAC,CAAA;oCAC/DqC,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAAC/J,gBAAmB,CAAA,EAAA,CAAA,CAAA;AACvD,iCAAA,CAAA;AACF,6BAAA,CAAA;AACF,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,UAAA;AACH,gBAAA,OAAO8L,OAAQ,CAAA;AAAC,oBAAA,CAAA;AAAG,oBAAA,CAAA;AAAG,oBAAA;AAAE,iBAAA,EAAE,CAAC5C,EAAIiD,EAAAA,KAAAA,GAAAA;oBAC7BA,KAAM4G,CAAAA,YAAY,GAAG7J,EAAG0D,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBACvDV,KAAM6G,CAAAA,gBAAgB,GAAG9J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;oBACpDV,KAAM0G,CAAAA,cAAc,GAAG3J,EAAGuL,CAAAA,UAAU,CAAC,CAAE,CAAA,EAAA,CAAG5H,aAAa,CAAC,CAAA,CAAA;oBACxDV,KAAMM,CAAAA,SAAS,GAAGvD,EAAGwD,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGG,aAAa,CAAC,CAAA,CAAA;AAC7C3D,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAAC6H,KAAK,GAAG,IAAI,CAAC9E,SAAS,CAAC1C,EAAE,CAAC,CAAA,CAAA;AAClC,wBAAA,IAAI,CAACL,EAAE,CAACmO,SAAS,GAAG3O,GAAG4B,GAAG,CACxB5B,EAAGwC,CAAAA,KAAK,CAACxC,EAAG7K,CAAAA,GAAG,CAAC6K,EAAAA,CAAGsF,SAAS,CAAC,IAAI,CAACqE,cAAc,CAAC9I,EAAE,CAAChL,cAAiB,CAAA,EAAA,CAAA,CAAA,EAAI,KACzEmK,EAAGwC,CAAAA,KAAK,CAAC,IAAI,CAACjB,UAAU,CAACV,EAAE,CAAC,GAAG3L,CAAC,CAAA,CAAA;wBAElC,IAAI,CAACsL,EAAE,CAACoO,IAAI,GAAG,IAAI,CAACvG,KAAK,CAACpT,CAAC;wBAC3B,IAAI,CAAC8L,GAAG,CACNf,EAAGoC,CAAAA,GAAG,CAACpC,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAAC+I,IAAI,EAAE,IAAI5O,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACsM,SAAS,EAAE,IAAI,CAACtG,KAAK,CAACtE,CAAC,CAC7E,CAAA,EAAA,WAAA;4BACE,IAAI,CAAC6K,IAAI,GAAG5O,EAAGyB,CAAAA,GAAG,CAChB,IAAI,CAACmN,IAAI,EACT5O,EAAGc,CAAAA,GAAG,CAAC1J,yBAA2B4I,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAAC4G,KAAK,CAACtE,CAAC,EAAE,IAAI,CAAC4K,SAAS,CAAA,CAAA,CAAA;AAEzE,yBAAA,CAAA,CACAE,OAAO,CAAC7O,EAAG6F,CAAAA,WAAW,CAAC,IAAI,CAAC8I,SAAS,EAAE,IAAI,CAACtG,KAAK,CAACnT,CAAC,CAAG,EAAA,WAAA;4BACtD,IAAI,CAAC0Z,IAAI,GAAG5O,EAAGmB,CAAAA,GAAG,CAChB,IAAI,CAACyN,IAAI,EACT5O,EAAGc,CAAAA,GAAG,CAAC1J,yBAA2B4I,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACkN,SAAS,EAAE,IAAI,CAACtG,KAAK,CAACnT,CAAC,CAAA,CAAA,CAAA;AAEzE,yBAAA,CAAA;wBACA,IAAI,CAAC0Z,IAAI,GAAG5O,EAAG6E,CAAAA,KAAK,CAAC,IAAI,CAAC+J,IAAI,EAAE,CAAGvX,EAAAA,sBAAAA,CAAAA;wBACnC,IAAI,CAAC0J,GAAG,CACNf,EAAG0K,CAAAA,EAAE,CAAC1K,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACgG,KAAK,CAACnT,CAAC,EAAE,CAAI8K,CAAAA,EAAAA,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAACwC,KAAK,CAAC0D,CAAC,EAAEzU,4BACjE,CAAA,CAAA,EAAA,WAAA;AACE,4BAAA,IAAI,CAACsX,IAAI,GAAG5O,EAAAA,CAAGwC,KAAK,CAAC,CAAA,CAAA;AACvB,yBAAA,CAAA;AAEF,wBAAA,IAAI,CAACe,SAAS,CAAC4H,KAAK,CAAC,GAAGnL,EAAGwD,CAAAA,IAAI,CAAC,IAAI,CAACoL,IAAI,EAAE,IAAI,CAACvG,KAAK,CAACyG,GAAG,CAAA,CAAA;wBACzD,IAAI,CAAChF,gBAAgB,CAACqB,KAAK,CACzB,CACAnL,EAAAA,EAAAA,CAAGlL,GAAG,CAACkL,EAAGsF,CAAAA,SAAS,CAAC,IAAI,CAACuE,YAAY,CAAChJ,EAAE,CAACrK,MAAAA,CAAAA,EAAS,CAAI,CAAA,EAAA,IAAI,CAAC+K,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG3L,CAAC,CAAA,CAAA;wBAE/E,IAAI,CAAC4U,gBAAgB,CAACqB,KAAK,CAAC,CAAGnL,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;wBACvC,IAAI,CAAC2J,gBAAgB,CAACqB,KAAK,CAAC,CAAGnL,EAAAA,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA,CAAA;AACzC,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,WAAA;AACH,gBAAA,OAAOyC,OAAQ,CAAA;AAAClL,oBAAAA,UAAAA;AAAYA,oBAAAA,UAAAA;AAAY,oBAAA;AAAE,iBAAA,EAAE,CAACsI,EAAIiD,EAAAA,KAAAA,GAAAA;oBAC/CA,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGwD,aAAa,CAAC,CAAA,CAAA;AACjD3D,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAAC4L,EAAE,GAAG,IAAI,CAAC1L,SAAS,CAACgL,kBAAkB,CAACU,EAAE;wBACjD,IAAI,CAAC5L,EAAE,CAACuO,KAAK,GAAG,IAAI,CAACxN,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA;AACnC,wBAAA,IAAI,CAACE,GAAG,CACNf,EAAAA,CAAGoC,GAAG,CAACpC,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC+J,EAAE,CAACnX,CAAC,EAAE,IAAI,CAAC8Z,KAAK,CAAC7Z,CAAC,CAAG8K,EAAAA,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC+J,EAAE,CAAClX,CAAC,EAAE,IAAI,CAAC6Z,KAAK,CAAChL,CAAC,CAChF,CAAA,EAAA,WAAA;AACE,4BAAA,IAAI,CAACvD,EAAE,CAACwO,SAAS,GAAG,IAAI,CAACzN,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA,CAAG5L,CAAC;AAC3C,4BAAA,IAAI,CAACuL,EAAE,CAACyO,MAAM,GAAG,KAAA;AACjB,4BAAA,IAAI,CAACzO,EAAE,CAAC0O,WAAW,GAAGlP,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AAC9B,4BAAA,IAAI,CAACK,EAAE,CAAC2O,UAAU,GAAGnP,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;4BAC7B,IAAI,CAAC2B,IAAI,CAAC9B,EAAGG,CAAAA,IAAI,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC6O,SAAS,EAAE,WAAA;AACzC,gCAAA,IAAI,CAACxO,EAAE,CAAC5F,CAAC,GAAGoF,EAAAA,CAAGyB,GAAG,CAACzB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACuN,SAAS,EAAE,CAAI,CAAA,EAAA,IAAI,CAACV,CAAC,CAAA;AACpD,gCAAA,IAAI,CAAC9N,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACvG,CAAC,EAAE,CAAA,CAAA,CAAA;AACjD,gCAAA,IAAI,CAAC4F,EAAE,CAACkC,CAAC,GAAG1C,EAAG2B,CAAAA,KAAK,CAAC3B,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACyG,EAAE,CAACnX,CAAC,EAAE,IAAI,CAAC2F,CAAC,CAAGoF,EAAAA,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACyG,EAAE,CAAClX,CAAC,EAAE,IAAI,CAAC0F,CAAC,CAAA,CAAA;AACxE,gCAAA,IAAI,CAAC4F,EAAE,CAAC4E,EAAE,GAAGpF,GAAGmB,GAAG,CAAC,IAAI,CAACG,IAAI,CAACrM,CAAC,EAAE+K,EAAAA,CAAGmB,GAAG,CAACnB,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAAC4B,CAAC,CAACxN,CAAC,EAAE,IAAI,CAACoM,IAAI,CAACpM,CAAC,CAAG,EAAA,IAAI,CAACwN,CAAC,CAACzN,CAAC,CAAA,CAAA;AAC/E,gCAAA,IAAI,CAACuL,EAAE,CAAC+E,CAAC,GAAG,IAAI,CAACjC,aAAa,CAACzC,EAAE,CAAC,IAAI,CAACuE,EAAE,CAAA;AACzC,gCAAA,IAAI,CAACrE,GAAG,CAACf,EAAAA,CAAGyF,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEtP,cAAc,CAAI,CAAA,EAAA,WAAA;oCACxD,IAAI,CAACgZ,MAAM,GAAG,IAAA;AACd,oCAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACtU,CAAC;oCACzB,IAAI,CAACuU,UAAU,GAAGnP,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEzP,YAAAA,CAAAA;iCACpC+Y,CAAAA,CAAAA,OAAO,CACR7O,EAAGoC,CAAAA,GAAG,CACJ,IAAI,CAAC6M,MAAM,EACXjP,EAAAA,CAAGgB,KAAK,CAAChB,EAAAA,CAAG2B,KAAK,CAAC3B,EAAAA,CAAGoP,GAAG,CAAC,IAAI,CAAC1M,CAAC,CAACzN,CAAC,EAAE,IAAI,CAAC2F,CAAC,CAAA,EAAGoF,GAAGoP,GAAG,CAAC,IAAI,CAAC1M,CAAC,CAACxN,CAAC,EAAE,IAAI,CAAC0F,CAAC,IAAI,IAAI,CAACwR,EAAE,CAEhF,CAAA,EAAA,WAAA;AACE,oCAAA,IAAI,CAAC9I,aAAa,CAAC6H,KAAK,CACtB,IAAI,CAAC/F,EAAE,EACPpF,EAAAA,CAAGqM,MAAM,CACPrM,EAAAA,CAAGqM,MAAM,CACPrM,GAAGG,IAAI,CAACjK,UACR8J,CAAAA,EAAAA,EAAAA,CAAGoP,GAAG,CAACpP,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACyN,WAAW,EAAE,IAAI,CAACtU,CAAC,CAAA,EAAG7E,YAE3C,CAAA,CAAA,EAAA,IAAI,CAACoZ,UAAU,CAAA,CAAA;AAGrB,iCAAA,CAAA;AAEJ,6BAAA,CAAA;AACF,yBAAA,CAAA;AAEJ,qBAAA,CAAA;AACF,iBAAA,CAAA;YACF,KAAK,OAAA;AACH,gBAAA,OAAOvM,OAAQ,CAAA;AAAClL,oBAAAA,UAAAA;AAAYA,oBAAAA,UAAAA;AAAY,oBAAA;AAAE,iBAAA,EAAE,CAACsI,EAAIiD,EAAAA,KAAAA,GAAAA;oBAC/CA,KAAMK,CAAAA,aAAa,GAAGtD,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC,CAAA,CAAA;oBACzD6C,KAAMyG,CAAAA,QAAQ,GAAG1J,EAAGG,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,qBAAqB,CAAC,CAAA,CAAA;AACpD6C,oBAAAA,KAAAA,CAAMoM,cAAc,GAAGrP,EAAAA,CAAGG,IAAI,EAAA,CAAGmP,OAAO,CAAC,CAAA,CAAA;oBACzCrM,KAAMsM,CAAAA,SAAS,GAAGvP,EAAGK,CAAAA,YAAY,CAACmP,UAAU,EAAA,CAAGpT,OAAO,CAAC,CAAA,CAAA;AACvD4D,oBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAAC4L,EAAE,GAAG,IAAI,CAAC1L,SAAS,CAACgL,kBAAkB,CAACU,EAAE;wBACjD,IAAI,CAAC5L,EAAE,CAACuO,KAAK,GAAG,IAAI,CAACxN,UAAU,CAACV,EAAE,CAAC,CAAA,CAAA;AACnC,wBAAA,IAAI,CAACE,GAAG,CACNf,EAAAA,CAAGoC,GAAG,CAACpC,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC+J,EAAE,CAACnX,CAAC,EAAE,IAAI,CAAC8Z,KAAK,CAAC7Z,CAAC,CAAG8K,EAAAA,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAAC+J,EAAE,CAAClX,CAAC,EAAE,IAAI,CAAC6Z,KAAK,CAAChL,CAAC,CAChF,CAAA,EAAA,WAAA;AACE,4BAAA,IAAI,CAACvD,EAAE,CAAC5F,CAAC,GAAG,IAAI,CAACyU,cAAc;AAC/B,4BAAA,IAAI,CAAC7O,EAAE,CAACc,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACvG,CAAC,EAAE,CAAA,CAAA,CAAA;AACjD,4BAAA,IAAI,CAAC4F,EAAE,CAACkC,CAAC,GAAG1C,EAAG2B,CAAAA,KAAK,CAAC3B,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACyG,EAAE,CAACnX,CAAC,EAAE,IAAI,CAAC2F,CAAC,CAAGoF,EAAAA,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACyG,EAAE,CAAClX,CAAC,EAAE,IAAI,CAAC0F,CAAC,CAAA,CAAA;AACxE,4BAAA,IAAI,CAAC4F,EAAE,CAAC+E,CAAC,GAAG,IAAI,CAACjC,aAAa,CAACzC,EAAE,CAC/Bb,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACG,IAAI,CAACrM,CAAC,EAAE+K,EAAAA,CAAGmB,GAAG,CAACnB,GAAGc,GAAG,CAAC,IAAI,CAAC4B,CAAC,CAACxN,CAAC,EAAE,IAAI,CAACoM,IAAI,CAACpM,CAAC,CAAA,EAAG,IAAI,CAACwN,CAAC,CAACzN,CAAC,CAAA,CAAA,CAAA;4BAEpE,IAAI,CAACuL,EAAE,CAACiP,KAAK,GAAGzP,GAAGwD,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AACjC,4BAAA,IAAI,CAACzC,GAAG,CAACf,EAAAA,CAAGyF,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEtP,cAAc,CAAI,CAAA,EAAA,WAAA;AACxD,gCAAA,IAAI,CAACuK,EAAE,CAAC2G,CAAC,GAAGnH,EAAGc,CAAAA,GAAG,CAACd,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAEzP,YAAe,CAAA,EAAA,CAAA,CAAA;AACrD,gCAAA,IAAI,CAAC0K,EAAE,CAACkP,KAAK,GAAG1P,EAAAA,CAAGgB,KAAK,CAAC,IAAI,CAAC0I,QAAQ,CAAC7I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAA,CAAA,CAAA,EAAK,IAAI,CAAC5F,UAAU,CAACV,EAAE,CAAC,GAAGkD,CAAC,CAAA;AACrF,gCAAA,IAAI,CAAC0L,KAAK,GAAGzP,EAAGwD,CAAAA,IAAI,CAAC,CAAGxD,EAAAA,EAAAA,CAAG8M,MAAM,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC4C,KAAK,GAAG,CAAG,EAAA,CAAA,CAAA;gCAC3D,IAAI,CAAC3O,GAAG,CACNf,EAAGyF,CAAAA,QAAQ,CAACzF,EAAGwF,CAAAA,OAAO,CAAC,IAAI,CAACkE,QAAQ,CAAC7I,EAAE,CAACb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACgG,CAAC,EAAE,CAAK7Q,CAAAA,CAAAA,EAAAA,WAAAA,CAAAA,EAAc,CAC1E,CAAA,EAAA,WAAA;oCACE,IAAI,CAACmZ,KAAK,GAAGzP,EAAAA,CAAGwD,IAAI,CAAC,CAAA,EAAG,KAAK,GAAK,EAAA,CAAA,CAAA;AACpC,iCAAA,CAAA;AAEJ,6BAAA,CAAA,CAAGqL,OAAO,CAAC7O,EAAGyF,CAAAA,QAAQ,CAACzF,EAAAA,CAAGwF,OAAO,CAAC,IAAI,CAACD,CAAC,EAAErP,aAAa,CAAI,CAAA,EAAA,WAAA;AACzD,gCAAA,IAAI,CAACsK,EAAE,CAACmP,GAAG,GAAG3P,EAAAA,CAAGwC,KAAK,CAACxC,EAAAA,CAAGwF,OAAO,CAACxF,GAAG2F,GAAG,CAAC,IAAI,CAACJ,CAAC,EAAExP,YAAeC,CAAAA,EAAAA,WAAAA,CAAAA,CAAAA;gCAChE,IAAI,CAACyZ,KAAK,GAAGzP,EAAAA,CAAGwD,IAAI,CAAC,GAAA,EAAK,GAAKxD,EAAAA,EAAAA,CAAG7K,GAAG,CAAC,MAAM6K,EAAGyB,CAAAA,GAAG,CAAC,CAAA,EAAGzB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAAC6O,GAAG,EAAE,IAAS,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAClF,6BAAA,CAAA;AACA3P,4BAAAA,EAAAA,CAAG2C,YAAY,CAAC,IAAI,CAAC4M,SAAS,EAAE,IAAI,CAACnD,EAAE,EAAE,IAAI,CAACqD,KAAK,CAAA;AACrD,yBAAA,CAAA;AAEJ,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF,YAAA;AACE,gBAAA,MAAM,IAAI1a,KAAAA,CAAM,CAAC,gCAAgC,EAAEoH,IAAM,CAAA,CAAA,CAAA;AAC7D;AACF;IACUyT,SAAY,GAAA;AACpB,QAAA,KAAK,CAACA,SAAAA,EAAAA;AACN,QAAA,KAAK,MAAM9T,GAAAA,IAAO,IAAI,CAAC/C,cAAc,CAAE;AACrC+C,YAAAA,GAAAA,CAAI+T,OAAO,EAAA;AACb;AACA,QAAA,KAAK,MAAM3I,MAAU,IAAA;AACnB,YAAA,IAAI,CAAClO,OAAO;AACZ,YAAA,IAAI,CAACE,MAAM;AACX,YAAA,IAAI,CAACG,UAAU;AACf,YAAA,IAAI,CAACC,YAAY;AACjB,YAAA,IAAI,CAACC,KAAK;AACP,YAAA,GAAA,IAAI,CAACC,MAAM;AACd,YAAA,IAAI,CAACC,WAAW;AAChB,YAAA,IAAI,CAACC,SAAS;AACd,YAAA,IAAI,CAACC,SAAS;AACd,YAAA,IAAI,CAACC,SAAS;AACd,YAAA,IAAI,CAACC,aAAa;AAClB,YAAA,IAAI,CAAC6C,MAAM;AACX,YAAA,IAAI,CAACC;SACN,CAAE;AACDuK,YAAAA,MAAAA,CAAO2I,OAAO,EAAA;AAChB;AACA,QAAA,KAAK,MAAMhN,SAAa,IAAA,IAAI,CAAC9I,WAAW,CAAC0I,MAAM,EAAI,CAAA;AACjDI,YAAAA,SAAAA,CAAUgN,OAAO,EAAA;AACnB;AACA,QAAA,KAAK,MAAMjN,OAAW,IAAA,IAAI,CAAC9I,SAAS,CAAC2I,MAAM,EAAI,CAAA;AAC7CG,YAAAA,OAAAA,CAAQiN,OAAO,EAAA;AACjB;QACA,IAAI,CAACzV,aAAa,EAAEyV,OAAAA,EAAAA;AACtB;AACF;;;;"}