@woosh/meep-engine 3.26.0 → 3.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
- package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
- package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
- package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
- package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/vgeo_runtime/README.md +167 -22
- package/src/shade/playground/vgeo_runtime/index.html +112 -62
- package/src/shade/playground/vgeo_runtime/main.js +660 -83
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.js +19 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +73 -5
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +26 -15
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +5 -3
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +20 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +56 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +1 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +55 -0
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +202 -13
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +147 -10
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +637 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +58 -28
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +77 -105
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +105 -22
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +47 -489
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1363 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +186 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +20 -8
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +580 -188
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +7 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +7 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +59 -4
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
- package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.js +21 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
- package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every knob of {@link VGeoResidency}, in one place, all of them per-reading budgets or plain
|
|
3
|
+
* capacities.
|
|
4
|
+
*
|
|
5
|
+
* The defaults are defaults to be overridden by whoever knows the device and the scene, not
|
|
6
|
+
* measurements. What the shape promises is that nothing the residency does per frame scales with
|
|
7
|
+
* anything but these numbers and the readback the host chose to read
|
|
8
|
+
* (RUNTIME_PLAN_2026_09_14 §1).
|
|
9
|
+
*
|
|
10
|
+
* @author Alex Goldring
|
|
11
|
+
* @copyright Company Named Limited (c) 2026
|
|
12
|
+
*/
|
|
13
|
+
export class VGeoResidencyOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Decoded page bytes the VRAM tier may hold. `undefined` means what the pool's slots hold at the
|
|
16
|
+
* page size it was built for, so the two agree by construction.
|
|
17
|
+
* @type {number|undefined}
|
|
18
|
+
*/
|
|
19
|
+
vram_budget_bytes: number | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Decoded page bytes the RAM tier may hold, across every registered container.
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
ram_budget_bytes: number;
|
|
25
|
+
/**
|
|
26
|
+
* Pages the RAM tier may hold at once — the size of its flat slot arrays. A slot is a few words
|
|
27
|
+
* and a reference; what bounds the count is {@link ram_budget_bytes} in practice, and this only
|
|
28
|
+
* has to be at least what the budget can hold at the smallest page the containers produce.
|
|
29
|
+
* @type {number}
|
|
30
|
+
*/
|
|
31
|
+
ram_slot_capacity: number;
|
|
32
|
+
/**
|
|
33
|
+
* Frames a page is safe from eviction after it was last used in its tier. No shorter than the
|
|
34
|
+
* readback latency, which is at least one frame of `mapAsync` and in practice a couple, because a
|
|
35
|
+
* page the last landed reading saw drawn from is a page still on screen.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
protect_frames: number;
|
|
39
|
+
/**
|
|
40
|
+
* Pages one reading may promote from RAM to VRAM. A promotion is a slot write, a meshlet batch
|
|
41
|
+
* and an activation cascade; pages are near-uniform, so the budget is in pages rather than bytes.
|
|
42
|
+
* @type {number}
|
|
43
|
+
*/
|
|
44
|
+
max_promotions_per_reading: number;
|
|
45
|
+
/**
|
|
46
|
+
* Pages one reading may start fetching, across every registered container.
|
|
47
|
+
* @type {number}
|
|
48
|
+
*/
|
|
49
|
+
max_fetches_per_reading: number;
|
|
50
|
+
/**
|
|
51
|
+
* Eviction candidates one reading may test, across both tiers. This is what bounds a full
|
|
52
|
+
* tier's cost per reading: the CLOCK hand tests this many rows and no more, and a reading that
|
|
53
|
+
* spends it refuses the rest of its promotions and admissions until the next reading lands —
|
|
54
|
+
* the tier turns over at a rate the host chose rather than at a rate the resident count chose
|
|
55
|
+
* (RUNTIME_PLAN_2026_09_14 §4.4).
|
|
56
|
+
* @type {number}
|
|
57
|
+
*/
|
|
58
|
+
max_eviction_tests_per_reading: number;
|
|
59
|
+
/**
|
|
60
|
+
* Range requests in flight at once, across every registered container — one cap, because
|
|
61
|
+
* per-reader caps do not compose (design §6).
|
|
62
|
+
* @type {number}
|
|
63
|
+
*/
|
|
64
|
+
max_concurrent_fetches: number;
|
|
65
|
+
/**
|
|
66
|
+
* Feedback readbacks that may be outstanding at once; a frame that finds this many in flight
|
|
67
|
+
* skips its reading rather than stalling.
|
|
68
|
+
* @type {number}
|
|
69
|
+
*/
|
|
70
|
+
max_readbacks_in_flight: number;
|
|
71
|
+
/**
|
|
72
|
+
* Workers that fetch, verify and decode pages. Measured on the Zorah bdf6f961 container, the
|
|
73
|
+
* frame checksum is 1.0 ms a page and the decode 0.08 ms, so thirty-two fetched pages a
|
|
74
|
+
* reading is a frame of main-thread time in-process and the residency cost of thirty-two
|
|
75
|
+
* arrivals on workers. Zero runs in-process, which is also what happens wherever there is no
|
|
76
|
+
* `Worker` or a container's byte source cannot be described to one.
|
|
77
|
+
* @type {number}
|
|
78
|
+
*/
|
|
79
|
+
worker_count: number;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=VGeoResidencyOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoResidencyOptions.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH;IACI;;;;OAIG;IACH,mBAFU,MAAM,GAAC,SAAS,CAEI;IAE9B;;;OAGG;IACH,kBAFU,MAAM,CAEqB;IAErC;;;;;OAKG;IACH,mBAFU,MAAM,CAEY;IAE5B;;;;;OAKG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;OAIG;IACH,4BAFU,MAAM,CAEgB;IAEhC;;;OAGG;IACH,yBAFU,MAAM,CAEa;IAE7B;;;;;;;OAOG;IACH,gCAFU,MAAM,CAEsB;IAEtC;;;;OAIG;IACH,wBAFU,MAAM,CAEY;IAE5B;;;;OAIG;IACH,yBAFU,MAAM,CAEY;IAE5B;;;;;;;OAOG;IACH,cAFU,MAAM,CAEC;CACpB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every knob of {@link VGeoResidency}, in one place, all of them per-reading budgets or plain
|
|
3
|
+
* capacities.
|
|
4
|
+
*
|
|
5
|
+
* The defaults are defaults to be overridden by whoever knows the device and the scene, not
|
|
6
|
+
* measurements. What the shape promises is that nothing the residency does per frame scales with
|
|
7
|
+
* anything but these numbers and the readback the host chose to read
|
|
8
|
+
* (RUNTIME_PLAN_2026_09_14 §1).
|
|
9
|
+
*
|
|
10
|
+
* @author Alex Goldring
|
|
11
|
+
* @copyright Company Named Limited (c) 2026
|
|
12
|
+
*/
|
|
13
|
+
export class VGeoResidencyOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Decoded page bytes the VRAM tier may hold. `undefined` means what the pool's slots hold at the
|
|
16
|
+
* page size it was built for, so the two agree by construction.
|
|
17
|
+
* @type {number|undefined}
|
|
18
|
+
*/
|
|
19
|
+
vram_budget_bytes = undefined;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Decoded page bytes the RAM tier may hold, across every registered container.
|
|
23
|
+
* @type {number}
|
|
24
|
+
*/
|
|
25
|
+
ram_budget_bytes = 512 * 1024 * 1024;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Pages the RAM tier may hold at once — the size of its flat slot arrays. A slot is a few words
|
|
29
|
+
* and a reference; what bounds the count is {@link ram_budget_bytes} in practice, and this only
|
|
30
|
+
* has to be at least what the budget can hold at the smallest page the containers produce.
|
|
31
|
+
* @type {number}
|
|
32
|
+
*/
|
|
33
|
+
ram_slot_capacity = 1 << 14;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Frames a page is safe from eviction after it was last used in its tier. No shorter than the
|
|
37
|
+
* readback latency, which is at least one frame of `mapAsync` and in practice a couple, because a
|
|
38
|
+
* page the last landed reading saw drawn from is a page still on screen.
|
|
39
|
+
* @type {number}
|
|
40
|
+
*/
|
|
41
|
+
protect_frames = 3;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Pages one reading may promote from RAM to VRAM. A promotion is a slot write, a meshlet batch
|
|
45
|
+
* and an activation cascade; pages are near-uniform, so the budget is in pages rather than bytes.
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
max_promotions_per_reading = 64;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Pages one reading may start fetching, across every registered container.
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
max_fetches_per_reading = 32;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Eviction candidates one reading may test, across both tiers. This is what bounds a full
|
|
58
|
+
* tier's cost per reading: the CLOCK hand tests this many rows and no more, and a reading that
|
|
59
|
+
* spends it refuses the rest of its promotions and admissions until the next reading lands —
|
|
60
|
+
* the tier turns over at a rate the host chose rather than at a rate the resident count chose
|
|
61
|
+
* (RUNTIME_PLAN_2026_09_14 §4.4).
|
|
62
|
+
* @type {number}
|
|
63
|
+
*/
|
|
64
|
+
max_eviction_tests_per_reading = 1024;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Range requests in flight at once, across every registered container — one cap, because
|
|
68
|
+
* per-reader caps do not compose (design §6).
|
|
69
|
+
* @type {number}
|
|
70
|
+
*/
|
|
71
|
+
max_concurrent_fetches = 12;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Feedback readbacks that may be outstanding at once; a frame that finds this many in flight
|
|
75
|
+
* skips its reading rather than stalling.
|
|
76
|
+
* @type {number}
|
|
77
|
+
*/
|
|
78
|
+
max_readbacks_in_flight = 2;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Workers that fetch, verify and decode pages. Measured on the Zorah bdf6f961 container, the
|
|
82
|
+
* frame checksum is 1.0 ms a page and the decode 0.08 ms, so thirty-two fetched pages a
|
|
83
|
+
* reading is a frame of main-thread time in-process and the residency cost of thirty-two
|
|
84
|
+
* arrivals on workers. Zero runs in-process, which is also what happens wherever there is no
|
|
85
|
+
* `Worker` or a container's byte source cannot be described to one.
|
|
86
|
+
* @type {number}
|
|
87
|
+
*/
|
|
88
|
+
worker_count = 4;
|
|
89
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../format/read/VGeoPage.js").VGeoPage} VGeoPage
|
|
3
|
+
*/
|
|
1
4
|
/**
|
|
2
5
|
* What a VRAM-resident page **is**, with no device anywhere near it.
|
|
3
6
|
*
|
|
@@ -25,10 +28,10 @@
|
|
|
25
28
|
* row of a second table, which saves the traversal a storage binding it does not have to spare
|
|
26
29
|
* (RUNTIME_PLAN §4.9) and makes an install one contiguous range.
|
|
27
30
|
*
|
|
28
|
-
* ## This tier answers its own activation question
|
|
31
|
+
* ## This tier answers its own activation question, and keeps the answer
|
|
29
32
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
33
|
+
* Selectability is computed from the arena and the lookup — this tier's residency — and consults
|
|
34
|
+
* no reader. It used to publish `VGeoContainerReader.is_selectable`, which
|
|
32
35
|
* is a fact about the **RAM** tier, into the flag the kernel reads while the descent was gated on
|
|
33
36
|
* the **VRAM** lookup. VRAM is a strict subset, so a group could be flagged selectable while a page
|
|
34
37
|
* holding one of its parents had no row here, and the parent's own ancestor then drew a coarse
|
|
@@ -36,6 +39,22 @@
|
|
|
36
39
|
* the group row carrying its parent count (VGEO_GROUP_ROW_OFFSET.PARENT_COUNT) so that the rule
|
|
37
40
|
* can be evaluated where the residency it is about lives.
|
|
38
41
|
*
|
|
42
|
+
* And it is **kept, not recomputed**. The rule is design §6's: a group is selectable iff every one
|
|
43
|
+
* of its parent-cluster references is live — the referencing cluster's page resident here and
|
|
44
|
+
* that cluster's own group selectable here. `refresh_selectable` used to evaluate that as a
|
|
45
|
+
* closure over every resident group of the geometry after every install and every evict: 4.2 ms
|
|
46
|
+
* a call at 4,096 resident pages of a real asset, twice per promotion at a full tier, which is
|
|
47
|
+
* where a 637 ms frame came from (RUNTIME_PLAN_2026_09_14 §0). §6 also says how it is meant to
|
|
48
|
+
* be kept — "carried by a counter instead of dependency lists … activation cascades" — and
|
|
49
|
+
* `VGeoContainerReader` already does that for the RAM tier. This tier does it over the arena:
|
|
50
|
+
* the live-reference count lives in the group row's FLAGS word above the flag bit, a page's
|
|
51
|
+
* groups are seeded from the resident parents that reference them when it arrives, and the
|
|
52
|
+
* groups that reach their count cascade into the resident children that were waiting on them
|
|
53
|
+
* (§3 of that plan). An install costs the clusters of the page's resident parents plus the
|
|
54
|
+
* cascade; an eviction under the child rule cascades nothing, because nothing resident depends
|
|
55
|
+
* on a page with no resident children. The rule itself survives as the fixpoint oracle
|
|
56
|
+
* `VGeoRuntimeTables.spec.js` holds the counter to after every step of random tours.
|
|
57
|
+
*
|
|
39
58
|
* **Nothing here decides anything.** What to install, what to evict — all of that is the pool's.
|
|
40
59
|
* What this refuses is only what it cannot represent.
|
|
41
60
|
*
|
|
@@ -161,12 +180,25 @@ export class VGeoRuntimeTables {
|
|
|
161
180
|
* @returns {number}
|
|
162
181
|
*/
|
|
163
182
|
cluster_base(page_row: number): number;
|
|
183
|
+
/**
|
|
184
|
+
* Word offset of a page's parent rows, which is the end of its cluster rows.
|
|
185
|
+
*
|
|
186
|
+
* Equal to the end of the block when the page has none, which is every page of a container
|
|
187
|
+
* written before `format_version` 4: `PARENT_ENTRY_COUNT` is zero and nothing reads past it.
|
|
188
|
+
*
|
|
189
|
+
* @param {number} page_row
|
|
190
|
+
* @returns {number}
|
|
191
|
+
*/
|
|
192
|
+
parent_base(page_row: number): number;
|
|
164
193
|
/**
|
|
165
194
|
* Make a decoded page resident: one slot, one lookup word.
|
|
166
195
|
*
|
|
167
|
-
* The page
|
|
168
|
-
*
|
|
169
|
-
*
|
|
196
|
+
* The page's rows are written with every group's flag clear, and then activated in place: its
|
|
197
|
+
* groups are seeded with the live references the resident parents make into them, the ones
|
|
198
|
+
* that reach their parent count flip on, and the flip cascades into whatever resident children
|
|
199
|
+
* were waiting on this page. A page that arrives drawing would draw before the ancestors it
|
|
200
|
+
* hangs off have; a page whose arrival completes a group several pages down turns that group
|
|
201
|
+
* on. Both are this method's, and the rows that flipped are on {@link take_activated_rows}.
|
|
170
202
|
*
|
|
171
203
|
* @param {number} geometry_row
|
|
172
204
|
* @param {VGeoPage} page as `vgeo_read_page` decoded it
|
|
@@ -209,44 +241,30 @@ export class VGeoRuntimeTables {
|
|
|
209
241
|
*/
|
|
210
242
|
pages_of(geometry_row: number): Set<number>;
|
|
211
243
|
/**
|
|
212
|
-
*
|
|
244
|
+
* How many distinct child pages of this one are resident in this tier.
|
|
213
245
|
*
|
|
214
|
-
* Design §6's eviction rule reads "no child page resident in this tier", and this answers it
|
|
215
|
-
* of
|
|
216
|
-
*
|
|
217
|
-
* (REVIEW_LEDGER M9).
|
|
246
|
+
* Design §6's eviction rule reads "no child page resident in this tier", and this answers it
|
|
247
|
+
* out of a count kept at install and evict rather than a walk of the page's cluster rows per
|
|
248
|
+
* candidate — and out of this tier's own residency rather than the RAM reader's child table,
|
|
249
|
+
* which returned "no children" the moment the RAM tier dropped the page (REVIEW_LEDGER M9).
|
|
218
250
|
*
|
|
219
251
|
* @param {number} page_row
|
|
220
|
-
* @returns {
|
|
252
|
+
* @returns {number}
|
|
221
253
|
*/
|
|
222
|
-
|
|
254
|
+
resident_children(page_row: number): number;
|
|
223
255
|
/**
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
* `VIRTUAL_GEOMETRY_DESIGN.md` §6: a group is selectable iff every one of its parent-cluster
|
|
227
|
-
* references is live — the referencing cluster's page resident here, and that cluster's own
|
|
228
|
-
* group selectable here. Groups with no parents at all are the top of the DAG and are selectable
|
|
229
|
-
* the moment their page is. That is a closure over the resident set, so it is computed as one:
|
|
230
|
-
* seed the parentless groups and cascade down, counting a reference only when the group making
|
|
231
|
-
* it is already selectable.
|
|
256
|
+
* Page rows whose group flags flipped since this was last called, and empties the list.
|
|
232
257
|
*
|
|
233
|
-
*
|
|
234
|
-
* several pages away and an eviction can turn them off again, and because the cost is the same
|
|
235
|
-
* order as the install that provoked it — one pass over the geometry's resident clusters. The
|
|
236
|
-
* incremental form is a later optimization with a counter to keep correct; the one thing it
|
|
237
|
-
* must not be is a *second* implementation of the rule.
|
|
238
|
-
*
|
|
239
|
-
* @param {number} geometry_row
|
|
240
|
-
* @returns {number[]} page rows whose group flags changed, for the caller to upload
|
|
258
|
+
* @returns {number[]}
|
|
241
259
|
*/
|
|
242
|
-
|
|
260
|
+
take_activated_rows(): number[];
|
|
243
261
|
/**
|
|
244
262
|
* Publish one group's selectability directly.
|
|
245
263
|
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
264
|
+
* Activation is the tables' own; this is for a spec that needs a state the rule happens not to
|
|
265
|
+
* produce on the assets measured so far — the cut's own-group term is correctness for exactly
|
|
266
|
+
* such a state, and a guard nothing can construct is a guard nothing can test. It writes the
|
|
267
|
+
* flag bit and leaves the count, so the next cascade through the group may overwrite it.
|
|
250
268
|
*
|
|
251
269
|
* @param {number} page_row
|
|
252
270
|
* @param {number} group
|
|
@@ -284,4 +302,5 @@ export class VGeoRuntimeTables {
|
|
|
284
302
|
set_meshlet_base(page_row: number, meshlet_base: number): boolean;
|
|
285
303
|
#private;
|
|
286
304
|
}
|
|
305
|
+
export type VGeoPage = import("../format/read/VGeoPage.js").VGeoPage;
|
|
287
306
|
//# sourceMappingURL=VGeoRuntimeTables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGeoRuntimeTables.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js"],"names":[],"mappings":"AAmBA
|
|
1
|
+
{"version":3,"file":"VGeoRuntimeTables.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js"],"names":[],"mappings":"AAmBA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH;IAmKI;;;;;;;;OAQG;IACH;QAP4B,aAAa,GAA9B,MAAM;QACW,SAAS,GAA1B,MAAM;QAEW,UAAU,GAA3B,MAAM;QACW,YAAY,GAA7B,MAAM;QACW,iBAAiB,GAAlC,MAAM;OA6BhB;IAED;;OAEG;IACH,gCAEC;IAED;;OAEG;IACH,+BAEC;IAED;;OAEG;IACH,kCAEC;IAED;;OAEG;IACH,gCAEC;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,kCAEC;IAED;;OAEG;IACH,kCAEC;IAED;;;OAGG;IACH,iCAEC;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;;;;OAWG;IACH,8BALW,MAAM,qBACN,MAAM,GACJ,MAAM,CAiDlB;IAED;;;;;;OAMG;IACH,kCAJW,MAAM,GACJ,MAAM,EAAE,CAgDpB;IAED;;;;OAIG;IACH,6BAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,0BAJW,MAAM,cACN,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,qBAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;;;OAQG;IACH,sBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,sBARW,MAAM,QACN,QAAQ,gBACR,MAAM,GACJ,MAAM,CAkFlB;IAED;;;;;OAKG;IACH,qBAHW,QAAQ,GACN,MAAM,CAOlB;IAED;;;;;;;;;;;;;;OAcG;IACH,gBAHW,MAAM,GACJ,OAAO,CAuCnB;IAED;;;;;;OAMG;IACH,uBAHW,MAAM,GACJ,IAAI,MAAM,CAAC,CAIvB;IAED;;;;;;;;;;OAUG;IACH,4BAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,uBAFa,MAAM,EAAE,CAQpB;IAwWD;;;;;;;;;;;;OAYG;IACH,+BALW,MAAM,SACN,MAAM,cACN,OAAO,GACL,IAAI,CAUhB;IAED;;;;OAIG;IACH,8BAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAQnB;IAED;;;;;OAKG;IACH,qBAHW,MAAM,GACJ,MAAM,EAAE,CAapB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,MAAM,EAAE,CAOpB;IAED;;;;;;OAMG;IACH,2BAJW,MAAM,gBACN,MAAM,GACJ,OAAO,CAYnB;;CA4DJ;uBAjtCY,OAAO,4BAA4B,EAAE,QAAQ"}
|