@aura3d/rendering 1.4.5 → 1.5.2

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 (203) hide show
  1. package/dist/CameraFraming.d.ts +77 -0
  2. package/dist/CameraFraming.d.ts.map +1 -1
  3. package/dist/CameraFraming.js +176 -1
  4. package/dist/CameraFraming.js.map +1 -1
  5. package/dist/CascadedShadowMaps.d.ts +9 -1
  6. package/dist/CascadedShadowMaps.d.ts.map +1 -1
  7. package/dist/CascadedShadowMaps.js +68 -0
  8. package/dist/CascadedShadowMaps.js.map +1 -1
  9. package/dist/ClusteredForwardLighting.d.ts +28 -0
  10. package/dist/ClusteredForwardLighting.d.ts.map +1 -0
  11. package/dist/ClusteredForwardLighting.js +156 -0
  12. package/dist/ClusteredForwardLighting.js.map +1 -0
  13. package/dist/DepthPass.d.ts +14 -1
  14. package/dist/DepthPass.d.ts.map +1 -1
  15. package/dist/DepthPass.js +19 -4
  16. package/dist/DepthPass.js.map +1 -1
  17. package/dist/EnvironmentMapResources.d.ts +59 -1
  18. package/dist/EnvironmentMapResources.d.ts.map +1 -1
  19. package/dist/EnvironmentMapResources.js +140 -100
  20. package/dist/EnvironmentMapResources.js.map +1 -1
  21. package/dist/EnvironmentPlatform.d.ts +3 -2
  22. package/dist/EnvironmentPlatform.d.ts.map +1 -1
  23. package/dist/EnvironmentPlatform.js +99 -44
  24. package/dist/EnvironmentPlatform.js.map +1 -1
  25. package/dist/ForwardPass.d.ts +37 -0
  26. package/dist/ForwardPass.d.ts.map +1 -1
  27. package/dist/ForwardPass.js +234 -7
  28. package/dist/ForwardPass.js.map +1 -1
  29. package/dist/Geometry.d.ts +19 -0
  30. package/dist/Geometry.d.ts.map +1 -1
  31. package/dist/Geometry.js +64 -0
  32. package/dist/Geometry.js.map +1 -1
  33. package/dist/IBL.d.ts.map +1 -1
  34. package/dist/IBL.js +0 -1
  35. package/dist/IBL.js.map +1 -1
  36. package/dist/LightCollector.d.ts +5 -1
  37. package/dist/LightCollector.d.ts.map +1 -1
  38. package/dist/LightCollector.js +16 -3
  39. package/dist/LightCollector.js.map +1 -1
  40. package/dist/LightUniforms.d.ts +26 -1
  41. package/dist/LightUniforms.d.ts.map +1 -1
  42. package/dist/LightUniforms.js +140 -8
  43. package/dist/LightUniforms.js.map +1 -1
  44. package/dist/LightingRig.d.ts +77 -0
  45. package/dist/LightingRig.d.ts.map +1 -1
  46. package/dist/LightingRig.js +100 -11
  47. package/dist/LightingRig.js.map +1 -1
  48. package/dist/MeshConsolidation.d.ts +63 -0
  49. package/dist/MeshConsolidation.d.ts.map +1 -0
  50. package/dist/MeshConsolidation.js +251 -0
  51. package/dist/MeshConsolidation.js.map +1 -0
  52. package/dist/PMREM.d.ts +13 -1
  53. package/dist/PMREM.d.ts.map +1 -1
  54. package/dist/PMREM.js +18 -4
  55. package/dist/PMREM.js.map +1 -1
  56. package/dist/PostProcessPass.d.ts +24 -2
  57. package/dist/PostProcessPass.d.ts.map +1 -1
  58. package/dist/PostProcessPass.js +136 -18
  59. package/dist/PostProcessPass.js.map +1 -1
  60. package/dist/PrimitiveSubmissionAudit.d.ts +195 -0
  61. package/dist/PrimitiveSubmissionAudit.d.ts.map +1 -0
  62. package/dist/PrimitiveSubmissionAudit.js +280 -0
  63. package/dist/PrimitiveSubmissionAudit.js.map +1 -0
  64. package/dist/ProductTurntableFixtures.d.ts.map +1 -1
  65. package/dist/ProductTurntableFixtures.js +93 -13
  66. package/dist/ProductTurntableFixtures.js.map +1 -1
  67. package/dist/ReflectionProbe.d.ts +59 -0
  68. package/dist/ReflectionProbe.d.ts.map +1 -1
  69. package/dist/ReflectionProbe.js +224 -0
  70. package/dist/ReflectionProbe.js.map +1 -1
  71. package/dist/ReflectionSurfaces.d.ts +4 -2
  72. package/dist/ReflectionSurfaces.d.ts.map +1 -1
  73. package/dist/ReflectionSurfaces.js +13 -8
  74. package/dist/ReflectionSurfaces.js.map +1 -1
  75. package/dist/RenderBackend.d.ts +1 -1
  76. package/dist/RenderBackend.d.ts.map +1 -1
  77. package/dist/RenderBackend.js +5 -1
  78. package/dist/RenderBackend.js.map +1 -1
  79. package/dist/RenderDevice.d.ts +13 -2
  80. package/dist/RenderDevice.d.ts.map +1 -1
  81. package/dist/RenderDevice.js +5 -2
  82. package/dist/RenderDevice.js.map +1 -1
  83. package/dist/Renderer.d.ts +66 -3
  84. package/dist/Renderer.d.ts.map +1 -1
  85. package/dist/Renderer.js +417 -64
  86. package/dist/Renderer.js.map +1 -1
  87. package/dist/RendererPostprocessPlan.d.ts +10 -3
  88. package/dist/RendererPostprocessPlan.d.ts.map +1 -1
  89. package/dist/RendererPostprocessPlan.js +25 -5
  90. package/dist/RendererPostprocessPlan.js.map +1 -1
  91. package/dist/RendererVisualPipelineReport.d.ts +3 -2
  92. package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
  93. package/dist/RendererVisualPipelineReport.js +2 -0
  94. package/dist/RendererVisualPipelineReport.js.map +1 -1
  95. package/dist/ScreenSpaceLineMaterial.d.ts +34 -0
  96. package/dist/ScreenSpaceLineMaterial.d.ts.map +1 -0
  97. package/dist/ScreenSpaceLineMaterial.js +93 -0
  98. package/dist/ScreenSpaceLineMaterial.js.map +1 -0
  99. package/dist/ShaderChunks.d.ts +7 -0
  100. package/dist/ShaderChunks.d.ts.map +1 -1
  101. package/dist/ShaderChunks.js +137 -0
  102. package/dist/ShaderChunks.js.map +1 -1
  103. package/dist/ShaderLibrary.d.ts +17 -0
  104. package/dist/ShaderLibrary.d.ts.map +1 -1
  105. package/dist/ShaderLibrary.js +940 -98
  106. package/dist/ShaderLibrary.js.map +1 -1
  107. package/dist/ShadowPass.d.ts +10 -0
  108. package/dist/ShadowPass.d.ts.map +1 -1
  109. package/dist/ShadowPass.js +8 -1
  110. package/dist/ShadowPass.js.map +1 -1
  111. package/dist/SkinnedLitMaterial.d.ts +6 -0
  112. package/dist/SkinnedLitMaterial.d.ts.map +1 -1
  113. package/dist/SkinnedLitMaterial.js +22 -8
  114. package/dist/SkinnedLitMaterial.js.map +1 -1
  115. package/dist/SkinnedUnlitMaterial.d.ts +8 -0
  116. package/dist/SkinnedUnlitMaterial.d.ts.map +1 -1
  117. package/dist/SkinnedUnlitMaterial.js +26 -9
  118. package/dist/SkinnedUnlitMaterial.js.map +1 -1
  119. package/dist/SpecularPrefilter.d.ts +42 -0
  120. package/dist/SpecularPrefilter.d.ts.map +1 -0
  121. package/dist/SpecularPrefilter.js +480 -0
  122. package/dist/SpecularPrefilter.js.map +1 -0
  123. package/dist/TerrainFixtures.d.ts +24 -0
  124. package/dist/TerrainFixtures.d.ts.map +1 -1
  125. package/dist/TerrainFixtures.js +96 -0
  126. package/dist/TerrainFixtures.js.map +1 -1
  127. package/dist/Texture.d.ts +7 -0
  128. package/dist/Texture.d.ts.map +1 -1
  129. package/dist/Texture.js +9 -0
  130. package/dist/Texture.js.map +1 -1
  131. package/dist/VertexFormat.d.ts +34 -1
  132. package/dist/VertexFormat.d.ts.map +1 -1
  133. package/dist/VertexFormat.js +61 -0
  134. package/dist/VertexFormat.js.map +1 -1
  135. package/dist/WebGL2Device.d.ts +48 -0
  136. package/dist/WebGL2Device.d.ts.map +1 -1
  137. package/dist/WebGL2Device.js +1298 -44
  138. package/dist/WebGL2Device.js.map +1 -1
  139. package/dist/WebGPUDevice.d.ts +7 -2
  140. package/dist/WebGPUDevice.d.ts.map +1 -1
  141. package/dist/WebGPUDevice.js +111 -17
  142. package/dist/WebGPUDevice.js.map +1 -1
  143. package/dist/WebGPUSkinningLimits.d.ts +14 -0
  144. package/dist/WebGPUSkinningLimits.d.ts.map +1 -0
  145. package/dist/WebGPUSkinningLimits.js +14 -0
  146. package/dist/WebGPUSkinningLimits.js.map +1 -0
  147. package/dist/cartoon/CartoonMaterialStyle.d.ts +19 -0
  148. package/dist/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
  149. package/dist/cartoon/CartoonMaterialStyle.js +13 -0
  150. package/dist/cartoon/CartoonMaterialStyle.js.map +1 -0
  151. package/dist/cartoon/CartoonRenderPreset.d.ts +36 -0
  152. package/dist/cartoon/CartoonRenderPreset.d.ts.map +1 -0
  153. package/dist/cartoon/CartoonRenderPreset.js +23 -0
  154. package/dist/cartoon/CartoonRenderPreset.js.map +1 -0
  155. package/dist/cartoon/CartoonToonMaterial.d.ts +130 -0
  156. package/dist/cartoon/CartoonToonMaterial.d.ts.map +1 -0
  157. package/dist/cartoon/CartoonToonMaterial.js +303 -0
  158. package/dist/cartoon/CartoonToonMaterial.js.map +1 -0
  159. package/dist/cartoon/CartoonVisualQuality.d.ts +28 -0
  160. package/dist/cartoon/CartoonVisualQuality.d.ts.map +1 -0
  161. package/dist/cartoon/CartoonVisualQuality.js +39 -0
  162. package/dist/cartoon/CartoonVisualQuality.js.map +1 -0
  163. package/dist/cartoon/applyCartoonRenderPreset.d.ts +79 -0
  164. package/dist/cartoon/applyCartoonRenderPreset.d.ts.map +1 -0
  165. package/dist/cartoon/applyCartoonRenderPreset.js +88 -0
  166. package/dist/cartoon/applyCartoonRenderPreset.js.map +1 -0
  167. package/dist/cartoon/index.d.ts +6 -0
  168. package/dist/cartoon/index.d.ts.map +1 -0
  169. package/dist/cartoon/index.js +6 -0
  170. package/dist/cartoon/index.js.map +1 -0
  171. package/dist/index.d.ts +29 -18
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +16 -10
  174. package/dist/index.js.map +1 -1
  175. package/dist/postprocess/NativeLdrEffectLuts.d.ts +93 -0
  176. package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -0
  177. package/dist/postprocess/NativeLdrEffectLuts.js +202 -0
  178. package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -0
  179. package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  180. package/dist/production-runtime/PBRHDRPipeline.js +3 -0
  181. package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
  182. package/dist/production-runtime/ProductionRendererTypes.d.ts +1 -0
  183. package/dist/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
  184. package/dist/production-runtime/ProductionRendererTypes.js.map +1 -1
  185. package/dist/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
  186. package/dist/production-runtime/ProductionWebGL2Renderer.js +5 -3
  187. package/dist/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
  188. package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  189. package/dist/production-runtime/ProductionWebGPURenderer.js +9 -5
  190. package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  191. package/dist/production-runtime/TransmissionBackdropCapture.d.ts +5 -0
  192. package/dist/production-runtime/TransmissionBackdropCapture.d.ts.map +1 -1
  193. package/dist/production-runtime/TransmissionBackdropCapture.js +40 -0
  194. package/dist/production-runtime/TransmissionBackdropCapture.js.map +1 -1
  195. package/dist/production-runtime/environment/HDRLoader.d.ts +6 -0
  196. package/dist/production-runtime/environment/HDRLoader.d.ts.map +1 -1
  197. package/dist/production-runtime/environment/HDRLoader.js +19 -0
  198. package/dist/production-runtime/environment/HDRLoader.js.map +1 -1
  199. package/dist/production-runtime/index.d.ts +3 -1
  200. package/dist/production-runtime/index.d.ts.map +1 -1
  201. package/dist/production-runtime/index.js +1 -0
  202. package/dist/production-runtime/index.js.map +1 -1
  203. package/package.json +3 -3
