@zephyr3d/scene 0.9.25 → 0.9.27

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 (299) hide show
  1. package/dist/animation/animationset.js +92 -30
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  4. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  5. package/dist/animation/joint_dynamics/controller.js +7 -5
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  8. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  9. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  10. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -4
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/skeleton.js +79 -25
  14. package/dist/animation/skeleton.js.map +1 -1
  15. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  16. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  17. package/dist/animation/spring/spring_collider.js +4 -3
  18. package/dist/animation/spring/spring_collider.js.map +1 -1
  19. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  20. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  21. package/dist/animation/spring/spring_particle.js +2 -0
  22. package/dist/animation/spring/spring_particle.js.map +1 -1
  23. package/dist/animation/spring/spring_system.js +11 -3
  24. package/dist/animation/spring/spring_system.js.map +1 -1
  25. package/dist/animation/spring_modifier.js +10 -0
  26. package/dist/animation/spring_modifier.js.map +1 -1
  27. package/dist/app/engine.js +53 -43
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/scriptingsystem.js +119 -6
  30. package/dist/app/scriptingsystem.js.map +1 -1
  31. package/dist/app/scriptregistry.js +3 -2
  32. package/dist/app/scriptregistry.js.map +1 -1
  33. package/dist/asset/assetmanager.js +284 -67
  34. package/dist/asset/assetmanager.js.map +1 -1
  35. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  36. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  37. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  38. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  39. package/dist/asset/model.js +184 -69
  40. package/dist/asset/model.js.map +1 -1
  41. package/dist/camera/camera.js +268 -44
  42. package/dist/camera/camera.js.map +1 -1
  43. package/dist/camera/perspectivecamera.js +3 -1
  44. package/dist/camera/perspectivecamera.js.map +1 -1
  45. package/dist/index.d.ts +9044 -5139
  46. package/dist/index.js +17 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/material/eye.js +932 -0
  49. package/dist/material/eye.js.map +1 -0
  50. package/dist/material/hair.js +917 -0
  51. package/dist/material/hair.js.map +1 -0
  52. package/dist/material/hairstrand.js +842 -0
  53. package/dist/material/hairstrand.js.map +1 -0
  54. package/dist/material/hairstrand_data.js +162 -0
  55. package/dist/material/hairstrand_data.js.map +1 -0
  56. package/dist/material/lambert.js +5 -2
  57. package/dist/material/lambert.js.map +1 -1
  58. package/dist/material/material.js +48 -10
  59. package/dist/material/material.js.map +1 -1
  60. package/dist/material/meshmaterial.js +120 -19
  61. package/dist/material/meshmaterial.js.map +1 -1
  62. package/dist/material/mixins/albedocolor.js +1 -1
  63. package/dist/material/mixins/albedocolor.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  65. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  67. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  71. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  72. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  73. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  74. package/dist/material/mixins/lit.js +106 -19
  75. package/dist/material/mixins/lit.js.map +1 -1
  76. package/dist/material/mixins/pbr/common.js +4 -4
  77. package/dist/material/mixins/pbr/common.js.map +1 -1
  78. package/dist/material/mixins/texture.js +48 -11
  79. package/dist/material/mixins/texture.js.map +1 -1
  80. package/dist/material/mtoon.js +6 -5
  81. package/dist/material/mtoon.js.map +1 -1
  82. package/dist/material/pbrblueprint.js +146 -28
  83. package/dist/material/pbrblueprint.js.map +1 -1
  84. package/dist/material/pbrblueprint_instance.js +501 -0
  85. package/dist/material/pbrblueprint_instance.js.map +1 -0
  86. package/dist/material/pbrmr.js +15 -16
  87. package/dist/material/pbrmr.js.map +1 -1
  88. package/dist/material/shader/helper.js +734 -23
  89. package/dist/material/shader/helper.js.map +1 -1
  90. package/dist/material/shader/terrain_blend.js +55 -0
  91. package/dist/material/shader/terrain_blend.js.map +1 -0
  92. package/dist/material/skin.js +192 -32
  93. package/dist/material/skin.js.map +1 -1
  94. package/dist/material/spriteblueprint.js +16 -1
  95. package/dist/material/spriteblueprint.js.map +1 -1
  96. package/dist/material/subsurfaceprofile.js +86 -23
  97. package/dist/material/subsurfaceprofile.js.map +1 -1
  98. package/dist/material/water.js +2059 -72
  99. package/dist/material/water.js.map +1 -1
  100. package/dist/posteffect/bloom.js +167 -7
  101. package/dist/posteffect/bloom.js.map +1 -1
  102. package/dist/posteffect/coloradjust.js +2 -1
  103. package/dist/posteffect/coloradjust.js.map +1 -1
  104. package/dist/posteffect/compositor.js.map +1 -1
  105. package/dist/posteffect/fxaa.js +2 -1
  106. package/dist/posteffect/fxaa.js.map +1 -1
  107. package/dist/posteffect/grayscale.js +3 -1
  108. package/dist/posteffect/grayscale.js.map +1 -1
  109. package/dist/posteffect/motionblur.js +664 -56
  110. package/dist/posteffect/motionblur.js.map +1 -1
  111. package/dist/posteffect/posteffect.js +12 -1
  112. package/dist/posteffect/posteffect.js.map +1 -1
  113. package/dist/posteffect/sao.js +46 -44
  114. package/dist/posteffect/sao.js.map +1 -1
  115. package/dist/posteffect/skinsss.js +368 -69
  116. package/dist/posteffect/skinsss.js.map +1 -1
  117. package/dist/posteffect/ssgi.js +16 -9
  118. package/dist/posteffect/ssgi.js.map +1 -1
  119. package/dist/posteffect/ssr.js +3 -0
  120. package/dist/posteffect/ssr.js.map +1 -1
  121. package/dist/posteffect/sss.js +121 -36
  122. package/dist/posteffect/sss.js.map +1 -1
  123. package/dist/posteffect/taa.js.map +1 -1
  124. package/dist/posteffect/tonemap.js +44 -1
  125. package/dist/posteffect/tonemap.js.map +1 -1
  126. package/dist/render/abuffer_oit.js +8 -2
  127. package/dist/render/abuffer_oit.js.map +1 -1
  128. package/dist/render/clipmap.js +156 -5
  129. package/dist/render/clipmap.js.map +1 -1
  130. package/dist/render/cull_visitor.js +20 -0
  131. package/dist/render/cull_visitor.js.map +1 -1
  132. package/dist/render/depthpass.js +36 -2
  133. package/dist/render/depthpass.js.map +1 -1
  134. package/dist/render/drawable_mixin.js +26 -1
  135. package/dist/render/drawable_mixin.js.map +1 -1
  136. package/dist/render/dualdepthpeeling_oit.js +3 -2
  137. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  138. package/dist/render/envlight.js +1 -1
  139. package/dist/render/envlight.js.map +1 -1
  140. package/dist/render/fbm_wavegenerator.js +6 -3
  141. package/dist/render/fbm_wavegenerator.js.map +1 -1
  142. package/dist/render/fft_wavegenerator.js +57 -15
  143. package/dist/render/fft_wavegenerator.js.map +1 -1
  144. package/dist/render/gerstner_wavegenerator.js +130 -20
  145. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  146. package/dist/render/globalbindgroup_allocator.js +3 -0
  147. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  148. package/dist/render/hzb.js +80 -22
  149. package/dist/render/hzb.js.map +1 -1
  150. package/dist/render/lightpass.js +6 -3
  151. package/dist/render/lightpass.js.map +1 -1
  152. package/dist/render/oit.js +29 -0
  153. package/dist/render/oit.js.map +1 -0
  154. package/dist/render/render_queue.js +39 -0
  155. package/dist/render/render_queue.js.map +1 -1
  156. package/dist/render/renderer.js +4 -0
  157. package/dist/render/renderer.js.map +1 -1
  158. package/dist/render/rendergraph/blackboard.js +1 -0
  159. package/dist/render/rendergraph/blackboard.js.map +1 -1
  160. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  161. package/dist/render/rendergraph/executor.js +2 -0
  162. package/dist/render/rendergraph/executor.js.map +1 -1
  163. package/dist/render/rendergraph/forward_plus_builder.js +379 -10
  164. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  165. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  166. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  167. package/dist/render/rendergraph/history_resources.js +8 -1
  168. package/dist/render/rendergraph/history_resources.js.map +1 -1
  169. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  170. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  171. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  172. package/dist/render/rendergraph/types.js.map +1 -1
  173. package/dist/render/shadow_mask_pass.js +73 -8
  174. package/dist/render/shadow_mask_pass.js.map +1 -1
  175. package/dist/render/sky.js +166 -126
  176. package/dist/render/sky.js.map +1 -1
  177. package/dist/render/underwater.js +624 -0
  178. package/dist/render/underwater.js.map +1 -0
  179. package/dist/render/water_caustics.js +1380 -0
  180. package/dist/render/water_caustics.js.map +1 -0
  181. package/dist/render/weightedblended_oit.js +3 -2
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +8 -0
  184. package/dist/scene/basesprite.js.map +1 -1
  185. package/dist/scene/batchgroup.js +3 -0
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +4 -1
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/hair.js +963 -0
  190. package/dist/scene/hair.js.map +1 -0
  191. package/dist/scene/light.js +5 -1
  192. package/dist/scene/light.js.map +1 -1
  193. package/dist/scene/mesh.js +481 -47
  194. package/dist/scene/mesh.js.map +1 -1
  195. package/dist/scene/meshdrawable.js +6 -0
  196. package/dist/scene/meshdrawable.js.map +1 -1
  197. package/dist/scene/msdftext.js +3 -0
  198. package/dist/scene/msdftext.js.map +1 -1
  199. package/dist/scene/msdftextsprite.js +3 -0
  200. package/dist/scene/msdftextsprite.js.map +1 -1
  201. package/dist/scene/particlesys.js +6 -0
  202. package/dist/scene/particlesys.js.map +1 -1
  203. package/dist/scene/scene.js +3 -0
  204. package/dist/scene/scene.js.map +1 -1
  205. package/dist/scene/scene_node.js +6 -1
  206. package/dist/scene/scene_node.js.map +1 -1
  207. package/dist/scene/terrain-cm/grass.js +3 -0
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  214. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  215. package/dist/scene/water.js +546 -4
  216. package/dist/scene/water.js.map +1 -1
  217. package/dist/shaders/atmosphere.js.map +1 -1
  218. package/dist/shaders/diffusion.js +54 -0
  219. package/dist/shaders/diffusion.js.map +1 -0
  220. package/dist/shaders/shadow.js +33 -21
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/temporal.js +71 -33
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js +22 -19
  225. package/dist/shaders/water.js.map +1 -1
  226. package/dist/shaders/water_medium.js +56 -0
  227. package/dist/shaders/water_medium.js.map +1 -0
  228. package/dist/shadow/dom.js +546 -0
  229. package/dist/shadow/dom.js.map +1 -0
  230. package/dist/shadow/pcf_opt.js +3 -5
  231. package/dist/shadow/pcf_opt.js.map +1 -1
  232. package/dist/shadow/pcf_pd.js +1 -1
  233. package/dist/shadow/pcf_pd.js.map +1 -1
  234. package/dist/shadow/receiver_bias.js +41 -0
  235. package/dist/shadow/receiver_bias.js.map +1 -0
  236. package/dist/shadow/shader.js +20 -60
  237. package/dist/shadow/shader.js.map +1 -1
  238. package/dist/shadow/shadow_impl.js +89 -0
  239. package/dist/shadow/shadow_impl.js.map +1 -1
  240. package/dist/shadow/shadow_region.js +1 -1
  241. package/dist/shadow/shadow_region.js.map +1 -1
  242. package/dist/shadow/shadowmapper.js +150 -37
  243. package/dist/shadow/shadowmapper.js.map +1 -1
  244. package/dist/shapes/shape.js +11 -2
  245. package/dist/shapes/shape.js.map +1 -1
  246. package/dist/shapes/sphere.js +50 -9
  247. package/dist/shapes/sphere.js.map +1 -1
  248. package/dist/utility/blueprint/common/constants.js +112 -2
  249. package/dist/utility/blueprint/common/constants.js.map +1 -1
  250. package/dist/utility/blueprint/material/func.js +142 -49
  251. package/dist/utility/blueprint/material/func.js.map +1 -1
  252. package/dist/utility/blueprint/material/ir.js +490 -25
  253. package/dist/utility/blueprint/material/ir.js.map +1 -1
  254. package/dist/utility/blueprint/material/texture.js +898 -4
  255. package/dist/utility/blueprint/material/texture.js.map +1 -1
  256. package/dist/utility/serialization/manager.js +434 -101
  257. package/dist/utility/serialization/manager.js.map +1 -1
  258. package/dist/utility/serialization/scene/animation.js +401 -5
  259. package/dist/utility/serialization/scene/animation.js.map +1 -1
  260. package/dist/utility/serialization/scene/batch.js +4 -0
  261. package/dist/utility/serialization/scene/batch.js.map +1 -1
  262. package/dist/utility/serialization/scene/camera.js +186 -26
  263. package/dist/utility/serialization/scene/camera.js.map +1 -1
  264. package/dist/utility/serialization/scene/common.js +26 -5
  265. package/dist/utility/serialization/scene/common.js.map +1 -1
  266. package/dist/utility/serialization/scene/hair.js +1141 -0
  267. package/dist/utility/serialization/scene/hair.js.map +1 -0
  268. package/dist/utility/serialization/scene/light.js +84 -4
  269. package/dist/utility/serialization/scene/light.js.map +1 -1
  270. package/dist/utility/serialization/scene/material.js +1867 -166
  271. package/dist/utility/serialization/scene/material.js.map +1 -1
  272. package/dist/utility/serialization/scene/mesh.js +231 -14
  273. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  274. package/dist/utility/serialization/scene/node.js +141 -7
  275. package/dist/utility/serialization/scene/node.js.map +1 -1
  276. package/dist/utility/serialization/scene/particle.js +4 -0
  277. package/dist/utility/serialization/scene/particle.js.map +1 -1
  278. package/dist/utility/serialization/scene/primitive.js +18 -0
  279. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  280. package/dist/utility/serialization/scene/sprite.js +4 -0
  281. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  282. package/dist/utility/serialization/scene/terrain.js +4 -0
  283. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  284. package/dist/utility/serialization/scene/text.js +4 -0
  285. package/dist/utility/serialization/scene/text.js.map +1 -1
  286. package/dist/utility/serialization/scene/water.js +1105 -21
  287. package/dist/utility/serialization/scene/water.js.map +1 -1
  288. package/dist/utility/serialization/types.js.map +1 -1
  289. package/dist/utility/shprojector.js +9 -8
  290. package/dist/utility/shprojector.js.map +1 -1
  291. package/dist/values.js +49 -2
  292. package/dist/values.js.map +1 -1
  293. package/package.json +3 -3
  294. package/dist/render/rendergraph/frame_graph_context.js +0 -41
  295. package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
  296. package/dist/shaders/ssgi.js +0 -63
  297. package/dist/shaders/ssgi.js.map +0 -1
  298. package/dist/shaders/ssgi_reprojection.js +0 -118
  299. package/dist/shaders/ssgi_reprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../src/material/shader/helper.ts"],"sourcesContent":["import {\r\n DEPTH_FARTHEST,\r\n DEPTH_REDUCE_CLOSER,\r\n DEPTH_REDUCE_FARTHER,\r\n REVERSE_Z,\r\n Vector2,\r\n Vector3,\r\n Vector4\r\n} from '@zephyr3d/base';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../../render/drawable';\r\nimport {\r\n MaterialVaryingFlags,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_TARGET_NORMAL,\r\n MORPH_TARGET_POSITION,\r\n MORPH_TARGET_TANGENT,\r\n MORPH_WEIGHTS_VECTOR_COUNT,\r\n RENDER_PASS_TYPE_DEPTH,\r\n RENDER_PASS_TYPE_LIGHT,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP\r\n} from '../../values';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n StructuredBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n PBGlobalScope,\r\n BindGroupLayout\r\n} from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { PunctualLight } from '../../scene/light';\r\nimport { decodeNormalizedFloatFromRGBA, linearToGamma } from '../../shaders/misc';\r\nimport { fetchSampler, getSamplerOptions } from '../../utility/misc';\r\nimport { PHYSICAL_BAKE_EXPOSURE } from '../../utility/physical';\r\nimport type { AtmosphereParams } from '../../shaders';\r\nimport { getAtmosphereParamsStruct, getDefaultAtmosphereParams } from '../../shaders';\r\nimport type { HeightFogParams } from '../../shaders/fog';\r\nimport { calculateFog, getDefaultHeightFogParams, getHeightFogParamsStruct } from '../../shaders/fog';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Camera } from '../../camera';\r\n\r\nconst UNIFORM_NAME_LIGHT_BUFFER = 'Z_UniformLightBuffer';\r\nconst UNIFORM_NAME_LIGHT_INDEX_TEXTURE = 'Z_UniformLightIndexTex';\r\nconst UNIFORM_NAME_BAKED_SKY_MAP = 'Z_UniformBakedSky';\r\nconst UNIFORM_NAME_AERIALPERSPECTIVE_LUT = 'Z_UniformAerialPerspectiveLUT';\r\nconst UNIFORM_NAME_SKYDISTANTLIGHT_LUT = 'Z_UniformSkyDistantLightLUT';\r\nconst UNIFORM_NAME_SHADOW_MAP = 'Z_UniformShadowMap';\r\nconst UNIFORM_NAME_SHADOW_MASK = 'Z_UniformShadowMask';\r\nconst UNIFORM_NAME_SHADOW_MASK_MODE = 'Z_UniformShadowMaskMode';\r\nconst UNIFORM_NAME_LINEAR_DEPTH_MAP = 'Z_UniformLinearDepth';\r\nconst UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE = 'Z_UniformLinearDepthSize';\r\nconst UNIFORM_NAME_SCENE_COLOR_MAP = 'Z_UniformSceneColor';\r\nconst UNIFORM_NAME_SCENE_COLOR_MAP_SIZE = 'Z_UniformSceneColorSize';\r\nconst UNIFORM_NAME_HIZ_DEPTH_MAP = 'Z_UniformHiZDepth';\r\nconst UNIFORM_NAME_HIZ_DEPTH_MAP_INFO = 'Z_UniformHiZDepthInfo';\r\nconst UNIFORM_NAME_OBJECT_COLOR = 'Z_ObjectColor';\r\nconst UNIFORM_NAME_WORLD_MATRIX = 'Z_UniformWorldMatrix';\r\nconst UNIFORM_NAME_PREV_WORLD_MATRIX = 'Z_UniformPrevWorldMatrix';\r\nconst UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME = 'Z_UniformPrevWorldMatrixFrame';\r\nconst UNIFORM_NAME_INSTANCE_DATA_STRIDE = 'Z_UniformInstanceDataStride';\r\nconst UNIFORM_NAME_INSTANCE_DATA = 'Z_UniformInstanceData';\r\nconst UNIFORM_NAME_INSTANCE_DATA_OFFSET = 'Z_UniformInstanceDataOffset';\r\nconst UNIFORM_NAME_BONE_MATRICES = 'Z_UniformBoneMatrices';\r\nconst UNIFORM_NAME_BONE_TEXTURE_SIZE = 'Z_UniformBoneTexSize';\r\nconst UNIFORM_NAME_BONE_INV_BIND_MATRIX = 'Z_UniformBoneInvBindMatrix';\r\nconst UNIFORM_NAME_MORPH_DATA = 'Z_UniformMorphData';\r\nconst UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';\r\n\r\n/**\r\n * Helper shader functions for the builtin material system\r\n * @public\r\n */\r\nexport class ShaderHelper {\r\n static readonly BILLBOARD_SPHERICAL = 1;\r\n static readonly BILLBOARD_SYLINDRAL = 2;\r\n static readonly MATERIAL_INSTANCE_DATA_OFFSET = 9;\r\n /** @internal */\r\n static defaultSunDir = Vector3.one().inplaceNormalize();\r\n /** @internal 1x1x1 fallback bound to the shadow-mask uniform when no mask exists this frame. */\r\n private static _dummyShadowMask: Nullable<Texture2DArray> = null;\r\n /** @internal */\r\n private static readonly SKIN_MATRIX_NAME = 'Z_SkinMatrix';\r\n private static readonly SKIN_PREV_MATRIX_NAME = 'Z_PrevSkinMatrix';\r\n private static readonly SKIN_BONE_OFFSET = 'Z_boneOffset';\r\n /** @internal */\r\n private static _drawableBindGroupLayouts: Record<string, BindGroupLayout> = {};\r\n /** @internal */\r\n private static readonly _lightUniformShadow = {\r\n sunDir: new Vector3(),\r\n shadowCascades: 1,\r\n positionAndRange: new Vector4(),\r\n directionAndCutoff: new Vector4(),\r\n diffuseAndIntensity: new Vector4(),\r\n extraParams: new Vector4(),\r\n cascadeDistances: new Vector4(),\r\n depthBiasValues: new Vector4(),\r\n shadowCameraParams: new Vector4(),\r\n depthBiasScales: new Vector4(),\r\n implParams: new Vector4(),\r\n shadowMatrices: new Float32Array(16 * 4),\r\n shadowStrength: 1,\r\n envLightStrength: 1,\r\n envLightSpecularStrength: 1\r\n };\r\n /** @internal */\r\n private static readonly _fogUniforms = {\r\n withAerialPerspective: 0,\r\n fogType: 0,\r\n additive: 0,\r\n atmosphereParams: getDefaultAtmosphereParams(),\r\n heightFogParams: getDefaultHeightFogParams()\r\n };\r\n static getObjectColorUniformName() {\r\n return UNIFORM_NAME_OBJECT_COLOR;\r\n }\r\n static getWorldMatrixUniformName() {\r\n return UNIFORM_NAME_WORLD_MATRIX;\r\n }\r\n static getPrevWorldMatrixUniformName() {\r\n return UNIFORM_NAME_PREV_WORLD_MATRIX;\r\n }\r\n static getPrevWorldMatrixFrameUniformName() {\r\n return UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME;\r\n }\r\n static getInstanceDataUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA;\r\n }\r\n static getInstanceDataOffsetUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA_OFFSET;\r\n }\r\n static getInstanceDataStrideUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA_STRIDE;\r\n }\r\n static getBoneMatricesUniformName() {\r\n return UNIFORM_NAME_BONE_MATRICES;\r\n }\r\n static getBoneTextureSizeUniformName() {\r\n return UNIFORM_NAME_BONE_TEXTURE_SIZE;\r\n }\r\n static getBoneInvBindMatrixUniformName() {\r\n return UNIFORM_NAME_BONE_INV_BIND_MATRIX;\r\n }\r\n static getMorphDataUniformName() {\r\n return UNIFORM_NAME_MORPH_DATA;\r\n }\r\n static getMorphInfoUniformName() {\r\n return UNIFORM_NAME_MORPH_INFO;\r\n }\r\n static getLightBufferUniformName() {\r\n return UNIFORM_NAME_LIGHT_BUFFER;\r\n }\r\n static getDrawableBindGroupLayout(skinning: boolean, morphing: boolean, instancing: boolean) {\r\n const hash = `${skinning ? 1 : 0}${morphing ? 1 : 0}${instancing ? 1 : 0}`;\r\n let bindGroupLayout = this._drawableBindGroupLayouts[hash];\r\n if (!bindGroupLayout) {\r\n const device = getDevice();\r\n const buildInfo = new ProgramBuilder(device).buildRender({\r\n vertex(pb) {\r\n ShaderHelper.vertexShaderDrawableStuff(this, skinning, morphing, instancing);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n pb.main(function () {});\r\n }\r\n });\r\n bindGroupLayout = buildInfo[2][1];\r\n this._drawableBindGroupLayouts[hash] = bindGroupLayout;\r\n }\r\n return bindGroupLayout;\r\n }\r\n /**\r\n * Prepares the fragment shader which is going to be used in our material system\r\n *\r\n * @remarks\r\n * This function will setup all nessesary uniforms acoording to the drawing context\r\n *\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n */\r\n static prepareFragmentShader(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.setupGlobalUniforms(pb, ctx);\r\n }\r\n /**\r\n * Prepares the vertex shader which is going to be used in our material system\r\n *\r\n * @remarks\r\n * This function will setup all nessesary uniforms according to the drawing context\r\n *\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n */\r\n static prepareVertexShader(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.setupGlobalUniforms(pb, ctx);\r\n this.prepareVertexShaderCommon(pb, ctx);\r\n }\r\n /** @internal */\r\n private static setupGlobalUniforms(pb: ProgramBuilder, ctx: DrawContext) {\r\n const scope = pb.getGlobalScope();\r\n const cameraStruct = pb.defineStruct([\r\n pb.vec4('position'),\r\n pb.mat4('viewProjectionMatrix'),\r\n pb.mat4('invViewProjectionMatrix'),\r\n pb.mat4('unjitteredVPMatrix'),\r\n pb.mat4('jitteredInvVPMatrix'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('worldMatrix'),\r\n pb.mat4('projectionMatrix'),\r\n pb.mat4('invProjectionMatrix'),\r\n pb.vec4('params'),\r\n ...(ctx.motionVectors && ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH\r\n ? [pb.mat4('prevUnjitteredVPMatrix')]\r\n : []),\r\n pb.vec2('renderSize'),\r\n pb.vec2('jitterValue'),\r\n pb.float('roughnessFactor'),\r\n pb.float('shadowDebugCascades'),\r\n pb.float('frameDeltaTime'),\r\n pb.float('elapsedTime'),\r\n pb.float('preExposure'),\r\n pb.int('framestamp')\r\n ]);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n const lightStruct = pb.defineStruct([\r\n pb.vec4('positionAndRange'),\r\n pb.vec4('directionCutoff'),\r\n pb.mat4('viewMatrix'),\r\n pb.vec4('depthBias'),\r\n pb.int('lightType')\r\n ]);\r\n scope.camera = cameraStruct().uniform(0);\r\n scope.light = lightStruct().uniform(0);\r\n } else if (\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH ||\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR\r\n ) {\r\n scope.camera = cameraStruct().uniform(0);\r\n } else if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n const useClusteredLighting = !ctx.currentShadowLight;\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG) {\r\n const fogStructMembers: PBShaderExp[] = [\r\n pb.int('withAerialPerspective'),\r\n pb.int('fogType'),\r\n pb.int('additive'),\r\n getAtmosphereParamsStruct(pb)('atmosphereParams'),\r\n getHeightFogParamsStruct(pb)('heightFogParams')\r\n ];\r\n const fogStruct = pb.defineStruct(fogStructMembers);\r\n scope.fog = fogStruct().uniform(0);\r\n // Static samplers: LUTs are rgba16f without mipmaps\r\n scope[UNIFORM_NAME_AERIALPERSPECTIVE_LUT] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[UNIFORM_NAME_SKYDISTANTLIGHT_LUT] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n }\r\n const lightStruct = ctx.currentShadowLight\r\n ? pb.defineStruct([\r\n pb.vec3('sunDir'),\r\n pb.int('shadowCascades'),\r\n pb.vec4('positionAndRange'),\r\n pb.vec4('directionAndCutoff'),\r\n pb.vec4('diffuseAndIntensity'),\r\n pb.vec4('extraParams'),\r\n pb.vec4('cascadeDistances'),\r\n pb.vec4('depthBiasValues'),\r\n pb.vec4('shadowCameraParams'),\r\n pb.vec4('depthBiasScales'),\r\n pb.vec4('implParams'),\r\n pb.vec4[16]('shadowMatrices'),\r\n pb.float('shadowStrength'),\r\n pb.float('envLightStrength'),\r\n pb.float('envLightSpecularStrength')\r\n ])\r\n : pb.defineStruct([\r\n pb.vec3('sunDir'),\r\n pb.float('envLightStrength'),\r\n pb.float('envLightSpecularStrength'),\r\n pb.vec4('clusterParams'),\r\n pb.ivec4('countParams'),\r\n pb.ivec2('lightIndexTexSize'),\r\n // Number of shadow-casting lights at the head of the clustered light\r\n // buffer (indices 1..N). Only present on the screen-space shadow mask\r\n // path (part of the global bind group hash), so the declared and bound\r\n // layouts always agree.\r\n ...(ctx.screenSpaceShadowMask ? [pb.int('numShadowLights')] : [])\r\n ]);\r\n scope.camera = cameraStruct().uniform(0);\r\n scope.light = lightStruct().uniform(0);\r\n if (useClusteredLighting) {\r\n scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(this.getMaxClusterLights() + 1) * 4]().uniformBuffer(0);\r\n // Non-WebGL1 devices fetch the light index texture with textureLoad\r\n scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE] = (\r\n pb.getDevice().type === 'webgl' ? pb.tex2D() : pb.utex2D().noSampler()\r\n ).uniform(0);\r\n // Screen-space shadow mask array (rgba8unorm, 4 shadow lights per layer).\r\n // Sampled by clustered lights whose buffer index is <= numShadowLights.\r\n // Presence is keyed into the global bind group hash, so declared and bound\r\n // layouts always agree.\r\n if (ctx.screenSpaceShadowMask) {\r\n scope[UNIFORM_NAME_SHADOW_MASK] = pb.tex2DArray().uniform(0);\r\n // Cluster shadow-light handling for the current queue: 1 = sample the\r\n // opaque shadow mask (opaque queue); 0 = skip shadow lights, which are\r\n // instead lit inline by the per-light additive passes (transparent queue,\r\n // e.g. OIT hair, where the opaque-depth mask would be incorrect).\r\n scope[UNIFORM_NAME_SHADOW_MASK_MODE] = pb.int().uniform(0);\r\n }\r\n }\r\n // Baked sky cube: rgba16f without mipmaps\r\n scope[UNIFORM_NAME_BAKED_SKY_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n if (ctx.currentShadowLight) {\r\n const scope = pb.getGlobalScope();\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight)!;\r\n const tex = shadowMapParams.shadowMap!.isTextureCube()\r\n ? shadowMapParams.shadowMap.isDepth()\r\n ? scope.$builder.texCubeShadow()\r\n : scope.$builder.texCube()\r\n : shadowMapParams.shadowMap!.isTexture2D()\r\n ? shadowMapParams.shadowMap.isDepth()\r\n ? scope.$builder.tex2DShadow()\r\n : scope.$builder.tex2D()\r\n : shadowMapParams.shadowMap!.isDepth()\r\n ? scope.$builder.tex2DArrayShadow()\r\n : scope.$builder.tex2DArray();\r\n if (\r\n !shadowMapParams.shadowMap!.isDepth() &&\r\n !ctx.device.getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap!.format)\r\n .filterable\r\n ) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n if (shadowMapParams.shadowMap!.isDepth()) {\r\n // Depth-format shadow maps are sampled exclusively through the\r\n // comparison sampler (textureSampleCompareLevel); skip the regular\r\n // auto-bound sampler.\r\n tex.noSampler();\r\n }\r\n scope[UNIFORM_NAME_SHADOW_MAP] = tex.uniform(0);\r\n }\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb, ctx);\r\n }\r\n if (ctx.linearDepthTexture) {\r\n // Depth values must never be filtered across geometry edges; nearest\r\n // matches the default sampler for unfilterable float formats.\r\n scope[UNIFORM_NAME_LINEAR_DEPTH_MAP] = pb\r\n .tex2D()\r\n .sampleType('unfilterable-float')\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n scope[UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE] = pb.vec2().uniform(0);\r\n }\r\n if (ctx.sceneColorTexture) {\r\n // Scene color copy: single mip level\r\n scope[UNIFORM_NAME_SCENE_COLOR_MAP] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[UNIFORM_NAME_SCENE_COLOR_MAP_SIZE] = pb.vec2().uniform(0);\r\n }\r\n if (ctx.HiZTexture) {\r\n // Matches the fetchSampler('clamp_nearest') previously passed at runtime\r\n scope[UNIFORM_NAME_HIZ_DEPTH_MAP] = pb\r\n .tex2D()\r\n .sampleType('unfilterable-float')\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest'));\r\n scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO] = pb.vec4().uniform(0);\r\n }\r\n }\r\n }\r\n /**\r\n * This function checks if the shader needs to process skeletal animation.\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns true if the shader needs to process skeletal animation, otherwise false.\r\n */\r\n static hasSkinning(scope: PBInsideFunctionScope) {\r\n return !!scope[UNIFORM_NAME_BONE_MATRICES];\r\n }\r\n /**\r\n * This function checks if the shader needs to process morph target animation.\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns true if the shader needs to process morph target animation, otherwise false.\r\n */\r\n static hasMorphing(scope: PBInsideFunctionScope) {\r\n return !!scope[UNIFORM_NAME_MORPH_DATA];\r\n }\r\n /**\r\n * Calculate skinning matrix for current vertex\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns Skinning matrix for current vertex, or null if there is not skeletal animation\r\n */\r\n static calculateSkinMatrix(scope: PBInsideFunctionScope) {\r\n if (!this.hasSkinning(scope)) {\r\n return null;\r\n }\r\n const pb = scope.$builder;\r\n const funcNameGetBoneMatrixFromTexture = 'Z_getBoneMatrixFromTexture';\r\n pb.func(funcNameGetBoneMatrixFromTexture, [pb.int('boneIndex')], function () {\r\n const boneTexture = this[UNIFORM_NAME_BONE_MATRICES];\r\n this.$l.uvOffsets = pb.textureSampleLevel(\r\n boneTexture,\r\n pb.div(pb.vec2(0.5), this[UNIFORM_NAME_BONE_TEXTURE_SIZE]),\r\n 0\r\n );\r\n this.$l.currentOffset = pb.int(this.uvOffsets.x);\r\n this.$l.w = this[UNIFORM_NAME_BONE_TEXTURE_SIZE].x;\r\n this.$l.pixelIndex = pb.float(pb.mul(pb.add(this.boneIndex, this.currentOffset), 4));\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.w);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.w));\r\n this.$l.u1 = pb.div(pb.add(this.xIndex, 0.5), this.w);\r\n this.$l.u2 = pb.div(pb.add(this.xIndex, 1.5), this.w);\r\n this.$l.u3 = pb.div(pb.add(this.xIndex, 2.5), this.w);\r\n this.$l.u4 = pb.div(pb.add(this.xIndex, 3.5), this.w);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.w);\r\n this.$l.row1 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u1, this.v), 0);\r\n this.$l.row2 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u2, this.v), 0);\r\n this.$l.row3 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u3, this.v), 0);\r\n this.$l.row4 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u4, this.v), 0);\r\n this.$return(pb.mat4(this.row1, this.row2, this.row3, this.row4));\r\n });\r\n const funcNameGetSkinningMatrix = 'Z_getSkinningMatrix';\r\n pb.func(funcNameGetSkinningMatrix, [], function () {\r\n const invBindMatrix = this[UNIFORM_NAME_BONE_INV_BIND_MATRIX];\r\n const blendIndices = scope.$getVertexAttrib('blendIndices')!;\r\n const blendWeights = scope.$getVertexAttrib('blendWeights')!;\r\n this.$l.m0 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[0]));\r\n this.$l.m1 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[1]));\r\n this.$l.m2 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[2]));\r\n this.$l.m3 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[3]));\r\n this.$l.m = pb.add(\r\n pb.mul(this.m0, blendWeights.x),\r\n pb.mul(this.m1, blendWeights.y),\r\n pb.mul(this.m2, blendWeights.z),\r\n pb.mul(this.m3, blendWeights.w)\r\n );\r\n this.$return(pb.mul(invBindMatrix, this.m));\r\n });\r\n return scope.$g[funcNameGetSkinningMatrix]() as PBShaderExp;\r\n }\r\n static calculateMorphDelta(scope: PBInsideFunctionScope, attrib: number) {\r\n const pb = scope.$builder;\r\n const isWebGL1 = pb.getDevice().type === 'webgl';\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.calculateMorphDelta(): must be called at vertex stage`);\r\n }\r\n const funcName = 'Z_calculateMorph';\r\n const that = this;\r\n pb.func(funcName, [pb.int('offset')], function () {\r\n this.$if(pb.lessThan(this.offset, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.vertexIndex = isWebGL1\r\n ? pb.int(scope.$inputs.zFakeVertexID)\r\n : pb.int(scope.$builtins.vertexIndex);\r\n const morphInfo = scope[that.getMorphInfoUniformName()];\r\n this.$l.metaData = pb.ivec4(morphInfo[0]);\r\n this.$l.texWidth = pb.float(this.metaData.x);\r\n this.$l.texHeight = pb.float(this.metaData.y);\r\n this.$l.numVertices = this.metaData.z;\r\n this.$l.numTargets = this.metaData.w;\r\n this.$l.value = pb.vec4(0);\r\n if (isWebGL1) {\r\n this.$for(pb.int('i'), 0, MORPH_WEIGHTS_VECTOR_COUNT, function () {\r\n this.$for(pb.int('j'), 0, 4, function () {\r\n this.$l.index = pb.add(pb.mul(this.i, 4), this.j);\r\n this.$if(pb.greaterThanEqual(this.index, this.numTargets), function () {\r\n this.$return(this.value);\r\n });\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$if(pb.notEqual(this.weight, 0), function () {\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(this.offset, pb.mul(this.index, this.numVertices), this.vertexIndex)\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.texWidth));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), this.texWidth);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.texHeight);\r\n this.$l.morphValue = pb.textureSampleLevel(\r\n this[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n this.value = pb.add(this.value, pb.mul(this.morphValue, this.weight));\r\n });\r\n });\r\n });\r\n } else {\r\n this.$for(pb.int('t'), 0, this.numTargets, function () {\r\n this.$l.i = pb.sar(this.t, 2);\r\n this.$l.j = pb.compAnd(this.t, 3);\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$if(pb.notEqual(this.weight, 0), function () {\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(this.offset, pb.mul(this.t, this.numVertices), this.vertexIndex)\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.texWidth));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), this.texWidth);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.texHeight);\r\n this.$l.morphValue = pb.textureSampleLevel(\r\n this[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n this.value = pb.add(this.value, pb.mul(this.morphValue, this.weight));\r\n });\r\n });\r\n }\r\n this.$return(this.value);\r\n });\r\n const pos = 1 + MORPH_WEIGHTS_VECTOR_COUNT + (attrib >> 2);\r\n const comp = attrib & 3;\r\n const offset = scope[this.getMorphInfoUniformName()][pos][comp];\r\n return scope[funcName](pb.int(offset)) as PBShaderExp;\r\n }\r\n /** @internal */\r\n static prepareSkinAnimation(scope: PBInsideFunctionScope) {\r\n if (!this.hasSkinning(scope)) {\r\n return;\r\n }\r\n const that = this;\r\n const pb = scope.$builder;\r\n const funcNameGetBoneMatrixFromTexture = 'Z_getBoneMatrixFromTexture';\r\n pb.func(funcNameGetBoneMatrixFromTexture, [pb.float('boneIndex'), pb.float('boneOffset')], function () {\r\n const boneTexture = this[UNIFORM_NAME_BONE_MATRICES];\r\n this.$l.w = this[UNIFORM_NAME_BONE_TEXTURE_SIZE].x;\r\n this.$l.pixelIndex = pb.mul(pb.add(this.boneIndex, this.boneOffset), 4);\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.w);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.w));\r\n this.$l.u1 = pb.div(pb.add(this.xIndex, 0.5), this.w);\r\n this.$l.u2 = pb.div(pb.add(this.xIndex, 1.5), this.w);\r\n this.$l.u3 = pb.div(pb.add(this.xIndex, 2.5), this.w);\r\n this.$l.u4 = pb.div(pb.add(this.xIndex, 3.5), this.w);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.w);\r\n this.$l.row1 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u1, this.v), 0);\r\n this.$l.row2 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u2, this.v), 0);\r\n this.$l.row3 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u3, this.v), 0);\r\n this.$l.row4 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u4, this.v), 0);\r\n this.$return(pb.mat4(this.row1, this.row2, this.row3, this.row4));\r\n });\r\n const funcNameGetSkinningMatrix = 'Z_getSkinningMatrix';\r\n pb.func(funcNameGetSkinningMatrix, [pb.float('boneOffset')], function () {\r\n const invBindMatrix = this[UNIFORM_NAME_BONE_INV_BIND_MATRIX];\r\n const blendIndices = scope.$getVertexAttrib('blendIndices')!;\r\n const blendWeights = scope.$getVertexAttrib('blendWeights')!;\r\n this.$l.m0 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[0], this.boneOffset);\r\n this.$l.m1 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[1], this.boneOffset);\r\n this.$l.m2 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[2], this.boneOffset);\r\n this.$l.m3 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[3], this.boneOffset);\r\n this.$l.m = pb.add(\r\n pb.mul(this.m0, blendWeights.x),\r\n pb.mul(this.m1, blendWeights.y),\r\n pb.mul(this.m2, blendWeights.z),\r\n pb.mul(this.m3, blendWeights.w)\r\n );\r\n this.$return(pb.mul(invBindMatrix, this.m));\r\n });\r\n const motionVector = !!this.getUnjitteredViewProjectionMatrix(scope);\r\n const boneTexture = scope[UNIFORM_NAME_BONE_MATRICES];\r\n scope.$l[that.SKIN_BONE_OFFSET] = pb.textureSampleLevel(\r\n boneTexture,\r\n pb.div(pb.vec2(0.5), scope[UNIFORM_NAME_BONE_TEXTURE_SIZE]),\r\n 0\r\n ).xy;\r\n scope.$l[that.SKIN_MATRIX_NAME] = scope[funcNameGetSkinningMatrix](scope[that.SKIN_BONE_OFFSET].x);\r\n if (motionVector) {\r\n scope.$l[that.SKIN_PREV_MATRIX_NAME] = scope[funcNameGetSkinningMatrix](scope[that.SKIN_BONE_OFFSET].y);\r\n }\r\n }\r\n /**\r\n * Calculates the vertex position of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated vertex position in object space, or null if pos is null\r\n */\r\n static resolveVertexPosition(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexPosition(): must be called at vertex stage`);\r\n }\r\n if (!pb.getGlobalScope().$getVertexAttrib('position')) {\r\n pb.getGlobalScope().$inputs.Z_pos = pb.vec3().attrib('position');\r\n }\r\n const that = this;\r\n const params =\r\n scope[that.SKIN_MATRIX_NAME] && scope[that.SKIN_PREV_MATRIX_NAME]\r\n ? [pb.mat4('skinMatrix'), pb.mat4('prevSkinMatrix')]\r\n : scope[that.SKIN_MATRIX_NAME]\r\n ? [pb.mat4('skinMatrix')]\r\n : [];\r\n pb.func('Z_resolveVertexPosition', params, function () {\r\n this.$l.opos = this.$getVertexAttrib('position')!.xyz;\r\n if (that.hasMorphing(scope)) {\r\n this.opos = pb.add(this.opos, that.calculateMorphDelta(this, MORPH_TARGET_POSITION).xyz);\r\n }\r\n if (this.skinMatrix) {\r\n this.$l.pos = pb.mul(this.skinMatrix, pb.vec4(this.opos, 1)).xyz;\r\n } else {\r\n this.$l.pos = this.opos;\r\n }\r\n const prevUnjitteredVPMatrix = that.getPrevUnjitteredViewProjectionMatrix(this);\r\n if (prevUnjitteredVPMatrix) {\r\n this.$l.unjitteredVPMatrix = that.getUnjitteredViewProjectionMatrix(this);\r\n this.$l.worldPos = pb.mul(that.getWorldMatrix(this), pb.vec4(this.pos, 1));\r\n if (this.prevSkinMatrix) {\r\n this.$l.prevWorldPos = pb.mul(\r\n that.getPrevWorldMatrix(this),\r\n pb.mul(this.prevSkinMatrix, pb.vec4(this.opos, 1))\r\n );\r\n } else {\r\n this.$l.prevWorldPos = pb.mul(that.getPrevWorldMatrix(this), pb.vec4(this.pos, 1));\r\n }\r\n this.$outputs.zMotionVectorPosCurrent = pb.mul(this.unjitteredVPMatrix, this.worldPos);\r\n this.$outputs.zMotionVectorPosPrev = pb.mul(prevUnjitteredVPMatrix, this.prevWorldPos);\r\n }\r\n this.$return(this.pos);\r\n });\r\n return (\r\n scope[that.SKIN_MATRIX_NAME] && scope[that.SKIN_PREV_MATRIX_NAME]\r\n ? scope.Z_resolveVertexPosition(scope[that.SKIN_MATRIX_NAME], scope[that.SKIN_PREV_MATRIX_NAME])\r\n : scope[that.SKIN_MATRIX_NAME]\r\n ? scope.Z_resolveVertexPosition(scope[that.SKIN_MATRIX_NAME])\r\n : scope.Z_resolveVertexPosition()\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Resolve motion vector\r\n *\r\n * @param scope - Current shader scope\r\n * @param worldPos - Current object position in world space\r\n * @param prevWorldPos - Previous object position in world space\r\n */\r\n static resolveMotionVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp, prevWorldPos: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const prevUnjitteredVPMatrix = that.getPrevUnjitteredViewProjectionMatrix(scope);\r\n if (prevUnjitteredVPMatrix) {\r\n const unjitteredVPMatrix = that.getUnjitteredViewProjectionMatrix(scope);\r\n scope.$outputs.zMotionVectorPosCurrent = pb.mul(unjitteredVPMatrix, pb.vec4(worldPos.xyz, 1));\r\n scope.$outputs.zMotionVectorPosPrev = pb.mul(prevUnjitteredVPMatrix, pb.vec4(prevWorldPos.xyz, 1));\r\n }\r\n }\r\n /**\r\n * Calculates the normal vector of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param normal - Vertex normal input, must be type of vec3, null if no vertex normal input\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated normal vector in object space, or null if normal is null\r\n */\r\n static resolveVertexNormal(scope: PBInsideFunctionScope, normal?: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexNormal(): must be called in vertex stage`);\r\n }\r\n const funcScope = pb.getCurrentFunctionScope();\r\n if (!funcScope || !funcScope.$isMain()) {\r\n throw new Error(`ShaderHelper.resolveVertexNormal(): must be called at entry function`);\r\n }\r\n if (!normal) {\r\n if (!scope.$getVertexAttrib('normal')) {\r\n scope.$inputs.Z_normal = pb.vec3().attrib('normal');\r\n }\r\n normal = scope.$getVertexAttrib('normal')!;\r\n }\r\n if (this.hasMorphing(scope)) {\r\n normal = pb.normalize(pb.add(normal, this.calculateMorphDelta(scope, MORPH_TARGET_NORMAL).xyz));\r\n }\r\n if (scope[this.SKIN_MATRIX_NAME]) {\r\n return pb.mul(scope[this.SKIN_MATRIX_NAME], pb.vec4(normal, 0)).xyz as PBShaderExp;\r\n } else {\r\n return normal;\r\n }\r\n }\r\n /**\r\n * Calculates the tangent vector of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param tangent - Vertex tangent input, must be type of vec4, null if no vertex tangent input\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated tangent vector of type vec4 in object space, or null if tangent is null\r\n */\r\n static resolveVertexTangent(scope: PBInsideFunctionScope, tangent?: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexTangent(): must be called in vertex stage`);\r\n }\r\n const funcScope = pb.getCurrentFunctionScope();\r\n if (!funcScope || !funcScope.$isMain()) {\r\n throw new Error(`ShaderHelper.resolveVertexTangent(): must be called at entry function`);\r\n }\r\n if (!tangent) {\r\n if (!scope.$getVertexAttrib('tangent')) {\r\n scope.$inputs.Z_tangent = pb.vec4().attrib('tangent');\r\n }\r\n tangent = scope.$getVertexAttrib('tangent')!;\r\n }\r\n if (this.hasMorphing(scope)) {\r\n tangent = pb.normalize(\r\n pb.add(tangent, pb.vec4(this.calculateMorphDelta(scope, MORPH_TARGET_TANGENT).xyz, 0))\r\n );\r\n }\r\n if (scope[this.SKIN_MATRIX_NAME]) {\r\n return pb.vec4(\r\n pb.mul(scope[this.SKIN_MATRIX_NAME], pb.vec4(tangent.xyz, 0)).xyz,\r\n tangent.w\r\n ) as PBShaderExp;\r\n } else {\r\n return tangent;\r\n }\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the world matrix of current object to be drawn\r\n * @param scope - Current shader scope\r\n * @returns The world matrix of current object to be drawn\r\n */\r\n static getWorldMatrix(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n return (scope[UNIFORM_NAME_WORLD_MATRIX] ??\r\n pb.mat4(\r\n this.getInstancedUniform(scope, 0),\r\n this.getInstancedUniform(scope, 1),\r\n this.getInstancedUniform(scope, 2),\r\n this.getInstancedUniform(scope, 3)\r\n )) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the world matrix at previous frame of current object to be drawn\r\n * @param scope - Current shader scope\r\n * @returns The world matrix at previous frame of current object to be drawn\r\n */\r\n static getPrevWorldMatrix(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const framestamp = this.getFramestamp(scope);\r\n if (scope[UNIFORM_NAME_WORLD_MATRIX]) {\r\n if (pb.getDevice().type === 'webgpu') {\r\n pb.func('Z_getPrevWorldMatrix', [pb.int('framestamp')], function () {\r\n this.$if(pb.equal(this.framestamp, this[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME]), function () {\r\n this.$return(this[UNIFORM_NAME_PREV_WORLD_MATRIX]);\r\n }).$else(function () {\r\n this.$return(this[UNIFORM_NAME_WORLD_MATRIX]);\r\n });\r\n });\r\n return scope.Z_getPrevWorldMatrix(framestamp);\r\n } else {\r\n return scope.$choice(\r\n pb.equal(framestamp, scope[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME]),\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRIX],\r\n scope[UNIFORM_NAME_WORLD_MATRIX]\r\n );\r\n }\r\n } else {\r\n pb.func('Z_getPrevWorldMatrix', [pb.int('framestamp')], function () {\r\n this.$l.prevFrame = pb.floatBitsToInt(that.getInstancedUniform(this, 4).x);\r\n this.$l.index = this.$choice(pb.equal(this.framestamp, this.prevFrame), pb.int(5), pb.int(0));\r\n this.$return(\r\n pb.mat4(\r\n that.getInstancedUniform(scope, this.index),\r\n that.getInstancedUniform(scope, pb.add(this.index, 1)),\r\n that.getInstancedUniform(scope, pb.add(this.index, 2)),\r\n that.getInstancedUniform(scope, pb.add(this.index, 3))\r\n )\r\n );\r\n });\r\n return scope.Z_getPrevWorldMatrix(framestamp) as PBShaderExp;\r\n }\r\n }\r\n /**\r\n * Gets the instance uniform value of type vec4 by uniform index\r\n * @param scope - Current shader scope\r\n * @returns instance uniform value\r\n */\r\n static getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n return scope[UNIFORM_NAME_INSTANCE_DATA].at(\r\n pb.add(\r\n pb.mul(scope[UNIFORM_NAME_INSTANCE_DATA_STRIDE], pb.uint(scope.$builtins.instanceIndex)),\r\n scope[UNIFORM_NAME_INSTANCE_DATA_OFFSET],\r\n pb.uint(uniformIndex)\r\n )\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the normal matrix of current object to be drawn\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The normal matrix of current object to be drawn\r\n */\r\n static getNormalMatrix(scope: PBInsideFunctionScope) {\r\n return this.getWorldMatrix(scope);\r\n }\r\n /**\r\n * Vertex shader drawable stuff\r\n *\r\n * @param scope - Current shader scope\r\n * @param skinning - true if skinning is used, otherwise false.\r\n * @param instanced - true if instancing is used, otherwise false.\r\n */\r\n static vertexShaderDrawableStuff(\r\n scope: PBGlobalScope,\r\n skinning: boolean,\r\n morphing: boolean,\r\n instanced: boolean\r\n ): void {\r\n const pb = scope.$builder;\r\n if (instanced) {\r\n scope[UNIFORM_NAME_INSTANCE_DATA_STRIDE] = pb.uint().uniform(1);\r\n scope[UNIFORM_NAME_INSTANCE_DATA_OFFSET] = pb.uint().uniform(1);\r\n scope[UNIFORM_NAME_INSTANCE_DATA] = pb.vec4[65536 >> 4]().uniformBuffer(3);\r\n } else {\r\n scope[UNIFORM_NAME_WORLD_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME] = pb.int().uniform(1);\r\n scope[UNIFORM_NAME_OBJECT_COLOR] = pb.vec4().uniform(1);\r\n }\r\n if (skinning) {\r\n scope[UNIFORM_NAME_BONE_MATRICES] = pb.tex2D().uniform(1).sampleType('unfilterable-float');\r\n scope[UNIFORM_NAME_BONE_INV_BIND_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_BONE_TEXTURE_SIZE] = pb.vec2().uniform(1);\r\n }\r\n if (morphing) {\r\n scope[UNIFORM_NAME_MORPH_DATA] = pb.tex2D().uniform(1).sampleType('unfilterable-float');\r\n scope[UNIFORM_NAME_MORPH_INFO] =\r\n pb.vec4[1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT]().uniformBuffer(1);\r\n }\r\n }\r\n /** @internal */\r\n static prepareVertexShaderCommon(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.vertexShaderDrawableStuff(\r\n pb.getGlobalScope(),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n );\r\n }\r\n /** @internal */\r\n static setCameraUniforms(bindGroup: BindGroup, ctx: DrawContext, camera: Camera, linear: boolean) {\r\n const pos = camera.getWorldPosition();\r\n const useJitter =\r\n ctx.motionVectors &&\r\n ctx.renderPass!.type !== RENDER_PASS_TYPE_SHADOWMAP &&\r\n ctx.renderPass!.type !== RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const cameraStruct = {\r\n position: new Vector4(pos.x, pos.y, pos.z, 0),\r\n renderSize: new Vector2(ctx.renderWidth, ctx.renderHeight),\r\n viewProjectionMatrix: useJitter ? camera.jitteredVPMatrix : camera.viewProjectionMatrix,\r\n unjitteredVPMatrix: camera.viewProjectionMatrix,\r\n jitteredInvVPMatrix: useJitter ? camera.jitteredInvVPMatrix : camera.invViewProjectionMatrix,\r\n jitterValue: camera.jitterValue,\r\n invViewProjectionMatrix: camera.invViewProjectionMatrix,\r\n projectionMatrix: camera.getProjectionMatrix(),\r\n invProjectionMatrix: camera.getInvProjectionMatrix(),\r\n viewMatrix: camera.viewMatrix,\r\n worldMatrix: camera.worldMatrix,\r\n params: new Vector4(camera.getNearPlane(), camera.getFarPlane(), ctx.flip ? -1 : 1, linear ? 0 : 1),\r\n roughnessFactor: camera.SSR ? camera.ssrRoughnessFactor : 1,\r\n shadowDebugCascades: camera.shadowDebugCascades ? 1 : 0,\r\n frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,\r\n elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,\r\n preExposure: this.getPreExposure(ctx),\r\n framestamp: ctx.device.frameInfo.frameCounter\r\n } as any;\r\n if (ctx.motionVectors && ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH) {\r\n cameraStruct.prevUnjitteredVPMatrix = camera.prevVPMatrix;\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (ctx.linearDepthTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_LINEAR_DEPTH_MAP, ctx.linearDepthTexture);\r\n bindGroup.setValue(\r\n UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE,\r\n new Vector2(ctx.linearDepthTexture.width, ctx.linearDepthTexture.height)\r\n );\r\n }\r\n if (ctx.sceneColorTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_SCENE_COLOR_MAP, ctx.sceneColorTexture);\r\n bindGroup.setValue(\r\n UNIFORM_NAME_SCENE_COLOR_MAP_SIZE,\r\n new Vector2(ctx.sceneColorTexture.width, ctx.sceneColorTexture.height)\r\n );\r\n }\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_HIZ_DEPTH_MAP, ctx.HiZTexture, fetchSampler('clamp_nearest'));\r\n bindGroup.setValue(\r\n UNIFORM_NAME_HIZ_DEPTH_MAP_INFO,\r\n new Vector4(ctx.HiZTexture.width, ctx.HiZTexture.height, ctx.HiZTexture.mipLevelCount, 0)\r\n );\r\n }\r\n }\r\n bindGroup.setValue('camera', cameraStruct);\r\n }\r\n /** @internal */\r\n static setLightUniformsShadowMap(bindGroup: BindGroup, ctx: DrawContext, light: PunctualLight) {\r\n if (light) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get(light)!;\r\n bindGroup.setValue('light', {\r\n positionAndRange: light.positionAndRange,\r\n directionCutoff: light.directionAndCutoff,\r\n viewMatrix: light.viewMatrix,\r\n depthBias: shadowMapParams.depthBiasValues[0],\r\n lightType: light.lightType\r\n });\r\n }\r\n }\r\n /** @internal */\r\n static setFogUniforms(\r\n bindGroup: BindGroup,\r\n withAerialPerspective: number,\r\n fogType: number,\r\n additive: number,\r\n atmosphereParams: AtmosphereParams,\r\n heightFogParams: HeightFogParams,\r\n aerialPerspectiveLUT: Texture2D,\r\n skyDistantLightLUT: Texture2D\r\n ) {\r\n this._fogUniforms.withAerialPerspective = withAerialPerspective;\r\n this._fogUniforms.fogType = fogType;\r\n this._fogUniforms.additive = additive;\r\n this._fogUniforms.atmosphereParams = atmosphereParams;\r\n this._fogUniforms.heightFogParams = heightFogParams;\r\n bindGroup.setValue('fog', this._fogUniforms);\r\n bindGroup.setTexture(UNIFORM_NAME_AERIALPERSPECTIVE_LUT, aerialPerspectiveLUT);\r\n bindGroup.setTexture(UNIFORM_NAME_SKYDISTANTLIGHT_LUT, skyDistantLightLUT);\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Camera pre-exposure factor for scene-linear lighting quantities.\r\n *\r\n * @remarks\r\n * Physical lighting authors light intensities in photometric units (lux, candela, cd/m²), whose\r\n * magnitudes (~1e5 for daylight) neither fit an rgba16f render target nor leave usable headroom\r\n * for specular highlights. Following Filament, the camera exposure is folded into every light\r\n * quantity on the CPU so the HDR target stays near 1.0 and downstream passes need no unit\r\n * awareness. Legacy returns 1 so its uploads stay byte-identical.\r\n */\r\n static getPreExposure(ctx: DrawContext) {\r\n return ctx.scene.lightingMode === 'physical' ? ctx.camera.exposure : 1;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Light color/intensity vector with the camera pre-exposure folded into the intensity component.\r\n *\r\n * @remarks\r\n * Only the intensity (`w`) is scaled; the color stays untouched, matching Filament's\r\n * `FScene::prepareDynamicLights`. The light's own cached vector is never mutated because it is\r\n * shared across every camera rendering the scene.\r\n */\r\n static getPreExposedColorIntensity(light: PunctualLight, ctx: DrawContext, out?: Vector4) {\r\n const src = light.diffuseAndIntensity;\r\n const result = out ?? new Vector4();\r\n result.setXYZW(src.x, src.y, src.z, src.w * this.getPreExposure(ctx));\r\n return result;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Environment lighting scale uploaded as `light.envLightStrength`.\r\n *\r\n * @remarks\r\n * Legacy uses the unitless {@link EnvLightWrapper.strength}.\r\n *\r\n * Physical returns the ratio that converts the cached sky bake from its fixed storage exposure\r\n * (`SkyRenderer.PHYSICAL_BAKE_EXPOSURE`) to the live camera exposure. Every environment source is\r\n * normalized into that one space before it reaches the IBL -- the scattering atmosphere emits\r\n * photometric luminance, authored 0..1 skyboxes/panoramas are lifted by\r\n * {@link EnvLightWrapper.intensity} -- so no pass consuming `envLightStrength` has to know the\r\n * sky type.\r\n *\r\n * The bake cannot simply hold raw cd/m²: the environment cubemap is `rg11b10uf`/`rgba16f` and a\r\n * daylight sun overflows it to Inf, which `prefilterCubemap` then spreads across the whole IBL.\r\n *\r\n * {@link EnvLightWrapper.strength} multiplies the result in both modes. It is the only per-frame\r\n * dimmer for environment lighting: the photometric `intensity` reaches the image solely through\r\n * the cached bake, and a `scatter` sky does not even consult it (its brightness comes from the\r\n * sun), so without this factor there would be no way to turn the IBL down without re-baking.\r\n */\r\n static getEnvLightLuminance(ctx: DrawContext) {\r\n const env = ctx.env;\r\n if (!env) {\r\n return 0;\r\n }\r\n const strength = env.light.strength ?? 0;\r\n return ctx.scene.lightingMode === 'physical'\r\n ? (this.getPreExposure(ctx) / PHYSICAL_BAKE_EXPOSURE) * strength\r\n : strength;\r\n }\r\n /** @internal */\r\n static setLightUniforms(\r\n bindGroup: BindGroup,\r\n ctx: DrawContext,\r\n clusterParams: Float32Array<ArrayBuffer>,\r\n countParams: Int32Array<ArrayBuffer>,\r\n lightBuffer: StructuredBuffer,\r\n lightIndexTexture: Texture2D\r\n ) {\r\n const envLightStrength = this.getEnvLightLuminance(ctx);\r\n bindGroup.setValue('light', {\r\n sunDir: ctx.sunLight ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1) : this.defaultSunDir,\r\n clusterParams: clusterParams,\r\n countParams: countParams,\r\n envLightStrength,\r\n envLightSpecularStrength: ctx.env!.light.specularStrength ?? 1,\r\n lightIndexTexSize: new Int32Array([lightIndexTexture.width, lightIndexTexture.height]),\r\n ...(ctx.screenSpaceShadowMask ? { numShadowLights: ctx.clusteredLight?.numShadowLights ?? 0 } : {})\r\n });\r\n bindGroup.setBuffer(UNIFORM_NAME_LIGHT_BUFFER, lightBuffer);\r\n bindGroup.setTexture(UNIFORM_NAME_LIGHT_INDEX_TEXTURE, lightIndexTexture);\r\n if (ctx.screenSpaceShadowMask) {\r\n // The mask array is declared for the clustered light pass whenever the flag is\r\n // on (keyed into the global bind group hash). When there are no shadow lights\r\n // this frame the mask is never sampled, but a valid array texture must still\r\n // be bound: fall back to a 1x1 dummy.\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_SHADOW_MASK,\r\n ctx.shadowMaskTexture ?? this.getDummyShadowMask(ctx.device),\r\n fetchSampler('clamp_nearest')\r\n );\r\n }\r\n bindGroup.setTexture(UNIFORM_NAME_BAKED_SKY_MAP, ctx.scene.env.sky.getBakedSkyTexture(ctx));\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup, ctx);\r\n }\r\n }\r\n /** @internal */\r\n static setLightUniformsShadow(bindGroup: BindGroup, ctx: DrawContext, light: PunctualLight) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get(light)!;\r\n this._lightUniformShadow.sunDir = ctx.sunLight\r\n ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1)\r\n : this.defaultSunDir;\r\n this._lightUniformShadow.shadowCascades = shadowMapParams.numShadowCascades;\r\n this._lightUniformShadow.positionAndRange.set(light.positionAndRange);\r\n this._lightUniformShadow.directionAndCutoff.set(light.directionAndCutoff);\r\n this.getPreExposedColorIntensity(light, ctx, this._lightUniformShadow.diffuseAndIntensity);\r\n this._lightUniformShadow.extraParams.set(light.extraParams);\r\n this._lightUniformShadow.cascadeDistances.set(shadowMapParams.cascadeDistances);\r\n this._lightUniformShadow.depthBiasValues.set(shadowMapParams.depthBiasValues[0]);\r\n this._lightUniformShadow.shadowCameraParams.set(shadowMapParams.cameraParams);\r\n this._lightUniformShadow.depthBiasScales.set(shadowMapParams.depthBiasScales);\r\n shadowMapParams.impl!.getParams(this._lightUniformShadow.implParams);\r\n this._lightUniformShadow.shadowMatrices.set(shadowMapParams.shadowMatrices);\r\n this._lightUniformShadow.shadowStrength = light.shadow.shadowStrength;\r\n this._lightUniformShadow.envLightStrength = this.getEnvLightLuminance(ctx);\r\n this._lightUniformShadow.envLightSpecularStrength = ctx.env?.light.specularStrength ?? 1;\r\n bindGroup.setValue('light', this._lightUniformShadow);\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_SHADOW_MAP,\r\n shadowMapParams.shadowMap!,\r\n shadowMapParams.shadowMapSampler\r\n );\r\n bindGroup.setTexture(UNIFORM_NAME_BAKED_SKY_MAP, ctx.scene.env.sky.getBakedSkyTexture(ctx));\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup, ctx);\r\n }\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the strength of the environment light\r\n *\r\n * @remarks\r\n * This function can only be used in the fragment shader\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The uniform variable of which presents the strength of the environment light\r\n */\r\n static getEnvLightStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.envLightStrength;\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the specular strength of the environment light\r\n *\r\n * @remarks\r\n * This function can only be used in the fragment shader\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The uniform variable which presents the specular strength of the environment light\r\n */\r\n static getEnvLightSpecularStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.envLightSpecularStrength ?? scope.$builder.float(1);\r\n }\r\n /**\r\n * Gets current scene color texture\r\n * @param scope - Current shader scope\r\n * @returns current scene color texture\r\n */\r\n static getSceneColorTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SCENE_COLOR_MAP];\r\n }\r\n /**\r\n * Gets the size of current scene color texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current scene color texture\r\n */\r\n static getSceneColorTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SCENE_COLOR_MAP_SIZE];\r\n }\r\n /**\r\n * Gets current linear depth texture\r\n * @param scope - Current shader scope\r\n * @returns current linear depth texture\r\n */\r\n static getLinearDepthTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LINEAR_DEPTH_MAP];\r\n }\r\n /**\r\n * Gets the size of current linear depth texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current linear depth texture\r\n */\r\n static getLinearDepthTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE];\r\n }\r\n /**\r\n * Gets current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns current HiZ depth texture\r\n */\r\n static getHiZDepthTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP];\r\n }\r\n /**\r\n * Gets the size of current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current HiZ depth texture\r\n */\r\n static getHiZDepthTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO].xy;\r\n }\r\n /**\r\n * Gets the mipmap levels count of current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns The mipmap levels count of current HiZ depth texture\r\n */\r\n static getHiZDepthTextureMipLevelCount(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO].z;\r\n }\r\n /**\r\n * Gets current baked skybox texture\r\n * @param scope - Current shader scope\r\n * @returns current baked skybox texture\r\n */\r\n static getBakedSkyTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_BAKED_SKY_MAP];\r\n }\r\n /**\r\n * Samples the baked sky cubemap in the same pre-exposed space as the scene color buffer.\r\n *\r\n * @remarks\r\n * The bake is cached and therefore exposure-independent, stored at the fixed\r\n * `PHYSICAL_BAKE_EXPOSURE`. Anything that blends it against already-pre-exposed lit color (water\r\n * reflection, blueprint sky lookups) must first convert it to the live exposure.\r\n * `envLightStrength` carries exactly that ratio in physical mode, and the legacy environment\r\n * strength (its established meaning) otherwise.\r\n *\r\n * @param scope - Current shader scope\r\n * @param direction - Sampling direction\r\n * @returns Pre-exposed sky radiance\r\n */\r\n static sampleBakedSkyPreExposed(scope: PBInsideFunctionScope, direction: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return pb.mul(\r\n pb.textureSampleLevel(this.getBakedSkyTexture(scope), direction, 0).rgb,\r\n this.getEnvLightStrength(scope)\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the camera pre-exposure factor.\r\n *\r\n * @remarks\r\n * The multiplier every photometric quantity is scaled by before it reaches the HDR target. 1 in\r\n * legacy. Use it for material-authored emitters (emissive), which are not covered by the CPU-side\r\n * light pre-exposure.\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The pre-exposure factor\r\n */\r\n static getPreExposureUniform(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.preExposure;\r\n }\r\n /**\r\n * Gets the elapsed time in seconds\r\n * @param scope - Current shader scope\r\n * @returns The elapsed time in seconds\r\n */\r\n static getElapsedTime(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.elapsedTime;\r\n }\r\n /**\r\n * Gets the elapsed time since last frame in seconds\r\n * @param scope - Current shader scope\r\n * @returns The elapsed time since last frame in seconds\r\n */\r\n static getElapsedTimeFrame(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.frameDeltaTime;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec3 which holds the camera position\r\n * @param scope - Current shader scope\r\n * @returns The camera position\r\n */\r\n static getCameraPosition(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.position.xyz;\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the roughness factor\r\n * @param scope - Current shader scope\r\n * @returns The roughness factor\r\n */\r\n static getCameraRoughnessFactor(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.roughnessFactor;\r\n }\r\n /**\r\n * Gets framebuffer size for rendering\r\n * @param scope - Current shader scope\r\n * @returns The roughness factor\r\n */\r\n static getRenderSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.renderSize;\r\n }\r\n /**\r\n * Gets the uniform variable of type uint which holds the framestamp\r\n * @param scope - Current shader scope\r\n * @returns The framestamp\r\n */\r\n static getFramestamp(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.framestamp;\r\n }\r\n /**\r\n * Gets the clip plane flag\r\n * @param scope - Current shader scope\r\n * @returns A float value of 1 indices the clip plane presents, otherwise 0\r\n */\r\n static getCameraClipPlaneFlag(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.position.w;\r\n }\r\n /**\r\n * Gets the clip plane\r\n * @param scope - Current shader scope\r\n * @returns A vec4 presents the clip plane\r\n */\r\n static getCameraClipPlane(scope: PBInsideFunctionScope) {\r\n return scope.camera.clipPlane;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec4 which holds the camera parameters\r\n * @param scope - Current shader scope\r\n * @returns The camera parameters\r\n */\r\n static getCameraParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.params;\r\n }\r\n /** @internal */\r\n static getClusterParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.clusterParams;\r\n }\r\n /** @internal */\r\n static getCountParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.countParams;\r\n }\r\n /**\r\n * Number of shadow-casting lights at the head of the clustered light buffer.\r\n * Only defined on the screen-space shadow mask path (ctx.screenSpaceShadowMask);\r\n * a clustered light whose buffer index is `<= N` samples the shadow mask.\r\n * @internal\r\n */\r\n static getNumShadowLights(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.numShadowLights;\r\n }\r\n /**\r\n * Cluster shadow-mask mode for the current queue: 1 = sample the opaque shadow\r\n * mask for shadow lights; 0 = skip shadow lights (they are lit inline by the\r\n * additive passes, used for the transparent queue). Only defined on the\r\n * screen-space shadow mask path.\r\n * @internal\r\n */\r\n static getShadowMaskMode(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SHADOW_MASK_MODE];\r\n }\r\n /**\r\n * Bind the per-queue cluster shadow-mask mode. Call in the clustered light pass\r\n * only when the screen-space shadow mask path is active.\r\n * @internal\r\n */\r\n static setShadowMaskMode(bindGroup: BindGroup, sampleMask: boolean) {\r\n bindGroup.setValue(UNIFORM_NAME_SHADOW_MASK_MODE, sampleMask ? 1 : 0);\r\n }\r\n /**\r\n * Lazily-created 1x1x1 rgba8unorm array texture used as the shadow-mask binding\r\n * fallback when the screen-space shadow mask path is enabled but no mask was\r\n * produced this frame (no shadow-casting lights). It is never sampled in that\r\n * case, but the declared uniform still requires a valid binding.\r\n * @internal\r\n */\r\n static getDummyShadowMask(device: AbstractDevice): Texture2DArray {\r\n let tex = this._dummyShadowMask;\r\n if (!tex || tex.disposed) {\r\n tex = device.createTexture2DArray('rgba8unorm', 1, 1, 1, {\r\n mipmapping: false\r\n })!;\r\n tex.name = 'DummyShadowMask';\r\n this._dummyShadowMask = tex;\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n static getClusteredLightIndexTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE];\r\n }\r\n /**\r\n * Clustered shadow factor for a light, in `[0,1]` (1 = fully lit).\r\n *\r\n * - Lights whose clustered buffer index is greater than `numShadowLights` are not\r\n * shadow-casters and return 1.0.\r\n * - Shadow-casting lights on the opaque queue (shadow mask mode 1) return the\r\n * screen-space mask value. Layer/channel are derived from the zero-based light\r\n * ordinal `s = index-1`: `layer = s >> 2`, `channel = s & 3`, matching the\r\n * ShadowMaskPass packing.\r\n * - Shadow-casting lights on a transparent queue (mode 0) return 0: their clustered\r\n * contribution is suppressed because they are lit inline by the additive passes,\r\n * where shadows are sampled at the true (transparent) surface depth rather than\r\n * from the opaque-depth mask.\r\n *\r\n * Only valid on the screen-space shadow mask path (ctx.screenSpaceShadowMask).\r\n * @internal\r\n */\r\n static sampleShadowMask(scope: PBInsideFunctionScope, lightIndex: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_sampleShadowMask';\r\n pb.func(funcName, [pb.int('lightIndex')], function () {\r\n this.$if(pb.greaterThan(this.lightIndex, that.getNumShadowLights(this)), function () {\r\n this.$return(pb.float(1));\r\n });\r\n // Shadow light on a transparent queue: suppressed here, lit inline by additive.\r\n this.$if(pb.equal(that.getShadowMaskMode(this), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n this.$l.ordinal = pb.sub(this.lightIndex, 1);\r\n this.$l.layer = pb.div(this.ordinal, 4);\r\n this.$l.channel = pb.sub(this.ordinal, pb.mul(this.layer, 4));\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));\r\n this.$l.texel = pb.textureArraySampleLevel(this[UNIFORM_NAME_SHADOW_MASK], this.uv, this.layer, 0);\r\n // Select the light's channel via a dot with a one-hot mask (dynamic vector\r\n // component indexing is not portable across GLSL ES / WGSL).\r\n this.$l.selector = pb.vec4(\r\n pb.float(pb.equal(this.channel, 0)),\r\n pb.float(pb.equal(this.channel, 1)),\r\n pb.float(pb.equal(this.channel, 2)),\r\n pb.float(pb.equal(this.channel, 3))\r\n );\r\n this.$return(pb.dot(this.texel, this.selector));\r\n });\r\n return pb.getGlobalScope()[funcName](lightIndex);\r\n }\r\n /**\r\n * Gets the uniform variable that contains atmosphere parameters\r\n * @param scope - Current shader scope\r\n * @returns The atmosphere parameters\r\n */\r\n static getAtmosphereParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.fog.atmosphereParams;\r\n }\r\n /**\r\n * Gets the aerial perspective LUT\r\n * @param scope - Current shader scope\r\n * @returns The aerial perspective LUT texture\r\n */\r\n static getAerialPerspectiveLUT(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_AERIALPERSPECTIVE_LUT];\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The view projection matrix of current camera\r\n */\r\n static getViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.viewProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inversed view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The inversed view projection matrix of current camera\r\n */\r\n static getInvViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.invViewProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The projection matrix of current camera\r\n */\r\n static getProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.projectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inversed projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The inversed projection matrix of current camera\r\n */\r\n static getInvProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.invProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the unjittered view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The unjittered view projection matrix of current camera\r\n */\r\n static getUnjitteredViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.unjitteredVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec2 which holds the jitter value of the projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The jitter value of projection matrix of current camera\r\n */\r\n static getProjectionMatrixJitterValue(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.jitterValue;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the jittered inversed view-projection matrix\r\n * @param scope - Current shader scope\r\n * @returns The jittered inversed view-projection matrix\r\n */\r\n static getJitteredInvVPMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.jitteredInvVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the unjittered view projection at previous frame matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The unjittered view projection matrix at previous frame of current camera\r\n */\r\n static getPrevUnjitteredViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.prevUnjitteredVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the view matrix of current camera (world space to camera space)\r\n * @param scope - Current shader scope\r\n * @returns The view matrix of current camera\r\n */\r\n static getViewMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.viewMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inv-view matrix of current camera (camera space to world space)\r\n * @param scope - Current shader scope\r\n * @returns The inv-view matrix of current camera\r\n */\r\n static getInvViewMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.worldMatrix;\r\n }\r\n /** @internal */\r\n static getCascadeDistances(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.cascadeDistances;\r\n }\r\n /** @internal */\r\n static getShadowImplParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.implParams;\r\n }\r\n /** @internal */\r\n static getDepthBiasValues(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.depthBiasValues;\r\n }\r\n /** @internal */\r\n static getShadowCameraParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.shadowCameraParams;\r\n }\r\n /** @internal */\r\n static getDepthBiasScales(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.depthBiasScales;\r\n }\r\n /** @internal */\r\n static getNumLights(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.numLights;\r\n }\r\n /** @internal */\r\n static getSunLightDir(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.sunDir;\r\n }\r\n /** @internal */\r\n static getLightTypeForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.lightType;\r\n }\r\n /** @internal */\r\n static getLightPositionAndRangeForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.positionAndRange;\r\n }\r\n /** @internal */\r\n static getLightViewMatrixForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.viewMatrix;\r\n }\r\n /** @internal */\r\n static calculateShadowSpaceVertex(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n cascade: PBShaderExp | number = 0\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof cascade === 'number') {\r\n return pb.vec4(\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 0), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 1), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 2), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 3), worldPos)\r\n );\r\n } else {\r\n return pb.vec4(\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 0)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 1)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 2)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 3)), worldPos)\r\n );\r\n }\r\n }\r\n /** @internal */\r\n static getLightPositionAndRange(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.mul(lightIndex, 4));\r\n }\r\n /** @internal */\r\n static getLightDirectionAndCutoff(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 1));\r\n }\r\n /** @internal */\r\n static getLightColorAndIntensity(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 2));\r\n }\r\n /** @internal */\r\n static getLightExtra(scope: PBInsideFunctionScope, lightIndex: PBShaderExp | number): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 3));\r\n }\r\n /**\r\n * Sets the clip space position in vertex shader\r\n *\r\n * @remarks\r\n * Use this function instead of using\r\n * <pre>\r\n * // Do not use this\r\n * this.$builtins.position = some_value;\r\n * // Use this\r\n * ShaderFramework.setClipSpacePosition(some_value);\r\n * </pre>,\r\n *\r\n * @param scope - Current shader scope\r\n * @param pos - The clip space position to be set\r\n */\r\n static setClipSpacePosition(scope: PBInsideFunctionScope, pos: PBShaderExp): void {\r\n const pb = scope.$builder;\r\n const cameraParams = this.getCameraParams(scope);\r\n if (cameraParams) {\r\n scope.$builtins.position = pb.mul(pos, pb.vec4(1, cameraParams.z, 1, 1));\r\n } else {\r\n scope.$builtins.position = pos;\r\n }\r\n }\r\n /**\r\n * Get shadow map uniform value\r\n *\r\n * @param scope - Shader scope\r\n * @returns The shadow map texture uniform\r\n */\r\n static getShadowMap(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SHADOW_MAP];\r\n }\r\n /**\r\n * Calculates shadow of current fragment\r\n *\r\n * @param scope - Shader scope\r\n * @param NoL - NdotL vector\r\n * @returns Shadow of current fragment, 1 means no shadow and 0 means full shadowed.\r\n */\r\n static calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n NoL: PBShaderExp,\r\n ctx: DrawContext\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight!)!;\r\n const funcName = 'Z_calculateShadow';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.float('NoL')], function () {\r\n if (shadowMapParams.numShadowCascades > 1) {\r\n this.$l.shadowCascades = this.light.shadowCascades;\r\n this.$l.shadowBound = pb.vec4(0, 0, 1, 1);\r\n this.$l.linearDepth = that.nonLinearDepthToLinear(this, this.$builtins.fragCoord.z);\r\n this.$l.splitDistances = that.getCascadeDistances(this);\r\n this.$l.comparison = pb.vec4(pb.greaterThan(pb.vec4(this.linearDepth), this.splitDistances));\r\n this.$l.cascadeFlags = pb.vec4(\r\n pb.float(pb.greaterThan(this.shadowCascades, 0)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 1)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 2)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 3))\r\n );\r\n this.$l.split = pb.int(pb.dot(this.comparison, this.cascadeFlags));\r\n if (ctx.device.type === 'webgl') {\r\n this.$l.shadowVertex = pb.vec4();\r\n this.$for(pb.int('cascade'), 0, 4, function () {\r\n this.$if(pb.equal(this.cascade, this.split), function () {\r\n this.shadowVertex = that.calculateShadowSpaceVertex(\r\n this,\r\n pb.vec4(this.worldPos, 1),\r\n this.cascade\r\n );\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n this.$l.shadowVertex = that.calculateShadowSpaceVertex(this, pb.vec4(this.worldPos, 1), this.split);\r\n }\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight!)!;\r\n this.$l.shadow = shadowMapParams.impl!.computeShadowCSM(\r\n shadowMapParams,\r\n this,\r\n this.shadowVertex,\r\n this.NoL,\r\n this.split\r\n );\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$l.shadowDistance = that.getShadowCameraParams(scope).w;\r\n this.shadow = pb.mix(\r\n this.shadow,\r\n 1,\r\n pb.smoothStep(\r\n pb.mul(this.shadowDistance, 0.8),\r\n this.shadowDistance,\r\n pb.distance(that.getCameraPosition(this), this.worldPos)\r\n )\r\n );\r\n this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$if(pb.greaterThan(this.camera.shadowDebugCascades, 0.5), function () {\r\n this.shadow = pb.add(pb.mul(pb.float(this.split), 0.2), 0.2);\r\n });\r\n this.$return(this.shadow);\r\n } else {\r\n this.$l.shadowVertex = that.calculateShadowSpaceVertex(this, pb.vec4(this.worldPos, 1));\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight!)!;\r\n this.$l.shadow = shadowMapParams.impl!.computeShadow(\r\n shadowMapParams,\r\n this,\r\n this.shadowVertex,\r\n this.NoL\r\n );\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$l.shadowDistance = that.getShadowCameraParams(scope).w;\r\n this.shadow = pb.mix(\r\n this.shadow,\r\n 1,\r\n pb.smoothStep(\r\n pb.mul(this.shadowDistance, 0.8),\r\n this.shadowDistance,\r\n pb.distance(that.getCameraPosition(this), this.worldPos)\r\n )\r\n );\r\n this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, NoL);\r\n }\r\n static applyFog(scope: PBInsideFunctionScope, worldPos: PBShaderExp, color: PBShaderExp, ctx: DrawContext) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG) {\r\n const funcName = 'Z_applyFog';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec4('color').inout()], function () {\r\n this.$if(pb.notEqual(this.fog.additive, 0), function () {\r\n this.$return();\r\n });\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));\r\n this.$l.fogging = calculateFog(\r\n this,\r\n this.fog.withAerialPerspective,\r\n this.fog.fogType,\r\n this.fog.atmosphereParams,\r\n this.fog.heightFogParams,\r\n this.uv,\r\n false,\r\n that.getCameraPosition(this).xyz,\r\n this.worldPos,\r\n this.fog.additive,\r\n this[UNIFORM_NAME_AERIALPERSPECTIVE_LUT],\r\n this[UNIFORM_NAME_SKYDISTANTLIGHT_LUT]\r\n );\r\n this.$l.foggingAlpha = pb.sub(1, pb.mul(pb.sub(1, this.fogging.a), this.color.a));\r\n this.$l.foggingRGB = pb.mul(this.fogging.rgb, this.color.a);\r\n this.color = pb.vec4(\r\n pb.add(pb.mul(this.color.rgb, this.foggingAlpha), this.foggingRGB),\r\n this.color.a\r\n );\r\n //this.color = pb.vec4(pb.vec3(pb.mix(this.u0, this.u1, this.factor)), this.color.a);\r\n });\r\n scope[funcName](worldPos, color);\r\n }\r\n }\r\n /**\r\n * Calculates the non-linear depth from linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated non-linear depth\r\n */\r\n static linearDepthToNonLinear(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(\r\n pb.sub(pb.div(pb.mul(nearFar.x, nearFar.y), depth), nearFar.x),\r\n pb.sub(nearFar.y, nearFar.x)\r\n );\r\n }\r\n return pb.div(\r\n pb.sub(nearFar.y, pb.div(pb.mul(nearFar.x, nearFar.y), depth)),\r\n pb.sub(nearFar.y, nearFar.x)\r\n );\r\n }\r\n /**\r\n * Calculates the linear depth from non-linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The non-linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated linear depth\r\n */\r\n static nonLinearDepthToLinear(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.x, nearFar.y, depth));\r\n }\r\n return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.y, nearFar.x, depth));\r\n }\r\n /**\r\n * Calculates the normalized linear depth from non-linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The non-linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated normalized linear depth\r\n */\r\n static nonLinearDepthToLinearNormalized(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(nearFar.x, pb.mix(nearFar.x, nearFar.y, depth));\r\n }\r\n return pb.div(nearFar.x, pb.mix(nearFar.y, nearFar.x, depth));\r\n }\r\n /**\r\n * Converts normalized linear depth back to device non-linear depth.\r\n *\r\n * @remarks\r\n * The normalized linear depth convention (range [near/far, 1] with 1 at\r\n * the far plane, as produced by {@link ShaderHelper.nonLinearDepthToLinearNormalized})\r\n * is independent of the engine depth convention; only the mapping to\r\n * device depth flips under reverse-Z.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The normalized linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The device non-linear depth\r\n */\r\n static linearNormalizedToNonLinearDepth(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(pb.sub(pb.div(nearFar.x, depth), nearFar.x), pb.sub(nearFar.y, nearFar.x));\r\n }\r\n return pb.div(pb.sub(pb.div(nearFar.x, depth), nearFar.y), pb.sub(nearFar.x, nearFar.y));\r\n }\r\n /**\r\n * Maps a device depth value to the canonical clip-space z coordinate\r\n * (GL [-1,1] under standard-Z, zero-to-one under reverse-Z), suitable for\r\n * unprojection with the engine's inverse projection matrices.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The device depth value\r\n * @returns The canonical clip-space z\r\n */\r\n static deviceDepthToClipZ(scope: PBInsideFunctionScope, depth: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? depth : pb.sub(pb.mul(depth, 2), 1);\r\n }\r\n /**\r\n * Clip-space z that places a vertex exactly on the far plane (sky domes,\r\n * background geometry).\r\n *\r\n * @param scope - Current shader scope\r\n * @param w - The clip-space w coordinate of the vertex\r\n * @returns The clip-space z value for the far plane\r\n */\r\n static farthestClipZ(scope: PBInsideFunctionScope, w: PBShaderExp): PBShaderExp | number {\r\n return REVERSE_Z ? 0 : w;\r\n }\r\n /**\r\n * Tests whether a device depth value equals the cleared (farthest) depth,\r\n * i.e. no geometry was rendered at this position.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The device depth value\r\n * @returns Boolean expression, true for background pixels\r\n */\r\n static isFarthestDepth(scope: PBInsideFunctionScope, depth: PBShaderExp): PBShaderExp {\r\n return scope.$builder.equal(depth, DEPTH_FARTHEST);\r\n }\r\n /**\r\n * Selects the closer of two device depth values.\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - First device depth value\r\n * @param b - Second device depth value\r\n * @returns The value closer to the camera\r\n */\r\n static closerDepth(scope: PBInsideFunctionScope, a: PBShaderExp, b: PBShaderExp): PBShaderExp {\r\n return scope.$builder[DEPTH_REDUCE_CLOSER](a, b);\r\n }\r\n /**\r\n * Selects the farther of two device depth values.\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - First device depth value\r\n * @param b - Second device depth value\r\n * @returns The value farther from the camera\r\n */\r\n static fartherDepth(scope: PBInsideFunctionScope, a: PBShaderExp, b: PBShaderExp): PBShaderExp {\r\n return scope.$builder[DEPTH_REDUCE_FARTHER](a, b);\r\n }\r\n /**\r\n * Sample linear depth from linear depth texture\r\n * @param scope - Current shader scope\r\n * @param tex - The linear depth texture\r\n * @param uv - The uv coordinates\r\n * @param level - The mipmap level to sample\r\n * @returns Linear depth value\r\n */\r\n static sampleLinearDepth(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level: PBShaderExp | number\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const depth = pb.textureSampleLevel(tex, uv, level);\r\n return pb.getDevice().type === 'webgl' ? decodeNormalizedFloatFromRGBA(scope, depth) : depth.r;\r\n }\r\n static samplePositionFromDepth(\r\n scope: PBInsideFunctionScope,\r\n depthTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n mat: PBShaderExp,\r\n cameraNearFar: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'zSamplePositionFromDepth',\r\n [pb.vec2('uv'), pb.vec2('cameraNearFar'), pb.mat4('mat')],\r\n function () {\r\n this.$l.linearDepth = that.sampleLinearDepth(this, depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = that.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n that.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 1)),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n }\r\n );\r\n return scope.zSamplePositionFromDepth(uv, cameraNearFar, mat);\r\n }\r\n /**\r\n * Sample linear depth from linear depth texture with backface\r\n * @param scope - Current shader scope\r\n * @param tex - The linear depth texture\r\n * @param uv - The uv coordinates\r\n * @param level - The mipmap level to sample\r\n * @returns Linear depth value\r\n */\r\n static sampleLinearDepthWithBackface(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level: PBShaderExp | number\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n return pb.textureSampleLevel(tex, uv, level).rg;\r\n }\r\n /**\r\n * Transform color to sRGB color space if nessesary\r\n *\r\n * @param scope - Current shader scope\r\n * @param outputColor - The color to be transformed\r\n * @returns The transformed color\r\n */\r\n static encodeColorOutput(scope: PBInsideFunctionScope, outputColor: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_encodeColorOutput';\r\n pb.func(funcName, [pb.vec4('outputColor')], function () {\r\n const params = that.getCameraParams(this);\r\n this.$if(pb.notEqual(params.w, 0), function () {\r\n this.$return(pb.vec4(linearToGamma(this, this.outputColor.rgb), this.outputColor.w));\r\n }).$else(function () {\r\n this.$return(this.outputColor);\r\n });\r\n });\r\n return pb.getGlobalScope()[funcName](outputColor);\r\n }\r\n /** @internal */\r\n static getMaxClusterLights() {\r\n return getDevice().type === 'webgl' ? 64 : 255;\r\n }\r\n}\r\n"],"names":["UNIFORM_NAME_LIGHT_BUFFER","UNIFORM_NAME_LIGHT_INDEX_TEXTURE","UNIFORM_NAME_BAKED_SKY_MAP","UNIFORM_NAME_AERIALPERSPECTIVE_LUT","UNIFORM_NAME_SKYDISTANTLIGHT_LUT","UNIFORM_NAME_SHADOW_MAP","UNIFORM_NAME_SHADOW_MASK","UNIFORM_NAME_SHADOW_MASK_MODE","UNIFORM_NAME_LINEAR_DEPTH_MAP","UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE","UNIFORM_NAME_SCENE_COLOR_MAP","UNIFORM_NAME_SCENE_COLOR_MAP_SIZE","UNIFORM_NAME_HIZ_DEPTH_MAP","UNIFORM_NAME_HIZ_DEPTH_MAP_INFO","UNIFORM_NAME_OBJECT_COLOR","UNIFORM_NAME_WORLD_MATRIX","UNIFORM_NAME_PREV_WORLD_MATRIX","UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME","UNIFORM_NAME_INSTANCE_DATA_STRIDE","UNIFORM_NAME_INSTANCE_DATA","UNIFORM_NAME_INSTANCE_DATA_OFFSET","UNIFORM_NAME_BONE_MATRICES","UNIFORM_NAME_BONE_TEXTURE_SIZE","UNIFORM_NAME_BONE_INV_BIND_MATRIX","UNIFORM_NAME_MORPH_DATA","UNIFORM_NAME_MORPH_INFO","ShaderHelper","BILLBOARD_SPHERICAL","BILLBOARD_SYLINDRAL","MATERIAL_INSTANCE_DATA_OFFSET","defaultSunDir","Vector3","one","inplaceNormalize","_dummyShadowMask","SKIN_MATRIX_NAME","SKIN_PREV_MATRIX_NAME","SKIN_BONE_OFFSET","_drawableBindGroupLayouts","_lightUniformShadow","sunDir","shadowCascades","positionAndRange","Vector4","directionAndCutoff","diffuseAndIntensity","extraParams","cascadeDistances","depthBiasValues","shadowCameraParams","depthBiasScales","implParams","shadowMatrices","Float32Array","shadowStrength","envLightStrength","envLightSpecularStrength","_fogUniforms","withAerialPerspective","fogType","additive","atmosphereParams","getDefaultAtmosphereParams","heightFogParams","getDefaultHeightFogParams","getObjectColorUniformName","getWorldMatrixUniformName","getPrevWorldMatrixUniformName","getPrevWorldMatrixFrameUniformName","getInstanceDataUniformName","getInstanceDataOffsetUniformName","getInstanceDataStrideUniformName","getBoneMatricesUniformName","getBoneTextureSizeUniformName","getBoneInvBindMatrixUniformName","getMorphDataUniformName","getMorphInfoUniformName","getLightBufferUniformName","getDrawableBindGroupLayout","skinning","morphing","instancing","hash","bindGroupLayout","device","getDevice","buildInfo","ProgramBuilder","buildRender","vertex","pb","vertexShaderDrawableStuff","main","fragment","prepareFragmentShader","ctx","setupGlobalUniforms","prepareVertexShader","prepareVertexShaderCommon","scope","getGlobalScope","cameraStruct","defineStruct","vec4","mat4","motionVectors","renderPass","type","RENDER_PASS_TYPE_DEPTH","vec2","float","int","RENDER_PASS_TYPE_SHADOWMAP","lightStruct","camera","uniform","light","RENDER_PASS_TYPE_OBJECT_COLOR","RENDER_PASS_TYPE_LIGHT","useClusteredLighting","currentShadowLight","materialFlags","MaterialVaryingFlags","APPLY_FOG","fogStructMembers","getAtmosphereParamsStruct","getHeightFogParamsStruct","fogStruct","fog","tex2D","withSampler","getSamplerOptions","vec3","ivec4","ivec2","screenSpaceShadowMask","getMaxClusterLights","uniformBuffer","utex2D","noSampler","tex2DArray","texCube","shadowMapParams","shadowMapInfo","get","tex","shadowMap","isTextureCube","isDepth","$builder","texCubeShadow","isTexture2D","tex2DShadow","tex2DArrayShadow","getDeviceCaps","textureCaps","getTextureFormatInfo","format","filterable","sampleType","drawEnvLight","env","envLight","initShaderBindings","linearDepthTexture","sceneColorTexture","HiZTexture","hasSkinning","hasMorphing","calculateSkinMatrix","funcNameGetBoneMatrixFromTexture","func","boneTexture","$l","uvOffsets","textureSampleLevel","div","currentOffset","x","w","pixelIndex","mul","add","boneIndex","xIndex","mod","yIndex","floor","u1","u2","u3","u4","v","row1","row2","row3","row4","$return","funcNameGetSkinningMatrix","invBindMatrix","blendIndices","$getVertexAttrib","blendWeights","m0","$g","m1","m2","m3","m","y","z","calculateMorphDelta","attrib","isWebGL1","shaderKind","Error","funcName","that","$if","lessThan","offset","vertexIndex","$inputs","zFakeVertexID","$builtins","morphInfo","metaData","texWidth","texHeight","numVertices","numTargets","value","$for","MORPH_WEIGHTS_VECTOR_COUNT","index","i","j","greaterThanEqual","weight","at","notEqual","u","morphValue","sar","t","compAnd","pos","comp","prepareSkinAnimation","boneOffset","motionVector","getUnjitteredViewProjectionMatrix","xy","resolveVertexPosition","Z_pos","params","opos","xyz","MORPH_TARGET_POSITION","skinMatrix","prevUnjitteredVPMatrix","getPrevUnjitteredViewProjectionMatrix","unjitteredVPMatrix","worldPos","getWorldMatrix","prevSkinMatrix","prevWorldPos","getPrevWorldMatrix","$outputs","zMotionVectorPosCurrent","zMotionVectorPosPrev","Z_resolveVertexPosition","resolveMotionVector","resolveVertexNormal","normal","funcScope","getCurrentFunctionScope","$isMain","Z_normal","normalize","MORPH_TARGET_NORMAL","resolveVertexTangent","tangent","Z_tangent","MORPH_TARGET_TANGENT","getInstancedUniform","framestamp","getFramestamp","equal","$else","Z_getPrevWorldMatrix","$choice","prevFrame","floatBitsToInt","uniformIndex","uint","instanceIndex","getNormalMatrix","instanced","MORPH_ATTRIBUTE_VECTOR_COUNT","SKIN_ANIMATION","MORPH_ANIMATION","INSTANCING","setCameraUniforms","bindGroup","linear","getWorldPosition","useJitter","position","renderSize","Vector2","renderWidth","renderHeight","viewProjectionMatrix","jitteredVPMatrix","jitteredInvVPMatrix","invViewProjectionMatrix","jitterValue","projectionMatrix","getProjectionMatrix","invProjectionMatrix","getInvProjectionMatrix","viewMatrix","worldMatrix","getNearPlane","getFarPlane","flip","roughnessFactor","SSR","ssrRoughnessFactor","shadowDebugCascades","frameDeltaTime","frameInfo","elapsedFrame","elapsedTime","elapsedOverall","preExposure","getPreExposure","frameCounter","prevVPMatrix","setTexture","setValue","width","height","fetchSampler","mipLevelCount","setLightUniformsShadowMap","directionCutoff","depthBias","lightType","setFogUniforms","aerialPerspectiveLUT","skyDistantLightLUT","scene","lightingMode","exposure","getPreExposedColorIntensity","out","src","result","setXYZW","getEnvLightLuminance","strength","PHYSICAL_BAKE_EXPOSURE","setLightUniforms","clusterParams","countParams","lightBuffer","lightIndexTexture","sunLight","scaleBy","specularStrength","lightIndexTexSize","Int32Array","numShadowLights","clusteredLight","setBuffer","shadowMaskTexture","getDummyShadowMask","sky","getBakedSkyTexture","updateBindGroup","setLightUniformsShadow","numShadowCascades","set","cameraParams","impl","getParams","shadow","shadowMapSampler","getEnvLightStrength","getEnvLightSpecularStrength","getSceneColorTexture","getSceneColorTextureSize","getLinearDepthTexture","getLinearDepthTextureSize","getHiZDepthTexture","getHiZDepthTextureSize","getHiZDepthTextureMipLevelCount","sampleBakedSkyPreExposed","direction","rgb","getPreExposureUniform","getElapsedTime","getElapsedTimeFrame","getCameraPosition","getCameraRoughnessFactor","getRenderSize","getCameraClipPlaneFlag","getCameraClipPlane","clipPlane","getCameraParams","getClusterParams","getCountParams","getNumShadowLights","getShadowMaskMode","setShadowMaskMode","sampleMask","disposed","createTexture2DArray","mipmapping","name","getClusteredLightIndexTexture","sampleShadowMask","lightIndex","greaterThan","ordinal","sub","layer","channel","uv","fragCoord","texel","textureArraySampleLevel","selector","dot","getAtmosphereParams","getAerialPerspectiveLUT","getViewProjectionMatrix","getInvViewProjectionMatrix","getProjectionMatrixJitterValue","getJitteredInvVPMatrix","getViewMatrix","getInvViewMatrix","getCascadeDistances","getShadowImplParams","getDepthBiasValues","getShadowCameraParams","getDepthBiasScales","getNumLights","numLights","getSunLightDir","getLightTypeForShadow","getLightPositionAndRangeForShadow","getLightViewMatrixForShadow","calculateShadowSpaceVertex","cascade","getLightPositionAndRange","getLightDirectionAndCutoff","getLightColorAndIntensity","getLightExtra","setClipSpacePosition","getShadowMap","calculateShadow","NoL","shadowBound","linearDepth","nonLinearDepthToLinear","splitDistances","comparison","cascadeFlags","split","shadowVertex","$break","computeShadowCSM","clamp","shadowDistance","mix","smoothStep","distance","computeShadow","applyFog","color","inout","fogging","calculateFog","foggingAlpha","a","foggingRGB","linearDepthToNonLinear","depth","nearFar","REVERSE_Z","nonLinearDepthToLinearNormalized","linearNormalizedToNonLinearDepth","deviceDepthToClipZ","farthestClipZ","isFarthestDepth","DEPTH_FARTHEST","closerDepth","b","DEPTH_REDUCE_CLOSER","fartherDepth","DEPTH_REDUCE_FARTHER","sampleLinearDepth","level","decodeNormalizedFloatFromRGBA","r","samplePositionFromDepth","depthTex","mat","cameraNearFar","nonLinearDepth","clipSpacePos","wPos","zSamplePositionFromDepth","sampleLinearDepthWithBackface","rg","encodeColorOutput","outputColor","linearToGamma"],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sources":["../../../src/material/shader/helper.ts"],"sourcesContent":["import {\r\n DEPTH_FARTHEST,\r\n DEPTH_REDUCE_CLOSER,\r\n DEPTH_REDUCE_FARTHER,\r\n REVERSE_Z,\r\n Vector2,\r\n Vector3,\r\n Vector4\r\n} from '@zephyr3d/base';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../../render/drawable';\r\nimport {\r\n MaterialVaryingFlags,\r\n MAX_SKIN_EXTRA_INFLUENCE_PAIRS,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_TARGET_NORMAL,\r\n MORPH_TARGET_POSITION,\r\n MORPH_TARGET_TANGENT,\r\n MORPH_WEIGHTS_VECTOR_COUNT,\r\n RENDER_PASS_TYPE_DEPTH,\r\n RENDER_PASS_TYPE_LIGHT,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP,\r\n LIGHT_TYPE_DIRECTIONAL\r\n} from '../../values';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n StructuredBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n PBGlobalScope,\r\n BindGroupLayout\r\n} from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { PunctualLight } from '../../scene/light';\r\nimport { decodeNormalizedFloatFromRGBA, linearToGamma } from '../../shaders/misc';\r\nimport { fetchSampler, getSamplerOptions } from '../../utility/misc';\r\nimport { PHYSICAL_BAKE_EXPOSURE } from '../../utility/physical';\r\nimport type { AtmosphereParams } from '../../shaders';\r\nimport { getAtmosphereParamsStruct, getDefaultAtmosphereParams } from '../../shaders';\r\nimport type { HeightFogParams } from '../../shaders/fog';\r\nimport { calculateFog, getDefaultHeightFogParams, getHeightFogParamsStruct } from '../../shaders/fog';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Camera } from '../../camera';\r\nimport type { ShadowMapPass } from '../../render/shadowmap_pass';\r\nimport { getShadowReceiverBiasFactor, getShadowReceiverNoL } from '../../shadow/receiver_bias';\r\n\r\nconst UNIFORM_NAME_LIGHT_BUFFER = 'Z_UniformLightBuffer';\r\nconst UNIFORM_NAME_LIGHT_INDEX_TEXTURE = 'Z_UniformLightIndexTex';\r\nconst UNIFORM_NAME_BAKED_SKY_MAP = 'Z_UniformBakedSky';\r\nconst UNIFORM_NAME_AERIALPERSPECTIVE_LUT = 'Z_UniformAerialPerspectiveLUT';\r\nconst UNIFORM_NAME_SKYDISTANTLIGHT_LUT = 'Z_UniformSkyDistantLightLUT';\r\nconst UNIFORM_NAME_SHADOW_MAP = 'Z_UniformShadowMap';\r\nconst UNIFORM_NAME_SHADOW_MASK = 'Z_UniformShadowMask';\r\nconst UNIFORM_NAME_SHADOW_MASK_MODE = 'Z_UniformShadowMaskMode';\r\nconst UNIFORM_NAME_CAUSTIC_MAP = 'Z_UniformCausticMap';\r\nconst UNIFORM_NAME_CAUSTIC_HEIGHT_MAP = 'Z_UniformCausticHeightMap';\r\n/**\r\n * Offset added to a surface height before it is stored in the caustic height\r\n * map, so that a cleared texel - no surface on that ray - is distinguishable\r\n * from a surface at the rest level. A ray with no water on it must read as\r\n * dry, not as submerged under a flat surface: on the down-sun side of a\r\n * footprint edge, a receiver below the rest level but above a trough would\r\n * otherwise be lit through water that is not there. Eight keeps troughs down\r\n * to seven metres positive and leaves half floats millimetre precision.\r\n * @internal\r\n */\r\nexport const CAUSTIC_HEIGHT_BIAS = 8;\r\n/**\r\n * Water bodies that can cast caustics into one map.\r\n *\r\n * They share the map and the slice, so this is not a limit on how much water a\r\n * scene may hold - only on how many separate surfaces the receiver will test\r\n * itself against, which it does per fragment. Four covers a lake with a couple\r\n * of pools beside it; beyond that the renderer keeps the largest four, which\r\n * are the ones a viewer is most likely to be standing over.\r\n */\r\nexport const MAX_CAUSTIC_WATERS = 4;\r\nconst UNIFORM_NAME_CAUSTIC_PARAMS = 'Z_UniformCausticParams';\r\nconst UNIFORM_NAME_LINEAR_DEPTH_MAP = 'Z_UniformLinearDepth';\r\nconst UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE = 'Z_UniformLinearDepthSize';\r\nconst UNIFORM_NAME_SCENE_COLOR_MAP = 'Z_UniformSceneColor';\r\nconst UNIFORM_NAME_SCENE_COLOR_MAP_SIZE = 'Z_UniformSceneColorSize';\r\nconst UNIFORM_NAME_HIZ_DEPTH_MAP = 'Z_UniformHiZDepth';\r\nconst UNIFORM_NAME_HIZ_DEPTH_MAP_INFO = 'Z_UniformHiZDepthInfo';\r\nconst UNIFORM_NAME_OBJECT_COLOR = 'Z_ObjectColor';\r\nconst UNIFORM_NAME_WORLD_MATRIX = 'Z_UniformWorldMatrix';\r\nconst UNIFORM_NAME_PREV_WORLD_MATRIX = 'Z_UniformPrevWorldMatrix';\r\nconst UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME = 'Z_UniformPrevWorldMatrixFrame';\r\nconst UNIFORM_NAME_INSTANCE_DATA_STRIDE = 'Z_UniformInstanceDataStride';\r\nconst UNIFORM_NAME_INSTANCE_DATA = 'Z_UniformInstanceData';\r\nconst UNIFORM_NAME_INSTANCE_DATA_OFFSET = 'Z_UniformInstanceDataOffset';\r\nconst UNIFORM_NAME_BONE_MATRICES = 'Z_UniformBoneMatrices';\r\nconst UNIFORM_NAME_BONE_TEXTURE_SIZE = 'Z_UniformBoneTexSize';\r\nconst UNIFORM_NAME_BONE_INV_BIND_MATRIX = 'Z_UniformBoneInvBindMatrix';\r\nconst UNIFORM_NAME_SKIN_INFLUENCE_DATA = 'Z_UniformSkinInfluenceData';\r\nconst UNIFORM_NAME_SKIN_INFLUENCE_INFO = 'Z_UniformSkinInfluenceInfo';\r\nconst UNIFORM_NAME_MORPH_DATA = 'Z_UniformMorphData';\r\nconst UNIFORM_NAME_MORPH_INFO = 'Z_UniformMorphInfo';\r\n\r\n/**\r\n * Helper shader functions for the builtin material system\r\n * @public\r\n */\r\nexport class ShaderHelper {\r\n static readonly BILLBOARD_SPHERICAL = 1;\r\n static readonly BILLBOARD_SYLINDRAL = 2;\r\n static readonly MATERIAL_INSTANCE_DATA_OFFSET = 9;\r\n /** @internal */\r\n static defaultSunDir = Vector3.one().inplaceNormalize();\r\n /** @internal 1x1x1 fallback bound to the shadow-mask uniform when no mask exists this frame. */\r\n private static _dummyShadowMask: Nullable<Texture2DArray> = null;\r\n /** @internal */\r\n private static readonly SKIN_MATRIX_NAME = 'Z_SkinMatrix';\r\n private static readonly SKIN_PREV_MATRIX_NAME = 'Z_PrevSkinMatrix';\r\n private static readonly SKIN_BONE_OFFSET = 'Z_boneOffset';\r\n private static readonly RESOLVED_VERTEX_NORMAL_NAME = 'Z_ResolvedVertexNormal';\r\n /** @internal */\r\n private static _drawableBindGroupLayouts: Record<string, BindGroupLayout> = {};\r\n /** @internal */\r\n private static readonly _lightUniformShadow = {\r\n sunDir: new Vector3(),\r\n shadowCascades: 1,\r\n positionAndRange: new Vector4(),\r\n directionAndCutoff: new Vector4(),\r\n diffuseAndIntensity: new Vector4(),\r\n extraParams: new Vector4(),\r\n cascadeDistances: new Vector4(),\r\n depthBiasValues: new Vector4(),\r\n shadowCameraParams: new Vector4(),\r\n depthBiasScales: new Vector4(),\r\n implParams: new Vector4(),\r\n shadowMatrices: new Float32Array(16 * 4),\r\n shadowStrength: 1,\r\n envLightStrength: 1,\r\n envLightSpecularStrength: 1\r\n };\r\n /** @internal */\r\n private static readonly _fogUniforms = {\r\n withAerialPerspective: 0,\r\n fogType: 0,\r\n additive: 0,\r\n atmosphereParams: getDefaultAtmosphereParams(),\r\n heightFogParams: getDefaultHeightFogParams()\r\n };\r\n static getObjectColorUniformName() {\r\n return UNIFORM_NAME_OBJECT_COLOR;\r\n }\r\n static getWorldMatrixUniformName() {\r\n return UNIFORM_NAME_WORLD_MATRIX;\r\n }\r\n static getPrevWorldMatrixUniformName() {\r\n return UNIFORM_NAME_PREV_WORLD_MATRIX;\r\n }\r\n static getPrevWorldMatrixFrameUniformName() {\r\n return UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME;\r\n }\r\n static getInstanceDataUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA;\r\n }\r\n static getInstanceDataOffsetUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA_OFFSET;\r\n }\r\n static getInstanceDataStrideUniformName() {\r\n return UNIFORM_NAME_INSTANCE_DATA_STRIDE;\r\n }\r\n static getBoneMatricesUniformName() {\r\n return UNIFORM_NAME_BONE_MATRICES;\r\n }\r\n static getBoneTextureSizeUniformName() {\r\n return UNIFORM_NAME_BONE_TEXTURE_SIZE;\r\n }\r\n static getBoneInvBindMatrixUniformName() {\r\n return UNIFORM_NAME_BONE_INV_BIND_MATRIX;\r\n }\r\n static getSkinInfluenceDataUniformName() {\r\n return UNIFORM_NAME_SKIN_INFLUENCE_DATA;\r\n }\r\n static getSkinInfluenceInfoUniformName() {\r\n return UNIFORM_NAME_SKIN_INFLUENCE_INFO;\r\n }\r\n static getMorphDataUniformName() {\r\n return UNIFORM_NAME_MORPH_DATA;\r\n }\r\n static getMorphInfoUniformName() {\r\n return UNIFORM_NAME_MORPH_INFO;\r\n }\r\n static getLightBufferUniformName() {\r\n return UNIFORM_NAME_LIGHT_BUFFER;\r\n }\r\n static getDrawableBindGroupLayout(skinning: boolean, morphing: boolean, instancing: boolean) {\r\n const hash = `${skinning ? 1 : 0}${morphing ? 1 : 0}${instancing ? 1 : 0}`;\r\n let bindGroupLayout = this._drawableBindGroupLayouts[hash];\r\n if (!bindGroupLayout) {\r\n const device = getDevice();\r\n const buildInfo = new ProgramBuilder(device).buildRender({\r\n vertex(pb) {\r\n ShaderHelper.vertexShaderDrawableStuff(this, skinning, morphing, instancing);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n pb.main(function () {});\r\n }\r\n });\r\n bindGroupLayout = buildInfo[2][1];\r\n this._drawableBindGroupLayouts[hash] = bindGroupLayout;\r\n }\r\n return bindGroupLayout;\r\n }\r\n /**\r\n * Prepares the fragment shader which is going to be used in our material system\r\n *\r\n * @remarks\r\n * This function will setup all nessesary uniforms acoording to the drawing context\r\n *\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n */\r\n static prepareFragmentShader(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.setupGlobalUniforms(pb, ctx);\r\n }\r\n /**\r\n * Prepares the vertex shader which is going to be used in our material system\r\n *\r\n * @remarks\r\n * This function will setup all nessesary uniforms according to the drawing context\r\n *\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n */\r\n static prepareVertexShader(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.setupGlobalUniforms(pb, ctx);\r\n this.prepareVertexShaderCommon(pb, ctx);\r\n }\r\n /** @internal */\r\n private static setupGlobalUniforms(pb: ProgramBuilder, ctx: DrawContext) {\r\n const scope = pb.getGlobalScope();\r\n const cameraStruct = pb.defineStruct([\r\n pb.vec4('position'),\r\n pb.mat4('viewProjectionMatrix'),\r\n pb.mat4('invViewProjectionMatrix'),\r\n pb.mat4('unjitteredVPMatrix'),\r\n pb.mat4('jitteredInvVPMatrix'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('worldMatrix'),\r\n pb.mat4('projectionMatrix'),\r\n pb.mat4('invProjectionMatrix'),\r\n pb.vec4('params'),\r\n ...(ctx.motionVectors && ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH\r\n ? [pb.mat4('prevUnjitteredVPMatrix')]\r\n : []),\r\n pb.vec2('renderSize'),\r\n pb.vec2('jitterValue'),\r\n pb.float('roughnessFactor'),\r\n pb.float('shadowDebugCascades'),\r\n pb.float('frameDeltaTime'),\r\n pb.float('elapsedTime'),\r\n pb.float('preExposure'),\r\n pb.int('framestamp')\r\n ]);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n const lightStruct = pb.defineStruct([\r\n pb.vec4('positionAndRange'),\r\n pb.vec4('directionCutoff'),\r\n pb.mat4('viewMatrix'),\r\n pb.vec4('depthBias'),\r\n // Same slot the lighting pass exposes through getShadowImplParams. A\r\n // caster normally has no use for it, but one that encodes something\r\n // beyond depth - deep opacity map layers - needs the same parameters the\r\n // receiver will decode with.\r\n pb.vec4('implParams'),\r\n pb.int('lightType')\r\n ]);\r\n scope.camera = cameraStruct().uniform(0);\r\n scope.light = lightStruct().uniform(0);\r\n // Lets the shadow implementation add its own caster inputs. Only deep\r\n // opacity maps use this, to read the frontmost depth its first pass wrote.\r\n const shadowLight = (ctx.renderPass as ShadowMapPass).light;\r\n const casterParams = shadowLight ? ctx.shadowMapInfo?.get(shadowLight) : null;\r\n if (casterParams) {\r\n casterParams.impl?.declareCasterUniforms(scope, casterParams);\r\n }\r\n } else if (\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH ||\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR\r\n ) {\r\n scope.camera = cameraStruct().uniform(0);\r\n } else if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n const useClusteredLighting = !ctx.currentShadowLight;\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG) {\r\n const fogStructMembers: PBShaderExp[] = [\r\n pb.int('withAerialPerspective'),\r\n pb.int('fogType'),\r\n pb.int('additive'),\r\n getAtmosphereParamsStruct(pb)('atmosphereParams'),\r\n getHeightFogParamsStruct(pb)('heightFogParams')\r\n ];\r\n const fogStruct = pb.defineStruct(fogStructMembers);\r\n scope.fog = fogStruct().uniform(0);\r\n // Static samplers: LUTs are rgba16f without mipmaps\r\n scope[UNIFORM_NAME_AERIALPERSPECTIVE_LUT] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[UNIFORM_NAME_SKYDISTANTLIGHT_LUT] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n }\r\n const lightStruct = ctx.currentShadowLight\r\n ? pb.defineStruct([\r\n pb.vec3('sunDir'),\r\n pb.int('shadowCascades'),\r\n pb.vec4('positionAndRange'),\r\n pb.vec4('directionAndCutoff'),\r\n pb.vec4('diffuseAndIntensity'),\r\n pb.vec4('extraParams'),\r\n pb.vec4('cascadeDistances'),\r\n pb.vec4('depthBiasValues'),\r\n pb.vec4('shadowCameraParams'),\r\n pb.vec4('depthBiasScales'),\r\n pb.vec4('implParams'),\r\n pb.vec4[16]('shadowMatrices'),\r\n pb.float('shadowStrength'),\r\n pb.float('envLightStrength'),\r\n pb.float('envLightSpecularStrength')\r\n ])\r\n : pb.defineStruct([\r\n pb.vec3('sunDir'),\r\n pb.float('envLightStrength'),\r\n pb.float('envLightSpecularStrength'),\r\n pb.vec4('clusterParams'),\r\n pb.ivec4('countParams'),\r\n pb.ivec2('lightIndexTexSize'),\r\n // Number of shadow-casting lights at the head of the clustered light\r\n // buffer (indices 1..N). Only present on the screen-space shadow mask\r\n // path (part of the global bind group hash), so the declared and bound\r\n // layouts always agree.\r\n ...(ctx.screenSpaceShadowMask ? [pb.int('numShadowLights')] : [])\r\n ]);\r\n scope.camera = cameraStruct().uniform(0);\r\n scope.light = lightStruct().uniform(0);\r\n if (useClusteredLighting) {\r\n scope[UNIFORM_NAME_LIGHT_BUFFER] = pb.vec4[(this.getMaxClusterLights() + 1) * 4]().uniformBuffer(0);\r\n // Non-WebGL1 devices fetch the light index texture with textureLoad\r\n scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE] = (\r\n pb.getDevice().type === 'webgl' ? pb.tex2D() : pb.utex2D().noSampler()\r\n ).uniform(0);\r\n // Screen-space shadow mask array (rgba8unorm, 4 shadow lights per layer).\r\n // Sampled by clustered lights whose buffer index is <= numShadowLights.\r\n // Presence is keyed into the global bind group hash, so declared and bound\r\n // layouts always agree.\r\n if (ctx.screenSpaceShadowMask) {\r\n scope[UNIFORM_NAME_SHADOW_MASK] = pb.tex2DArray().uniform(0);\r\n // Cluster shadow-light handling for the current queue: 1 = sample the\r\n // opaque shadow mask (opaque queue); 0 = skip shadow lights, which are\r\n // instead lit inline by the per-light additive passes (transparent queue,\r\n // e.g. OIT hair, where the opaque-depth mask would be incorrect).\r\n scope[UNIFORM_NAME_SHADOW_MASK_MODE] = pb.int().uniform(0);\r\n }\r\n }\r\n // Baked sky cube: rgba16f without mipmaps\r\n scope[UNIFORM_NAME_BAKED_SKY_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n if (ctx.currentShadowLight) {\r\n const scope = pb.getGlobalScope();\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight)!;\r\n const tex = shadowMapParams.shadowMap!.isTextureCube()\r\n ? shadowMapParams.shadowMap.isDepth()\r\n ? scope.$builder.texCubeShadow()\r\n : scope.$builder.texCube()\r\n : shadowMapParams.shadowMap!.isTexture2D()\r\n ? shadowMapParams.shadowMap.isDepth()\r\n ? scope.$builder.tex2DShadow()\r\n : scope.$builder.tex2D()\r\n : shadowMapParams.shadowMap!.isDepth()\r\n ? scope.$builder.tex2DArrayShadow()\r\n : scope.$builder.tex2DArray();\r\n if (\r\n !shadowMapParams.shadowMap!.isDepth() &&\r\n !ctx.device.getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap!.format)\r\n .filterable\r\n ) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n if (shadowMapParams.shadowMap!.isDepth()) {\r\n // Depth-format shadow maps are sampled exclusively through the\r\n // comparison sampler (textureSampleCompareLevel); skip the regular\r\n // auto-bound sampler.\r\n tex.noSampler();\r\n }\r\n scope[UNIFORM_NAME_SHADOW_MAP] = tex.uniform(0);\r\n }\r\n if (this.usesWaterCaustics(ctx)) {\r\n this.declareWaterCausticUniforms(pb);\r\n }\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb, ctx);\r\n }\r\n if (ctx.linearDepthTexture) {\r\n // Depth values must never be filtered across geometry edges; nearest\r\n // matches the default sampler for unfilterable float formats.\r\n scope[UNIFORM_NAME_LINEAR_DEPTH_MAP] = pb\r\n .tex2D()\r\n .sampleType('unfilterable-float')\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n scope[UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE] = pb.vec2().uniform(0);\r\n }\r\n if (ctx.sceneColorTexture) {\r\n // Mip-filtered, because the refraction background is read at a LOD and\r\n // not only at mip 0: the water picks one from how deep and how turbid\r\n // the column it is looking through is. A `nomip` sampler pins mip 0\r\n // whatever LOD the shader passes, so this and the copy's level count\r\n // have to change together - and each backend only honours one of them.\r\n // WebGPU binds the sampler declared here as a static binding the runtime\r\n // cannot overwrite; WebGL falls back to the texture's own sampler, whose\r\n // mip filter follows its level count.\r\n //\r\n // Every other reader of this texture passes an explicit LOD 0 (SSR hits,\r\n // the sky blend), so none of them changes behaviour.\r\n scope[UNIFORM_NAME_SCENE_COLOR_MAP] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear'));\r\n scope[UNIFORM_NAME_SCENE_COLOR_MAP_SIZE] = pb.vec2().uniform(0);\r\n }\r\n if (ctx.HiZTexture) {\r\n // Matches the fetchSampler('clamp_nearest') previously passed at runtime\r\n scope[UNIFORM_NAME_HIZ_DEPTH_MAP] = pb\r\n .tex2D()\r\n .sampleType('unfilterable-float')\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest'));\r\n scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO] = pb.vec4().uniform(0);\r\n }\r\n }\r\n }\r\n /**\r\n * This function checks if the shader needs to process skeletal animation.\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns true if the shader needs to process skeletal animation, otherwise false.\r\n */\r\n static hasSkinning(scope: PBInsideFunctionScope) {\r\n return !!scope[UNIFORM_NAME_BONE_MATRICES];\r\n }\r\n /**\r\n * This function checks if the shader needs to process morph target animation.\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns true if the shader needs to process morph target animation, otherwise false.\r\n */\r\n static hasMorphing(scope: PBInsideFunctionScope) {\r\n return !!scope[UNIFORM_NAME_MORPH_DATA];\r\n }\r\n /**\r\n * Calculate skinning matrix for current vertex\r\n *\r\n * @param scope - Current shader scope\r\n *\r\n * @returns Skinning matrix for current vertex, or null if there is not skeletal animation\r\n */\r\n static calculateSkinMatrix(scope: PBInsideFunctionScope) {\r\n if (!this.hasSkinning(scope)) {\r\n return null;\r\n }\r\n const pb = scope.$builder;\r\n const isWebGL = pb.getDevice().type === 'webgl';\r\n const supportsTextureLoad = !isWebGL;\r\n const funcNameGetBoneMatrixFromTexture = 'Z_getBoneMatrixFromTexture';\r\n pb.func(funcNameGetBoneMatrixFromTexture, [pb.int('boneIndex')], function () {\r\n const boneTexture = this[UNIFORM_NAME_BONE_MATRICES];\r\n this.$l.uvOffsets = pb.textureSampleLevel(\r\n boneTexture,\r\n pb.div(pb.vec2(0.5), this[UNIFORM_NAME_BONE_TEXTURE_SIZE]),\r\n 0\r\n );\r\n this.$l.currentOffset = pb.int(this.uvOffsets.x);\r\n this.$l.w = this[UNIFORM_NAME_BONE_TEXTURE_SIZE].x;\r\n this.$l.pixelIndex = pb.float(pb.mul(pb.add(this.boneIndex, this.currentOffset), 4));\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.w);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.w));\r\n this.$l.u1 = pb.div(pb.add(this.xIndex, 0.5), this.w);\r\n this.$l.u2 = pb.div(pb.add(this.xIndex, 1.5), this.w);\r\n this.$l.u3 = pb.div(pb.add(this.xIndex, 2.5), this.w);\r\n this.$l.u4 = pb.div(pb.add(this.xIndex, 3.5), this.w);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.w);\r\n this.$l.row1 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u1, this.v), 0);\r\n this.$l.row2 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u2, this.v), 0);\r\n this.$l.row3 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u3, this.v), 0);\r\n this.$l.row4 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u4, this.v), 0);\r\n this.$return(pb.mat4(this.row1, this.row2, this.row3, this.row4));\r\n });\r\n const funcNameGetSkinningMatrix = 'Z_getSkinningMatrix';\r\n pb.func(funcNameGetSkinningMatrix, [], function () {\r\n const invBindMatrix = this[UNIFORM_NAME_BONE_INV_BIND_MATRIX];\r\n const blendIndices = scope.$getVertexAttrib('blendIndices')!;\r\n const blendWeights = scope.$getVertexAttrib('blendWeights')!;\r\n this.$l.m0 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[0]));\r\n this.$l.m1 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[1]));\r\n this.$l.m2 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[2]));\r\n this.$l.m3 = scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(blendIndices[3]));\r\n this.$l.m = pb.add(\r\n pb.mul(this.m0, blendWeights.x),\r\n pb.mul(this.m1, blendWeights.y),\r\n pb.mul(this.m2, blendWeights.z),\r\n pb.mul(this.m3, blendWeights.w)\r\n );\r\n this.$l.skinInfo = this[UNIFORM_NAME_SKIN_INFLUENCE_INFO];\r\n this.$if(pb.greaterThan(this.skinInfo.z, 4), function () {\r\n this.$l.vertexIndex = isWebGL\r\n ? pb.int(scope.$inputs.zFakeVertexID)\r\n : pb.int(scope.$builtins.vertexIndex);\r\n this.$l.texWidth = pb.int(this.skinInfo.x);\r\n this.$l.pairCount = pb.int(this.skinInfo.w);\r\n this.$for(pb.int('pairIndex'), 0, MAX_SKIN_EXTRA_INFLUENCE_PAIRS, function () {\r\n this.$if(pb.greaterThanEqual(this.pairIndex, this.pairCount), function () {\r\n this.$break();\r\n });\r\n this.$l.pixelIndex = pb.add(pb.mul(this.vertexIndex, this.pairCount), this.pairIndex);\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.div(this.pixelIndex, this.texWidth);\r\n if (supportsTextureLoad) {\r\n this.$l.extra = pb.textureLoad(\r\n this[UNIFORM_NAME_SKIN_INFLUENCE_DATA],\r\n pb.ivec2(this.xIndex, this.yIndex),\r\n 0\r\n );\r\n } else {\r\n this.$l.u = pb.div(pb.add(pb.float(this.xIndex), 0.5), this.skinInfo.x);\r\n this.$l.v = pb.div(pb.add(pb.float(this.yIndex), 0.5), this.skinInfo.y);\r\n this.$l.extra = pb.textureSampleLevel(\r\n this[UNIFORM_NAME_SKIN_INFLUENCE_DATA],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n }\r\n this.$if(pb.greaterThan(this.extra.y, 0), function () {\r\n this.m = pb.add(\r\n this.m,\r\n pb.mul(scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(this.extra.x)), this.extra.y)\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.extra.w, 0), function () {\r\n this.m = pb.add(\r\n this.m,\r\n pb.mul(scope.$g[funcNameGetBoneMatrixFromTexture](pb.int(this.extra.z)), this.extra.w)\r\n );\r\n });\r\n });\r\n });\r\n this.$return(pb.mul(invBindMatrix, this.m));\r\n });\r\n return scope.$g[funcNameGetSkinningMatrix]() as PBShaderExp;\r\n }\r\n static calculateMorphDelta(scope: PBInsideFunctionScope, attrib: number) {\r\n const pb = scope.$builder;\r\n const isWebGL1 = pb.getDevice().type === 'webgl';\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.calculateMorphDelta(): must be called at vertex stage`);\r\n }\r\n const funcName = 'Z_calculateMorph';\r\n const that = this;\r\n pb.func(funcName, [pb.int('offset')], function () {\r\n this.$if(pb.lessThan(this.offset, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.vertexIndex = isWebGL1\r\n ? pb.int(scope.$inputs.zFakeVertexID)\r\n : pb.int(scope.$builtins.vertexIndex);\r\n const morphInfo = scope[that.getMorphInfoUniformName()];\r\n this.$l.metaData = pb.ivec4(morphInfo[0]);\r\n this.$l.texWidth = pb.float(this.metaData.x);\r\n this.$l.texHeight = pb.float(this.metaData.y);\r\n this.$l.numVertices = this.metaData.z;\r\n this.$l.numTargets = this.metaData.w;\r\n this.$l.value = pb.vec4(0);\r\n if (isWebGL1) {\r\n this.$for(pb.int('i'), 0, MORPH_WEIGHTS_VECTOR_COUNT, function () {\r\n this.$for(pb.int('j'), 0, 4, function () {\r\n this.$l.index = pb.add(pb.mul(this.i, 4), this.j);\r\n this.$if(pb.greaterThanEqual(this.index, this.numTargets), function () {\r\n this.$return(this.value);\r\n });\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$if(pb.notEqual(this.weight, 0), function () {\r\n this.$l.targetIndex = pb.int(\r\n morphInfo.at(pb.add(1 + MORPH_WEIGHTS_VECTOR_COUNT, this.i)).at(this.j)\r\n );\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(this.offset, pb.mul(this.targetIndex, this.numVertices), this.vertexIndex)\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.texWidth));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), this.texWidth);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.texHeight);\r\n this.$l.morphValue = pb.textureSampleLevel(\r\n this[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n this.value = pb.add(this.value, pb.mul(this.morphValue, this.weight));\r\n });\r\n });\r\n });\r\n } else {\r\n this.$for(pb.int('t'), 0, this.numTargets, function () {\r\n this.$l.i = pb.sar(this.t, 2);\r\n this.$l.j = pb.compAnd(this.t, 3);\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$if(pb.notEqual(this.weight, 0), function () {\r\n this.$l.targetIndex = pb.int(\r\n morphInfo.at(pb.add(1 + MORPH_WEIGHTS_VECTOR_COUNT, this.i)).at(this.j)\r\n );\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(this.offset, pb.mul(this.targetIndex, this.numVertices), this.vertexIndex)\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.texWidth));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), this.texWidth);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.texHeight);\r\n this.$l.morphValue = pb.textureSampleLevel(\r\n this[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n this.value = pb.add(this.value, pb.mul(this.morphValue, this.weight));\r\n });\r\n });\r\n }\r\n this.$return(this.value);\r\n });\r\n const pos = 1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + (attrib >> 2);\r\n const comp = attrib & 3;\r\n const offset = scope[this.getMorphInfoUniformName()][pos][comp];\r\n return scope[funcName](pb.int(offset)) as PBShaderExp;\r\n }\r\n /**\r\n * Normalize a morphed direction without allowing cancellation between\r\n * multiple morph targets to turn a valid base direction into NaN/noise.\r\n *\r\n * Morph normal/tangent data is additive. When two targets cancel the base\r\n * direction, the zero-length result is not a meaningful direction, so the\r\n * authored vertex direction is the least surprising fallback.\r\n * @internal\r\n */\r\n private static defineNormalizeMorphedDirection(scope: PBInsideFunctionScope): string {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_normalizeMorphedDirection';\r\n pb.func(funcName, [pb.vec3('base'), pb.vec3('delta')], function () {\r\n this.$l.morphed = pb.add(this.base, this.delta);\r\n this.$l.lengthSquared = pb.dot(this.morphed, this.morphed);\r\n this.$if(pb.greaterThan(this.lengthSquared, 1e-6), function () {\r\n this.$return(pb.mul(this.morphed, pb.inverseSqrt(this.lengthSquared)));\r\n });\r\n this.$l.baseLengthSquared = pb.dot(this.base, this.base);\r\n this.$if(pb.greaterThan(this.baseLengthSquared, 1e-6), function () {\r\n this.$return(pb.mul(this.base, pb.inverseSqrt(this.baseLengthSquared)));\r\n });\r\n this.$return(pb.vec3(0, 0, 1));\r\n });\r\n return funcName;\r\n }\r\n /**\r\n * Mixes morph directions according to the amount of positional deformation\r\n * contributed by each active target. This avoids letting a target with a\r\n * large authored normal delta dominate a target that actually moves the\r\n * surface much farther at the current vertex.\r\n *\r\n * The additive result remains the fallback for assets without position\r\n * morph data, and for vertices whose position deltas are all zero.\r\n * @internal\r\n */\r\n private static calculateMorphDirectionByDisplacement(\r\n scope: PBInsideFunctionScope,\r\n base: PBShaderExp,\r\n attrib: number\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const isWebGL1 = pb.getDevice().type === 'webgl';\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.calculateMorphDirectionByDisplacement(): must be called at vertex stage`);\r\n }\r\n const that = this;\r\n const funcName = 'Z_calculateMorphDirectionByDisplacement';\r\n const normalizeName = this.defineNormalizeMorphedDirection(scope);\r\n pb.func(funcName, [pb.vec3('base'), pb.int('directionOffset'), pb.int('positionOffset')], function () {\r\n this.$l.vertexIndex = isWebGL1\r\n ? pb.int(scope.$inputs.zFakeVertexID)\r\n : pb.int(scope.$builtins.vertexIndex);\r\n const morphInfo = scope[that.getMorphInfoUniformName()];\r\n this.$l.metaData = pb.ivec4(morphInfo[0]);\r\n this.$l.texWidth = pb.float(this.metaData.x);\r\n this.$l.texHeight = pb.float(this.metaData.y);\r\n this.$l.numVertices = this.metaData.z;\r\n this.$l.numTargets = this.metaData.w;\r\n this.$l.directionDelta = pb.vec3(0);\r\n this.$l.weightedDirection = pb.vec3(0);\r\n this.$l.weightSum = pb.float(0);\r\n\r\n const accumulateTarget = (targetScope: PBInsideFunctionScope) => {\r\n targetScope.$if(pb.notEqual(targetScope.weight, 0), function () {\r\n this.$l.targetIndex = pb.int(targetScope['targetIndex']);\r\n this.$l.positionValue = pb.vec3(0);\r\n this.$l.directionValue = pb.vec3(0);\r\n this.$if(pb.greaterThanEqual(targetScope['directionOffset'], 0), function () {\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(\r\n targetScope['directionOffset'],\r\n pb.mul(this.targetIndex, targetScope['numVertices']),\r\n targetScope['vertexIndex']\r\n )\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, targetScope['texWidth']);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, targetScope['texWidth']));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), targetScope['texWidth']);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), targetScope['texHeight']);\r\n this.directionValue = pb.textureSampleLevel(\r\n scope[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n ).xyz;\r\n });\r\n this.$if(pb.greaterThanEqual(targetScope['positionOffset'], 0), function () {\r\n this.$l.pixelIndex = pb.float(\r\n pb.add(\r\n targetScope['positionOffset'],\r\n pb.mul(this.targetIndex, targetScope['numVertices']),\r\n targetScope['vertexIndex']\r\n )\r\n );\r\n this.$l.xIndex = pb.mod(this.pixelIndex, targetScope['texWidth']);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, targetScope['texWidth']));\r\n this.$l.u = pb.div(pb.add(this.xIndex, 0.5), targetScope['texWidth']);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), targetScope['texHeight']);\r\n this.positionValue = pb.textureSampleLevel(\r\n scope[that.getMorphDataUniformName()],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n ).xyz;\r\n });\r\n this.directionDelta = pb.add(this.directionDelta, pb.mul(this.directionValue, targetScope.weight));\r\n this.$l.targetDirection = scope.$g[normalizeName](\r\n this.base,\r\n pb.mul(this.directionValue, targetScope.weight)\r\n );\r\n this.$l.displacementWeight = pb.mul(\r\n pb.abs(targetScope.weight),\r\n pb.sqrt(pb.dot(this.positionValue, this.positionValue))\r\n );\r\n this.weightedDirection = pb.add(\r\n this.weightedDirection,\r\n pb.mul(this.targetDirection, this.displacementWeight)\r\n );\r\n this.weightSum = pb.add(this.weightSum, this.displacementWeight);\r\n });\r\n };\r\n\r\n if (isWebGL1) {\r\n this.$for(pb.int('i'), 0, MORPH_WEIGHTS_VECTOR_COUNT, function () {\r\n this.$for(pb.int('j'), 0, 4, function () {\r\n this.$l.index = pb.add(pb.mul(this.i, 4), this.j);\r\n this.$if(pb.greaterThanEqual(this.index, this.numTargets), function () {\r\n this.$break();\r\n });\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$l.targetIndex = pb.int(\r\n morphInfo.at(pb.add(1 + MORPH_WEIGHTS_VECTOR_COUNT, this.i)).at(this.j)\r\n );\r\n accumulateTarget(this);\r\n });\r\n });\r\n } else {\r\n this.$for(pb.int('t'), 0, this.numTargets, function () {\r\n this.$l.i = pb.sar(this.t, 2);\r\n this.$l.j = pb.compAnd(this.t, 3);\r\n this.$l.weight = morphInfo.at(pb.add(1, this.i)).at(this.j);\r\n this.$l.targetIndex = pb.int(\r\n morphInfo.at(pb.add(1 + MORPH_WEIGHTS_VECTOR_COUNT, this.i)).at(this.j)\r\n );\r\n accumulateTarget(this);\r\n });\r\n }\r\n\r\n this.$l.fallback = scope.$g[normalizeName](this.base, this.directionDelta);\r\n this.$if(pb.lessThan(this.weightSum, 1e-6), function () {\r\n this.$return(this.fallback);\r\n });\r\n this.$l.weightedLengthSquared = pb.dot(this.weightedDirection, this.weightedDirection);\r\n this.$if(pb.greaterThan(this.weightedLengthSquared, 1e-6), function () {\r\n this.$return(pb.mul(this.weightedDirection, pb.inverseSqrt(this.weightedLengthSquared)));\r\n });\r\n this.$return(this.fallback);\r\n });\r\n const directionPos = 1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + (attrib >> 2);\r\n const directionComp = attrib & 3;\r\n const positionPos = 1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + (MORPH_TARGET_POSITION >> 2);\r\n const positionComp = MORPH_TARGET_POSITION & 3;\r\n const morphInfo = scope[this.getMorphInfoUniformName()];\r\n return scope.$g[funcName](\r\n base.xyz,\r\n pb.int(morphInfo[directionPos][directionComp]),\r\n pb.int(morphInfo[positionPos][positionComp])\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private static orthogonalizeMorphedTangent(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n tangent: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_orthogonalizeMorphedTangent';\r\n pb.func(funcName, [pb.vec3('normal'), pb.vec3('tangent')], function () {\r\n this.$l.normalLengthSquared = pb.dot(this.normal, this.normal);\r\n this.$if(pb.greaterThan(this.normalLengthSquared, 1e-6), function () {\r\n this.$l.n = pb.mul(this.normal, pb.inverseSqrt(this.normalLengthSquared));\r\n this.$l.projected = pb.sub(this.tangent, pb.mul(this.n, pb.dot(this.n, this.tangent)));\r\n this.$l.tangentLengthSquared = pb.dot(this.projected, this.projected);\r\n this.$if(pb.greaterThan(this.tangentLengthSquared, 1e-6), function () {\r\n this.$return(pb.mul(this.projected, pb.inverseSqrt(this.tangentLengthSquared)));\r\n });\r\n });\r\n this.$return(this.tangent);\r\n });\r\n return scope.$g[funcName](normal.xyz, tangent.xyz) as PBShaderExp;\r\n }\r\n /** @internal */\r\n static prepareSkinAnimation(scope: PBInsideFunctionScope) {\r\n if (!this.hasSkinning(scope)) {\r\n return;\r\n }\r\n const that = this;\r\n const pb = scope.$builder;\r\n const isWebGL = pb.getDevice().type === 'webgl';\r\n const supportsTextureLoad = !isWebGL;\r\n const funcNameGetBoneMatrixFromTexture = 'Z_getBoneMatrixFromTexture';\r\n pb.func(funcNameGetBoneMatrixFromTexture, [pb.float('boneIndex'), pb.float('boneOffset')], function () {\r\n const boneTexture = this[UNIFORM_NAME_BONE_MATRICES];\r\n this.$l.w = this[UNIFORM_NAME_BONE_TEXTURE_SIZE].x;\r\n this.$l.pixelIndex = pb.mul(pb.add(this.boneIndex, this.boneOffset), 4);\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.w);\r\n this.$l.yIndex = pb.floor(pb.div(this.pixelIndex, this.w));\r\n this.$l.u1 = pb.div(pb.add(this.xIndex, 0.5), this.w);\r\n this.$l.u2 = pb.div(pb.add(this.xIndex, 1.5), this.w);\r\n this.$l.u3 = pb.div(pb.add(this.xIndex, 2.5), this.w);\r\n this.$l.u4 = pb.div(pb.add(this.xIndex, 3.5), this.w);\r\n this.$l.v = pb.div(pb.add(this.yIndex, 0.5), this.w);\r\n this.$l.row1 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u1, this.v), 0);\r\n this.$l.row2 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u2, this.v), 0);\r\n this.$l.row3 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u3, this.v), 0);\r\n this.$l.row4 = pb.textureSampleLevel(boneTexture, pb.vec2(this.u4, this.v), 0);\r\n this.$return(pb.mat4(this.row1, this.row2, this.row3, this.row4));\r\n });\r\n const funcNameGetSkinningMatrix = 'Z_getSkinningMatrix';\r\n pb.func(funcNameGetSkinningMatrix, [pb.float('boneOffset')], function () {\r\n const invBindMatrix = this[UNIFORM_NAME_BONE_INV_BIND_MATRIX];\r\n const blendIndices = scope.$getVertexAttrib('blendIndices')!;\r\n const blendWeights = scope.$getVertexAttrib('blendWeights')!;\r\n this.$l.m0 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[0], this.boneOffset);\r\n this.$l.m1 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[1], this.boneOffset);\r\n this.$l.m2 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[2], this.boneOffset);\r\n this.$l.m3 = scope.$g[funcNameGetBoneMatrixFromTexture](blendIndices[3], this.boneOffset);\r\n this.$l.m = pb.add(\r\n pb.mul(this.m0, blendWeights.x),\r\n pb.mul(this.m1, blendWeights.y),\r\n pb.mul(this.m2, blendWeights.z),\r\n pb.mul(this.m3, blendWeights.w)\r\n );\r\n this.$l.skinInfo = this[UNIFORM_NAME_SKIN_INFLUENCE_INFO];\r\n this.$if(pb.greaterThan(this.skinInfo.z, 4), function () {\r\n this.$l.vertexIndex = isWebGL\r\n ? pb.int(scope.$inputs.zFakeVertexID)\r\n : pb.int(scope.$builtins.vertexIndex);\r\n this.$l.texWidth = pb.int(this.skinInfo.x);\r\n this.$l.pairCount = pb.int(this.skinInfo.w);\r\n this.$for(pb.int('pairIndex'), 0, MAX_SKIN_EXTRA_INFLUENCE_PAIRS, function () {\r\n this.$if(pb.greaterThanEqual(this.pairIndex, this.pairCount), function () {\r\n this.$break();\r\n });\r\n this.$l.pixelIndex = pb.add(pb.mul(this.vertexIndex, this.pairCount), this.pairIndex);\r\n this.$l.xIndex = pb.mod(this.pixelIndex, this.texWidth);\r\n this.$l.yIndex = pb.div(this.pixelIndex, this.texWidth);\r\n if (supportsTextureLoad) {\r\n this.$l.extra = pb.textureLoad(\r\n this[UNIFORM_NAME_SKIN_INFLUENCE_DATA],\r\n pb.ivec2(this.xIndex, this.yIndex),\r\n 0\r\n );\r\n } else {\r\n this.$l.u = pb.div(pb.add(pb.float(this.xIndex), 0.5), this.skinInfo.x);\r\n this.$l.v = pb.div(pb.add(pb.float(this.yIndex), 0.5), this.skinInfo.y);\r\n this.$l.extra = pb.textureSampleLevel(\r\n this[UNIFORM_NAME_SKIN_INFLUENCE_DATA],\r\n pb.vec2(this.u, this.v),\r\n 0\r\n );\r\n }\r\n this.$if(pb.greaterThan(this.extra.y, 0), function () {\r\n this.m = pb.add(\r\n this.m,\r\n pb.mul(scope.$g[funcNameGetBoneMatrixFromTexture](this.extra.x, this.boneOffset), this.extra.y)\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.extra.w, 0), function () {\r\n this.m = pb.add(\r\n this.m,\r\n pb.mul(scope.$g[funcNameGetBoneMatrixFromTexture](this.extra.z, this.boneOffset), this.extra.w)\r\n );\r\n });\r\n });\r\n });\r\n this.$return(pb.mul(invBindMatrix, this.m));\r\n });\r\n const motionVector = !!this.getUnjitteredViewProjectionMatrix(scope);\r\n const boneTexture = scope[UNIFORM_NAME_BONE_MATRICES];\r\n scope.$l[that.SKIN_BONE_OFFSET] = pb.textureSampleLevel(\r\n boneTexture,\r\n pb.div(pb.vec2(0.5), scope[UNIFORM_NAME_BONE_TEXTURE_SIZE]),\r\n 0\r\n ).xy;\r\n scope.$l[that.SKIN_MATRIX_NAME] = scope[funcNameGetSkinningMatrix](scope[that.SKIN_BONE_OFFSET].x);\r\n if (motionVector) {\r\n scope.$l[that.SKIN_PREV_MATRIX_NAME] = scope[funcNameGetSkinningMatrix](scope[that.SKIN_BONE_OFFSET].y);\r\n }\r\n }\r\n /**\r\n * Calculates the vertex position of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated vertex position in object space, or null if pos is null\r\n */\r\n static resolveVertexPosition(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexPosition(): must be called at vertex stage`);\r\n }\r\n if (!pb.getGlobalScope().$getVertexAttrib('position')) {\r\n pb.getGlobalScope().$inputs.Z_pos = pb.vec3().attrib('position');\r\n }\r\n const that = this;\r\n const params =\r\n scope[that.SKIN_MATRIX_NAME] && scope[that.SKIN_PREV_MATRIX_NAME]\r\n ? [pb.mat4('skinMatrix'), pb.mat4('prevSkinMatrix')]\r\n : scope[that.SKIN_MATRIX_NAME]\r\n ? [pb.mat4('skinMatrix')]\r\n : [];\r\n pb.func('Z_resolveVertexPosition', params, function () {\r\n this.$l.opos = this.$getVertexAttrib('position')!.xyz;\r\n if (that.hasMorphing(scope)) {\r\n this.opos = pb.add(this.opos, that.calculateMorphDelta(this, MORPH_TARGET_POSITION).xyz);\r\n }\r\n if (this.skinMatrix) {\r\n this.$l.pos = pb.mul(this.skinMatrix, pb.vec4(this.opos, 1)).xyz;\r\n } else {\r\n this.$l.pos = this.opos;\r\n }\r\n const prevUnjitteredVPMatrix = that.getPrevUnjitteredViewProjectionMatrix(this);\r\n if (prevUnjitteredVPMatrix) {\r\n this.$l.unjitteredVPMatrix = that.getUnjitteredViewProjectionMatrix(this);\r\n this.$l.worldPos = pb.mul(that.getWorldMatrix(this), pb.vec4(this.pos, 1));\r\n if (this.prevSkinMatrix) {\r\n this.$l.prevWorldPos = pb.mul(\r\n that.getPrevWorldMatrix(this),\r\n pb.mul(this.prevSkinMatrix, pb.vec4(this.opos, 1))\r\n );\r\n } else {\r\n this.$l.prevWorldPos = pb.mul(that.getPrevWorldMatrix(this), pb.vec4(this.pos, 1));\r\n }\r\n this.$outputs.zMotionVectorPosCurrent = pb.mul(this.unjitteredVPMatrix, this.worldPos);\r\n this.$outputs.zMotionVectorPosPrev = pb.mul(prevUnjitteredVPMatrix, this.prevWorldPos);\r\n }\r\n this.$return(this.pos);\r\n });\r\n return (\r\n scope[that.SKIN_MATRIX_NAME] && scope[that.SKIN_PREV_MATRIX_NAME]\r\n ? scope.Z_resolveVertexPosition(scope[that.SKIN_MATRIX_NAME], scope[that.SKIN_PREV_MATRIX_NAME])\r\n : scope[that.SKIN_MATRIX_NAME]\r\n ? scope.Z_resolveVertexPosition(scope[that.SKIN_MATRIX_NAME])\r\n : scope.Z_resolveVertexPosition()\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Resolve motion vector\r\n *\r\n * @param scope - Current shader scope\r\n * @param worldPos - Current object position in world space\r\n * @param prevWorldPos - Previous object position in world space\r\n */\r\n static resolveMotionVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp, prevWorldPos: PBShaderExp) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n const prevUnjitteredVPMatrix = that.getPrevUnjitteredViewProjectionMatrix(scope);\r\n if (prevUnjitteredVPMatrix) {\r\n const unjitteredVPMatrix = that.getUnjitteredViewProjectionMatrix(scope);\r\n scope.$outputs.zMotionVectorPosCurrent = pb.mul(unjitteredVPMatrix, pb.vec4(worldPos.xyz, 1));\r\n scope.$outputs.zMotionVectorPosPrev = pb.mul(prevUnjitteredVPMatrix, pb.vec4(prevWorldPos.xyz, 1));\r\n }\r\n }\r\n /**\r\n * Gets the skinning matrix in the vertex shader, if the mesh being drawn is skinned.\r\n *\r\n * @remarks\r\n * Lets a material apply the same skinning transform to its own uniform-supplied\r\n * object-space vectors that {@link ShaderHelper.resolveVertexNormal} applies to\r\n * the normal attribute, so such vectors stay attached to the deforming mesh.\r\n *\r\n * @param scope - Current shader scope, must be vertex stage\r\n * @returns The skinning matrix of type mat4, or null when the mesh is not skinned\r\n */\r\n static getSkinMatrix(scope: PBInsideFunctionScope): PBShaderExp | null {\r\n return (scope[this.SKIN_MATRIX_NAME] as PBShaderExp) ?? null;\r\n }\r\n /**\r\n * Calculates the normal vector of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param normal - Vertex normal input, must be type of vec3, null if no vertex normal input\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated normal vector in object space, or null if normal is null\r\n */\r\n static resolveVertexNormal(scope: PBInsideFunctionScope, normal?: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexNormal(): must be called in vertex stage`);\r\n }\r\n const funcScope = pb.getCurrentFunctionScope();\r\n if (!funcScope || !funcScope.$isMain()) {\r\n throw new Error(`ShaderHelper.resolveVertexNormal(): must be called at entry function`);\r\n }\r\n const useVertexAttrib = !normal;\r\n if (useVertexAttrib && scope[this.RESOLVED_VERTEX_NORMAL_NAME]) {\r\n return scope[this.RESOLVED_VERTEX_NORMAL_NAME] as PBShaderExp;\r\n }\r\n if (!normal) {\r\n if (!scope.$getVertexAttrib('normal')) {\r\n scope.$inputs.Z_normal = pb.vec3().attrib('normal');\r\n }\r\n normal = scope.$getVertexAttrib('normal')!;\r\n }\r\n if (this.hasMorphing(scope)) {\r\n normal = this.calculateMorphDirectionByDisplacement(scope, normal, MORPH_TARGET_NORMAL);\r\n }\r\n let resolvedNormal = normal;\r\n if (scope[this.SKIN_MATRIX_NAME]) {\r\n resolvedNormal = pb.mul(scope[this.SKIN_MATRIX_NAME], pb.vec4(normal, 0)).xyz as PBShaderExp;\r\n }\r\n if (useVertexAttrib) {\r\n scope.$l[this.RESOLVED_VERTEX_NORMAL_NAME] = resolvedNormal;\r\n resolvedNormal = scope[this.RESOLVED_VERTEX_NORMAL_NAME];\r\n }\r\n return resolvedNormal;\r\n }\r\n /**\r\n * Calculates the tangent vector of type vec3 in object space\r\n *\r\n * @param scope - Current shader scope\r\n * @param tangent - Vertex tangent input, must be type of vec4, null if no vertex tangent input\r\n * @param skinMatrix - The skinning matrix if there is skeletal animation, otherwise null\r\n * @returns The calculated tangent vector of type vec4 in object space, or null if tangent is null\r\n */\r\n static resolveVertexTangent(scope: PBInsideFunctionScope, tangent?: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind !== 'vertex') {\r\n throw new Error(`ShaderHelper.resolveVertexTangent(): must be called in vertex stage`);\r\n }\r\n const funcScope = pb.getCurrentFunctionScope();\r\n if (!funcScope || !funcScope.$isMain()) {\r\n throw new Error(`ShaderHelper.resolveVertexTangent(): must be called at entry function`);\r\n }\r\n if (!tangent) {\r\n if (!scope.$getVertexAttrib('tangent')) {\r\n scope.$inputs.Z_tangent = pb.vec4().attrib('tangent');\r\n }\r\n tangent = scope.$getVertexAttrib('tangent')!;\r\n }\r\n if (this.hasMorphing(scope)) {\r\n tangent = pb.vec4(\r\n this.calculateMorphDirectionByDisplacement(scope, tangent.xyz, MORPH_TARGET_TANGENT),\r\n tangent.w\r\n );\r\n }\r\n if (scope[this.SKIN_MATRIX_NAME]) {\r\n tangent = pb.vec4(\r\n pb.mul(scope[this.SKIN_MATRIX_NAME], pb.vec4(tangent.xyz, 0)).xyz,\r\n tangent.w\r\n ) as PBShaderExp;\r\n }\r\n if (this.hasMorphing(scope) && scope.$getVertexAttrib('normal')) {\r\n const resolvedNormal = scope[this.RESOLVED_VERTEX_NORMAL_NAME] ?? this.resolveVertexNormal(scope);\r\n tangent = pb.vec4(this.orthogonalizeMorphedTangent(scope, resolvedNormal, tangent.xyz), tangent.w);\r\n }\r\n return tangent;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the world matrix of current object to be drawn\r\n * @param scope - Current shader scope\r\n * @returns The world matrix of current object to be drawn\r\n */\r\n static getWorldMatrix(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n return (scope[UNIFORM_NAME_WORLD_MATRIX] ??\r\n pb.mat4(\r\n this.getInstancedUniform(scope, 0),\r\n this.getInstancedUniform(scope, 1),\r\n this.getInstancedUniform(scope, 2),\r\n this.getInstancedUniform(scope, 3)\r\n )) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the world matrix at previous frame of current object to be drawn\r\n * @param scope - Current shader scope\r\n * @returns The world matrix at previous frame of current object to be drawn\r\n */\r\n static getPrevWorldMatrix(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const framestamp = this.getFramestamp(scope);\r\n if (scope[UNIFORM_NAME_WORLD_MATRIX]) {\r\n if (pb.getDevice().type === 'webgpu') {\r\n pb.func('Z_getPrevWorldMatrix', [pb.int('framestamp')], function () {\r\n this.$if(pb.equal(this.framestamp, this[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME]), function () {\r\n this.$return(this[UNIFORM_NAME_PREV_WORLD_MATRIX]);\r\n }).$else(function () {\r\n this.$return(this[UNIFORM_NAME_WORLD_MATRIX]);\r\n });\r\n });\r\n return scope.Z_getPrevWorldMatrix(framestamp);\r\n } else {\r\n return scope.$choice(\r\n pb.equal(framestamp, scope[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME]),\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRIX],\r\n scope[UNIFORM_NAME_WORLD_MATRIX]\r\n );\r\n }\r\n } else {\r\n pb.func('Z_getPrevWorldMatrix', [pb.int('framestamp')], function () {\r\n this.$l.prevFrame = pb.floatBitsToInt(that.getInstancedUniform(this, 4).x);\r\n this.$l.index = this.$choice(pb.equal(this.framestamp, this.prevFrame), pb.int(5), pb.int(0));\r\n this.$return(\r\n pb.mat4(\r\n that.getInstancedUniform(scope, this.index),\r\n that.getInstancedUniform(scope, pb.add(this.index, 1)),\r\n that.getInstancedUniform(scope, pb.add(this.index, 2)),\r\n that.getInstancedUniform(scope, pb.add(this.index, 3))\r\n )\r\n );\r\n });\r\n return scope.Z_getPrevWorldMatrix(framestamp) as PBShaderExp;\r\n }\r\n }\r\n /**\r\n * Gets the instance uniform value of type vec4 by uniform index\r\n * @param scope - Current shader scope\r\n * @returns instance uniform value\r\n */\r\n static getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n return scope[UNIFORM_NAME_INSTANCE_DATA].at(\r\n pb.add(\r\n pb.mul(scope[UNIFORM_NAME_INSTANCE_DATA_STRIDE], pb.uint(scope.$builtins.instanceIndex)),\r\n scope[UNIFORM_NAME_INSTANCE_DATA_OFFSET],\r\n pb.uint(uniformIndex)\r\n )\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the normal matrix of current object to be drawn\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The normal matrix of current object to be drawn\r\n */\r\n static getNormalMatrix(scope: PBInsideFunctionScope) {\r\n return this.getWorldMatrix(scope);\r\n }\r\n /**\r\n * Vertex shader drawable stuff\r\n *\r\n * @param scope - Current shader scope\r\n * @param skinning - true if skinning is used, otherwise false.\r\n * @param instanced - true if instancing is used, otherwise false.\r\n */\r\n static vertexShaderDrawableStuff(\r\n scope: PBGlobalScope,\r\n skinning: boolean,\r\n morphing: boolean,\r\n instanced: boolean\r\n ): void {\r\n const pb = scope.$builder;\r\n if (instanced) {\r\n scope[UNIFORM_NAME_INSTANCE_DATA_STRIDE] = pb.uint().uniform(1);\r\n scope[UNIFORM_NAME_INSTANCE_DATA_OFFSET] = pb.uint().uniform(1);\r\n scope[UNIFORM_NAME_INSTANCE_DATA] = pb.vec4[65536 >> 4]().uniformBuffer(3);\r\n } else {\r\n scope[UNIFORM_NAME_WORLD_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME] = pb.int().uniform(1);\r\n scope[UNIFORM_NAME_OBJECT_COLOR] = pb.vec4().uniform(1);\r\n }\r\n if (skinning) {\r\n scope[UNIFORM_NAME_BONE_MATRICES] = pb.tex2D().uniform(1).sampleType('unfilterable-float');\r\n scope[UNIFORM_NAME_BONE_INV_BIND_MATRIX] = pb.mat4().uniform(1);\r\n scope[UNIFORM_NAME_BONE_TEXTURE_SIZE] = pb.vec2().uniform(1);\r\n scope[UNIFORM_NAME_SKIN_INFLUENCE_DATA] = pb.tex2D().uniform(1).sampleType('unfilterable-float');\r\n scope[UNIFORM_NAME_SKIN_INFLUENCE_INFO] = pb.vec4().uniform(1);\r\n }\r\n if (morphing) {\r\n scope[UNIFORM_NAME_MORPH_DATA] = pb.tex2D().uniform(1).sampleType('unfilterable-float');\r\n scope[UNIFORM_NAME_MORPH_INFO] =\r\n pb.vec4[1 + MORPH_WEIGHTS_VECTOR_COUNT * 2 + MORPH_ATTRIBUTE_VECTOR_COUNT]().uniformBuffer(1);\r\n }\r\n }\r\n /** @internal */\r\n static prepareVertexShaderCommon(pb: ProgramBuilder, ctx: DrawContext) {\r\n this.vertexShaderDrawableStuff(\r\n pb.getGlobalScope(),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION),\r\n !!(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n );\r\n }\r\n /** @internal */\r\n static setCameraUniforms(bindGroup: BindGroup, ctx: DrawContext, camera: Camera, linear: boolean) {\r\n const pos = camera.getWorldPosition();\r\n const useJitter =\r\n ctx.motionVectors &&\r\n ctx.renderPass!.type !== RENDER_PASS_TYPE_SHADOWMAP &&\r\n ctx.renderPass!.type !== RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const cameraStruct = {\r\n position: new Vector4(pos.x, pos.y, pos.z, 0),\r\n renderSize: new Vector2(ctx.renderWidth, ctx.renderHeight),\r\n viewProjectionMatrix: useJitter ? camera.jitteredVPMatrix : camera.viewProjectionMatrix,\r\n unjitteredVPMatrix: camera.viewProjectionMatrix,\r\n jitteredInvVPMatrix: useJitter ? camera.jitteredInvVPMatrix : camera.invViewProjectionMatrix,\r\n jitterValue: camera.jitterValue,\r\n invViewProjectionMatrix: camera.invViewProjectionMatrix,\r\n projectionMatrix: camera.getProjectionMatrix(),\r\n invProjectionMatrix: camera.getInvProjectionMatrix(),\r\n viewMatrix: camera.viewMatrix,\r\n worldMatrix: camera.worldMatrix,\r\n params: new Vector4(camera.getNearPlane(), camera.getFarPlane(), ctx.flip ? -1 : 1, linear ? 0 : 1),\r\n roughnessFactor: camera.SSR ? camera.ssrRoughnessFactor : 1,\r\n shadowDebugCascades: camera.shadowDebugCascades ? 1 : 0,\r\n frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,\r\n elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,\r\n preExposure: this.getPreExposure(ctx),\r\n framestamp: ctx.device.frameInfo.frameCounter\r\n } as any;\r\n if (ctx.motionVectors && ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH) {\r\n cameraStruct.prevUnjitteredVPMatrix = camera.prevVPMatrix;\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (ctx.linearDepthTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_LINEAR_DEPTH_MAP, ctx.linearDepthTexture);\r\n bindGroup.setValue(\r\n UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE,\r\n new Vector2(ctx.linearDepthTexture.width, ctx.linearDepthTexture.height)\r\n );\r\n }\r\n if (ctx.sceneColorTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_SCENE_COLOR_MAP, ctx.sceneColorTexture);\r\n bindGroup.setValue(\r\n UNIFORM_NAME_SCENE_COLOR_MAP_SIZE,\r\n new Vector2(ctx.sceneColorTexture.width, ctx.sceneColorTexture.height)\r\n );\r\n }\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture(UNIFORM_NAME_HIZ_DEPTH_MAP, ctx.HiZTexture, fetchSampler('clamp_nearest'));\r\n bindGroup.setValue(\r\n UNIFORM_NAME_HIZ_DEPTH_MAP_INFO,\r\n new Vector4(ctx.HiZTexture.width, ctx.HiZTexture.height, ctx.HiZTexture.mipLevelCount, 0)\r\n );\r\n }\r\n }\r\n bindGroup.setValue('camera', cameraStruct);\r\n }\r\n /** @internal */\r\n static setLightUniformsShadowMap(bindGroup: BindGroup, ctx: DrawContext, light: PunctualLight) {\r\n if (light) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get(light)!;\r\n bindGroup.setValue('light', {\r\n positionAndRange: light.positionAndRange,\r\n directionCutoff: light.directionAndCutoff,\r\n viewMatrix: light.viewMatrix,\r\n depthBias: shadowMapParams.depthBiasValues[0],\r\n implParams: shadowMapParams.impl!.getParams(this._lightUniformShadow.implParams),\r\n lightType: light.lightType\r\n });\r\n shadowMapParams.impl?.applyCasterUniforms(bindGroup, shadowMapParams);\r\n }\r\n }\r\n /** @internal */\r\n static setFogUniforms(\r\n bindGroup: BindGroup,\r\n withAerialPerspective: number,\r\n fogType: number,\r\n additive: number,\r\n atmosphereParams: AtmosphereParams,\r\n heightFogParams: HeightFogParams,\r\n aerialPerspectiveLUT: Texture2D,\r\n skyDistantLightLUT: Texture2D\r\n ) {\r\n this._fogUniforms.withAerialPerspective = withAerialPerspective;\r\n this._fogUniforms.fogType = fogType;\r\n this._fogUniforms.additive = additive;\r\n this._fogUniforms.atmosphereParams = atmosphereParams;\r\n this._fogUniforms.heightFogParams = heightFogParams;\r\n bindGroup.setValue('fog', this._fogUniforms);\r\n bindGroup.setTexture(UNIFORM_NAME_AERIALPERSPECTIVE_LUT, aerialPerspectiveLUT);\r\n bindGroup.setTexture(UNIFORM_NAME_SKYDISTANTLIGHT_LUT, skyDistantLightLUT);\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Camera pre-exposure factor for scene-linear lighting quantities.\r\n *\r\n * @remarks\r\n * Physical lighting authors light intensities in photometric units (lux, candela, cd/m²), whose\r\n * magnitudes (~1e5 for daylight) neither fit an rgba16f render target nor leave usable headroom\r\n * for specular highlights. Following Filament, the camera exposure is folded into every light\r\n * quantity on the CPU so the HDR target stays near 1.0 and downstream passes need no unit\r\n * awareness. Legacy returns 1 so its uploads stay byte-identical.\r\n */\r\n static getPreExposure(ctx: DrawContext) {\r\n return ctx.scene.lightingMode === 'physical' ? ctx.camera.exposure : 1;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Light color/intensity vector with the camera pre-exposure folded into the intensity component.\r\n *\r\n * @remarks\r\n * Only the intensity (`w`) is scaled; the color stays untouched, matching Filament's\r\n * `FScene::prepareDynamicLights`. The light's own cached vector is never mutated because it is\r\n * shared across every camera rendering the scene.\r\n */\r\n static getPreExposedColorIntensity(light: PunctualLight, ctx: DrawContext, out?: Vector4) {\r\n const src = light.diffuseAndIntensity;\r\n const result = out ?? new Vector4();\r\n result.setXYZW(src.x, src.y, src.z, src.w * this.getPreExposure(ctx));\r\n return result;\r\n }\r\n /**\r\n * @internal\r\n *\r\n * Environment lighting scale uploaded as `light.envLightStrength`.\r\n *\r\n * @remarks\r\n * Legacy uses the unitless {@link EnvLightWrapper.strength}.\r\n *\r\n * Physical returns the ratio that converts the cached sky bake from its fixed storage exposure\r\n * (`SkyRenderer.PHYSICAL_BAKE_EXPOSURE`) to the live camera exposure. Every environment source is\r\n * normalized into that one space before it reaches the IBL -- the scattering atmosphere emits\r\n * photometric luminance, authored 0..1 skyboxes/panoramas are lifted by\r\n * {@link EnvLightWrapper.intensity} -- so no pass consuming `envLightStrength` has to know the\r\n * sky type.\r\n *\r\n * The bake cannot simply hold raw cd/m²: the environment cubemap is `rg11b10uf`/`rgba16f` and a\r\n * daylight sun overflows it to Inf, which `prefilterCubemap` then spreads across the whole IBL.\r\n *\r\n * {@link EnvLightWrapper.strength} multiplies the result in both modes. It is the only per-frame\r\n * dimmer for environment lighting: the photometric `intensity` reaches the image solely through\r\n * the cached bake, and a `scatter` sky does not even consult it (its brightness comes from the\r\n * sun), so without this factor there would be no way to turn the IBL down without re-baking.\r\n */\r\n static getEnvLightLuminance(ctx: DrawContext) {\r\n const env = ctx.env;\r\n if (!env) {\r\n return 0;\r\n }\r\n const strength = env.light.strength ?? 0;\r\n return ctx.scene.lightingMode === 'physical'\r\n ? (this.getPreExposure(ctx) / PHYSICAL_BAKE_EXPOSURE) * strength\r\n : strength;\r\n }\r\n /** @internal */\r\n static setLightUniforms(\r\n bindGroup: BindGroup,\r\n ctx: DrawContext,\r\n clusterParams: Float32Array<ArrayBuffer>,\r\n countParams: Int32Array<ArrayBuffer>,\r\n lightBuffer: StructuredBuffer,\r\n lightIndexTexture: Texture2D\r\n ) {\r\n const envLightStrength = this.getEnvLightLuminance(ctx);\r\n bindGroup.setValue('light', {\r\n sunDir: ctx.sunLight ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1) : this.defaultSunDir,\r\n clusterParams: clusterParams,\r\n countParams: countParams,\r\n envLightStrength,\r\n envLightSpecularStrength: ctx.env!.light.specularStrength ?? 1,\r\n lightIndexTexSize: new Int32Array([lightIndexTexture.width, lightIndexTexture.height]),\r\n ...(ctx.screenSpaceShadowMask ? { numShadowLights: ctx.clusteredLight?.numShadowLights ?? 0 } : {})\r\n });\r\n bindGroup.setBuffer(UNIFORM_NAME_LIGHT_BUFFER, lightBuffer);\r\n bindGroup.setTexture(UNIFORM_NAME_LIGHT_INDEX_TEXTURE, lightIndexTexture);\r\n if (ctx.screenSpaceShadowMask) {\r\n // The mask array is declared for the clustered light pass whenever the flag is\r\n // on (keyed into the global bind group hash). When there are no shadow lights\r\n // this frame the mask is never sampled, but a valid array texture must still\r\n // be bound: fall back to a 1x1 dummy.\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_SHADOW_MASK,\r\n ctx.shadowMaskTexture ?? this.getDummyShadowMask(ctx.device),\r\n fetchSampler('clamp_nearest')\r\n );\r\n }\r\n bindGroup.setTexture(UNIFORM_NAME_BAKED_SKY_MAP, ctx.scene.env.sky.getBakedSkyTexture(ctx));\r\n if (this.usesWaterCaustics(ctx)) {\r\n this.setWaterCausticUniforms(bindGroup, ctx);\r\n }\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup, ctx);\r\n }\r\n }\r\n /**\r\n * Whether the pass being built modulates its light with the water caustic map.\r\n *\r\n * True for every light pass of a frame that produced a map; which light the\r\n * caustics actually attach to is decided per-fragment by\r\n * {@link ShaderHelper.calculateWaterCaustic}. Both the shader variant hash and\r\n * the global bind group hash fold this in, so a program that declares the\r\n * caustic uniforms is always paired with a bind group that supplies them.\r\n *\r\n * Deliberately a function of the draw context alone, with no material input.\r\n * The caustic uniforms sit in the global bind group, whose layout is built\r\n * once per {@link DrawContext.renderPassHash} and shared by every material in\r\n * the pass, so the declarations have to be uniform across the pass. A material\r\n * that must not receive caustics - water itself - opts out of the sampling\r\n * instead, through `receivesWaterCaustics()`; the uniforms stay declared and\r\n * simply go unread.\r\n *\r\n * @param ctx - Current draw context.\r\n * @returns True when the caustic uniforms take part in this pass.\r\n * @internal\r\n */\r\n static usesWaterCaustics(ctx: DrawContext): boolean {\r\n return !!ctx.waterCaustics && !!ctx.waterCausticLight && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT;\r\n }\r\n /**\r\n * Declares the global uniforms {@link ShaderHelper.calculateWaterCaustic} reads.\r\n *\r\n * Split out of the global uniform setup so a test can build a program that\r\n * exercises the sampling code without standing up a whole light pass.\r\n *\r\n * @param pb - Program builder whose global scope receives the uniforms.\r\n * @internal\r\n */\r\n /**\r\n * Warps a linear caustic-map coordinate so texels concentrate near the centre.\r\n *\r\n * The map covers a fixed footprint, so its world texel size is the range\r\n * divided by the resolution and a range large enough to light the scene is\r\n * already too coarse to resolve a caustic cell. This trades the edge of the\r\n * map, which is far from the camera, for the middle, which is not:\r\n *\r\n * ```\r\n * warp(u) = u (1 + k) / (1 + k |u|)\r\n * unwarp(w) = w / ((1 + k) - k |w|)\r\n * ```\r\n *\r\n * Texel density is `1 + k` times uniform at the centre and `1 / (1 + k)` times\r\n * it at the border, and `k = 0` is exactly the identity, so the pass can apply\r\n * this unconditionally. Both ends of `[-1, 1]` are fixed points, which is what\r\n * lets the warp sit inside the existing parameterisation without moving the\r\n * footprint the receiver gates on. The first derivative is continuous at the\r\n * centre; the second flips sign there, which is not visible in a pattern this\r\n * noisy.\r\n *\r\n * Applied per axis rather than radially: the photon grid, the map and the blur\r\n * are all axis-aligned, so a separable warp keeps photon `(i,j)` on texel\r\n * `(i,j)` for calm water and leaves the map's normalisation to 1.0 intact.\r\n *\r\n * @param scope - Current shader scope.\r\n * @param ndc - Linear map coordinate in `[-1, 1]`.\r\n * @param strength - Warp strength `k`; 0 is the identity.\r\n * @returns The warped coordinate, also in `[-1, 1]`.\r\n * @internal\r\n */\r\n static warpCausticNDC(scope: PBInsideFunctionScope, ndc: PBShaderExp, strength: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_warpCausticNDC';\r\n pb.func(funcName, [pb.vec2('ndc'), pb.float('k')], function () {\r\n this.$return(\r\n pb.div(pb.mul(this.ndc, pb.add(this.k, 1)), pb.add(pb.vec2(1), pb.mul(pb.abs(this.ndc), this.k)))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](ndc, strength) as PBShaderExp;\r\n }\r\n /**\r\n * Inverse of {@link ShaderHelper.warpCausticNDC}.\r\n *\r\n * The denominator is `1` at the border and `1 + k` at the centre, so it stays\r\n * positive for any input the passes feed it - all of which come from `[-1, 1]`.\r\n *\r\n * @param scope - Current shader scope.\r\n * @param warped - Warped map coordinate in `[-1, 1]`.\r\n * @param strength - Warp strength `k`; 0 is the identity.\r\n * @returns The linear coordinate the warp came from.\r\n * @internal\r\n */\r\n static unwarpCausticNDC(\r\n scope: PBInsideFunctionScope,\r\n warped: PBShaderExp,\r\n strength: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_unwarpCausticNDC';\r\n pb.func(funcName, [pb.vec2('warped'), pb.float('k')], function () {\r\n this.$return(\r\n pb.div(this.warped, pb.sub(pb.vec2(pb.add(this.k, 1)), pb.mul(pb.abs(this.warped), this.k)))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](warped, strength) as PBShaderExp;\r\n }\r\n /** @internal */\r\n static declareWaterCausticUniforms(pb: ProgramBuilder) {\r\n const scope = pb.getGlobalScope();\r\n const causticStruct = pb.defineStruct([\r\n pb.vec4('frameX'),\r\n pb.vec4('frameY'),\r\n pb.vec4('center'),\r\n pb.vec4('lightDir'),\r\n pb.vec4('params'),\r\n pb.vec4('extinction'),\r\n // Per water body, because the slice is shared but the water is not: each\r\n // has its own surface height, footprint and medium, and none of the three\r\n // means anything until a receiver has resolved which water is above it.\r\n pb.int('waterCount'),\r\n pb.vec4[MAX_CAUSTIC_WATERS]('waterRegions'),\r\n // (sigma_t.xyz, surface height)\r\n pb.vec4[MAX_CAUSTIC_WATERS]('waterMedia')\r\n ]);\r\n scope[UNIFORM_NAME_CAUSTIC_PARAMS] = causticStruct().uniform(0);\r\n // The map is single mip and read bilinearly; clamping keeps receivers\r\n // outside the covered area reading the border rather than wrapping.\r\n scope[UNIFORM_NAME_CAUSTIC_MAP] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n // Displaced surface height per water slot, on the same slice as the map.\r\n // Read with the map's uv, so it shares the map's sampling.\r\n scope[UNIFORM_NAME_CAUSTIC_HEIGHT_MAP] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n }\r\n /**\r\n * Attenuation the water caustics apply to one light at a world position.\r\n *\r\n * Returns the product of two effects: the caustic pattern focused by the waves,\r\n * and the Beer-Lambert transmittance of the water column the light travelled\r\n * through to reach the point. The result is 1 for any light that is not the\r\n * caustic light, above the surface, and outside the water region, so the caller\r\n * can multiply unconditionally.\r\n *\r\n * The caustic light is identified at runtime by comparing directions rather\r\n * than by which pass is running. Shadow-casting lights reach the opaque queue\r\n * through the clustered path when the screen-space shadow mask is on (the\r\n * default) and through a per-light additive pass when it is off; only a runtime\r\n * test covers both. Two directional lights pointing the same way would both\r\n * pick up the caustics, but they are physically the same light.\r\n *\r\n * @param scope - Current shader scope.\r\n * @param worldPos - World position of the shaded fragment.\r\n * @param lightType - The light's type constant.\r\n * @param lightDirection - Direction the light travels, i.e. `directionAndCutoff.xyz`.\r\n * @param ctx - Current draw context.\r\n * @returns A `vec3` multiplier, or null when this pass has no caustics.\r\n */\r\n static calculateWaterCaustic(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n lightType: PBShaderExp,\r\n lightDirection: PBShaderExp,\r\n ctx: DrawContext\r\n ): Nullable<PBShaderExp> {\r\n if (!this.usesWaterCaustics(ctx)) {\r\n return null;\r\n }\r\n return this.sampleWaterCaustic(scope, worldPos, lightType, lightDirection);\r\n }\r\n /**\r\n * {@link ShaderHelper.calculateWaterCaustic} without the pass gate.\r\n *\r\n * The gate asks whether the *light pass* has caustics, which is the right\r\n * question for a material and the wrong one for a standalone full-screen pass\r\n * that declared the same uniforms itself. Such a pass has already decided it\r\n * has a map; this is the sampling half on its own.\r\n *\r\n * @param scope - Current shader scope.\r\n * @param worldPos - World position of the shaded fragment.\r\n * @param lightType - The light's type constant.\r\n * @param lightDirection - Direction the light travels, i.e. `directionAndCutoff.xyz`.\r\n * @param defocus - Whether to fade the pattern's contrast by how far the point\r\n * is from the map's focal depth. True for a receiver surface, which is what\r\n * that fade describes. False for a point inside the water column: see the\r\n * comment on the term itself.\r\n * @returns A `vec3` multiplier.\r\n * @internal\r\n */\r\n static sampleWaterCaustic(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n lightType: PBShaderExp,\r\n lightDirection: PBShaderExp,\r\n defocus = true\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = defocus ? 'Z_calculateWaterCaustic' : 'Z_calculateWaterCausticVolume';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.int('lightType'), pb.vec3('lightDirection')], function () {\r\n this.$l.cu = this[UNIFORM_NAME_CAUSTIC_PARAMS];\r\n // Only the one light the map was built for casts caustics.\r\n this.$if(\r\n pb.or(\r\n pb.notEqual(this.lightType, LIGHT_TYPE_DIRECTIONAL),\r\n pb.lessThan(pb.dot(this.lightDirection, this.cu.lightDir.xyz), 0.999)\r\n ),\r\n function () {\r\n this.$return(pb.vec3(1));\r\n }\r\n );\r\n // Project into the map: frameX/frameY are orthonormal and perpendicular to\r\n // the light, so the same two dot products the splat pass used invert it.\r\n this.$l.rel = pb.sub(this.worldPos, this.cu.center.xyz);\r\n // Per-axis inverse extents: the slice is fitted to the water, so it is\r\n // only square in texels, not in meters.\r\n this.$l.mapNDC = pb.mul(\r\n pb.vec2(pb.dot(this.rel, this.cu.frameX.xyz), pb.dot(this.rel, this.cu.frameY.xyz)),\r\n pb.vec2(this.cu.frameX.w, this.cu.frameY.w)\r\n );\r\n // Texels are concentrated towards the middle of the map, so the lookup\r\n // goes through the same warp the splat laid the photons out under.\r\n this.$l.warpedNDC = ShaderHelper.warpCausticNDC(this, this.mapNDC, this.cu.extinction.w);\r\n this.$l.uv = pb.add(pb.mul(this.warpedNDC, 0.5), pb.vec2(0.5));\r\n // The displaced surface height of each water slot on this fragment's own\r\n // sun ray, biased by CAUSTIC_HEIGHT_BIAS. The height map rasterises the\r\n // displaced surface into the same light-space slice as the pattern, so\r\n // the texel under this uv holds the surface the ray through this fragment\r\n // passed through - no entry point has to be estimated. Beyond the map the\r\n // sampler would repeat its border, which is some other ray's wave; the\r\n // surface is taken as flat there.\r\n this.$l.insideMap = pb.all(pb.lessThanEqual(pb.abs(this.mapNDC), pb.vec2(1)));\r\n // How far this fragment is towards the map border, and how much the map is\r\n // therefore trusted. Hoisted above the water loop because the wave height\r\n // is faded by it too, not just the pattern.\r\n //\r\n // Measured on the linear coordinate, not the warped one. The warp fixes\r\n // both ends of [-1, 1], so the border is in the same world place either\r\n // way, but the band between them is not: warping it would make its world\r\n // width depend on the warp strength, and the CPU sized it in meters.\r\n //\r\n // Distance is measured under an L4 norm rather than per-axis. A per-axis\r\n // fade is a rectangle in light space, and the sun tilts that rectangle, so\r\n // its border lands on the sea bed as straight lines - which the eye picks\r\n // out of a caustic pattern however wide the gradient is. An L2 circle has\r\n // no straight part anywhere but discards the 21% of the map outside its\r\n // inscribed disc; L4 gives up 7% instead and still curves everywhere.\r\n this.$l.ndcSq = pb.mul(this.mapNDC, this.mapNDC);\r\n this.$l.edgeDist = pb.sqrt(pb.sqrt(pb.dot(this.ndcSq, this.ndcSq)));\r\n this.$l.edge = pb.sub(1, pb.smoothStep(this.cu.params.w, 1, this.edgeDist));\r\n this.$l.waveHeights = pb.textureSampleLevel(this[UNIFORM_NAME_CAUSTIC_HEIGHT_MAP], this.uv, 0);\r\n // Find the water above this point. Several can qualify - a pool inside a\r\n // lake, water on terraces - and the one that matters is the lowest of\r\n // them, because that is the last surface the sun crossed on its way here.\r\n this.$l.depth = pb.float(-1);\r\n this.$l.medium = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, MAX_CAUSTIC_WATERS, function () {\r\n this.$if(pb.greaterThanEqual(this.i, this.cu.waterCount), function () {\r\n this.$break();\r\n });\r\n this.$l.slotMedium = this.cu.waterMedia.at(this.i);\r\n // Where the sun ray that lights this point crossed that water's rest\r\n // plane, for the footprint test. The splat pass clips photons by that\r\n // same crossing, so the receiver must ask the same question: a point\r\n // under the footprint that the sun reaches from outside it saw no water\r\n // at all, and a point beyond the footprint that the sun reaches through\r\n // it did. Testing the point's own xz gets both wrong by the offset\r\n // depth / tan(elevation). Only the footprint is decided here; the depth\r\n // itself comes from the height map, which needs no crossing point.\r\n this.$l.slotFlat = pb.sub(this.slotMedium.w, this.worldPos.y);\r\n this.$l.slotPath = pb.mul(this.slotFlat, this.cu.lightDir.w);\r\n this.$l.slotEntry = pb.sub(this.worldPos.xz, pb.mul(this.cu.lightDir.xz, this.slotPath));\r\n this.$l.slotRegion = this.cu.waterRegions.at(this.i);\r\n this.$if(\r\n pb.and(\r\n pb.all(pb.greaterThanEqual(this.slotEntry, this.slotRegion.xy)),\r\n pb.all(pb.lessThanEqual(this.slotEntry, this.slotRegion.zw))\r\n ),\r\n function () {\r\n // Depth under the *displaced* surface on this ray, which is what\r\n // the splat refracted the photons through. Gating on the rest plane\r\n // instead cut the caustics off at a flat line across any receiver\r\n // that pokes above it under a crest. Slot i lives in channel i.\r\n this.$l.slotMask = pb.vec4(\r\n pb.float(pb.equal(this.i, 0)),\r\n pb.float(pb.equal(this.i, 1)),\r\n pb.float(pb.equal(this.i, 2)),\r\n pb.float(pb.equal(this.i, 3))\r\n );\r\n this.$l.slotSample = pb.dot(this.waveHeights, this.slotMask);\r\n // A cleared texel inside the map means this ray never meets that\r\n // body's surface - it crosses the rest plane beyond the footprint,\r\n // or the surface is on the far side of the receiver - and the\r\n // receiver is dry as far as this body is concerned. Outside the map\r\n // nothing is known and the surface is taken as flat.\r\n this.$l.slotCovered = pb.or(pb.not(this.insideMap), pb.greaterThan(this.slotSample, 0.5));\r\n this.$if(this.slotCovered, function () {\r\n // Faded into the rest plane over the same band the pattern fades\r\n // on, rather than switched off at the border. Beyond the map the\r\n // surface is taken as flat, and exp(-sigma * depth) is convex, so\r\n // a hard switch makes the wavy side systematically brighter than\r\n // the flat side - E[exp(-sigma*w)] > 1 - and the step lands as a\r\n // mean brightness seam that grows with both the swell and the\r\n // turbidity. Ramping the wave to zero puts the two sides on the\r\n // same value at the border.\r\n this.$l.slotWave = pb.mul(\r\n pb.sub(this.slotSample, CAUSTIC_HEIGHT_BIAS),\r\n pb.float(this.insideMap),\r\n this.edge\r\n );\r\n this.$l.slotDepth = pb.sub(pb.add(this.slotMedium.w, this.slotWave), this.worldPos.y);\r\n this.$if(pb.greaterThan(this.slotDepth, 0), function () {\r\n this.$if(\r\n pb.or(pb.lessThan(this.depth, 0), pb.lessThan(this.slotDepth, this.depth)),\r\n function () {\r\n this.depth = this.slotDepth;\r\n this.medium = this.slotMedium.xyz;\r\n }\r\n );\r\n });\r\n });\r\n }\r\n );\r\n });\r\n this.$if(pb.lessThanEqual(this.depth, 0), function () {\r\n this.$return(pb.vec3(1));\r\n });\r\n this.$l.pathLength = pb.mul(this.depth, this.cu.lightDir.w);\r\n this.$l.transmittance = pb.exp(pb.neg(pb.mul(this.medium, this.pathLength)));\r\n this.$l.pattern = pb.textureSampleLevel(this[UNIFORM_NAME_CAUSTIC_MAP], this.uv, 0).x;\r\n if (defocus) {\r\n // Receivers away from the focal plane see a defocused, lower-contrast\r\n // pattern rather than a displaced one.\r\n this.$l.defocus = pb.div(\r\n 1,\r\n pb.add(1, pb.mul(pb.abs(pb.sub(this.depth, this.cu.params.y)), this.cu.params.z))\r\n );\r\n } else {\r\n // A point inside the water column is not a receiver, and has no depth of\r\n // its own to be out of focus at - the volumetric march visits every\r\n // depth along the ray. Charging it the receiver's fade makes the light\r\n // shafts fade according to where the *sea bed* was told to be sharpest:\r\n // the open-ocean preset focuses the map at 26m for its bed, which at the\r\n // default defocus leaves a point 2m down at 26% contrast, and the shafts\r\n // dissolve into grain. The shafts instead take the pattern as the map\r\n // holds it and fade with the edge and the transmittance like everything\r\n // else in the column.\r\n this.$l.defocus = pb.float(1);\r\n }\r\n this.$l.weight = pb.mul(this.cu.params.x, this.defocus, this.edge);\r\n this.$l.caustic = pb.add(1, pb.mul(pb.sub(this.pattern, 1), this.weight));\r\n // Soften the waterline so the transmittance does not switch on abruptly.\r\n this.$l.submerged = pb.smoothStep(0, 0.05, this.depth);\r\n this.$return(pb.mix(pb.vec3(1), pb.mul(pb.vec3(this.caustic), this.transmittance), this.submerged));\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, lightType, lightDirection) as PBShaderExp;\r\n }\r\n /** @internal */\r\n static setWaterCausticUniforms(bindGroup: BindGroup, ctx: DrawContext) {\r\n const uniforms = ctx.waterCausticUniforms!;\r\n bindGroup.setValue(UNIFORM_NAME_CAUSTIC_PARAMS, {\r\n frameX: uniforms.frameX,\r\n frameY: uniforms.frameY,\r\n center: uniforms.center,\r\n lightDir: uniforms.lightDir,\r\n params: uniforms.params,\r\n extinction: uniforms.extinction,\r\n waterCount: uniforms.waterCount,\r\n waterRegions: uniforms.waterRegions,\r\n waterMedia: uniforms.waterMedia\r\n });\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_CAUSTIC_MAP,\r\n ctx.waterCausticTexture!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_CAUSTIC_HEIGHT_MAP,\r\n ctx.waterCausticHeightTexture!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n }\r\n /** @internal */\r\n static setLightUniformsShadow(bindGroup: BindGroup, ctx: DrawContext, light: PunctualLight) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get(light)!;\r\n this._lightUniformShadow.sunDir = ctx.sunLight\r\n ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1)\r\n : this.defaultSunDir;\r\n this._lightUniformShadow.shadowCascades = shadowMapParams.numShadowCascades;\r\n this._lightUniformShadow.positionAndRange.set(light.positionAndRange);\r\n this._lightUniformShadow.directionAndCutoff.set(light.directionAndCutoff);\r\n this.getPreExposedColorIntensity(light, ctx, this._lightUniformShadow.diffuseAndIntensity);\r\n this._lightUniformShadow.extraParams.set(light.extraParams);\r\n this._lightUniformShadow.cascadeDistances.set(shadowMapParams.cascadeDistances);\r\n this._lightUniformShadow.depthBiasValues.set(shadowMapParams.depthBiasValues[0]);\r\n this._lightUniformShadow.shadowCameraParams.set(shadowMapParams.cameraParams);\r\n this._lightUniformShadow.depthBiasScales.set(shadowMapParams.depthBiasScales);\r\n shadowMapParams.impl!.getParams(this._lightUniformShadow.implParams);\r\n this._lightUniformShadow.shadowMatrices.set(shadowMapParams.shadowMatrices);\r\n this._lightUniformShadow.shadowStrength = light.shadow.shadowStrength;\r\n this._lightUniformShadow.envLightStrength = this.getEnvLightLuminance(ctx);\r\n this._lightUniformShadow.envLightSpecularStrength = ctx.env?.light.specularStrength ?? 1;\r\n bindGroup.setValue('light', this._lightUniformShadow);\r\n bindGroup.setTexture(\r\n UNIFORM_NAME_SHADOW_MAP,\r\n shadowMapParams.shadowMap!,\r\n shadowMapParams.shadowMapSampler\r\n );\r\n if (this.usesWaterCaustics(ctx)) {\r\n this.setWaterCausticUniforms(bindGroup, ctx);\r\n }\r\n bindGroup.setTexture(UNIFORM_NAME_BAKED_SKY_MAP, ctx.scene.env.sky.getBakedSkyTexture(ctx));\r\n if (ctx.drawEnvLight) {\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup, ctx);\r\n }\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the strength of the environment light\r\n *\r\n * @remarks\r\n * This function can only be used in the fragment shader\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The uniform variable of which presents the strength of the environment light\r\n */\r\n static getEnvLightStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.envLightStrength;\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the specular strength of the environment light\r\n *\r\n * @remarks\r\n * This function can only be used in the fragment shader\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The uniform variable which presents the specular strength of the environment light\r\n */\r\n static getEnvLightSpecularStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.envLightSpecularStrength ?? scope.$builder.float(1);\r\n }\r\n /**\r\n * Gets current scene color texture\r\n * @param scope - Current shader scope\r\n * @returns current scene color texture\r\n */\r\n static getSceneColorTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SCENE_COLOR_MAP];\r\n }\r\n /**\r\n * Gets the size of current scene color texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current scene color texture\r\n */\r\n static getSceneColorTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SCENE_COLOR_MAP_SIZE];\r\n }\r\n /**\r\n * Gets current linear depth texture\r\n * @param scope - Current shader scope\r\n * @returns current linear depth texture\r\n */\r\n static getLinearDepthTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LINEAR_DEPTH_MAP];\r\n }\r\n /**\r\n * Gets the size of current linear depth texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current linear depth texture\r\n */\r\n static getLinearDepthTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE];\r\n }\r\n /**\r\n * Gets current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns current HiZ depth texture\r\n */\r\n static getHiZDepthTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP];\r\n }\r\n /**\r\n * Gets the size of current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns The size of current HiZ depth texture\r\n */\r\n static getHiZDepthTextureSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO].xy;\r\n }\r\n /**\r\n * Gets the mipmap levels count of current HiZ depth texture\r\n * @param scope - Current shader scope\r\n * @returns The mipmap levels count of current HiZ depth texture\r\n */\r\n static getHiZDepthTextureMipLevelCount(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_HIZ_DEPTH_MAP_INFO].z;\r\n }\r\n /**\r\n * Gets current baked skybox texture\r\n * @param scope - Current shader scope\r\n * @returns current baked skybox texture\r\n */\r\n static getBakedSkyTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_BAKED_SKY_MAP];\r\n }\r\n /**\r\n * Samples the baked sky cubemap in the same pre-exposed space as the scene color buffer.\r\n *\r\n * @remarks\r\n * The bake is cached and therefore exposure-independent, stored at the fixed\r\n * `PHYSICAL_BAKE_EXPOSURE`. Anything that blends it against already-pre-exposed lit color (water\r\n * reflection, blueprint sky lookups) must first convert it to the live exposure.\r\n * `envLightStrength` carries exactly that ratio in physical mode, and the legacy environment\r\n * strength (its established meaning) otherwise.\r\n *\r\n * @param scope - Current shader scope\r\n * @param direction - Sampling direction\r\n * @returns Pre-exposed sky radiance\r\n */\r\n static sampleBakedSkyPreExposed(scope: PBInsideFunctionScope, direction: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return pb.mul(\r\n pb.textureSampleLevel(this.getBakedSkyTexture(scope), direction, 0).rgb,\r\n this.getEnvLightStrength(scope)\r\n ) as PBShaderExp;\r\n }\r\n /**\r\n * Gets the camera pre-exposure factor.\r\n *\r\n * @remarks\r\n * The multiplier every photometric quantity is scaled by before it reaches the HDR target. 1 in\r\n * legacy. Use it for material-authored emitters (emissive), which are not covered by the CPU-side\r\n * light pre-exposure.\r\n *\r\n * @param scope - Current shader scope\r\n * @returns The pre-exposure factor\r\n */\r\n static getPreExposureUniform(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.preExposure;\r\n }\r\n /**\r\n * Gets the elapsed time in seconds\r\n * @param scope - Current shader scope\r\n * @returns The elapsed time in seconds\r\n */\r\n static getElapsedTime(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.elapsedTime;\r\n }\r\n /**\r\n * Declares the one camera field {@link ShaderHelper.getElapsedTime} reads.\r\n *\r\n * Wave generators animate off `camera.elapsedTime`, which the light and depth\r\n * passes provide as part of the full camera struct. A standalone program that\r\n * drives a wave generator - the caustics splat pass - has no such struct, so it\r\n * declares that single field under the same name. Any generator that starts\r\n * reading a second camera field will need it added here.\r\n *\r\n * The three padding floats round the struct up to 16 bytes. std140 aligns a\r\n * struct to a vec4 boundary, so a lone float leaves the GLSL block larger than\r\n * the buffer the engine sizes from the struct's own members - WebGL2 then\r\n * rejects every draw with \"uniform buffer that is too small\" and rasterises\r\n * nothing, while WebGPU is unaffected.\r\n *\r\n * @param scope - Global scope of the standalone program.\r\n * @param uniformGroup - Bind group the uniform belongs to.\r\n * @internal\r\n */\r\n static declareStandaloneCameraTime(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.camera = pb\r\n .defineStruct([pb.float('elapsedTime'), pb.float('_pad0'), pb.float('_pad1'), pb.float('_pad2')])()\r\n .uniform(uniformGroup);\r\n }\r\n /**\r\n * Uploads the value declared by {@link ShaderHelper.declareStandaloneCameraTime}.\r\n *\r\n * Must be the same clock the light pass uses, or a wave generator's caustics\r\n * would animate out of step with the surface they are refracted through.\r\n *\r\n * @param bindGroup - Bind group of the standalone program.\r\n * @param ctx - Current draw context.\r\n * @internal\r\n */\r\n static setStandaloneCameraTime(bindGroup: BindGroup, ctx: DrawContext) {\r\n bindGroup.setValue('camera', {\r\n elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,\r\n _pad0: 0,\r\n _pad1: 0,\r\n _pad2: 0\r\n });\r\n }\r\n /**\r\n * Gets the elapsed time since last frame in seconds\r\n * @param scope - Current shader scope\r\n * @returns The elapsed time since last frame in seconds\r\n */\r\n static getElapsedTimeFrame(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.frameDeltaTime;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec3 which holds the camera position\r\n * @param scope - Current shader scope\r\n * @returns The camera position\r\n */\r\n static getCameraPosition(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.position.xyz;\r\n }\r\n /**\r\n * Gets the uniform variable of type float which holds the roughness factor\r\n * @param scope - Current shader scope\r\n * @returns The roughness factor\r\n */\r\n static getCameraRoughnessFactor(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.roughnessFactor;\r\n }\r\n /**\r\n * Gets framebuffer size for rendering\r\n * @param scope - Current shader scope\r\n * @returns The roughness factor\r\n */\r\n static getRenderSize(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.renderSize;\r\n }\r\n /**\r\n * Gets the uniform variable of type uint which holds the framestamp\r\n * @param scope - Current shader scope\r\n * @returns The framestamp\r\n */\r\n static getFramestamp(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.framestamp;\r\n }\r\n /**\r\n * Gets the clip plane flag\r\n * @param scope - Current shader scope\r\n * @returns A float value of 1 indices the clip plane presents, otherwise 0\r\n */\r\n static getCameraClipPlaneFlag(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.position.w;\r\n }\r\n /**\r\n * Gets the clip plane\r\n * @param scope - Current shader scope\r\n * @returns A vec4 presents the clip plane\r\n */\r\n static getCameraClipPlane(scope: PBInsideFunctionScope) {\r\n return scope.camera.clipPlane;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec4 which holds the camera parameters\r\n * @param scope - Current shader scope\r\n * @returns The camera parameters\r\n */\r\n static getCameraParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.params;\r\n }\r\n /** @internal */\r\n static getClusterParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.clusterParams;\r\n }\r\n /** @internal */\r\n static getCountParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.countParams;\r\n }\r\n /**\r\n * Number of shadow-casting lights at the head of the clustered light buffer.\r\n * Only defined on the screen-space shadow mask path (ctx.screenSpaceShadowMask);\r\n * a clustered light whose buffer index is `<= N` samples the shadow mask.\r\n * @internal\r\n */\r\n static getNumShadowLights(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.numShadowLights;\r\n }\r\n /**\r\n * Cluster shadow-mask mode for the current queue: 1 = sample the opaque shadow\r\n * mask for shadow lights; 0 = skip shadow lights (they are lit inline by the\r\n * additive passes, used for the transparent queue). Only defined on the\r\n * screen-space shadow mask path.\r\n * @internal\r\n */\r\n static getShadowMaskMode(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SHADOW_MASK_MODE];\r\n }\r\n /**\r\n * Bind the per-queue cluster shadow-mask mode. Call in the clustered light pass\r\n * only when the screen-space shadow mask path is active.\r\n * @internal\r\n */\r\n static setShadowMaskMode(bindGroup: BindGroup, sampleMask: boolean) {\r\n bindGroup.setValue(UNIFORM_NAME_SHADOW_MASK_MODE, sampleMask ? 1 : 0);\r\n }\r\n /**\r\n * Lazily-created 1x1x1 rgba8unorm array texture used as the shadow-mask binding\r\n * fallback when the screen-space shadow mask path is enabled but no mask was\r\n * produced this frame (no shadow-casting lights). It is never sampled in that\r\n * case, but the declared uniform still requires a valid binding.\r\n * @internal\r\n */\r\n static getDummyShadowMask(device: AbstractDevice): Texture2DArray {\r\n let tex = this._dummyShadowMask;\r\n if (!tex || tex.disposed) {\r\n tex = device.createTexture2DArray('rgba8unorm', 1, 1, 1, {\r\n mipmapping: false\r\n })!;\r\n tex.name = 'DummyShadowMask';\r\n this._dummyShadowMask = tex;\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n static getClusteredLightIndexTexture(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_INDEX_TEXTURE];\r\n }\r\n /**\r\n * Clustered shadow factor for a light, in `[0,1]` (1 = fully lit).\r\n *\r\n * - Lights whose clustered buffer index is greater than `numShadowLights` are not\r\n * shadow-casters and return 1.0.\r\n * - Shadow-casting lights on the opaque queue (shadow mask mode 1) return the\r\n * screen-space mask value. Layer/channel are derived from the zero-based light\r\n * ordinal `s = index-1`: `layer = s >> 2`, `channel = s & 3`, matching the\r\n * ShadowMaskPass packing.\r\n * - Shadow-casting lights on a transparent queue (mode 0) return 0: their clustered\r\n * contribution is suppressed because they are lit inline by the additive passes,\r\n * where shadows are sampled at the true (transparent) surface depth rather than\r\n * from the opaque-depth mask.\r\n *\r\n * Only valid on the screen-space shadow mask path (ctx.screenSpaceShadowMask).\r\n * @internal\r\n */\r\n static sampleShadowMask(scope: PBInsideFunctionScope, lightIndex: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_sampleShadowMask';\r\n pb.func(funcName, [pb.int('lightIndex')], function () {\r\n this.$if(pb.greaterThan(this.lightIndex, that.getNumShadowLights(this)), function () {\r\n this.$return(pb.float(1));\r\n });\r\n // Shadow light on a transparent queue: suppressed here, lit inline by additive.\r\n this.$if(pb.equal(that.getShadowMaskMode(this), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n this.$l.ordinal = pb.sub(this.lightIndex, 1);\r\n this.$l.layer = pb.div(this.ordinal, 4);\r\n this.$l.channel = pb.sub(this.ordinal, pb.mul(this.layer, 4));\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));\r\n this.$l.texel = pb.textureArraySampleLevel(this[UNIFORM_NAME_SHADOW_MASK], this.uv, this.layer, 0);\r\n // Select the light's channel via a dot with a one-hot mask (dynamic vector\r\n // component indexing is not portable across GLSL ES / WGSL).\r\n this.$l.selector = pb.vec4(\r\n pb.float(pb.equal(this.channel, 0)),\r\n pb.float(pb.equal(this.channel, 1)),\r\n pb.float(pb.equal(this.channel, 2)),\r\n pb.float(pb.equal(this.channel, 3))\r\n );\r\n this.$return(pb.dot(this.texel, this.selector));\r\n });\r\n return pb.getGlobalScope()[funcName](lightIndex);\r\n }\r\n /**\r\n * Gets the uniform variable that contains atmosphere parameters\r\n * @param scope - Current shader scope\r\n * @returns The atmosphere parameters\r\n */\r\n static getAtmosphereParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.fog.atmosphereParams;\r\n }\r\n /**\r\n * Gets the aerial perspective LUT\r\n * @param scope - Current shader scope\r\n * @returns The aerial perspective LUT texture\r\n */\r\n static getAerialPerspectiveLUT(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_AERIALPERSPECTIVE_LUT];\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The view projection matrix of current camera\r\n */\r\n static getViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.viewProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inversed view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The inversed view projection matrix of current camera\r\n */\r\n static getInvViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.invViewProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The projection matrix of current camera\r\n */\r\n static getProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.projectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inversed projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The inversed projection matrix of current camera\r\n */\r\n static getInvProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.invProjectionMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the unjittered view projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The unjittered view projection matrix of current camera\r\n */\r\n static getUnjitteredViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.unjitteredVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type vec2 which holds the jitter value of the projection matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The jitter value of projection matrix of current camera\r\n */\r\n static getProjectionMatrixJitterValue(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.jitterValue;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the jittered inversed view-projection matrix\r\n * @param scope - Current shader scope\r\n * @returns The jittered inversed view-projection matrix\r\n */\r\n static getJitteredInvVPMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.jitteredInvVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the unjittered view projection at previous frame matrix of current camera\r\n * @param scope - Current shader scope\r\n * @returns The unjittered view projection matrix at previous frame of current camera\r\n */\r\n static getPrevUnjitteredViewProjectionMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.prevUnjitteredVPMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the view matrix of current camera (world space to camera space)\r\n * @param scope - Current shader scope\r\n * @returns The view matrix of current camera\r\n */\r\n static getViewMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.viewMatrix;\r\n }\r\n /**\r\n * Gets the uniform variable of type mat4 which holds the inv-view matrix of current camera (camera space to world space)\r\n * @param scope - Current shader scope\r\n * @returns The inv-view matrix of current camera\r\n */\r\n static getInvViewMatrix(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.camera.worldMatrix;\r\n }\r\n /** @internal */\r\n static getCascadeDistances(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.cascadeDistances;\r\n }\r\n /** @internal */\r\n static getShadowImplParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.implParams;\r\n }\r\n /** @internal */\r\n static getDepthBiasValues(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.depthBiasValues;\r\n }\r\n /** @internal */\r\n static getShadowCameraParams(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.shadowCameraParams;\r\n }\r\n /** @internal */\r\n static getDepthBiasScales(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.depthBiasScales;\r\n }\r\n /** @internal */\r\n static getNumLights(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.numLights;\r\n }\r\n /** @internal */\r\n static getSunLightDir(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.sunDir;\r\n }\r\n /** @internal */\r\n static getLightTypeForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.lightType;\r\n }\r\n /** @internal */\r\n static getLightPositionAndRangeForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.positionAndRange;\r\n }\r\n /** @internal */\r\n static getLightViewMatrixForShadow(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.light.viewMatrix;\r\n }\r\n /** @internal */\r\n static calculateShadowSpaceVertex(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n cascade: PBShaderExp | number = 0\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (typeof cascade === 'number') {\r\n return pb.vec4(\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 0), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 1), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 2), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(cascade * 4 + 3), worldPos)\r\n );\r\n } else {\r\n return pb.vec4(\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 0)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 1)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 2)), worldPos),\r\n pb.dot(scope.light.shadowMatrices.at(pb.add(pb.mul(cascade, 4), 3)), worldPos)\r\n );\r\n }\r\n }\r\n /** @internal */\r\n static getLightPositionAndRange(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.mul(lightIndex, 4));\r\n }\r\n /** @internal */\r\n static getLightDirectionAndCutoff(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 1));\r\n }\r\n /** @internal */\r\n static getLightColorAndIntensity(\r\n scope: PBInsideFunctionScope,\r\n lightIndex: PBShaderExp | number\r\n ): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 2));\r\n }\r\n /** @internal */\r\n static getLightExtra(scope: PBInsideFunctionScope, lightIndex: PBShaderExp | number): PBShaderExp {\r\n return scope[UNIFORM_NAME_LIGHT_BUFFER].at(scope.$builder.add(scope.$builder.mul(lightIndex, 4), 3));\r\n }\r\n /**\r\n * Sets the clip space position in vertex shader\r\n *\r\n * @remarks\r\n * Use this function instead of using\r\n * <pre>\r\n * // Do not use this\r\n * this.$builtins.position = some_value;\r\n * // Use this\r\n * ShaderFramework.setClipSpacePosition(some_value);\r\n * </pre>,\r\n *\r\n * @param scope - Current shader scope\r\n * @param pos - The clip space position to be set\r\n */\r\n static setClipSpacePosition(scope: PBInsideFunctionScope, pos: PBShaderExp): void {\r\n const pb = scope.$builder;\r\n const cameraParams = this.getCameraParams(scope);\r\n if (cameraParams) {\r\n scope.$builtins.position = pb.mul(pos, pb.vec4(1, cameraParams.z, 1, 1));\r\n } else {\r\n scope.$builtins.position = pos;\r\n }\r\n }\r\n /**\r\n * Get shadow map uniform value\r\n *\r\n * @param scope - Shader scope\r\n * @returns The shadow map texture uniform\r\n */\r\n static getShadowMap(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope[UNIFORM_NAME_SHADOW_MAP];\r\n }\r\n /**\r\n * Per-cascade scale for both bias terms.\r\n *\r\n * @remarks\r\n * Only `depthBiasValues[0]` is uploaded; every cascade's value is recovered by\r\n * multiplying with this ratio. It is derived from the `.x` components, but\r\n * since `.x` and the normal offset `.y` are both proportional to the cascade's\r\n * texel world size, the same ratio applies to either.\r\n * @internal\r\n */\r\n static getShadowCascadeBiasScale(scope: PBInsideFunctionScope, split: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const splitFlags = pb.vec4(\r\n pb.float(pb.equal(split, 0)),\r\n pb.float(pb.equal(split, 1)),\r\n pb.float(pb.equal(split, 2)),\r\n pb.float(pb.equal(split, 3))\r\n );\r\n return pb.dot(this.getDepthBiasScales(scope), splitFlags) as PBShaderExp;\r\n }\r\n /**\r\n * Moves the receiver along its normal before the shadow lookup.\r\n *\r\n * @remarks\r\n * Grazing-angle self-shadowing cannot be fixed with a depth bias: the depth\r\n * spanned by one shadow texel is `texelWorldSize * tan(theta)`, which diverges\r\n * as NdotL approaches zero. Offsetting the sample position sideways moves it\r\n * out of the offending texel instead, and the required distance is bounded.\r\n *\r\n * `depthBiasValues.y` carries the world-space distance of one `normalBias`\r\n * unit (see `ShadowMapper.calcDepthBiasParams`).\r\n * @internal\r\n */\r\n static applyShadowNormalOffset(\r\n lightType: number,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n cascadeScale?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const depthBiasParam = this.getDepthBiasValues(scope);\r\n const receiverNoL = getShadowReceiverNoL(scope, NdotL, lightType);\r\n // sin(theta): 0 when facing the light, 1 at grazing incidence.\r\n const sinTheta = pb.sqrt(pb.clamp(pb.sub(1, pb.mul(receiverNoL, receiverNoL)), 0, 1));\r\n let offset = pb.mul(depthBiasParam.y, getShadowReceiverBiasFactor(scope), sinTheta) as PBShaderExp;\r\n if (cascadeScale) {\r\n offset = pb.mul(offset, cascadeScale) as PBShaderExp;\r\n }\r\n if (lightType !== LIGHT_TYPE_DIRECTIONAL) {\r\n // Perspective shadow cameras: one texel covers more world space further\r\n // from the light. depthBiasValues.w is the far/near footprint ratio.\r\n const posRange = this.getLightPositionAndRangeForShadow(scope);\r\n const linearDepth = pb.clamp(\r\n pb.div(pb.distance(worldPos, posRange.xyz), pb.max(posRange.w, 1e-6)),\r\n 0,\r\n 1\r\n );\r\n offset = pb.mul(offset, pb.mix(1, depthBiasParam.w, linearDepth)) as PBShaderExp;\r\n }\r\n // Guard against a degenerate interpolated normal rather than normalize()ing\r\n // a possibly-zero vector into NaN.\r\n const unitNormal = pb.mul(worldNormal, pb.div(1, pb.max(pb.length(worldNormal), 1e-6)));\r\n return pb.add(worldPos, pb.mul(unitNormal, offset)) as PBShaderExp;\r\n }\r\n /**\r\n * Calculates shadow of current fragment\r\n *\r\n * @param scope - Shader scope\r\n * @param NoL - NdotL vector\r\n * @returns Shadow of current fragment, 1 means no shadow and 0 means full shadowed.\r\n */\r\n static calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NoL: PBShaderExp,\r\n ctx: DrawContext\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const shadowMapParams = ctx.shadowMapInfo!.get(ctx.currentShadowLight!)!;\r\n const funcName = 'Z_calculateShadow';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec3('worldNormal'), pb.float('NoL')], function () {\r\n if (shadowMapParams.numShadowCascades > 1) {\r\n this.$l.shadowCascades = this.light.shadowCascades;\r\n this.$l.shadowBound = pb.vec4(0, 0, 1, 1);\r\n this.$l.linearDepth = that.nonLinearDepthToLinear(this, this.$builtins.fragCoord.z);\r\n this.$l.splitDistances = that.getCascadeDistances(this);\r\n this.$l.comparison = pb.vec4(pb.greaterThan(pb.vec4(this.linearDepth), this.splitDistances));\r\n this.$l.cascadeFlags = pb.vec4(\r\n pb.float(pb.greaterThan(this.shadowCascades, 0)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 1)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 2)),\r\n pb.float(pb.greaterThan(this.shadowCascades, 3))\r\n );\r\n this.$l.split = pb.int(pb.dot(this.comparison, this.cascadeFlags));\r\n // Normal offset bias: move the receiver out of the shadow texel that\r\n // would self-occlude it before projecting into shadow space. Scaled per\r\n // cascade, because each cascade has its own texel world size.\r\n this.$l.biasedPos = that.applyShadowNormalOffset(\r\n shadowMapParams.lightType,\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.NoL,\r\n that.getShadowCascadeBiasScale(this, this.split)\r\n );\r\n if (ctx.device.type === 'webgl') {\r\n this.$l.shadowVertex = pb.vec4();\r\n this.$for(pb.int('cascade'), 0, 4, function () {\r\n this.$if(pb.equal(this.cascade, this.split), function () {\r\n this.shadowVertex = that.calculateShadowSpaceVertex(\r\n this,\r\n pb.vec4(this.biasedPos, 1),\r\n this.cascade\r\n );\r\n this.$break();\r\n });\r\n });\r\n } else {\r\n this.$l.shadowVertex = that.calculateShadowSpaceVertex(\r\n this,\r\n pb.vec4(this.biasedPos, 1),\r\n this.split\r\n );\r\n }\r\n this.$l.shadow = shadowMapParams.impl!.computeShadowCSM(\r\n shadowMapParams,\r\n this,\r\n this.shadowVertex,\r\n this.NoL,\r\n this.split\r\n );\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$l.shadowDistance = that.getShadowCameraParams(scope).w;\r\n this.shadow = pb.mix(\r\n this.shadow,\r\n 1,\r\n pb.smoothStep(\r\n pb.mul(this.shadowDistance, 0.8),\r\n this.shadowDistance,\r\n pb.distance(that.getCameraPosition(this), this.worldPos)\r\n )\r\n );\r\n this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$if(pb.greaterThan(this.camera.shadowDebugCascades, 0.5), function () {\r\n this.shadow = pb.add(pb.mul(pb.float(this.split), 0.2), 0.2);\r\n });\r\n this.$return(this.shadow);\r\n } else {\r\n // Normal offset bias - see the cascaded branch above.\r\n this.$l.biasedPos = that.applyShadowNormalOffset(\r\n shadowMapParams.lightType,\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.NoL\r\n );\r\n this.$l.shadowVertex = that.calculateShadowSpaceVertex(this, pb.vec4(this.biasedPos, 1));\r\n this.$l.shadow = shadowMapParams.impl!.computeShadow(\r\n shadowMapParams,\r\n this,\r\n this.shadowVertex,\r\n this.NoL\r\n );\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$l.shadowDistance = that.getShadowCameraParams(scope).w;\r\n this.shadow = pb.mix(\r\n this.shadow,\r\n 1,\r\n pb.smoothStep(\r\n pb.mul(this.shadowDistance, 0.8),\r\n this.shadowDistance,\r\n pb.distance(that.getCameraPosition(this), this.worldPos)\r\n )\r\n );\r\n this.shadow = pb.mix(1, this.shadow, this.light.shadowStrength);\r\n this.shadow = pb.clamp(this.shadow, 0, 1);\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, worldNormal, NoL);\r\n }\r\n static applyFog(scope: PBInsideFunctionScope, worldPos: PBShaderExp, color: PBShaderExp, ctx: DrawContext) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG) {\r\n const funcName = 'Z_applyFog';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec4('color').inout()], function () {\r\n this.$if(pb.notEqual(this.fog.additive, 0), function () {\r\n this.$return();\r\n });\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), that.getRenderSize(this));\r\n this.$l.fogging = calculateFog(\r\n this,\r\n this.fog.withAerialPerspective,\r\n this.fog.fogType,\r\n this.fog.atmosphereParams,\r\n this.fog.heightFogParams,\r\n this.uv,\r\n false,\r\n that.getCameraPosition(this).xyz,\r\n this.worldPos,\r\n this.fog.additive,\r\n this[UNIFORM_NAME_AERIALPERSPECTIVE_LUT],\r\n this[UNIFORM_NAME_SKYDISTANTLIGHT_LUT]\r\n );\r\n this.$l.foggingAlpha = pb.sub(1, pb.mul(pb.sub(1, this.fogging.a), this.color.a));\r\n this.$l.foggingRGB = pb.mul(this.fogging.rgb, this.color.a);\r\n this.color = pb.vec4(\r\n pb.add(pb.mul(this.color.rgb, this.foggingAlpha), this.foggingRGB),\r\n this.color.a\r\n );\r\n //this.color = pb.vec4(pb.vec3(pb.mix(this.u0, this.u1, this.factor)), this.color.a);\r\n });\r\n scope[funcName](worldPos, color);\r\n }\r\n }\r\n /**\r\n * Calculates the non-linear depth from linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated non-linear depth\r\n */\r\n static linearDepthToNonLinear(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(\r\n pb.sub(pb.div(pb.mul(nearFar.x, nearFar.y), depth), nearFar.x),\r\n pb.sub(nearFar.y, nearFar.x)\r\n );\r\n }\r\n return pb.div(\r\n pb.sub(nearFar.y, pb.div(pb.mul(nearFar.x, nearFar.y), depth)),\r\n pb.sub(nearFar.y, nearFar.x)\r\n );\r\n }\r\n /**\r\n * Calculates the linear depth from non-linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The non-linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated linear depth\r\n */\r\n static nonLinearDepthToLinear(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.x, nearFar.y, depth));\r\n }\r\n return pb.div(pb.mul(nearFar.x, nearFar.y), pb.mix(nearFar.y, nearFar.x, depth));\r\n }\r\n /**\r\n * Calculates the normalized linear depth from non-linear depth\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The non-linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The calculated normalized linear depth\r\n */\r\n static nonLinearDepthToLinearNormalized(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(nearFar.x, pb.mix(nearFar.x, nearFar.y, depth));\r\n }\r\n return pb.div(nearFar.x, pb.mix(nearFar.y, nearFar.x, depth));\r\n }\r\n /**\r\n * Converts normalized linear depth back to device non-linear depth.\r\n *\r\n * @remarks\r\n * The normalized linear depth convention (range [near/far, 1] with 1 at\r\n * the far plane, as produced by {@link ShaderHelper.nonLinearDepthToLinearNormalized})\r\n * is independent of the engine depth convention; only the mapping to\r\n * device depth flips under reverse-Z.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The normalized linear depth\r\n * @param nearFar - A vector that contains the near clip plane in x component and the far clip plane in y component\r\n * @returns The device non-linear depth\r\n */\r\n static linearNormalizedToNonLinearDepth(\r\n scope: PBInsideFunctionScope,\r\n depth: PBShaderExp,\r\n nearFar?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n nearFar = nearFar ?? this.getCameraParams(scope);\r\n if (REVERSE_Z) {\r\n return pb.div(pb.sub(pb.div(nearFar.x, depth), nearFar.x), pb.sub(nearFar.y, nearFar.x));\r\n }\r\n return pb.div(pb.sub(pb.div(nearFar.x, depth), nearFar.y), pb.sub(nearFar.x, nearFar.y));\r\n }\r\n /**\r\n * Maps a device depth value to the canonical clip-space z coordinate\r\n * (GL [-1,1] under standard-Z, zero-to-one under reverse-Z), suitable for\r\n * unprojection with the engine's inverse projection matrices.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The device depth value\r\n * @returns The canonical clip-space z\r\n */\r\n static deviceDepthToClipZ(scope: PBInsideFunctionScope, depth: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? depth : pb.sub(pb.mul(depth, 2), 1);\r\n }\r\n /**\r\n * Clip-space z that places a vertex exactly on the far plane (sky domes,\r\n * background geometry).\r\n *\r\n * @param scope - Current shader scope\r\n * @param w - The clip-space w coordinate of the vertex\r\n * @returns The clip-space z value for the far plane\r\n */\r\n static farthestClipZ(scope: PBInsideFunctionScope, w: PBShaderExp): PBShaderExp | number {\r\n return REVERSE_Z ? 0 : w;\r\n }\r\n /**\r\n * Tests whether a device depth value equals the cleared (farthest) depth,\r\n * i.e. no geometry was rendered at this position.\r\n *\r\n * @param scope - Current shader scope\r\n * @param depth - The device depth value\r\n * @returns Boolean expression, true for background pixels\r\n */\r\n static isFarthestDepth(scope: PBInsideFunctionScope, depth: PBShaderExp): PBShaderExp {\r\n return scope.$builder.equal(depth, DEPTH_FARTHEST);\r\n }\r\n /**\r\n * Selects the closer of two device depth values.\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - First device depth value\r\n * @param b - Second device depth value\r\n * @returns The value closer to the camera\r\n */\r\n static closerDepth(scope: PBInsideFunctionScope, a: PBShaderExp, b: PBShaderExp): PBShaderExp {\r\n return scope.$builder[DEPTH_REDUCE_CLOSER](a, b);\r\n }\r\n /**\r\n * Selects the farther of two device depth values.\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - First device depth value\r\n * @param b - Second device depth value\r\n * @returns The value farther from the camera\r\n */\r\n static fartherDepth(scope: PBInsideFunctionScope, a: PBShaderExp, b: PBShaderExp): PBShaderExp {\r\n return scope.$builder[DEPTH_REDUCE_FARTHER](a, b);\r\n }\r\n /**\r\n * Sample linear depth from linear depth texture\r\n * @param scope - Current shader scope\r\n * @param tex - The linear depth texture\r\n * @param uv - The uv coordinates\r\n * @param level - The mipmap level to sample\r\n * @returns Linear depth value\r\n */\r\n static sampleLinearDepth(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level: PBShaderExp | number\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const depth = pb.textureSampleLevel(tex, uv, level);\r\n return pb.getDevice().type === 'webgl' ? decodeNormalizedFloatFromRGBA(scope, depth) : depth.r;\r\n }\r\n static samplePositionFromDepth(\r\n scope: PBInsideFunctionScope,\r\n depthTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n mat: PBShaderExp,\r\n cameraNearFar: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'zSamplePositionFromDepth',\r\n [pb.vec2('uv'), pb.vec2('cameraNearFar'), pb.mat4('mat')],\r\n function () {\r\n this.$l.linearDepth = that.sampleLinearDepth(this, depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = that.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n that.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 1)),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n }\r\n );\r\n return scope.zSamplePositionFromDepth(uv, cameraNearFar, mat);\r\n }\r\n /**\r\n * Sample linear depth from linear depth texture with backface\r\n * @param scope - Current shader scope\r\n * @param tex - The linear depth texture\r\n * @param uv - The uv coordinates\r\n * @param level - The mipmap level to sample\r\n * @returns Linear depth value\r\n */\r\n static sampleLinearDepthWithBackface(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level: PBShaderExp | number\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n return pb.textureSampleLevel(tex, uv, level).rg;\r\n }\r\n /**\r\n * Transform color to sRGB color space if nessesary\r\n *\r\n * @param scope - Current shader scope\r\n * @param outputColor - The color to be transformed\r\n * @returns The transformed color\r\n */\r\n static encodeColorOutput(scope: PBInsideFunctionScope, outputColor: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_encodeColorOutput';\r\n pb.func(funcName, [pb.vec4('outputColor')], function () {\r\n const params = that.getCameraParams(this);\r\n this.$if(pb.notEqual(params.w, 0), function () {\r\n this.$return(pb.vec4(linearToGamma(this, this.outputColor.rgb), this.outputColor.w));\r\n }).$else(function () {\r\n this.$return(this.outputColor);\r\n });\r\n });\r\n return pb.getGlobalScope()[funcName](outputColor);\r\n }\r\n /** @internal */\r\n static getMaxClusterLights() {\r\n return getDevice().type === 'webgl' ? 64 : 255;\r\n }\r\n}\r\n"],"names":["UNIFORM_NAME_LIGHT_BUFFER","UNIFORM_NAME_LIGHT_INDEX_TEXTURE","UNIFORM_NAME_BAKED_SKY_MAP","UNIFORM_NAME_AERIALPERSPECTIVE_LUT","UNIFORM_NAME_SKYDISTANTLIGHT_LUT","UNIFORM_NAME_SHADOW_MAP","UNIFORM_NAME_SHADOW_MASK","UNIFORM_NAME_SHADOW_MASK_MODE","UNIFORM_NAME_CAUSTIC_MAP","UNIFORM_NAME_CAUSTIC_HEIGHT_MAP","CAUSTIC_HEIGHT_BIAS","MAX_CAUSTIC_WATERS","UNIFORM_NAME_CAUSTIC_PARAMS","UNIFORM_NAME_LINEAR_DEPTH_MAP","UNIFORM_NAME_LINEAR_DEPTH_MAP_SIZE","UNIFORM_NAME_SCENE_COLOR_MAP","UNIFORM_NAME_SCENE_COLOR_MAP_SIZE","UNIFORM_NAME_HIZ_DEPTH_MAP","UNIFORM_NAME_HIZ_DEPTH_MAP_INFO","UNIFORM_NAME_OBJECT_COLOR","UNIFORM_NAME_WORLD_MATRIX","UNIFORM_NAME_PREV_WORLD_MATRIX","UNIFORM_NAME_PREV_WORLD_MATRXI_FRAME","UNIFORM_NAME_INSTANCE_DATA_STRIDE","UNIFORM_NAME_INSTANCE_DATA","UNIFORM_NAME_INSTANCE_DATA_OFFSET","UNIFORM_NAME_BONE_MATRICES","UNIFORM_NAME_BONE_TEXTURE_SIZE","UNIFORM_NAME_BONE_INV_BIND_MATRIX","UNIFORM_NAME_SKIN_INFLUENCE_DATA","UNIFORM_NAME_SKIN_INFLUENCE_INFO","UNIFORM_NAME_MORPH_DATA","UNIFORM_NAME_MORPH_INFO","ShaderHelper","BILLBOARD_SPHERICAL","BILLBOARD_SYLINDRAL","MATERIAL_INSTANCE_DATA_OFFSET","defaultSunDir","Vector3","one","inplaceNormalize","_dummyShadowMask","SKIN_MATRIX_NAME","SKIN_PREV_MATRIX_NAME","SKIN_BONE_OFFSET","RESOLVED_VERTEX_NORMAL_NAME","_drawableBindGroupLayouts","_lightUniformShadow","sunDir","shadowCascades","positionAndRange","Vector4","directionAndCutoff","diffuseAndIntensity","extraParams","cascadeDistances","depthBiasValues","shadowCameraParams","depthBiasScales","implParams","shadowMatrices","Float32Array","shadowStrength","envLightStrength","envLightSpecularStrength","_fogUniforms","withAerialPerspective","fogType","additive","atmosphereParams","getDefaultAtmosphereParams","heightFogParams","getDefaultHeightFogParams","getObjectColorUniformName","getWorldMatrixUniformName","getPrevWorldMatrixUniformName","getPrevWorldMatrixFrameUniformName","getInstanceDataUniformName","getInstanceDataOffsetUniformName","getInstanceDataStrideUniformName","getBoneMatricesUniformName","getBoneTextureSizeUniformName","getBoneInvBindMatrixUniformName","getSkinInfluenceDataUniformName","getSkinInfluenceInfoUniformName","getMorphDataUniformName","getMorphInfoUniformName","getLightBufferUniformName","getDrawableBindGroupLayout","skinning","morphing","instancing","hash","bindGroupLayout","device","getDevice","buildInfo","ProgramBuilder","buildRender","vertex","pb","vertexShaderDrawableStuff","main","fragment","prepareFragmentShader","ctx","setupGlobalUniforms","prepareVertexShader","prepareVertexShaderCommon","scope","getGlobalScope","cameraStruct","defineStruct","vec4","mat4","motionVectors","renderPass","type","RENDER_PASS_TYPE_DEPTH","vec2","float","int","RENDER_PASS_TYPE_SHADOWMAP","lightStruct","camera","uniform","light","shadowLight","casterParams","shadowMapInfo","get","impl","declareCasterUniforms","RENDER_PASS_TYPE_OBJECT_COLOR","RENDER_PASS_TYPE_LIGHT","useClusteredLighting","currentShadowLight","materialFlags","MaterialVaryingFlags","APPLY_FOG","fogStructMembers","getAtmosphereParamsStruct","getHeightFogParamsStruct","fogStruct","fog","tex2D","withSampler","getSamplerOptions","vec3","ivec4","ivec2","screenSpaceShadowMask","getMaxClusterLights","uniformBuffer","utex2D","noSampler","tex2DArray","texCube","shadowMapParams","tex","shadowMap","isTextureCube","isDepth","$builder","texCubeShadow","isTexture2D","tex2DShadow","tex2DArrayShadow","getDeviceCaps","textureCaps","getTextureFormatInfo","format","filterable","sampleType","usesWaterCaustics","declareWaterCausticUniforms","drawEnvLight","env","envLight","initShaderBindings","linearDepthTexture","sceneColorTexture","HiZTexture","hasSkinning","hasMorphing","calculateSkinMatrix","isWebGL","supportsTextureLoad","funcNameGetBoneMatrixFromTexture","func","boneTexture","$l","uvOffsets","textureSampleLevel","div","currentOffset","x","w","pixelIndex","mul","add","boneIndex","xIndex","mod","yIndex","floor","u1","u2","u3","u4","v","row1","row2","row3","row4","$return","funcNameGetSkinningMatrix","invBindMatrix","blendIndices","$getVertexAttrib","blendWeights","m0","$g","m1","m2","m3","m","y","z","skinInfo","$if","greaterThan","vertexIndex","$inputs","zFakeVertexID","$builtins","texWidth","pairCount","$for","MAX_SKIN_EXTRA_INFLUENCE_PAIRS","greaterThanEqual","pairIndex","$break","extra","textureLoad","u","calculateMorphDelta","attrib","isWebGL1","shaderKind","Error","funcName","that","lessThan","offset","morphInfo","metaData","texHeight","numVertices","numTargets","value","MORPH_WEIGHTS_VECTOR_COUNT","index","i","j","weight","at","notEqual","targetIndex","morphValue","sar","t","compAnd","pos","comp","defineNormalizeMorphedDirection","morphed","base","delta","lengthSquared","dot","inverseSqrt","baseLengthSquared","calculateMorphDirectionByDisplacement","normalizeName","directionDelta","weightedDirection","weightSum","accumulateTarget","targetScope","positionValue","directionValue","xyz","targetDirection","displacementWeight","abs","sqrt","fallback","weightedLengthSquared","directionPos","directionComp","positionPos","MORPH_TARGET_POSITION","positionComp","orthogonalizeMorphedTangent","normal","tangent","normalLengthSquared","n","projected","sub","tangentLengthSquared","prepareSkinAnimation","boneOffset","motionVector","getUnjitteredViewProjectionMatrix","xy","resolveVertexPosition","Z_pos","params","opos","skinMatrix","prevUnjitteredVPMatrix","getPrevUnjitteredViewProjectionMatrix","unjitteredVPMatrix","worldPos","getWorldMatrix","prevSkinMatrix","prevWorldPos","getPrevWorldMatrix","$outputs","zMotionVectorPosCurrent","zMotionVectorPosPrev","Z_resolveVertexPosition","resolveMotionVector","getSkinMatrix","resolveVertexNormal","funcScope","getCurrentFunctionScope","$isMain","useVertexAttrib","Z_normal","MORPH_TARGET_NORMAL","resolvedNormal","resolveVertexTangent","Z_tangent","MORPH_TARGET_TANGENT","getInstancedUniform","framestamp","getFramestamp","equal","$else","Z_getPrevWorldMatrix","$choice","prevFrame","floatBitsToInt","uniformIndex","uint","instanceIndex","getNormalMatrix","instanced","MORPH_ATTRIBUTE_VECTOR_COUNT","SKIN_ANIMATION","MORPH_ANIMATION","INSTANCING","setCameraUniforms","bindGroup","linear","getWorldPosition","useJitter","position","renderSize","Vector2","renderWidth","renderHeight","viewProjectionMatrix","jitteredVPMatrix","jitteredInvVPMatrix","invViewProjectionMatrix","jitterValue","projectionMatrix","getProjectionMatrix","invProjectionMatrix","getInvProjectionMatrix","viewMatrix","worldMatrix","getNearPlane","getFarPlane","flip","roughnessFactor","SSR","ssrRoughnessFactor","shadowDebugCascades","frameDeltaTime","frameInfo","elapsedFrame","elapsedTime","elapsedOverall","preExposure","getPreExposure","frameCounter","prevVPMatrix","setTexture","setValue","width","height","fetchSampler","mipLevelCount","setLightUniformsShadowMap","directionCutoff","depthBias","getParams","lightType","applyCasterUniforms","setFogUniforms","aerialPerspectiveLUT","skyDistantLightLUT","scene","lightingMode","exposure","getPreExposedColorIntensity","out","src","result","setXYZW","getEnvLightLuminance","strength","PHYSICAL_BAKE_EXPOSURE","setLightUniforms","clusterParams","countParams","lightBuffer","lightIndexTexture","sunLight","scaleBy","specularStrength","lightIndexTexSize","Int32Array","numShadowLights","clusteredLight","setBuffer","shadowMaskTexture","getDummyShadowMask","sky","getBakedSkyTexture","setWaterCausticUniforms","updateBindGroup","waterCaustics","waterCausticLight","warpCausticNDC","ndc","k","unwarpCausticNDC","warped","causticStruct","calculateWaterCaustic","lightDirection","sampleWaterCaustic","defocus","cu","or","LIGHT_TYPE_DIRECTIONAL","lightDir","rel","center","mapNDC","frameX","frameY","warpedNDC","extinction","uv","insideMap","all","lessThanEqual","ndcSq","edgeDist","edge","smoothStep","waveHeights","depth","medium","waterCount","slotMedium","waterMedia","slotFlat","slotPath","slotEntry","xz","slotRegion","waterRegions","and","zw","slotMask","slotSample","slotCovered","not","slotWave","slotDepth","pathLength","transmittance","exp","neg","pattern","caustic","submerged","mix","uniforms","waterCausticUniforms","waterCausticTexture","waterCausticHeightTexture","setLightUniformsShadow","numShadowCascades","set","cameraParams","shadow","shadowMapSampler","getEnvLightStrength","getEnvLightSpecularStrength","getSceneColorTexture","getSceneColorTextureSize","getLinearDepthTexture","getLinearDepthTextureSize","getHiZDepthTexture","getHiZDepthTextureSize","getHiZDepthTextureMipLevelCount","sampleBakedSkyPreExposed","direction","rgb","getPreExposureUniform","getElapsedTime","declareStandaloneCameraTime","uniformGroup","setStandaloneCameraTime","_pad0","_pad1","_pad2","getElapsedTimeFrame","getCameraPosition","getCameraRoughnessFactor","getRenderSize","getCameraClipPlaneFlag","getCameraClipPlane","clipPlane","getCameraParams","getClusterParams","getCountParams","getNumShadowLights","getShadowMaskMode","setShadowMaskMode","sampleMask","disposed","createTexture2DArray","mipmapping","name","getClusteredLightIndexTexture","sampleShadowMask","lightIndex","ordinal","layer","channel","fragCoord","texel","textureArraySampleLevel","selector","getAtmosphereParams","getAerialPerspectiveLUT","getViewProjectionMatrix","getInvViewProjectionMatrix","getProjectionMatrixJitterValue","getJitteredInvVPMatrix","getViewMatrix","getInvViewMatrix","getCascadeDistances","getShadowImplParams","getDepthBiasValues","getShadowCameraParams","getDepthBiasScales","getNumLights","numLights","getSunLightDir","getLightTypeForShadow","getLightPositionAndRangeForShadow","getLightViewMatrixForShadow","calculateShadowSpaceVertex","cascade","getLightPositionAndRange","getLightDirectionAndCutoff","getLightColorAndIntensity","getLightExtra","setClipSpacePosition","getShadowMap","getShadowCascadeBiasScale","split","splitFlags","applyShadowNormalOffset","worldNormal","NdotL","cascadeScale","depthBiasParam","receiverNoL","getShadowReceiverNoL","sinTheta","clamp","getShadowReceiverBiasFactor","posRange","linearDepth","distance","max","unitNormal","length","calculateShadow","NoL","shadowBound","nonLinearDepthToLinear","splitDistances","comparison","cascadeFlags","biasedPos","shadowVertex","computeShadowCSM","shadowDistance","computeShadow","applyFog","color","inout","fogging","calculateFog","foggingAlpha","a","foggingRGB","linearDepthToNonLinear","nearFar","REVERSE_Z","nonLinearDepthToLinearNormalized","linearNormalizedToNonLinearDepth","deviceDepthToClipZ","farthestClipZ","isFarthestDepth","DEPTH_FARTHEST","closerDepth","b","DEPTH_REDUCE_CLOSER","fartherDepth","DEPTH_REDUCE_FARTHER","sampleLinearDepth","level","decodeNormalizedFloatFromRGBA","r","samplePositionFromDepth","depthTex","mat","cameraNearFar","nonLinearDepth","clipSpacePos","wPos","zSamplePositionFromDepth","sampleLinearDepthWithBackface","rg","encodeColorOutput","outputColor","linearToGamma"],"mappings":";;;;;;;;;;;AAkDA,MAAMA,yBAA4B,GAAA,sBAAA;AAClC,MAAMC,gCAAmC,GAAA,wBAAA;AACzC,MAAMC,0BAA6B,GAAA,mBAAA;AACnC,MAAMC,kCAAqC,GAAA,+BAAA;AAC3C,MAAMC,gCAAmC,GAAA,6BAAA;AACzC,MAAMC,uBAA0B,GAAA,oBAAA;AAChC,MAAMC,wBAA2B,GAAA,qBAAA;AACjC,MAAMC,6BAAgC,GAAA,yBAAA;AACtC,MAAMC,wBAA2B,GAAA,qBAAA;AACjC,MAAMC,+BAAkC,GAAA,2BAAA;AACxC;;;;;;;;;IAUaC,MAAAA,mBAAAA,GAAsB;AACnC;;;;;;;;IASaC,MAAAA,kBAAAA,GAAqB;AAClC,MAAMC,2BAA8B,GAAA,wBAAA;AACpC,MAAMC,6BAAgC,GAAA,sBAAA;AACtC,MAAMC,kCAAqC,GAAA,0BAAA;AAC3C,MAAMC,4BAA+B,GAAA,qBAAA;AACrC,MAAMC,iCAAoC,GAAA,yBAAA;AAC1C,MAAMC,0BAA6B,GAAA,mBAAA;AACnC,MAAMC,+BAAkC,GAAA,uBAAA;AACxC,MAAMC,yBAA4B,GAAA,eAAA;AAClC,MAAMC,yBAA4B,GAAA,sBAAA;AAClC,MAAMC,8BAAiC,GAAA,0BAAA;AACvC,MAAMC,oCAAuC,GAAA,+BAAA;AAC7C,MAAMC,iCAAoC,GAAA,6BAAA;AAC1C,MAAMC,0BAA6B,GAAA,uBAAA;AACnC,MAAMC,iCAAoC,GAAA,6BAAA;AAC1C,MAAMC,0BAA6B,GAAA,uBAAA;AACnC,MAAMC,8BAAiC,GAAA,sBAAA;AACvC,MAAMC,iCAAoC,GAAA,4BAAA;AAC1C,MAAMC,gCAAmC,GAAA,4BAAA;AACzC,MAAMC,gCAAmC,GAAA,4BAAA;AACzC,MAAMC,uBAA0B,GAAA,oBAAA;AAChC,MAAMC,uBAA0B,GAAA,oBAAA;AAEhC;;;AAGC,IACM,MAAMC,YAAAA,CAAAA;AACX,IAAA,OAAgBC,sBAAsB,CAAE;AACxC,IAAA,OAAgBC,sBAAsB,CAAE;AACxC,IAAA,OAAgBC,gCAAgC,CAAE;AAClD,qBACA,OAAOC,aAAAA,GAAgBC,QAAQC,GAAG,EAAA,CAAGC,gBAAgB,EAAG;qGAExD,OAAeC,gBAAAA,GAA6C,IAAK;qBAEjE,OAAwBC,gBAAAA,GAAmB,cAAe;AAC1D,IAAA,OAAwBC,wBAAwB,kBAAmB;AACnE,IAAA,OAAwBC,mBAAmB,cAAe;AAC1D,IAAA,OAAwBC,8BAA8B,wBAAyB;AAC/E,qBACA,OAAeC,yBAA6D,GAAA,EAAG;qBAE/E,OAAwBC,mBAAsB,GAAA;AAC5CC,QAAAA,MAAAA,EAAQ,IAAIV,OAAAA,EAAAA;QACZW,cAAgB,EAAA,CAAA;AAChBC,QAAAA,gBAAAA,EAAkB,IAAIC,OAAAA,EAAAA;AACtBC,QAAAA,kBAAAA,EAAoB,IAAID,OAAAA,EAAAA;AACxBE,QAAAA,mBAAAA,EAAqB,IAAIF,OAAAA,EAAAA;AACzBG,QAAAA,WAAAA,EAAa,IAAIH,OAAAA,EAAAA;AACjBI,QAAAA,gBAAAA,EAAkB,IAAIJ,OAAAA,EAAAA;AACtBK,QAAAA,eAAAA,EAAiB,IAAIL,OAAAA,EAAAA;AACrBM,QAAAA,kBAAAA,EAAoB,IAAIN,OAAAA,EAAAA;AACxBO,QAAAA,eAAAA,EAAiB,IAAIP,OAAAA,EAAAA;AACrBQ,QAAAA,UAAAA,EAAY,IAAIR,OAAAA,EAAAA;QAChBS,cAAgB,EAAA,IAAIC,aAAa,EAAK,GAAA,CAAA,CAAA;QACtCC,cAAgB,EAAA,CAAA;QAChBC,gBAAkB,EAAA,CAAA;QAClBC,wBAA0B,EAAA;KAC1B;qBAEF,OAAwBC,YAAe,GAAA;QACrCC,qBAAuB,EAAA,CAAA;QACvBC,OAAS,EAAA,CAAA;QACTC,QAAU,EAAA,CAAA;QACVC,gBAAkBC,EAAAA,0BAAAA,EAAAA;QAClBC,eAAiBC,EAAAA,yBAAAA;KACjB;AACF,IAAA,OAAOC,yBAA4B,GAAA;QACjC,OAAOtD,yBAAAA;AACT;AACA,IAAA,OAAOuD,yBAA4B,GAAA;QACjC,OAAOtD,yBAAAA;AACT;AACA,IAAA,OAAOuD,6BAAgC,GAAA;QACrC,OAAOtD,8BAAAA;AACT;AACA,IAAA,OAAOuD,kCAAqC,GAAA;QAC1C,OAAOtD,oCAAAA;AACT;AACA,IAAA,OAAOuD,0BAA6B,GAAA;QAClC,OAAOrD,0BAAAA;AACT;AACA,IAAA,OAAOsD,gCAAmC,GAAA;QACxC,OAAOrD,iCAAAA;AACT;AACA,IAAA,OAAOsD,gCAAmC,GAAA;QACxC,OAAOxD,iCAAAA;AACT;AACA,IAAA,OAAOyD,0BAA6B,GAAA;QAClC,OAAOtD,0BAAAA;AACT;AACA,IAAA,OAAOuD,6BAAgC,GAAA;QACrC,OAAOtD,8BAAAA;AACT;AACA,IAAA,OAAOuD,+BAAkC,GAAA;QACvC,OAAOtD,iCAAAA;AACT;AACA,IAAA,OAAOuD,+BAAkC,GAAA;QACvC,OAAOtD,gCAAAA;AACT;AACA,IAAA,OAAOuD,+BAAkC,GAAA;QACvC,OAAOtD,gCAAAA;AACT;AACA,IAAA,OAAOuD,uBAA0B,GAAA;QAC/B,OAAOtD,uBAAAA;AACT;AACA,IAAA,OAAOuD,uBAA0B,GAAA;QAC/B,OAAOtD,uBAAAA;AACT;AACA,IAAA,OAAOuD,yBAA4B,GAAA;QACjC,OAAOvF,yBAAAA;AACT;AACA,IAAA,OAAOwF,2BAA2BC,QAAiB,EAAEC,QAAiB,EAAEC,UAAmB,EAAE;QAC3F,MAAMC,IAAAA,GAAO,CAAGH,EAAAA,QAAAA,GAAW,CAAI,GAAA,CAAA,CAAA,EAAIC,WAAW,CAAI,GAAA,CAAA,CAAA,EAAIC,UAAa,GAAA,CAAA,GAAI,CAAG,CAAA,CAAA;AAC1E,QAAA,IAAIE,eAAkB,GAAA,IAAI,CAAC/C,yBAAyB,CAAC8C,IAAK,CAAA;AAC1D,QAAA,IAAI,CAACC,eAAiB,EAAA;AACpB,YAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AACf,YAAA,MAAMC,SAAY,GAAA,IAAIC,cAAeH,CAAAA,MAAAA,CAAAA,CAAQI,WAAW,CAAC;AACvDC,gBAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;AACPnE,oBAAAA,YAAAA,CAAaoE,yBAAyB,CAAC,IAAI,EAAEZ,UAAUC,QAAUC,EAAAA,UAAAA,CAAAA;oBACjES,EAAGE,CAAAA,IAAI,CAAC,WAAa,EAAA,CAAA;AACvB,iBAAA;AACAC,gBAAAA,QAAAA,CAAAA,CAASH,EAAE,EAAA;oBACTA,EAAGE,CAAAA,IAAI,CAAC,WAAa,EAAA,CAAA;AACvB;AACF,aAAA,CAAA;AACAT,YAAAA,eAAAA,GAAkBG,SAAS,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA;AACjC,YAAA,IAAI,CAAClD,yBAAyB,CAAC8C,IAAAA,CAAK,GAAGC,eAAAA;AACzC;QACA,OAAOA,eAAAA;AACT;AACA;;;;;;;;AAQC,MACD,OAAOW,qBAAAA,CAAsBJ,EAAkB,EAAEK,GAAgB,EAAE;QACjE,IAAI,CAACC,mBAAmB,CAACN,EAAIK,EAAAA,GAAAA,CAAAA;AAC/B;AACA;;;;;;;;AAQC,MACD,OAAOE,mBAAAA,CAAoBP,EAAkB,EAAEK,GAAgB,EAAE;QAC/D,IAAI,CAACC,mBAAmB,CAACN,EAAIK,EAAAA,GAAAA,CAAAA;QAC7B,IAAI,CAACG,yBAAyB,CAACR,EAAIK,EAAAA,GAAAA,CAAAA;AACrC;AACA,qBACA,OAAeC,mBAAAA,CAAoBN,EAAkB,EAAEK,GAAgB,EAAE;QACvE,MAAMI,KAAAA,GAAQT,GAAGU,cAAc,EAAA;QAC/B,MAAMC,YAAAA,GAAeX,EAAGY,CAAAA,YAAY,CAAC;AACnCZ,YAAAA,EAAAA,CAAGa,IAAI,CAAC,UAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGc,IAAI,CAAC,sBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,yBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,oBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,qBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,YAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,aAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,kBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGc,IAAI,CAAC,qBAAA,CAAA;AACRd,YAAAA,EAAAA,CAAGa,IAAI,CAAC,QAAA,CAAA;AACJR,YAAAA,GAAAA,GAAAA,CAAIU,aAAa,IAAIV,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKC,sBAC9C,GAAA;AAAClB,gBAAAA,EAAAA,CAAGc,IAAI,CAAC,wBAAA;AAA0B,aAAA,GACnC,EAAE;AACNd,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,YAAA,CAAA;AACRnB,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,aAAA,CAAA;AACRnB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,iBAAA,CAAA;AACTpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,qBAAA,CAAA;AACTpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,gBAAA,CAAA;AACTpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,aAAA,CAAA;AACTpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,aAAA,CAAA;AACTpB,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,YAAA;AACR,SAAA,CAAA;AACD,QAAA,IAAIhB,GAAIW,CAAAA,UAAU,CAAEC,IAAI,KAAKK,0BAA4B,EAAA;YACvD,MAAMC,WAAAA,GAAcvB,EAAGY,CAAAA,YAAY,CAAC;AAClCZ,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,kBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,iBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGc,IAAI,CAAC,YAAA,CAAA;AACRd,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,WAAA,CAAA;;;;;AAKRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,YAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGqB,GAAG,CAAC,WAAA;AACR,aAAA,CAAA;AACDZ,YAAAA,KAAAA,CAAMe,MAAM,GAAGb,YAAec,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACtChB,YAAAA,KAAAA,CAAMiB,KAAK,GAAGH,WAAcE,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;;;AAGpC,YAAA,MAAME,WAAc,GAACtB,GAAIW,CAAAA,UAAU,CAAmBU,KAAK;AAC3D,YAAA,MAAME,eAAeD,WAActB,GAAAA,GAAAA,CAAIwB,aAAa,EAAEC,IAAIH,WAAe,CAAA,GAAA,IAAA;AACzE,YAAA,IAAIC,YAAc,EAAA;gBAChBA,YAAaG,CAAAA,IAAI,EAAEC,qBAAAA,CAAsBvB,KAAOmB,EAAAA,YAAAA,CAAAA;AAClD;AACF,SAAA,MAAO,IACLvB,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKC,sBACzBb,IAAAA,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKgB,6BACzB,EAAA;AACAxB,YAAAA,KAAAA,CAAMe,MAAM,GAAGb,YAAec,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACxC,SAAA,MAAO,IAAIpB,GAAIW,CAAAA,UAAU,CAAEC,IAAI,KAAKiB,sBAAwB,EAAA;YAC1D,MAAMC,oBAAAA,GAAuB,CAAC9B,GAAAA,CAAI+B,kBAAkB;AACpD,YAAA,IAAI/B,GAAIgC,CAAAA,aAAa,GAAGC,oBAAAA,CAAqBC,SAAS,EAAE;AACtD,gBAAA,MAAMC,gBAAkC,GAAA;AACtCxC,oBAAAA,EAAAA,CAAGqB,GAAG,CAAC,uBAAA,CAAA;AACPrB,oBAAAA,EAAAA,CAAGqB,GAAG,CAAC,SAAA,CAAA;AACPrB,oBAAAA,EAAAA,CAAGqB,GAAG,CAAC,UAAA,CAAA;AACPoB,oBAAAA,yBAAAA,CAA0BzC,EAAI,CAAA,CAAA,kBAAA,CAAA;AAC9B0C,oBAAAA,wBAAAA,CAAyB1C,EAAI,CAAA,CAAA,iBAAA;AAC9B,iBAAA;gBACD,MAAM2C,SAAAA,GAAY3C,EAAGY,CAAAA,YAAY,CAAC4B,gBAAAA,CAAAA;AAClC/B,gBAAAA,KAAAA,CAAMmC,GAAG,GAAGD,SAAYlB,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;;gBAEhChB,KAAK,CAAC1G,kCAAmC,CAAA,GAAGiG,EACzC6C,CAAAA,KAAK,EACLpB,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;gBACjCtC,KAAK,CAACzG,gCAAiC,CAAA,GAAGgG,EACvC6C,CAAAA,KAAK,EACLpB,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;AACnC;AACA,YAAA,MAAMxB,cAAclB,GAAI+B,CAAAA,kBAAkB,GACtCpC,EAAAA,CAAGY,YAAY,CAAC;AACdZ,gBAAAA,EAAAA,CAAGgD,IAAI,CAAC,QAAA,CAAA;AACRhD,gBAAAA,EAAAA,CAAGqB,GAAG,CAAC,gBAAA,CAAA;AACPrB,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,kBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,oBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,qBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,aAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,kBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,iBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,oBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,iBAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,YAAA,CAAA;gBACRb,EAAGa,CAAAA,IAAI,CAAC,EAAA,CAAG,CAAC,gBAAA,CAAA;AACZb,gBAAAA,EAAAA,CAAGoB,KAAK,CAAC,gBAAA,CAAA;AACTpB,gBAAAA,EAAAA,CAAGoB,KAAK,CAAC,kBAAA,CAAA;AACTpB,gBAAAA,EAAAA,CAAGoB,KAAK,CAAC,0BAAA;aACV,CACDpB,GAAAA,EAAAA,CAAGY,YAAY,CAAC;AACdZ,gBAAAA,EAAAA,CAAGgD,IAAI,CAAC,QAAA,CAAA;AACRhD,gBAAAA,EAAAA,CAAGoB,KAAK,CAAC,kBAAA,CAAA;AACTpB,gBAAAA,EAAAA,CAAGoB,KAAK,CAAC,0BAAA,CAAA;AACTpB,gBAAAA,EAAAA,CAAGa,IAAI,CAAC,eAAA,CAAA;AACRb,gBAAAA,EAAAA,CAAGiD,KAAK,CAAC,aAAA,CAAA;AACTjD,gBAAAA,EAAAA,CAAGkD,KAAK,CAAC,mBAAA,CAAA;;;;;AAKL7C,gBAAAA,GAAAA,GAAAA,CAAI8C,qBAAqB,GAAG;AAACnD,oBAAAA,EAAAA,CAAGqB,GAAG,CAAC,iBAAA;AAAmB,iBAAA,GAAG;AAC/D,aAAA,CAAA;AACLZ,YAAAA,KAAAA,CAAMe,MAAM,GAAGb,YAAec,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACtChB,YAAAA,KAAAA,CAAMiB,KAAK,GAAGH,WAAcE,EAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACpC,YAAA,IAAIU,oBAAsB,EAAA;AACxB1B,gBAAAA,KAAK,CAAC7G,yBAA0B,CAAA,GAAGoG,EAAGa,CAAAA,IAAI,CAAC,CAAC,IAAI,CAACuC,mBAAmB,EAAK,GAAA,CAAA,IAAK,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;;gBAEjG5C,KAAK,CAAC5G,iCAAiC,GACrCmG,CAAAA,EAAGL,CAAAA,SAAS,GAAGsB,IAAI,KAAK,UAAUjB,EAAG6C,CAAAA,KAAK,KAAK7C,EAAGsD,CAAAA,MAAM,GAAGC,SAAS,EAAC,EACrE9B,OAAO,CAAC,CAAA,CAAA;;;;;gBAKV,IAAIpB,GAAAA,CAAI8C,qBAAqB,EAAE;AAC7B1C,oBAAAA,KAAK,CAACvG,wBAAyB,CAAA,GAAG8F,GAAGwD,UAAU,EAAA,CAAG/B,OAAO,CAAC,CAAA,CAAA;;;;;AAK1DhB,oBAAAA,KAAK,CAACtG,6BAA8B,CAAA,GAAG6F,GAAGqB,GAAG,EAAA,CAAGI,OAAO,CAAC,CAAA,CAAA;AAC1D;AACF;;YAEAhB,KAAK,CAAC3G,0BAA2B,CAAA,GAAGkG,EACjCyD,CAAAA,OAAO,EACPhC,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;YACjC,IAAI1C,GAAAA,CAAI+B,kBAAkB,EAAE;gBAC1B,MAAM3B,KAAAA,GAAQT,GAAGU,cAAc,EAAA;AAC/B,gBAAA,MAAMgD,kBAAkBrD,GAAIwB,CAAAA,aAAa,CAAEC,GAAG,CAACzB,IAAI+B,kBAAkB,CAAA;gBACrE,MAAMuB,GAAAA,GAAMD,eAAgBE,CAAAA,SAAS,CAAEC,aAAa,KAChDH,eAAgBE,CAAAA,SAAS,CAACE,OAAO,EAC/BrD,GAAAA,KAAAA,CAAMsD,QAAQ,CAACC,aAAa,EAC5BvD,GAAAA,KAAAA,CAAMsD,QAAQ,CAACN,OAAO,EAAA,GACxBC,eAAgBE,CAAAA,SAAS,CAAEK,WAAW,EACpCP,GAAAA,eAAAA,CAAgBE,SAAS,CAACE,OAAO,EAC/BrD,GAAAA,KAAAA,CAAMsD,QAAQ,CAACG,WAAW,EAC1BzD,GAAAA,KAAAA,CAAMsD,QAAQ,CAAClB,KAAK,EAAA,GACtBa,gBAAgBE,SAAS,CAAEE,OAAO,EAAA,GAChCrD,KAAMsD,CAAAA,QAAQ,CAACI,gBAAgB,EAC/B1D,GAAAA,KAAAA,CAAMsD,QAAQ,CAACP,UAAU,EAAA;gBACjC,IACE,CAACE,gBAAgBE,SAAS,CAAEE,OAAO,EACnC,IAAA,CAACzD,GAAIX,CAAAA,MAAM,CAAC0E,aAAa,GAAGC,WAAW,CAACC,oBAAoB,CAACZ,eAAAA,CAAgBE,SAAS,CAAEW,MAAM,CAC3FC,CAAAA,UAAU,EACb;AACAb,oBAAAA,GAAAA,CAAIc,UAAU,CAAC,oBAAA,CAAA;AACjB;AACA,gBAAA,IAAIf,eAAgBE,CAAAA,SAAS,CAAEE,OAAO,EAAI,EAAA;;;;AAIxCH,oBAAAA,GAAAA,CAAIJ,SAAS,EAAA;AACf;AACA9C,gBAAAA,KAAK,CAACxG,uBAAAA,CAAwB,GAAG0J,GAAAA,CAAIlC,OAAO,CAAC,CAAA,CAAA;AAC/C;AACA,YAAA,IAAI,IAAI,CAACiD,iBAAiB,CAACrE,GAAM,CAAA,EAAA;gBAC/B,IAAI,CAACsE,2BAA2B,CAAC3E,EAAAA,CAAAA;AACnC;YACA,IAAIK,GAAAA,CAAIuE,YAAY,EAAE;gBACpBvE,GAAIwE,CAAAA,GAAG,CAAEnD,KAAK,CAACoD,QAAQ,CAACC,kBAAkB,CAAC/E,EAAIK,EAAAA,GAAAA,CAAAA;AACjD;YACA,IAAIA,GAAAA,CAAI2E,kBAAkB,EAAE;;;AAG1BvE,gBAAAA,KAAK,CAAChG,6BAAAA,CAA8B,GAAGuF,EAAAA,CACpC6C,KAAK,EACL4B,CAAAA,UAAU,CAAC,oBAAA,CAAA,CACXhD,OAAO,CAAC,CACRqB,CAAAA,CAAAA,WAAW,CAACC,iBAAkB,CAAA,qBAAA,CAAA,CAAA;AACjCtC,gBAAAA,KAAK,CAAC/F,kCAAmC,CAAA,GAAGsF,GAAGmB,IAAI,EAAA,CAAGM,OAAO,CAAC,CAAA,CAAA;AAChE;YACA,IAAIpB,GAAAA,CAAI4E,iBAAiB,EAAE;;;;;;;;;;;;gBAYzBxE,KAAK,CAAC9F,4BAA6B,CAAA,GAAGqF,EACnC6C,CAAAA,KAAK,EACLpB,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,cAAA,CAAA,CAAA;AACjCtC,gBAAAA,KAAK,CAAC7F,iCAAkC,CAAA,GAAGoF,GAAGmB,IAAI,EAAA,CAAGM,OAAO,CAAC,CAAA,CAAA;AAC/D;YACA,IAAIpB,GAAAA,CAAI6E,UAAU,EAAE;;AAElBzE,gBAAAA,KAAK,CAAC5F,0BAAAA,CAA2B,GAAGmF,EAAAA,CACjC6C,KAAK,EACL4B,CAAAA,UAAU,CAAC,oBAAA,CAAA,CACXhD,OAAO,CAAC,CACRqB,CAAAA,CAAAA,WAAW,CAACC,iBAAkB,CAAA,eAAA,CAAA,CAAA;AACjCtC,gBAAAA,KAAK,CAAC3F,+BAAgC,CAAA,GAAGkF,GAAGa,IAAI,EAAA,CAAGY,OAAO,CAAC,CAAA,CAAA;AAC7D;AACF;AACF;AACA;;;;;;MAOA,OAAO0D,WAAY1E,CAAAA,KAA4B,EAAE;AAC/C,QAAA,OAAO,CAAC,CAACA,KAAK,CAACnF,0BAA2B,CAAA;AAC5C;AACA;;;;;;MAOA,OAAO8J,WAAY3E,CAAAA,KAA4B,EAAE;AAC/C,QAAA,OAAO,CAAC,CAACA,KAAK,CAAC9E,uBAAwB,CAAA;AACzC;AACA;;;;;;MAOA,OAAO0J,mBAAoB5E,CAAAA,KAA4B,EAAE;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC0E,WAAW,CAAC1E,KAAQ,CAAA,EAAA;YAC5B,OAAO,IAAA;AACT;QACA,MAAMT,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMuB,OAAUtF,GAAAA,EAAAA,CAAGL,SAAS,EAAA,CAAGsB,IAAI,KAAK,OAAA;AACxC,QAAA,MAAMsE,sBAAsB,CAACD,OAAAA;AAC7B,QAAA,MAAME,gCAAmC,GAAA,4BAAA;QACzCxF,EAAGyF,CAAAA,IAAI,CAACD,gCAAkC,EAAA;AAACxF,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,WAAA;SAAa,EAAE,WAAA;YAC/D,MAAMqE,WAAAA,GAAc,IAAI,CAACpK,0BAA2B,CAAA;AACpD,YAAA,IAAI,CAACqK,EAAE,CAACC,SAAS,GAAG5F,EAAAA,CAAG6F,kBAAkB,CACvCH,WAAAA,EACA1F,GAAG8F,GAAG,CAAC9F,GAAGmB,IAAI,CAAC,MAAM,IAAI,CAAC5F,+BAA+B,CACzD,EAAA,CAAA,CAAA;AAEF,YAAA,IAAI,CAACoK,EAAE,CAACI,aAAa,GAAG/F,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAACuE,SAAS,CAACI,CAAC,CAAA;YAC/C,IAAI,CAACL,EAAE,CAACM,CAAC,GAAG,IAAI,CAAC1K,8BAA+B,CAAA,CAACyK,CAAC;YAClD,IAAI,CAACL,EAAE,CAACO,UAAU,GAAGlG,EAAGoB,CAAAA,KAAK,CAACpB,EAAGmG,CAAAA,GAAG,CAACnG,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACN,aAAa,CAAG,EAAA,CAAA,CAAA,CAAA;AACjF,YAAA,IAAI,CAACJ,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACD,CAAC,CAAA;AAC/C,YAAA,IAAI,CAACN,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACD,CAAC,CAAA,CAAA;AACxD,YAAA,IAAI,CAACN,EAAE,CAACe,EAAE,GAAG1G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACgB,EAAE,GAAG3G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACiB,EAAE,GAAG5G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACkB,EAAE,GAAG7G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACP,CAAC,CAAA;AACnD,YAAA,IAAI,CAACN,EAAE,CAACoB,IAAI,GAAG/G,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACuF,EAAE,EAAE,IAAI,CAACI,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACqB,IAAI,GAAGhH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACwF,EAAE,EAAE,IAAI,CAACG,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACsB,IAAI,GAAGjH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACyF,EAAE,EAAE,IAAI,CAACE,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACuB,IAAI,GAAGlH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAAC0F,EAAE,EAAE,IAAI,CAACC,CAAC,CAAG,EAAA,CAAA,CAAA;YAC5E,IAAI,CAACK,OAAO,CAACnH,EAAAA,CAAGc,IAAI,CAAC,IAAI,CAACiG,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,CAAA,CAAA;AACjE,SAAA,CAAA;AACA,QAAA,MAAME,yBAA4B,GAAA,qBAAA;AAClCpH,QAAAA,EAAAA,CAAGyF,IAAI,CAAC2B,yBAA2B,EAAA,EAAE,EAAE,WAAA;YACrC,MAAMC,aAAAA,GAAgB,IAAI,CAAC7L,iCAAkC,CAAA;YAC7D,MAAM8L,YAAAA,GAAe7G,KAAM8G,CAAAA,gBAAgB,CAAC,cAAA,CAAA;YAC5C,MAAMC,YAAAA,GAAe/G,KAAM8G,CAAAA,gBAAgB,CAAC,cAAA,CAAA;AAC5C,YAAA,IAAI,CAAC5B,EAAE,CAAC8B,EAAE,GAAGhH,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAGqB,CAAAA,GAAG,CAACiG,YAAY,CAAC,CAAE,CAAA,CAAA,CAAA;AAC9E,YAAA,IAAI,CAAC3B,EAAE,CAACgC,EAAE,GAAGlH,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAGqB,CAAAA,GAAG,CAACiG,YAAY,CAAC,CAAE,CAAA,CAAA,CAAA;AAC9E,YAAA,IAAI,CAAC3B,EAAE,CAACiC,EAAE,GAAGnH,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAGqB,CAAAA,GAAG,CAACiG,YAAY,CAAC,CAAE,CAAA,CAAA,CAAA;AAC9E,YAAA,IAAI,CAAC3B,EAAE,CAACkC,EAAE,GAAGpH,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAGqB,CAAAA,GAAG,CAACiG,YAAY,CAAC,CAAE,CAAA,CAAA,CAAA;YAC9E,IAAI,CAAC3B,EAAE,CAACmC,CAAC,GAAG9H,EAAGoG,CAAAA,GAAG,CAChBpG,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACsB,EAAE,EAAED,YAAAA,CAAaxB,CAAC,CAC9BhG,EAAAA,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACwB,EAAE,EAAEH,YAAAA,CAAaO,CAAC,CAC9B/H,EAAAA,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACyB,EAAE,EAAEJ,aAAaQ,CAAC,CAAA,EAC9BhI,GAAGmG,GAAG,CAAC,IAAI,CAAC0B,EAAE,EAAEL,YAAAA,CAAavB,CAAC,CAAA,CAAA;AAEhC,YAAA,IAAI,CAACN,EAAE,CAACsC,QAAQ,GAAG,IAAI,CAACvM,gCAAiC,CAAA;AACzD,YAAA,IAAI,CAACwM,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACF,QAAQ,CAACD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;gBAC3C,IAAI,CAACrC,EAAE,CAACyC,WAAW,GAAG9C,OAClBtF,GAAAA,EAAAA,CAAGqB,GAAG,CAACZ,KAAAA,CAAM4H,OAAO,CAACC,aAAa,IAClCtI,EAAGqB,CAAAA,GAAG,CAACZ,KAAM8H,CAAAA,SAAS,CAACH,WAAW,CAAA;AACtC,gBAAA,IAAI,CAACzC,EAAE,CAAC6C,QAAQ,GAAGxI,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC4G,QAAQ,CAACjC,CAAC,CAAA;AACzC,gBAAA,IAAI,CAACL,EAAE,CAAC8C,SAAS,GAAGzI,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC4G,QAAQ,CAAChC,CAAC,CAAA;gBAC1C,IAAI,CAACyC,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,WAAA,CAAA,EAAc,GAAGsH,8BAAgC,EAAA,WAAA;AAChE,oBAAA,IAAI,CAACT,GAAG,CAAClI,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACJ,SAAS,CAAG,EAAA,WAAA;AAC5D,wBAAA,IAAI,CAACK,MAAM,EAAA;AACb,qBAAA,CAAA;oBACA,IAAI,CAACnD,EAAE,CAACO,UAAU,GAAGlG,EAAGoG,CAAAA,GAAG,CAACpG,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACiC,WAAW,EAAE,IAAI,CAACK,SAAS,CAAA,EAAG,IAAI,CAACI,SAAS,CAAA;AACpF,oBAAA,IAAI,CAAClD,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,oBAAA,IAAI,CAAC7C,EAAE,CAACa,MAAM,GAAGxG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,oBAAA,IAAIjD,mBAAqB,EAAA;wBACvB,IAAI,CAACI,EAAE,CAACoD,KAAK,GAAG/I,EAAGgJ,CAAAA,WAAW,CAC5B,IAAI,CAACvN,gCAAAA,CAAiC,EACtCuE,EAAGkD,CAAAA,KAAK,CAAC,IAAI,CAACoD,MAAM,EAAE,IAAI,CAACE,MAAM,CACjC,EAAA,CAAA,CAAA;qBAEG,MAAA;wBACL,IAAI,CAACb,EAAE,CAACsD,CAAC,GAAGjJ,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAACpG,GAAGoB,KAAK,CAAC,IAAI,CAACkF,MAAM,CAAA,EAAG,MAAM,IAAI,CAAC2B,QAAQ,CAACjC,CAAC,CAAA;wBACtE,IAAI,CAACL,EAAE,CAACmB,CAAC,GAAG9G,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAACpG,GAAGoB,KAAK,CAAC,IAAI,CAACoF,MAAM,CAAA,EAAG,MAAM,IAAI,CAACyB,QAAQ,CAACF,CAAC,CAAA;wBACtE,IAAI,CAACpC,EAAE,CAACoD,KAAK,GAAG/I,EAAG6F,CAAAA,kBAAkB,CACnC,IAAI,CAACpK,gCAAAA,CAAiC,EACtCuE,EAAGmB,CAAAA,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA;AAEJ;AACA,oBAAA,IAAI,CAACoB,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACY,KAAK,CAAChB,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACxC,wBAAA,IAAI,CAACD,CAAC,GAAG9H,EAAAA,CAAGoG,GAAG,CACb,IAAI,CAAC0B,CAAC,EACN9H,EAAGmG,CAAAA,GAAG,CAAC1F,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC0H,KAAK,CAAC/C,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC+C,KAAK,CAAChB,CAAC,CAAA,CAAA;AAEzF,qBAAA,CAAA;AACA,oBAAA,IAAI,CAACG,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACY,KAAK,CAAC9C,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACxC,wBAAA,IAAI,CAAC6B,CAAC,GAAG9H,EAAAA,CAAGoG,GAAG,CACb,IAAI,CAAC0B,CAAC,EACN9H,EAAGmG,CAAAA,GAAG,CAAC1F,KAAMiH,CAAAA,EAAE,CAAClC,gCAAAA,CAAiC,CAACxF,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC0H,KAAK,CAACf,CAAC,CAAI,CAAA,EAAA,IAAI,CAACe,KAAK,CAAC9C,CAAC,CAAA,CAAA;AAEzF,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF,aAAA,CAAA;YACA,IAAI,CAACkB,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAACkB,aAAAA,EAAe,IAAI,CAACS,CAAC,CAAA,CAAA;AAC3C,SAAA,CAAA;QACA,OAAOrH,KAAAA,CAAMiH,EAAE,CAACN,yBAA0B,CAAA,EAAA;AAC5C;AACA,IAAA,OAAO8B,mBAAoBzI,CAAAA,KAA4B,EAAE0I,MAAc,EAAE;QACvE,MAAMnJ,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMqF,QAAWpJ,GAAAA,EAAAA,CAAGL,SAAS,EAAA,CAAGsB,IAAI,KAAK,OAAA;QACzC,IAAIjB,EAAAA,CAAGqJ,UAAU,KAAK,QAAU,EAAA;AAC9B,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,kEAAkE,CAAC,CAAA;AACtF;AACA,QAAA,MAAMC,QAAW,GAAA,kBAAA;AACjB,QAAA,MAAMC,OAAO,IAAI;QACjBxJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,QAAA;SAAU,EAAE,WAAA;YACpC,IAAI,CAAC6G,GAAG,CAAClI,EAAGyJ,CAAAA,QAAQ,CAAC,IAAI,CAACC,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;AACpC,gBAAA,IAAI,CAACvC,OAAO,CAACnH,EAAAA,CAAGa,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,aAAA,CAAA;YACA,IAAI,CAAC8E,EAAE,CAACyC,WAAW,GAAGgB,QAClBpJ,GAAAA,EAAAA,CAAGqB,GAAG,CAACZ,KAAAA,CAAM4H,OAAO,CAACC,aAAa,IAClCtI,EAAGqB,CAAAA,GAAG,CAACZ,KAAM8H,CAAAA,SAAS,CAACH,WAAW,CAAA;AACtC,YAAA,MAAMuB,SAAYlJ,GAAAA,KAAK,CAAC+I,IAAAA,CAAKtK,uBAAuB,EAAG,CAAA;YACvD,IAAI,CAACyG,EAAE,CAACiE,QAAQ,GAAG5J,GAAGiD,KAAK,CAAC0G,SAAS,CAAC,CAAE,CAAA,CAAA;AACxC,YAAA,IAAI,CAAChE,EAAE,CAAC6C,QAAQ,GAAGxI,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAACwI,QAAQ,CAAC5D,CAAC,CAAA;AAC3C,YAAA,IAAI,CAACL,EAAE,CAACkE,SAAS,GAAG7J,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAACwI,QAAQ,CAAC7B,CAAC,CAAA;YAC5C,IAAI,CAACpC,EAAE,CAACmE,WAAW,GAAG,IAAI,CAACF,QAAQ,CAAC5B,CAAC;YACrC,IAAI,CAACrC,EAAE,CAACoE,UAAU,GAAG,IAAI,CAACH,QAAQ,CAAC3D,CAAC;AACpC,YAAA,IAAI,CAACN,EAAE,CAACqE,KAAK,GAAGhK,EAAAA,CAAGa,IAAI,CAAC,CAAA,CAAA;AACxB,YAAA,IAAIuI,QAAU,EAAA;gBACZ,IAAI,CAACV,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG4I,0BAA4B,EAAA,WAAA;oBACpD,IAAI,CAACvB,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG,CAAG,EAAA,WAAA;AAC3B,wBAAA,IAAI,CAACsE,EAAE,CAACuE,KAAK,GAAGlK,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACgE,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAACC,CAAC,CAAA;AAChD,wBAAA,IAAI,CAAClC,GAAG,CAAClI,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACsB,KAAK,EAAE,IAAI,CAACH,UAAU,CAAG,EAAA,WAAA;AACzD,4BAAA,IAAI,CAAC5C,OAAO,CAAC,IAAI,CAAC6C,KAAK,CAAA;AACzB,yBAAA,CAAA;wBACA,IAAI,CAACrE,EAAE,CAAC0E,MAAM,GAAGV,SAAUW,CAAAA,EAAE,CAACtK,EAAGoG,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC+D,CAAC,CAAA,CAAA,CAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA;wBAC1D,IAAI,CAAClC,GAAG,CAAClI,EAAGuK,CAAAA,QAAQ,CAAC,IAAI,CAACF,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;4BACpC,IAAI,CAAC1E,EAAE,CAAC6E,WAAW,GAAGxK,GAAGqB,GAAG,CAC1BsI,SAAUW,CAAAA,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAAC,CAAA,GAAI6D,0BAA4B,EAAA,IAAI,CAACE,CAAC,GAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA,CAAA;AAExE,4BAAA,IAAI,CAACzE,EAAE,CAACO,UAAU,GAAGlG,EAAAA,CAAGoB,KAAK,CAC3BpB,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAACsD,MAAM,EAAE1J,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqE,WAAW,EAAE,IAAI,CAACV,WAAW,CAAA,EAAG,IAAI,CAAC1B,WAAW,CAAA,CAAA;AAElF,4BAAA,IAAI,CAACzC,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,4BAAA,IAAI,CAAC7C,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA,CAAA;AAC/D,4BAAA,IAAI,CAAC7C,EAAE,CAACsD,CAAC,GAAGjJ,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACkC,QAAQ,CAAA;AAC1D,4BAAA,IAAI,CAAC7C,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACqD,SAAS,CAAA;4BAC3D,IAAI,CAAClE,EAAE,CAAC8E,UAAU,GAAGzK,GAAG6F,kBAAkB,CACxC,IAAI,CAAC2D,IAAKvK,CAAAA,uBAAuB,GAAG,EACpCe,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA;AAEF,4BAAA,IAAI,CAACkD,KAAK,GAAGhK,GAAGoG,GAAG,CAAC,IAAI,CAAC4D,KAAK,EAAEhK,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACsE,UAAU,EAAE,IAAI,CAACJ,MAAM,CAAA,CAAA;AACrE,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;aACK,MAAA;gBACL,IAAI,CAAC3B,IAAI,CAAC1I,EAAGqB,CAAAA,GAAG,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC0I,UAAU,EAAE,WAAA;oBACzC,IAAI,CAACpE,EAAE,CAACwE,CAAC,GAAGnK,EAAG0K,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,CAAA,CAAA;oBAC3B,IAAI,CAAChF,EAAE,CAACyE,CAAC,GAAGpK,EAAG4K,CAAAA,OAAO,CAAC,IAAI,CAACD,CAAC,EAAE,CAAA,CAAA;oBAC/B,IAAI,CAAChF,EAAE,CAAC0E,MAAM,GAAGV,SAAUW,CAAAA,EAAE,CAACtK,EAAGoG,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC+D,CAAC,CAAA,CAAA,CAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA;oBAC1D,IAAI,CAAClC,GAAG,CAAClI,EAAGuK,CAAAA,QAAQ,CAAC,IAAI,CAACF,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;wBACpC,IAAI,CAAC1E,EAAE,CAAC6E,WAAW,GAAGxK,GAAGqB,GAAG,CAC1BsI,SAAUW,CAAAA,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAAC,CAAA,GAAI6D,0BAA4B,EAAA,IAAI,CAACE,CAAC,GAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA,CAAA;AAExE,wBAAA,IAAI,CAACzE,EAAE,CAACO,UAAU,GAAGlG,EAAAA,CAAGoB,KAAK,CAC3BpB,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAACsD,MAAM,EAAE1J,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqE,WAAW,EAAE,IAAI,CAACV,WAAW,CAAA,EAAG,IAAI,CAAC1B,WAAW,CAAA,CAAA;AAElF,wBAAA,IAAI,CAACzC,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,wBAAA,IAAI,CAAC7C,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA,CAAA;AAC/D,wBAAA,IAAI,CAAC7C,EAAE,CAACsD,CAAC,GAAGjJ,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACkC,QAAQ,CAAA;AAC1D,wBAAA,IAAI,CAAC7C,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACqD,SAAS,CAAA;wBAC3D,IAAI,CAAClE,EAAE,CAAC8E,UAAU,GAAGzK,GAAG6F,kBAAkB,CACxC,IAAI,CAAC2D,IAAKvK,CAAAA,uBAAuB,GAAG,EACpCe,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA;AAEF,wBAAA,IAAI,CAACkD,KAAK,GAAGhK,GAAGoG,GAAG,CAAC,IAAI,CAAC4D,KAAK,EAAEhK,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACsE,UAAU,EAAE,IAAI,CAACJ,MAAM,CAAA,CAAA;AACrE,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF;AACA,YAAA,IAAI,CAAClD,OAAO,CAAC,IAAI,CAAC6C,KAAK,CAAA;AACzB,SAAA,CAAA;AACA,QAAA,MAAMa,MAAM,CAAIZ,GAAAA,0BAAAA,GAA6B,CAAKd,IAAAA,UAAU,CAAA,CAAA;AAC5D,QAAA,MAAM2B,OAAO3B,MAAS,GAAA,CAAA;QACtB,MAAMO,MAAAA,GAASjJ,KAAK,CAAC,IAAI,CAACvB,uBAAuB,EAAG,CAAA,CAAC2L,GAAI,CAAA,CAACC,IAAK,CAAA;AAC/D,QAAA,OAAOrK,KAAK,CAAC8I,QAAAA,CAAS,CAACvJ,EAAAA,CAAGqB,GAAG,CAACqI,MAAAA,CAAAA,CAAAA;AAChC;AACA;;;;;;;;MASA,OAAeqB,+BAAgCtK,CAAAA,KAA4B,EAAU;QACnF,MAAMT,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMwF,QAAW,GAAA,6BAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,MAAA,CAAA;AAAShD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,OAAA;SAAS,EAAE,WAAA;AACrD,YAAA,IAAI,CAAC2C,EAAE,CAACqF,OAAO,GAAGhL,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAAC6E,IAAI,EAAE,IAAI,CAACC,KAAK,CAAA;AAC9C,YAAA,IAAI,CAACvF,EAAE,CAACwF,aAAa,GAAGnL,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACJ,OAAO,EAAE,IAAI,CAACA,OAAO,CAAA;YACzD,IAAI,CAAC9C,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAACgD,aAAa,EAAE,IAAO,CAAA,EAAA,WAAA;AACjD,gBAAA,IAAI,CAAChE,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC6E,OAAO,EAAEhL,EAAGqL,CAAAA,WAAW,CAAC,IAAI,CAACF,aAAa,CAAA,CAAA,CAAA;AACrE,aAAA,CAAA;AACA,YAAA,IAAI,CAACxF,EAAE,CAAC2F,iBAAiB,GAAGtL,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACH,IAAI,EAAE,IAAI,CAACA,IAAI,CAAA;YACvD,IAAI,CAAC/C,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAACmD,iBAAiB,EAAE,IAAO,CAAA,EAAA,WAAA;AACrD,gBAAA,IAAI,CAACnE,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC8E,IAAI,EAAEjL,EAAGqL,CAAAA,WAAW,CAAC,IAAI,CAACC,iBAAiB,CAAA,CAAA,CAAA;AACtE,aAAA,CAAA;AACA,YAAA,IAAI,CAACnE,OAAO,CAACnH,GAAGgD,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA;AAC7B,SAAA,CAAA;QACA,OAAOuG,QAAAA;AACT;AACA;;;;;;;;;AASC,MACD,OAAegC,qCACb9K,CAAAA,KAA4B,EAC5BwK,IAAiB,EACjB9B,MAAc,EACD;QACb,MAAMnJ,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMqF,QAAWpJ,GAAAA,EAAAA,CAAGL,SAAS,EAAA,CAAGsB,IAAI,KAAK,OAAA;QACzC,IAAIjB,EAAAA,CAAGqJ,UAAU,KAAK,QAAU,EAAA;AAC9B,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,oFAAoF,CAAC,CAAA;AACxG;AACA,QAAA,MAAME,OAAO,IAAI;AACjB,QAAA,MAAMD,QAAW,GAAA,yCAAA;AACjB,QAAA,MAAMiC,aAAgB,GAAA,IAAI,CAACT,+BAA+B,CAACtK,KAAAA,CAAAA;QAC3DT,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,MAAA,CAAA;AAAShD,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,iBAAA,CAAA;AAAoBrB,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,gBAAA;SAAkB,EAAE,WAAA;YACxF,IAAI,CAACsE,EAAE,CAACyC,WAAW,GAAGgB,QAClBpJ,GAAAA,EAAAA,CAAGqB,GAAG,CAACZ,KAAAA,CAAM4H,OAAO,CAACC,aAAa,IAClCtI,EAAGqB,CAAAA,GAAG,CAACZ,KAAM8H,CAAAA,SAAS,CAACH,WAAW,CAAA;AACtC,YAAA,MAAMuB,SAAYlJ,GAAAA,KAAK,CAAC+I,IAAAA,CAAKtK,uBAAuB,EAAG,CAAA;YACvD,IAAI,CAACyG,EAAE,CAACiE,QAAQ,GAAG5J,GAAGiD,KAAK,CAAC0G,SAAS,CAAC,CAAE,CAAA,CAAA;AACxC,YAAA,IAAI,CAAChE,EAAE,CAAC6C,QAAQ,GAAGxI,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAACwI,QAAQ,CAAC5D,CAAC,CAAA;AAC3C,YAAA,IAAI,CAACL,EAAE,CAACkE,SAAS,GAAG7J,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAACwI,QAAQ,CAAC7B,CAAC,CAAA;YAC5C,IAAI,CAACpC,EAAE,CAACmE,WAAW,GAAG,IAAI,CAACF,QAAQ,CAAC5B,CAAC;YACrC,IAAI,CAACrC,EAAE,CAACoE,UAAU,GAAG,IAAI,CAACH,QAAQ,CAAC3D,CAAC;AACpC,YAAA,IAAI,CAACN,EAAE,CAAC8F,cAAc,GAAGzL,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA;AACjC,YAAA,IAAI,CAAC2C,EAAE,CAAC+F,iBAAiB,GAAG1L,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA;AACpC,YAAA,IAAI,CAAC2C,EAAE,CAACgG,SAAS,GAAG3L,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;AAE7B,YAAA,MAAMwK,mBAAmB,CAACC,WAAAA,GAAAA;gBACxBA,WAAY3D,CAAAA,GAAG,CAAClI,EAAGuK,CAAAA,QAAQ,CAACsB,WAAYxB,CAAAA,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;oBAClD,IAAI,CAAC1E,EAAE,CAAC6E,WAAW,GAAGxK,GAAGqB,GAAG,CAACwK,WAAW,CAAC,aAAc,CAAA,CAAA;AACvD,oBAAA,IAAI,CAAClG,EAAE,CAACmG,aAAa,GAAG9L,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA;AAChC,oBAAA,IAAI,CAAC2C,EAAE,CAACoG,cAAc,GAAG/L,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA;oBACjC,IAAI,CAACkF,GAAG,CAAClI,EAAG4I,CAAAA,gBAAgB,CAACiD,WAAW,CAAC,iBAAkB,CAAA,EAAE,CAAI,CAAA,EAAA,WAAA;AAC/D,wBAAA,IAAI,CAAClG,EAAE,CAACO,UAAU,GAAGlG,EAAAA,CAAGoB,KAAK,CAC3BpB,EAAGoG,CAAAA,GAAG,CACJyF,WAAW,CAAC,iBAAA,CAAkB,EAC9B7L,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqE,WAAW,EAAEqB,WAAW,CAAC,aAAc,CAAA,CAAA,EACnDA,WAAW,CAAC,aAAc,CAAA,CAAA,CAAA;AAG9B,wBAAA,IAAI,CAAClG,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE2F,WAAW,CAAC,UAAW,CAAA,CAAA;AAChE,wBAAA,IAAI,CAAClG,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE2F,WAAW,CAAC,UAAW,CAAA,CAAA,CAAA;AACzE,wBAAA,IAAI,CAAClG,EAAE,CAACsD,CAAC,GAAGjJ,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAMuF,CAAAA,EAAAA,WAAW,CAAC,UAAW,CAAA,CAAA;AACpE,wBAAA,IAAI,CAAClG,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAMqF,CAAAA,EAAAA,WAAW,CAAC,WAAY,CAAA,CAAA;wBACrE,IAAI,CAACE,cAAc,GAAG/L,EAAG6F,CAAAA,kBAAkB,CACzCpF,KAAK,CAAC+I,IAAKvK,CAAAA,uBAAuB,EAAG,CAAA,EACrCe,GAAGmB,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA,CACAkF,GAAG;AACP,qBAAA,CAAA;oBACA,IAAI,CAAC9D,GAAG,CAAClI,EAAG4I,CAAAA,gBAAgB,CAACiD,WAAW,CAAC,gBAAiB,CAAA,EAAE,CAAI,CAAA,EAAA,WAAA;AAC9D,wBAAA,IAAI,CAAClG,EAAE,CAACO,UAAU,GAAGlG,EAAAA,CAAGoB,KAAK,CAC3BpB,EAAGoG,CAAAA,GAAG,CACJyF,WAAW,CAAC,gBAAA,CAAiB,EAC7B7L,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqE,WAAW,EAAEqB,WAAW,CAAC,aAAc,CAAA,CAAA,EACnDA,WAAW,CAAC,aAAc,CAAA,CAAA,CAAA;AAG9B,wBAAA,IAAI,CAAClG,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE2F,WAAW,CAAC,UAAW,CAAA,CAAA;AAChE,wBAAA,IAAI,CAAClG,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE2F,WAAW,CAAC,UAAW,CAAA,CAAA,CAAA;AACzE,wBAAA,IAAI,CAAClG,EAAE,CAACsD,CAAC,GAAGjJ,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAMuF,CAAAA,EAAAA,WAAW,CAAC,UAAW,CAAA,CAAA;AACpE,wBAAA,IAAI,CAAClG,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAMqF,CAAAA,EAAAA,WAAW,CAAC,WAAY,CAAA,CAAA;wBACrE,IAAI,CAACC,aAAa,GAAG9L,EAAG6F,CAAAA,kBAAkB,CACxCpF,KAAK,CAAC+I,IAAKvK,CAAAA,uBAAuB,EAAG,CAAA,EACrCe,GAAGmB,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA,CACAkF,GAAG;AACP,qBAAA,CAAA;AACA,oBAAA,IAAI,CAACP,cAAc,GAAGzL,GAAGoG,GAAG,CAAC,IAAI,CAACqF,cAAc,EAAEzL,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC4F,cAAc,EAAEF,YAAYxB,MAAM,CAAA,CAAA;oBAChG,IAAI,CAAC1E,EAAE,CAACsG,eAAe,GAAGxL,KAAMiH,CAAAA,EAAE,CAAC8D,aAAAA,CAAc,CAC/C,IAAI,CAACP,IAAI,EACTjL,GAAGmG,GAAG,CAAC,IAAI,CAAC4F,cAAc,EAAEF,WAAAA,CAAYxB,MAAM,CAAA,CAAA;oBAEhD,IAAI,CAAC1E,EAAE,CAACuG,kBAAkB,GAAGlM,EAAGmG,CAAAA,GAAG,CACjCnG,EAAAA,CAAGmM,GAAG,CAACN,WAAYxB,CAAAA,MAAM,GACzBrK,EAAGoM,CAAAA,IAAI,CAACpM,EAAAA,CAAGoL,GAAG,CAAC,IAAI,CAACU,aAAa,EAAE,IAAI,CAACA,aAAa,CAAA,CAAA,CAAA;AAEvD,oBAAA,IAAI,CAACJ,iBAAiB,GAAG1L,GAAGoG,GAAG,CAC7B,IAAI,CAACsF,iBAAiB,EACtB1L,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC8F,eAAe,EAAE,IAAI,CAACC,kBAAkB,CAAA,CAAA;AAEtD,oBAAA,IAAI,CAACP,SAAS,GAAG3L,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACuF,SAAS,EAAE,IAAI,CAACO,kBAAkB,CAAA;AACjE,iBAAA,CAAA;AACF,aAAA;AAEA,YAAA,IAAI9C,QAAU,EAAA;gBACZ,IAAI,CAACV,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG4I,0BAA4B,EAAA,WAAA;oBACpD,IAAI,CAACvB,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG,CAAG,EAAA,WAAA;AAC3B,wBAAA,IAAI,CAACsE,EAAE,CAACuE,KAAK,GAAGlK,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACgE,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAACC,CAAC,CAAA;AAChD,wBAAA,IAAI,CAAClC,GAAG,CAAClI,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACsB,KAAK,EAAE,IAAI,CAACH,UAAU,CAAG,EAAA,WAAA;AACzD,4BAAA,IAAI,CAACjB,MAAM,EAAA;AACb,yBAAA,CAAA;wBACA,IAAI,CAACnD,EAAE,CAAC0E,MAAM,GAAGV,SAAUW,CAAAA,EAAE,CAACtK,EAAGoG,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC+D,CAAC,CAAA,CAAA,CAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA;wBAC1D,IAAI,CAACzE,EAAE,CAAC6E,WAAW,GAAGxK,GAAGqB,GAAG,CAC1BsI,SAAUW,CAAAA,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAAC,CAAA,GAAI6D,0BAA4B,EAAA,IAAI,CAACE,CAAC,GAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA,CAAA;AAExEwB,wBAAAA,gBAAAA,CAAiB,IAAI,CAAA;AACvB,qBAAA,CAAA;AACF,iBAAA,CAAA;aACK,MAAA;gBACL,IAAI,CAAClD,IAAI,CAAC1I,EAAGqB,CAAAA,GAAG,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAAC0I,UAAU,EAAE,WAAA;oBACzC,IAAI,CAACpE,EAAE,CAACwE,CAAC,GAAGnK,EAAG0K,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,CAAA,CAAA;oBAC3B,IAAI,CAAChF,EAAE,CAACyE,CAAC,GAAGpK,EAAG4K,CAAAA,OAAO,CAAC,IAAI,CAACD,CAAC,EAAE,CAAA,CAAA;oBAC/B,IAAI,CAAChF,EAAE,CAAC0E,MAAM,GAAGV,SAAUW,CAAAA,EAAE,CAACtK,EAAGoG,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC+D,CAAC,CAAA,CAAA,CAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA;oBAC1D,IAAI,CAACzE,EAAE,CAAC6E,WAAW,GAAGxK,GAAGqB,GAAG,CAC1BsI,SAAUW,CAAAA,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAAC,CAAA,GAAI6D,0BAA4B,EAAA,IAAI,CAACE,CAAC,GAAGG,EAAE,CAAC,IAAI,CAACF,CAAC,CAAA,CAAA;AAExEwB,oBAAAA,gBAAAA,CAAiB,IAAI,CAAA;AACvB,iBAAA,CAAA;AACF;AAEA,YAAA,IAAI,CAACjG,EAAE,CAAC0G,QAAQ,GAAG5L,MAAMiH,EAAE,CAAC8D,aAAc,CAAA,CAAC,IAAI,CAACP,IAAI,EAAE,IAAI,CAACQ,cAAc,CAAA;YACzE,IAAI,CAACvD,GAAG,CAAClI,EAAGyJ,CAAAA,QAAQ,CAAC,IAAI,CAACkC,SAAS,EAAE,IAAO,CAAA,EAAA,WAAA;AAC1C,gBAAA,IAAI,CAACxE,OAAO,CAAC,IAAI,CAACkF,QAAQ,CAAA;AAC5B,aAAA,CAAA;AACA,YAAA,IAAI,CAAC1G,EAAE,CAAC2G,qBAAqB,GAAGtM,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACM,iBAAiB,EAAE,IAAI,CAACA,iBAAiB,CAAA;YACrF,IAAI,CAACxD,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAACmE,qBAAqB,EAAE,IAAO,CAAA,EAAA,WAAA;AACzD,gBAAA,IAAI,CAACnF,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACuF,iBAAiB,EAAE1L,EAAGqL,CAAAA,WAAW,CAAC,IAAI,CAACiB,qBAAqB,CAAA,CAAA,CAAA;AACvF,aAAA,CAAA;AACA,YAAA,IAAI,CAACnF,OAAO,CAAC,IAAI,CAACkF,QAAQ,CAAA;AAC5B,SAAA,CAAA;AACA,QAAA,MAAME,eAAe,CAAItC,GAAAA,0BAAAA,GAA6B,CAAKd,IAAAA,UAAU,CAAA,CAAA;AACrE,QAAA,MAAMqD,gBAAgBrD,MAAS,GAAA,CAAA;AAC/B,QAAA,MAAMsD,cAAc,CAAIxC,GAAAA,0BAAAA,GAA6B,CAAKyC,IAAAA,yBAAyB,CAAA,CAAA;AACnF,QAAA,MAAMC,eAAeD,qBAAwB,GAAA,CAAA;AAC7C,QAAA,MAAM/C,YAAYlJ,KAAK,CAAC,IAAI,CAACvB,uBAAuB,EAAG,CAAA;QACvD,OAAOuB,KAAAA,CAAMiH,EAAE,CAAC6B,QAAS,CAAA,CACvB0B,KAAKe,GAAG,EACRhM,EAAGqB,CAAAA,GAAG,CAACsI,SAAS,CAAC4C,YAAa,CAAA,CAACC,aAAc,CAAA,CAAA,EAC7CxM,EAAGqB,CAAAA,GAAG,CAACsI,SAAS,CAAC8C,WAAY,CAAA,CAACE,YAAa,CAAA,CAAA,CAAA;AAE/C;qBAEA,OAAeC,2BACbnM,CAAAA,KAA4B,EAC5BoM,MAAmB,EACnBC,OAAoB,EACP;QACb,MAAM9M,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMwF,QAAW,GAAA,+BAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,QAAA,CAAA;AAAWhD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,SAAA;SAAW,EAAE,WAAA;AACzD,YAAA,IAAI,CAAC2C,EAAE,CAACoH,mBAAmB,GAAG/M,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACyB,MAAM,EAAE,IAAI,CAACA,MAAM,CAAA;YAC7D,IAAI,CAAC3E,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAAC4E,mBAAmB,EAAE,IAAO,CAAA,EAAA,WAAA;AACvD,gBAAA,IAAI,CAACpH,EAAE,CAACqH,CAAC,GAAGhN,GAAGmG,GAAG,CAAC,IAAI,CAAC0G,MAAM,EAAE7M,EAAAA,CAAGqL,WAAW,CAAC,IAAI,CAAC0B,mBAAmB,CAAA,CAAA;AACvE,gBAAA,IAAI,CAACpH,EAAE,CAACsH,SAAS,GAAGjN,EAAAA,CAAGkN,GAAG,CAAC,IAAI,CAACJ,OAAO,EAAE9M,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC6G,CAAC,EAAEhN,EAAAA,CAAGoL,GAAG,CAAC,IAAI,CAAC4B,CAAC,EAAE,IAAI,CAACF,OAAO,CAAA,CAAA,CAAA;AACnF,gBAAA,IAAI,CAACnH,EAAE,CAACwH,oBAAoB,GAAGnN,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAAC6B,SAAS,EAAE,IAAI,CAACA,SAAS,CAAA;gBACpE,IAAI,CAAC/E,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAACgF,oBAAoB,EAAE,IAAO,CAAA,EAAA,WAAA;AACxD,oBAAA,IAAI,CAAChG,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC8G,SAAS,EAAEjN,EAAGqL,CAAAA,WAAW,CAAC,IAAI,CAAC8B,oBAAoB,CAAA,CAAA,CAAA;AAC9E,iBAAA,CAAA;AACF,aAAA,CAAA;AACA,YAAA,IAAI,CAAChG,OAAO,CAAC,IAAI,CAAC2F,OAAO,CAAA;AAC3B,SAAA,CAAA;QACA,OAAOrM,KAAAA,CAAMiH,EAAE,CAAC6B,QAAAA,CAAS,CAACsD,MAAOb,CAAAA,GAAG,EAAEc,OAAAA,CAAQd,GAAG,CAAA;AACnD;AACA,qBACA,OAAOoB,oBAAqB3M,CAAAA,KAA4B,EAAE;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC0E,WAAW,CAAC1E,KAAQ,CAAA,EAAA;AAC5B,YAAA;AACF;AACA,QAAA,MAAM+I,OAAO,IAAI;QACjB,MAAMxJ,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMuB,OAAUtF,GAAAA,EAAAA,CAAGL,SAAS,EAAA,CAAGsB,IAAI,KAAK,OAAA;AACxC,QAAA,MAAMsE,sBAAsB,CAACD,OAAAA;AAC7B,QAAA,MAAME,gCAAmC,GAAA,4BAAA;QACzCxF,EAAGyF,CAAAA,IAAI,CAACD,gCAAkC,EAAA;AAACxF,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,WAAA,CAAA;AAAcpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,YAAA;SAAc,EAAE,WAAA;YACzF,MAAMsE,WAAAA,GAAc,IAAI,CAACpK,0BAA2B,CAAA;YACpD,IAAI,CAACqK,EAAE,CAACM,CAAC,GAAG,IAAI,CAAC1K,8BAA+B,CAAA,CAACyK,CAAC;AAClD,YAAA,IAAI,CAACL,EAAE,CAACO,UAAU,GAAGlG,EAAAA,CAAGmG,GAAG,CAACnG,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACgH,UAAU,CAAG,EAAA,CAAA,CAAA;AACrE,YAAA,IAAI,CAAC1H,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACD,CAAC,CAAA;AAC/C,YAAA,IAAI,CAACN,EAAE,CAACa,MAAM,GAAGxG,GAAGyG,KAAK,CAACzG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACD,CAAC,CAAA,CAAA;AACxD,YAAA,IAAI,CAACN,EAAE,CAACe,EAAE,GAAG1G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACgB,EAAE,GAAG3G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACiB,EAAE,GAAG5G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACkB,EAAE,GAAG7G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACL,CAAC,CAAA;AACpD,YAAA,IAAI,CAACN,EAAE,CAACmB,CAAC,GAAG9G,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAACI,MAAM,EAAE,GAAM,CAAA,EAAA,IAAI,CAACP,CAAC,CAAA;AACnD,YAAA,IAAI,CAACN,EAAE,CAACoB,IAAI,GAAG/G,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACuF,EAAE,EAAE,IAAI,CAACI,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACqB,IAAI,GAAGhH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACwF,EAAE,EAAE,IAAI,CAACG,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACsB,IAAI,GAAGjH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAACyF,EAAE,EAAE,IAAI,CAACE,CAAC,CAAG,EAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACnB,EAAE,CAACuB,IAAI,GAAGlH,EAAAA,CAAG6F,kBAAkB,CAACH,WAAAA,EAAa1F,GAAGmB,IAAI,CAAC,IAAI,CAAC0F,EAAE,EAAE,IAAI,CAACC,CAAC,CAAG,EAAA,CAAA,CAAA;YAC5E,IAAI,CAACK,OAAO,CAACnH,EAAAA,CAAGc,IAAI,CAAC,IAAI,CAACiG,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,IAAI,CAAA,CAAA;AACjE,SAAA,CAAA;AACA,QAAA,MAAME,yBAA4B,GAAA,qBAAA;QAClCpH,EAAGyF,CAAAA,IAAI,CAAC2B,yBAA2B,EAAA;AAACpH,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,YAAA;SAAc,EAAE,WAAA;YAC3D,MAAMiG,aAAAA,GAAgB,IAAI,CAAC7L,iCAAkC,CAAA;YAC7D,MAAM8L,YAAAA,GAAe7G,KAAM8G,CAAAA,gBAAgB,CAAC,cAAA,CAAA;YAC5C,MAAMC,YAAAA,GAAe/G,KAAM8G,CAAAA,gBAAgB,CAAC,cAAA,CAAA;AAC5C,YAAA,IAAI,CAAC5B,EAAE,CAAC8B,EAAE,GAAGhH,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC8B,YAAY,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC+F,UAAU,CAAA;AACxF,YAAA,IAAI,CAAC1H,EAAE,CAACgC,EAAE,GAAGlH,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC8B,YAAY,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC+F,UAAU,CAAA;AACxF,YAAA,IAAI,CAAC1H,EAAE,CAACiC,EAAE,GAAGnH,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC8B,YAAY,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC+F,UAAU,CAAA;AACxF,YAAA,IAAI,CAAC1H,EAAE,CAACkC,EAAE,GAAGpH,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC8B,YAAY,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC+F,UAAU,CAAA;YACxF,IAAI,CAAC1H,EAAE,CAACmC,CAAC,GAAG9H,EAAGoG,CAAAA,GAAG,CAChBpG,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACsB,EAAE,EAAED,YAAAA,CAAaxB,CAAC,CAC9BhG,EAAAA,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACwB,EAAE,EAAEH,YAAAA,CAAaO,CAAC,CAC9B/H,EAAAA,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACyB,EAAE,EAAEJ,aAAaQ,CAAC,CAAA,EAC9BhI,GAAGmG,GAAG,CAAC,IAAI,CAAC0B,EAAE,EAAEL,YAAAA,CAAavB,CAAC,CAAA,CAAA;AAEhC,YAAA,IAAI,CAACN,EAAE,CAACsC,QAAQ,GAAG,IAAI,CAACvM,gCAAiC,CAAA;AACzD,YAAA,IAAI,CAACwM,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACF,QAAQ,CAACD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;gBAC3C,IAAI,CAACrC,EAAE,CAACyC,WAAW,GAAG9C,OAClBtF,GAAAA,EAAAA,CAAGqB,GAAG,CAACZ,KAAAA,CAAM4H,OAAO,CAACC,aAAa,IAClCtI,EAAGqB,CAAAA,GAAG,CAACZ,KAAM8H,CAAAA,SAAS,CAACH,WAAW,CAAA;AACtC,gBAAA,IAAI,CAACzC,EAAE,CAAC6C,QAAQ,GAAGxI,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC4G,QAAQ,CAACjC,CAAC,CAAA;AACzC,gBAAA,IAAI,CAACL,EAAE,CAAC8C,SAAS,GAAGzI,EAAAA,CAAGqB,GAAG,CAAC,IAAI,CAAC4G,QAAQ,CAAChC,CAAC,CAAA;gBAC1C,IAAI,CAACyC,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,WAAA,CAAA,EAAc,GAAGsH,8BAAgC,EAAA,WAAA;AAChE,oBAAA,IAAI,CAACT,GAAG,CAAClI,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACJ,SAAS,CAAG,EAAA,WAAA;AAC5D,wBAAA,IAAI,CAACK,MAAM,EAAA;AACb,qBAAA,CAAA;oBACA,IAAI,CAACnD,EAAE,CAACO,UAAU,GAAGlG,EAAGoG,CAAAA,GAAG,CAACpG,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACiC,WAAW,EAAE,IAAI,CAACK,SAAS,CAAA,EAAG,IAAI,CAACI,SAAS,CAAA;AACpF,oBAAA,IAAI,CAAClD,EAAE,CAACW,MAAM,GAAGtG,EAAGuG,CAAAA,GAAG,CAAC,IAAI,CAACL,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,oBAAA,IAAI,CAAC7C,EAAE,CAACa,MAAM,GAAGxG,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACI,UAAU,EAAE,IAAI,CAACsC,QAAQ,CAAA;AACtD,oBAAA,IAAIjD,mBAAqB,EAAA;wBACvB,IAAI,CAACI,EAAE,CAACoD,KAAK,GAAG/I,EAAGgJ,CAAAA,WAAW,CAC5B,IAAI,CAACvN,gCAAAA,CAAiC,EACtCuE,EAAGkD,CAAAA,KAAK,CAAC,IAAI,CAACoD,MAAM,EAAE,IAAI,CAACE,MAAM,CACjC,EAAA,CAAA,CAAA;qBAEG,MAAA;wBACL,IAAI,CAACb,EAAE,CAACsD,CAAC,GAAGjJ,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAACpG,GAAGoB,KAAK,CAAC,IAAI,CAACkF,MAAM,CAAA,EAAG,MAAM,IAAI,CAAC2B,QAAQ,CAACjC,CAAC,CAAA;wBACtE,IAAI,CAACL,EAAE,CAACmB,CAAC,GAAG9G,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGoG,GAAG,CAACpG,GAAGoB,KAAK,CAAC,IAAI,CAACoF,MAAM,CAAA,EAAG,MAAM,IAAI,CAACyB,QAAQ,CAACF,CAAC,CAAA;wBACtE,IAAI,CAACpC,EAAE,CAACoD,KAAK,GAAG/I,EAAG6F,CAAAA,kBAAkB,CACnC,IAAI,CAACpK,gCAAAA,CAAiC,EACtCuE,EAAGmB,CAAAA,IAAI,CAAC,IAAI,CAAC8H,CAAC,EAAE,IAAI,CAACnC,CAAC,CACtB,EAAA,CAAA,CAAA;AAEJ;AACA,oBAAA,IAAI,CAACoB,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACY,KAAK,CAAChB,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACxC,wBAAA,IAAI,CAACD,CAAC,GAAG9H,EAAAA,CAAGoG,GAAG,CACb,IAAI,CAAC0B,CAAC,EACN9H,EAAAA,CAAGmG,GAAG,CAAC1F,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC,IAAI,CAACuD,KAAK,CAAC/C,CAAC,EAAE,IAAI,CAACqH,UAAU,CAAG,EAAA,IAAI,CAACtE,KAAK,CAAChB,CAAC,CAAA,CAAA;AAElG,qBAAA,CAAA;AACA,oBAAA,IAAI,CAACG,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACY,KAAK,CAAC9C,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACxC,wBAAA,IAAI,CAAC6B,CAAC,GAAG9H,EAAAA,CAAGoG,GAAG,CACb,IAAI,CAAC0B,CAAC,EACN9H,EAAAA,CAAGmG,GAAG,CAAC1F,MAAMiH,EAAE,CAAClC,gCAAiC,CAAA,CAAC,IAAI,CAACuD,KAAK,CAACf,CAAC,EAAE,IAAI,CAACqF,UAAU,CAAG,EAAA,IAAI,CAACtE,KAAK,CAAC9C,CAAC,CAAA,CAAA;AAElG,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF,aAAA,CAAA;YACA,IAAI,CAACkB,OAAO,CAACnH,EAAAA,CAAGmG,GAAG,CAACkB,aAAAA,EAAe,IAAI,CAACS,CAAC,CAAA,CAAA;AAC3C,SAAA,CAAA;AACA,QAAA,MAAMwF,eAAe,CAAC,CAAC,IAAI,CAACC,iCAAiC,CAAC9M,KAAAA,CAAAA;QAC9D,MAAMiF,WAAAA,GAAcjF,KAAK,CAACnF,0BAA2B,CAAA;QACrDmF,KAAMkF,CAAAA,EAAE,CAAC6D,IAAKhN,CAAAA,gBAAgB,CAAC,GAAGwD,EAAAA,CAAG6F,kBAAkB,CACrDH,WACA1F,EAAAA,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGmB,IAAI,CAAC,GAAA,CAAA,EAAMV,KAAK,CAAClF,8BAAAA,CAA+B,CAC1D,EAAA,CAAA,CAAA,CACAiS,EAAE;AACJ/M,QAAAA,KAAAA,CAAMkF,EAAE,CAAC6D,IAAAA,CAAKlN,gBAAgB,CAAC,GAAGmE,KAAK,CAAC2G,yBAA0B,CAAA,CAAC3G,KAAK,CAAC+I,IAAAA,CAAKhN,gBAAgB,CAAC,CAACwJ,CAAC,CAAA;AACjG,QAAA,IAAIsH,YAAc,EAAA;AAChB7M,YAAAA,KAAAA,CAAMkF,EAAE,CAAC6D,IAAAA,CAAKjN,qBAAqB,CAAC,GAAGkE,KAAK,CAAC2G,yBAA0B,CAAA,CAAC3G,KAAK,CAAC+I,IAAAA,CAAKhN,gBAAgB,CAAC,CAACuL,CAAC,CAAA;AACxG;AACF;AACA;;;;;;MAOA,OAAO0F,qBAAsBhN,CAAAA,KAA4B,EAAE;QACzD,MAAMT,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,IAAI/D,EAAAA,CAAGqJ,UAAU,KAAK,QAAU,EAAA;AAC9B,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,oEAAoE,CAAC,CAAA;AACxF;AACA,QAAA,IAAI,CAACtJ,EAAGU,CAAAA,cAAc,EAAG6G,CAAAA,gBAAgB,CAAC,UAAa,CAAA,EAAA;YACrDvH,EAAGU,CAAAA,cAAc,EAAG2H,CAAAA,OAAO,CAACqF,KAAK,GAAG1N,EAAGgD,CAAAA,IAAI,EAAGmG,CAAAA,MAAM,CAAC,UAAA,CAAA;AACvD;AACA,QAAA,MAAMK,OAAO,IAAI;AACjB,QAAA,MAAMmE,MACJlN,GAAAA,KAAK,CAAC+I,IAAAA,CAAKlN,gBAAgB,CAAC,IAAImE,KAAK,CAAC+I,IAAAA,CAAKjN,qBAAqB,CAAC,GAC7D;AAACyD,YAAAA,EAAAA,CAAGc,IAAI,CAAC,YAAA,CAAA;AAAed,YAAAA,EAAAA,CAAGc,IAAI,CAAC,gBAAA;AAAkB,SAAA,GAClDL,KAAK,CAAC+I,IAAKlN,CAAAA,gBAAgB,CAAC,GAC1B;AAAC0D,YAAAA,EAAAA,CAAGc,IAAI,CAAC,YAAA;AAAc,SAAA,GACvB,EAAE;QACVd,EAAGyF,CAAAA,IAAI,CAAC,yBAAA,EAA2BkI,MAAQ,EAAA,WAAA;YACzC,IAAI,CAAChI,EAAE,CAACiI,IAAI,GAAG,IAAI,CAACrG,gBAAgB,CAAC,UAAA,CAAA,CAAayE,GAAG;YACrD,IAAIxC,IAAAA,CAAKpE,WAAW,CAAC3E,KAAQ,CAAA,EAAA;AAC3B,gBAAA,IAAI,CAACmN,IAAI,GAAG5N,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAACwH,IAAI,EAAEpE,KAAKN,mBAAmB,CAAC,IAAI,EAAEwD,uBAAuBV,GAAG,CAAA;AACzF;YACA,IAAI,IAAI,CAAC6B,UAAU,EAAE;gBACnB,IAAI,CAAClI,EAAE,CAACkF,GAAG,GAAG7K,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC0H,UAAU,EAAE7N,EAAAA,CAAGa,IAAI,CAAC,IAAI,CAAC+M,IAAI,EAAE,IAAI5B,GAAG;aAC3D,MAAA;AACL,gBAAA,IAAI,CAACrG,EAAE,CAACkF,GAAG,GAAG,IAAI,CAAC+C,IAAI;AACzB;AACA,YAAA,MAAME,sBAAyBtE,GAAAA,IAAAA,CAAKuE,qCAAqC,CAAC,IAAI,CAAA;AAC9E,YAAA,IAAID,sBAAwB,EAAA;gBAC1B,IAAI,CAACnI,EAAE,CAACqI,kBAAkB,GAAGxE,IAAK+D,CAAAA,iCAAiC,CAAC,IAAI,CAAA;AACxE,gBAAA,IAAI,CAAC5H,EAAE,CAACsI,QAAQ,GAAGjO,EAAAA,CAAGmG,GAAG,CAACqD,IAAAA,CAAK0E,cAAc,CAAC,IAAI,GAAGlO,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAACgK,GAAG,EAAE,CAAA,CAAA,CAAA;gBACvE,IAAI,IAAI,CAACsD,cAAc,EAAE;oBACvB,IAAI,CAACxI,EAAE,CAACyI,YAAY,GAAGpO,EAAGmG,CAAAA,GAAG,CAC3BqD,IAAAA,CAAK6E,kBAAkB,CAAC,IAAI,CAAA,EAC5BrO,GAAGmG,GAAG,CAAC,IAAI,CAACgI,cAAc,EAAEnO,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAAC+M,IAAI,EAAE,CAAA,CAAA,CAAA,CAAA;iBAE5C,MAAA;AACL,oBAAA,IAAI,CAACjI,EAAE,CAACyI,YAAY,GAAGpO,EAAAA,CAAGmG,GAAG,CAACqD,IAAAA,CAAK6E,kBAAkB,CAAC,IAAI,GAAGrO,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAACgK,GAAG,EAAE,CAAA,CAAA,CAAA;AACjF;AACA,gBAAA,IAAI,CAACyD,QAAQ,CAACC,uBAAuB,GAAGvO,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC6H,kBAAkB,EAAE,IAAI,CAACC,QAAQ,CAAA;gBACrF,IAAI,CAACK,QAAQ,CAACE,oBAAoB,GAAGxO,EAAGmG,CAAAA,GAAG,CAAC2H,sBAAAA,EAAwB,IAAI,CAACM,YAAY,CAAA;AACvF;AACA,YAAA,IAAI,CAACjH,OAAO,CAAC,IAAI,CAAC0D,GAAG,CAAA;AACvB,SAAA,CAAA;AACA,QAAA,OACEpK,KAAK,CAAC+I,IAAAA,CAAKlN,gBAAgB,CAAC,IAAImE,KAAK,CAAC+I,IAAAA,CAAKjN,qBAAqB,CAAC,GAC7DkE,MAAMgO,uBAAuB,CAAChO,KAAK,CAAC+I,IAAAA,CAAKlN,gBAAgB,CAAC,EAAEmE,KAAK,CAAC+I,IAAAA,CAAKjN,qBAAqB,CAAC,CAAA,GAC7FkE,KAAK,CAAC+I,IAAAA,CAAKlN,gBAAgB,CAAC,GAC1BmE,MAAMgO,uBAAuB,CAAChO,KAAK,CAAC+I,IAAAA,CAAKlN,gBAAgB,CAAC,CAAA,GAC1DmE,MAAMgO,uBAAuB,EAAA;AAEvC;AACA;;;;;;AAMC,MACD,OAAOC,mBAAoBjO,CAAAA,KAA4B,EAAEwN,QAAqB,EAAEG,YAAyB,EAAE;AACzG,QAAA,MAAM5E,OAAO,IAAI;QACjB,MAAMxJ,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,MAAM+J,sBAAAA,GAAyBtE,IAAKuE,CAAAA,qCAAqC,CAACtN,KAAAA,CAAAA;AAC1E,QAAA,IAAIqN,sBAAwB,EAAA;YAC1B,MAAME,kBAAAA,GAAqBxE,IAAK+D,CAAAA,iCAAiC,CAAC9M,KAAAA,CAAAA;AAClEA,YAAAA,KAAAA,CAAM6N,QAAQ,CAACC,uBAAuB,GAAGvO,EAAGmG,CAAAA,GAAG,CAAC6H,kBAAAA,EAAoBhO,EAAGa,CAAAA,IAAI,CAACoN,QAAAA,CAASjC,GAAG,EAAE,CAAA,CAAA,CAAA;AAC1FvL,YAAAA,KAAAA,CAAM6N,QAAQ,CAACE,oBAAoB,GAAGxO,EAAGmG,CAAAA,GAAG,CAAC2H,sBAAAA,EAAwB9N,EAAGa,CAAAA,IAAI,CAACuN,YAAAA,CAAapC,GAAG,EAAE,CAAA,CAAA,CAAA;AACjG;AACF;AACA;;;;;;;;;;MAWA,OAAO2C,aAAclO,CAAAA,KAA4B,EAAsB;AACrE,QAAA,OAAO,KAAM,CAAC,IAAI,CAACnE,gBAAgB,CAAC,IAAoB,IAAA;AAC1D;AACA;;;;;;;AAOC,MACD,OAAOsS,mBAAAA,CAAoBnO,KAA4B,EAAEoM,MAAoB,EAAE;QAC7E,MAAM7M,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,IAAI/D,EAAAA,CAAGqJ,UAAU,KAAK,QAAU,EAAA;AAC9B,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,kEAAkE,CAAC,CAAA;AACtF;QACA,MAAMuF,SAAAA,GAAY7O,GAAG8O,uBAAuB,EAAA;AAC5C,QAAA,IAAI,CAACD,SAAAA,IAAa,CAACA,SAAAA,CAAUE,OAAO,EAAI,EAAA;AACtC,YAAA,MAAM,IAAIzF,KAAAA,CAAM,CAAC,oEAAoE,CAAC,CAAA;AACxF;AACA,QAAA,MAAM0F,kBAAkB,CAACnC,MAAAA;AACzB,QAAA,IAAImC,mBAAmBvO,KAAK,CAAC,IAAI,CAAChE,2BAA2B,CAAC,EAAE;AAC9D,YAAA,OAAOgE,KAAK,CAAC,IAAI,CAAChE,2BAA2B,CAAC;AAChD;AACA,QAAA,IAAI,CAACoQ,MAAQ,EAAA;AACX,YAAA,IAAI,CAACpM,KAAAA,CAAM8G,gBAAgB,CAAC,QAAW,CAAA,EAAA;gBACrC9G,KAAM4H,CAAAA,OAAO,CAAC4G,QAAQ,GAAGjP,GAAGgD,IAAI,EAAA,CAAGmG,MAAM,CAAC,QAAA,CAAA;AAC5C;YACA0D,MAASpM,GAAAA,KAAAA,CAAM8G,gBAAgB,CAAC,QAAA,CAAA;AAClC;AACA,QAAA,IAAI,IAAI,CAACnC,WAAW,CAAC3E,KAAQ,CAAA,EAAA;AAC3BoM,YAAAA,MAAAA,GAAS,IAAI,CAACtB,qCAAqC,CAAC9K,OAAOoM,MAAQqC,EAAAA,mBAAAA,CAAAA;AACrE;AACA,QAAA,IAAIC,cAAiBtC,GAAAA,MAAAA;AACrB,QAAA,IAAIpM,KAAK,CAAC,IAAI,CAACnE,gBAAgB,CAAC,EAAE;AAChC6S,YAAAA,cAAAA,GAAiBnP,EAAGmG,CAAAA,GAAG,CAAC1F,KAAK,CAAC,IAAI,CAACnE,gBAAgB,CAAC,EAAE0D,EAAGa,CAAAA,IAAI,CAACgM,MAAAA,EAAQ,IAAIb,GAAG;AAC/E;AACA,QAAA,IAAIgD,eAAiB,EAAA;AACnBvO,YAAAA,KAAAA,CAAMkF,EAAE,CAAC,IAAI,CAAClJ,2BAA2B,CAAC,GAAG0S,cAAAA;AAC7CA,YAAAA,cAAAA,GAAiB1O,KAAK,CAAC,IAAI,CAAChE,2BAA2B,CAAC;AAC1D;QACA,OAAO0S,cAAAA;AACT;AACA;;;;;;;AAOC,MACD,OAAOC,oBAAAA,CAAqB3O,KAA4B,EAAEqM,OAAqB,EAAE;QAC/E,MAAM9M,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,IAAI/D,EAAAA,CAAGqJ,UAAU,KAAK,QAAU,EAAA;AAC9B,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,mEAAmE,CAAC,CAAA;AACvF;QACA,MAAMuF,SAAAA,GAAY7O,GAAG8O,uBAAuB,EAAA;AAC5C,QAAA,IAAI,CAACD,SAAAA,IAAa,CAACA,SAAAA,CAAUE,OAAO,EAAI,EAAA;AACtC,YAAA,MAAM,IAAIzF,KAAAA,CAAM,CAAC,qEAAqE,CAAC,CAAA;AACzF;AACA,QAAA,IAAI,CAACwD,OAAS,EAAA;AACZ,YAAA,IAAI,CAACrM,KAAAA,CAAM8G,gBAAgB,CAAC,SAAY,CAAA,EAAA;gBACtC9G,KAAM4H,CAAAA,OAAO,CAACgH,SAAS,GAAGrP,GAAGa,IAAI,EAAA,CAAGsI,MAAM,CAAC,SAAA,CAAA;AAC7C;YACA2D,OAAUrM,GAAAA,KAAAA,CAAM8G,gBAAgB,CAAC,SAAA,CAAA;AACnC;AACA,QAAA,IAAI,IAAI,CAACnC,WAAW,CAAC3E,KAAQ,CAAA,EAAA;AAC3BqM,YAAAA,OAAAA,GAAU9M,EAAGa,CAAAA,IAAI,CACf,IAAI,CAAC0K,qCAAqC,CAAC9K,KAAAA,EAAOqM,OAAQd,CAAAA,GAAG,EAAEsD,oBAAAA,CAAAA,EAC/DxC,QAAQ7G,CAAC,CAAA;AAEb;AACA,QAAA,IAAIxF,KAAK,CAAC,IAAI,CAACnE,gBAAgB,CAAC,EAAE;YAChCwQ,OAAU9M,GAAAA,EAAAA,CAAGa,IAAI,CACfb,EAAAA,CAAGmG,GAAG,CAAC1F,KAAK,CAAC,IAAI,CAACnE,gBAAgB,CAAC,EAAE0D,EAAAA,CAAGa,IAAI,CAACiM,OAAQd,CAAAA,GAAG,EAAE,CAAIA,CAAAA,CAAAA,CAAAA,GAAG,EACjEc,OAAAA,CAAQ7G,CAAC,CAAA;AAEb;QACA,IAAI,IAAI,CAACb,WAAW,CAAC3E,UAAUA,KAAM8G,CAAAA,gBAAgB,CAAC,QAAW,CAAA,EAAA;YAC/D,MAAM4H,cAAAA,GAAiB1O,KAAK,CAAC,IAAI,CAAChE,2BAA2B,CAAC,IAAI,IAAI,CAACmS,mBAAmB,CAACnO,KAAAA,CAAAA;AAC3FqM,YAAAA,OAAAA,GAAU9M,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAAC+L,2BAA2B,CAACnM,KAAAA,EAAO0O,cAAgBrC,EAAAA,OAAAA,CAAQd,GAAG,CAAA,EAAGc,QAAQ7G,CAAC,CAAA;AACnG;QACA,OAAO6G,OAAAA;AACT;AACA;;;;MAKA,OAAOoB,cAAezN,CAAAA,KAA4B,EAAE;QAClD,MAAMT,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,OAAQtD,KAAK,CAACzF,yBAA0B,CAAA,IACtCgF,EAAGc,CAAAA,IAAI,CACL,IAAI,CAACyO,mBAAmB,CAAC9O,KAAAA,EAAO,CAChC,CAAA,EAAA,IAAI,CAAC8O,mBAAmB,CAAC9O,KAAAA,EAAO,CAChC,CAAA,EAAA,IAAI,CAAC8O,mBAAmB,CAAC9O,KAAAA,EAAO,CAChC,CAAA,EAAA,IAAI,CAAC8O,mBAAmB,CAAC9O,KAAO,EAAA,CAAA,CAAA,CAAA;AAEtC;AACA;;;;MAKA,OAAO4N,kBAAmB5N,CAAAA,KAA4B,EAAE;QACtD,MAAMT,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;AACjB,QAAA,MAAMgG,UAAa,GAAA,IAAI,CAACC,aAAa,CAAChP,KAAAA,CAAAA;QACtC,IAAIA,KAAK,CAACzF,yBAAAA,CAA0B,EAAE;AACpC,YAAA,IAAIgF,EAAGL,CAAAA,SAAS,EAAGsB,CAAAA,IAAI,KAAK,QAAU,EAAA;gBACpCjB,EAAGyF,CAAAA,IAAI,CAAC,sBAAwB,EAAA;AAACzF,oBAAAA,EAAAA,CAAGqB,GAAG,CAAC,YAAA;iBAAc,EAAE,WAAA;AACtD,oBAAA,IAAI,CAAC6G,GAAG,CAAClI,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACF,UAAU,EAAE,IAAI,CAACtU,qCAAqC,CAAG,EAAA,WAAA;AAC9E,wBAAA,IAAI,CAACiM,OAAO,CAAC,IAAI,CAAClM,8BAA+B,CAAA,CAAA;AACnD,qBAAA,CAAA,CAAG0U,KAAK,CAAC,WAAA;AACP,wBAAA,IAAI,CAACxI,OAAO,CAAC,IAAI,CAACnM,yBAA0B,CAAA,CAAA;AAC9C,qBAAA,CAAA;AACF,iBAAA,CAAA;gBACA,OAAOyF,KAAAA,CAAMmP,oBAAoB,CAACJ,UAAAA,CAAAA;aAC7B,MAAA;AACL,gBAAA,OAAO/O,MAAMoP,OAAO,CAClB7P,EAAG0P,CAAAA,KAAK,CAACF,UAAY/O,EAAAA,KAAK,CAACvF,oCAAAA,CAAqC,GAChEuF,KAAK,CAACxF,+BAA+B,EACrCwF,KAAK,CAACzF,yBAA0B,CAAA,CAAA;AAEpC;SACK,MAAA;YACLgF,EAAGyF,CAAAA,IAAI,CAAC,sBAAwB,EAAA;AAACzF,gBAAAA,EAAAA,CAAGqB,GAAG,CAAC,YAAA;aAAc,EAAE,WAAA;AACtD,gBAAA,IAAI,CAACsE,EAAE,CAACmK,SAAS,GAAG9P,EAAG+P,CAAAA,cAAc,CAACvG,IAAAA,CAAK+F,mBAAmB,CAAC,IAAI,EAAE,GAAGvJ,CAAC,CAAA;gBACzE,IAAI,CAACL,EAAE,CAACuE,KAAK,GAAG,IAAI,CAAC2F,OAAO,CAAC7P,EAAG0P,CAAAA,KAAK,CAAC,IAAI,CAACF,UAAU,EAAE,IAAI,CAACM,SAAS,CAAA,EAAG9P,EAAGqB,CAAAA,GAAG,CAAC,CAAA,CAAA,EAAIrB,EAAGqB,CAAAA,GAAG,CAAC,CAAA,CAAA,CAAA;gBAC1F,IAAI,CAAC8F,OAAO,CACVnH,EAAAA,CAAGc,IAAI,CACL0I,IAAAA,CAAK+F,mBAAmB,CAAC9O,KAAO,EAAA,IAAI,CAACyJ,KAAK,CAAA,EAC1CV,KAAK+F,mBAAmB,CAAC9O,OAAOT,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAE,CACnDV,CAAAA,CAAAA,EAAAA,IAAAA,CAAK+F,mBAAmB,CAAC9O,KAAAA,EAAOT,GAAGoG,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAE,KACnDV,IAAK+F,CAAAA,mBAAmB,CAAC9O,KAAOT,EAAAA,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA;AAGzD,aAAA,CAAA;YACA,OAAOzJ,KAAAA,CAAMmP,oBAAoB,CAACJ,UAAAA,CAAAA;AACpC;AACF;AACA;;;;AAIC,MACD,OAAOD,mBAAAA,CAAoB9O,KAA4B,EAAEuP,YAAkC,EAAE;QAC3F,MAAMhQ,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,OAAOtD,KAAK,CAACrF,0BAA2B,CAAA,CAACkP,EAAE,CACzCtK,EAAGoG,CAAAA,GAAG,CACJpG,EAAAA,CAAGmG,GAAG,CAAC1F,KAAK,CAACtF,iCAAAA,CAAkC,EAAE6E,EAAAA,CAAGiQ,IAAI,CAACxP,KAAM8H,CAAAA,SAAS,CAAC2H,aAAa,CACtFzP,CAAAA,EAAAA,KAAK,CAACpF,iCAAAA,CAAkC,EACxC2E,EAAAA,CAAGiQ,IAAI,CAACD,YAAAA,CAAAA,CAAAA,CAAAA;AAGd;AACA;;;;;MAMA,OAAOG,eAAgB1P,CAAAA,KAA4B,EAAE;QACnD,OAAO,IAAI,CAACyN,cAAc,CAACzN,KAAAA,CAAAA;AAC7B;AACA;;;;;;MAOA,OAAOR,0BACLQ,KAAoB,EACpBpB,QAAiB,EACjBC,QAAiB,EACjB8Q,SAAkB,EACZ;QACN,MAAMpQ,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,IAAIqM,SAAW,EAAA;AACb3P,YAAAA,KAAK,CAACtF,iCAAkC,CAAA,GAAG6E,GAAGiQ,IAAI,EAAA,CAAGxO,OAAO,CAAC,CAAA,CAAA;AAC7DhB,YAAAA,KAAK,CAACpF,iCAAkC,CAAA,GAAG2E,GAAGiQ,IAAI,EAAA,CAAGxO,OAAO,CAAC,CAAA,CAAA;YAC7DhB,KAAK,CAACrF,0BAA2B,CAAA,GAAG4E,EAAGa,CAAAA,IAAI,CAAC,KAAS,IAAA,CAAA,CAAE,EAAGwC,CAAAA,aAAa,CAAC,CAAA,CAAA;SACnE,MAAA;AACL5C,YAAAA,KAAK,CAACzF,yBAA0B,CAAA,GAAGgF,GAAGc,IAAI,EAAA,CAAGW,OAAO,CAAC,CAAA,CAAA;AACrDhB,YAAAA,KAAK,CAACxF,8BAA+B,CAAA,GAAG+E,GAAGc,IAAI,EAAA,CAAGW,OAAO,CAAC,CAAA,CAAA;AAC1DhB,YAAAA,KAAK,CAACvF,oCAAqC,CAAA,GAAG8E,GAAGqB,GAAG,EAAA,CAAGI,OAAO,CAAC,CAAA,CAAA;AAC/DhB,YAAAA,KAAK,CAAC1F,yBAA0B,CAAA,GAAGiF,GAAGa,IAAI,EAAA,CAAGY,OAAO,CAAC,CAAA,CAAA;AACvD;AACA,QAAA,IAAIpC,QAAU,EAAA;YACZoB,KAAK,CAACnF,0BAA2B,CAAA,GAAG0E,EAAG6C,CAAAA,KAAK,GAAGpB,OAAO,CAAC,CAAGgD,CAAAA,CAAAA,UAAU,CAAC,oBAAA,CAAA;AACrEhE,YAAAA,KAAK,CAACjF,iCAAkC,CAAA,GAAGwE,GAAGc,IAAI,EAAA,CAAGW,OAAO,CAAC,CAAA,CAAA;AAC7DhB,YAAAA,KAAK,CAAClF,8BAA+B,CAAA,GAAGyE,GAAGmB,IAAI,EAAA,CAAGM,OAAO,CAAC,CAAA,CAAA;YAC1DhB,KAAK,CAAChF,gCAAiC,CAAA,GAAGuE,EAAG6C,CAAAA,KAAK,GAAGpB,OAAO,CAAC,CAAGgD,CAAAA,CAAAA,UAAU,CAAC,oBAAA,CAAA;AAC3EhE,YAAAA,KAAK,CAAC/E,gCAAiC,CAAA,GAAGsE,GAAGa,IAAI,EAAA,CAAGY,OAAO,CAAC,CAAA,CAAA;AAC9D;AACA,QAAA,IAAInC,QAAU,EAAA;YACZmB,KAAK,CAAC9E,uBAAwB,CAAA,GAAGqE,EAAG6C,CAAAA,KAAK,GAAGpB,OAAO,CAAC,CAAGgD,CAAAA,CAAAA,UAAU,CAAC,oBAAA,CAAA;AAClEhE,YAAAA,KAAK,CAAC7E,uBAAAA,CAAwB,GAC5BoE,EAAAA,CAAGa,IAAI,CAAC,CAAIoJ,GAAAA,0BAAAA,GAA6B,CAAIoG,GAAAA,4BAAAA,CAA6B,EAAGhN,CAAAA,aAAa,CAAC,CAAA,CAAA;AAC/F;AACF;AACA,qBACA,OAAO7C,yBAAAA,CAA0BR,EAAkB,EAAEK,GAAgB,EAAE;AACrE,QAAA,IAAI,CAACJ,yBAAyB,CAC5BD,EAAAA,CAAGU,cAAc,EACjB,EAAA,CAAC,EAAEL,IAAIgC,aAAa,GAAGC,oBAAqBgO,CAAAA,cAAc,CAC1D,EAAA,CAAC,EAAEjQ,GAAIgC,CAAAA,aAAa,GAAGC,oBAAAA,CAAqBiO,eAAe,CAAD,EAC1D,CAAC,EAAElQ,GAAIgC,CAAAA,aAAa,GAAGC,oBAAAA,CAAqBkO,UAAU,CAAD,CAAA;AAEzD;qBAEA,OAAOC,iBAAAA,CAAkBC,SAAoB,EAAErQ,GAAgB,EAAEmB,MAAc,EAAEmP,MAAe,EAAE;QAChG,MAAM9F,GAAAA,GAAMrJ,OAAOoP,gBAAgB,EAAA;AACnC,QAAA,MAAMC,SACJxQ,GAAAA,GAAAA,CAAIU,aAAa,IACjBV,IAAIW,UAAU,CAAEC,IAAI,KAAKK,0BACzBjB,IAAAA,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKgB,6BAAAA;AAC3B,QAAA,MAAMtB,YAAe,GAAA;YACnBmQ,QAAU,EAAA,IAAI/T,OAAQ8N,CAAAA,GAAAA,CAAI7E,CAAC,EAAE6E,IAAI9C,CAAC,EAAE8C,GAAI7C,CAAAA,CAAC,EAAE,CAAA,CAAA;AAC3C+I,YAAAA,UAAAA,EAAY,IAAIC,OAAQ3Q,CAAAA,GAAAA,CAAI4Q,WAAW,EAAE5Q,IAAI6Q,YAAY,CAAA;AACzDC,YAAAA,oBAAAA,EAAsBN,SAAYrP,GAAAA,MAAAA,CAAO4P,gBAAgB,GAAG5P,OAAO2P,oBAAoB;AACvFnD,YAAAA,kBAAAA,EAAoBxM,OAAO2P,oBAAoB;AAC/CE,YAAAA,mBAAAA,EAAqBR,SAAYrP,GAAAA,MAAAA,CAAO6P,mBAAmB,GAAG7P,OAAO8P,uBAAuB;AAC5FC,YAAAA,WAAAA,EAAa/P,OAAO+P,WAAW;AAC/BD,YAAAA,uBAAAA,EAAyB9P,OAAO8P,uBAAuB;AACvDE,YAAAA,gBAAAA,EAAkBhQ,OAAOiQ,mBAAmB,EAAA;AAC5CC,YAAAA,mBAAAA,EAAqBlQ,OAAOmQ,sBAAsB,EAAA;AAClDC,YAAAA,UAAAA,EAAYpQ,OAAOoQ,UAAU;AAC7BC,YAAAA,WAAAA,EAAarQ,OAAOqQ,WAAW;AAC/BlE,YAAAA,MAAAA,EAAQ,IAAI5Q,OAAAA,CAAQyE,MAAOsQ,CAAAA,YAAY,IAAItQ,MAAOuQ,CAAAA,WAAW,EAAI1R,EAAAA,GAAAA,CAAI2R,IAAI,GAAG,EAAK,GAAA,CAAA,EAAGrB,SAAS,CAAI,GAAA,CAAA,CAAA;AACjGsB,YAAAA,eAAAA,EAAiBzQ,MAAO0Q,CAAAA,GAAG,GAAG1Q,MAAAA,CAAO2Q,kBAAkB,GAAG,CAAA;YAC1DC,mBAAqB5Q,EAAAA,MAAAA,CAAO4Q,mBAAmB,GAAG,CAAI,GAAA,CAAA;AACtDC,YAAAA,cAAAA,EAAgBhS,IAAIX,MAAM,CAAC4S,SAAS,CAACC,YAAY,GAAG,KAAA;AACpDC,YAAAA,WAAAA,EAAanS,IAAIX,MAAM,CAAC4S,SAAS,CAACG,cAAc,GAAG,KAAA;YACnDC,WAAa,EAAA,IAAI,CAACC,cAAc,CAACtS,GAAAA,CAAAA;AACjCmP,YAAAA,UAAAA,EAAYnP,GAAIX,CAAAA,MAAM,CAAC4S,SAAS,CAACM;AACnC,SAAA;QACA,IAAIvS,GAAAA,CAAIU,aAAa,IAAIV,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKC,sBAAwB,EAAA;YACxEP,YAAamN,CAAAA,sBAAsB,GAAGtM,MAAAA,CAAOqR,YAAY;AAC3D;AACA,QAAA,IAAIxS,GAAIW,CAAAA,UAAU,CAAEC,IAAI,KAAKiB,sBAAwB,EAAA;YACnD,IAAI7B,GAAAA,CAAI2E,kBAAkB,EAAE;AAC1B0L,gBAAAA,SAAAA,CAAUoC,UAAU,CAACrY,6BAA+B4F,EAAAA,GAAAA,CAAI2E,kBAAkB,CAAA;AAC1E0L,gBAAAA,SAAAA,CAAUqC,QAAQ,CAChBrY,kCACA,EAAA,IAAIsW,OAAQ3Q,CAAAA,GAAAA,CAAI2E,kBAAkB,CAACgO,KAAK,EAAE3S,GAAI2E,CAAAA,kBAAkB,CAACiO,MAAM,CAAA,CAAA;AAE3E;YACA,IAAI5S,GAAAA,CAAI4E,iBAAiB,EAAE;AACzByL,gBAAAA,SAAAA,CAAUoC,UAAU,CAACnY,4BAA8B0F,EAAAA,GAAAA,CAAI4E,iBAAiB,CAAA;AACxEyL,gBAAAA,SAAAA,CAAUqC,QAAQ,CAChBnY,iCACA,EAAA,IAAIoW,OAAQ3Q,CAAAA,GAAAA,CAAI4E,iBAAiB,CAAC+N,KAAK,EAAE3S,GAAI4E,CAAAA,iBAAiB,CAACgO,MAAM,CAAA,CAAA;AAEzE;YACA,IAAI5S,GAAAA,CAAI6E,UAAU,EAAE;AAClBwL,gBAAAA,SAAAA,CAAUoC,UAAU,CAACjY,0BAAAA,EAA4BwF,GAAI6E,CAAAA,UAAU,EAAEgO,YAAa,CAAA,eAAA,CAAA,CAAA;AAC9ExC,gBAAAA,SAAAA,CAAUqC,QAAQ,CAChBjY,+BAAAA,EACA,IAAIiC,OAAQsD,CAAAA,GAAAA,CAAI6E,UAAU,CAAC8N,KAAK,EAAE3S,GAAI6E,CAAAA,UAAU,CAAC+N,MAAM,EAAE5S,IAAI6E,UAAU,CAACiO,aAAa,EAAE,CAAA,CAAA,CAAA;AAE3F;AACF;QACAzC,SAAUqC,CAAAA,QAAQ,CAAC,QAAUpS,EAAAA,YAAAA,CAAAA;AAC/B;qBAEA,OAAOyS,yBAA0B1C,CAAAA,SAAoB,EAAErQ,GAAgB,EAAEqB,KAAoB,EAAE;AAC7F,QAAA,IAAIA,KAAO,EAAA;AACT,YAAA,MAAMgC,eAAkBrD,GAAAA,GAAAA,CAAIwB,aAAa,CAAEC,GAAG,CAACJ,KAAAA,CAAAA;YAC/CgP,SAAUqC,CAAAA,QAAQ,CAAC,OAAS,EAAA;AAC1BjW,gBAAAA,gBAAAA,EAAkB4E,MAAM5E,gBAAgB;AACxCuW,gBAAAA,eAAAA,EAAiB3R,MAAM1E,kBAAkB;AACzC4U,gBAAAA,UAAAA,EAAYlQ,MAAMkQ,UAAU;gBAC5B0B,SAAW5P,EAAAA,eAAAA,CAAgBtG,eAAe,CAAC,CAAE,CAAA;gBAC7CG,UAAYmG,EAAAA,eAAAA,CAAgB3B,IAAI,CAAEwR,SAAS,CAAC,IAAI,CAAC5W,mBAAmB,CAACY,UAAU,CAAA;AAC/EiW,gBAAAA,SAAAA,EAAW9R,MAAM8R;AACnB,aAAA,CAAA;YACA9P,eAAgB3B,CAAAA,IAAI,EAAE0R,mBAAAA,CAAoB/C,SAAWhN,EAAAA,eAAAA,CAAAA;AACvD;AACF;AACA,qBACA,OAAOgQ,cAAAA,CACLhD,SAAoB,EACpB5S,qBAA6B,EAC7BC,OAAe,EACfC,QAAgB,EAChBC,gBAAkC,EAClCE,eAAgC,EAChCwV,oBAA+B,EAC/BC,kBAA6B,EAC7B;AACA,QAAA,IAAI,CAAC/V,YAAY,CAACC,qBAAqB,GAAGA,qBAAAA;AAC1C,QAAA,IAAI,CAACD,YAAY,CAACE,OAAO,GAAGA,OAAAA;AAC5B,QAAA,IAAI,CAACF,YAAY,CAACG,QAAQ,GAAGA,QAAAA;AAC7B,QAAA,IAAI,CAACH,YAAY,CAACI,gBAAgB,GAAGA,gBAAAA;AACrC,QAAA,IAAI,CAACJ,YAAY,CAACM,eAAe,GAAGA,eAAAA;AACpCuS,QAAAA,SAAAA,CAAUqC,QAAQ,CAAC,KAAO,EAAA,IAAI,CAAClV,YAAY,CAAA;QAC3C6S,SAAUoC,CAAAA,UAAU,CAAC/Y,kCAAoC4Z,EAAAA,oBAAAA,CAAAA;QACzDjD,SAAUoC,CAAAA,UAAU,CAAC9Y,gCAAkC4Z,EAAAA,kBAAAA,CAAAA;AACzD;AACA;;;;;;;;;;;MAYA,OAAOjB,cAAetS,CAAAA,GAAgB,EAAE;QACtC,OAAOA,GAAAA,CAAIwT,KAAK,CAACC,YAAY,KAAK,aAAazT,GAAImB,CAAAA,MAAM,CAACuS,QAAQ,GAAG,CAAA;AACvE;AACA;;;;;;;;;AASC,MACD,OAAOC,2BAA4BtS,CAAAA,KAAoB,EAAErB,GAAgB,EAAE4T,GAAa,EAAE;QACxF,MAAMC,GAAAA,GAAMxS,MAAMzE,mBAAmB;QACrC,MAAMkX,MAAAA,GAASF,OAAO,IAAIlX,OAAAA,EAAAA;AAC1BoX,QAAAA,MAAAA,CAAOC,OAAO,CAACF,GAAAA,CAAIlO,CAAC,EAAEkO,IAAInM,CAAC,EAAEmM,GAAIlM,CAAAA,CAAC,EAAEkM,GAAIjO,CAAAA,CAAC,GAAG,IAAI,CAAC0M,cAAc,CAACtS,GAAAA,CAAAA,CAAAA;QAChE,OAAO8T,MAAAA;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;MAuBA,OAAOE,oBAAqBhU,CAAAA,GAAgB,EAAE;QAC5C,MAAMwE,GAAAA,GAAMxE,IAAIwE,GAAG;AACnB,QAAA,IAAI,CAACA,GAAK,EAAA;YACR,OAAO,CAAA;AACT;AACA,QAAA,MAAMyP,QAAWzP,GAAAA,GAAAA,CAAInD,KAAK,CAAC4S,QAAQ,IAAI,CAAA;AACvC,QAAA,OAAOjU,GAAIwT,CAAAA,KAAK,CAACC,YAAY,KAAK,UAAA,GAC9B,IAAK,CAACnB,cAAc,CAACtS,GAAAA,CAAAA,GAAOkU,yBAA0BD,QACtDA,GAAAA,QAAAA;AACN;AACA,qBACA,OAAOE,gBACL9D,CAAAA,SAAoB,EACpBrQ,GAAgB,EAChBoU,aAAwC,EACxCC,WAAoC,EACpCC,WAA6B,EAC7BC,iBAA4B,EAC5B;AACA,QAAA,MAAMjX,gBAAmB,GAAA,IAAI,CAAC0W,oBAAoB,CAAChU,GAAAA,CAAAA;QACnDqQ,SAAUqC,CAAAA,QAAQ,CAAC,OAAS,EAAA;AAC1BnW,YAAAA,MAAAA,EAAQyD,IAAIwU,QAAQ,GAAGxU,GAAIwU,CAAAA,QAAQ,CAAC7X,kBAAkB,CAACgP,GAAG,EAAA,CAAG8I,OAAO,CAAC,EAAM,CAAA,GAAA,IAAI,CAAC7Y,aAAa;YAC7FwY,aAAeA,EAAAA,aAAAA;YACfC,WAAaA,EAAAA,WAAAA;AACb/W,YAAAA,gBAAAA;AACAC,YAAAA,wBAAAA,EAA0ByC,IAAIwE,GAAG,CAAEnD,KAAK,CAACqT,gBAAgB,IAAI,CAAA;AAC7DC,YAAAA,iBAAAA,EAAmB,IAAIC,UAAW,CAAA;AAACL,gBAAAA,iBAAAA,CAAkB5B,KAAK;AAAE4B,gBAAAA,iBAAAA,CAAkB3B;AAAO,aAAA,CAAA;YACrF,GAAI5S,GAAAA,CAAI8C,qBAAqB,GAAG;gBAAE+R,eAAiB7U,EAAAA,GAAAA,CAAI8U,cAAc,EAAED,eAAmB,IAAA;AAAE,aAAA,GAAI;AAClG,SAAA,CAAA;QACAxE,SAAU0E,CAAAA,SAAS,CAACxb,yBAA2B+a,EAAAA,WAAAA,CAAAA;QAC/CjE,SAAUoC,CAAAA,UAAU,CAACjZ,gCAAkC+a,EAAAA,iBAAAA,CAAAA;QACvD,IAAIvU,GAAAA,CAAI8C,qBAAqB,EAAE;;;;;AAK7BuN,YAAAA,SAAAA,CAAUoC,UAAU,CAClB5Y,wBACAmG,EAAAA,GAAAA,CAAIgV,iBAAiB,IAAI,IAAI,CAACC,kBAAkB,CAACjV,GAAIX,CAAAA,MAAM,GAC3DwT,YAAa,CAAA,eAAA,CAAA,CAAA;AAEjB;QACAxC,SAAUoC,CAAAA,UAAU,CAAChZ,0BAAAA,EAA4BuG,GAAIwT,CAAAA,KAAK,CAAChP,GAAG,CAAC0Q,GAAG,CAACC,kBAAkB,CAACnV,GAAAA,CAAAA,CAAAA;AACtF,QAAA,IAAI,IAAI,CAACqE,iBAAiB,CAACrE,GAAM,CAAA,EAAA;YAC/B,IAAI,CAACoV,uBAAuB,CAAC/E,SAAWrQ,EAAAA,GAAAA,CAAAA;AAC1C;QACA,IAAIA,GAAAA,CAAIuE,YAAY,EAAE;YACpBvE,GAAIwE,CAAAA,GAAG,CAAEnD,KAAK,CAACoD,QAAQ,CAAC4Q,eAAe,CAAChF,SAAWrQ,EAAAA,GAAAA,CAAAA;AACrD;AACF;AACA;;;;;;;;;;;;;;;;;;;;MAqBA,OAAOqE,iBAAkBrE,CAAAA,GAAgB,EAAW;AAClD,QAAA,OAAO,CAAC,CAACA,GAAIsV,CAAAA,aAAa,IAAI,CAAC,CAACtV,GAAIuV,CAAAA,iBAAiB,IAAIvV,GAAAA,CAAIW,UAAU,CAAEC,IAAI,KAAKiB,sBAAAA;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCC,MACD,OAAO2T,cAAepV,CAAAA,KAA4B,EAAEqV,GAAgB,EAAExB,QAAqB,EAAe;QACxG,MAAMtU,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMwF,QAAW,GAAA,kBAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,KAAA,CAAA;AAAQnB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,GAAA;SAAK,EAAE,WAAA;AACjD,YAAA,IAAI,CAAC+F,OAAO,CACVnH,GAAG8F,GAAG,CAAC9F,GAAGmG,GAAG,CAAC,IAAI,CAAC2P,GAAG,EAAE9V,EAAAA,CAAGoG,GAAG,CAAC,IAAI,CAAC2P,CAAC,EAAE,CAAK/V,CAAAA,CAAAA,EAAAA,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmB,IAAI,CAAC,CAAA,CAAA,EAAInB,GAAGmG,GAAG,CAACnG,EAAGmM,CAAAA,GAAG,CAAC,IAAI,CAAC2J,GAAG,CAAG,EAAA,IAAI,CAACC,CAAC,CAAA,CAAA,CAAA,CAAA;AAElG,SAAA,CAAA;AACA,QAAA,OAAO/V,GAAGU,cAAc,EAAE,CAAC6I,QAAAA,CAAS,CAACuM,GAAKxB,EAAAA,QAAAA,CAAAA;AAC5C;AACA;;;;;;;;;;;AAWC,MACD,OAAO0B,gBACLvV,CAAAA,KAA4B,EAC5BwV,MAAmB,EACnB3B,QAAqB,EACR;QACb,MAAMtU,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMwF,QAAW,GAAA,oBAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,QAAA,CAAA;AAAWnB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,GAAA;SAAK,EAAE,WAAA;AACpD,YAAA,IAAI,CAAC+F,OAAO,CACVnH,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAACmQ,MAAM,EAAEjW,GAAGkN,GAAG,CAAClN,EAAGmB,CAAAA,IAAI,CAACnB,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAAC2P,CAAC,EAAE,CAAK/V,CAAAA,CAAAA,EAAAA,EAAAA,CAAGmG,GAAG,CAACnG,EAAAA,CAAGmM,GAAG,CAAC,IAAI,CAAC8J,MAAM,CAAG,EAAA,IAAI,CAACF,CAAC,CAAA,CAAA,CAAA,CAAA;AAE7F,SAAA,CAAA;AACA,QAAA,OAAO/V,GAAGU,cAAc,EAAE,CAAC6I,QAAAA,CAAS,CAAC0M,MAAQ3B,EAAAA,QAAAA,CAAAA;AAC/C;AACA,qBACA,OAAO3P,2BAA4B3E,CAAAA,EAAkB,EAAE;QACrD,MAAMS,KAAAA,GAAQT,GAAGU,cAAc,EAAA;QAC/B,MAAMwV,aAAAA,GAAgBlW,EAAGY,CAAAA,YAAY,CAAC;AACpCZ,YAAAA,EAAAA,CAAGa,IAAI,CAAC,QAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,QAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,QAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,UAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,QAAA,CAAA;AACRb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,YAAA,CAAA;;;;AAIRb,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,YAAA,CAAA;YACPrB,EAAGa,CAAAA,IAAI,CAACtG,kBAAAA,CAAmB,CAAC,cAAA,CAAA;;YAE5ByF,EAAGa,CAAAA,IAAI,CAACtG,kBAAAA,CAAmB,CAAC,YAAA;AAC7B,SAAA,CAAA;AACDkG,QAAAA,KAAK,CAACjG,2BAAAA,CAA4B,GAAG0b,aAAAA,EAAAA,CAAgBzU,OAAO,CAAC,CAAA,CAAA;;;QAG7DhB,KAAK,CAACrG,wBAAyB,CAAA,GAAG4F,EAC/B6C,CAAAA,KAAK,EACLpB,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;;;QAGjCtC,KAAK,CAACpG,+BAAgC,CAAA,GAAG2F,EACtC6C,CAAAA,KAAK,EACLpB,CAAAA,OAAO,CAAC,CAAA,CAAA,CACRqB,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;MAuBA,OAAOoT,qBACL1V,CAAAA,KAA4B,EAC5BwN,QAAqB,EACrBuF,SAAsB,EACtB4C,cAA2B,EAC3B/V,GAAgB,EACO;AACvB,QAAA,IAAI,CAAC,IAAI,CAACqE,iBAAiB,CAACrE,GAAM,CAAA,EAAA;YAChC,OAAO,IAAA;AACT;AACA,QAAA,OAAO,IAAI,CAACgW,kBAAkB,CAAC5V,KAAAA,EAAOwN,UAAUuF,SAAW4C,EAAAA,cAAAA,CAAAA;AAC7D;AACA;;;;;;;;;;;;;;;;;;AAkBC,MACD,OAAOC,kBAAAA,CACL5V,KAA4B,EAC5BwN,QAAqB,EACrBuF,SAAsB,EACtB4C,cAA2B,EAC3BE,OAAU,GAAA,IAAI,EACD;QACb,MAAMtW,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,MAAMwF,QAAAA,GAAW+M,UAAU,yBAA4B,GAAA,+BAAA;QACvDtW,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,UAAA,CAAA;AAAahD,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,WAAA,CAAA;AAAcrB,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,gBAAA;SAAkB,EAAE,WAAA;AACvF,YAAA,IAAI,CAAC2C,EAAE,CAAC4Q,EAAE,GAAG,IAAI,CAAC/b,2BAA4B,CAAA;;AAE9C,YAAA,IAAI,CAAC0N,GAAG,CACNlI,EAAAA,CAAGwW,EAAE,CACHxW,EAAAA,CAAGuK,QAAQ,CAAC,IAAI,CAACiJ,SAAS,EAAEiD,yBAC5BzW,EAAGyJ,CAAAA,QAAQ,CAACzJ,EAAAA,CAAGoL,GAAG,CAAC,IAAI,CAACgL,cAAc,EAAE,IAAI,CAACG,EAAE,CAACG,QAAQ,CAAC1K,GAAG,GAAG,KAEjE,CAAA,CAAA,EAAA,WAAA;AACE,gBAAA,IAAI,CAAC7E,OAAO,CAACnH,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,aAAA,CAAA;;;AAIF,YAAA,IAAI,CAAC2C,EAAE,CAACgR,GAAG,GAAG3W,EAAAA,CAAGkN,GAAG,CAAC,IAAI,CAACe,QAAQ,EAAE,IAAI,CAACsI,EAAE,CAACK,MAAM,CAAC5K,GAAG,CAAA;;;YAGtD,IAAI,CAACrG,EAAE,CAACkR,MAAM,GAAG7W,EAAGmG,CAAAA,GAAG,CACrBnG,EAAAA,CAAGmB,IAAI,CAACnB,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACuL,GAAG,EAAE,IAAI,CAACJ,EAAE,CAACO,MAAM,CAAC9K,GAAG,CAAGhM,EAAAA,EAAAA,CAAGoL,GAAG,CAAC,IAAI,CAACuL,GAAG,EAAE,IAAI,CAACJ,EAAE,CAACQ,MAAM,CAAC/K,GAAG,CACjFhM,CAAAA,EAAAA,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAACoV,EAAE,CAACO,MAAM,CAAC7Q,CAAC,EAAE,IAAI,CAACsQ,EAAE,CAACQ,MAAM,CAAC9Q,CAAC,CAAA,CAAA;;;YAI5C,IAAI,CAACN,EAAE,CAACqR,SAAS,GAAGnb,YAAaga,CAAAA,cAAc,CAAC,IAAI,EAAE,IAAI,CAACgB,MAAM,EAAE,IAAI,CAACN,EAAE,CAACU,UAAU,CAAChR,CAAC,CAAA;AACvF,YAAA,IAAI,CAACN,EAAE,CAACuR,EAAE,GAAGlX,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC6Q,SAAS,EAAE,GAAMhX,CAAAA,EAAAA,EAAAA,CAAGmB,IAAI,CAAC,GAAA,CAAA,CAAA;;;;;;;;YAQzD,IAAI,CAACwE,EAAE,CAACwR,SAAS,GAAGnX,EAAGoX,CAAAA,GAAG,CAACpX,EAAGqX,CAAAA,aAAa,CAACrX,EAAGmM,CAAAA,GAAG,CAAC,IAAI,CAAC0K,MAAM,CAAG7W,EAAAA,EAAAA,CAAGmB,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;AAgBzE,YAAA,IAAI,CAACwE,EAAE,CAAC2R,KAAK,GAAGtX,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC0Q,MAAM,EAAE,IAAI,CAACA,MAAM,CAAA;YAC/C,IAAI,CAAClR,EAAE,CAAC4R,QAAQ,GAAGvX,EAAGoM,CAAAA,IAAI,CAACpM,EAAGoM,CAAAA,IAAI,CAACpM,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACkM,KAAK,EAAE,IAAI,CAACA,KAAK,CAAA,CAAA,CAAA;YAChE,IAAI,CAAC3R,EAAE,CAAC6R,IAAI,GAAGxX,EAAGkN,CAAAA,GAAG,CAAC,CAAA,EAAGlN,EAAGyX,CAAAA,UAAU,CAAC,IAAI,CAAClB,EAAE,CAAC5I,MAAM,CAAC1H,CAAC,EAAE,CAAA,EAAG,IAAI,CAACsR,QAAQ,CAAA,CAAA;AACzE,YAAA,IAAI,CAAC5R,EAAE,CAAC+R,WAAW,GAAG1X,EAAG6F,CAAAA,kBAAkB,CAAC,IAAI,CAACxL,+BAAgC,CAAA,EAAE,IAAI,CAAC6c,EAAE,EAAE,CAAA,CAAA;;;;YAI5F,IAAI,CAACvR,EAAE,CAACgS,KAAK,GAAG3X,EAAGoB,CAAAA,KAAK,CAAC,EAAC,CAAA;AAC1B,YAAA,IAAI,CAACuE,EAAE,CAACiS,MAAM,GAAG5X,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA;YACzB,IAAI,CAAC0F,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG9G,kBAAoB,EAAA,WAAA;AAC5C,gBAAA,IAAI,CAAC2N,GAAG,CAAClI,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACuB,CAAC,EAAE,IAAI,CAACoM,EAAE,CAACsB,UAAU,CAAG,EAAA,WAAA;AACxD,oBAAA,IAAI,CAAC/O,MAAM,EAAA;AACb,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACnD,EAAE,CAACmS,UAAU,GAAG,IAAI,CAACvB,EAAE,CAACwB,UAAU,CAACzN,EAAE,CAAC,IAAI,CAACH,CAAC,CAAA;;;;;;;;;AASjD,gBAAA,IAAI,CAACxE,EAAE,CAACqS,QAAQ,GAAGhY,EAAAA,CAAGkN,GAAG,CAAC,IAAI,CAAC4K,UAAU,CAAC7R,CAAC,EAAE,IAAI,CAACgI,QAAQ,CAAClG,CAAC,CAAA;AAC5D,gBAAA,IAAI,CAACpC,EAAE,CAACsS,QAAQ,GAAGjY,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC6R,QAAQ,EAAE,IAAI,CAACzB,EAAE,CAACG,QAAQ,CAACzQ,CAAC,CAAA;gBAC3D,IAAI,CAACN,EAAE,CAACuS,SAAS,GAAGlY,EAAGkN,CAAAA,GAAG,CAAC,IAAI,CAACe,QAAQ,CAACkK,EAAE,EAAEnY,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACoQ,EAAE,CAACG,QAAQ,CAACyB,EAAE,EAAE,IAAI,CAACF,QAAQ,CAAA,CAAA;AACtF,gBAAA,IAAI,CAACtS,EAAE,CAACyS,UAAU,GAAG,IAAI,CAAC7B,EAAE,CAAC8B,YAAY,CAAC/N,EAAE,CAAC,IAAI,CAACH,CAAC,CAAA;AACnD,gBAAA,IAAI,CAACjC,GAAG,CACNlI,EAAGsY,CAAAA,GAAG,CACJtY,EAAGoX,CAAAA,GAAG,CAACpX,EAAAA,CAAG4I,gBAAgB,CAAC,IAAI,CAACsP,SAAS,EAAE,IAAI,CAACE,UAAU,CAAC5K,EAAE,CAC7DxN,CAAAA,EAAAA,EAAAA,CAAGoX,GAAG,CAACpX,GAAGqX,aAAa,CAAC,IAAI,CAACa,SAAS,EAAE,IAAI,CAACE,UAAU,CAACG,EAAE,CAE5D,CAAA,CAAA,EAAA,WAAA;;;;;oBAKE,IAAI,CAAC5S,EAAE,CAAC6S,QAAQ,GAAGxY,EAAGa,CAAAA,IAAI,CACxBb,EAAAA,CAAGoB,KAAK,CAACpB,GAAG0P,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,KAC1BnK,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,CAC1BnK,CAAAA,CAAAA,EAAAA,EAAAA,CAAGoB,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,CAAA,CAAA,CAAA,EAC1BnK,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;AAE5B,oBAAA,IAAI,CAACxE,EAAE,CAAC8S,UAAU,GAAGzY,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAACsM,WAAW,EAAE,IAAI,CAACc,QAAQ,CAAA;;;;;;oBAM3D,IAAI,CAAC7S,EAAE,CAAC+S,WAAW,GAAG1Y,EAAGwW,CAAAA,EAAE,CAACxW,EAAG2Y,CAAAA,GAAG,CAAC,IAAI,CAACxB,SAAS,CAAGnX,EAAAA,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACsQ,UAAU,EAAE,GAAA,CAAA,CAAA;AACpF,oBAAA,IAAI,CAACvQ,GAAG,CAAC,IAAI,CAACwQ,WAAW,EAAE,WAAA;;;;;;;;;wBASzB,IAAI,CAAC/S,EAAE,CAACiT,QAAQ,GAAG5Y,GAAGmG,GAAG,CACvBnG,EAAGkN,CAAAA,GAAG,CAAC,IAAI,CAACuL,UAAU,EAAEne,mBACxB0F,CAAAA,EAAAA,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAAC+V,SAAS,CAAA,EACvB,IAAI,CAACK,IAAI,CAAA;wBAEX,IAAI,CAAC7R,EAAE,CAACkT,SAAS,GAAG7Y,GAAGkN,GAAG,CAAClN,EAAGoG,CAAAA,GAAG,CAAC,IAAI,CAAC0R,UAAU,CAAC7R,CAAC,EAAE,IAAI,CAAC2S,QAAQ,CAAA,EAAG,IAAI,CAAC3K,QAAQ,CAAClG,CAAC,CAAA;wBACpF,IAAI,CAACG,GAAG,CAAClI,EAAGmI,CAAAA,WAAW,CAAC,IAAI,CAAC0Q,SAAS,EAAE,CAAI,CAAA,EAAA,WAAA;4BAC1C,IAAI,CAAC3Q,GAAG,CACNlI,EAAGwW,CAAAA,EAAE,CAACxW,EAAGyJ,CAAAA,QAAQ,CAAC,IAAI,CAACkO,KAAK,EAAE,CAAI3X,CAAAA,EAAAA,EAAAA,CAAGyJ,QAAQ,CAAC,IAAI,CAACoP,SAAS,EAAE,IAAI,CAAClB,KAAK,CACxE,CAAA,EAAA,WAAA;AACE,gCAAA,IAAI,CAACA,KAAK,GAAG,IAAI,CAACkB,SAAS;AAC3B,gCAAA,IAAI,CAACjB,MAAM,GAAG,IAAI,CAACE,UAAU,CAAC9L,GAAG;AACnC,6BAAA,CAAA;AAEJ,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF,iBAAA,CAAA;AAEJ,aAAA,CAAA;YACA,IAAI,CAAC9D,GAAG,CAAClI,EAAGqX,CAAAA,aAAa,CAAC,IAAI,CAACM,KAAK,EAAE,CAAI,CAAA,EAAA,WAAA;AACxC,gBAAA,IAAI,CAACxQ,OAAO,CAACnH,EAAAA,CAAGgD,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,aAAA,CAAA;AACA,YAAA,IAAI,CAAC2C,EAAE,CAACmT,UAAU,GAAG9Y,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACwR,KAAK,EAAE,IAAI,CAACpB,EAAE,CAACG,QAAQ,CAACzQ,CAAC,CAAA;YAC1D,IAAI,CAACN,EAAE,CAACoT,aAAa,GAAG/Y,EAAGgZ,CAAAA,GAAG,CAAChZ,EAAGiZ,CAAAA,GAAG,CAACjZ,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACyR,MAAM,EAAE,IAAI,CAACkB,UAAU,CAAA,CAAA,CAAA;AACzE,YAAA,IAAI,CAACnT,EAAE,CAACuT,OAAO,GAAGlZ,GAAG6F,kBAAkB,CAAC,IAAI,CAACzL,yBAAyB,EAAE,IAAI,CAAC8c,EAAE,EAAE,GAAGlR,CAAC;AACrF,YAAA,IAAIsQ,OAAS,EAAA;;;AAGX,gBAAA,IAAI,CAAC3Q,EAAE,CAAC2Q,OAAO,GAAGtW,EAAAA,CAAG8F,GAAG,CACtB,CAAA,EACA9F,EAAGoG,CAAAA,GAAG,CAAC,CAAGpG,EAAAA,EAAAA,CAAGmG,GAAG,CAACnG,EAAAA,CAAGmM,GAAG,CAACnM,EAAAA,CAAGkN,GAAG,CAAC,IAAI,CAACyK,KAAK,EAAE,IAAI,CAACpB,EAAE,CAAC5I,MAAM,CAAC5F,CAAC,IAAI,IAAI,CAACwO,EAAE,CAAC5I,MAAM,CAAC3F,CAAC,CAAA,CAAA,CAAA;aAE5E,MAAA;;;;;;;;;;AAUL,gBAAA,IAAI,CAACrC,EAAE,CAAC2Q,OAAO,GAAGtW,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;AAC7B;YACA,IAAI,CAACuE,EAAE,CAAC0E,MAAM,GAAGrK,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACoQ,EAAE,CAAC5I,MAAM,CAAC3H,CAAC,EAAE,IAAI,CAACsQ,OAAO,EAAE,IAAI,CAACkB,IAAI,CAAA;YACjE,IAAI,CAAC7R,EAAE,CAACwT,OAAO,GAAGnZ,EAAGoG,CAAAA,GAAG,CAAC,CAAA,EAAGpG,EAAGmG,CAAAA,GAAG,CAACnG,EAAGkN,CAAAA,GAAG,CAAC,IAAI,CAACgM,OAAO,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC7O,MAAM,CAAA,CAAA;;AAEvE,YAAA,IAAI,CAAC1E,EAAE,CAACyT,SAAS,GAAGpZ,EAAAA,CAAGyX,UAAU,CAAC,CAAG,EAAA,IAAA,EAAM,IAAI,CAACE,KAAK,CAAA;YACrD,IAAI,CAACxQ,OAAO,CAACnH,EAAGqZ,CAAAA,GAAG,CAACrZ,EAAAA,CAAGgD,IAAI,CAAC,CAAIhD,CAAAA,EAAAA,EAAAA,CAAGmG,GAAG,CAACnG,GAAGgD,IAAI,CAAC,IAAI,CAACmW,OAAO,CAAA,EAAG,IAAI,CAACJ,aAAa,CAAA,EAAG,IAAI,CAACK,SAAS,CAAA,CAAA;AACnG,SAAA,CAAA;AACA,QAAA,OAAOpZ,GAAGU,cAAc,EAAE,CAAC6I,QAAS,CAAA,CAAC0E,UAAUuF,SAAW4C,EAAAA,cAAAA,CAAAA;AAC5D;AACA,qBACA,OAAOX,uBAAAA,CAAwB/E,SAAoB,EAAErQ,GAAgB,EAAE;QACrE,MAAMiZ,QAAAA,GAAWjZ,IAAIkZ,oBAAoB;QACzC7I,SAAUqC,CAAAA,QAAQ,CAACvY,2BAA6B,EAAA;AAC9Csc,YAAAA,MAAAA,EAAQwC,SAASxC,MAAM;AACvBC,YAAAA,MAAAA,EAAQuC,SAASvC,MAAM;AACvBH,YAAAA,MAAAA,EAAQ0C,SAAS1C,MAAM;AACvBF,YAAAA,QAAAA,EAAU4C,SAAS5C,QAAQ;AAC3B/I,YAAAA,MAAAA,EAAQ2L,SAAS3L,MAAM;AACvBsJ,YAAAA,UAAAA,EAAYqC,SAASrC,UAAU;AAC/BY,YAAAA,UAAAA,EAAYyB,SAASzB,UAAU;AAC/BQ,YAAAA,YAAAA,EAAciB,SAASjB,YAAY;AACnCN,YAAAA,UAAAA,EAAYuB,SAASvB;AACvB,SAAA,CAAA;AACArH,QAAAA,SAAAA,CAAUoC,UAAU,CAClB1Y,wBAAAA,EACAiG,GAAImZ,CAAAA,mBAAmB,EACvBtG,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEfxC,QAAAA,SAAAA,CAAUoC,UAAU,CAClBzY,+BAAAA,EACAgG,GAAIoZ,CAAAA,yBAAyB,EAC7BvG,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEjB;qBAEA,OAAOwG,sBAAuBhJ,CAAAA,SAAoB,EAAErQ,GAAgB,EAAEqB,KAAoB,EAAE;AAC1F,QAAA,MAAMgC,eAAkBrD,GAAAA,GAAAA,CAAIwB,aAAa,CAAEC,GAAG,CAACJ,KAAAA,CAAAA;QAC/C,IAAI,CAAC/E,mBAAmB,CAACC,MAAM,GAAGyD,GAAIwU,CAAAA,QAAQ,GAC1CxU,GAAIwU,CAAAA,QAAQ,CAAC7X,kBAAkB,CAACgP,GAAG,EAAG8I,CAAAA,OAAO,CAAC,EAAC,CAAA,GAC/C,IAAI,CAAC7Y,aAAa;AACtB,QAAA,IAAI,CAACU,mBAAmB,CAACE,cAAc,GAAG6G,gBAAgBiW,iBAAiB;QAC3E,IAAI,CAAChd,mBAAmB,CAACG,gBAAgB,CAAC8c,GAAG,CAAClY,MAAM5E,gBAAgB,CAAA;QACpE,IAAI,CAACH,mBAAmB,CAACK,kBAAkB,CAAC4c,GAAG,CAAClY,MAAM1E,kBAAkB,CAAA;QACxE,IAAI,CAACgX,2BAA2B,CAACtS,KAAAA,EAAOrB,KAAK,IAAI,CAAC1D,mBAAmB,CAACM,mBAAmB,CAAA;QACzF,IAAI,CAACN,mBAAmB,CAACO,WAAW,CAAC0c,GAAG,CAAClY,MAAMxE,WAAW,CAAA;QAC1D,IAAI,CAACP,mBAAmB,CAACQ,gBAAgB,CAACyc,GAAG,CAAClW,gBAAgBvG,gBAAgB,CAAA;QAC9E,IAAI,CAACR,mBAAmB,CAACS,eAAe,CAACwc,GAAG,CAAClW,eAAAA,CAAgBtG,eAAe,CAAC,CAAE,CAAA,CAAA;QAC/E,IAAI,CAACT,mBAAmB,CAACU,kBAAkB,CAACuc,GAAG,CAAClW,gBAAgBmW,YAAY,CAAA;QAC5E,IAAI,CAACld,mBAAmB,CAACW,eAAe,CAACsc,GAAG,CAAClW,gBAAgBpG,eAAe,CAAA;QAC5EoG,eAAgB3B,CAAAA,IAAI,CAAEwR,SAAS,CAAC,IAAI,CAAC5W,mBAAmB,CAACY,UAAU,CAAA;QACnE,IAAI,CAACZ,mBAAmB,CAACa,cAAc,CAACoc,GAAG,CAAClW,gBAAgBlG,cAAc,CAAA;QAC1E,IAAI,CAACb,mBAAmB,CAACe,cAAc,GAAGgE,KAAMoY,CAAAA,MAAM,CAACpc,cAAc;QACrE,IAAI,CAACf,mBAAmB,CAACgB,gBAAgB,GAAG,IAAI,CAAC0W,oBAAoB,CAAChU,GAAAA,CAAAA;QACtE,IAAI,CAAC1D,mBAAmB,CAACiB,wBAAwB,GAAGyC,GAAIwE,CAAAA,GAAG,EAAEnD,KAAAA,CAAMqT,gBAAoB,IAAA,CAAA;AACvFrE,QAAAA,SAAAA,CAAUqC,QAAQ,CAAC,OAAS,EAAA,IAAI,CAACpW,mBAAmB,CAAA;AACpD+T,QAAAA,SAAAA,CAAUoC,UAAU,CAClB7Y,uBAAAA,EACAyJ,gBAAgBE,SAAS,EACzBF,gBAAgBqW,gBAAgB,CAAA;AAElC,QAAA,IAAI,IAAI,CAACrV,iBAAiB,CAACrE,GAAM,CAAA,EAAA;YAC/B,IAAI,CAACoV,uBAAuB,CAAC/E,SAAWrQ,EAAAA,GAAAA,CAAAA;AAC1C;QACAqQ,SAAUoC,CAAAA,UAAU,CAAChZ,0BAAAA,EAA4BuG,GAAIwT,CAAAA,KAAK,CAAChP,GAAG,CAAC0Q,GAAG,CAACC,kBAAkB,CAACnV,GAAAA,CAAAA,CAAAA;QACtF,IAAIA,GAAAA,CAAIuE,YAAY,EAAE;YACpBvE,GAAIwE,CAAAA,GAAG,CAAEnD,KAAK,CAACoD,QAAQ,CAAC4Q,eAAe,CAAChF,SAAWrQ,EAAAA,GAAAA,CAAAA;AACrD;AACF;AACA;;;;;;;;MASA,OAAO2Z,mBAAoBvZ,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMiB,KAAK,CAAC/D,gBAAgB;AACrC;AACA;;;;;;;;MASA,OAAOsc,2BAA4BxZ,CAAAA,KAA4B,EAAe;QAC5E,OAAOA,KAAAA,CAAMiB,KAAK,CAAC9D,wBAAwB,IAAI6C,KAAMsD,CAAAA,QAAQ,CAAC3C,KAAK,CAAC,CAAA,CAAA;AACtE;AACA;;;;MAKA,OAAO8Y,oBAAqBzZ,CAAAA,KAA4B,EAAe;QACrE,OAAOA,KAAK,CAAC9F,4BAA6B,CAAA;AAC5C;AACA;;;;MAKA,OAAOwf,wBAAyB1Z,CAAAA,KAA4B,EAAe;QACzE,OAAOA,KAAK,CAAC7F,iCAAkC,CAAA;AACjD;AACA;;;;MAKA,OAAOwf,qBAAsB3Z,CAAAA,KAA4B,EAAe;QACtE,OAAOA,KAAK,CAAChG,6BAA8B,CAAA;AAC7C;AACA;;;;MAKA,OAAO4f,yBAA0B5Z,CAAAA,KAA4B,EAAe;QAC1E,OAAOA,KAAK,CAAC/F,kCAAmC,CAAA;AAClD;AACA;;;;MAKA,OAAO4f,kBAAmB7Z,CAAAA,KAA4B,EAAe;QACnE,OAAOA,KAAK,CAAC5F,0BAA2B,CAAA;AAC1C;AACA;;;;MAKA,OAAO0f,sBAAuB9Z,CAAAA,KAA4B,EAAe;AACvE,QAAA,OAAOA,KAAK,CAAC3F,+BAAgC,CAAA,CAAC0S,EAAE;AAClD;AACA;;;;MAKA,OAAOgN,+BAAgC/Z,CAAAA,KAA4B,EAAe;AAChF,QAAA,OAAOA,KAAK,CAAC3F,+BAAgC,CAAA,CAACkN,CAAC;AACjD;AACA;;;;MAKA,OAAOwN,kBAAmB/U,CAAAA,KAA4B,EAAe;QACnE,OAAOA,KAAK,CAAC3G,0BAA2B,CAAA;AAC1C;AACA;;;;;;;;;;;;;AAaC,MACD,OAAO2gB,wBAAAA,CAAyBha,KAA4B,EAAEia,SAAsB,EAAe;QACjG,MAAM1a,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,OAAO/D,GAAGmG,GAAG,CACXnG,GAAG6F,kBAAkB,CAAC,IAAI,CAAC2P,kBAAkB,CAAC/U,KAAAA,CAAAA,EAAQia,WAAW,CAAGC,CAAAA,CAAAA,GAAG,EACvE,IAAI,CAACX,mBAAmB,CAACvZ,KAAAA,CAAAA,CAAAA;AAE7B;AACA;;;;;;;;;;MAWA,OAAOma,qBAAsBna,CAAAA,KAA4B,EAAe;QACtE,OAAOA,KAAAA,CAAMe,MAAM,CAACkR,WAAW;AACjC;AACA;;;;MAKA,OAAOmI,cAAepa,CAAAA,KAA4B,EAAe;QAC/D,OAAOA,KAAAA,CAAMe,MAAM,CAACgR,WAAW;AACjC;AACA;;;;;;;;;;;;;;;;;;AAkBC,MACD,OAAOsI,2BAAAA,CAA4Bra,KAAoB,EAAEsa,YAAoB,EAAE;QAC7E,MAAM/a,EAAAA,GAAKS,MAAMsD,QAAQ;AACzBtD,QAAAA,KAAAA,CAAMe,MAAM,GAAGxB,EACZY,CAAAA,YAAY,CAAC;AAACZ,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,aAAA,CAAA;AAAgBpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,OAAA,CAAA;AAAUpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,OAAA,CAAA;AAAUpB,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,OAAA;AAAS,SAAA,CAAA,EAAA,CAC/FK,OAAO,CAACsZ,YAAAA,CAAAA;AACb;AACA;;;;;;;;;AASC,MACD,OAAOC,uBAAAA,CAAwBtK,SAAoB,EAAErQ,GAAgB,EAAE;QACrEqQ,SAAUqC,CAAAA,QAAQ,CAAC,QAAU,EAAA;AAC3BP,YAAAA,WAAAA,EAAanS,IAAIX,MAAM,CAAC4S,SAAS,CAACG,cAAc,GAAG,KAAA;YACnDwI,KAAO,EAAA,CAAA;YACPC,KAAO,EAAA,CAAA;YACPC,KAAO,EAAA;AACT,SAAA,CAAA;AACF;AACA;;;;MAKA,OAAOC,mBAAoB3a,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMe,MAAM,CAAC6Q,cAAc;AACpC;AACA;;;;MAKA,OAAOgJ,iBAAkB5a,CAAAA,KAA4B,EAAe;AAClE,QAAA,OAAOA,KAAMe,CAAAA,MAAM,CAACsP,QAAQ,CAAC9E,GAAG;AAClC;AACA;;;;MAKA,OAAOsP,wBAAyB7a,CAAAA,KAA4B,EAAe;QACzE,OAAOA,KAAAA,CAAMe,MAAM,CAACyQ,eAAe;AACrC;AACA;;;;MAKA,OAAOsJ,aAAc9a,CAAAA,KAA4B,EAAe;QAC9D,OAAOA,KAAAA,CAAMe,MAAM,CAACuP,UAAU;AAChC;AACA;;;;MAKA,OAAOtB,aAAchP,CAAAA,KAA4B,EAAe;QAC9D,OAAOA,KAAAA,CAAMe,MAAM,CAACgO,UAAU;AAChC;AACA;;;;MAKA,OAAOgM,sBAAuB/a,CAAAA,KAA4B,EAAe;AACvE,QAAA,OAAOA,KAAMe,CAAAA,MAAM,CAACsP,QAAQ,CAAC7K,CAAC;AAChC;AACA;;;;MAKA,OAAOwV,kBAAmBhb,CAAAA,KAA4B,EAAE;QACtD,OAAOA,KAAAA,CAAMe,MAAM,CAACka,SAAS;AAC/B;AACA;;;;MAKA,OAAOC,eAAgBlb,CAAAA,KAA4B,EAAe;QAChE,OAAOA,KAAAA,CAAMe,MAAM,CAACmM,MAAM;AAC5B;AACA,qBACA,OAAOiO,gBAAiBnb,CAAAA,KAA4B,EAAe;QACjE,OAAOA,KAAAA,CAAMiB,KAAK,CAAC+S,aAAa;AAClC;AACA,qBACA,OAAOoH,cAAepb,CAAAA,KAA4B,EAAe;QAC/D,OAAOA,KAAAA,CAAMiB,KAAK,CAACgT,WAAW;AAChC;AACA;;;;;MAMA,OAAOoH,kBAAmBrb,CAAAA,KAA4B,EAAe;QACnE,OAAOA,KAAAA,CAAMiB,KAAK,CAACwT,eAAe;AACpC;AACA;;;;;;MAOA,OAAO6G,iBAAkBtb,CAAAA,KAA4B,EAAe;QAClE,OAAOA,KAAK,CAACtG,6BAA8B,CAAA;AAC7C;AACA;;;;AAIC,MACD,OAAO6hB,iBAAAA,CAAkBtL,SAAoB,EAAEuL,UAAmB,EAAE;AAClEvL,QAAAA,SAAAA,CAAUqC,QAAQ,CAAC5Y,6BAA+B8hB,EAAAA,UAAAA,GAAa,CAAI,GAAA,CAAA,CAAA;AACrE;AACA;;;;;;MAOA,OAAO3G,kBAAmB5V,CAAAA,MAAsB,EAAkB;QAChE,IAAIiE,GAAAA,GAAM,IAAI,CAACtH,gBAAgB;AAC/B,QAAA,IAAI,CAACsH,GAAAA,IAAOA,GAAIuY,CAAAA,QAAQ,EAAE;AACxBvY,YAAAA,GAAAA,GAAMjE,OAAOyc,oBAAoB,CAAC,YAAc,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA;gBACvDC,UAAY,EAAA;AACd,aAAA,CAAA;AACAzY,YAAAA,GAAAA,CAAI0Y,IAAI,GAAG,iBAAA;YACX,IAAI,CAAChgB,gBAAgB,GAAGsH,GAAAA;AAC1B;QACA,OAAOA,GAAAA;AACT;AACA,qBACA,OAAO2Y,6BAA8B7b,CAAAA,KAA4B,EAAe;QAC9E,OAAOA,KAAK,CAAC5G,gCAAiC,CAAA;AAChD;AACA;;;;;;;;;;;;;;;;AAgBC,MACD,OAAO0iB,gBAAAA,CAAiB9b,KAA4B,EAAE+b,UAAuB,EAAe;QAC1F,MAAMxc,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;AACjB,QAAA,MAAMD,QAAW,GAAA,oBAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGqB,GAAG,CAAC,YAAA;SAAc,EAAE,WAAA;AACxC,YAAA,IAAI,CAAC6G,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACqU,UAAU,EAAEhT,IAAAA,CAAKsS,kBAAkB,CAAC,IAAI,CAAI,CAAA,EAAA,WAAA;AACvE,gBAAA,IAAI,CAAC3U,OAAO,CAACnH,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA,CAAA;AACxB,aAAA,CAAA;;YAEA,IAAI,CAAC8G,GAAG,CAAClI,EAAG0P,CAAAA,KAAK,CAAClG,IAAAA,CAAKuS,iBAAiB,CAAC,IAAI,CAAA,EAAG,CAAI,CAAA,EAAA,WAAA;AAClD,gBAAA,IAAI,CAAC5U,OAAO,CAACnH,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA,CAAA;AACxB,aAAA,CAAA;YACA,IAAI,CAACuE,EAAE,CAAC8W,OAAO,GAAGzc,EAAGkN,CAAAA,GAAG,CAAC,IAAI,CAACsP,UAAU,EAAE,CAAA,CAAA;YAC1C,IAAI,CAAC7W,EAAE,CAAC+W,KAAK,GAAG1c,EAAG8F,CAAAA,GAAG,CAAC,IAAI,CAAC2W,OAAO,EAAE,CAAA,CAAA;AACrC,YAAA,IAAI,CAAC9W,EAAE,CAACgX,OAAO,GAAG3c,EAAAA,CAAGkN,GAAG,CAAC,IAAI,CAACuP,OAAO,EAAEzc,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACuW,KAAK,EAAE,CAAA,CAAA,CAAA;YAC1D,IAAI,CAAC/W,EAAE,CAACuR,EAAE,GAAGlX,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAACoH,SAAS,CAACqU,SAAS,CAACpP,EAAE,CAAGhE,EAAAA,IAAAA,CAAK+R,aAAa,CAAC,IAAI,CAAA,CAAA;AACjF,YAAA,IAAI,CAAC5V,EAAE,CAACkX,KAAK,GAAG7c,EAAAA,CAAG8c,uBAAuB,CAAC,IAAI,CAAC5iB,wBAAyB,CAAA,EAAE,IAAI,CAACgd,EAAE,EAAE,IAAI,CAACwF,KAAK,EAAE,CAAA,CAAA;;;YAGhG,IAAI,CAAC/W,EAAE,CAACoX,QAAQ,GAAG/c,EAAGa,CAAAA,IAAI,CACxBb,EAAAA,CAAGoB,KAAK,CAACpB,GAAG0P,KAAK,CAAC,IAAI,CAACiN,OAAO,EAAE,KAChC3c,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACiN,OAAO,EAAE,CAChC3c,CAAAA,CAAAA,EAAAA,EAAAA,CAAGoB,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACiN,OAAO,EAAE,CAAA,CAAA,CAAA,EAChC3c,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAACiN,OAAO,EAAE,CAAA,CAAA,CAAA,CAAA;AAElC,YAAA,IAAI,CAACxV,OAAO,CAACnH,EAAAA,CAAGoL,GAAG,CAAC,IAAI,CAACyR,KAAK,EAAE,IAAI,CAACE,QAAQ,CAAA,CAAA;AAC/C,SAAA,CAAA;AACA,QAAA,OAAO/c,EAAGU,CAAAA,cAAc,EAAE,CAAC6I,SAAS,CAACiT,UAAAA,CAAAA;AACvC;AACA;;;;MAKA,OAAOQ,mBAAoBvc,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMmC,GAAG,CAAC3E,gBAAgB;AACnC;AACA;;;;MAKA,OAAOgf,uBAAwBxc,CAAAA,KAA4B,EAAe;QACxE,OAAOA,KAAK,CAAC1G,kCAAmC,CAAA;AAClD;AACA;;;;MAKA,OAAOmjB,uBAAwBzc,CAAAA,KAA4B,EAAe;QACxE,OAAOA,KAAAA,CAAMe,MAAM,CAAC2P,oBAAoB;AAC1C;AACA;;;;MAKA,OAAOgM,0BAA2B1c,CAAAA,KAA4B,EAAe;QAC3E,OAAOA,KAAAA,CAAMe,MAAM,CAAC8P,uBAAuB;AAC7C;AACA;;;;MAKA,OAAOG,mBAAoBhR,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMe,MAAM,CAACgQ,gBAAgB;AACtC;AACA;;;;MAKA,OAAOG,sBAAuBlR,CAAAA,KAA4B,EAAe;QACvE,OAAOA,KAAAA,CAAMe,MAAM,CAACkQ,mBAAmB;AACzC;AACA;;;;MAKA,OAAOnE,iCAAkC9M,CAAAA,KAA4B,EAAe;QAClF,OAAOA,KAAAA,CAAMe,MAAM,CAACwM,kBAAkB;AACxC;AACA;;;;MAKA,OAAOoP,8BAA+B3c,CAAAA,KAA4B,EAAe;QAC/E,OAAOA,KAAAA,CAAMe,MAAM,CAAC+P,WAAW;AACjC;AACA;;;;MAKA,OAAO8L,sBAAuB5c,CAAAA,KAA4B,EAAe;QACvE,OAAOA,KAAAA,CAAMe,MAAM,CAAC6P,mBAAmB;AACzC;AACA;;;;MAKA,OAAOtD,qCAAsCtN,CAAAA,KAA4B,EAAe;QACtF,OAAOA,KAAAA,CAAMe,MAAM,CAACsM,sBAAsB;AAC5C;AACA;;;;MAKA,OAAOwP,aAAc7c,CAAAA,KAA4B,EAAe;QAC9D,OAAOA,KAAAA,CAAMe,MAAM,CAACoQ,UAAU;AAChC;AACA;;;;MAKA,OAAO2L,gBAAiB9c,CAAAA,KAA4B,EAAe;QACjE,OAAOA,KAAAA,CAAMe,MAAM,CAACqQ,WAAW;AACjC;AACA,qBACA,OAAO2L,mBAAoB/c,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMiB,KAAK,CAACvE,gBAAgB;AACrC;AACA,qBACA,OAAOsgB,mBAAoBhd,CAAAA,KAA4B,EAAe;QACpE,OAAOA,KAAAA,CAAMiB,KAAK,CAACnE,UAAU;AAC/B;AACA,qBACA,OAAOmgB,kBAAmBjd,CAAAA,KAA4B,EAAe;QACnE,OAAOA,KAAAA,CAAMiB,KAAK,CAACtE,eAAe;AACpC;AACA,qBACA,OAAOugB,qBAAsBld,CAAAA,KAA4B,EAAe;QACtE,OAAOA,KAAAA,CAAMiB,KAAK,CAACrE,kBAAkB;AACvC;AACA,qBACA,OAAOugB,kBAAmBnd,CAAAA,KAA4B,EAAe;QACnE,OAAOA,KAAAA,CAAMiB,KAAK,CAACpE,eAAe;AACpC;AACA,qBACA,OAAOugB,YAAapd,CAAAA,KAA4B,EAAe;QAC7D,OAAOA,KAAAA,CAAMiB,KAAK,CAACoc,SAAS;AAC9B;AACA,qBACA,OAAOC,cAAetd,CAAAA,KAA4B,EAAe;QAC/D,OAAOA,KAAAA,CAAMiB,KAAK,CAAC9E,MAAM;AAC3B;AACA,qBACA,OAAOohB,qBAAsBvd,CAAAA,KAA4B,EAAe;QACtE,OAAOA,KAAAA,CAAMiB,KAAK,CAAC8R,SAAS;AAC9B;AACA,qBACA,OAAOyK,iCAAkCxd,CAAAA,KAA4B,EAAe;QAClF,OAAOA,KAAAA,CAAMiB,KAAK,CAAC5E,gBAAgB;AACrC;AACA,qBACA,OAAOohB,2BAA4Bzd,CAAAA,KAA4B,EAAe;QAC5E,OAAOA,KAAAA,CAAMiB,KAAK,CAACkQ,UAAU;AAC/B;qBAEA,OAAOuM,0BACL1d,CAAAA,KAA4B,EAC5BwN,QAAqB,EACrBmQ,OAAgC,GAAA,CAAC,EACpB;QACb,MAAMpe,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,IAAI,OAAOqa,YAAY,QAAU,EAAA;YAC/B,OAAOpe,EAAAA,CAAGa,IAAI,CACZb,EAAGoL,CAAAA,GAAG,CAAC3K,KAAAA,CAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAAC8T,UAAU,CAAI,GAAA,CAAA,CAAA,EAAInQ,QACvDjO,CAAAA,EAAAA,EAAAA,CAAGoL,GAAG,CAAC3K,KAAMiB,CAAAA,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAAC8T,OAAAA,GAAU,IAAI,CAAInQ,CAAAA,EAAAA,QAAAA,CAAAA,EACvDjO,EAAGoL,CAAAA,GAAG,CAAC3K,KAAAA,CAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAAC8T,OAAU,GAAA,CAAA,GAAI,CAAInQ,CAAAA,EAAAA,QAAAA,CAAAA,EACvDjO,EAAGoL,CAAAA,GAAG,CAAC3K,KAAAA,CAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAAC8T,OAAU,GAAA,CAAA,GAAI,CAAInQ,CAAAA,EAAAA,QAAAA,CAAAA,CAAAA;SAEpD,MAAA;AACL,YAAA,OAAOjO,GAAGa,IAAI,CACZb,EAAGoL,CAAAA,GAAG,CAAC3K,KAAMiB,CAAAA,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAACtK,GAAGoG,GAAG,CAACpG,GAAGmG,GAAG,CAACiY,OAAS,EAAA,CAAA,CAAA,EAAI,KAAKnQ,QACrEjO,CAAAA,EAAAA,EAAAA,CAAGoL,GAAG,CAAC3K,MAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAACiY,OAAAA,EAAS,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,EAAKnQ,WACrEjO,EAAGoL,CAAAA,GAAG,CAAC3K,KAAAA,CAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAACtK,EAAGoG,CAAAA,GAAG,CAACpG,EAAGmG,CAAAA,GAAG,CAACiY,OAAS,EAAA,CAAA,CAAA,EAAI,CAAKnQ,CAAAA,CAAAA,EAAAA,QAAAA,CAAAA,EACrEjO,GAAGoL,GAAG,CAAC3K,MAAMiB,KAAK,CAAClE,cAAc,CAAC8M,EAAE,CAACtK,EAAAA,CAAGoG,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAACiY,OAAAA,EAAS,IAAI,CAAKnQ,CAAAA,CAAAA,EAAAA,QAAAA,CAAAA,CAAAA;AAEzE;AACF;AACA,qBACA,OAAOoQ,wBAAAA,CACL5d,KAA4B,EAC5B+b,UAAgC,EACnB;QACb,OAAO/b,KAAK,CAAC7G,yBAAAA,CAA0B,CAAC0Q,EAAE,CAAC7J,KAAAA,CAAMsD,QAAQ,CAACoC,GAAG,CAACqW,UAAY,EAAA,CAAA,CAAA,CAAA;AAC5E;AACA,qBACA,OAAO8B,0BAAAA,CACL7d,KAA4B,EAC5B+b,UAAgC,EACnB;AACb,QAAA,OAAO/b,KAAK,CAAC7G,yBAAAA,CAA0B,CAAC0Q,EAAE,CAAC7J,KAAMsD,CAAAA,QAAQ,CAACqC,GAAG,CAAC3F,KAAMsD,CAAAA,QAAQ,CAACoC,GAAG,CAACqW,YAAY,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AACnG;AACA,qBACA,OAAO+B,yBAAAA,CACL9d,KAA4B,EAC5B+b,UAAgC,EACnB;AACb,QAAA,OAAO/b,KAAK,CAAC7G,yBAAAA,CAA0B,CAAC0Q,EAAE,CAAC7J,KAAMsD,CAAAA,QAAQ,CAACqC,GAAG,CAAC3F,KAAMsD,CAAAA,QAAQ,CAACoC,GAAG,CAACqW,YAAY,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AACnG;AACA,qBACA,OAAOgC,aAAAA,CAAc/d,KAA4B,EAAE+b,UAAgC,EAAe;AAChG,QAAA,OAAO/b,KAAK,CAAC7G,yBAAAA,CAA0B,CAAC0Q,EAAE,CAAC7J,KAAMsD,CAAAA,QAAQ,CAACqC,GAAG,CAAC3F,KAAMsD,CAAAA,QAAQ,CAACoC,GAAG,CAACqW,YAAY,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AACnG;AACA;;;;;;;;;;;;;;AAcC,MACD,OAAOiC,oBAAAA,CAAqBhe,KAA4B,EAAEoK,GAAgB,EAAQ;QAChF,MAAM7K,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAM8V,YAAe,GAAA,IAAI,CAAC8B,eAAe,CAAClb,KAAAA,CAAAA;AAC1C,QAAA,IAAIoZ,YAAc,EAAA;AAChBpZ,YAAAA,KAAAA,CAAM8H,SAAS,CAACuI,QAAQ,GAAG9Q,GAAGmG,GAAG,CAAC0E,GAAK7K,EAAAA,EAAAA,CAAGa,IAAI,CAAC,CAAA,EAAGgZ,YAAa7R,CAAAA,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA;SAChE,MAAA;YACLvH,KAAM8H,CAAAA,SAAS,CAACuI,QAAQ,GAAGjG,GAAAA;AAC7B;AACF;AACA;;;;;MAMA,OAAO6T,YAAaje,CAAAA,KAA4B,EAAe;QAC7D,OAAOA,KAAK,CAACxG,uBAAwB,CAAA;AACvC;AACA;;;;;;;;;AASC,MACD,OAAO0kB,yBAAAA,CAA0Ble,KAA4B,EAAEme,KAAkB,EAAe;QAC9F,MAAM5e,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAM8a,UAAa7e,GAAAA,EAAAA,CAAGa,IAAI,CACxBb,GAAGoB,KAAK,CAACpB,EAAG0P,CAAAA,KAAK,CAACkP,KAAO,EAAA,CAAA,CAAA,CAAA,EACzB5e,EAAGoB,CAAAA,KAAK,CAACpB,EAAG0P,CAAAA,KAAK,CAACkP,KAAAA,EAAO,CACzB5e,CAAAA,CAAAA,EAAAA,EAAAA,CAAGoB,KAAK,CAACpB,GAAG0P,KAAK,CAACkP,KAAO,EAAA,CAAA,CAAA,CAAA,EACzB5e,GAAGoB,KAAK,CAACpB,EAAG0P,CAAAA,KAAK,CAACkP,KAAO,EAAA,CAAA,CAAA,CAAA,CAAA;AAE3B,QAAA,OAAO5e,GAAGoL,GAAG,CAAC,IAAI,CAACwS,kBAAkB,CAACnd,KAAQoe,CAAAA,EAAAA,UAAAA,CAAAA;AAChD;AACA;;;;;;;;;;;;AAYC,MACD,OAAOC,uBAAAA,CACLtL,SAAiB,EACjB/S,KAA4B,EAC5BwN,QAAqB,EACrB8Q,WAAwB,EACxBC,KAAkB,EAClBC,YAA0B,EACb;QACb,MAAMjf,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMmb,cAAiB,GAAA,IAAI,CAACxB,kBAAkB,CAACjd,KAAAA,CAAAA;QAC/C,MAAM0e,WAAAA,GAAcC,oBAAqB3e,CAAAA,KAAAA,EAAOue,KAAOxL,EAAAA,SAAAA,CAAAA;;AAEvD,QAAA,MAAM6L,WAAWrf,EAAGoM,CAAAA,IAAI,CAACpM,EAAAA,CAAGsf,KAAK,CAACtf,EAAAA,CAAGkN,GAAG,CAAC,GAAGlN,EAAGmG,CAAAA,GAAG,CAACgZ,WAAAA,EAAaA,eAAe,CAAG,EAAA,CAAA,CAAA,CAAA;QAClF,IAAIzV,MAAAA,GAAS1J,GAAGmG,GAAG,CAAC+Y,eAAenX,CAAC,EAAEwX,4BAA4B9e,KAAQ4e,CAAAA,EAAAA,QAAAA,CAAAA;AAC1E,QAAA,IAAIJ,YAAc,EAAA;YAChBvV,MAAS1J,GAAAA,EAAAA,CAAGmG,GAAG,CAACuD,MAAQuV,EAAAA,YAAAA,CAAAA;AAC1B;AACA,QAAA,IAAIzL,cAAciD,sBAAwB,EAAA;;;AAGxC,YAAA,MAAM+I,QAAW,GAAA,IAAI,CAACvB,iCAAiC,CAACxd,KAAAA,CAAAA;YACxD,MAAMgf,WAAAA,GAAczf,GAAGsf,KAAK,CAC1Btf,GAAG8F,GAAG,CAAC9F,GAAG0f,QAAQ,CAACzR,UAAUuR,QAASxT,CAAAA,GAAG,GAAGhM,EAAG2f,CAAAA,GAAG,CAACH,QAASvZ,CAAAA,CAAC,EAAE,IAAA,CAAA,CAAA,EAC/D,CACA,EAAA,CAAA,CAAA;YAEFyD,MAAS1J,GAAAA,EAAAA,CAAGmG,GAAG,CAACuD,MAAQ1J,EAAAA,EAAAA,CAAGqZ,GAAG,CAAC,CAAA,EAAG6F,cAAejZ,CAAAA,CAAC,EAAEwZ,WAAAA,CAAAA,CAAAA;AACtD;;;AAGA,QAAA,MAAMG,UAAa5f,GAAAA,EAAAA,CAAGmG,GAAG,CAAC4Y,aAAa/e,EAAG8F,CAAAA,GAAG,CAAC,CAAA,EAAG9F,GAAG2f,GAAG,CAAC3f,EAAG6f,CAAAA,MAAM,CAACd,WAAc,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAChF,QAAA,OAAO/e,GAAGoG,GAAG,CAAC6H,UAAUjO,EAAGmG,CAAAA,GAAG,CAACyZ,UAAYlW,EAAAA,MAAAA,CAAAA,CAAAA;AAC7C;AACA;;;;;;MAOA,OAAOoW,eACLrf,CAAAA,KAA4B,EAC5BwN,QAAqB,EACrB8Q,WAAwB,EACxBgB,GAAgB,EAChB1f,GAAgB,EACH;QACb,MAAML,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;AACjB,QAAA,MAAM9F,kBAAkBrD,GAAIwB,CAAAA,aAAa,CAAEC,GAAG,CAACzB,IAAI+B,kBAAkB,CAAA;AACrE,QAAA,MAAMmH,QAAW,GAAA,mBAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,UAAA,CAAA;AAAahD,YAAAA,EAAAA,CAAGgD,IAAI,CAAC,aAAA,CAAA;AAAgBhD,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,KAAA;SAAO,EAAE,WAAA;YAChF,IAAIsC,eAAAA,CAAgBiW,iBAAiB,GAAG,CAAG,EAAA;gBACzC,IAAI,CAAChU,EAAE,CAAC9I,cAAc,GAAG,IAAI,CAAC6E,KAAK,CAAC7E,cAAc;gBAClD,IAAI,CAAC8I,EAAE,CAACqa,WAAW,GAAGhgB,GAAGa,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AACvC,gBAAA,IAAI,CAAC8E,EAAE,CAAC8Z,WAAW,GAAGjW,KAAKyW,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC1X,SAAS,CAACqU,SAAS,CAAC5U,CAAC,CAAA;gBAClF,IAAI,CAACrC,EAAE,CAACua,cAAc,GAAG1W,IAAKgU,CAAAA,mBAAmB,CAAC,IAAI,CAAA;gBACtD,IAAI,CAAC7X,EAAE,CAACwa,UAAU,GAAGngB,EAAGa,CAAAA,IAAI,CAACb,EAAGmI,CAAAA,WAAW,CAACnI,EAAGa,CAAAA,IAAI,CAAC,IAAI,CAAC4e,WAAW,CAAG,EAAA,IAAI,CAACS,cAAc,CAAA,CAAA;gBAC1F,IAAI,CAACva,EAAE,CAACya,YAAY,GAAGpgB,EAAGa,CAAAA,IAAI,CAC5Bb,EAAAA,CAAGoB,KAAK,CAACpB,GAAGmI,WAAW,CAAC,IAAI,CAACtL,cAAc,EAAE,KAC7CmD,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACtL,cAAc,EAAE,CAC7CmD,CAAAA,CAAAA,EAAAA,EAAAA,CAAGoB,KAAK,CAACpB,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACtL,cAAc,EAAE,CAAA,CAAA,CAAA,EAC7CmD,EAAGoB,CAAAA,KAAK,CAACpB,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAACtL,cAAc,EAAE,CAAA,CAAA,CAAA,CAAA;AAE/C,gBAAA,IAAI,CAAC8I,EAAE,CAACiZ,KAAK,GAAG5e,GAAGqB,GAAG,CAACrB,EAAGoL,CAAAA,GAAG,CAAC,IAAI,CAAC+U,UAAU,EAAE,IAAI,CAACC,YAAY,CAAA,CAAA;;;;AAIhE,gBAAA,IAAI,CAACza,EAAE,CAAC0a,SAAS,GAAG7W,IAAKsV,CAAAA,uBAAuB,CAC9Cpb,eAAAA,CAAgB8P,SAAS,EACzB,IAAI,EACJ,IAAI,CAACvF,QAAQ,EACb,IAAI,CAAC8Q,WAAW,EAChB,IAAI,CAACgB,GAAG,EACRvW,IAAKmV,CAAAA,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAEjD,gBAAA,IAAIve,GAAIX,CAAAA,MAAM,CAACuB,IAAI,KAAK,OAAS,EAAA;AAC/B,oBAAA,IAAI,CAAC0E,EAAE,CAAC2a,YAAY,GAAGtgB,GAAGa,IAAI,EAAA;oBAC9B,IAAI,CAAC6H,IAAI,CAAC1I,EAAAA,CAAGqB,GAAG,CAAC,SAAA,CAAA,EAAY,GAAG,CAAG,EAAA,WAAA;AACjC,wBAAA,IAAI,CAAC6G,GAAG,CAAClI,EAAAA,CAAG0P,KAAK,CAAC,IAAI,CAAC0O,OAAO,EAAE,IAAI,CAACQ,KAAK,CAAG,EAAA,WAAA;AAC3C,4BAAA,IAAI,CAAC0B,YAAY,GAAG9W,KAAK2U,0BAA0B,CACjD,IAAI,EACJne,EAAAA,CAAGa,IAAI,CAAC,IAAI,CAACwf,SAAS,EAAE,CACxB,CAAA,EAAA,IAAI,CAACjC,OAAO,CAAA;AAEd,4BAAA,IAAI,CAACtV,MAAM,EAAA;AACb,yBAAA,CAAA;AACF,qBAAA,CAAA;iBACK,MAAA;oBACL,IAAI,CAACnD,EAAE,CAAC2a,YAAY,GAAG9W,IAAK2U,CAAAA,0BAA0B,CACpD,IAAI,EACJne,GAAGa,IAAI,CAAC,IAAI,CAACwf,SAAS,EAAE,CACxB,CAAA,EAAA,IAAI,CAACzB,KAAK,CAAA;AAEd;gBACA,IAAI,CAACjZ,EAAE,CAACmU,MAAM,GAAGpW,eAAgB3B,CAAAA,IAAI,CAAEwe,gBAAgB,CACrD7c,eAAAA,EACA,IAAI,EACJ,IAAI,CAAC4c,YAAY,EACjB,IAAI,CAACP,GAAG,EACR,IAAI,CAACnB,KAAK,CAAA;gBAEZ,IAAI,CAAC9E,MAAM,GAAG9Z,EAAGsf,CAAAA,KAAK,CAAC,IAAI,CAACxF,MAAM,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvC,IAAI,CAACnU,EAAE,CAAC6a,cAAc,GAAGhX,IAAKmU,CAAAA,qBAAqB,CAACld,KAAAA,CAAAA,CAAOwF,CAAC;AAC5D,gBAAA,IAAI,CAAC6T,MAAM,GAAG9Z,EAAGqZ,CAAAA,GAAG,CAClB,IAAI,CAACS,MAAM,EACX,GACA9Z,EAAGyX,CAAAA,UAAU,CACXzX,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqa,cAAc,EAAE,GAC5B,CAAA,EAAA,IAAI,CAACA,cAAc,EACnBxgB,EAAG0f,CAAAA,QAAQ,CAAClW,IAAAA,CAAK6R,iBAAiB,CAAC,IAAI,CAAG,EAAA,IAAI,CAACpN,QAAQ,CAAA,CAAA,CAAA;AAG3D,gBAAA,IAAI,CAAC6L,MAAM,GAAG9Z,EAAAA,CAAGqZ,GAAG,CAAC,CAAA,EAAG,IAAI,CAACS,MAAM,EAAE,IAAI,CAACpY,KAAK,CAAChE,cAAc,CAAA;gBAC9D,IAAI,CAACoc,MAAM,GAAG9Z,EAAGsf,CAAAA,KAAK,CAAC,IAAI,CAACxF,MAAM,EAAE,CAAG,EAAA,CAAA,CAAA;AACvC,gBAAA,IAAI,CAAC5R,GAAG,CAAClI,EAAAA,CAAGmI,WAAW,CAAC,IAAI,CAAC3G,MAAM,CAAC4Q,mBAAmB,EAAE,GAAM,CAAA,EAAA,WAAA;AAC7D,oBAAA,IAAI,CAAC0H,MAAM,GAAG9Z,EAAGoG,CAAAA,GAAG,CAACpG,EAAGmG,CAAAA,GAAG,CAACnG,EAAAA,CAAGoB,KAAK,CAAC,IAAI,CAACwd,KAAK,GAAG,GAAM,CAAA,EAAA,GAAA,CAAA;AAC1D,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACzX,OAAO,CAAC,IAAI,CAAC2S,MAAM,CAAA;aACnB,MAAA;;gBAEL,IAAI,CAACnU,EAAE,CAAC0a,SAAS,GAAG7W,IAAKsV,CAAAA,uBAAuB,CAC9Cpb,eAAAA,CAAgB8P,SAAS,EACzB,IAAI,EACJ,IAAI,CAACvF,QAAQ,EACb,IAAI,CAAC8Q,WAAW,EAChB,IAAI,CAACgB,GAAG,CAAA;AAEV,gBAAA,IAAI,CAACpa,EAAE,CAAC2a,YAAY,GAAG9W,KAAK2U,0BAA0B,CAAC,IAAI,EAAEne,GAAGa,IAAI,CAAC,IAAI,CAACwf,SAAS,EAAE,CAAA,CAAA,CAAA;AACrF,gBAAA,IAAI,CAAC1a,EAAE,CAACmU,MAAM,GAAGpW,eAAAA,CAAgB3B,IAAI,CAAE0e,aAAa,CAClD/c,eACA,EAAA,IAAI,EACJ,IAAI,CAAC4c,YAAY,EACjB,IAAI,CAACP,GAAG,CAAA;gBAEV,IAAI,CAACjG,MAAM,GAAG9Z,EAAGsf,CAAAA,KAAK,CAAC,IAAI,CAACxF,MAAM,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvC,IAAI,CAACnU,EAAE,CAAC6a,cAAc,GAAGhX,IAAKmU,CAAAA,qBAAqB,CAACld,KAAAA,CAAAA,CAAOwF,CAAC;AAC5D,gBAAA,IAAI,CAAC6T,MAAM,GAAG9Z,EAAGqZ,CAAAA,GAAG,CAClB,IAAI,CAACS,MAAM,EACX,GACA9Z,EAAGyX,CAAAA,UAAU,CACXzX,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACqa,cAAc,EAAE,GAC5B,CAAA,EAAA,IAAI,CAACA,cAAc,EACnBxgB,EAAG0f,CAAAA,QAAQ,CAAClW,IAAAA,CAAK6R,iBAAiB,CAAC,IAAI,CAAG,EAAA,IAAI,CAACpN,QAAQ,CAAA,CAAA,CAAA;AAG3D,gBAAA,IAAI,CAAC6L,MAAM,GAAG9Z,EAAAA,CAAGqZ,GAAG,CAAC,CAAA,EAAG,IAAI,CAACS,MAAM,EAAE,IAAI,CAACpY,KAAK,CAAChE,cAAc,CAAA;gBAC9D,IAAI,CAACoc,MAAM,GAAG9Z,EAAGsf,CAAAA,KAAK,CAAC,IAAI,CAACxF,MAAM,EAAE,CAAG,EAAA,CAAA,CAAA;AACvC,gBAAA,IAAI,CAAC3S,OAAO,CAAC,IAAI,CAAC2S,MAAM,CAAA;AAC1B;AACF,SAAA,CAAA;AACA,QAAA,OAAO9Z,GAAGU,cAAc,EAAE,CAAC6I,QAAS,CAAA,CAAC0E,UAAU8Q,WAAagB,EAAAA,GAAAA,CAAAA;AAC9D;IACA,OAAOW,QAAAA,CAASjgB,KAA4B,EAAEwN,QAAqB,EAAE0S,KAAkB,EAAEtgB,GAAgB,EAAE;QACzG,MAAML,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;AACjB,QAAA,IAAInJ,GAAIgC,CAAAA,aAAa,GAAGC,oBAAAA,CAAqBC,SAAS,EAAE;AACtD,YAAA,MAAMgH,QAAW,GAAA,YAAA;YACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,gBAAAA,EAAAA,CAAGgD,IAAI,CAAC,UAAA,CAAA;gBAAahD,EAAGa,CAAAA,IAAI,CAAC,OAAA,CAAA,CAAS+f,KAAK;aAAG,EAAE,WAAA;AACjE,gBAAA,IAAI,CAAC1Y,GAAG,CAAClI,EAAAA,CAAGuK,QAAQ,CAAC,IAAI,CAAC3H,GAAG,CAAC5E,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;AAC1C,oBAAA,IAAI,CAACmJ,OAAO,EAAA;AACd,iBAAA,CAAA;gBACA,IAAI,CAACxB,EAAE,CAACuR,EAAE,GAAGlX,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAACoH,SAAS,CAACqU,SAAS,CAACpP,EAAE,CAAGhE,EAAAA,IAAAA,CAAK+R,aAAa,CAAC,IAAI,CAAA,CAAA;AACjF,gBAAA,IAAI,CAAC5V,EAAE,CAACkb,OAAO,GAAGC,YAAAA,CAChB,IAAI,EACJ,IAAI,CAACle,GAAG,CAAC9E,qBAAqB,EAC9B,IAAI,CAAC8E,GAAG,CAAC7E,OAAO,EAChB,IAAI,CAAC6E,GAAG,CAAC3E,gBAAgB,EACzB,IAAI,CAAC2E,GAAG,CAACzE,eAAe,EACxB,IAAI,CAAC+Y,EAAE,EACP,KACA1N,EAAAA,IAAAA,CAAK6R,iBAAiB,CAAC,IAAI,CAAA,CAAErP,GAAG,EAChC,IAAI,CAACiC,QAAQ,EACb,IAAI,CAACrL,GAAG,CAAC5E,QAAQ,EACjB,IAAI,CAACjE,kCAAmC,CAAA,EACxC,IAAI,CAACC,gCAAiC,CAAA,CAAA;gBAExC,IAAI,CAAC2L,EAAE,CAACob,YAAY,GAAG/gB,EAAGkN,CAAAA,GAAG,CAAC,CAAA,EAAGlN,EAAGmG,CAAAA,GAAG,CAACnG,EAAAA,CAAGkN,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC2T,OAAO,CAACG,CAAC,CAAA,EAAG,IAAI,CAACL,KAAK,CAACK,CAAC,CAAA,CAAA;AAC/E,gBAAA,IAAI,CAACrb,EAAE,CAACsb,UAAU,GAAGjhB,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAAC0a,OAAO,CAAClG,GAAG,EAAE,IAAI,CAACgG,KAAK,CAACK,CAAC,CAAA;AAC1D,gBAAA,IAAI,CAACL,KAAK,GAAG3gB,EAAAA,CAAGa,IAAI,CAClBb,EAAGoG,CAAAA,GAAG,CAACpG,EAAAA,CAAGmG,GAAG,CAAC,IAAI,CAACwa,KAAK,CAAChG,GAAG,EAAE,IAAI,CAACoG,YAAY,CAAG,EAAA,IAAI,CAACE,UAAU,CACjE,EAAA,IAAI,CAACN,KAAK,CAACK,CAAC,CAAA;;AAGhB,aAAA,CAAA;YACAvgB,KAAK,CAAC8I,QAAS,CAAA,CAAC0E,QAAU0S,EAAAA,KAAAA,CAAAA;AAC5B;AACF;AACA;;;;;;;AAOC,MACD,OAAOO,sBACLzgB,CAAAA,KAA4B,EAC5BkX,KAAkB,EAClBwJ,OAAqB,EACR;QACb,MAAMnhB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzBod,QAAAA,OAAAA,GAAUA,OAAW,IAAA,IAAI,CAACxF,eAAe,CAAClb,KAAAA,CAAAA;AAC1C,QAAA,IAAI2gB,SAAW,EAAA;AACb,YAAA,OAAOphB,EAAG8F,CAAAA,GAAG,CACX9F,EAAAA,CAAGkN,GAAG,CAAClN,EAAG8F,CAAAA,GAAG,CAAC9F,EAAAA,CAAGmG,GAAG,CAACgb,OAAQnb,CAAAA,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,CAAA,EAAG4P,KAAQwJ,CAAAA,EAAAA,OAAAA,CAAQnb,CAAC,CAAA,EAC7DhG,EAAGkN,CAAAA,GAAG,CAACiU,OAAAA,CAAQpZ,CAAC,EAAEoZ,QAAQnb,CAAC,CAAA,CAAA;AAE/B;AACA,QAAA,OAAOhG,EAAG8F,CAAAA,GAAG,CACX9F,EAAAA,CAAGkN,GAAG,CAACiU,OAAQpZ,CAAAA,CAAC,EAAE/H,EAAAA,CAAG8F,GAAG,CAAC9F,EAAGmG,CAAAA,GAAG,CAACgb,OAAAA,CAAQnb,CAAC,EAAEmb,OAAQpZ,CAAAA,CAAC,CAAG4P,EAAAA,KAAAA,CAAAA,CAAAA,EACvD3X,EAAGkN,CAAAA,GAAG,CAACiU,OAAAA,CAAQpZ,CAAC,EAAEoZ,QAAQnb,CAAC,CAAA,CAAA;AAE/B;AACA;;;;;;;AAOC,MACD,OAAOia,sBACLxf,CAAAA,KAA4B,EAC5BkX,KAAkB,EAClBwJ,OAAqB,EACR;QACb,MAAMnhB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzBod,QAAAA,OAAAA,GAAUA,OAAW,IAAA,IAAI,CAACxF,eAAe,CAAClb,KAAAA,CAAAA;AAC1C,QAAA,IAAI2gB,SAAW,EAAA;YACb,OAAOphB,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGmG,GAAG,CAACgb,OAAAA,CAAQnb,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,CAAG/H,EAAAA,EAAAA,CAAGqZ,GAAG,CAAC8H,OAAAA,CAAQnb,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,EAAE4P,KAAAA,CAAAA,CAAAA;AAC3E;QACA,OAAO3X,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGmG,GAAG,CAACgb,OAAAA,CAAQnb,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,CAAG/H,EAAAA,EAAAA,CAAGqZ,GAAG,CAAC8H,OAAAA,CAAQpZ,CAAC,EAAEoZ,OAAAA,CAAQnb,CAAC,EAAE2R,KAAAA,CAAAA,CAAAA;AAC3E;AACA;;;;;;;AAOC,MACD,OAAO0J,gCACL5gB,CAAAA,KAA4B,EAC5BkX,KAAkB,EAClBwJ,OAAqB,EACR;QACb,MAAMnhB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzBod,QAAAA,OAAAA,GAAUA,OAAW,IAAA,IAAI,CAACxF,eAAe,CAAClb,KAAAA,CAAAA;AAC1C,QAAA,IAAI2gB,SAAW,EAAA;AACb,YAAA,OAAOphB,EAAG8F,CAAAA,GAAG,CAACqb,OAAAA,CAAQnb,CAAC,EAAEhG,EAAAA,CAAGqZ,GAAG,CAAC8H,OAAQnb,CAAAA,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,EAAE4P,KAAAA,CAAAA,CAAAA;AACxD;AACA,QAAA,OAAO3X,EAAG8F,CAAAA,GAAG,CAACqb,OAAAA,CAAQnb,CAAC,EAAEhG,EAAAA,CAAGqZ,GAAG,CAAC8H,OAAQpZ,CAAAA,CAAC,EAAEoZ,OAAAA,CAAQnb,CAAC,EAAE2R,KAAAA,CAAAA,CAAAA;AACxD;AACA;;;;;;;;;;;;;AAaC,MACD,OAAO2J,gCACL7gB,CAAAA,KAA4B,EAC5BkX,KAAkB,EAClBwJ,OAAqB,EACR;QACb,MAAMnhB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzBod,QAAAA,OAAAA,GAAUA,OAAW,IAAA,IAAI,CAACxF,eAAe,CAAClb,KAAAA,CAAAA;AAC1C,QAAA,IAAI2gB,SAAW,EAAA;YACb,OAAOphB,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGkN,GAAG,CAAClN,EAAAA,CAAG8F,GAAG,CAACqb,OAAQnb,CAAAA,CAAC,EAAE2R,KAAQwJ,CAAAA,EAAAA,OAAAA,CAAQnb,CAAC,CAAA,EAAGhG,EAAGkN,CAAAA,GAAG,CAACiU,OAAQpZ,CAAAA,CAAC,EAAEoZ,OAAAA,CAAQnb,CAAC,CAAA,CAAA;AACxF;QACA,OAAOhG,EAAAA,CAAG8F,GAAG,CAAC9F,EAAAA,CAAGkN,GAAG,CAAClN,EAAAA,CAAG8F,GAAG,CAACqb,OAAQnb,CAAAA,CAAC,EAAE2R,KAAQwJ,CAAAA,EAAAA,OAAAA,CAAQpZ,CAAC,CAAA,EAAG/H,EAAGkN,CAAAA,GAAG,CAACiU,OAAQnb,CAAAA,CAAC,EAAEmb,OAAAA,CAAQpZ,CAAC,CAAA,CAAA;AACxF;AACA;;;;;;;;AAQC,MACD,OAAOwZ,kBAAAA,CAAmB9gB,KAA4B,EAAEkX,KAAkB,EAAe;QACvF,MAAM3X,EAAAA,GAAKS,MAAMsD,QAAQ;QACzB,OAAOqd,SAAAA,GAAYzJ,QAAQ3X,EAAGkN,CAAAA,GAAG,CAAClN,EAAGmG,CAAAA,GAAG,CAACwR,KAAAA,EAAO,CAAI,CAAA,EAAA,CAAA,CAAA;AACtD;AACA;;;;;;;AAOC,MACD,OAAO6J,aAAAA,CAAc/gB,KAA4B,EAAEwF,CAAc,EAAwB;AACvF,QAAA,OAAOmb,YAAY,CAAInb,GAAAA,CAAAA;AACzB;AACA;;;;;;;AAOC,MACD,OAAOwb,eAAAA,CAAgBhhB,KAA4B,EAAEkX,KAAkB,EAAe;AACpF,QAAA,OAAOlX,KAAMsD,CAAAA,QAAQ,CAAC2L,KAAK,CAACiI,KAAO+J,EAAAA,cAAAA,CAAAA;AACrC;AACA;;;;;;;AAOC,MACD,OAAOC,WAAYlhB,CAAAA,KAA4B,EAAEugB,CAAc,EAAEY,CAAc,EAAe;AAC5F,QAAA,OAAOnhB,KAAMsD,CAAAA,QAAQ,CAAC8d,mBAAAA,CAAoB,CAACb,CAAGY,EAAAA,CAAAA,CAAAA;AAChD;AACA;;;;;;;AAOC,MACD,OAAOE,YAAarhB,CAAAA,KAA4B,EAAEugB,CAAc,EAAEY,CAAc,EAAe;AAC7F,QAAA,OAAOnhB,KAAMsD,CAAAA,QAAQ,CAACge,oBAAAA,CAAqB,CAACf,CAAGY,EAAAA,CAAAA,CAAAA;AACjD;AACA;;;;;;;MAQA,OAAOI,kBACLvhB,KAA4B,EAC5BkD,GAAgB,EAChBuT,EAAe,EACf+K,KAA2B,EACd;QACb,MAAMjiB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAM4T,KAAQ3X,GAAAA,EAAAA,CAAG6F,kBAAkB,CAAClC,KAAKuT,EAAI+K,EAAAA,KAAAA,CAAAA;QAC7C,OAAOjiB,EAAAA,CAAGL,SAAS,EAAA,CAAGsB,IAAI,KAAK,UAAUihB,6BAA8BzhB,CAAAA,KAAAA,EAAOkX,KAASA,CAAAA,GAAAA,KAAAA,CAAMwK,CAAC;AAChG;IACA,OAAOC,uBAAAA,CACL3hB,KAA4B,EAC5B4hB,QAAqB,EACrBnL,EAAe,EACfoL,GAAgB,EAChBC,aAA0B,EACb;QACb,MAAMviB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;QACjBxJ,EAAGyF,CAAAA,IAAI,CACL,0BACA,EAAA;AAACzF,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,IAAA,CAAA;AAAOnB,YAAAA,EAAAA,CAAGmB,IAAI,CAAC,eAAA,CAAA;AAAkBnB,YAAAA,EAAAA,CAAGc,IAAI,CAAC,KAAA;SAAO,EACzD,WAAA;AACE,YAAA,IAAI,CAAC6E,EAAE,CAAC8Z,WAAW,GAAGjW,IAAKwY,CAAAA,iBAAiB,CAAC,IAAI,EAAEK,QAAAA,EAAU,IAAI,CAACnL,EAAE,EAAE,CAAA,CAAA;AACtE,YAAA,IAAI,CAACvR,EAAE,CAAC6c,cAAc,GAAGhZ,KAAK8X,gCAAgC,CAC5D,IAAI,EACJ,IAAI,CAAC7B,WAAW,EAChB,IAAI,CAAC8C,aAAa,CAAA;AAEpB,YAAA,IAAI,CAAC5c,EAAE,CAAC8c,YAAY,GAAGziB,GAAGa,IAAI,CAC5Bb,EAAGkN,CAAAA,GAAG,CAAClN,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAAC+Q,EAAE,EAAE,CAAIlX,CAAAA,EAAAA,EAAAA,CAAGmB,IAAI,CAAC,CAAA,CAAA,CAAA,EACnCqI,IAAK+X,CAAAA,kBAAkB,CAAC,IAAI,EAAEvhB,EAAGsf,CAAAA,KAAK,CAAC,IAAI,CAACkD,cAAc,EAAE,GAAG,CAC/D,CAAA,CAAA,EAAA,CAAA,CAAA;AAEF,YAAA,IAAI,CAAC7c,EAAE,CAAC+c,IAAI,GAAG1iB,EAAGmG,CAAAA,GAAG,CAAC,IAAI,CAACmc,GAAG,EAAE,IAAI,CAACG,YAAY,CAAA;YACjD,IAAI,CAACtb,OAAO,CAACnH,EAAAA,CAAGa,IAAI,CAACb,EAAAA,CAAG8F,GAAG,CAAC,IAAI,CAAC4c,IAAI,CAAC1W,GAAG,EAAE,IAAI,CAAC0W,IAAI,CAACzc,CAAC,CAAA,EAAG,IAAI,CAACwZ,WAAW,CAAA,CAAA;AAC3E,SAAA,CAAA;AAEF,QAAA,OAAOhf,KAAMkiB,CAAAA,wBAAwB,CAACzL,EAAAA,EAAIqL,aAAeD,EAAAA,GAAAA,CAAAA;AAC3D;AACA;;;;;;;MAQA,OAAOM,8BACLniB,KAA4B,EAC5BkD,GAAgB,EAChBuT,EAAe,EACf+K,KAA2B,EACd;QACb,MAAMjiB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,OAAO/D,GAAG6F,kBAAkB,CAAClC,GAAKuT,EAAAA,EAAAA,EAAI+K,OAAOY,EAAE;AACjD;AACA;;;;;;AAMC,MACD,OAAOC,iBAAAA,CAAkBriB,KAA4B,EAAEsiB,WAAwB,EAAe;QAC5F,MAAM/iB,EAAAA,GAAKS,MAAMsD,QAAQ;AACzB,QAAA,MAAMyF,OAAO,IAAI;AACjB,QAAA,MAAMD,QAAW,GAAA,qBAAA;QACjBvJ,EAAGyF,CAAAA,IAAI,CAAC8D,QAAU,EAAA;AAACvJ,YAAAA,EAAAA,CAAGa,IAAI,CAAC,aAAA;SAAe,EAAE,WAAA;AAC1C,YAAA,MAAM8M,MAASnE,GAAAA,IAAAA,CAAKmS,eAAe,CAAC,IAAI,CAAA;YACxC,IAAI,CAACzT,GAAG,CAAClI,EAAAA,CAAGuK,QAAQ,CAACoD,MAAAA,CAAO1H,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACjC,gBAAA,IAAI,CAACkB,OAAO,CAACnH,GAAGa,IAAI,CAACmiB,cAAc,IAAI,EAAE,IAAI,CAACD,WAAW,CAACpI,GAAG,CAAA,EAAG,IAAI,CAACoI,WAAW,CAAC9c,CAAC,CAAA,CAAA;AACpF,aAAA,CAAA,CAAG0J,KAAK,CAAC,WAAA;AACP,gBAAA,IAAI,CAACxI,OAAO,CAAC,IAAI,CAAC4b,WAAW,CAAA;AAC/B,aAAA,CAAA;AACF,SAAA,CAAA;AACA,QAAA,OAAO/iB,EAAGU,CAAAA,cAAc,EAAE,CAAC6I,SAAS,CAACwZ,WAAAA,CAAAA;AACvC;qBAEA,OAAO3f,mBAAsB,GAAA;AAC3B,QAAA,OAAOzD,SAAYsB,EAAAA,CAAAA,IAAI,KAAK,OAAA,GAAU,EAAK,GAAA,GAAA;AAC7C;AACF;;;;"}