@@ -0,0 +1,480 @@
1
+ const A3D_PREFILTER_EPSILON = 0.00001;
2
+ /**
3
+ * Roughness assigned to each prefiltered level, exposed so diagnostics and
4
+ * shader LOD math agree on the mapping instead of each re-deriving it.
5
+ */
6
+ export function specularPrefilterLevelRoughness(levelCount) {
7
+ if (!Number.isInteger(levelCount) || levelCount < 1) {
8
+ throw new RangeError("Environment specular prefilter level count must be a positive integer");
9
+ }
10
+ return Array.from({ length: levelCount }, (_unused, levelIndex) => (levelCount <= 1 ? 0 : levelIndex / (levelCount - 1)));
11
+ }
12
+ export function prefilterGgxEnvironmentLevels(source, options = {}) {
13
+ validateLinearHdrSource(source);
14
+ const maxLevels = Math.floor(Math.log2(Math.max(source.width, source.height))) + 1;
15
+ const requestedLevels = options.levels ?? maxLevels;
16
+ if (!Number.isInteger(requestedLevels) || requestedLevels < 1) {
17
+ throw new RangeError("GGX specular prefilter levels must be a positive integer");
18
+ }
19
+ const sampleCount = options.sampleCount ?? 64;
20
+ if (!Number.isInteger(sampleCount) || sampleCount <= 0) {
21
+ throw new RangeError("GGX specular prefilter sampleCount must be a positive integer");
22
+ }
23
+ const levelCount = Math.min(requestedLevels, maxLevels);
24
+ const levelRoughness = specularPrefilterLevelRoughness(levelCount);
25
+ const pyramid = buildEnvironmentPyramid(source);
26
+ const levels = [];
27
+ for (let levelIndex = 0; levelIndex < levelCount; levelIndex += 1) {
28
+ const roughness = levelRoughness[levelIndex];
29
+ const width = Math.max(1, Math.floor(source.width / 2 ** levelIndex));
30
+ const height = Math.max(1, Math.floor(source.height / 2 ** levelIndex));
31
+ if (roughness <= A3D_PREFILTER_EPSILON && width === source.width && height === source.height) {
32
+ // Roughness 0 is a mirror reflection at the source resolution, so the
33
+ // filtered result is exactly the source. Resampling it through the
34
+ // bilinear/trig path would cost a full-resolution pass to reproduce data
35
+ // we already have (and would not even be bit-exact).
36
+ levels.push({ width, height, roughness, data: copyRgbOpaque(source) });
37
+ continue;
38
+ }
39
+ levels.push({
40
+ width,
41
+ height,
42
+ roughness,
43
+ data: prefilterLevelData(pyramid, width, height, roughness, sampleCount)
44
+ });
45
+ }
46
+ return levels;
47
+ }
48
+ function copyRgbOpaque(source) {
49
+ const data = new Float32Array(source.width * source.height * 4);
50
+ for (let index = 0; index < source.width * source.height; index += 1) {
51
+ const offset = index * 4;
52
+ data[offset] = Math.max(0, source.data[offset] ?? 0);
53
+ data[offset + 1] = Math.max(0, source.data[offset + 1] ?? 0);
54
+ data[offset + 2] = Math.max(0, source.data[offset + 2] ?? 0);
55
+ data[offset + 3] = 1;
56
+ }
57
+ return data;
58
+ }
59
+ /**
60
+ * Projects an equirectangular radiance map onto nine irradiance SH bands using
61
+ * per-texel solid angle weights. This is a real cosine convolution (evaluated
62
+ * through the Ramamoorthi/Hanrahan irradiance kernel), not a box blur.
63
+ */
64
+ export function projectEnvironmentIrradianceSh(source) {
65
+ validateLinearHdrSource(source);
66
+ const bands = Array.from({ length: 9 }, () => [0, 0, 0]);
67
+ const deltaPhi = (Math.PI * 2) / source.width;
68
+ const deltaTheta = Math.PI / source.height;
69
+ for (let y = 0; y < source.height; y += 1) {
70
+ const theta = ((y + 0.5) / source.height) * Math.PI;
71
+ const solidAngle = deltaPhi * deltaTheta * Math.sin(theta);
72
+ for (let x = 0; x < source.width; x += 1) {
73
+ const direction = equirectDirection(x, y, source.width, source.height);
74
+ const offset = (y * source.width + x) * 4;
75
+ const red = Math.max(0, source.data[offset] ?? 0);
76
+ const green = Math.max(0, source.data[offset + 1] ?? 0);
77
+ const blue = Math.max(0, source.data[offset + 2] ?? 0);
78
+ const basis = shBasis9(direction);
79
+ for (let band = 0; band < 9; band += 1) {
80
+ const weight = basis[band] * solidAngle;
81
+ bands[band][0] += red * weight;
82
+ bands[band][1] += green * weight;
83
+ bands[band][2] += blue * weight;
84
+ }
85
+ }
86
+ }
87
+ return { bands: bands.map((band) => [band[0], band[1], band[2]]) };
88
+ }
89
+ /**
90
+ * Evaluates cosine-convolved irradiance divided by PI, so the result is the
91
+ * radiance-equivalent value a shader multiplies directly by albedo. A uniform
92
+ * environment of radiance 1 evaluates back to 1.
93
+ */
94
+ export function evaluateShIrradiance(coefficients, normal) {
95
+ const n = normalizeVector(normal);
96
+ const x = n[0];
97
+ const y = n[1];
98
+ const z = n[2];
99
+ // Ramamoorthi & Hanrahan irradiance kernel constants; these already fold in
100
+ // the cosine-lobe convolution weights (PI, 2PI/3, PI/4).
101
+ const c1 = 0.429043;
102
+ const c2 = 0.511664;
103
+ const c3 = 0.743125;
104
+ const c4 = 0.886227;
105
+ const c5 = 0.247708;
106
+ const bands = coefficients.bands;
107
+ const result = [0, 0, 0];
108
+ for (let channel = 0; channel < 3; channel += 1) {
109
+ const l00 = bands[0]?.[channel] ?? 0;
110
+ const l1m1 = bands[1]?.[channel] ?? 0;
111
+ const l10 = bands[2]?.[channel] ?? 0;
112
+ const l11 = bands[3]?.[channel] ?? 0;
113
+ const l2m2 = bands[4]?.[channel] ?? 0;
114
+ const l2m1 = bands[5]?.[channel] ?? 0;
115
+ const l20 = bands[6]?.[channel] ?? 0;
116
+ const l21 = bands[7]?.[channel] ?? 0;
117
+ const l22 = bands[8]?.[channel] ?? 0;
118
+ const irradiance = c1 * l22 * (x * x - y * y)
119
+ + c3 * l20 * z * z
120
+ + c4 * l00
121
+ - c5 * l20
122
+ + 2 * c1 * (l2m2 * x * y + l21 * x * z + l2m1 * y * z)
123
+ + 2 * c2 * (l11 * x + l1m1 * y + l10 * z);
124
+ result[channel] = Math.max(0, irradiance / Math.PI);
125
+ }
126
+ return result;
127
+ }
128
+ export function convolveEnvironmentIrradiance(source, width, height) {
129
+ validateLinearHdrSource(source);
130
+ if (!Number.isInteger(width) || width <= 0 || !Number.isInteger(height) || height <= 0) {
131
+ throw new RangeError("Environment irradiance dimensions must be positive integers");
132
+ }
133
+ const coefficients = projectEnvironmentIrradianceSh(source);
134
+ const data = new Float32Array(width * height * 4);
135
+ for (let y = 0; y < height; y += 1) {
136
+ for (let x = 0; x < width; x += 1) {
137
+ const irradiance = evaluateShIrradiance(coefficients, equirectDirection(x, y, width, height));
138
+ const offset = (y * width + x) * 4;
139
+ data[offset] = irradiance[0];
140
+ data[offset + 1] = irradiance[1];
141
+ data[offset + 2] = irradiance[2];
142
+ data[offset + 3] = 1;
143
+ }
144
+ }
145
+ return { width, height, data };
146
+ }
147
+ function buildGgxSampleTable(roughness, sampleCount, baseTexelSolidAngle, maxLod) {
148
+ const alpha = Math.max(roughness * roughness, A3D_PREFILTER_EPSILON);
149
+ const local = new Float64Array(sampleCount * 3);
150
+ const weight = new Float64Array(sampleCount);
151
+ const lod = new Float64Array(sampleCount);
152
+ let count = 0;
153
+ for (let sampleIndex = 0; sampleIndex < sampleCount; sampleIndex += 1) {
154
+ const xi = hammersley2d(sampleIndex, sampleCount);
155
+ const half = importanceSampleGgxLocal(xi, roughness);
156
+ // N = V = +Z in local space, so vDotH is the half vector's Z component.
157
+ const vDotH = half[2];
158
+ if (vDotH <= 0)
159
+ continue;
160
+ // light = 2 * (V.H) * H - V, so N.L = 2 * (V.H)^2 - 1 when N = V.
161
+ const nDotL = 2 * vDotH * vDotH - 1;
162
+ if (nDotL <= 0)
163
+ continue;
164
+ const nDotH = Math.max(vDotH, A3D_PREFILTER_EPSILON);
165
+ const distribution = ggxDistribution(nDotH, alpha);
166
+ const pdf = (distribution * nDotH) / (4 * vDotH) + A3D_PREFILTER_EPSILON;
167
+ const sampleSolidAngle = 1 / (sampleCount * pdf);
168
+ const offset = count * 3;
169
+ local[offset] = half[0];
170
+ local[offset + 1] = half[1];
171
+ local[offset + 2] = half[2];
172
+ weight[count] = nDotL;
173
+ lod[count] = clampNumber(0.5 * Math.log2(sampleSolidAngle / baseTexelSolidAngle), 0, maxLod);
174
+ count += 1;
175
+ }
176
+ return { local, weight, lod, count };
177
+ }
178
+ function prefilterLevelData(pyramid, width, height, roughness, sampleCount) {
179
+ const data = new Float32Array(width * height * 4);
180
+ if (roughness <= A3D_PREFILTER_EPSILON) {
181
+ // Mirror reflection: the GGX lobe collapses to a delta, so the filtered
182
+ // value is just the environment radiance along the reflection direction.
183
+ const base = pyramid.level(0);
184
+ for (let y = 0; y < height; y += 1) {
185
+ for (let x = 0; x < width; x += 1) {
186
+ equirectDirectionInto(x, y, width, height, scratchDirection);
187
+ sampleEquirectBilinearInto(base, scratchDirection[0], scratchDirection[1], scratchDirection[2], scratchSample);
188
+ const offset = (y * width + x) * 4;
189
+ data[offset] = scratchSample[0];
190
+ data[offset + 1] = scratchSample[1];
191
+ data[offset + 2] = scratchSample[2];
192
+ data[offset + 3] = 1;
193
+ }
194
+ }
195
+ return data;
196
+ }
197
+ const table = buildGgxSampleTable(roughness, sampleCount, pyramid.baseTexelSolidAngle, pyramid.depth - 1);
198
+ // Materialise every pyramid level the table can reach before the pixel loop,
199
+ // so the loop never mixes lazy construction into its inner work.
200
+ for (let sampleIndex = 0; sampleIndex < table.count; sampleIndex += 1) {
201
+ pyramid.level(Math.ceil(table.lod[sampleIndex]));
202
+ }
203
+ for (let y = 0; y < height; y += 1) {
204
+ for (let x = 0; x < width; x += 1) {
205
+ equirectDirectionInto(x, y, width, height, scratchDirection);
206
+ const nx = scratchDirection[0];
207
+ const ny = scratchDirection[1];
208
+ const nz = scratchDirection[2];
209
+ const offset = (y * width + x) * 4;
210
+ // Tangent frame is per pixel, not per sample.
211
+ const upX = Math.abs(ny) < 0.999 ? 0 : 1;
212
+ const upY = Math.abs(ny) < 0.999 ? 1 : 0;
213
+ let tx = upY * nz - 0 * ny;
214
+ let ty = 0 * nx - upX * nz;
215
+ let tz = upX * ny - upY * nx;
216
+ const tangentLength = Math.hypot(tx, ty, tz) || 1;
217
+ tx /= tangentLength;
218
+ ty /= tangentLength;
219
+ tz /= tangentLength;
220
+ const bx = ny * tz - nz * ty;
221
+ const by = nz * tx - nx * tz;
222
+ const bz = nx * ty - ny * tx;
223
+ let red = 0;
224
+ let green = 0;
225
+ let blue = 0;
226
+ let totalWeight = 0;
227
+ for (let sampleIndex = 0; sampleIndex < table.count; sampleIndex += 1) {
228
+ const localOffset = sampleIndex * 3;
229
+ const lx = table.local[localOffset];
230
+ const ly = table.local[localOffset + 1];
231
+ const vDotH = table.local[localOffset + 2];
232
+ const hx = tx * lx + bx * ly + nx * vDotH;
233
+ const hy = ty * lx + by * ly + ny * vDotH;
234
+ const hz = tz * lx + bz * ly + nz * vDotH;
235
+ // light = 2 * (V.H) * H - V, already unit length for unit H and V.
236
+ const lightX = 2 * vDotH * hx - nx;
237
+ const lightY = 2 * vDotH * hy - ny;
238
+ const lightZ = 2 * vDotH * hz - nz;
239
+ samplePyramidTrilinearInto(pyramid, lightX, lightY, lightZ, table.lod[sampleIndex], scratchSample);
240
+ const weight = table.weight[sampleIndex];
241
+ red += scratchSample[0] * weight;
242
+ green += scratchSample[1] * weight;
243
+ blue += scratchSample[2] * weight;
244
+ totalWeight += weight;
245
+ }
246
+ if (totalWeight <= A3D_PREFILTER_EPSILON) {
247
+ sampleEquirectBilinearInto(pyramid.level(0), nx, ny, nz, scratchSample);
248
+ data[offset] = scratchSample[0];
249
+ data[offset + 1] = scratchSample[1];
250
+ data[offset + 2] = scratchSample[2];
251
+ data[offset + 3] = 1;
252
+ continue;
253
+ }
254
+ data[offset] = red / totalWeight;
255
+ data[offset + 1] = green / totalWeight;
256
+ data[offset + 2] = blue / totalWeight;
257
+ data[offset + 3] = 1;
258
+ }
259
+ }
260
+ return data;
261
+ }
262
+ function buildEnvironmentPyramid(source) {
263
+ // Built lazily: a request for only low-roughness levels never needs the deep
264
+ // coarse levels, and halving a 1k equirect map eight times is not free.
265
+ const levels = [{
266
+ width: source.width,
267
+ height: source.height,
268
+ data: new Float32Array(source.data)
269
+ }];
270
+ const maxDepth = Math.floor(Math.log2(Math.max(source.width, source.height))) + 1;
271
+ return {
272
+ get levels() {
273
+ return levels;
274
+ },
275
+ level(index) {
276
+ const target = clampNumber(Math.floor(index), 0, maxDepth - 1);
277
+ while (levels.length <= target) {
278
+ levels.push(halveEnvironmentLevel(levels.at(-1)));
279
+ }
280
+ return levels[target];
281
+ },
282
+ depth: maxDepth,
283
+ baseTexelSolidAngle: (4 * Math.PI) / (source.width * source.height)
284
+ };
285
+ }
286
+ function halveEnvironmentLevel(level) {
287
+ const width = Math.max(1, Math.floor(level.width / 2));
288
+ const height = Math.max(1, Math.floor(level.height / 2));
289
+ const data = new Float32Array(width * height * 4);
290
+ const xStep = level.width > 1 ? 2 : 1;
291
+ const yStep = level.height > 1 ? 2 : 1;
292
+ for (let y = 0; y < height; y += 1) {
293
+ for (let x = 0; x < width; x += 1) {
294
+ let red = 0;
295
+ let green = 0;
296
+ let blue = 0;
297
+ let count = 0;
298
+ for (let sampleY = 0; sampleY < yStep; sampleY += 1) {
299
+ for (let sampleX = 0; sampleX < xStep; sampleX += 1) {
300
+ const offset = (Math.min(level.height - 1, y * yStep + sampleY) * level.width
301
+ + Math.min(level.width - 1, x * xStep + sampleX)) * 4;
302
+ red += Math.max(0, level.data[offset] ?? 0);
303
+ green += Math.max(0, level.data[offset + 1] ?? 0);
304
+ blue += Math.max(0, level.data[offset + 2] ?? 0);
305
+ count += 1;
306
+ }
307
+ }
308
+ const offset = (y * width + x) * 4;
309
+ data[offset] = red / count;
310
+ data[offset + 1] = green / count;
311
+ data[offset + 2] = blue / count;
312
+ data[offset + 3] = 1;
313
+ }
314
+ }
315
+ return { width, height, data };
316
+ }
317
+ /**
318
+ * Scratch buffers for the prefilter hot loop. `prefilterLevelData` is
319
+ * synchronous and single-threaded, so reusing them avoids allocating several
320
+ * short-lived arrays per pixel-sample.
321
+ */
322
+ const scratchDirection = new Float64Array(3);
323
+ const scratchSample = new Float64Array(3);
324
+ const scratchLow = new Float64Array(3);
325
+ const scratchHigh = new Float64Array(3);
326
+ /**
327
+ * Trilinear pyramid fetch for a **unit** direction.
328
+ *
329
+ * The equirect projection (`atan2`/`acos`) depends only on the direction, not
330
+ * the level, so it is evaluated once and the resulting UV is reused for both
331
+ * mip levels. Doing it per level doubled the transcendental cost of the hot
332
+ * loop for no change in result.
333
+ */
334
+ function samplePyramidTrilinearInto(pyramid, x, y, z, lod, out) {
335
+ const u = moduloNumber(Math.atan2(z, x) / (Math.PI * 2) + 0.5, 1);
336
+ const v = clampNumber(Math.acos(clampNumber(y, -1, 1)) / Math.PI, 0, 1);
337
+ const lower = Math.floor(lod);
338
+ const upper = Math.min(pyramid.depth - 1, lower + 1);
339
+ const fraction = lod - lower;
340
+ sampleEquirectUvInto(pyramid.level(lower), u, v, scratchLow);
341
+ if (upper === lower || fraction <= 0) {
342
+ out[0] = scratchLow[0];
343
+ out[1] = scratchLow[1];
344
+ out[2] = scratchLow[2];
345
+ return;
346
+ }
347
+ sampleEquirectUvInto(pyramid.level(upper), u, v, scratchHigh);
348
+ out[0] = scratchLow[0] + (scratchHigh[0] - scratchLow[0]) * fraction;
349
+ out[1] = scratchLow[1] + (scratchHigh[1] - scratchLow[1]) * fraction;
350
+ out[2] = scratchLow[2] + (scratchHigh[2] - scratchLow[2]) * fraction;
351
+ }
352
+ /** Bilinear equirect fetch with wrapped U and clamped V. */
353
+ function sampleEquirectUvInto(level, u, v, out) {
354
+ const width = level.width;
355
+ const height = level.height;
356
+ const fx = u * width - 0.5;
357
+ const fy = v * height - 0.5;
358
+ const x0 = Math.floor(fx);
359
+ const y0 = Math.floor(fy);
360
+ const tx = fx - x0;
361
+ const ty = fy - y0;
362
+ const xa = moduloNumber(x0, width);
363
+ const xb = moduloNumber(x0 + 1, width);
364
+ const ya = clampNumber(y0, 0, height - 1);
365
+ const yb = clampNumber(y0 + 1, 0, height - 1);
366
+ const offsetA = (ya * width + xa) * 4;
367
+ const offsetB = (ya * width + xb) * 4;
368
+ const offsetC = (yb * width + xa) * 4;
369
+ const offsetD = (yb * width + xb) * 4;
370
+ const data = level.data;
371
+ for (let channel = 0; channel < 3; channel += 1) {
372
+ // Clamp per texel, before interpolation, so a negative input value cannot
373
+ // pull a neighbouring positive texel down.
374
+ const c00 = Math.max(0, data[offsetA + channel] ?? 0);
375
+ const c10 = Math.max(0, data[offsetB + channel] ?? 0);
376
+ const c01 = Math.max(0, data[offsetC + channel] ?? 0);
377
+ const c11 = Math.max(0, data[offsetD + channel] ?? 0);
378
+ const top = c00 + (c10 - c00) * tx;
379
+ const bottom = c01 + (c11 - c01) * tx;
380
+ out[channel] = top + (bottom - top) * ty;
381
+ }
382
+ }
383
+ /** Bilinear equirect fetch for a direction that need not be unit length. */
384
+ function sampleEquirectBilinearInto(level, dx, dy, dz, out) {
385
+ // Plain sqrt rather than Math.hypot: hypot's overflow-safe scaling makes it
386
+ // dramatically slower in V8, and these components are bounded direction
387
+ // vectors where the extra range is irrelevant.
388
+ const lengthSquared = dx * dx + dy * dy + dz * dz;
389
+ const length = Math.sqrt(lengthSquared);
390
+ const nx = length <= A3D_PREFILTER_EPSILON ? 0 : dx / length;
391
+ const ny = length <= A3D_PREFILTER_EPSILON ? 0 : dy / length;
392
+ const nz = length <= A3D_PREFILTER_EPSILON ? 1 : dz / length;
393
+ const u = moduloNumber(Math.atan2(nz, nx) / (Math.PI * 2) + 0.5, 1);
394
+ const v = clampNumber(Math.acos(clampNumber(ny, -1, 1)) / Math.PI, 0, 1);
395
+ sampleEquirectUvInto(level, u, v, out);
396
+ }
397
+ function equirectDirectionInto(x, y, width, height, out) {
398
+ const phi = ((x + 0.5) / width - 0.5) * Math.PI * 2;
399
+ const theta = ((y + 0.5) / height) * Math.PI;
400
+ const sinTheta = Math.sin(theta);
401
+ // Already unit length analytically: (cos(phi)sin(theta))^2 + cos(theta)^2 +
402
+ // (sin(phi)sin(theta))^2 = 1, so no normalisation pass is needed.
403
+ out[0] = Math.cos(phi) * sinTheta;
404
+ out[1] = Math.cos(theta);
405
+ out[2] = Math.sin(phi) * sinTheta;
406
+ }
407
+ function ggxDistribution(nDotH, alpha) {
408
+ const alpha2 = alpha * alpha;
409
+ const denominator = nDotH * nDotH * (alpha2 - 1) + 1;
410
+ return alpha2 / Math.max(Math.PI * denominator * denominator, A3D_PREFILTER_EPSILON);
411
+ }
412
+ function importanceSampleGgxLocal(xi, roughness) {
413
+ const alpha = Math.max(roughness * roughness, A3D_PREFILTER_EPSILON);
414
+ const alpha2 = alpha * alpha;
415
+ const phi = 2 * Math.PI * xi[0];
416
+ const cosTheta = Math.sqrt((1 - xi[1]) / Math.max(1 + (alpha2 - 1) * xi[1], A3D_PREFILTER_EPSILON));
417
+ const sinTheta = Math.sqrt(Math.max(0, 1 - cosTheta * cosTheta));
418
+ return [Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta];
419
+ }
420
+ function hammersley2d(index, count) {
421
+ return [(index + 0.5) / count, radicalInverseVdc(index)];
422
+ }
423
+ function radicalInverseVdc(bits) {
424
+ let value = bits >>> 0;
425
+ value = ((value << 16) | (value >>> 16)) >>> 0;
426
+ value = (((value & 0x55555555) << 1) | ((value & 0xaaaaaaaa) >>> 1)) >>> 0;
427
+ value = (((value & 0x33333333) << 2) | ((value & 0xcccccccc) >>> 2)) >>> 0;
428
+ value = (((value & 0x0f0f0f0f) << 4) | ((value & 0xf0f0f0f0) >>> 4)) >>> 0;
429
+ value = (((value & 0x00ff00ff) << 8) | ((value & 0xff00ff00) >>> 8)) >>> 0;
430
+ return value * 2.3283064365386963e-10;
431
+ }
432
+ function shBasis9(direction) {
433
+ const x = direction[0];
434
+ const y = direction[1];
435
+ const z = direction[2];
436
+ return [
437
+ 0.282095,
438
+ 0.488603 * y,
439
+ 0.488603 * z,
440
+ 0.488603 * x,
441
+ 1.092548 * x * y,
442
+ 1.092548 * y * z,
443
+ 0.315392 * (3 * z * z - 1),
444
+ 1.092548 * x * z,
445
+ 0.546274 * (x * x - y * y)
446
+ ];
447
+ }
448
+ function equirectDirection(x, y, width, height) {
449
+ const u = (x + 0.5) / width;
450
+ const v = (y + 0.5) / height;
451
+ const phi = (u - 0.5) * Math.PI * 2;
452
+ const theta = v * Math.PI;
453
+ const sinTheta = Math.sin(theta);
454
+ return normalizeVector([
455
+ Math.cos(phi) * sinTheta,
456
+ Math.cos(theta),
457
+ Math.sin(phi) * sinTheta
458
+ ]);
459
+ }
460
+ function normalizeVector(value) {
461
+ const length = Math.hypot(value[0], value[1], value[2]);
462
+ if (length <= A3D_PREFILTER_EPSILON)
463
+ return [0, 0, 1];
464
+ return [value[0] / length, value[1] / length, value[2] / length];
465
+ }
466
+ function clampNumber(value, min, max) {
467
+ return Math.max(min, Math.min(max, value));
468
+ }
469
+ function moduloNumber(value, divisor) {
470
+ return ((value % divisor) + divisor) % divisor;
471
+ }
472
+ function validateLinearHdrSource(source) {
473
+ if (!Number.isInteger(source.width) || source.width <= 0 || !Number.isInteger(source.height) || source.height <= 0) {
474
+ throw new RangeError("Environment prefilter dimensions must be positive integers");
475
+ }
476
+ if (source.data.length !== source.width * source.height * 4) {
477
+ throw new RangeError("Environment prefilter data must contain exactly width * height * 4 linear RGBA values");
478
+ }
479
+ }
480
+ //# sourceMappingURL=SpecularPrefilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpecularPrefilter.js","sourceRoot":"","sources":["../../../../packages/rendering/src/SpecularPrefilter.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG,OAAO,CAAC;AA0CtC;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,UAAkB;IAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,uEAAuE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CACjE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CACpD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAAqC,EACrC,UAAuC,EAAE;IAEzC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,UAAU,CAAC,+DAA+D,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,+BAA+B,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAqC,EAAE,CAAC;IAEpD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,UAAU,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACxE,IAAI,SAAS,IAAI,qBAAqB,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7F,sEAAsE;YACtE,mEAAmE;YACnE,yEAAyE;YACzE,qDAAqD;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK;YACL,MAAM;YACN,SAAS;YACT,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;SACzE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAqC;IAC1D,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAqC;IAClF,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAA+B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAE,GAAG,UAAU,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAU,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAsC,EACtC,MAAyC;IAEzC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,4EAA4E;IAC5E,yDAAyD;IACzD,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IACjC,MAAM,MAAM,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;cACzC,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;cAChB,EAAE,GAAG,GAAG;cACR,EAAE,GAAG,GAAG;cACR,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;cACpD,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAAqC,EACrC,KAAa,EACb,MAAc;IAEd,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,UAAU,CAAC,6DAA6D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,YAAY,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9F,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAsBD,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,WAAmB,EACnB,mBAA2B,EAC3B,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,wBAAwB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrD,wEAAwE;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QACzB,kEAAkE;QAClE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,qBAAqB,CAAC;QACzE,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7F,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA2B,EAC3B,KAAa,EACb,MAAc,EACd,SAAiB,EACjB,WAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,IAAI,qBAAqB,EAAE,CAAC;QACvC,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBAC7D,0BAA0B,CACxB,IAAI,EACJ,gBAAgB,CAAC,CAAC,CAAE,EACpB,gBAAgB,CAAC,CAAC,CAAE,EACpB,gBAAgB,CAAC,CAAC,CAAE,EACpB,aAAa,CACd,CAAC;gBACF,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1G,6EAA6E;IAC7E,iEAAiE;IACjE,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC7D,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;YAChC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;YAChC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;YAChC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEnC,8CAA8C;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;YAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAClD,EAAE,IAAI,aAAa,CAAC;YACpB,EAAE,IAAI,aAAa,CAAC;YACpB,EAAE,IAAI,aAAa,CAAC;YACpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAE7B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBACpC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;gBAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;gBAC1C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;gBAC1C,mEAAmE;gBACnE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEnC,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAE,EAAE,aAAa,CAAC,CAAC;gBACpG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAE,CAAC;gBAC1C,GAAG,IAAI,aAAa,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC;gBAClC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC;gBACpC,IAAI,IAAI,aAAa,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC;gBACnC,WAAW,IAAI,MAAM,CAAC;YACxB,CAAC;YAED,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;gBACzC,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAqC;IACpE,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,MAAM,GAAoC,CAAC;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;SACpC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClF,OAAO;QACL,IAAI,MAAM;YACR,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,KAAa;YACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAE,CAAC;QACzB,CAAC;QACD,KAAK,EAAE,QAAQ;QACf,mBAAmB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACpD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK;0BACzE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxD,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC5C,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjD,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7C,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AACvC,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAExC;;;;;;;GAOG;AACH,SAAS,0BAA0B,CACjC,OAA2B,EAC3B,CAAS,EACT,CAAS,EACT,CAAS,EACT,GAAW,EACX,GAAiB;IAEjB,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,KAAK,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACxB,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACxB,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACxB,OAAO;IACT,CAAC;IACD,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9D,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC;IACxE,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC;IACxE,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAE,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC;AAC1E,CAAC;AAED,4DAA4D;AAC5D,SAAS,oBAAoB,CAC3B,KAAoC,EACpC,CAAS,EACT,CAAS,EACT,GAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAChD,0EAA0E;QAC1E,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,0BAA0B,CACjC,KAAoC,EACpC,EAAU,EACV,EAAU,EACV,EAAU,EACV,GAAiB;IAEjB,4EAA4E;IAC5E,wEAAwE;IACxE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;IAC7D,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,GAAiB;IACnG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,4EAA4E;IAC5E,kEAAkE;IAClE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAClC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa;IACnD,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,GAAG,WAAW,EAAE,qBAAqB,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,wBAAwB,CAC/B,EAA6B,EAC7B,SAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAChD,OAAO,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IACvB,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/C,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,KAAK,GAAG,sBAAsB,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,SAA4C;IAC5D,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO;QACL,QAAQ;QACR,QAAQ,GAAG,CAAC;QACZ,QAAQ,GAAG,CAAC;QACZ,QAAQ,GAAG,CAAC;QACZ,QAAQ,GAAG,CAAC,GAAG,CAAC;QAChB,QAAQ,GAAG,CAAC,GAAG,CAAC;QAChB,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,QAAQ,GAAG,CAAC,GAAG,CAAC;QAChB,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;IAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,eAAe,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAwC;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,IAAI,qBAAqB;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,OAAe;IAClD,OAAO,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;AACjD,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAqC;IACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnH,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,uFAAuF,CAAC,CAAC;IAChH,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Geometry } from "./Geometry";
1
2
  export type TerrainFixtureBiome = "water" | "beach" | "grassland" | "forest" | "rock" | "snow";
2
3
  export interface TerrainHeightfieldFixtureOptions {
3
4
  readonly width?: number;
@@ -31,6 +32,29 @@ export interface TerrainHeightfieldFixture {
31
32
  readonly source: "origin-master-terrain-generator-adapted";
32
33
  readonly claimBoundary: string;
33
34
  }
35
+ export interface TerrainHeightfieldGeometryOptions {
36
+ readonly sizeX?: number;
37
+ readonly sizeZ?: number;
38
+ readonly heightScale?: number;
39
+ readonly yOffset?: number;
40
+ }
41
+ export interface TerrainHeightfieldColliderDescriptor {
42
+ readonly kind: "heightfield";
43
+ readonly columns: number;
44
+ readonly rows: number;
45
+ readonly heights: Float32Array;
46
+ readonly cellSizeX: number;
47
+ readonly cellSizeZ: number;
48
+ readonly origin: readonly [number, number, number];
49
+ }
50
+ export interface TerrainHeightfieldGeometry {
51
+ readonly geometry: Geometry;
52
+ readonly collider: TerrainHeightfieldColliderDescriptor;
53
+ readonly vertexCount: number;
54
+ readonly triangleCount: number;
55
+ readonly claimBoundary: string;
56
+ }
34
57
  export declare function createTerrainHeightfieldFixture(options?: TerrainHeightfieldFixtureOptions): TerrainHeightfieldFixture;
35
58
  export declare function sampleTerrainHeightfield(fixture: TerrainHeightfieldFixture, u: number, v: number): TerrainHeightfieldSample;
59
+ export declare function createTerrainHeightfieldGeometry(fixture: TerrainHeightfieldFixture, options?: TerrainHeightfieldGeometryOptions): TerrainHeightfieldGeometry;
36
60
  //# sourceMappingURL=TerrainFixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/TerrainFixtures.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/F,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,gDAAgD,CAAC;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACtD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,yCAAyC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,gCAAqC,GAAG,yBAAyB,CA6DzH;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAQ3H"}
1
+ {"version":3,"file":"TerrainFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/TerrainFixtures.ts"],"names":[],"mappings":"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"}