aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock42
-rw-r--r--Cargo.toml2
-rwxr-xr-xREADME.md2
-rwxr-xr-xazalea-block/src/generated.rs47
-rw-r--r--azalea-client/src/plugins/chunks.rs7
-rw-r--r--azalea-client/src/plugins/packet/game/mod.rs6
-rw-r--r--azalea-client/src/test_simulation.rs4
-rw-r--r--azalea-client/tests/change_dimension_to_nether_and_back.rs2
-rw-r--r--azalea-client/tests/despawn_entities_when_changing_dimension.rs2
-rw-r--r--azalea-client/tests/move_despawned_entity.rs2
-rw-r--r--azalea-client/tests/receive_start_config_packet.rs2
-rw-r--r--azalea-client/tests/set_health_before_login.rs2
-rwxr-xr-xazalea-core/src/position.rs12
-rwxr-xr-xazalea-entity/src/data.rs6
-rwxr-xr-xazalea-entity/src/dimensions.rs3
-rw-r--r--azalea-entity/src/metadata.rs473
-rwxr-xr-xazalea-entity/src/particle.rs4
-rw-r--r--azalea-inventory/src/components.rs365
-rwxr-xr-xazalea-language/src/en_us.json249
-rw-r--r--azalea-physics/src/collision/blocks.rs2686
-rwxr-xr-xazalea-protocol/src/packets/game/c_commands.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/c_container_set_content.rs44
-rwxr-xr-xazalea-protocol/src/packets/game/c_container_set_slot.rs24
-rw-r--r--azalea-protocol/src/packets/game/c_disguised_chat.rs5
-rwxr-xr-xazalea-protocol/src/packets/game/c_level_chunk_with_light.rs62
-rw-r--r--azalea-protocol/src/packets/game/c_player_chat.rs61
-rwxr-xr-xazalea-protocol/src/packets/game/c_set_equipment.rs19
-rw-r--r--[-rwxr-xr-x]azalea-protocol/src/packets/game/c_test_instance_block_status.rs (renamed from azalea-protocol/src/packets/game/c_add_experience_orb.rs)10
-rwxr-xr-xazalea-protocol/src/packets/game/c_update_advancements.rs2
-rwxr-xr-xazalea-protocol/src/packets/game/mod.rs248
-rwxr-xr-xazalea-protocol/src/packets/game/s_chat.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/s_set_structure_block.rs6
-rw-r--r--azalea-protocol/src/packets/game/s_set_test_block.rs19
-rw-r--r--azalea-protocol/src/packets/game/s_test_instance_block_action.rs44
-rwxr-xr-xazalea-protocol/src/packets/mod.rs4
-rwxr-xr-xazalea-registry/azalea-registry-macros/src/lib.rs24
-rw-r--r--azalea-registry/src/data.rs66
-rw-r--r--azalea-registry/src/extra.rs123
-rwxr-xr-xazalea-registry/src/lib.rs267
-rw-r--r--azalea-registry/src/tags/blocks.rs321
-rw-r--r--azalea-registry/src/tags/items.rs40
-rwxr-xr-xazalea-world/src/chunk_storage.rs22
-rw-r--r--azalea-world/src/heightmap.rs3
-rwxr-xr-xazalea-world/src/palette.rs39
-rw-r--r--codegen/genitemcomponents.py165
-rwxr-xr-xcodegen/lib/code/blocks.py7
-rw-r--r--codegen/lib/code/entity.py30
-rw-r--r--codegen/lib/code/item_components.py164
-rwxr-xr-xcodegen/lib/code/packet.py37
-rwxr-xr-xcodegen/lib/extract.py5
-rwxr-xr-xcodegen/migrate.py8
51 files changed, 3268 insertions, 2527 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b7c11385..f132d125 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -209,7 +209,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "azalea"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"anyhow",
"azalea-auth",
@@ -249,7 +249,7 @@ dependencies = [
[[package]]
name = "azalea-auth"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-crypto",
@@ -269,7 +269,7 @@ dependencies = [
[[package]]
name = "azalea-block"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-block-macros",
"azalea-buf",
@@ -278,7 +278,7 @@ dependencies = [
[[package]]
name = "azalea-block-macros"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"proc-macro2",
"quote",
@@ -287,7 +287,7 @@ dependencies = [
[[package]]
name = "azalea-brigadier"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-chat",
@@ -298,7 +298,7 @@ dependencies = [
[[package]]
name = "azalea-buf"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf-macros",
"byteorder",
@@ -311,7 +311,7 @@ dependencies = [
[[package]]
name = "azalea-buf-macros"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"proc-macro2",
"quote",
@@ -320,7 +320,7 @@ dependencies = [
[[package]]
name = "azalea-chat"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-language",
@@ -333,7 +333,7 @@ dependencies = [
[[package]]
name = "azalea-client"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"anyhow",
"azalea-auth",
@@ -368,7 +368,7 @@ dependencies = [
[[package]]
name = "azalea-core"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-chat",
@@ -384,7 +384,7 @@ dependencies = [
[[package]]
name = "azalea-crypto"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"aes",
"azalea-buf",
@@ -401,7 +401,7 @@ dependencies = [
[[package]]
name = "azalea-entity"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-block",
"azalea-buf",
@@ -424,7 +424,7 @@ dependencies = [
[[package]]
name = "azalea-inventory"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-chat",
@@ -439,7 +439,7 @@ dependencies = [
[[package]]
name = "azalea-inventory-macros"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"proc-macro2",
"quote",
@@ -448,7 +448,7 @@ dependencies = [
[[package]]
name = "azalea-language"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"compact_str",
"serde",
@@ -457,7 +457,7 @@ dependencies = [
[[package]]
name = "azalea-physics"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-block",
"azalea-core",
@@ -475,7 +475,7 @@ dependencies = [
[[package]]
name = "azalea-protocol"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"anyhow",
"async-recursion",
@@ -510,7 +510,7 @@ dependencies = [
[[package]]
name = "azalea-protocol-macros"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"proc-macro2",
"quote",
@@ -519,7 +519,7 @@ dependencies = [
[[package]]
name = "azalea-registry"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-buf",
"azalea-registry-macros",
@@ -529,7 +529,7 @@ dependencies = [
[[package]]
name = "azalea-registry-macros"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"quote",
"syn",
@@ -537,7 +537,7 @@ dependencies = [
[[package]]
name = "azalea-world"
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5-rc2"
dependencies = [
"azalea-block",
"azalea-buf",
diff --git a/Cargo.toml b/Cargo.toml
index 96f42c54..b5d085c6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -22,7 +22,7 @@ resolver = "2"
# --- Workspace Settings ---
[workspace.package]
-version = "0.11.0+mc1.21.4"
+version = "0.11.0+mc1.21.5"
edition = "2024"
license = "MIT"
repository = "https://github.com/azalea-rs/azalea"
diff --git a/README.md b/README.md
index 5af01e75..1eb2f6fc 100755
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.
<!-- The line below is automatically read and updated by the migrate script, so don't change it manually. -->
-_Currently supported Minecraft version: `1.21.4`._
+_Currently supported Minecraft version: `1.21.5`._
> [!WARNING]
> Azalea is still unfinished, though most crates are in a useable state
diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs
index afc131c3..886b9dcc 100755
--- a/azalea-block/src/generated.rs
+++ b/azalea-block/src/generated.rs
@@ -326,7 +326,11 @@ make_block_states! {
"south" => South(bool),
"up" => Up(bool),
"west" => West(bool),
- "active" => Active(bool),
+ "creaking_heart_state" => CreakingHeartState {
+ Uprooted,
+ Dormant,
+ Awake,
+ },
"natural" => Natural(bool),
"half" => TopBottom {
Top,
@@ -1694,7 +1698,7 @@ make_block_states! {
_14,
_15,
},
- "mode" => Mode {
+ "mode" => StructureMode {
Save,
Load,
Corner,
@@ -1714,6 +1718,12 @@ make_block_states! {
NorthUp,
SouthUp,
},
+ "mode" => TestMode {
+ Start,
+ Log,
+ Fail,
+ Accept,
+ },
"level" => ComposterLevel {
_0,
_1,
@@ -1958,6 +1968,18 @@ make_block_states! {
_3,
_4,
},
+ "flower_amount" => WildflowersFlowerAmount {
+ _1,
+ _2,
+ _3,
+ _4,
+ },
+ "segment_amount" => LeafLitterSegmentAmount {
+ _1,
+ _2,
+ _3,
+ _4,
+ },
"tilt" => Tilt {
None,
Unstable,
@@ -2356,6 +2378,9 @@ make_block_states! {
short_grass => BlockBehavior::new(), {},
fern => BlockBehavior::new(), {},
dead_bush => BlockBehavior::new(), {},
+ bush => BlockBehavior::new(), {},
+ short_dry_grass => BlockBehavior::new(), {},
+ tall_dry_grass => BlockBehavior::new(), {},
seagrass => BlockBehavior::new(), {},
tall_seagrass => BlockBehavior::new(), {
"half": Half::Lower,
@@ -2438,8 +2463,8 @@ make_block_states! {
soul_fire => BlockBehavior::new(), {},
spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {},
creaking_heart => BlockBehavior::new(), {
- "active": Active(false),
"axis": Axis::Y,
+ "creaking_heart_state": CreakingHeartState::Uprooted,
"natural": Natural(false),
},
oak_stairs => BlockBehavior::new().strength(2.0, 3.0), {
@@ -2754,6 +2779,7 @@ make_block_states! {
cactus => BlockBehavior::new().strength(0.4, 0.4), {
"age": CactusAge::_0,
},
+ cactus_flower => BlockBehavior::new(), {},
clay => BlockBehavior::new().strength(0.6, 0.6), {},
sugar_cane => BlockBehavior::new(), {
"age": SugarCaneAge::_0,
@@ -4771,11 +4797,15 @@ make_block_states! {
"waterlogged": Waterlogged(false),
},
structure_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
- "mode": Mode::Load,
+ "mode": StructureMode::Load,
},
jigsaw => BlockBehavior::new().requires_correct_tool_for_drops().strength(-1.0, 3600000.0), {
"orientation": Orientation::NorthUp,
},
+ test_block => BlockBehavior::new(), {
+ "mode": TestMode::Start,
+ },
+ test_instance_block => BlockBehavior::new(), {},
composter => BlockBehavior::new().strength(0.6, 0.6), {
"level": ComposterLevel::_0,
},
@@ -5419,6 +5449,14 @@ make_block_states! {
"facing": FacingCardinal::North,
"flower_amount": PinkPetalsFlowerAmount::_1,
},
+ wildflowers => BlockBehavior::new(), {
+ "facing": FacingCardinal::North,
+ "flower_amount": WildflowersFlowerAmount::_1,
+ },
+ leaf_litter => BlockBehavior::new(), {
+ "facing": FacingCardinal::North,
+ "segment_amount": LeafLitterSegmentAmount::_1,
+ },
moss_block => BlockBehavior::new().strength(0.1, 0.1), {},
big_dripleaf => BlockBehavior::new().strength(0.1, 0.1).force_solid(false), {
"facing": FacingCardinal::North,
@@ -5578,5 +5616,6 @@ make_block_states! {
closed_eyeblossom => BlockBehavior::new(), {},
potted_open_eyeblossom => BlockBehavior::new(), {},
potted_closed_eyeblossom => BlockBehavior::new(), {},
+ firefly_bush => BlockBehavior::new(), {},
}
}
diff --git a/azalea-client/src/plugins/chunks.rs b/azalea-client/src/plugins/chunks.rs
index 089cc5d4..060b94e2 100644
--- a/azalea-client/src/plugins/chunks.rs
+++ b/azalea-client/src/plugins/chunks.rs
@@ -4,7 +4,6 @@
use std::{
io::Cursor,
- ops::Deref,
time::{Duration, Instant},
};
@@ -15,7 +14,6 @@ use azalea_protocol::packets::game::{
};
use bevy_app::{App, Plugin, Update};
use bevy_ecs::prelude::*;
-use simdnbt::owned::BaseNbt;
use tracing::{error, trace};
use super::packet::game::handle_outgoing_packets;
@@ -98,10 +96,7 @@ pub fn handle_receive_chunk_events(
}
}
- let heightmaps_nbt = &event.packet.chunk_data.heightmaps;
- // necessary to make the unwrap_or work
- let empty_nbt = BaseNbt::default();
- let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref();
+ let heightmaps = &event.packet.chunk_data.heightmaps;
if let Err(e) = partial_instance.chunks.replace_with_packet_data(
&pos,
diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs
index cc67bcd7..6bb93178 100644
--- a/azalea-client/src/plugins/packet/game/mod.rs
+++ b/azalea-client/src/plugins/packet/game/mod.rs
@@ -57,6 +57,7 @@ pub fn process_packet_events(ecs: &mut World) {
ecs,
};
+ // the order of these doesn't matter, that's decided by the protocol library
declare_packet_handlers!(
ClientboundGamePacket,
packet.as_ref(),
@@ -113,7 +114,6 @@ pub fn process_packet_events(ecs: &mut World) {
server_data,
set_equipment,
update_mob_effect,
- add_experience_orb,
award_stats,
block_changed_ack,
block_destruction,
@@ -193,6 +193,7 @@ pub fn process_packet_events(ecs: &mut World) {
recipe_book_add,
recipe_book_remove,
recipe_book_settings,
+ test_instance_block_status,
]
);
}
@@ -1196,8 +1197,6 @@ impl GamePacketHandler<'_> {
debug!("Got update mob effect packet {p:?}");
}
- pub fn add_experience_orb(&mut self, _p: &ClientboundAddExperienceOrb) {}
-
pub fn award_stats(&mut self, _p: &ClientboundAwardStats) {}
pub fn block_changed_ack(&mut self, _p: &ClientboundBlockChangedAck) {}
@@ -1601,4 +1600,5 @@ impl GamePacketHandler<'_> {
pub fn recipe_book_add(&mut self, _p: &ClientboundRecipeBookAdd) {}
pub fn recipe_book_remove(&mut self, _p: &ClientboundRecipeBookRemove) {}
pub fn recipe_book_settings(&mut self, _p: &ClientboundRecipeBookSettings) {}
+ pub fn test_instance_block_status(&mut self, _p: &ClientboundTestInstanceBlockStatus) {}
}
diff --git a/azalea-client/src/test_simulation.rs b/azalea-client/src/test_simulation.rs
index 13d65bbb..7b422567 100644
--- a/azalea-client/src/test_simulation.rs
+++ b/azalea-client/src/test_simulation.rs
@@ -22,7 +22,7 @@ use azalea_world::{Chunk, Instance, MinecraftEntityId, Section};
use bevy_app::App;
use bevy_ecs::{prelude::*, schedule::ExecutorKind};
use parking_lot::{Mutex, RwLock};
-use simdnbt::owned::{Nbt, NbtCompound, NbtTag};
+use simdnbt::owned::{NbtCompound, NbtTag};
use tokio::task::JoinHandle;
use tokio::{sync::mpsc, time::sleep};
use uuid::Uuid;
@@ -299,7 +299,7 @@ pub fn make_basic_empty_chunk(
x: pos.x,
z: pos.z,
chunk_data: ClientboundLevelChunkPacketData {
- heightmaps: Nbt::None,
+ heightmaps: Default::default(),
data: Arc::new(chunk_bytes.into()),
block_entities: vec![],
},
diff --git a/azalea-client/tests/change_dimension_to_nether_and_back.rs b/azalea-client/tests/change_dimension_to_nether_and_back.rs
index 969c5053..cc1fcb14 100644
--- a/azalea-client/tests/change_dimension_to_nether_and_back.rs
+++ b/azalea-client/tests/change_dimension_to_nether_and_back.rs
@@ -5,7 +5,7 @@ use azalea_protocol::packets::{
ConnectionProtocol, Packet,
config::{ClientboundFinishConfiguration, ClientboundRegistryData},
};
-use azalea_registry::DimensionType;
+use azalea_registry::{DataRegistry, DimensionType};
use azalea_world::InstanceName;
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
diff --git a/azalea-client/tests/despawn_entities_when_changing_dimension.rs b/azalea-client/tests/despawn_entities_when_changing_dimension.rs
index 3d7f2cb4..967e0aac 100644
--- a/azalea-client/tests/despawn_entities_when_changing_dimension.rs
+++ b/azalea-client/tests/despawn_entities_when_changing_dimension.rs
@@ -5,7 +5,7 @@ use azalea_protocol::packets::{
ConnectionProtocol,
config::{ClientboundFinishConfiguration, ClientboundRegistryData},
};
-use azalea_registry::{DimensionType, EntityKind};
+use azalea_registry::{DataRegistry, DimensionType, EntityKind};
use bevy_ecs::query::With;
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
diff --git a/azalea-client/tests/move_despawned_entity.rs b/azalea-client/tests/move_despawned_entity.rs
index 74f7e942..d590cb39 100644
--- a/azalea-client/tests/move_despawned_entity.rs
+++ b/azalea-client/tests/move_despawned_entity.rs
@@ -2,7 +2,7 @@ use azalea_client::test_simulation::*;
use azalea_core::{position::ChunkPos, resource_location::ResourceLocation};
use azalea_entity::metadata::Cow;
use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundMoveEntityRot};
-use azalea_registry::{DimensionType, EntityKind};
+use azalea_registry::{DataRegistry, DimensionType, EntityKind};
use azalea_world::MinecraftEntityId;
use bevy_ecs::query::With;
use bevy_log::tracing_subscriber;
diff --git a/azalea-client/tests/receive_start_config_packet.rs b/azalea-client/tests/receive_start_config_packet.rs
index 36762966..9b0c734d 100644
--- a/azalea-client/tests/receive_start_config_packet.rs
+++ b/azalea-client/tests/receive_start_config_packet.rs
@@ -1,7 +1,7 @@
use azalea_client::{InConfigState, packet::game::SendPacketEvent, test_simulation::*};
use azalea_core::resource_location::ResourceLocation;
use azalea_protocol::packets::{ConnectionProtocol, game::ClientboundStartConfiguration};
-use azalea_registry::DimensionType;
+use azalea_registry::{DataRegistry, DimensionType};
use azalea_world::InstanceName;
use bevy_ecs::event::Events;
use bevy_log::tracing_subscriber;
diff --git a/azalea-client/tests/set_health_before_login.rs b/azalea-client/tests/set_health_before_login.rs
index c078cae4..d81dd48f 100644
--- a/azalea-client/tests/set_health_before_login.rs
+++ b/azalea-client/tests/set_health_before_login.rs
@@ -6,7 +6,7 @@ use azalea_protocol::packets::{
config::{ClientboundFinishConfiguration, ClientboundRegistryData},
game::ClientboundSetHealth,
};
-use azalea_registry::DimensionType;
+use azalea_registry::{DataRegistry, DimensionType};
use bevy_log::tracing_subscriber;
use simdnbt::owned::{NbtCompound, NbtTag};
diff --git a/azalea-core/src/position.rs b/azalea-core/src/position.rs
index 2dea1471..e82e5e4a 100755
--- a/azalea-core/src/position.rs
+++ b/azalea-core/src/position.rs
@@ -417,6 +417,18 @@ impl BlockPos {
}
}
+/// Similar to [`BlockPos`] but it's serialized as 3 varints instead of one
+/// 64-bit integer, so it can represent a bigger range of numbers.
+#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, AzBuf)]
+pub struct Vec3i {
+ #[var]
+ pub x: i32,
+ #[var]
+ pub y: i32,
+ #[var]
+ pub z: i32,
+}
+
/// Chunk coordinates are used to represent where a chunk is in the world. You
/// can convert the x and z to block coordinates by multiplying them by 16.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
diff --git a/azalea-entity/src/data.rs b/azalea-entity/src/data.rs
index 67476d8b..c92d1c95 100755
--- a/azalea-entity/src/data.rs
+++ b/azalea-entity/src/data.rs
@@ -70,7 +70,7 @@ pub enum EntityDataValue {
BlockPos(BlockPos),
OptionalBlockPos(Option<BlockPos>),
Direction(Direction),
- OptionalUuid(Option<Uuid>),
+ OptionalLivingEntityReference(Option<Uuid>),
BlockState(azalea_block::BlockState),
/// If this is air, that means it's absent,
OptionalBlockState(azalea_block::BlockState),
@@ -82,8 +82,12 @@ pub enum EntityDataValue {
OptionalUnsignedInt(OptionalUnsignedInt),
Pose(Pose),
CatVariant(azalea_registry::CatVariant),
+ ChickenVariant(azalea_registry::ChickenVariant),
+ CowVariant(azalea_registry::CowVariant),
WolfVariant(azalea_registry::WolfVariant),
+ WolfSoundVariant(azalea_registry::WolfSoundVariant),
FrogVariant(azalea_registry::FrogVariant),
+ PigVariant(azalea_registry::PigVariant),
OptionalGlobalPos(Option<GlobalPos>),
PaintingVariant(azalea_registry::PaintingVariant),
SnifferState(SnifferStateKind),
diff --git a/azalea-entity/src/dimensions.rs b/azalea-entity/src/dimensions.rs
index 12a815d1..8d9a1eae 100755
--- a/azalea-entity/src/dimensions.rs
+++ b/azalea-entity/src/dimensions.rs
@@ -103,6 +103,7 @@ impl From<EntityKind> for EntityDimensions {
EntityKind::JungleChestBoat => EntityDimensions::new(1.375, 0.5625),
EntityKind::LeashKnot => EntityDimensions::new(0.375, 0.5),
EntityKind::LightningBolt => EntityDimensions::new(0.0, 0.0),
+ EntityKind::LingeringPotion => EntityDimensions::new(0.25, 0.25),
EntityKind::Llama => EntityDimensions::new(0.9, 1.87),
EntityKind::LlamaSpit => EntityDimensions::new(0.25, 0.25),
EntityKind::MagmaCube => EntityDimensions::new(0.52, 0.52),
@@ -128,7 +129,6 @@ impl From<EntityKind> for EntityDimensions {
EntityKind::Pillager => EntityDimensions::new(0.6, 1.95),
EntityKind::Player => EntityDimensions::new(0.6, 1.8),
EntityKind::PolarBear => EntityDimensions::new(1.4, 1.4),
- EntityKind::Potion => EntityDimensions::new(0.25, 0.25),
EntityKind::Pufferfish => EntityDimensions::new(0.7, 0.7),
EntityKind::Rabbit => EntityDimensions::new(0.4, 0.5),
EntityKind::Ravager => EntityDimensions::new(1.95, 2.2),
@@ -147,6 +147,7 @@ impl From<EntityKind> for EntityDimensions {
EntityKind::SpawnerMinecart => EntityDimensions::new(0.98, 0.7),
EntityKind::SpectralArrow => EntityDimensions::new(0.5, 0.5),
EntityKind::Spider => EntityDimensions::new(1.4, 0.9),
+ EntityKind::SplashPotion => EntityDimensions::new(0.25, 0.25),
EntityKind::SpruceBoat => EntityDimensions::new(1.375, 0.5625),
EntityKind::SpruceChestBoat => EntityDimensions::new(1.375, 0.5625),
EntityKind::Squid => EntityDimensions::new(0.8, 0.8),
diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs
index cac64999..e6504194 100644
--- a/azalea-entity/src/metadata.rs
+++ b/azalea-entity/src/metadata.rs
@@ -9,6 +9,7 @@ use azalea_core::{
position::{BlockPos, Vec3},
};
use azalea_inventory::ItemStack;
+use azalea_registry::DataRegistry;
use bevy_ecs::{bundle::Bundle, component::Component};
use derive_more::{Deref, DerefMut};
use thiserror::Error;
@@ -1496,8 +1497,6 @@ pub struct Eating(pub bool);
pub struct AbstractHorseStanding(pub bool);
#[derive(Component, Deref, DerefMut, Clone, Copy)]
pub struct Bred(pub bool);
-#[derive(Component, Deref, DerefMut, Clone, Copy)]
-pub struct Saddled(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct Dash(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
@@ -1584,7 +1583,6 @@ impl Default for CamelMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
dash: Dash(false),
last_pose_change_tick: LastPoseChangeTick(0),
@@ -1696,7 +1694,7 @@ impl Default for CatMetadataBundle {
in_sitting_pose: InSittingPose(false),
owneruuid: Owneruuid(None),
},
- cat_variant: CatVariant(azalea_registry::CatVariant::Tabby),
+ cat_variant: CatVariant(azalea_registry::CatVariant::new_raw(0)),
is_lying: IsLying(false),
relax_state_one: RelaxStateOne(false),
cat_collar_color: CatCollarColor(Default::default()),
@@ -1893,11 +1891,9 @@ impl Default for CherryChestBoatMetadataBundle {
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct DisplayBlock(pub i32);
+pub struct CustomDisplayBlock(pub azalea_block::BlockState);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct DisplayOffset(pub i32);
-#[derive(Component, Deref, DerefMut, Clone)]
-pub struct CustomDisplay(pub bool);
#[derive(Component)]
pub struct ChestMinecart;
impl ChestMinecart {
@@ -1906,7 +1902,7 @@ impl ChestMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
@@ -1947,14 +1943,15 @@ impl Default for ChestMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
}
}
}
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct ChickenVariant(pub azalea_registry::PigVariant);
#[derive(Component)]
pub struct Chicken;
impl Chicken {
@@ -1964,6 +1961,9 @@ impl Chicken {
) -> Result<(), UpdateMetadataError> {
match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
+ 17 => {
+ entity.insert(ChickenVariant(d.value.into_pig_variant()?));
+ }
_ => {}
}
Ok(())
@@ -1974,6 +1974,7 @@ impl Chicken {
pub struct ChickenMetadataBundle {
_marker: Chicken,
parent: AbstractAnimalMetadataBundle,
+ chicken_variant: ChickenVariant,
}
impl Default for ChickenMetadataBundle {
fn default() -> Self {
@@ -2023,6 +2024,7 @@ impl Default for ChickenMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
+ chicken_variant: ChickenVariant(azalea_registry::PigVariant::new_raw(0)),
}
}
}
@@ -2110,11 +2112,11 @@ impl CommandBlockMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
- 14 => {
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
+ 13 => {
entity.insert(CommandName(d.value.into_string()?));
}
- 15 => {
+ 14 => {
entity.insert(LastOutput(d.value.into_formatted_text()?));
}
_ => {}
@@ -2159,9 +2161,8 @@ impl Default for CommandBlockMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
command_name: CommandName("".to_string()),
last_output: LastOutput(Default::default()),
@@ -2169,6 +2170,8 @@ impl Default for CommandBlockMinecartMetadataBundle {
}
}
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct CowVariant(pub azalea_registry::ChickenVariant);
#[derive(Component)]
pub struct Cow;
impl Cow {
@@ -2178,6 +2181,9 @@ impl Cow {
) -> Result<(), UpdateMetadataError> {
match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
+ 17 => {
+ entity.insert(CowVariant(d.value.into_chicken_variant()?));
+ }
_ => {}
}
Ok(())
@@ -2188,6 +2194,7 @@ impl Cow {
pub struct CowMetadataBundle {
_marker: Cow,
parent: AbstractAnimalMetadataBundle,
+ cow_variant: CowVariant,
}
impl Default for CowMetadataBundle {
fn default() -> Self {
@@ -2237,6 +2244,7 @@ impl Default for CowMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
+ cow_variant: CowVariant(azalea_registry::ChickenVariant::new_raw(0)),
}
}
}
@@ -2248,7 +2256,7 @@ pub struct IsActive(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct IsTearingDown(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct CreakingHomePos(pub Option<BlockPos>);
+pub struct HomePos(pub Option<BlockPos>);
#[derive(Component)]
pub struct Creaking;
impl Creaking {
@@ -2268,7 +2276,7 @@ impl Creaking {
entity.insert(IsTearingDown(d.value.into_boolean()?));
}
19 => {
- entity.insert(CreakingHomePos(d.value.into_optional_block_pos()?));
+ entity.insert(HomePos(d.value.into_optional_block_pos()?));
}
_ => {}
}
@@ -2283,7 +2291,7 @@ pub struct CreakingMetadataBundle {
can_move: CanMove,
is_active: IsActive,
is_tearing_down: IsTearingDown,
- creaking_home_pos: CreakingHomePos,
+ home_pos: HomePos,
}
impl Default for CreakingMetadataBundle {
fn default() -> Self {
@@ -2332,7 +2340,7 @@ impl Default for CreakingMetadataBundle {
can_move: CanMove(true),
is_active: IsActive(false),
is_tearing_down: IsTearingDown(false),
- creaking_home_pos: CreakingHomePos(None),
+ home_pos: HomePos(None),
}
}
}
@@ -2541,8 +2549,6 @@ impl Default for DarkOakChestBoatMetadataBundle {
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct TreasurePos(pub BlockPos);
-#[derive(Component, Deref, DerefMut, Clone)]
pub struct GotFish(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct MoistnessLevel(pub i32);
@@ -2556,12 +2562,9 @@ impl Dolphin {
match d.index {
0..=16 => AbstractAgeable::apply_metadata(entity, d)?,
17 => {
- entity.insert(TreasurePos(d.value.into_block_pos()?));
- }
- 18 => {
entity.insert(GotFish(d.value.into_boolean()?));
}
- 19 => {
+ 18 => {
entity.insert(MoistnessLevel(d.value.into_int()?));
}
_ => {}
@@ -2574,7 +2577,6 @@ impl Dolphin {
pub struct DolphinMetadataBundle {
_marker: Dolphin,
parent: AbstractAgeableMetadataBundle,
- treasure_pos: TreasurePos,
got_fish: GotFish,
moistness_level: MoistnessLevel,
}
@@ -2623,7 +2625,6 @@ impl Default for DolphinMetadataBundle {
},
abstract_ageable_baby: AbstractAgeableBaby(false),
},
- treasure_pos: TreasurePos(BlockPos::new(0, 0, 0)),
got_fish: GotFish(false),
moistness_level: MoistnessLevel(2400),
}
@@ -2710,7 +2711,6 @@ impl Default for DonkeyMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
chest: Chest(false),
},
@@ -3485,6 +3485,8 @@ impl Default for ExperienceBottleMetadataBundle {
}
}
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct Value(pub i32);
#[derive(Component)]
pub struct ExperienceOrb;
impl ExperienceOrb {
@@ -3494,6 +3496,9 @@ impl ExperienceOrb {
) -> Result<(), UpdateMetadataError> {
match d.index {
0..=7 => AbstractEntity::apply_metadata(entity, d)?,
+ 8 => {
+ entity.insert(Value(d.value.into_int()?));
+ }
_ => {}
}
Ok(())
@@ -3504,6 +3509,7 @@ impl ExperienceOrb {
pub struct ExperienceOrbMetadataBundle {
_marker: ExperienceOrb,
parent: AbstractEntityMetadataBundle,
+ value: Value,
}
impl Default for ExperienceOrbMetadataBundle {
fn default() -> Self {
@@ -3526,6 +3532,7 @@ impl Default for ExperienceOrbMetadataBundle {
pose: Pose::default(),
ticks_frozen: TicksFrozen(Default::default()),
},
+ value: Value(0),
}
}
}
@@ -3854,10 +3861,10 @@ impl Fox {
entity.insert(FoxInterested(bitfield & 0x8 != 0));
}
19 => {
- entity.insert(TrustedId0(d.value.into_optional_uuid()?));
+ entity.insert(TrustedId0(d.value.into_optional_living_entity_reference()?));
}
20 => {
- entity.insert(TrustedId1(d.value.into_optional_uuid()?));
+ entity.insert(TrustedId1(d.value.into_optional_living_entity_reference()?));
}
_ => {}
}
@@ -3928,7 +3935,7 @@ impl Default for FoxMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
- fox_kind: FoxKind(0),
+ fox_kind: FoxKind(Default::default()),
fox_sitting: FoxSitting(false),
faceplanted: Faceplanted(false),
defending: Defending(false),
@@ -3943,7 +3950,7 @@ impl Default for FoxMetadataBundle {
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct FrogVariant(pub azalea_registry::FrogVariant);
+pub struct FrogVariant(pub azalea_registry::WolfSoundVariant);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct TongueTarget(pub OptionalUnsignedInt);
#[derive(Component)]
@@ -3956,7 +3963,7 @@ impl Frog {
match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
17 => {
- entity.insert(FrogVariant(d.value.into_frog_variant()?));
+ entity.insert(FrogVariant(d.value.into_wolf_sound_variant()?));
}
18 => {
entity.insert(TongueTarget(d.value.into_optional_unsigned_int()?));
@@ -4022,7 +4029,7 @@ impl Default for FrogMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
- frog_variant: FrogVariant(azalea_registry::FrogVariant::Temperate),
+ frog_variant: FrogVariant(azalea_registry::WolfSoundVariant::new_raw(0)),
tongue_target: TongueTarget(OptionalUnsignedInt(None)),
}
}
@@ -4038,8 +4045,8 @@ impl FurnaceMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
- 14 => {
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
+ 13 => {
entity.insert(Fuel(d.value.into_boolean()?));
}
_ => {}
@@ -4083,9 +4090,8 @@ impl Default for FurnaceMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
fuel: Fuel(false),
}
@@ -4620,7 +4626,7 @@ impl HopperMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
@@ -4661,9 +4667,8 @@ impl Default for HopperMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
}
}
@@ -4749,7 +4754,6 @@ impl Default for HorseMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
horse_type_variant: HorseTypeVariant(0),
}
@@ -5452,6 +5456,57 @@ impl Default for LightningBoltMetadataBundle {
}
}
+#[derive(Component)]
+pub struct LingeringPotion;
+impl LingeringPotion {
+ pub fn apply_metadata(
+ entity: &mut bevy_ecs::system::EntityCommands,
+ d: EntityDataItem,
+ ) -> Result<(), UpdateMetadataError> {
+ match d.index {
+ 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?,
+ _ => {}
+ }
+ Ok(())
+ }
+}
+
+#[derive(Bundle)]
+pub struct LingeringPotionMetadataBundle {
+ _marker: LingeringPotion,
+ parent: AbstractThrownItemProjectileMetadataBundle,
+}
+impl Default for LingeringPotionMetadataBundle {
+ fn default() -> Self {
+ Self {
+ _marker: LingeringPotion,
+ parent: AbstractThrownItemProjectileMetadataBundle {
+ _marker: AbstractThrownItemProjectile,
+ parent: AbstractEntityMetadataBundle {
+ _marker: AbstractEntity,
+ on_fire: OnFire(false),
+ shift_key_down: ShiftKeyDown(false),
+ sprinting: Sprinting(false),
+ swimming: Swimming(false),
+ currently_glowing: CurrentlyGlowing(false),
+ invisible: Invisible(false),
+ fall_flying: FallFlying(false),
+ air_supply: AirSupply(Default::default()),
+ custom_name: CustomName(Default::default()),
+ custom_name_visible: CustomNameVisible(Default::default()),
+ silent: Silent(Default::default()),
+ no_gravity: NoGravity(Default::default()),
+ pose: Pose::default(),
+ ticks_frozen: TicksFrozen(Default::default()),
+ },
+ abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack(
+ Default::default(),
+ ),
+ },
+ }
+ }
+}
+
#[derive(Component, Deref, DerefMut, Clone)]
pub struct Strength(pub i32);
#[derive(Component, Deref, DerefMut, Clone)]
@@ -5542,7 +5597,6 @@ impl Default for LlamaMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
chest: Chest(false),
},
@@ -5832,7 +5886,7 @@ impl Minecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
@@ -5873,16 +5927,15 @@ impl Default for MinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
}
}
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct MooshroomKind(pub String);
+pub struct MooshroomKind(pub i32);
#[derive(Component)]
pub struct Mooshroom;
impl Mooshroom {
@@ -5891,9 +5944,9 @@ impl Mooshroom {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=16 => Cow::apply_metadata(entity, d)?,
+ 0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
17 => {
- entity.insert(MooshroomKind(d.value.into_string()?));
+ entity.insert(MooshroomKind(d.value.into_int()?));
}
_ => {}
}
@@ -5904,58 +5957,55 @@ impl Mooshroom {
#[derive(Bundle)]
pub struct MooshroomMetadataBundle {
_marker: Mooshroom,
- parent: CowMetadataBundle,
+ parent: AbstractAnimalMetadataBundle,
mooshroom_kind: MooshroomKind,
}
impl Default for MooshroomMetadataBundle {
fn default() -> Self {
Self {
_marker: Mooshroom,
- parent: CowMetadataBundle {
- _marker: Cow,
- parent: AbstractAnimalMetadataBundle {
- _marker: AbstractAnimal,
- parent: AbstractAgeableMetadataBundle {
- _marker: AbstractAgeable,
- parent: AbstractCreatureMetadataBundle {
- _marker: AbstractCreature,
- parent: AbstractInsentientMetadataBundle {
- _marker: AbstractInsentient,
- parent: AbstractLivingMetadataBundle {
- _marker: AbstractLiving,
- parent: AbstractEntityMetadataBundle {
- _marker: AbstractEntity,
- on_fire: OnFire(false),
- shift_key_down: ShiftKeyDown(false),
- sprinting: Sprinting(false),
- swimming: Swimming(false),
- currently_glowing: CurrentlyGlowing(false),
- invisible: Invisible(false),
- fall_flying: FallFlying(false),
- air_supply: AirSupply(Default::default()),
- custom_name: CustomName(Default::default()),
- custom_name_visible: CustomNameVisible(Default::default()),
- silent: Silent(Default::default()),
- no_gravity: NoGravity(Default::default()),
- pose: Pose::default(),
- ticks_frozen: TicksFrozen(Default::default()),
- },
- auto_spin_attack: AutoSpinAttack(false),
- abstract_living_using_item: AbstractLivingUsingItem(false),
- health: Health(1.0),
- effect_particles: EffectParticles(Default::default()),
- effect_ambience: EffectAmbience(false),
- arrow_count: ArrowCount(0),
- stinger_count: StingerCount(0),
- sleeping_pos: SleepingPos(None),
+ parent: AbstractAnimalMetadataBundle {
+ _marker: AbstractAnimal,
+ parent: AbstractAgeableMetadataBundle {
+ _marker: AbstractAgeable,
+ parent: AbstractCreatureMetadataBundle {
+ _marker: AbstractCreature,
+ parent: AbstractInsentientMetadataBundle {
+ _marker: AbstractInsentient,
+ parent: AbstractLivingMetadataBundle {
+ _marker: AbstractLiving,
+ parent: AbstractEntityMetadataBundle {
+ _marker: AbstractEntity,
+ on_fire: OnFire(false),
+ shift_key_down: ShiftKeyDown(false),
+ sprinting: Sprinting(false),
+ swimming: Swimming(false),
+ currently_glowing: CurrentlyGlowing(false),
+ invisible: Invisible(false),
+ fall_flying: FallFlying(false),
+ air_supply: AirSupply(Default::default()),
+ custom_name: CustomName(Default::default()),
+ custom_name_visible: CustomNameVisible(Default::default()),
+ silent: Silent(Default::default()),
+ no_gravity: NoGravity(Default::default()),
+ pose: Pose::default(),
+ ticks_frozen: TicksFrozen(Default::default()),
},
- no_ai: NoAi(false),
- left_handed: LeftHanded(false),
- aggressive: Aggressive(false),
+ auto_spin_attack: AutoSpinAttack(false),
+ abstract_living_using_item: AbstractLivingUsingItem(false),
+ health: Health(1.0),
+ effect_particles: EffectParticles(Default::default()),
+ effect_ambience: EffectAmbience(false),
+ arrow_count: ArrowCount(0),
+ stinger_count: StingerCount(0),
+ sleeping_pos: SleepingPos(None),
},
+ no_ai: NoAi(false),
+ left_handed: LeftHanded(false),
+ aggressive: Aggressive(false),
},
- abstract_ageable_baby: AbstractAgeableBaby(false),
},
+ abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
mooshroom_kind: MooshroomKind(Default::default()),
@@ -6041,7 +6091,6 @@ impl Default for MuleMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
chest: Chest(false),
},
@@ -6341,7 +6390,7 @@ impl Default for PaintingMetadataBundle {
pose: Pose::default(),
ticks_frozen: TicksFrozen(Default::default()),
},
- painting_variant: PaintingVariant(azalea_registry::PaintingVariant::Kebab),
+ painting_variant: PaintingVariant(azalea_registry::PaintingVariant::new_raw(0)),
}
}
}
@@ -6670,7 +6719,7 @@ impl Default for ParrotMetadataBundle {
in_sitting_pose: InSittingPose(false),
owneruuid: Owneruuid(None),
},
- parrot_variant: ParrotVariant(0),
+ parrot_variant: ParrotVariant(Default::default()),
}
}
}
@@ -6745,9 +6794,9 @@ impl Default for PhantomMetadataBundle {
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct PigSaddle(pub bool);
-#[derive(Component, Deref, DerefMut, Clone)]
pub struct PigBoostTime(pub i32);
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct PigVariant(pub azalea_registry::FrogVariant);
#[derive(Component)]
pub struct Pig;
impl Pig {
@@ -6758,10 +6807,10 @@ impl Pig {
match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
17 => {
- entity.insert(PigSaddle(d.value.into_boolean()?));
+ entity.insert(PigBoostTime(d.value.into_int()?));
}
18 => {
- entity.insert(PigBoostTime(d.value.into_int()?));
+ entity.insert(PigVariant(d.value.into_frog_variant()?));
}
_ => {}
}
@@ -6773,8 +6822,8 @@ impl Pig {
pub struct PigMetadataBundle {
_marker: Pig,
parent: AbstractAnimalMetadataBundle,
- pig_saddle: PigSaddle,
pig_boost_time: PigBoostTime,
+ pig_variant: PigVariant,
}
impl Default for PigMetadataBundle {
fn default() -> Self {
@@ -6824,8 +6873,8 @@ impl Default for PigMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
- pig_saddle: PigSaddle(false),
pig_boost_time: PigBoostTime(0),
+ pig_variant: PigVariant(azalea_registry::FrogVariant::new_raw(0)),
}
}
}
@@ -7253,57 +7302,6 @@ impl Default for PolarBearMetadataBundle {
}
}
-#[derive(Component)]
-pub struct Potion;
-impl Potion {
- pub fn apply_metadata(
- entity: &mut bevy_ecs::system::EntityCommands,
- d: EntityDataItem,
- ) -> Result<(), UpdateMetadataError> {
- match d.index {
- 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?,
- _ => {}
- }
- Ok(())
- }
-}
-
-#[derive(Bundle)]
-pub struct PotionMetadataBundle {
- _marker: Potion,
- parent: AbstractThrownItemProjectileMetadataBundle,
-}
-impl Default for PotionMetadataBundle {
- fn default() -> Self {
- Self {
- _marker: Potion,
- parent: AbstractThrownItemProjectileMetadataBundle {
- _marker: AbstractThrownItemProjectile,
- parent: AbstractEntityMetadataBundle {
- _marker: AbstractEntity,
- on_fire: OnFire(false),
- shift_key_down: ShiftKeyDown(false),
- sprinting: Sprinting(false),
- swimming: Swimming(false),
- currently_glowing: CurrentlyGlowing(false),
- invisible: Invisible(false),
- fall_flying: FallFlying(false),
- air_supply: AirSupply(Default::default()),
- custom_name: CustomName(Default::default()),
- custom_name_visible: CustomNameVisible(Default::default()),
- silent: Silent(Default::default()),
- no_gravity: NoGravity(Default::default()),
- pose: Pose::default(),
- ticks_frozen: TicksFrozen(Default::default()),
- },
- abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack(
- Default::default(),
- ),
- },
- }
- }
-}
-
#[derive(Component, Deref, DerefMut, Clone)]
pub struct PufferfishFromBucket(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
@@ -8038,7 +8036,6 @@ impl Default for SkeletonHorseMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
}
}
@@ -8381,7 +8378,7 @@ impl SpawnerMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
@@ -8422,9 +8419,8 @@ impl Default for SpawnerMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
}
}
@@ -8557,6 +8553,57 @@ impl Default for SpiderMetadataBundle {
}
#[derive(Component)]
+pub struct SplashPotion;
+impl SplashPotion {
+ pub fn apply_metadata(
+ entity: &mut bevy_ecs::system::EntityCommands,
+ d: EntityDataItem,
+ ) -> Result<(), UpdateMetadataError> {
+ match d.index {
+ 0..=8 => AbstractThrownItemProjectile::apply_metadata(entity, d)?,
+ _ => {}
+ }
+ Ok(())
+ }
+}
+
+#[derive(Bundle)]
+pub struct SplashPotionMetadataBundle {
+ _marker: SplashPotion,
+ parent: AbstractThrownItemProjectileMetadataBundle,
+}
+impl Default for SplashPotionMetadataBundle {
+ fn default() -> Self {
+ Self {
+ _marker: SplashPotion,
+ parent: AbstractThrownItemProjectileMetadataBundle {
+ _marker: AbstractThrownItemProjectile,
+ parent: AbstractEntityMetadataBundle {
+ _marker: AbstractEntity,
+ on_fire: OnFire(false),
+ shift_key_down: ShiftKeyDown(false),
+ sprinting: Sprinting(false),
+ swimming: Swimming(false),
+ currently_glowing: CurrentlyGlowing(false),
+ invisible: Invisible(false),
+ fall_flying: FallFlying(false),
+ air_supply: AirSupply(Default::default()),
+ custom_name: CustomName(Default::default()),
+ custom_name_visible: CustomNameVisible(Default::default()),
+ silent: Silent(Default::default()),
+ no_gravity: NoGravity(Default::default()),
+ pose: Pose::default(),
+ ticks_frozen: TicksFrozen(Default::default()),
+ },
+ abstract_thrown_item_projectile_item_stack: AbstractThrownItemProjectileItemStack(
+ Default::default(),
+ ),
+ },
+ }
+ }
+}
+
+#[derive(Component)]
pub struct SpruceBoat;
impl SpruceBoat {
pub fn apply_metadata(
@@ -8811,8 +8858,6 @@ impl Default for StrayMetadataBundle {
pub struct StriderBoostTime(pub i32);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct Suffocating(pub bool);
-#[derive(Component, Deref, DerefMut, Clone)]
-pub struct StriderSaddle(pub bool);
#[derive(Component)]
pub struct Strider;
impl Strider {
@@ -8828,9 +8873,6 @@ impl Strider {
18 => {
entity.insert(Suffocating(d.value.into_boolean()?));
}
- 19 => {
- entity.insert(StriderSaddle(d.value.into_boolean()?));
- }
_ => {}
}
Ok(())
@@ -8843,7 +8885,6 @@ pub struct StriderMetadataBundle {
parent: AbstractAnimalMetadataBundle,
strider_boost_time: StriderBoostTime,
suffocating: Suffocating,
- strider_saddle: StriderSaddle,
}
impl Default for StriderMetadataBundle {
fn default() -> Self {
@@ -8895,7 +8936,6 @@ impl Default for StriderMetadataBundle {
},
strider_boost_time: StriderBoostTime(0),
suffocating: Suffocating(false),
- strider_saddle: StriderSaddle(false),
}
}
}
@@ -9156,7 +9196,7 @@ impl TntMinecart {
d: EntityDataItem,
) -> Result<(), UpdateMetadataError> {
match d.index {
- 0..=13 => AbstractMinecart::apply_metadata(entity, d)?,
+ 0..=12 => AbstractMinecart::apply_metadata(entity, d)?,
_ => {}
}
Ok(())
@@ -9197,9 +9237,8 @@ impl Default for TntMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
},
}
}
@@ -9287,7 +9326,6 @@ impl Default for TraderLlamaMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
chest: Chest(false),
},
@@ -9435,23 +9473,15 @@ impl Default for TropicalFishMetadataBundle {
},
abstract_fish_from_bucket: AbstractFishFromBucket(false),
},
- tropical_fish_type_variant: TropicalFishTypeVariant(0),
+ tropical_fish_type_variant: TropicalFishTypeVariant(Default::default()),
}
}
}
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct TurtleHomePos(pub BlockPos);
-#[derive(Component, Deref, DerefMut, Clone)]
pub struct HasEgg(pub bool);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct LayingEgg(pub bool);
-#[derive(Component, Deref, DerefMut, Clone)]
-pub struct TravelPos(pub BlockPos);
-#[derive(Component, Deref, DerefMut, Clone)]
-pub struct GoingHome(pub bool);
-#[derive(Component, Deref, DerefMut, Clone)]
-pub struct Travelling(pub bool);
#[derive(Component)]
pub struct Turtle;
impl Turtle {
@@ -9462,23 +9492,11 @@ impl Turtle {
match d.index {
0..=16 => AbstractAnimal::apply_metadata(entity, d)?,
17 => {
- entity.insert(TurtleHomePos(d.value.into_block_pos()?));
- }
- 18 => {
entity.insert(HasEgg(d.value.into_boolean()?));
}
- 19 => {
+ 18 => {
entity.insert(LayingEgg(d.value.into_boolean()?));
}
- 20 => {
- entity.insert(TravelPos(d.value.into_block_pos()?));
- }
- 21 => {
- entity.insert(GoingHome(d.value.into_boolean()?));
- }
- 22 => {
- entity.insert(Travelling(d.value.into_boolean()?));
- }
_ => {}
}
Ok(())
@@ -9489,12 +9507,8 @@ impl Turtle {
pub struct TurtleMetadataBundle {
_marker: Turtle,
parent: AbstractAnimalMetadataBundle,
- turtle_home_pos: TurtleHomePos,
has_egg: HasEgg,
laying_egg: LayingEgg,
- travel_pos: TravelPos,
- going_home: GoingHome,
- travelling: Travelling,
}
impl Default for TurtleMetadataBundle {
fn default() -> Self {
@@ -9544,12 +9558,8 @@ impl Default for TurtleMetadataBundle {
abstract_ageable_baby: AbstractAgeableBaby(false),
},
},
- turtle_home_pos: TurtleHomePos(BlockPos::new(0, 0, 0)),
has_egg: HasEgg(false),
laying_egg: LayingEgg(false),
- travel_pos: TravelPos(BlockPos::new(0, 0, 0)),
- going_home: GoingHome(false),
- travelling: Travelling(false),
}
}
}
@@ -10282,7 +10292,9 @@ pub struct WolfCollarColor(pub i32);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct WolfRemainingAngerTime(pub i32);
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct WolfVariant(pub azalea_registry::WolfVariant);
+pub struct WolfVariant(pub azalea_registry::CowVariant);
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct SoundVariant(pub azalea_registry::WolfVariant);
#[derive(Component)]
pub struct Wolf;
impl Wolf {
@@ -10302,7 +10314,10 @@ impl Wolf {
entity.insert(WolfRemainingAngerTime(d.value.into_int()?));
}
22 => {
- entity.insert(WolfVariant(d.value.into_wolf_variant()?));
+ entity.insert(WolfVariant(d.value.into_cow_variant()?));
+ }
+ 23 => {
+ entity.insert(SoundVariant(d.value.into_wolf_variant()?));
}
_ => {}
}
@@ -10318,6 +10333,7 @@ pub struct WolfMetadataBundle {
wolf_collar_color: WolfCollarColor,
wolf_remaining_anger_time: WolfRemainingAngerTime,
wolf_variant: WolfVariant,
+ sound_variant: SoundVariant,
}
impl Default for WolfMetadataBundle {
fn default() -> Self {
@@ -10376,7 +10392,8 @@ impl Default for WolfMetadataBundle {
wolf_interested: WolfInterested(false),
wolf_collar_color: WolfCollarColor(Default::default()),
wolf_remaining_anger_time: WolfRemainingAngerTime(0),
- wolf_variant: WolfVariant(Default::default()),
+ wolf_variant: WolfVariant(azalea_registry::CowVariant::new_raw(0)),
+ sound_variant: SoundVariant(azalea_registry::WolfVariant::new_raw(0)),
}
}
}
@@ -10613,7 +10630,6 @@ impl Default for ZombieHorseMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
}
}
@@ -11132,7 +11148,6 @@ impl Default for AbstractChestedHorseMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
},
chest: Chest(false),
}
@@ -11512,7 +11527,6 @@ impl AbstractHorse {
entity.insert(Eating(bitfield & 0x10 != 0));
entity.insert(AbstractHorseStanding(bitfield & 0x20 != 0));
entity.insert(Bred(bitfield & 0x8 != 0));
- entity.insert(Saddled(bitfield & 0x4 != 0));
}
_ => {}
}
@@ -11528,7 +11542,6 @@ pub struct AbstractHorseMetadataBundle {
eating: Eating,
abstract_horse_standing: AbstractHorseStanding,
bred: Bred,
- saddled: Saddled,
}
impl Default for AbstractHorseMetadataBundle {
fn default() -> Self {
@@ -11582,7 +11595,6 @@ impl Default for AbstractHorseMetadataBundle {
eating: Eating(false),
abstract_horse_standing: AbstractHorseStanding(false),
bred: Bred(false),
- saddled: Saddled(false),
}
}
}
@@ -11749,14 +11761,11 @@ impl AbstractMinecart {
match d.index {
0..=10 => AbstractVehicle::apply_metadata(entity, d)?,
11 => {
- entity.insert(DisplayBlock(d.value.into_int()?));
+ entity.insert(CustomDisplayBlock(d.value.into_optional_block_state()?));
}
12 => {
entity.insert(DisplayOffset(d.value.into_int()?));
}
- 13 => {
- entity.insert(CustomDisplay(d.value.into_boolean()?));
- }
_ => {}
}
Ok(())
@@ -11767,9 +11776,8 @@ impl AbstractMinecart {
pub struct AbstractMinecartMetadataBundle {
_marker: AbstractMinecart,
parent: AbstractVehicleMetadataBundle,
- display_block: DisplayBlock,
+ custom_display_block: CustomDisplayBlock,
display_offset: DisplayOffset,
- custom_display: CustomDisplay,
}
impl Default for AbstractMinecartMetadataBundle {
fn default() -> Self {
@@ -11798,9 +11806,8 @@ impl Default for AbstractMinecartMetadataBundle {
hurtdir: Hurtdir(1),
damage: Damage(0.0),
},
- display_block: DisplayBlock(Default::default()),
- display_offset: DisplayOffset(6),
- custom_display: CustomDisplay(false),
+ custom_display_block: CustomDisplayBlock(azalea_block::BlockState::AIR),
+ display_offset: DisplayOffset(Default::default()),
}
}
}
@@ -12108,7 +12115,7 @@ impl AbstractTameable {
entity.insert(InSittingPose(bitfield & 0x1 != 0));
}
18 => {
- entity.insert(Owneruuid(d.value.into_optional_uuid()?));
+ entity.insert(Owneruuid(d.value.into_optional_living_entity_reference()?));
}
_ => {}
}
@@ -12753,6 +12760,11 @@ pub fn apply_metadata(
LightningBolt::apply_metadata(entity, d)?;
}
}
+ azalea_registry::EntityKind::LingeringPotion => {
+ for d in items {
+ LingeringPotion::apply_metadata(entity, d)?;
+ }
+ }
azalea_registry::EntityKind::Llama => {
for d in items {
Llama::apply_metadata(entity, d)?;
@@ -12878,11 +12890,6 @@ pub fn apply_metadata(
PolarBear::apply_metadata(entity, d)?;
}
}
- azalea_registry::EntityKind::Potion => {
- for d in items {
- Potion::apply_metadata(entity, d)?;
- }
- }
azalea_registry::EntityKind::Pufferfish => {
for d in items {
Pufferfish::apply_metadata(entity, d)?;
@@ -12973,6 +12980,11 @@ pub fn apply_metadata(
Spider::apply_metadata(entity, d)?;
}
}
+ azalea_registry::EntityKind::SplashPotion => {
+ for d in items {
+ SplashPotion::apply_metadata(entity, d)?;
+ }
+ }
azalea_registry::EntityKind::SpruceBoat => {
for d in items {
SpruceBoat::apply_metadata(entity, d)?;
@@ -13355,6 +13367,9 @@ pub fn apply_default_metadata(
azalea_registry::EntityKind::LightningBolt => {
entity.insert(LightningBoltMetadataBundle::default());
}
+ azalea_registry::EntityKind::LingeringPotion => {
+ entity.insert(LingeringPotionMetadataBundle::default());
+ }
azalea_registry::EntityKind::Llama => {
entity.insert(LlamaMetadataBundle::default());
}
@@ -13430,9 +13445,6 @@ pub fn apply_default_metadata(
azalea_registry::EntityKind::PolarBear => {
entity.insert(PolarBearMetadataBundle::default());
}
- azalea_registry::EntityKind::Potion => {
- entity.insert(PotionMetadataBundle::default());
- }
azalea_registry::EntityKind::Pufferfish => {
entity.insert(PufferfishMetadataBundle::default());
}
@@ -13487,6 +13499,9 @@ pub fn apply_default_metadata(
azalea_registry::EntityKind::Spider => {
entity.insert(SpiderMetadataBundle::default());
}
+ azalea_registry::EntityKind::SplashPotion => {
+ entity.insert(SplashPotionMetadataBundle::default());
+ }
azalea_registry::EntityKind::SpruceBoat => {
entity.insert(SpruceBoatMetadataBundle::default());
}
diff --git a/azalea-entity/src/particle.rs b/azalea-entity/src/particle.rs
index 497f4cef..6bc1ef6f 100755
--- a/azalea-entity/src/particle.rs
+++ b/azalea-entity/src/particle.rs
@@ -45,6 +45,7 @@ pub enum Particle {
Infested,
CherryLeaves,
PaleOakLeaves,
+ TintedLeaves,
SculkSoul,
SculkCharge(SculkChargeParticle),
SculkChargePop,
@@ -122,6 +123,7 @@ pub enum Particle {
RaidOmen,
TrialOmen,
BlockCrumble,
+ Firefly,
}
impl From<ParticleKind> for Particle {
@@ -164,6 +166,7 @@ impl From<ParticleKind> for Particle {
ParticleKind::Flame => Self::Flame,
ParticleKind::CherryLeaves => Self::CherryLeaves,
ParticleKind::PaleOakLeaves => Self::PaleOakLeaves,
+ ParticleKind::TintedLeaves => Self::TintedLeaves,
ParticleKind::SculkSoul => Self::SculkSoul,
ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()),
ParticleKind::SculkChargePop => Self::SculkChargePop,
@@ -245,6 +248,7 @@ impl From<ParticleKind> for Particle {
ParticleKind::TrialOmen => Self::TrialOmen,
ParticleKind::Trail => Self::Trail,
ParticleKind::BlockCrumble => Self::BlockCrumble,
+ ParticleKind::Firefly => Self::Firefly,
}
}
}
diff --git a/azalea-inventory/src/components.rs b/azalea-inventory/src/components.rs
index 1d92faf3..13aa76f5 100644
--- a/azalea-inventory/src/components.rs
+++ b/azalea-inventory/src/components.rs
@@ -8,8 +8,9 @@ use azalea_core::{
sound::CustomSound,
};
use azalea_registry::{
- Attribute, Block, ConsumeEffectKind, DataComponentKind, Enchantment, EntityKind, HolderSet,
- Item, MobEffect, Potion, SoundEvent, TrimMaterial, TrimPattern,
+ self as registry, Attribute, Block, ConsumeEffectKind, DamageKind, DataComponentKind,
+ Enchantment, EntityKind, Holder, HolderSet, Item, MobEffect, Potion, SoundEvent, TrimMaterial,
+ TrimPattern,
};
use simdnbt::owned::{Nbt, NbtCompound};
use tracing::trace;
@@ -51,7 +52,7 @@ where
}
pub fn from_kind(
- kind: azalea_registry::DataComponentKind,
+ kind: registry::DataComponentKind,
buf: &mut Cursor<&[u8]>,
) -> Result<Box<dyn EncodableDataComponent>, BufReadError> {
// if this is causing a compile-time error, look at DataComponents.java in the
@@ -75,10 +76,6 @@ pub fn from_kind(
DataComponentKind::CanBreak => Box::new(CanBreak::azalea_read(buf)?),
DataComponentKind::AttributeModifiers => Box::new(AttributeModifiers::azalea_read(buf)?),
DataComponentKind::CustomModelData => Box::new(CustomModelData::azalea_read(buf)?),
- DataComponentKind::HideAdditionalTooltip => {
- Box::new(HideAdditionalTooltip::azalea_read(buf)?)
- }
- DataComponentKind::HideTooltip => Box::new(HideTooltip::azalea_read(buf)?),
DataComponentKind::RepairCost => Box::new(RepairCost::azalea_read(buf)?),
DataComponentKind::CreativeSlotLock => Box::new(CreativeSlotLock::azalea_read(buf)?),
DataComponentKind::EnchantmentGlintOverride => {
@@ -138,6 +135,45 @@ pub fn from_kind(
DataComponentKind::Glider => Box::new(Glider::azalea_read(buf)?),
DataComponentKind::TooltipStyle => Box::new(TooltipStyle::azalea_read(buf)?),
DataComponentKind::DeathProtection => Box::new(DeathProtection::azalea_read(buf)?),
+ DataComponentKind::Weapon => Box::new(Weapon::azalea_read(buf)?),
+ DataComponentKind::PotionDurationScale => Box::new(PotionDurationScale::azalea_read(buf)?),
+ DataComponentKind::VillagerVariant => Box::new(VillagerVariant::azalea_read(buf)?),
+ DataComponentKind::WolfVariant => Box::new(WolfVariant::azalea_read(buf)?),
+ DataComponentKind::WolfCollar => Box::new(WolfCollar::azalea_read(buf)?),
+ DataComponentKind::FoxVariant => Box::new(FoxVariant::azalea_read(buf)?),
+ DataComponentKind::SalmonSize => Box::new(SalmonSize::azalea_read(buf)?),
+ DataComponentKind::ParrotVariant => Box::new(ParrotVariant::azalea_read(buf)?),
+ DataComponentKind::TropicalFishPattern => Box::new(TropicalFishPattern::azalea_read(buf)?),
+ DataComponentKind::TropicalFishBaseColor => {
+ Box::new(TropicalFishBaseColor::azalea_read(buf)?)
+ }
+ DataComponentKind::TropicalFishPatternColor => {
+ Box::new(TropicalFishPatternColor::azalea_read(buf)?)
+ }
+ DataComponentKind::MooshroomVariant => Box::new(MooshroomVariant::azalea_read(buf)?),
+ DataComponentKind::RabbitVariant => Box::new(RabbitVariant::azalea_read(buf)?),
+ DataComponentKind::PigVariant => Box::new(PigVariant::azalea_read(buf)?),
+ DataComponentKind::FrogVariant => Box::new(FrogVariant::azalea_read(buf)?),
+ DataComponentKind::HorseVariant => Box::new(HorseVariant::azalea_read(buf)?),
+ DataComponentKind::PaintingVariant => Box::new(PaintingVariant::azalea_read(buf)?),
+ DataComponentKind::LlamaVariant => Box::new(LlamaVariant::azalea_read(buf)?),
+ DataComponentKind::AxolotlVariant => Box::new(AxolotlVariant::azalea_read(buf)?),
+ DataComponentKind::CatVariant => Box::new(CatVariant::azalea_read(buf)?),
+ DataComponentKind::CatCollar => Box::new(CatCollar::azalea_read(buf)?),
+ DataComponentKind::SheepColor => Box::new(SheepColor::azalea_read(buf)?),
+ DataComponentKind::ShulkerColor => Box::new(ShulkerColor::azalea_read(buf)?),
+ DataComponentKind::TooltipDisplay => Box::new(TooltipDisplay::azalea_read(buf)?),
+ DataComponentKind::BlocksAttacks => Box::new(BlocksAttacks::azalea_read(buf)?),
+ DataComponentKind::ProvidesTrimMaterial => {
+ Box::new(ProvidesTrimMaterial::azalea_read(buf)?)
+ }
+ DataComponentKind::ProvidesBannerPatterns => {
+ Box::new(ProvidesBannerPatterns::azalea_read(buf)?)
+ }
+ DataComponentKind::BreakSound => Box::new(BreakSound::azalea_read(buf)?),
+ DataComponentKind::WolfSoundVariant => Box::new(WolfSoundVariant::azalea_read(buf)?),
+ DataComponentKind::CowVariant => Box::new(CowVariant::azalea_read(buf)?),
+ DataComponentKind::ChickenVariant => Box::new(ChickenVariant::azalea_read(buf)?),
})
}
@@ -343,18 +379,6 @@ impl DataComponent for CustomModelData {
}
#[derive(Clone, PartialEq, AzBuf)]
-pub struct HideAdditionalTooltip;
-impl DataComponent for HideAdditionalTooltip {
- const KIND: DataComponentKind = DataComponentKind::HideAdditionalTooltip;
-}
-
-#[derive(Clone, PartialEq, AzBuf)]
-pub struct HideTooltip;
-impl DataComponent for HideTooltip {
- const KIND: DataComponentKind = DataComponentKind::HideTooltip;
-}
-
-#[derive(Clone, PartialEq, AzBuf)]
pub struct RepairCost {
#[var]
pub cost: u32,
@@ -600,7 +624,7 @@ impl DataComponent for BlockEntityData {
#[derive(Clone, PartialEq, AzBuf)]
pub struct Instrument {
- pub instrument: azalea_registry::Instrument,
+ pub instrument: registry::Instrument,
}
impl DataComponent for Instrument {
const KIND: DataComponentKind = DataComponentKind::Instrument;
@@ -791,7 +815,7 @@ impl DataComponent for ContainerLoot {
#[derive(Clone, PartialEq, AzBuf)]
pub struct JukeboxPlayable {
- pub song: azalea_registry::JukeboxSong,
+ pub song: registry::JukeboxSong,
pub show_in_tooltip: bool,
}
impl DataComponent for JukeboxPlayable {
@@ -931,3 +955,302 @@ pub struct DeathProtection {
impl DataComponent for DeathProtection {
const KIND: DataComponentKind = DataComponentKind::DeathProtection;
}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct Weapon {
+ #[var]
+ pub damage_per_attack: i32,
+ pub can_disable_blocking: bool,
+}
+impl DataComponent for Weapon {
+ const KIND: DataComponentKind = DataComponentKind::Weapon;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct PotionDurationScale {
+ pub value: f32,
+}
+impl DataComponent for PotionDurationScale {
+ const KIND: DataComponentKind = DataComponentKind::PotionDurationScale;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct VillagerVariant {
+ pub variant: registry::VillagerKind,
+}
+impl DataComponent for VillagerVariant {
+ const KIND: DataComponentKind = DataComponentKind::VillagerVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct WolfVariant {
+ pub variant: registry::WolfVariant,
+}
+impl DataComponent for WolfVariant {
+ const KIND: DataComponentKind = DataComponentKind::WolfVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct WolfCollar {
+ pub color: DyeColor,
+}
+impl DataComponent for WolfCollar {
+ const KIND: DataComponentKind = DataComponentKind::WolfCollar;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct FoxVariant {
+ pub variant: registry::FoxVariant,
+}
+impl DataComponent for FoxVariant {
+ const KIND: DataComponentKind = DataComponentKind::FoxVariant;
+}
+
+#[derive(Clone, Copy, PartialEq, AzBuf)]
+pub enum SalmonSize {
+ Small,
+ Medium,
+ Large,
+}
+impl DataComponent for SalmonSize {
+ const KIND: DataComponentKind = DataComponentKind::SalmonSize;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct ParrotVariant {
+ pub variant: registry::ParrotVariant,
+}
+impl DataComponent for ParrotVariant {
+ const KIND: DataComponentKind = DataComponentKind::ParrotVariant;
+}
+
+#[derive(Clone, Copy, PartialEq, AzBuf)]
+pub enum TropicalFishPattern {
+ Kob,
+ Sunstreak,
+ Snooper,
+ Dasher,
+ Brinely,
+ Spotty,
+ Flopper,
+ Stripey,
+ Glitter,
+ Blockfish,
+ Betty,
+ Clayfish,
+}
+impl DataComponent for TropicalFishPattern {
+ const KIND: DataComponentKind = DataComponentKind::TropicalFishPattern;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct TropicalFishBaseColor {
+ pub color: DyeColor,
+}
+impl DataComponent for TropicalFishBaseColor {
+ const KIND: DataComponentKind = DataComponentKind::TropicalFishBaseColor;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct TropicalFishPatternColor {
+ pub color: DyeColor,
+}
+impl DataComponent for TropicalFishPatternColor {
+ const KIND: DataComponentKind = DataComponentKind::TropicalFishPatternColor;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct MooshroomVariant {
+ pub variant: registry::MooshroomVariant,
+}
+impl DataComponent for MooshroomVariant {
+ const KIND: DataComponentKind = DataComponentKind::MooshroomVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct RabbitVariant {
+ pub variant: registry::RabbitVariant,
+}
+impl DataComponent for RabbitVariant {
+ const KIND: DataComponentKind = DataComponentKind::RabbitVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct PigVariant {
+ pub variant: registry::PigVariant,
+}
+impl DataComponent for PigVariant {
+ const KIND: DataComponentKind = DataComponentKind::PigVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct FrogVariant {
+ pub variant: registry::FrogVariant,
+}
+impl DataComponent for FrogVariant {
+ const KIND: DataComponentKind = DataComponentKind::FrogVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct HorseVariant {
+ pub variant: registry::HorseVariant,
+}
+impl DataComponent for HorseVariant {
+ const KIND: DataComponentKind = DataComponentKind::HorseVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct PaintingVariant {
+ pub variant: registry::PaintingVariant,
+}
+impl DataComponent for PaintingVariant {
+ const KIND: DataComponentKind = DataComponentKind::PaintingVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct LlamaVariant {
+ pub variant: registry::LlamaVariant,
+}
+impl DataComponent for LlamaVariant {
+ const KIND: DataComponentKind = DataComponentKind::LlamaVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct AxolotlVariant {
+ pub variant: registry::AxolotlVariant,
+}
+impl DataComponent for AxolotlVariant {
+ const KIND: DataComponentKind = DataComponentKind::AxolotlVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct CatVariant {
+ pub variant: registry::CatVariant,
+}
+impl DataComponent for CatVariant {
+ const KIND: DataComponentKind = DataComponentKind::CatVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct CatCollar {
+ pub color: DyeColor,
+}
+impl DataComponent for CatCollar {
+ const KIND: DataComponentKind = DataComponentKind::CatCollar;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct SheepColor {
+ pub color: DyeColor,
+}
+impl DataComponent for SheepColor {
+ const KIND: DataComponentKind = DataComponentKind::SheepColor;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct ShulkerColor {
+ pub color: DyeColor,
+}
+impl DataComponent for ShulkerColor {
+ const KIND: DataComponentKind = DataComponentKind::ShulkerColor;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct TooltipDisplay {
+ pub hide_tooltip: bool,
+ pub hidden_components: Vec<DataComponentKind>,
+}
+impl DataComponent for TooltipDisplay {
+ const KIND: DataComponentKind = DataComponentKind::TooltipDisplay;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct BlocksAttacks {
+ pub block_delay_seconds: f32,
+ pub disable_cooldown_scale: f32,
+ pub damage_reductions: Vec<DamageReduction>,
+ pub item_damage: ItemDamageFunction,
+ pub bypassed_by: Option<ResourceLocation>,
+ pub block_sound: Option<azalea_registry::Holder<SoundEvent, CustomSound>>,
+ pub disable_sound: Option<azalea_registry::Holder<SoundEvent, CustomSound>>,
+}
+impl DataComponent for BlocksAttacks {
+ const KIND: DataComponentKind = DataComponentKind::BlocksAttacks;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct DamageReduction {
+ pub horizontal_blocking_angle: f32,
+ pub kind: Option<HolderSet<DamageKind, ResourceLocation>>,
+}
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct ItemDamageFunction {
+ pub threshold: f32,
+ pub base: f32,
+ pub factor: f32,
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub enum ProvidesTrimMaterial {
+ Holder(Holder<TrimMaterial, DirectTrimMaterial>),
+ Registry(TrimMaterial),
+}
+impl DataComponent for ProvidesTrimMaterial {
+ const KIND: DataComponentKind = DataComponentKind::ProvidesTrimMaterial;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct DirectTrimMaterial {
+ pub assets: MaterialAssetGroup,
+ pub description: FormattedText,
+}
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct MaterialAssetGroup {
+ pub base: AssetInfo,
+ pub overrides: Vec<(ResourceLocation, AssetInfo)>,
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct AssetInfo {
+ pub suffix: String,
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct ProvidesBannerPatterns {
+ pub key: ResourceLocation,
+}
+impl DataComponent for ProvidesBannerPatterns {
+ const KIND: DataComponentKind = DataComponentKind::ProvidesBannerPatterns;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct BreakSound {
+ pub sound: azalea_registry::Holder<SoundEvent, CustomSound>,
+}
+impl DataComponent for BreakSound {
+ const KIND: DataComponentKind = DataComponentKind::BreakSound;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct WolfSoundVariant {
+ pub variant: azalea_registry::WolfSoundVariant,
+}
+impl DataComponent for WolfSoundVariant {
+ const KIND: DataComponentKind = DataComponentKind::WolfSoundVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct CowVariant {
+ pub variant: azalea_registry::CowVariant,
+}
+impl DataComponent for CowVariant {
+ const KIND: DataComponentKind = DataComponentKind::CowVariant;
+}
+
+#[derive(Clone, PartialEq, AzBuf)]
+pub struct ChickenVariant {
+ pub variant: azalea_registry::ChickenVariant,
+}
+impl DataComponent for ChickenVariant {
+ const KIND: DataComponentKind = DataComponentKind::ChickenVariant;
+}
diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json
index 2826affe..f79b3c7f 100755
--- a/azalea-language/src/en_us.json
+++ b/azalea-language/src/en_us.json
@@ -89,6 +89,8 @@
"advancements.adventure.two_birds_one_arrow.title": "Two Birds, One Arrow",
"advancements.adventure.under_lock_and_key.description": "Unlock a Vault with a Trial Key",
"advancements.adventure.under_lock_and_key.title": "Under Lock and Key",
+ "advancements.adventure.use_lodestone.description": "Use a Compass on a Lodestone",
+ "advancements.adventure.use_lodestone.title": "Country Lode, Take Me Home",
"advancements.adventure.very_very_frightening.description": "Strike a Villager with lightning",
"advancements.adventure.very_very_frightening.title": "Very Very Frightening",
"advancements.adventure.voluntary_exile.description": "Kill a raid captain.\nMaybe consider staying away from villages for the time being...",
@@ -354,6 +356,7 @@
"argument.message.too_long": "Chat message was too long (%s > maximum %s characters)",
"argument.nbt.array.invalid": "Invalid array type '%s'",
"argument.nbt.array.mixed": "Can't insert %s into %s",
+ "argument.nbt.expected.compound": "Expected compound tag",
"argument.nbt.expected.key": "Expected key",
"argument.nbt.expected.value": "Expected value",
"argument.nbt.list.mixed": "Can't insert %s into list of %s",
@@ -374,6 +377,7 @@
"argument.range.swapped": "Min cannot be bigger than max",
"argument.resource_or_id.failed_to_parse": "Failed to parse structure: %s",
"argument.resource_or_id.invalid": "Invalid id or tag",
+ "argument.resource_selector.not_found": "No matches for selector '%s' of type '%s'",
"argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')",
"argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'",
"argument.resource.invalid_type": "Element '%s' has wrong type '%s' (expected '%s')",
@@ -1387,7 +1391,9 @@
"block.minecraft.bubble_coral_fan": "Bubble Coral Fan",
"block.minecraft.bubble_coral_wall_fan": "Bubble Coral Wall Fan",
"block.minecraft.budding_amethyst": "Budding Amethyst",
+ "block.minecraft.bush": "Bush",
"block.minecraft.cactus": "Cactus",
+ "block.minecraft.cactus_flower": "Cactus Flower",
"block.minecraft.cake": "Cake",
"block.minecraft.calcite": "Calcite",
"block.minecraft.calibrated_sculk_sensor": "Calibrated Sculk Sensor",
@@ -1618,6 +1624,7 @@
"block.minecraft.fire_coral_block": "Fire Coral Block",
"block.minecraft.fire_coral_fan": "Fire Coral Fan",
"block.minecraft.fire_coral_wall_fan": "Fire Coral Wall Fan",
+ "block.minecraft.firefly_bush": "Firefly Bush",
"block.minecraft.fletching_table": "Fletching Table",
"block.minecraft.flower_pot": "Flower Pot",
"block.minecraft.flowering_azalea": "Flowering Azalea",
@@ -1720,6 +1727,7 @@
"block.minecraft.large_fern": "Large Fern",
"block.minecraft.lava": "Lava",
"block.minecraft.lava_cauldron": "Lava Cauldron",
+ "block.minecraft.leaf_litter": "Leaf Litter",
"block.minecraft.lectern": "Lectern",
"block.minecraft.lever": "Lever",
"block.minecraft.light": "Light",
@@ -2097,6 +2105,7 @@
"block.minecraft.sea_pickle": "Sea Pickle",
"block.minecraft.seagrass": "Seagrass",
"block.minecraft.set_spawn": "Respawn point set",
+ "block.minecraft.short_dry_grass": "Short Dry Grass",
"block.minecraft.short_grass": "Short Grass",
"block.minecraft.shroomlight": "Shroomlight",
"block.minecraft.shulker_box": "Shulker Box",
@@ -2193,12 +2202,16 @@
"block.minecraft.suspicious_gravel": "Suspicious Gravel",
"block.minecraft.suspicious_sand": "Suspicious Sand",
"block.minecraft.sweet_berry_bush": "Sweet Berry Bush",
+ "block.minecraft.tall_dry_grass": "Tall Dry Grass",
"block.minecraft.tall_grass": "Tall Grass",
"block.minecraft.tall_seagrass": "Tall Seagrass",
"block.minecraft.target": "Target",
"block.minecraft.terracotta": "Terracotta",
+ "block.minecraft.test_block": "Test Block",
+ "block.minecraft.test_instance_block": "Test Instance Block",
"block.minecraft.tinted_glass": "Tinted Glass",
"block.minecraft.tnt": "TNT",
+ "block.minecraft.tnt.disabled": "TNT explosions are disabled",
"block.minecraft.torch": "Torch",
"block.minecraft.torchflower": "Torchflower",
"block.minecraft.torchflower_crop": "Torchflower Crop",
@@ -2310,6 +2323,7 @@
"block.minecraft.white_terracotta": "White Terracotta",
"block.minecraft.white_tulip": "White Tulip",
"block.minecraft.white_wool": "White Wool",
+ "block.minecraft.wildflowers": "Wildflowers",
"block.minecraft.wither_rose": "Wither Rose",
"block.minecraft.wither_skeleton_skull": "Wither Skeleton Skull",
"block.minecraft.wither_skeleton_wall_skull": "Wither Skeleton Wall Skull",
@@ -2697,11 +2711,11 @@
"commands.random.roll": "%s rolled %s (from %s to %s)",
"commands.random.sample.success": "Randomized value: %s",
"commands.recipe.give.failed": "No new recipes were learned",
- "commands.recipe.give.success.multiple": "Unlocked %s recipes for %s players",
- "commands.recipe.give.success.single": "Unlocked %s recipes for %s",
+ "commands.recipe.give.success.multiple": "Unlocked %s recipe(s) for %s players",
+ "commands.recipe.give.success.single": "Unlocked %s recipe(s) for %s",
"commands.recipe.take.failed": "No recipes could be forgotten",
- "commands.recipe.take.success.multiple": "Took %s recipes from %s players",
- "commands.recipe.take.success.single": "Took %s recipes from %s",
+ "commands.recipe.take.success.multiple": "Took %s recipe(s) from %s players",
+ "commands.recipe.take.success.single": "Took %s recipe(s) from %s",
"commands.reload.failure": "Reload failed; keeping old data",
"commands.reload.success": "Reloading!",
"commands.ride.already_riding": "%s is already riding %s",
@@ -2848,6 +2862,32 @@
"commands.teleport.success.entity.single": "Teleported %s to %s",
"commands.teleport.success.location.multiple": "Teleported %s entities to %s, %s, %s",
"commands.teleport.success.location.single": "Teleported %s to %s, %s, %s",
+ "commands.test.batch.starting": "Starting environment %s batch %s",
+ "commands.test.clear.error.no_tests": "Could not find any tests to clear",
+ "commands.test.clear.success": "Cleared %s structure(s)",
+ "commands.test.coordinates": "%s, %s, %s",
+ "commands.test.coordinates.copy": "Click to copy to clipboard",
+ "commands.test.create.success": "Created test setup for test %s",
+ "commands.test.error.no_test_containing_pos": "Can't find a test instance that contains %s, %s, %s",
+ "commands.test.error.no_test_instances": "Found no test instances",
+ "commands.test.error.non_existant_test": "Test %s could not be found",
+ "commands.test.error.structure_not_found": "Test structure %s could not be found",
+ "commands.test.error.test_instance_not_found": "Test instance block entity could not be found",
+ "commands.test.error.test_instance_not_found.position": "Test instance block entity could not be found for test at %s, %s, %s",
+ "commands.test.error.too_large": "The structure size must be less than %s blocks along each axis",
+ "commands.test.locate.done": "Finished locating, found %s structure(s)",
+ "commands.test.locate.found": "Found structure at: %s (distance: %s)",
+ "commands.test.locate.started": "Started locating test structures, this might take a while...",
+ "commands.test.no_tests": "No tests to run",
+ "commands.test.relative_position": "Position relative to %s: %s",
+ "commands.test.reset.error.no_tests": "Could not find any tests to reset",
+ "commands.test.reset.success": "Reset %s structure(s)",
+ "commands.test.run.no_tests": "No tests found",
+ "commands.test.run.running": "Running %s test(s)...",
+ "commands.test.summary": "Game Test complete! %s test(s) were run",
+ "commands.test.summary.all_required_passed": "All required tests passed :)",
+ "commands.test.summary.failed": "%s required test(s) failed :(",
+ "commands.test.summary.optional_failed": "%s optional test(s) failed",
"commands.tick.query.percentiles": "Percentiles: P50: %sms P95: %sms P99: %sms, sample: %s",
"commands.tick.query.rate.running": "Target tick rate: %s per second.\nAverage time per tick: %sms (Target: %sms)",
"commands.tick.query.rate.sprinting": "Target tick rate: %s per second (ignored, reference only).\nAverage time per tick: %sms",
@@ -2980,7 +3020,7 @@
"controls.resetAll": "Reset Keys",
"controls.title": "Controls",
"createWorld.customize.buffet.biome": "Please select a biome",
- "createWorld.customize.buffet.title": "Buffet world customization",
+ "createWorld.customize.buffet.title": "Single Biome Customization",
"createWorld.customize.flat.height": "Height",
"createWorld.customize.flat.layer": "%s",
"createWorld.customize.flat.layer.bottom": "Bottom - %s",
@@ -2989,7 +3029,7 @@
"createWorld.customize.flat.tile": "Layer Material",
"createWorld.customize.flat.title": "Superflat Customization",
"createWorld.customize.presets": "Presets",
- "createWorld.customize.presets.list": "Alternatively, here's some we made earlier!",
+ "createWorld.customize.presets.list": "Alternatively, here are some we made earlier!",
"createWorld.customize.presets.select": "Use Preset",
"createWorld.customize.presets.share": "Want to share your preset with someone? Use the box below!",
"createWorld.customize.presets.title": "Select a Preset",
@@ -3393,6 +3433,7 @@
"entity.minecraft.killer_bunny": "The Killer Bunny",
"entity.minecraft.leash_knot": "Leash Knot",
"entity.minecraft.lightning_bolt": "Lightning Bolt",
+ "entity.minecraft.lingering_potion": "Lingering Potion",
"entity.minecraft.llama": "Llama",
"entity.minecraft.llama_spit": "Llama Spit",
"entity.minecraft.magma_cube": "Magma Cube",
@@ -3437,6 +3478,7 @@
"entity.minecraft.spawner_minecart": "Minecart with Monster Spawner",
"entity.minecraft.spectral_arrow": "Spectral Arrow",
"entity.minecraft.spider": "Spider",
+ "entity.minecraft.splash_potion": "Splash Potion",
"entity.minecraft.spruce_boat": "Spruce Boat",
"entity.minecraft.spruce_chest_boat": "Spruce Boat with Chest",
"entity.minecraft.squid": "Squid",
@@ -3551,9 +3593,11 @@
"gameMode.adventure": "Adventure Mode",
"gameMode.changed": "Your game mode has been updated to %s",
"gameMode.creative": "Creative Mode",
- "gameMode.hardcore": "Hardcore Mode!",
+ "gameMode.hardcore": "Hardcore Mode",
"gameMode.spectator": "Spectator Mode",
"gameMode.survival": "Survival Mode",
+ "gamerule.allowFireTicksAwayFromPlayer": "Tick fire away from players",
+ "gamerule.allowFireTicksAwayFromPlayer.description": "Controls whether or not fire and lava should be able to tick further than 8 chunks away from any player",
"gamerule.announceAdvancements": "Announce advancements",
"gamerule.blockExplosionDropDecay": "In block interaction explosions, some blocks won't drop their loot",
"gamerule.blockExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by block interactions are lost in the explosion.",
@@ -3637,6 +3681,7 @@
"gamerule.spawnRadius": "Respawn location radius",
"gamerule.spawnRadius.description": "Controls the size of the area around the spawn point that players can spawn in.",
"gamerule.spectatorsGenerateChunks": "Allow spectators to generate terrain",
+ "gamerule.tntExplodes": "Allow TNT to be activated and to explode",
"gamerule.tntExplosionDropDecay": "In TNT explosions, some blocks won't drop their loot",
"gamerule.tntExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by TNT are lost in the explosion.",
"gamerule.universalAnger": "Universal anger",
@@ -3911,6 +3956,7 @@
"item.minecraft.blaze_spawn_egg": "Blaze Spawn Egg",
"item.minecraft.blue_bundle": "Blue Bundle",
"item.minecraft.blue_dye": "Blue Dye",
+ "item.minecraft.blue_egg": "Blue Egg",
"item.minecraft.bogged_spawn_egg": "Bogged Spawn Egg",
"item.minecraft.bolt_armor_trim_smithing_template": "Smithing Template",
"item.minecraft.bolt_armor_trim_smithing_template.new": "Bolt Armor Trim",
@@ -3929,6 +3975,7 @@
"item.minecraft.brick": "Brick",
"item.minecraft.brown_bundle": "Brown Bundle",
"item.minecraft.brown_dye": "Brown Dye",
+ "item.minecraft.brown_egg": "Brown Egg",
"item.minecraft.brush": "Brush",
"item.minecraft.bucket": "Bucket",
"item.minecraft.bundle": "Bundle",
@@ -3983,6 +4030,8 @@
"item.minecraft.creeper_spawn_egg": "Creeper Spawn Egg",
"item.minecraft.crossbow": "Crossbow",
"item.minecraft.crossbow.projectile": "Projectile:",
+ "item.minecraft.crossbow.projectile.multiple": "Projectile: %s x %s",
+ "item.minecraft.crossbow.projectile.single": "Projectile: %s",
"item.minecraft.cyan_bundle": "Cyan Bundle",
"item.minecraft.cyan_dye": "Cyan Dye",
"item.minecraft.danger_pottery_shard": "Danger Pottery Shard",
@@ -4039,6 +4088,8 @@
"item.minecraft.fire_charge": "Fire Charge",
"item.minecraft.firework_rocket": "Firework Rocket",
"item.minecraft.firework_rocket.flight": "Flight Duration:",
+ "item.minecraft.firework_rocket.multiple_stars": "%s x %s",
+ "item.minecraft.firework_rocket.single_star": "%s",
"item.minecraft.firework_star": "Firework Star",
"item.minecraft.firework_star.black": "Black",
"item.minecraft.firework_star.blue": "Blue",
@@ -4575,13 +4626,14 @@
"item.modifiers.any": "When equipped:",
"item.modifiers.armor": "When worn:",
"item.modifiers.body": "When equipped:",
- "item.modifiers.chest": "When on Body:",
+ "item.modifiers.chest": "When on Chest:",
"item.modifiers.feet": "When on Feet:",
"item.modifiers.hand": "When held:",
"item.modifiers.head": "When on Head:",
"item.modifiers.legs": "When on Legs:",
"item.modifiers.mainhand": "When in Main Hand:",
"item.modifiers.offhand": "When in Off Hand:",
+ "item.modifiers.saddle": "When saddled:",
"item.nbt_tags": "NBT: %s tag(s)",
"item.op_block_warning.line1": "Warning:",
"item.op_block_warning.line2": "Use of this item might lead to command execution",
@@ -4817,15 +4869,15 @@
"mco.backup.generate.world": "Generate world",
"mco.backup.info.title": "Changes From Last Backup",
"mco.backup.narration": "Backup from %s",
- "mco.backup.nobackups": "This realm doesn't have any backups currently.",
- "mco.backup.restoring": "Restoring your realm",
+ "mco.backup.nobackups": "This Realm doesn't have any backups currently.",
+ "mco.backup.restoring": "Restoring your Realm",
"mco.backup.unknown": "UNKNOWN",
"mco.brokenworld.download": "Download",
"mco.brokenworld.downloaded": "Downloaded",
"mco.brokenworld.message.line1": "Please reset or select another world.",
"mco.brokenworld.message.line2": "You can also choose to download the world to singleplayer.",
"mco.brokenworld.minigame.title": "This minigame is no longer supported",
- "mco.brokenworld.nonowner.error": "Please wait for the realm owner to reset the world",
+ "mco.brokenworld.nonowner.error": "Please wait for the Realm owner to reset the world",
"mco.brokenworld.nonowner.title": "World is out of date",
"mco.brokenworld.play": "Play",
"mco.brokenworld.reset": "Reset",
@@ -4864,12 +4916,12 @@
"mco.configure.world.buttons.settings": "Settings",
"mco.configure.world.buttons.subscription": "Subscription",
"mco.configure.world.buttons.switchminigame": "Switch Minigame",
- "mco.configure.world.close.question.line1": "Your realm will become unavailable.",
+ "mco.configure.world.close.question.line1": "Your Realm will become unavailable.",
"mco.configure.world.close.question.line2": "Are you sure you want to continue?",
- "mco.configure.world.closing": "Closing the realm...",
+ "mco.configure.world.closing": "Closing the Realm...",
"mco.configure.world.commandBlocks": "Command Blocks",
"mco.configure.world.delete.button": "Delete Realm",
- "mco.configure.world.delete.question.line1": "Your realm will be permanently deleted",
+ "mco.configure.world.delete.question.line1": "Your Realm will be permanently deleted",
"mco.configure.world.delete.question.line2": "Are you sure you want to continue?",
"mco.configure.world.description": "Realm Description",
"mco.configure.world.edit.slot.name": "World Name",
@@ -4884,20 +4936,20 @@
"mco.configure.world.invites.normal.tooltip": "Normal User",
"mco.configure.world.invites.ops.tooltip": "Operator",
"mco.configure.world.invites.remove.tooltip": "Remove",
- "mco.configure.world.leave.question.line1": "If you leave this realm you won't see it unless you are invited again",
+ "mco.configure.world.leave.question.line1": "If you leave this Realm you won't see it unless you are invited again",
"mco.configure.world.leave.question.line2": "Are you sure you want to continue?",
"mco.configure.world.location": "Location",
"mco.configure.world.minigame": "Current: %s",
"mco.configure.world.name": "Realm Name",
- "mco.configure.world.opening": "Opening the realm...",
+ "mco.configure.world.opening": "Opening the Realm...",
"mco.configure.world.players.error": "A player with the provided name does not exist",
"mco.configure.world.players.inviting": "Inviting player...",
"mco.configure.world.players.title": "Players",
"mco.configure.world.pvp": "PVP",
"mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost",
"mco.configure.world.reset.question.line2": "Are you sure you want to continue?",
- "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this realm\n\nDo you want to download it and play?",
- "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm",
+ "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this Realm\n\nDo you want to download it and play?",
+ "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this Realm",
"mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?",
"mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.",
"mco.configure.world.restore.download.question.line2": "Do you want to continue?",
@@ -4906,7 +4958,7 @@
"mco.configure.world.settings.title": "Settings",
"mco.configure.world.slot": "World %s",
"mco.configure.world.slot.empty": "Empty",
- "mco.configure.world.slot.switch.question.line1": "Your realm will be switched to another world",
+ "mco.configure.world.slot.switch.question.line1": "Your Realm will be switched to another world",
"mco.configure.world.slot.switch.question.line2": "Are you sure you want to continue?",
"mco.configure.world.slot.tooltip": "Switch to world",
"mco.configure.world.slot.tooltip.active": "Join",
@@ -4942,20 +4994,20 @@
"mco.configure.world.uninvite.question": "Are you sure that you want to uninvite",
"mco.configure.worlds.title": "Worlds",
"mco.connect.authorizing": "Logging in...",
- "mco.connect.connecting": "Connecting to the realm...",
- "mco.connect.failed": "Failed to connect to the realm",
+ "mco.connect.connecting": "Connecting to the Realm...",
+ "mco.connect.failed": "Failed to connect to the Realm",
"mco.connect.success": "Done",
"mco.create.world": "Create",
"mco.create.world.error": "You must enter a name!",
"mco.create.world.failed": "Failed to create world!",
"mco.create.world.reset.title": "Creating world...",
"mco.create.world.skip": "Skip",
- "mco.create.world.subtitle": "Optionally, select what world to put on your new realm",
- "mco.create.world.wait": "Creating the realm...",
+ "mco.create.world.subtitle": "Optionally, select what world to put on your new Realm",
+ "mco.create.world.wait": "Creating the Realm...",
"mco.download.cancelled": "Download cancelled",
"mco.download.confirmation.line1": "The world you are going to download is larger than %s",
- "mco.download.confirmation.line2": "You won't be able to upload this world to your realm again",
- "mco.download.confirmation.oversized": "The world you are going to download is larger than %s\n\nYou won't be able to upload this world to your realm again",
+ "mco.download.confirmation.line2": "You won't be able to upload this world to your Realm again",
+ "mco.download.confirmation.oversized": "The world you are going to download is larger than %s\n\nYou won't be able to upload this world to your Realm again",
"mco.download.done": "Download done",
"mco.download.downloading": "Downloading",
"mco.download.extracting": "Extracting",
@@ -5001,7 +5053,7 @@
"mco.minigame.world.info.line2": "You can later return to your original world without losing anything.",
"mco.minigame.world.noSelection": "Please make a selection",
"mco.minigame.world.restore": "Ending Minigame...",
- "mco.minigame.world.restore.question.line1": "The minigame will end and your realm will be restored.",
+ "mco.minigame.world.restore.question.line1": "The minigame will end and your Realm will be restored.",
"mco.minigame.world.restore.question.line2": "Are you sure you want to continue?",
"mco.minigame.world.selected": "Selected Minigame:",
"mco.minigame.world.slot.screen.title": "Switching World...",
@@ -5028,16 +5080,16 @@
"mco.reset.world.template": "World Templates",
"mco.reset.world.title": "Reset World",
"mco.reset.world.upload": "Upload world",
- "mco.reset.world.warning": "This will replace the current world of your realm",
+ "mco.reset.world.warning": "This will replace the current world of your Realm",
"mco.selectServer.buy": "Buy a Realm!",
"mco.selectServer.close": "Close",
- "mco.selectServer.closed": "Closed realm",
- "mco.selectServer.closeserver": "Close realm",
+ "mco.selectServer.closed": "Closed Realm",
+ "mco.selectServer.closeserver": "Close Realm",
"mco.selectServer.configure": "Configure",
- "mco.selectServer.configureRealm": "Configure realm",
+ "mco.selectServer.configureRealm": "Configure Realm",
"mco.selectServer.create": "Create Realm",
- "mco.selectServer.create.subtitle": "Select what world to put on your new realm",
- "mco.selectServer.expired": "Expired realm",
+ "mco.selectServer.create.subtitle": "Select what world to put on your new Realm",
+ "mco.selectServer.expired": "Expired Realm",
"mco.selectServer.expiredList": "Your subscription has expired",
"mco.selectServer.expiredRenew": "Renew",
"mco.selectServer.expiredSubscribe": "Subscribe",
@@ -5053,13 +5105,13 @@
"mco.selectServer.minigameNotSupportedInVersion": "Can't play this minigame in %s",
"mco.selectServer.noRealms": "You don't seem to have a Realm. Add a Realm to play together with your friends.",
"mco.selectServer.note": "Note:",
- "mco.selectServer.open": "Open realm",
- "mco.selectServer.openserver": "Open realm",
+ "mco.selectServer.open": "Open Realm",
+ "mco.selectServer.openserver": "Open Realm",
"mco.selectServer.play": "Play",
"mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.",
"mco.selectServer.purchase": "Add Realm",
"mco.selectServer.trial": "Get a Trial!",
- "mco.selectServer.uninitialized": "Click to start your new realm!",
+ "mco.selectServer.uninitialized": "Click to start your new Realm!",
"mco.snapshot.createSnapshotPopup.text": "You are about to create a free Snapshot Realm that will be paired with your paid Realms subscription. This new Snapshot Realm will be accessible for as long as the paid subscription is active. Your paid Realm will not be affected.",
"mco.snapshot.createSnapshotPopup.title": "Create Snapshot Realm?",
"mco.snapshot.creating": "Creating Snapshot Realm...",
@@ -5098,11 +5150,11 @@
"mco.time.minutesAgo": "%1$s minute(s) ago",
"mco.time.now": "right now",
"mco.time.secondsAgo": "%1$s second(s) ago",
- "mco.trial.message.line1": "Want to get your own realm?",
+ "mco.trial.message.line1": "Want to get your own Realm?",
"mco.trial.message.line2": "Click here for more info!",
"mco.upload.button.name": "Upload",
"mco.upload.cancelled": "Upload cancelled",
- "mco.upload.close.failure": "Could not close your realm, please try again later",
+ "mco.upload.close.failure": "Could not close your Realm, please try again later",
"mco.upload.done": "Upload done",
"mco.upload.entry.cheats": "%1$s, %2$s",
"mco.upload.entry.commands": "%1$s, %2$s",
@@ -5162,6 +5214,7 @@
"mount.onboard": "Press %1$s to Dismount",
"multiplayer.applyingPack": "Applying resource pack",
"multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!",
+ "multiplayer.disconnect.bad_chat_index": "Detected missed or reordered chat message from server",
"multiplayer.disconnect.banned": "You are banned from this server",
"multiplayer.disconnect.banned_ip.expiration": "\nYour ban will be removed on %s",
"multiplayer.disconnect.banned_ip.reason": "Your IP address is banned from this server.\nReason: %s",
@@ -5697,7 +5750,7 @@
"realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots",
"recipe.notFound": "Unknown recipe: %s",
"recipe.toast.description": "Check your recipe book",
- "recipe.toast.title": "New Recipes Unlocked!",
+ "recipe.toast.title": "New Recipe(s) Unlocked!",
"record.nowPlaying": "Now Playing: %s",
"recover_world.bug_tracker": "Report a Bug",
"recover_world.button": "Attempt to Recover",
@@ -5868,6 +5921,27 @@
"sleep.skipping_night": "Sleeping through this night",
"slot.only_single_allowed": "Only single slots allowed, got '%s'",
"slot.unknown": "Unknown slot '%s'",
+ "snbt.parser.empty_key": "Key cannot be empty",
+ "snbt.parser.expected_binary_numeral": "Expected a binary number",
+ "snbt.parser.expected_decimal_numeral": "Expected a decimal number",
+ "snbt.parser.expected_float_type": "Expected a floating point number",
+ "snbt.parser.expected_hex_escape": "Expected a character literal of length %s",
+ "snbt.parser.expected_hex_numeral": "Expected a hexadecimal number",
+ "snbt.parser.expected_integer_type": "Expected an integer number",
+ "snbt.parser.expected_non_negative_number": "Expected a non-negative number",
+ "snbt.parser.expected_number_or_boolean": "Expected a number or a boolean",
+ "snbt.parser.expected_string_uuid": "Expected a string representing a valid UUID",
+ "snbt.parser.expected_unquoted_string": "Expected a valid unquoted string",
+ "snbt.parser.infinity_not_allowed": "Non-finite numbers are not allowed",
+ "snbt.parser.invalid_array_element_type": "Invalid array element type",
+ "snbt.parser.invalid_character_name": "Invalid Unicode character name",
+ "snbt.parser.invalid_codepoint": "Invalid Unicode character value: %s",
+ "snbt.parser.invalid_string_contents": "Invalid string contents",
+ "snbt.parser.invalid_unquoted_start": "Unquoted strings can't start with digits 0-9, + or -",
+ "snbt.parser.leading_zero_not_allowed": "Decimal numbers can't start with 0",
+ "snbt.parser.no_such_operation": "No such operation: %s",
+ "snbt.parser.number_parse_failure": "Failed to parse number: %s",
+ "snbt.parser.undescore_not_allowed": "Underscore characters are not allowed at the start or end of a number",
"soundCategory.ambient": "Ambient/Environment",
"soundCategory.block": "Blocks",
"soundCategory.hostile": "Hostile Creatures",
@@ -5992,10 +6066,10 @@
"structure_block.load_not_found": "Structure '%s' is not available",
"structure_block.load_prepare": "Structure '%s' position prepared",
"structure_block.load_success": "Structure loaded from '%s'",
- "structure_block.mode_info.corner": "Corner Mode - Placement and Size Marker",
- "structure_block.mode_info.data": "Data Mode - Game Logic Marker",
- "structure_block.mode_info.load": "Load Mode - Load from File",
- "structure_block.mode_info.save": "Save Mode - Write to File",
+ "structure_block.mode_info.corner": "Corner Mode - Placement and size marker",
+ "structure_block.mode_info.data": "Data Mode - Game logic marker",
+ "structure_block.mode_info.load": "Load Mode - Load from file",
+ "structure_block.mode_info.save": "Save Mode - Write to file",
"structure_block.mode.corner": "Corner",
"structure_block.mode.data": "Data",
"structure_block.mode.load": "Load",
@@ -6014,6 +6088,7 @@
"structure_block.size.x": "structure size x",
"structure_block.size.y": "structure size y",
"structure_block.size.z": "structure size z",
+ "structure_block.strict": "Strict Placement:",
"structure_block.structure_name": "Structure Name",
"subtitles.ambient.cave": "Eerie noise",
"subtitles.ambient.sound": "Eerie noise",
@@ -6071,6 +6146,7 @@
"subtitles.block.creaking_heart.hurt": "Creaking Heart grumbles",
"subtitles.block.creaking_heart.idle": "Eerie noise",
"subtitles.block.creaking_heart.spawn": "Creaking Heart awakens",
+ "subtitles.block.deadbush.idle": "Dry sounds",
"subtitles.block.decorated_pot.insert": "Decorated Pot fills",
"subtitles.block.decorated_pot.insert_fail": "Decorated Pot wobbles",
"subtitles.block.decorated_pot.shatter": "Decorated Pot shatters",
@@ -6086,6 +6162,7 @@
"subtitles.block.fence_gate.toggle": "Fence Gate creaks",
"subtitles.block.fire.ambient": "Fire crackles",
"subtitles.block.fire.extinguish": "Fire extinguished",
+ "subtitles.block.firefly_bush.idle": "Fireflies buzz",
"subtitles.block.frogspawn.hatch": "Tadpole hatches",
"subtitles.block.furnace.fire_crackle": "Furnace crackles",
"subtitles.block.generic.break": "Block broken",
@@ -6120,14 +6197,16 @@
"subtitles.block.respawn_anchor.charge": "Respawn Anchor is charged",
"subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes",
"subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn",
+ "subtitles.block.sand.idle": "Sandy sounds",
+ "subtitles.block.sand.wind": "Windy sounds",
"subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms",
"subtitles.block.sculk_sensor.clicking": "Sculk Sensor clicks",
"subtitles.block.sculk_sensor.clicking_stop": "Sculk Sensor stops clicking",
"subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks",
"subtitles.block.sculk.charge": "Sculk bubbles",
"subtitles.block.sculk.spread": "Sculk spreads",
- "subtitles.block.shulker_box.close": "Shulker closes",
- "subtitles.block.shulker_box.open": "Shulker opens",
+ "subtitles.block.shulker_box.close": "Shulker box closes",
+ "subtitles.block.shulker_box.open": "Shulker box opens",
"subtitles.block.sign.waxed_interact_fail": "Sign wobbles",
"subtitles.block.smithing_table.use": "Smithing Table used",
"subtitles.block.smoker.smoke": "Smoker smokes",
@@ -6754,10 +6833,13 @@
"subtitles.entity.wither.shoot": "Wither attacks",
"subtitles.entity.wither.spawn": "Wither released",
"subtitles.entity.wolf.ambient": "Wolf pants",
+ "subtitles.entity.wolf.bark": "Wolf barks",
"subtitles.entity.wolf.death": "Wolf dies",
"subtitles.entity.wolf.growl": "Wolf growls",
"subtitles.entity.wolf.hurt": "Wolf hurts",
+ "subtitles.entity.wolf.pant": "Wolf pants",
"subtitles.entity.wolf.shake": "Wolf shakes",
+ "subtitles.entity.wolf.whine": "Wolf whines",
"subtitles.entity.zoglin.ambient": "Zoglin growls",
"subtitles.entity.zoglin.angry": "Zoglin growls angrily",
"subtitles.entity.zoglin.attack": "Zoglin attacks",
@@ -6933,6 +7015,85 @@
"telemetry.property.user_id.title": "User ID",
"telemetry.property.world_load_time_ms.title": "World Load Time (Milliseconds)",
"telemetry.property.world_session_id.title": "World Session ID",
+ "test_block.error.missing": "Test structure missing %s block",
+ "test_block.error.too_many": "Too many %s blocks",
+ "test_block.invalid_timeout": "Invalid timeout (%s) - must be a positive number of ticks",
+ "test_block.message": "Message:",
+ "test_block.mode_info.accept": "Accept Mode - Accept success for (part of) a test",
+ "test_block.mode_info.fail": "Fail Mode - Fail the test",
+ "test_block.mode_info.log": "Log Mode - Log a message",
+ "test_block.mode_info.start": "Start Mode - The starting point for a test",
+ "test_block.mode.accept": "Accept",
+ "test_block.mode.fail": "Fail",
+ "test_block.mode.log": "Log",
+ "test_block.mode.start": "Start",
+ "test_instance_block.entities": "Entities:",
+ "test_instance_block.error.no_test": "Unable to run test instance at %s, %s, %s since it has an undefined test",
+ "test_instance_block.error.no_test_structure": "Unable to run test instance at %s, %s, %s since it has no test structure",
+ "test_instance_block.error.unable_to_save": "Unable to save test structure template for test instance at %s, %s, %s",
+ "test_instance_block.invalid": "[invalid]",
+ "test_instance_block.reset_success": "Reset succeeded for test: %s",
+ "test_instance_block.rotation": "Rotation:",
+ "test_instance_block.size": "Test Structure Size",
+ "test_instance_block.starting": "Starting test %s",
+ "test_instance_block.test_id": "Test Instance ID",
+ "test_instance.action.reset": "Reset and Load",
+ "test_instance.action.run": "Load and Run",
+ "test_instance.action.save": "Save Structure",
+ "test_instance.description.batch": "Batch: %s",
+ "test_instance.description.failed": "Failed: %s",
+ "test_instance.description.function": "Function: %s",
+ "test_instance.description.invalid_id": "Invalid test ID",
+ "test_instance.description.no_test": "No such test",
+ "test_instance.description.structure": "Structure: %s",
+ "test_instance.description.type": "Type: %s",
+ "test_instance.type.block_based": "Block-Based Test",
+ "test_instance.type.function": "Built-in Function Test",
+ "test.error.block_property_mismatch": "Expected property %s to be %s, was %s",
+ "test.error.block_property_missing": "Block property missing, expected property %s to be %s",
+ "test.error.entity_property": "Entity %s failed test: %s",
+ "test.error.entity_property_details": "Entity %s failed test: %s, expected: %s, was: %s",
+ "test.error.expected_block": "Expected block %s, got %s",
+ "test.error.expected_block_tag": "Expected block in #%s, got %s",
+ "test.error.expected_container_contents": "Container should contain: %s",
+ "test.error.expected_container_contents_single": "Container should contain a single: %s",
+ "test.error.expected_empty_container": "Container should be empty",
+ "test.error.expected_entity": "Expected %s",
+ "test.error.expected_entity_around": "Expected %s to exist around %s, %s, %s",
+ "test.error.expected_entity_count": "Expected %s entities of type %s, found %s",
+ "test.error.expected_entity_data": "Expected entity data to be: %s, was: %s",
+ "test.error.expected_entity_data_predicate": "Entity data mismatch for %s",
+ "test.error.expected_entity_effect": "Expected %s to have effect %s %s",
+ "test.error.expected_entity_having": "Entity inventory should contain %s",
+ "test.error.expected_entity_holding": "Entity should be holding %s",
+ "test.error.expected_entity_in_test": "Expected %s to exist in test",
+ "test.error.expected_entity_not_touching": "Did not expect %s touching %s, %s, %s (relative: %s, %s, %s)",
+ "test.error.expected_entity_touching": "Expected %s touching %s, %s, %s (relative: %s, %s, %s)",
+ "test.error.expected_item": "Expected item of type %s",
+ "test.error.expected_items_count": "Expected %s items of type %s, found %s",
+ "test.error.fail": "Fail conditions met",
+ "test.error.invalid_block_type": "Unexpected block type found: %s",
+ "test.error.missing_block_entity": "Missing block entity",
+ "test.error.position": "%s at %s, %s, %s (relative: %s, %s, %s) on tick %s",
+ "test.error.sequence.condition_already_triggered": "Condition already triggered at %s",
+ "test.error.sequence.condition_not_triggered": "Condition not triggered",
+ "test.error.sequence.invalid_tick": "Succeeded in invalid tick: expected %s",
+ "test.error.sequence.not_completed": "Test timed out before sequence completed",
+ "test.error.set_biome": "Failed to set biome for test",
+ "test.error.spawn_failure": "Failed to create entity %s",
+ "test.error.state_not_equal": "Incorrect state. Expected %s, was %s",
+ "test.error.structure.failure": "Failed to place test structure for %s",
+ "test.error.tick": "%s on tick %s",
+ "test.error.ticking_without_structure": "Ticking test before placing structure",
+ "test.error.timeout.no_result": "Didn't succeed or fail within %s ticks",
+ "test.error.timeout.no_sequences_finished": "No sequences finished within %s ticks",
+ "test.error.too_many_entities": "Expected only one %s to exist around %s, %s, %s but found %s",
+ "test.error.unexpected_block": "Did not expect block to be %s",
+ "test.error.unexpected_entity": "Did not expect %s to exist",
+ "test.error.unexpected_item": "Did not expect item of type %s",
+ "test.error.unknown": "Unknown internal error: %s",
+ "test.error.value_not_equal": "Expected %s to be %s, was %s",
+ "test.error.wrong_block_entity": "Wrong block entity type: %s",
"title.32bit.deprecation": "32-bit system detected: this may prevent you from playing in the future as a 64-bit system will be required!",
"title.32bit.deprecation.realms": "Minecraft will soon require a 64-bit system, which will prevent you from playing or using Realms on this device. You will need to manually cancel any Realms subscription.",
"title.32bit.deprecation.realms.check": "Do not show this screen again",
diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs
index 753be0cb..048ee067 100644
--- a/azalea-physics/src/collision/blocks.rs
+++ b/azalea-physics/src/collision/blocks.rs
@@ -4918,15 +4918,15 @@ impl BlockWithShape for BlockState {
}
fn is_collision_shape_empty(&self) -> bool {
- matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2053|2106..=2133|2398..=2915|3033..=4328|4333..=4340|4357..=4580|4613..=4676|4749..=4768|4849..=4904|4913..=5376|5441..=5696|5793..=5818|5883..=5896|5899..=5902|5907..=5941|5968..=5983|6027..=6031|6033..=6034|7046..=7229|7358..=7359|7362..=7363|7366..=7367|7370..=7371|7374..=7375|7378..=7379|7382..=7383|7386..=7387|8159..=8162|8180|8295..=8438|8699|8702|9023|9026|9370..=9553|9578..=9625|9942..=9973|10119..=10142|11246..=11277|11626..=11957|12195..=12196|12199..=12200|12203..=12204|12207..=12208|12211..=12212|12215..=12216|12219..=12220|12223..=12224|12227..=12228|12231..=12232|12235..=12236|12239..=12240|12243..=12244|12247..=12248|12251..=12252|12255..=12256|12259..=12260|12263..=12264|12267..=12268|12271..=12272|12275..=12276|12279..=12280|12283..=12284|12287..=12288|12291..=12292|12295..=12296|12299..=12300|12303..=12304|12307..=12308|12311..=12312|12315..=12316|12319..=12320|12323..=12324|12327..=12328|12331..=12332|12335..=12336|12339..=12340|12343..=12344|12347..=12348|12351..=12352|12355..=12356|12359..=12360|12363..=12364|12367..=12368|12371..=12372|12375..=12376|12379..=12380|12383..=12384|12419..=12420|12423..=12424|12427..=12428|12431..=12432|12435..=12436|12439..=12440|12443..=12444|12447..=12448|12451..=12452|12455..=12456|12459..=12460|12463..=12464|12467..=12468|12471..=12472|12475..=12476|12479..=12480|13508..=13509|13512|13514|13516|13518|13520..=13525|13527|13562|13773..=13799|13826..=13945|13957|13971..=13974|15179|15182|15503|15506|15827|15830|16151|16154|16475|16478|16799|16802|17123|17126|17447|17450|17771|17774|18095|18098|18419|18422|18743|18746|19067|19070|19588..=19591|19605|19607..=19608|19622|19624..=19678|19693..=19696|19889..=19890|19893..=19894|19897..=19898|19901..=19902|19905..=19906|19909..=19910|19913..=19914|19917..=19918|19921..=19922|19925..=19926|19929..=19930|19933..=19934|19937..=19938|19941..=19942|19945..=19946|19949..=19950|20113..=20160|20289..=20368|20560|20563|20980|20983|21385..=21410|21417|21420|22187|22190|22598|22601|23010|23013|23331|23813..=23940|25782..=25836|25840..=25855|25863..=25864|25871..=25872|25879..=25880|25887..=25914|26013|26016|26424|26427|26835|26838|27246|27249|27585)
+ matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2050|2054..=2056|2109..=2136|2401..=2918|3042..=4337|4342..=4349|4366..=4589|4622..=4685|4758..=4777|4858..=4913|4922..=5385|5450..=5705|5802..=5827|5892..=5905|5908..=5911|5916..=5950|5978..=5993|6037..=6041|6043..=6044|7056..=7239|7368..=7369|7372..=7373|7376..=7377|7380..=7381|7384..=7385|7388..=7389|7392..=7393|7396..=7397|8169..=8172|8190|8305..=8448|8709|8712|9033|9036|9380..=9563|9588..=9635|9952..=9983|10129..=10152|11256..=11287|11636..=11967|12205..=12206|12209..=12210|12213..=12214|12217..=12218|12221..=12222|12225..=12226|12229..=12230|12233..=12234|12237..=12238|12241..=12242|12245..=12246|12249..=12250|12253..=12254|12257..=12258|12261..=12262|12265..=12266|12269..=12270|12273..=12274|12277..=12278|12281..=12282|12285..=12286|12289..=12290|12293..=12294|12297..=12298|12301..=12302|12305..=12306|12309..=12310|12313..=12314|12317..=12318|12321..=12322|12325..=12326|12329..=12330|12333..=12334|12337..=12338|12341..=12342|12345..=12346|12349..=12350|12353..=12354|12357..=12358|12361..=12362|12365..=12366|12369..=12370|12373..=12374|12377..=12378|12381..=12382|12385..=12386|12389..=12390|12393..=12394|12429..=12430|12433..=12434|12437..=12438|12441..=12442|12445..=12446|12449..=12450|12453..=12454|12457..=12458|12461..=12462|12465..=12466|12469..=12470|12473..=12474|12477..=12478|12481..=12482|12485..=12486|12489..=12490|13518..=13519|13522|13524|13526|13528|13530..=13535|13537|13572|13783..=13809|13836..=13955|13967|13981..=13984|15189|15192|15513|15516|15837|15840|16161|16164|16485|16488|16809|16812|17133|17136|17457|17460|17781|17784|18105|18108|18429|18432|18753|18756|19077|19080|19598..=19601|19615|19617..=19618|19632|19634..=19688|19703..=19706|19899..=19900|19903..=19904|19907..=19908|19911..=19912|19915..=19916|19919..=19920|19923..=19924|19927..=19928|19931..=19932|19935..=19936|19939..=19940|19943..=19944|19947..=19948|19951..=19952|19955..=19956|19959..=19960|20123..=20170|20299..=20378|20575|20578|20995|20998|21400..=21425|21432|21435|22202|22205|22613|22616|23025|23028|23346|23828..=23955|25797..=25851|25855..=25870|25910..=25911|25918..=25919|25926..=25927|25934..=25961|26060|26063|26471|26474|26882|26885|27293|27296|27632)
}
fn is_collision_shape_full(&self) -> bool {
- matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2060..=2065|2090..=2105|2134..=2397|2916|4329..=4332|4349..=4356|5903..=5906|5949..=5950|5967|5984..=5985|6018|6020..=6026|6032|6035..=6042|6114..=6129|6770..=6973|7044..=7045|7630..=7631|8046|8189|8191..=8192|8285..=8286|8439|8680..=8692|10022..=10023|10034..=10038|10143..=10170|11243..=11245|11342..=11344|11589..=11590|11595..=11596|11601..=11606|11623..=11625|11958..=11960|12045..=12046|12051..=12052|12057..=12058|12063..=12064|12069..=12070|12075..=12076|12081..=12082|12093..=12094|12099..=12100|12105..=12106|12111..=12112|12117..=12118|12123..=12124|12129..=12130|12135..=12136|12141..=12142|12147..=12148|12153..=12154|12159..=12160|12165..=12166|12171..=12172|12177..=12178|12183..=12184|12189..=12194|13417..=13426|13507|13528..=13561|13563..=13772|13800|13816..=13825|13954|15099..=15100|15105..=15106|15111..=15112|15117..=15118|15123..=15124|15129..=15130|15135..=15136|15141..=15142|15147..=15148|15153..=15154|15159..=15160|15165..=15166|15171..=15172|19417..=19450|19479|19592..=19604|19606|19609..=19621|19623|19679..=19680|19685..=19686|19691..=19692|20369..=20384|20394..=20457|20459..=20467|20472..=20473|20882..=20887|20892..=20893|21298|21383..=21384|21735..=21737|22044..=22045|22094|22099..=22100|22505|22510..=22511|22916..=22917|22922..=22923|23328..=23330|23812|23941..=23942|23951..=23968|24293..=24294|24299..=24300|24305..=24306|24311..=24320|24645..=24646|24651..=24652|24657..=24658|24663..=24664|25689..=25736|25781|25856|25915|25917..=25920|26005..=26006|26331|26416..=26417|26742|26827..=26828|27153|27238..=27239|27564..=27573|27576..=27584|27586|27603..=27656)
+ matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2063..=2068|2093..=2108|2137..=2400|2919|4338..=4341|4358..=4365|5912..=5915|5958..=5959|5977|5994..=5995|6028|6030..=6036|6042|6045..=6052|6124..=6139|6780..=6983|7054..=7055|7640..=7641|8056|8199|8201..=8202|8295..=8296|8449|8690..=8702|10032..=10033|10044..=10048|10153..=10180|11253..=11255|11352..=11354|11599..=11600|11605..=11606|11611..=11616|11633..=11635|11968..=11970|12055..=12056|12061..=12062|12067..=12068|12073..=12074|12079..=12080|12085..=12086|12091..=12092|12103..=12104|12109..=12110|12115..=12116|12121..=12122|12127..=12128|12133..=12134|12139..=12140|12145..=12146|12151..=12152|12157..=12158|12163..=12164|12169..=12170|12175..=12176|12181..=12182|12187..=12188|12193..=12194|12199..=12204|13427..=13436|13517|13538..=13571|13573..=13782|13810|13826..=13835|13964|15109..=15110|15115..=15116|15121..=15122|15127..=15128|15133..=15134|15139..=15140|15145..=15146|15151..=15152|15157..=15158|15163..=15164|15169..=15170|15175..=15176|15181..=15182|19427..=19460|19489|19602..=19614|19616|19619..=19631|19633|19689..=19690|19695..=19696|19701..=19702|20379..=20394|20409..=20472|20474..=20482|20487..=20488|20897..=20902|20907..=20908|21313|21398..=21399|21750..=21752|22059..=22060|22109|22114..=22115|22520|22525..=22526|22931..=22932|22937..=22938|23343..=23345|23827|23956..=23957|23966..=23983|24308..=24309|24314..=24315|24320..=24321|24326..=24335|24660..=24661|24666..=24667|24672..=24673|24678..=24679|25704..=25751|25796|25903|25962|25964..=25967|26052..=26053|26378|26463..=26464|26789|26874..=26875|27200|27285..=27286|27611..=27620|27623..=27631|27633|27650..=27703)
}
}
-static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
+static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27704] = [
&SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0,
@@ -5133,15 +5133,15 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17,
&SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18,
- &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24,
- &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28,
- &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33,
- &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE14, &SHAPE15,
+ &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE23, &SHAPE23, &SHAPE24, &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27,
+ &SHAPE27, &SHAPE28, &SHAPE28, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31,
+ &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
@@ -5168,7 +5168,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -5219,20 +5219,21 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77,
- &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81,
- &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86,
- &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90,
- &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86,
- &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95,
- &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96,
- &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87,
- &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92,
- &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98,
- &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102,
- &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE0, &SHAPE0,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100,
+ &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102,
+ &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -5362,10 +5363,10 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE188, &SHAPE188, &SHAPE188,
- &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188,
+ &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -5387,44 +5388,43 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
- &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
- &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
- &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90,
- &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94,
- &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95,
- &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82,
- &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87,
- &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83,
- &SHAPE92, &SHAPE92, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77,
+ &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81,
+ &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86,
+ &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90,
+ &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86,
+ &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95,
+ &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96,
+ &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87,
+ &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92,
+ &SHAPE92, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -5470,13 +5470,14 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -5501,39 +5502,39 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201,
+ &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE201, &SHAPE201, &SHAPE201,
+ &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201,
+ &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201,
+ &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201, &SHAPE201,
+ &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE201, &SHAPE201,
- &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201,
- &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201,
- &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE201, &SHAPE201,
- &SHAPE201, &SHAPE201, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE203, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192,
- &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192,
- &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
- &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
- &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
- &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
- &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
- &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
- &SHAPE190, &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
+ &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
+ &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
+ &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
+ &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
+ &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
+ &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
+ &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
+ &SHAPE190, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1,
- &SHAPE1, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231,
+ &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE1,
+ &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231,
&SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231, &SHAPE231,
- &SHAPE231, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1,
&SHAPE234, &SHAPE236, &SHAPE234, &SHAPE236, &SHAPE238, &SHAPE240, &SHAPE238, &SHAPE240,
&SHAPE242, &SHAPE244, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE246, &SHAPE248,
@@ -7209,51 +7210,38 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692,
- &SHAPE692, &SHAPE692, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE692, &SHAPE692,
+ &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE231, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36,
- &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77,
- &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81,
- &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86,
- &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90,
- &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86,
- &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95,
- &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96,
- &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87,
- &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92,
- &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
- &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE231, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74,
+ &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
+ &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
+ &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
+ &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92,
+ &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88,
+ &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80,
+ &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85,
+ &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81,
+ &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363,
+ &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366,
&SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
+ &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
+ &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
&SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
&SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
&SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
&SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
+ &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
+ &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
&SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
&SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
&SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
@@ -7267,17 +7255,83 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
&SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
- &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
- &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
- &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
- &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
- &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
- &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
- &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
- &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
+ &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
+ &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
+ &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362,
+ &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369,
+ &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376,
+ &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371,
+ &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385,
+ &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392,
+ &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397,
+ &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395,
+ &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402,
+ &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387,
+ &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395,
+ &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402,
+ &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397,
+ &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429,
+ &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436,
+ &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441,
+ &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439,
+ &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446,
+ &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457,
+ &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455,
+ &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462,
+ &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431,
+ &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439,
+ &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446,
+ &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441,
+ &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455,
+ &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462,
+ &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457,
+ &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465,
+ &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74,
+ &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
+ &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
+ &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
+ &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
+ &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
+ &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
+ &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
+ &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
+ &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572,
+ &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
&SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
&SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
@@ -7318,141 +7372,75 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
&SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
- &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
- &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
- &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
- &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
- &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
- &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
- &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
- &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE362, &SHAPE363, &SHAPE363,
- &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299,
+ &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701,
+ &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703,
&SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
&SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
&SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
- &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705,
- &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709,
- &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713,
- &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717,
- &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721,
- &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725,
- &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
- &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
- &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
- &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
- &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90,
- &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94,
- &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95,
- &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82,
- &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87,
- &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83,
- &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
- &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707,
+ &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711,
+ &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715,
+ &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719,
+ &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723,
+ &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727,
+ &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74,
+ &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
+ &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
+ &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
+ &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
+ &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
+ &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
+ &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
+ &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
+ &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363,
+ &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366,
+ &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371,
&SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
- &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387,
&SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
&SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
&SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
&SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
- &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
- &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
- &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
- &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
&SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
&SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
&SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
@@ -7465,30 +7453,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
&SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
- &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
- &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
- &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
- &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90,
- &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94,
- &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95,
- &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82,
- &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87,
- &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83,
- &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
- &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
- &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
- &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
- &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
- &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431,
&SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
&SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
&SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
@@ -7502,7 +7467,30 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
&SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE472, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74,
+ &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
+ &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
+ &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
+ &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
+ &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
+ &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
+ &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
+ &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
+ &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363,
+ &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366,
+ &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
+ &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
+ &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
&SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
&SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
&SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
@@ -7515,30 +7503,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
&SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572,
- &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76,
- &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80,
- &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85,
- &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89,
- &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94,
- &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77,
- &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82,
- &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78,
- &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83,
- &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363,
- &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
- &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
- &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
- &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
- &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431,
&SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
&SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
&SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
@@ -7552,20 +7517,57 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
&SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
&SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
- &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
- &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
- &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
- &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0,
+ &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1,
+ &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78,
+ &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82,
+ &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87,
+ &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91,
+ &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75,
+ &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91,
+ &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76,
+ &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97,
+ &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE362,
+ &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE0,
+ &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE369, &SHAPE371,
+ &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397,
+ &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE385, &SHAPE387,
+ &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397,
+ &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441,
+ &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457,
+ &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE429, &SHAPE431,
+ &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434,
+ &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441,
+ &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457,
+ &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467,
+ &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
@@ -7619,8 +7621,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
- &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
@@ -7632,27 +7633,10 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
&SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
- &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1,
+ &SHAPE1, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78,
- &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82,
- &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87,
- &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91,
- &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75,
- &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91,
- &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76,
- &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97,
- &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74,
- &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
- &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
- &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
- &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
- &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
- &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
- &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
- &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
- &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74,
&SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
&SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
&SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
@@ -7670,28 +7654,28 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
&SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
&SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
- &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
- &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572,
- &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78,
- &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82,
- &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87,
- &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91,
- &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75,
- &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91,
- &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76,
- &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97,
- &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74,
- &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
- &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
- &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
- &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
- &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
- &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
- &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
- &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
- &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
+ &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
+ &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
+ &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
+ &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
+ &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
+ &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
+ &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
+ &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
+ &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76,
+ &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80,
+ &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85,
+ &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89,
+ &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94,
+ &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77,
+ &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82,
+ &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78,
+ &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83,
+ &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
+ &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74,
&SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
&SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
&SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
@@ -7709,312 +7693,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
&SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
&SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
- &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
- &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572,
- &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
- &SHAPE1, &SHAPE1, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191,
- &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193,
- &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190,
- &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273,
- &SHAPE273, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274,
- &SHAPE274, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE578,
- &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578,
- &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE265,
- &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE660,
- &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE728, &SHAPE728, &SHAPE729, &SHAPE729, &SHAPE189,
- &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE233,
- &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE731,
- &SHAPE731, &SHAPE73, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE740,
- &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740,
- &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740,
- &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740,
- &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE1, &SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
- &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
- &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
- &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
- &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
- &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
- &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
- &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
- &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
- &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
- &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
- &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
- &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
- &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
- &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
- &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
- &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
- &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
- &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
- &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
- &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
- &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
- &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
- &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
- &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
- &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
- &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
- &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
&SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
&SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
&SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
@@ -8023,60 +7702,386 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
&SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
&SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
- &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0, &SHAPE366,
- &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369,
- &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376,
- &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376,
- &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385,
- &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392,
- &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395,
- &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402,
- &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402,
- &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429,
- &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436,
- &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439,
- &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446,
- &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446,
- &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455,
- &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462,
- &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465,
- &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472,
- &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472,
- &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE1, &SHAPE232, &SHAPE232,
+ &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76,
+ &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80,
+ &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85,
+ &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89,
+ &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94,
+ &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77,
+ &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82,
+ &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78,
+ &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83,
+ &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
+ &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE193, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE192, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE273, &SHAPE273, &SHAPE273, &SHAPE273,
+ &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE190, &SHAPE274, &SHAPE274, &SHAPE274, &SHAPE274,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE578, &SHAPE578,
+ &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578, &SHAPE578,
+ &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE265, &SHAPE265,
+ &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE265, &SHAPE660, &SHAPE660,
+ &SHAPE660, &SHAPE660, &SHAPE728, &SHAPE728, &SHAPE729, &SHAPE729, &SHAPE189, &SHAPE189,
+ &SHAPE189, &SHAPE189, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE233, &SHAPE233,
+ &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE731, &SHAPE731,
+ &SHAPE73, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740,
+ &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740,
+ &SHAPE740, &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE740, &SHAPE740, &SHAPE740,
+ &SHAPE740, &SHAPE742, &SHAPE742, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE1, &SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
+ &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
+ &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
+ &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
+ &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
+ &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
+ &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
+ &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
+ &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
+ &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
+ &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
+ &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
+ &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE362, &SHAPE363, &SHAPE363, &SHAPE0,
+ &SHAPE366, &SHAPE366, &SHAPE0, &SHAPE366, &SHAPE366, &SHAPE369, &SHAPE371, &SHAPE371,
+ &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376,
+ &SHAPE376, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE369, &SHAPE371, &SHAPE371, &SHAPE374,
+ &SHAPE376, &SHAPE376, &SHAPE374, &SHAPE376, &SHAPE376, &SHAPE385, &SHAPE387, &SHAPE387,
+ &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392,
+ &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE385, &SHAPE387, &SHAPE387, &SHAPE390,
+ &SHAPE392, &SHAPE392, &SHAPE390, &SHAPE392, &SHAPE392, &SHAPE395, &SHAPE397, &SHAPE397,
+ &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402,
+ &SHAPE402, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE395, &SHAPE397, &SHAPE397, &SHAPE400,
+ &SHAPE402, &SHAPE402, &SHAPE400, &SHAPE402, &SHAPE402, &SHAPE429, &SHAPE431, &SHAPE431,
+ &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436,
+ &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE429, &SHAPE431, &SHAPE431, &SHAPE434,
+ &SHAPE436, &SHAPE436, &SHAPE434, &SHAPE436, &SHAPE436, &SHAPE439, &SHAPE441, &SHAPE441,
+ &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446,
+ &SHAPE446, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE439, &SHAPE441, &SHAPE441, &SHAPE444,
+ &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE455, &SHAPE457, &SHAPE457,
+ &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462,
+ &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE455, &SHAPE457, &SHAPE457, &SHAPE460,
+ &SHAPE462, &SHAPE462, &SHAPE460, &SHAPE462, &SHAPE462, &SHAPE465, &SHAPE467, &SHAPE467,
+ &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472,
+ &SHAPE472, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE465, &SHAPE467, &SHAPE467, &SHAPE470,
+ &SHAPE472, &SHAPE472, &SHAPE470, &SHAPE472, &SHAPE472, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE1, &SHAPE232,
&SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
- &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1,
+ &SHAPE1, &SHAPE1,
];
-static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
+static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27704] = [
&SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE2,
@@ -8283,16 +8288,17 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12,
&SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13,
&SHAPE13, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE20, &SHAPE20, &SHAPE21, &SHAPE2, &SHAPE22,
- &SHAPE22, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18, &SHAPE19, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24, &SHAPE24, &SHAPE25, &SHAPE25,
- &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28, &SHAPE29, &SHAPE29, &SHAPE30,
- &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE20, &SHAPE20, &SHAPE21, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE2, &SHAPE22, &SHAPE22, &SHAPE14, &SHAPE15, &SHAPE16, &SHAPE17, &SHAPE18,
+ &SHAPE19, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE24,
+ &SHAPE24, &SHAPE25, &SHAPE25, &SHAPE26, &SHAPE26, &SHAPE27, &SHAPE27, &SHAPE28, &SHAPE28,
+ &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33,
+ &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0,
+ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
+ &SHAPE0, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35,
+ &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0,
- &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE35, &SHAPE35,
- &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE35,
- &SHAPE35, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
@@ -8318,8 +8324,11 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37,
- &SHAPE38, &SHAPE39, &SHAPE40, &SHAPE41, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE38, &SHAPE39, &SHAPE40, &SHAPE41, &SHAPE42,
+ &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51,
+ &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60,
+ &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69,
+ &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46,
&SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55,
&SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64,
&SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73,
@@ -8372,25 +8381,21 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48,
&SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57,
&SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66,
- &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE42, &SHAPE43,
- &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52,
- &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61,
- &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70,
- &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE73, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
- &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
- &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
- &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
- &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
- &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
- &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
- &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
- &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
- &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99,
- &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99, &SHAPE98,
- &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102, &SHAPE102,
- &SHAPE101, &SHAPE101, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108,
- &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107,
+ &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE73, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74,
+ &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
+ &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
+ &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
+ &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92,
+ &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88,
+ &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80,
+ &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85,
+ &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81,
+ &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE98, &SHAPE98, &SHAPE99,
+ &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE98, &SHAPE98, &SHAPE100, &SHAPE100, &SHAPE99, &SHAPE99,
+ &SHAPE98, &SHAPE98, &SHAPE101, &SHAPE101, &SHAPE102, &SHAPE102, &SHAPE98, &SHAPE98, &SHAPE102,
+ &SHAPE102, &SHAPE101, &SHAPE101, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107,
&SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106,
&SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105,
&SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104,
@@ -8407,8 +8412,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111,
&SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE110,
&SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109,
- &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117,
- &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116,
+ &SHAPE110, &SHAPE111, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE108,
+ &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116,
&SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115,
&SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114,
&SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113,
@@ -8425,8 +8430,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120,
&SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118, &SHAPE119,
&SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE118,
- &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126,
- &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125,
+ &SHAPE119, &SHAPE120, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117,
+ &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125,
&SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124,
&SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123,
&SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122,
@@ -8443,8 +8448,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129,
&SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128,
&SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127,
- &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135,
- &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134,
+ &SHAPE128, &SHAPE129, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126,
+ &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134,
&SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133,
&SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132,
&SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131,
@@ -8461,8 +8466,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138,
&SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136, &SHAPE137,
&SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE136,
- &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144,
- &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143,
+ &SHAPE137, &SHAPE138, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135,
+ &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143,
&SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142,
&SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141,
&SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140,
@@ -8479,8 +8484,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147,
&SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145, &SHAPE146,
&SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE145,
- &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153,
- &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152,
+ &SHAPE146, &SHAPE147, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144,
+ &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152,
&SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151,
&SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150,
&SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149,
@@ -8497,8 +8502,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156,
&SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE155,
&SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE154,
- &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162,
- &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161,
+ &SHAPE155, &SHAPE156, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153,
+ &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161,
&SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160,
&SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159,
&SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158,
@@ -8515,8 +8520,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165,
&SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163, &SHAPE164,
&SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE163,
- &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171,
- &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170,
+ &SHAPE164, &SHAPE165, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162,
+ &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170,
&SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169,
&SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168,
&SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167,
@@ -8533,8 +8538,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174,
&SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172, &SHAPE173,
&SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE172,
- &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180,
- &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179,
+ &SHAPE173, &SHAPE174, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171,
+ &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179,
&SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178,
&SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177,
&SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176,
@@ -8551,10 +8556,11 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183,
&SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181, &SHAPE182,
&SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE181,
- &SHAPE182, &SHAPE183, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE184, &SHAPE185,
- &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188,
- &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
+ &SHAPE182, &SHAPE183, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180,
+ &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE184,
+ &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18, &SHAPE187, &SHAPE1, &SHAPE188, &SHAPE188, &SHAPE188,
+ &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE188, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
@@ -8582,10 +8588,10 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
- &SHAPE189, &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
@@ -8593,146 +8599,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
&SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189,
- &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE192,
- &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190,
- &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193,
- &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE191,
- &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193, &SHAPE192,
- &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13,
- &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12,
- &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75,
- &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80,
- &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84,
- &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89,
- &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93,
- &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77,
- &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93,
- &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78,
- &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90,
- &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196,
- &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197,
- &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197,
- &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199,
- &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202,
- &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204,
- &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204,
- &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204,
- &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204, &SHAPE204,
- &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206,
- &SHAPE206, &SHAPE206, &SHAPE207, &SHAPE207, &SHAPE208, &SHAPE208, &SHAPE209, &SHAPE209,
- &SHAPE210, &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212, &SHAPE212,
- &SHAPE212, &SHAPE212, &SHAPE213, &SHAPE214, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
+ &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE189, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
&SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191,
&SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
&SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193,
@@ -8740,17 +8607,156 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192,
&SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
&SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190, &SHAPE190,
- &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214,
- &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214,
- &SHAPE213, &SHAPE214, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39,
+ &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE193, &SHAPE193,
+ &SHAPE192, &SHAPE192, &SHAPE190, &SHAPE190, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13,
+ &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12,
+ &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195,
+ &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196,
+ &SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196,
+ &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE200, &SHAPE200, &SHAPE199,
+ &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202,
+ &SHAPE202, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204,
+ &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204,
+ &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204,
+ &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE202, &SHAPE204,
+ &SHAPE204, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE206,
+ &SHAPE206, &SHAPE206, &SHAPE206, &SHAPE207, &SHAPE207, &SHAPE208, &SHAPE208, &SHAPE209,
+ &SHAPE209, &SHAPE210, &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212,
+ &SHAPE212, &SHAPE212, &SHAPE212, &SHAPE213, &SHAPE214, &SHAPE190, &SHAPE190, &SHAPE191,
+ &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE191,
+ &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192, &SHAPE192, &SHAPE193,
+ &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193,
+ &SHAPE193, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE191, &SHAPE191, &SHAPE192,
+ &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE191, &SHAPE191, &SHAPE192,
+ &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE192, &SHAPE192, &SHAPE193, &SHAPE193, &SHAPE190,
+ &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE193, &SHAPE193, &SHAPE190,
+ &SHAPE190, &SHAPE191, &SHAPE191, &SHAPE190, &SHAPE190, &SHAPE213, &SHAPE214, &SHAPE213,
+ &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE213,
+ &SHAPE214, &SHAPE213, &SHAPE214, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE213, &SHAPE214,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39,
&SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE215, &SHAPE216, &SHAPE215, &SHAPE216, &SHAPE217,
&SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE223,
&SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227, &SHAPE228, &SHAPE229,
&SHAPE230, &SHAPE229, &SHAPE230, &SHAPE12, &SHAPE184, &SHAPE185, &SHAPE13, &SHAPE186, &SHAPE18,
&SHAPE187, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
&SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
- &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233,
+ &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233,
&SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233,
&SHAPE233, &SHAPE233, &SHAPE233, &SHAPE233, &SHAPE1, &SHAPE1, &SHAPE235, &SHAPE237, &SHAPE235,
&SHAPE237, &SHAPE239, &SHAPE241, &SHAPE239, &SHAPE241, &SHAPE243, &SHAPE245, &SHAPE243,
@@ -10460,215 +10466,17 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE189, &SHAPE189, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196,
&SHAPE197, &SHAPE197, &SHAPE194, &SHAPE194, &SHAPE195, &SHAPE195, &SHAPE196, &SHAPE196,
&SHAPE197, &SHAPE197, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE693,
- &SHAPE694, &SHAPE695, &SHAPE696, &SHAPE697, &SHAPE698, &SHAPE699, &SHAPE699, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE692, &SHAPE693, &SHAPE694, &SHAPE695, &SHAPE696, &SHAPE697,
+ &SHAPE698, &SHAPE699, &SHAPE699, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74,
- &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
- &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
- &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
- &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92,
- &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88,
- &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80,
- &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85,
- &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81,
- &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365,
- &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
- &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
- &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
- &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
- &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
- &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
- &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
- &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
- &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
- &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
- &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
- &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
- &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
- &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
- &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
- &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
- &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
- &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
- &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
- &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
- &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
- &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
- &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
- &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
- &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
- &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
- &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
- &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
- &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
- &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
- &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
- &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
- &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
- &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
- &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
- &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
- &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
- &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
- &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
- &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
- &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
- &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
- &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
- &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
- &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
- &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
- &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
- &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
- &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
- &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189,
- &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370,
- &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378,
- &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380,
- &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386,
- &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394,
- &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398,
- &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405,
- &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410,
- &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412,
- &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417,
- &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422,
- &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424,
- &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430,
- &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438,
- &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442,
- &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449,
- &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454,
- &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458,
- &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466,
- &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474,
- &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476,
- &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481,
- &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486,
- &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488,
- &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493,
- &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498,
- &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500,
- &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505,
- &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510,
- &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512,
- &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517,
- &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522,
- &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524,
- &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529,
- &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534,
- &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536,
- &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541,
- &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546,
- &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548,
- &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74,
- &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
- &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
- &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
- &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
- &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
- &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
- &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
- &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
- &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572,
- &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE215, &SHAPE216, &SHAPE215,
- &SHAPE216, &SHAPE217, &SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221,
- &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227,
- &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE229, &SHAPE230, &SHAPE189, &SHAPE364, &SHAPE365,
- &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
- &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
- &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
- &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
- &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
- &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
- &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
- &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
- &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
- &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
- &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
- &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
- &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
- &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
- &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
- &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
- &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
- &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
- &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
- &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
- &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
- &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
- &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
- &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
- &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
- &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
- &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
- &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
- &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
- &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
- &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
- &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
- &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
- &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
- &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
- &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
- &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
- &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
- &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
- &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700,
- &SHAPE700, &SHAPE700, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702,
- &SHAPE702, &SHAPE702, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
- &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
- &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
- &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
- &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705,
- &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709,
- &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713,
- &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717,
- &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721,
- &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725,
- &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
- &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE36,
+ &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
&SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
&SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
&SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90,
@@ -10717,7 +10525,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543,
&SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545,
&SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550,
- &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
+ &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE572, &SHAPE572, &SHAPE13,
+ &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
&SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
&SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
&SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
@@ -10767,18 +10576,216 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543,
&SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545,
&SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550,
- &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572,
- &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76,
- &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80,
- &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85,
- &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89,
- &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94,
- &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77,
- &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82,
- &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78,
- &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83,
- &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365,
- &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373,
+ &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
+ &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
+ &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
+ &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
+ &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
+ &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
+ &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
+ &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
+ &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
+ &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE213, &SHAPE214, &SHAPE215, &SHAPE216, &SHAPE215, &SHAPE216, &SHAPE217,
+ &SHAPE218, &SHAPE217, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE223,
+ &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE227, &SHAPE228, &SHAPE229,
+ &SHAPE230, &SHAPE229, &SHAPE230, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364,
+ &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372,
+ &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375,
+ &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381,
+ &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388,
+ &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391,
+ &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399,
+ &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406,
+ &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408,
+ &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413,
+ &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418,
+ &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420,
+ &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425,
+ &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432,
+ &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435,
+ &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443,
+ &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450,
+ &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452,
+ &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459,
+ &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468,
+ &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471,
+ &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477,
+ &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482,
+ &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484,
+ &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489,
+ &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494,
+ &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496,
+ &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501,
+ &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506,
+ &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508,
+ &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513,
+ &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518,
+ &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520,
+ &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525,
+ &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530,
+ &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532,
+ &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537,
+ &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542,
+ &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544,
+ &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549,
+ &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE299, &SHAPE700, &SHAPE700, &SHAPE700, &SHAPE700,
+ &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702,
+ &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703, &SHAPE703,
+ &SHAPE703, &SHAPE703, &SHAPE1, &SHAPE1, &SHAPE704, &SHAPE704, &SHAPE705, &SHAPE705, &SHAPE706,
+ &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE710,
+ &SHAPE710, &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714,
+ &SHAPE714, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, &SHAPE717, &SHAPE718,
+ &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, &SHAPE721, &SHAPE722,
+ &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, &SHAPE725, &SHAPE726,
+ &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367,
+ &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370,
+ &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378,
+ &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383,
+ &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386,
+ &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394,
+ &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403,
+ &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405,
+ &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410,
+ &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415,
+ &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417,
+ &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422,
+ &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427,
+ &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430,
+ &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438,
+ &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447,
+ &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449,
+ &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454,
+ &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463,
+ &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466,
+ &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474,
+ &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479,
+ &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481,
+ &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486,
+ &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491,
+ &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493,
+ &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498,
+ &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503,
+ &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505,
+ &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510,
+ &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515,
+ &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517,
+ &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522,
+ &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527,
+ &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529,
+ &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534,
+ &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539,
+ &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541,
+ &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546,
+ &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551,
+ &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
+ &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77,
+ &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81,
+ &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86,
+ &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90,
+ &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86,
+ &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95,
+ &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96,
+ &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87,
+ &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92,
+ &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367,
+ &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370,
+ &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378,
+ &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383,
+ &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386,
+ &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394,
+ &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403,
+ &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405,
+ &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410,
+ &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415,
+ &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417,
+ &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422,
+ &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427,
+ &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430,
+ &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438,
+ &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447,
+ &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449,
+ &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454,
+ &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463,
+ &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466,
+ &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474,
+ &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479,
+ &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481,
+ &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486,
+ &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491,
+ &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493,
+ &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498,
+ &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503,
+ &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505,
+ &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510,
+ &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515,
+ &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517,
+ &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522,
+ &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527,
+ &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529,
+ &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534,
+ &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539,
+ &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541,
+ &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546,
+ &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551,
+ &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE572, &SHAPE572, &SHAPE13,
+ &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76,
+ &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81,
+ &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85,
+ &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90,
+ &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94,
+ &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95,
+ &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82,
+ &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87,
+ &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83,
+ &SHAPE92, &SHAPE92, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0,
+ &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373,
&SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377,
&SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382,
&SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389,
@@ -11114,222 +11121,225 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 27657] = [
&SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE730, &SHAPE731, &SHAPE731, &SHAPE73,
&SHAPE732, &SHAPE733, &SHAPE274, &SHAPE274, &SHAPE734, &SHAPE735, &SHAPE274, &SHAPE274,
&SHAPE736, &SHAPE737, &SHAPE274, &SHAPE274, &SHAPE738, &SHAPE739, &SHAPE274, &SHAPE274,
- &SHAPE1, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE743, &SHAPE743, &SHAPE744,
- &SHAPE744, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE746, &SHAPE746, &SHAPE747,
- &SHAPE747, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE749, &SHAPE749, &SHAPE750,
- &SHAPE750, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE752, &SHAPE752, &SHAPE753,
- &SHAPE753, &SHAPE754, &SHAPE754, &SHAPE755, &SHAPE755, &SHAPE756, &SHAPE756, &SHAPE757,
- &SHAPE757, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE741, &SHAPE743, &SHAPE743,
+ &SHAPE744, &SHAPE744, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE745, &SHAPE746, &SHAPE746,
+ &SHAPE747, &SHAPE747, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE748, &SHAPE749, &SHAPE749,
+ &SHAPE750, &SHAPE750, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE751, &SHAPE752, &SHAPE752,
+ &SHAPE753, &SHAPE753, &SHAPE754, &SHAPE754, &SHAPE755, &SHAPE755, &SHAPE756, &SHAPE756,
+ &SHAPE757, &SHAPE757, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758,
&SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758,
- &SHAPE758, &SHAPE759, &SHAPE759, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78,
- &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82,
- &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87,
- &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91,
- &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75,
- &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91,
- &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76,
- &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97,
- &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572,
- &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189,
- &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370,
- &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378,
- &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380,
- &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386,
- &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394,
- &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398,
- &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405,
- &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410,
- &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412,
- &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417,
- &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422,
- &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424,
- &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430,
- &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438,
- &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442,
- &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449,
- &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454,
- &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458,
- &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466,
- &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474,
- &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476,
- &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481,
- &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486,
- &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488,
- &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493,
- &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498,
- &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500,
- &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505,
- &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510,
- &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512,
- &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517,
- &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522,
- &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524,
- &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529,
- &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534,
- &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536,
- &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541,
- &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546,
- &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548,
- &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74,
- &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78,
- &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83,
- &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87,
- &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92,
- &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75,
- &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80,
- &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76,
- &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81,
- &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572,
- &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364,
- &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372,
- &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375,
- &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381,
- &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388,
- &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391,
- &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399,
- &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406,
- &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408,
- &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413,
- &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418,
- &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420,
- &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425,
- &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432,
- &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435,
- &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443,
- &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450,
- &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452,
- &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459,
- &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468,
- &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471,
- &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477,
- &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482,
- &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484,
- &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489,
- &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494,
- &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496,
- &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501,
- &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506,
- &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508,
- &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513,
- &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518,
- &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520,
- &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525,
- &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530,
- &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532,
- &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537,
- &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542,
- &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544,
- &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549,
- &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74,
- &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79,
- &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83,
- &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88,
- &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92,
- &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88,
- &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80,
- &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85,
- &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81,
- &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13,
- &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365,
- &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373,
- &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377,
- &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382,
- &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389,
- &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393,
- &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401,
- &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407,
- &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409,
- &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414,
- &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419,
- &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421,
- &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426,
- &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433,
- &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437,
- &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445,
- &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451,
- &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453,
- &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461,
- &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469,
- &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473,
- &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478,
- &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483,
- &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485,
- &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490,
- &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495,
- &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497,
- &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502,
- &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507,
- &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509,
- &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514,
- &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519,
- &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521,
- &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526,
- &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531,
- &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533,
- &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538,
- &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543,
- &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545,
- &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550,
- &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75,
- &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79,
- &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84,
- &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88,
- &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93,
- &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86, &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88,
- &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91, &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93,
- &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96, &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85,
- &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97, &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90,
- &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92, &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13,
- &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0,
- &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE370, &SHAPE372, &SHAPE373,
- &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE375, &SHAPE377,
- &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE382,
- &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE386, &SHAPE388, &SHAPE389,
- &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE391, &SHAPE393,
- &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE401,
- &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407,
- &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE408, &SHAPE409,
- &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE414,
- &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE417, &SHAPE418, &SHAPE419,
- &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE420, &SHAPE421,
- &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE426,
- &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE430, &SHAPE432, &SHAPE433,
- &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE435, &SHAPE437,
- &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE445,
- &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE449, &SHAPE450, &SHAPE451,
- &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE452, &SHAPE453,
- &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE461,
- &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE466, &SHAPE468, &SHAPE469,
- &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE471, &SHAPE473,
- &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478,
- &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483,
- &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE484, &SHAPE485,
- &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490,
- &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495,
- &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE496, &SHAPE497,
- &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502,
- &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507,
- &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE508, &SHAPE509,
- &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514,
- &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519,
- &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521,
- &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526,
- &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531,
- &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE532, &SHAPE533,
- &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE538,
- &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE542, &SHAPE543,
- &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE544, &SHAPE545,
- &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550,
- &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE760, &SHAPE1, &SHAPE232,
- &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
- &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1,
+ &SHAPE758, &SHAPE758, &SHAPE759, &SHAPE759, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365,
+ &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
+ &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
+ &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
+ &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
+ &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
+ &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
+ &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
+ &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
+ &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
+ &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
+ &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
+ &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
+ &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
+ &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
+ &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
+ &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
+ &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
+ &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
+ &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
+ &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
+ &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
+ &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
+ &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
+ &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
+ &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
+ &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
+ &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
+ &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
+ &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
+ &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
+ &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
+ &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
+ &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
+ &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
+ &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
+ &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
+ &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
+ &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
+ &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
+ &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365,
+ &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
+ &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
+ &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
+ &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
+ &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
+ &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
+ &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
+ &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
+ &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
+ &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
+ &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
+ &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
+ &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
+ &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
+ &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
+ &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
+ &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
+ &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
+ &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
+ &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
+ &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
+ &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
+ &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
+ &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
+ &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
+ &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
+ &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
+ &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
+ &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
+ &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
+ &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
+ &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
+ &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
+ &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
+ &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
+ &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
+ &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
+ &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
+ &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
+ &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365,
+ &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
+ &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
+ &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
+ &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
+ &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
+ &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
+ &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
+ &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
+ &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
+ &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
+ &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
+ &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
+ &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
+ &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
+ &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
+ &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
+ &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
+ &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
+ &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
+ &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
+ &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
+ &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
+ &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
+ &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
+ &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
+ &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
+ &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
+ &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
+ &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
+ &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
+ &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
+ &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
+ &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
+ &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
+ &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
+ &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
+ &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
+ &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
+ &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
+ &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
+ &SHAPE1, &SHAPE74, &SHAPE74, &SHAPE75, &SHAPE75, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77,
+ &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82,
+ &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86,
+ &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91,
+ &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE86, &SHAPE86,
+ &SHAPE75, &SHAPE75, &SHAPE88, &SHAPE88, &SHAPE77, &SHAPE77, &SHAPE95, &SHAPE95, &SHAPE91,
+ &SHAPE91, &SHAPE80, &SHAPE80, &SHAPE93, &SHAPE93, &SHAPE82, &SHAPE82, &SHAPE96, &SHAPE96,
+ &SHAPE76, &SHAPE76, &SHAPE85, &SHAPE85, &SHAPE78, &SHAPE78, &SHAPE87, &SHAPE87, &SHAPE97,
+ &SHAPE97, &SHAPE81, &SHAPE81, &SHAPE90, &SHAPE90, &SHAPE83, &SHAPE83, &SHAPE92, &SHAPE92,
+ &SHAPE572, &SHAPE572, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE189, &SHAPE364, &SHAPE365,
+ &SHAPE189, &SHAPE364, &SHAPE365, &SHAPE0, &SHAPE367, &SHAPE368, &SHAPE0, &SHAPE367, &SHAPE368,
+ &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE370, &SHAPE372, &SHAPE373, &SHAPE375, &SHAPE377,
+ &SHAPE378, &SHAPE375, &SHAPE377, &SHAPE378, &SHAPE379, &SHAPE380, &SHAPE381, &SHAPE379,
+ &SHAPE380, &SHAPE381, &SHAPE382, &SHAPE383, &SHAPE384, &SHAPE382, &SHAPE383, &SHAPE384,
+ &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE386, &SHAPE388, &SHAPE389, &SHAPE391, &SHAPE393,
+ &SHAPE394, &SHAPE391, &SHAPE393, &SHAPE394, &SHAPE396, &SHAPE398, &SHAPE399, &SHAPE396,
+ &SHAPE398, &SHAPE399, &SHAPE401, &SHAPE403, &SHAPE404, &SHAPE401, &SHAPE403, &SHAPE404,
+ &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409,
+ &SHAPE410, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE412, &SHAPE413, &SHAPE411,
+ &SHAPE412, &SHAPE413, &SHAPE414, &SHAPE415, &SHAPE416, &SHAPE414, &SHAPE415, &SHAPE416,
+ &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE417, &SHAPE418, &SHAPE419, &SHAPE420, &SHAPE421,
+ &SHAPE422, &SHAPE420, &SHAPE421, &SHAPE422, &SHAPE423, &SHAPE424, &SHAPE425, &SHAPE423,
+ &SHAPE424, &SHAPE425, &SHAPE426, &SHAPE427, &SHAPE428, &SHAPE426, &SHAPE427, &SHAPE428,
+ &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE430, &SHAPE432, &SHAPE433, &SHAPE435, &SHAPE437,
+ &SHAPE438, &SHAPE435, &SHAPE437, &SHAPE438, &SHAPE440, &SHAPE442, &SHAPE443, &SHAPE440,
+ &SHAPE442, &SHAPE443, &SHAPE445, &SHAPE447, &SHAPE448, &SHAPE445, &SHAPE447, &SHAPE448,
+ &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE449, &SHAPE450, &SHAPE451, &SHAPE452, &SHAPE453,
+ &SHAPE454, &SHAPE452, &SHAPE453, &SHAPE454, &SHAPE456, &SHAPE458, &SHAPE459, &SHAPE456,
+ &SHAPE458, &SHAPE459, &SHAPE461, &SHAPE463, &SHAPE464, &SHAPE461, &SHAPE463, &SHAPE464,
+ &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE466, &SHAPE468, &SHAPE469, &SHAPE471, &SHAPE473,
+ &SHAPE474, &SHAPE471, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE475,
+ &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE478, &SHAPE479, &SHAPE480,
+ &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485,
+ &SHAPE486, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE487,
+ &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE490, &SHAPE491, &SHAPE492,
+ &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497,
+ &SHAPE498, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE499,
+ &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE502, &SHAPE503, &SHAPE504,
+ &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509,
+ &SHAPE510, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE511,
+ &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE514, &SHAPE515, &SHAPE516,
+ &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521,
+ &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523,
+ &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528,
+ &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533,
+ &SHAPE534, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE536, &SHAPE537, &SHAPE535,
+ &SHAPE536, &SHAPE537, &SHAPE538, &SHAPE539, &SHAPE540, &SHAPE538, &SHAPE539, &SHAPE540,
+ &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE541, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545,
+ &SHAPE546, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE547,
+ &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE550, &SHAPE551, &SHAPE552,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE36, &SHAPE36, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE760, &SHAPE1, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
+ &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232, &SHAPE232,
+ &SHAPE232, &SHAPE232, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
&SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
- &SHAPE1, &SHAPE1,
+ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1,
];
diff --git a/azalea-protocol/src/packets/game/c_commands.rs b/azalea-protocol/src/packets/game/c_commands.rs
index c0ac27b2..cd21ddd1 100755
--- a/azalea-protocol/src/packets/game/c_commands.rs
+++ b/azalea-protocol/src/packets/game/c_commands.rs
@@ -91,6 +91,7 @@ pub enum BrigadierString {
GreedyPhrase = 2,
}
+// see ArgumentTypeInfo
#[derive(Debug, Clone, AzBuf, PartialEq)]
pub enum BrigadierParser {
Bool,
@@ -140,6 +141,7 @@ pub enum BrigadierParser {
ResourceOrTagKey { registry_key: ResourceLocation },
Resource { registry_key: ResourceLocation },
ResourceKey { registry_key: ResourceLocation },
+ ResourceSelector { registry_key: ResourceLocation },
TemplateMirror,
TemplateRotation,
Heightmap,
@@ -182,7 +184,7 @@ impl AzaleaRead for BrigadierNodeStub {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
let flags = FixedBitSet::<{ 8_usize.div_ceil(8) }>::azalea_read(buf)?;
if flags.index(5) || flags.index(6) || flags.index(7) {
- warn!("Warning: The flags from a Brigadier node are over 31. This is probably a bug.",);
+ warn!("The flags from a Brigadier node are over 31. This is a bug, BrigadierParser probably needs updating.",);
}
let node_type = u8::from(flags.index(0)) + (u8::from(flags.index(1)) * 2);
diff --git a/azalea-protocol/src/packets/game/c_container_set_content.rs b/azalea-protocol/src/packets/game/c_container_set_content.rs
index 3115a7b7..77ea9ec7 100755
--- a/azalea-protocol/src/packets/game/c_container_set_content.rs
+++ b/azalea-protocol/src/packets/game/c_container_set_content.rs
@@ -37,48 +37,4 @@ mod tests {
packet.write(&mut buf).unwrap();
assert_eq!(buf, contents);
}
-
- #[test]
- fn test_read_write_big_container_set_content() {
- #[rustfmt::skip]
- let contents = [10, 1, 90, 1, 170, 5, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 17, 80, 114, 101, 118, 105, 111, 117, 115, 32, 80, 97, 103, 101, 32, 40, 54, 41, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 62, 5, 231, 107, 8, 147, 65, 45, 135, 242, 47, 95, 58, 70, 91, 105, 0, 0, 1, 254, 3, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 8, 80, 97, 103, 101, 32, 55, 47, 56, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 25, 24, 96, 187, 51, 242, 65, 97, 131, 122, 26, 153, 143, 122, 216, 134, 0, 0, 1, 148, 3, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 13, 78, 101, 120, 116, 32, 80, 97, 103, 101, 32, 40, 56, 41, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 203, 101, 74, 157, 4, 159, 71, 173, 149, 228, 121, 170, 64, 127, 182, 58, 0, 0, 1, 223, 5, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 25, 71, 111, 32, 66, 97, 99, 107, 32, 116, 111, 32, 67, 105, 116, 121, 32, 83, 101, 108, 101, 99, 116, 105, 111, 110, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 134, 183, 152, 100, 133, 118, 74, 35, 179, 188, 177, 175, 164, 81, 113, 14, 0, 0, 1, 157, 9, 2, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 6, 83, 101, 97, 114, 99, 104, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 65, 126, 18, 219, 85, 224, 70, 89, 177, 255, 35, 221, 5, 138, 243, 157, 0, 0, 0, 0, 0, 0, 1, 251, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 47, 12, 197, 190, 121, 244, 75, 144, 170, 28, 179, 220, 82, 113, 250, 18, 0, 0, 1, 241, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 144, 255, 123, 43, 53, 133, 71, 98, 163, 18, 128, 43, 9, 102, 109, 17, 0, 0, 1, 141, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 122, 201, 62, 11, 115, 80, 78, 42, 164, 59, 191, 218, 36, 100, 99, 28, 0, 0, 1, 175, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 254, 1, 161, 38, 93, 186, 70, 76, 133, 57, 77, 149, 86, 143, 160, 210, 0, 0, 1, 169, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 59, 28, 30, 213, 214, 194, 67, 236, 152, 225, 40, 235, 18, 182, 106, 118, 0, 0, 1, 181, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 89, 127, 100, 45, 23, 41, 69, 93, 187, 167, 229, 42, 235, 37, 203, 200, 0, 0, 1, 164, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 80, 82, 232, 142, 122, 39, 78, 76, 139, 86, 231, 223, 147, 188, 151, 31, 0, 0, 1, 252, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 110, 202, 120, 27, 81, 112, 68, 6, 176, 78, 138, 236, 74, 155, 102, 36, 0, 0, 1, 254, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 250, 148, 180, 54, 223, 106, 65, 72, 133, 155, 228, 152, 38, 164, 13, 76, 0, 0, 1, 203, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 104, 50, 30, 169, 227, 21, 78, 111, 145, 140, 61, 251, 171, 87, 237, 156, 0, 0, 1, 141, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 116, 16, 80, 89, 88, 134, 73, 130, 159, 154, 11, 187, 152, 47, 15, 246, 0, 0, 1, 205, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 198, 182, 15, 238, 191, 229, 78, 55, 167, 200, 119, 172, 172, 194, 250, 64, 0, 0, 1, 225, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 125, 180, 76, 110, 110, 204, 75, 122, 164, 224, 99, 32, 106, 188, 93, 128, 0, 0, 1, 196, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 14, 58, 78, 26, 151, 80, 68, 89, 138, 123, 32, 101, 206, 101, 33, 218, 0, 0, 1, 190, 9, 4, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 102, 102, 53, 102, 49, 53, 8, 0, 4, 116, 101, 120, 116, 0, 6, 79, 114, 97, 110, 103, 101, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 6, 121, 101, 108, 108, 111, 119, 8, 0, 4, 116, 101, 120, 116, 0, 13, 32, 69, 110, 101, 114, 103, 121, 32, 83, 119, 111, 114, 100, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 2, 23, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 100, 97, 109, 97, 103, 101, 64, 24, 0, 0, 0, 0, 0, 0, 0, 1, 4, 22, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 115, 112, 101, 101, 100, 63, 252, 204, 204, 204, 204, 204, 205, 0, 1, 1, 7, 51, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 119, 101, 97, 112, 111, 110, 47, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 47, 111, 114, 97, 110, 103, 101, 95, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 24, 115, 5, 163, 74, 89, 79, 249, 146, 120, 81, 85, 5, 199, 50, 36, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 19, 69, 78, 69, 82, 71, 89, 95, 83, 87, 79, 82, 68, 95, 79, 82, 65, 78, 71, 69, 0, 0, 1, 170, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 228, 45, 52, 184, 186, 231, 64, 249, 154, 85, 220, 89, 185, 191, 18, 132, 0, 0, 1, 148, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 208, 70, 163, 62, 217, 139, 70, 183, 137, 197, 67, 252, 152, 48, 227, 138, 0, 0, 1, 162, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 254, 202, 177, 230, 229, 182, 73, 123, 155, 132, 135, 87, 114, 149, 42, 115, 0, 0, 1, 250, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 185, 163, 63, 49, 137, 40, 68, 201, 185, 96, 22, 91, 249, 114, 84, 156, 0, 0, 1, 160, 6, 7, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 80, 111, 119, 101, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 8, 76, 101, 103, 103, 105, 110, 103, 115, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 3, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 4, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 7, 80, 111, 119, 101, 114, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 3, 32, 47, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 0, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 13, 77, 111, 100, 115, 32, 40, 108, 105, 109, 105, 116, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 1, 49, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 2, 41, 58, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 0, 24, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 64, 20, 0, 0, 0, 0, 0, 0, 0, 5, 1, 24, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 64, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 7, 44, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 47, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 108, 101, 103, 103, 105, 110, 103, 115, 4, 0, 28, 2, 75, 1, 23, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 0, 0, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 22, 105, 111, 110, 58, 116, 111, 111, 108, 95, 109, 111, 100, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 9, 105, 111, 110, 58, 112, 111, 119, 101, 114, 0, 0, 195, 80, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 222, 50, 97, 187, 223, 130, 78, 27, 181, 50, 191, 193, 220, 26, 166, 32, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 20, 80, 79, 87, 69, 82, 95, 65, 82, 77, 79, 82, 95, 76, 69, 71, 71, 73, 78, 71, 83, 0, 0, 1, 206, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 92, 15, 75, 242, 229, 111, 69, 230, 135, 17, 151, 154, 254, 156, 73, 69, 0, 0, 1, 197, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 237, 209, 204, 250, 47, 89, 72, 89, 151, 44, 64, 89, 253, 12, 194, 68, 0, 0, 1, 253, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 139, 69, 194, 233, 38, 229, 66, 224, 170, 40, 138, 147, 33, 232, 61, 126, 0, 0, 1, 241, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 180, 235, 163, 39, 91, 237, 70, 48, 177, 149, 170, 41, 26, 167, 129, 237, 0, 0, 1, 213, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 202, 18, 209, 104, 36, 46, 76, 49, 166, 97, 11, 72, 137, 61, 236, 127, 0, 0, 1, 145, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 78, 5, 94, 87, 195, 173, 75, 190, 141, 204, 226, 162, 70, 68, 236, 32, 0, 0, 1, 174, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 67, 94, 169, 41, 126, 228, 74, 154, 147, 81, 231, 116, 151, 234, 148, 174, 0, 0, 1, 160, 6, 7, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 80, 111, 119, 101, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 10, 67, 104, 101, 115, 116, 112, 108, 97, 116, 101, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 3, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 4, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 7, 80, 111, 119, 101, 114, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 3, 32, 47, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 5, 53, 48, 48, 48, 48, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 0, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 13, 77, 111, 100, 115, 32, 40, 108, 105, 109, 105, 116, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 101, 49, 101, 49, 101, 49, 8, 0, 4, 116, 101, 120, 116, 0, 1, 49, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 7, 35, 55, 54, 56, 97, 56, 97, 8, 0, 4, 116, 101, 120, 116, 0, 2, 41, 58, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 0, 26, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 64, 20, 0, 0, 0, 0, 0, 0, 0, 6, 1, 26, 105, 111, 110, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 64, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 7, 46, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 47, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 95, 99, 104, 101, 115, 116, 112, 108, 97, 116, 101, 4, 0, 28, 3, 75, 1, 23, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 112, 111, 119, 101, 114, 95, 97, 114, 109, 111, 114, 0, 0, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 22, 105, 111, 110, 58, 116, 111, 111, 108, 95, 109, 111, 100, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 9, 105, 111, 110, 58, 112, 111, 119, 101, 114, 0, 0, 195, 80, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 53, 127, 15, 194, 212, 201, 74, 70, 155, 232, 218, 234, 82, 153, 238, 47, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 22, 80, 79, 87, 69, 82, 95, 65, 82, 77, 79, 82, 95, 67, 72, 69, 83, 84, 80, 76, 65, 84, 69, 0, 0, 1, 97, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 100, 41, 241, 127, 125, 34, 74, 58, 133, 101, 247, 96, 145, 221, 60, 238, 0, 0, 1, 193, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 86, 207, 202, 78, 106, 201, 69, 109, 177, 216, 70, 183, 142, 31, 252, 142, 0, 0, 1, 228, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 129, 79, 1, 9, 230, 105, 65, 230, 141, 182, 24, 27, 16, 35, 39, 28, 0, 0, 1, 144, 7, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 215, 204, 51, 17, 142, 220, 76, 120, 140, 230, 249, 238, 88, 171, 55, 182, 0, 0, 1, 190, 9, 4, 0, 5, 10, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 5, 71, 114, 101, 101, 110, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 6, 121, 101, 108, 108, 111, 119, 8, 0, 4, 116, 101, 120, 116, 0, 13, 32, 69, 110, 101, 114, 103, 121, 32, 83, 119, 111, 114, 100, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 13, 2, 2, 23, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 100, 97, 109, 97, 103, 101, 64, 24, 0, 0, 0, 0, 0, 0, 0, 1, 4, 22, 105, 111, 110, 58, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 95, 115, 112, 101, 101, 100, 63, 252, 204, 204, 204, 204, 204, 205, 0, 1, 1, 7, 50, 104, 111, 114, 105, 122, 111, 110, 115, 101, 110, 100, 58, 119, 101, 97, 112, 111, 110, 47, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 47, 103, 114, 101, 101, 110, 95, 101, 110, 101, 114, 103, 121, 95, 115, 119, 111, 114, 100, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 72, 52, 170, 201, 22, 92, 65, 184, 150, 136, 65, 82, 84, 115, 106, 113, 8, 0, 14, 105, 111, 110, 58, 99, 117, 115, 116, 111, 109, 105, 116, 101, 109, 0, 18, 69, 78, 69, 82, 71, 89, 95, 83, 87, 79, 82, 68, 95, 71, 82, 69, 69, 78, 0, 0, 1, 136, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 0, 165, 77, 13, 179, 51, 70, 68, 191, 96, 26, 204, 238, 96, 249, 216, 0, 0, 1, 159, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 194, 171, 221, 186, 156, 251, 64, 2, 133, 121, 107, 227, 126, 27, 88, 6, 0, 0, 1, 128, 6, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 183, 245, 245, 213, 233, 254, 75, 183, 157, 222, 154, 9, 0, 186, 209, 255, 0, 0, 1, 131, 9, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 48, 31, 245, 210, 195, 183, 77, 84, 130, 121, 149, 159, 163, 96, 14, 174, 0, 0, 1, 180, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 236, 182, 64, 231, 198, 112, 78, 24, 128, 144, 124, 223, 190, 183, 218, 155, 0, 0, 1, 153, 7, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 24, 101, 83, 78, 117, 67, 77, 192, 173, 51, 135, 133, 24, 84, 180, 243, 0, 0, 1, 168, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 121, 78, 175, 38, 3, 164, 66, 129, 157, 35, 76, 224, 199, 236, 82, 219, 0, 0, 1, 160, 5, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 63, 89, 122, 3, 188, 16, 76, 29, 137, 182, 222, 54, 115, 93, 215, 85, 0, 0, 1, 161, 3, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 68, 122, 30, 52, 205, 241, 66, 229, 162, 100, 143, 216, 152, 182, 103, 235, 0, 0, 1, 199, 2, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 234, 252, 235, 31, 201, 181, 70, 138, 134, 166, 65, 26, 173, 44, 174, 189, 0, 0, 1, 245, 1, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 110, 110, 28, 171, 11, 212, 67, 199, 189, 34, 188, 84, 105, 66, 42, 131, 0, 0, 1, 229, 4, 1, 0, 0, 10, 10, 0, 18, 80, 117, 98, 108, 105, 99, 66, 117, 107, 107, 105, 116, 86, 97, 108, 117, 101, 115, 7, 0, 11, 105, 111, 110, 58, 105, 102, 45, 117, 117, 105, 100, 0, 0, 0, 16, 203, 97, 235, 205, 232, 71, 68, 32, 164, 18, 197, 153, 84, 138, 196, 239, 0, 0, 0, 1, 141, 4, 0, 0, 1, 204, 4, 0, 0, 1, 161, 2, 0, 0, 1, 155, 3, 0, 0, 3, 220, 3, 0, 0, 1, 201, 3, 0, 0, 1, 207, 3, 0, 0, 1, 197, 3, 0, 0, 1, 202, 3, 0, 0, 1, 199, 3, 0, 0, 1, 157, 5, 0, 0, 1, 151, 5, 0, 0, 1, 169, 2, 0, 0, 1, 90, 0, 0, 1, 193, 1, 0, 0, 1, 92, 0, 0, 1, 205, 3, 0, 0, 0, 0, 1, 162, 6, 0, 0, 1, 162, 6, 0, 0, 1, 251, 6, 0, 0, 0, 1, 214, 7, 0, 0, 0, 1, 183, 5, 0, 0, 1, 212, 6, 0, 0, 1, 213, 7, 0, 0, 1, 244, 5, 0, 0, 1, 159, 5, 0, 0, 1, 202, 4, 0, 0, 1, 142, 5, 0, 0, 0, 1, 194, 4, 0, 0, 0, 0];
- let mut buf = Cursor::new(contents.as_slice());
- let packet = ClientboundContainerSetContent::azalea_read(&mut buf).unwrap();
- println!("{:?}", packet);
-
- assert_eq!(buf.position(), contents.len() as u64);
-
- let mut re_encoded = Vec::new();
- packet.write(&mut re_encoded).unwrap();
-
- // TODO: make FormattedText re-encode to the same bytes and then
- // uncomment the code below
-
- // assert_eq!(buf, contents);
-
- // let mut re_decoded = Cursor::new(re_encoded.as_slice());
- // let re_decoded_packet =
- // ClientboundContainerSetContent::azalea_read(&mut
- // re_decoded).unwrap(); println!("{:?}", packet);
-
- // assert_eq!(re_decoded.position(), re_encoded.len() as u64);
-
- // assert_eq!(packet, re_decoded_packet);
- }
-
- #[test]
- fn test_read_hypixel_container_set_content() {
- #[rustfmt::skip]
- let contents = [0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 193, 7, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 10, 71, 97, 109, 101, 32, 77, 101, 110, 117, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 38, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 32, 116, 111, 32, 98, 114, 105, 110, 103, 32, 117, 112, 32, 116, 104, 101, 32, 71, 97, 109, 101, 32, 77, 101, 110, 117, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 1, 132, 9, 3, 0, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 11, 77, 121, 32, 80, 114, 111, 102, 105, 108, 101, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 48, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 98, 114, 111, 119, 115, 101, 32, 113, 117, 101, 115, 116, 115, 44, 32, 118, 105, 101, 119, 32, 97, 99, 104, 105, 101, 118, 101, 109, 101, 110, 116, 115, 44, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 1, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 35, 97, 99, 116, 105, 118, 97, 116, 101, 32, 78, 101, 116, 119, 111, 114, 107, 32, 66, 111, 111, 115, 116, 101, 114, 115, 32, 97, 110, 100, 32, 109, 111, 114, 101, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 57, 1, 9, 76, 105, 108, 77, 97, 110, 77, 97, 114, 1, 128, 85, 54, 33, 54, 28, 66, 45, 141, 149, 252, 101, 48, 182, 236, 157, 1, 8, 116, 101, 120, 116, 117, 114, 101, 115, 156, 3, 101, 119, 111, 103, 73, 67, 74, 48, 97, 87, 49, 108, 99, 51, 82, 104, 98, 88, 65, 105, 73, 68, 111, 103, 77, 84, 99, 122, 79, 68, 65, 119, 77, 106, 69, 53, 77, 122, 77, 52, 77, 121, 119, 75, 73, 67, 65, 105, 99, 72, 74, 118, 90, 109, 108, 115, 90, 85, 108, 107, 73, 105, 65, 54, 73, 67, 73, 52, 77, 68, 85, 49, 77, 122, 89, 121, 77, 84, 77, 50, 77, 87, 77, 48, 77, 106, 74, 107, 79, 71, 81, 53, 78, 87, 90, 106, 78, 106, 85, 122, 77, 71, 73, 50, 90, 87, 77, 53, 90, 67, 73, 115, 67, 105, 65, 103, 73, 110, 66, 121, 98, 50, 90, 112, 98, 71, 86, 79, 89, 87, 49, 108, 73, 105, 65, 54, 73, 67, 74, 77, 97, 87, 120, 78, 89, 87, 53, 78, 89, 88, 73, 105, 76, 65, 111, 103, 73, 67, 74, 122, 97, 87, 100, 117, 89, 88, 82, 49, 99, 109, 86, 83, 90, 88, 70, 49, 97, 88, 74, 108, 90, 67, 73, 103, 79, 105, 66, 48, 99, 110, 86, 108, 76, 65, 111, 103, 73, 67, 74, 48, 90, 88, 104, 48, 100, 88, 74, 108, 99, 121, 73, 103, 79, 105, 66, 55, 67, 105, 65, 103, 73, 67, 65, 105, 85, 48, 116, 74, 84, 105, 73, 103, 79, 105, 66, 55, 67, 105, 65, 103, 73, 67, 65, 103, 73, 67, 74, 49, 99, 109, 119, 105, 73, 68, 111, 103, 73, 109, 104, 48, 100, 72, 65, 54, 76, 121, 57, 48, 90, 88, 104, 48, 100, 88, 74, 108, 99, 121, 53, 116, 97, 87, 53, 108, 89, 51, 74, 104, 90, 110, 81, 117, 98, 109, 86, 48, 76, 51, 82, 108, 101, 72, 82, 49, 99, 109, 85, 118, 78, 122, 107, 53, 77, 106, 81, 120, 77, 122, 107, 52, 77, 68, 99, 121, 78, 87, 85, 120, 90, 109, 81, 52, 90, 109, 89, 53, 90, 68, 81, 53, 77, 106, 69, 50, 89, 50, 69, 52, 90, 71, 73, 120, 78, 109, 73, 119, 77, 106, 69, 50, 89, 50, 74, 108, 77, 84, 78, 104, 90, 87, 77, 50, 77, 87, 89, 53, 77, 109, 69, 50, 77, 68, 74, 109, 89, 109, 82, 109, 89, 109, 77, 121, 78, 83, 73, 75, 73, 67, 65, 103, 73, 72, 48, 75, 73, 67, 66, 57, 67, 110, 48, 61, 1, 172, 5, 65, 102, 47, 110, 109, 50, 97, 51, 72, 111, 56, 79, 118, 78, 65, 119, 70, 102, 56, 74, 105, 83, 117, 52, 52, 55, 86, 73, 73, 104, 70, 77, 103, 116, 67, 120, 79, 67, 113, 82, 105, 65, 51, 48, 104, 86, 84, 119, 118, 83, 112, 50, 118, 81, 121, 55, 49, 97, 121, 70, 90, 48, 87, 111, 55, 65, 109, 71, 84, 53, 119, 83, 43, 106, 48, 114, 102, 97, 100, 117, 108, 114, 106, 79, 109, 104, 67, 70, 71, 71, 66, 50, 51, 87, 89, 101, 111, 102, 76, 108, 57, 86, 101, 109, 56, 98, 67, 81, 115, 110, 112, 73, 43, 43, 47, 101, 48, 79, 89, 99, 89, 89, 55, 118, 102, 47, 83, 82, 111, 66, 80, 47, 75, 99, 48, 105, 57, 55, 114, 120, 79, 52, 55, 82, 113, 57, 107, 71, 73, 111, 105, 75, 69, 83, 72, 81, 104, 107, 83, 78, 47, 115, 106, 110, 106, 108, 98, 56, 115, 101, 76, 74, 72, 98, 53, 113, 53, 97, 69, 108, 53, 73, 67, 83, 73, 111, 122, 75, 65, 71, 98, 111, 57, 99, 103, 49, 74, 50, 66, 108, 87, 65, 111, 74, 78, 113, 101, 56, 101, 65, 100, 51, 110, 113, 109, 72, 101, 77, 105, 120, 77, 89, 97, 69, 106, 52, 113, 65, 72, 122, 110, 77, 85, 121, 98, 104, 68, 56, 107, 53, 112, 118, 83, 57, 76, 108, 115, 98, 65, 109, 106, 51, 88, 70, 120, 56, 117, 80, 78, 122, 108, 53, 55, 103, 85, 53, 47, 68, 101, 106, 49, 101, 72, 68, 69, 79, 50, 51, 100, 84, 88, 114, 74, 121, 108, 71, 116, 78, 56, 74, 82, 102, 115, 106, 83, 47, 76, 109, 112, 87, 55, 52, 121, 70, 117, 105, 118, 74, 71, 71, 107, 52, 74, 55, 109, 97, 55, 71, 76, 108, 77, 82, 107, 69, 115, 101, 122, 71, 52, 51, 57, 50, 47, 105, 109, 69, 97, 101, 77, 81, 57, 108, 55, 107, 100, 89, 85, 67, 89, 116, 79, 122, 89, 90, 82, 47, 77, 77, 53, 82, 97, 51, 71, 72, 65, 117, 102, 86, 90, 79, 65, 55, 100, 49, 114, 122, 77, 47, 54, 113, 106, 120, 55, 110, 105, 117, 117, 56, 57, 82, 120, 47, 66, 65, 99, 84, 72, 79, 103, 79, 66, 47, 79, 86, 90, 81, 119, 89, 90, 105, 110, 111, 47, 104, 109, 120, 78, 88, 98, 51, 81, 106, 118, 71, 78, 108, 113, 111, 69, 81, 102, 111, 57, 68, 68, 84, 121, 66, 97, 113, 77, 69, 66, 105, 87, 68, 103, 89, 67, 83, 54, 107, 108, 55, 83, 68, 122, 43, 55, 104, 79, 121, 104, 70, 70, 49, 101, 66, 103, 70, 119, 75, 65, 68, 97, 108, 43, 88, 78, 98, 78, 85, 100, 107, 97, 86, 115, 100, 73, 97, 114, 85, 79, 88, 98, 89, 104, 83, 114, 114, 76, 87, 118, 79, 99, 87, 97, 100, 114, 82, 74, 84, 85, 82, 77, 82, 115, 74, 118, 52, 98, 53, 57, 118, 119, 88, 111, 84, 87, 52, 43, 48, 115, 51, 80, 83, 110, 43, 69, 110, 100, 84, 114, 115, 74, 121, 106, 87, 69, 49, 100, 76, 87, 98, 82, 75, 121, 47, 51, 120, 117, 100, 90, 118, 106, 116, 115, 111, 109, 106, 54, 82, 110, 83, 76, 114, 47, 81, 55, 77, 109, 54, 100, 76, 51, 102, 83, 102, 122, 57, 115, 89, 86, 83, 118, 67, 88, 74, 84, 52, 71, 77, 52, 112, 108, 82, 78, 78, 78, 55, 47, 49, 108, 110, 74, 115, 99, 106, 114, 108, 120, 81, 48, 84, 110, 85, 74, 116, 111, 53, 78, 49, 104, 56, 97, 79, 88, 78, 98, 77, 72, 83, 87, 104, 72, 56, 76, 121, 43, 88, 74, 116, 117, 111, 101, 114, 86, 72, 113, 108, 83, 110, 119, 119, 70, 74, 101, 72, 55, 66, 74, 66, 47, 67, 43, 118, 101, 88, 50, 56, 116, 85, 56, 61, 0, 0, 0, 0, 0, 1, 230, 7, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 3, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 119, 104, 105, 116, 101, 8, 0, 4, 116, 101, 120, 116, 0, 9, 80, 108, 97, 121, 101, 114, 115, 58, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 8, 86, 105, 115, 105, 98, 108, 101, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 40, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 116, 111, 103, 103, 108, 101, 32, 112, 108, 97, 121, 101, 114, 32, 118, 105, 115, 105, 98, 105, 108, 105, 116, 121, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 1, 137, 9, 3, 0, 13, 0, 1, 5, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 15, 76, 111, 98, 98, 121, 32, 83, 101, 108, 101, 99, 116, 111, 114, 32, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 13, 40, 82, 105, 103, 104, 116, 32, 67, 108, 105, 99, 107, 41, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 8, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 48, 82, 105, 103, 104, 116, 45, 99, 108, 105, 99, 107, 32, 116, 111, 32, 115, 119, 105, 116, 99, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 108, 111, 98, 98, 105, 101, 115, 33, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 2, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 35, 85, 115, 101, 32, 116, 104, 105, 115, 32, 116, 111, 32, 115, 116, 97, 121, 32, 119, 105, 116, 104, 32, 121, 111, 117, 114, 32, 102, 114, 105, 101, 110, 100, 115, 46, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 0, 0];
- let mut buf = Cursor::new(contents.as_slice());
- let packet = ClientboundContainerSetContent::azalea_read(&mut buf).unwrap();
- println!("{:?}", packet);
-
- assert_eq!(buf.position(), contents.len() as u64);
-
- // contains FormattedText which doesn't re-encode to the same bytes
- // let mut buf = Vec::new();
- // packet.write(&mut buf).unwrap();
- // assert_eq!(buf, contents);
- }
}
diff --git a/azalea-protocol/src/packets/game/c_container_set_slot.rs b/azalea-protocol/src/packets/game/c_container_set_slot.rs
index d150fc60..20df5b06 100755
--- a/azalea-protocol/src/packets/game/c_container_set_slot.rs
+++ b/azalea-protocol/src/packets/game/c_container_set_slot.rs
@@ -11,27 +11,3 @@ pub struct ClientboundContainerSetSlot {
pub slot: u16,
pub item_stack: ItemStack,
}
-
-#[cfg(test)]
-mod test {
- use std::io::Cursor;
-
- use azalea_buf::AzaleaRead;
-
- use crate::packets::game::ClientboundContainerSetSlot;
-
- #[test]
- fn test_read_container_set_slot() {
- tracing_subscriber::fmt::try_init().ok();
-
- #[rustfmt::skip]
- let contents = [
- 0, 2, 0, 39, 1, 246, 8, 3, 0, 8, 1, 10, 9, 0, 5, 101, 120, 116, 114, 97, 8, 0, 0, 0, 1, 0, 47, 89, 111, 117, 114, 32, 106, 111, 117, 114, 110, 97, 108, 44, 32, 99, 111, 110, 116, 97, 105, 110, 105, 110, 103, 32, 97, 108, 108, 32, 113, 117, 101, 115, 116, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 115, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 14, 1, 191, 128, 0, 0, 0, 0, 0, 44, 7, 74, 111, 117, 114, 110, 97, 108, 0, 12, 65, 115, 116, 114, 97, 108, 99, 104, 114, 111, 109, 97, 0, 2, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 20, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 1, 0, 10, 117, 110, 100, 101, 114, 108, 105, 110, 101, 100, 0, 1, 0, 4, 98, 111, 108, 100, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 1, 0, 10, 111, 98, 102, 117, 115, 99, 97, 116, 101, 100, 0, 1, 0, 13, 115, 116, 114, 105, 107, 101, 116, 104, 114, 111, 117, 103, 104, 0, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 12, 81, 117, 101, 115, 116, 32, 83, 116, 97, 116, 117, 115, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 9, 76, 111, 99, 107, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 17, 67, 97, 110, 32, 98, 101, 32, 83, 116, 97, 114, 116, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 10, 83, 116, 97, 114, 116, 101, 100, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 19, 70, 105, 110, 105, 115, 104, 101, 100, 47, 67, 111, 111, 108, 100, 111, 119, 110, 10, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 10, 81, 117, 101, 115, 116, 32, 76, 105, 115, 116, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 103, 114, 97, 121, 8, 0, 4, 116, 101, 120, 116, 0, 15, 67, 104, 101, 116, 104, 32, 67, 111, 108, 108, 101, 99, 116, 111, 114, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 1, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 17, 82, 101, 112, 101, 97, 116, 97, 98, 108, 101, 32, 81, 117, 101, 115, 116, 115, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 3, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 16, 68, 97, 105, 108, 121, 32, 67, 111, 109, 109, 105, 115, 115, 105, 111, 110, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 8, 100, 97, 114, 107, 95, 114, 101, 100, 8, 0, 4, 116, 101, 120, 116, 0, 1, 10, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 10, 9, 0, 5, 101, 120, 116, 114, 97, 10, 0, 0, 0, 12, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 11, 49, 48, 46, 48, 50, 46, 50, 48, 50, 53, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 103, 111, 108, 100, 8, 0, 4, 116, 101, 120, 116, 0, 6, 49, 55, 58, 48, 48, 10, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 4, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 16, 68, 97, 105, 108, 121, 32, 67, 111, 109, 109, 105, 115, 115, 105, 111, 110, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 9, 100, 97, 114, 107, 95, 98, 108, 117, 101, 8, 0, 4, 116, 101, 120, 116, 0, 1, 45, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 11, 10, 32, 32, 84, 97, 108, 107, 32, 116, 111, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 11, 65, 113, 117, 97, 10, 75, 121, 114, 101, 108, 108, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 4, 32, 97, 116, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 22, 91, 75, 114, 105, 111, 58, 10, 52, 52, 56, 57, 44, 32, 51, 54, 44, 32, 49, 51, 49, 52, 93, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 7, 46, 10, 32, 32, 10, 32, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 10, 100, 97, 114, 107, 95, 103, 114, 101, 101, 110, 8, 0, 4, 116, 101, 120, 116, 0, 9, 82, 101, 119, 97, 114, 100, 115, 58, 32, 0, 1, 0, 6, 105, 116, 97, 108, 105, 99, 0, 8, 0, 5, 99, 111, 108, 111, 114, 0, 5, 98, 108, 97, 99, 107, 8, 0, 4, 116, 101, 120, 116, 0, 6, 36, 53, 48, 48, 48, 10, 0, 8, 0, 4, 116, 101, 120, 116, 0, 0, 0, 0, 0
- ];
- let mut buf = Cursor::new(contents.as_slice());
- let packet = ClientboundContainerSetSlot::azalea_read(&mut buf).unwrap();
- println!("{:?}", packet);
-
- assert_eq!(buf.position(), contents.len() as u64);
- }
-}
diff --git a/azalea-protocol/src/packets/game/c_disguised_chat.rs b/azalea-protocol/src/packets/game/c_disguised_chat.rs
index 90dc5d64..97157089 100644
--- a/azalea-protocol/src/packets/game/c_disguised_chat.rs
+++ b/azalea-protocol/src/packets/game/c_disguised_chat.rs
@@ -1,7 +1,7 @@
use azalea_buf::AzBuf;
use azalea_chat::{
- translatable_component::{StringOrComponent, TranslatableComponent},
FormattedText,
+ translatable_component::{StringOrComponent, TranslatableComponent},
};
use azalea_protocol_macros::ClientboundGamePacket;
@@ -25,8 +25,6 @@ impl ClientboundDisguisedChat {
let content = self.message.clone();
let target = self.chat_type.target_name.clone();
- let translation_key = self.chat_type.chat_type.chat_translation_key();
-
let mut args = vec![
StringOrComponent::FormattedText(sender),
StringOrComponent::FormattedText(content),
@@ -35,6 +33,7 @@ impl ClientboundDisguisedChat {
args.push(StringOrComponent::FormattedText(target));
}
+ let translation_key = self.chat_type.translation_key();
let component = TranslatableComponent::new(translation_key.to_string(), args);
FormattedText::Translatable(component)
diff --git a/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs b/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs
index c27c24a9..ad07f01e 100755
--- a/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs
+++ b/azalea-protocol/src/packets/game/c_level_chunk_with_light.rs
@@ -2,6 +2,7 @@ use std::sync::Arc;
use azalea_buf::AzBuf;
use azalea_protocol_macros::ClientboundGamePacket;
+use azalea_world::heightmap::HeightmapKind;
use simdnbt::owned::Nbt;
use super::c_light_update::ClientboundLightUpdatePacketData;
@@ -17,7 +18,7 @@ pub struct ClientboundLevelChunkWithLight {
#[derive(Clone, Debug, AzBuf)]
pub struct ClientboundLevelChunkPacketData {
- pub heightmaps: Nbt,
+ pub heightmaps: Vec<(HeightmapKind, Box<[u64]>)>,
/// The raw chunk sections.
///
/// We can't parse the data in azalea-protocol because it depends on context
@@ -36,62 +37,3 @@ pub struct BlockEntity {
pub kind: azalea_registry::BlockEntityKind,
pub data: Nbt,
}
-
-#[cfg(test)]
-mod tests {
- use std::{io::Cursor, ops::Deref};
-
- use azalea_buf::AzaleaRead;
- use azalea_world::Chunk;
- use simdnbt::owned::BaseNbt;
-
- use super::*;
-
- #[test]
- fn test_c_level_chunk_with_light_packet() {
- #[rustfmt::skip]
- let bytes = [
- 255, 255, 255, 253, 0, 0, 0, 1, 10, 12, 0, 15, 77, 79, 84, 73, 79, 78, 95, 66, 76, 79, 67, 75, 73, 78, 71, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 240, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 195, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 33, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 37, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 2, 0, 137, 51, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 2, 0, 137, 51, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 2, 140, 1, 1, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 4, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 32, 67, 101, 0, 0, 0, 0, 0, 32, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 33, 67, 101, 135, 169, 203, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 33, 67, 101, 135, 169, 203, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 16, 50, 84, 118, 152, 186, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 33, 67, 101, 135, 169, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 16, 50, 84, 118, 152, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 33, 67, 101, 135, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 16, 50, 84, 118, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 33, 67, 101, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 16, 50, 84, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 16, 50, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ];
-
- let packet = ClientboundLevelChunkWithLight::azalea_read(&mut Cursor::new(&bytes)).unwrap();
-
- let heightmaps_nbt = &packet.chunk_data.heightmaps;
- // necessary to make the unwrap_or work
- let empty_nbt = BaseNbt::default();
- let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref();
-
- let chunk = Chunk::read_with_dimension_height(
- &mut Cursor::new(&packet.chunk_data.data),
- 256,
- 0,
- heightmaps,
- )
- .unwrap();
-
- assert_eq!(chunk.sections.len(), 16);
- }
-
- #[test]
- fn test_hypixel_chunk_packet() {
- #[rustfmt::skip]
- let bytes = [255, 255, 255, 249, 255, 255, 255, 250, 10, 12, 0, 15, 77, 79, 84, 73, 79, 78, 95, 66, 76, 79, 67, 75, 73, 78, 71, 0, 0, 0, 37, 25, 140, 230, 131, 97, 176, 216, 106, 26, 12, 198, 115, 57, 156, 204, 102, 25, 205, 38, 179, 81, 160, 212, 104, 25, 204, 230, 99, 49, 152, 204, 102, 26, 77, 38, 83, 81, 160, 206, 103, 25, 140, 198, 99, 49, 152, 204, 103, 23, 205, 38, 115, 57, 156, 206, 103, 25, 140, 198, 99, 49, 152, 204, 102, 25, 204, 230, 115, 57, 152, 204, 102, 25, 140, 198, 99, 49, 152, 202, 104, 25, 204, 198, 99, 49, 152, 204, 102, 25, 140, 198, 99, 25, 156, 206, 103, 25, 140, 198, 99, 49, 152, 204, 102, 25, 64, 38, 115, 57, 152, 204, 102, 25, 140, 198, 99, 49, 152, 204, 102, 25, 204, 198, 99, 49, 152, 204, 102, 25, 140, 198, 99, 49, 152, 202, 1, 25, 140, 198, 99, 49, 152, 204, 102, 25, 205, 6, 99, 16, 4, 206, 102, 25, 140, 198, 99, 49, 152, 204, 102, 26, 12, 192, 19, 49, 152, 204, 102, 25, 140, 198, 99, 49, 160, 210, 105, 0, 76, 198, 99, 49, 152, 204, 102, 25, 140, 198, 147, 73, 164, 208, 103, 25, 140, 198, 99, 49, 152, 204, 102, 26, 77, 38, 131, 65, 156, 2, 103, 25, 204, 198, 99, 49, 152, 204, 103, 26, 12, 224, 16, 9, 160, 206, 103, 25, 140, 198, 83, 41, 156, 206, 104, 0, 64, 38, 163, 73, 156, 206, 103, 24, 204, 70, 99, 57, 156, 2, 1, 26, 77, 6, 115, 57, 152, 204, 101, 0, 64, 32, 16, 8, 4, 2, 1, 25, 204, 198, 96, 8, 4, 2, 97, 0, 64, 32, 16, 8, 4, 210, 103, 0, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 3, 49, 156, 206, 101, 12, 0, 13, 87, 79, 82, 76, 68, 95, 83, 85, 82, 70, 65, 67, 69, 0, 0, 0, 37, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 64, 32, 16, 8, 4, 2, 1, 0, 0, 0, 0, 8, 4, 2, 1, 0, 0, 208, 73, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 189, 46, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 4, 4, 0, 189, 46, 177, 16, 180, 79, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 32, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 35, 35, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 48, 0, 0, 0, 0, 0, 1, 35, 50, 0, 0, 0, 0, 0, 0, 35, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 48, 0, 0, 0, 0, 0, 0, 35, 51, 0, 0, 0, 0, 0, 1, 35, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 19, 4, 8, 0, 177, 16, 189, 46, 180, 79, 1, 253, 1, 184, 79, 176, 79, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 19, 49, 0, 0, 0, 0, 0, 2, 19, 51, 0, 0, 0, 0, 0, 0, 19, 16, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 19, 51, 48, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 1, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 32, 1, 48, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 49, 0, 0, 0, 0, 0, 0, 52, 51, 48, 0, 0, 0, 0, 2, 51, 67, 48, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0, 32, 1, 68, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 2, 51, 51, 16, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 0, 51, 68, 64, 0, 0, 0, 0, 32, 19, 64, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 68, 64, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 2, 51, 51, 48, 0, 0, 0, 0, 0, 51, 68, 64, 0, 0, 0, 0, 32, 51, 68, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 3, 16, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 52, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 2, 67, 51, 48, 0, 0, 0, 0, 2, 52, 51, 51, 0, 0, 0, 0, 2, 52, 68, 64, 0, 0, 0, 0, 32, 52, 68, 0, 0, 0, 0, 0, 32, 4, 68, 0, 0, 0, 4, 0, 32, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 49, 0, 0, 0, 0, 0, 0, 51, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 0, 68, 51, 51, 0, 0, 0, 0, 2, 52, 67, 51, 0, 0, 0, 0, 34, 52, 68, 51, 0, 0, 0, 0, 32, 52, 68, 64, 0, 0, 64, 0, 32, 4, 68, 0, 0, 0, 68, 0, 32, 0, 64, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 19, 51, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 48, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 51, 51, 48, 0, 0, 0, 0, 0, 52, 51, 51, 0, 0, 0, 0, 2, 52, 67, 51, 48, 0, 0, 0, 34, 52, 68, 51, 48, 0, 0, 0, 32, 52, 68, 68, 0, 4, 64, 0, 32, 52, 68, 64, 0, 4, 67, 0, 32, 0, 68, 0, 0, 68, 51, 48, 0, 0, 0, 0, 4, 67, 51, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 3, 51, 48, 0, 0, 0, 0, 0, 51, 51, 51, 0, 0, 0, 0, 0, 51, 67, 51, 48, 0, 0, 0, 2, 51, 67, 51, 51, 0, 0, 0, 2, 52, 68, 51, 51, 51, 48, 0, 32, 52, 68, 68, 48, 3, 68, 0, 32, 52, 68, 64, 0, 68, 67, 0, 32, 68, 68, 64, 4, 68, 51, 48, 0, 0, 4, 64, 4, 68, 51, 48, 0, 0, 0, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 68, 48, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 52, 64, 0, 0, 0, 0, 0, 51, 52, 68, 0, 0, 0, 0, 0, 51, 52, 51, 51, 0, 0, 0, 0, 51, 68, 51, 51, 48, 0, 0, 2, 51, 68, 51, 51, 51, 0, 0, 2, 52, 68, 67, 51, 51, 52, 0, 32, 52, 68, 68, 51, 51, 68, 0, 32, 52, 68, 68, 68, 68, 67, 48, 32, 52, 68, 68, 68, 68, 51, 48, 0, 0, 68, 68, 4, 68, 51, 48, 0, 0, 4, 0, 0, 68, 51, 0, 0, 0, 0, 0, 0, 68, 64, 0, 0, 0, 0, 0, 34, 4, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 51, 51, 48, 0, 0, 0, 0, 0, 51, 52, 68, 48, 0, 0, 0, 0, 51, 52, 68, 67, 0, 0, 0, 2, 51, 68, 68, 51, 51, 0, 0, 2, 51, 68, 68, 51, 51, 48, 0, 2, 52, 68, 68, 51, 51, 52, 0, 32, 68, 68, 68, 67, 51, 68, 0, 32, 52, 68, 68, 68, 68, 68, 64, 32, 51, 68, 68, 68, 68, 67, 48, 0, 51, 68, 68, 68, 68, 67, 48, 0, 0, 51, 48, 4, 68, 67, 0, 0, 0, 51, 48, 0, 68, 64, 0, 0, 0, 0, 0, 34, 4, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 0, 0, 0, 0, 51, 67, 51, 51, 0, 0, 0, 0, 51, 68, 68, 51, 48, 6, 0, 2, 51, 68, 68, 67, 51, 0, 0, 2, 52, 68, 68, 67, 51, 52, 96, 2, 68, 68, 68, 67, 51, 68, 0, 32, 68, 68, 68, 68, 68, 68, 0, 32, 52, 68, 68, 68, 68, 68, 64, 32, 51, 68, 68, 68, 68, 68, 64, 0, 51, 68, 68, 68, 68, 68, 0, 0, 3, 51, 52, 68, 68, 68, 0, 0, 0, 51, 48, 4, 68, 64, 0, 0, 0, 3, 0, 34, 4, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 51, 48, 0, 0, 0, 0, 0, 68, 51, 48, 3, 0, 6, 0, 0, 52, 67, 51, 51, 48, 7, 0, 0, 52, 68, 68, 51, 49, 7, 0, 0, 52, 68, 68, 67, 51, 51, 112, 2, 68, 68, 68, 68, 51, 51, 0, 2, 68, 68, 68, 68, 68, 67, 48, 32, 68, 68, 68, 68, 68, 67, 48, 32, 52, 68, 68, 64, 4, 68, 48, 32, 51, 68, 68, 68, 68, 68, 64, 0, 51, 68, 68, 68, 68, 68, 64, 0, 51, 51, 52, 68, 68, 68, 0, 0, 3, 51, 51, 68, 68, 68, 0, 0, 0, 51, 0, 34, 68, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 75, 4, 9, 0, 176, 79, 180, 79, 1, 184, 79, 177, 16, 189, 46, 183, 79, 190, 46, 128, 2, 51, 34, 34, 34, 34, 1, 0, 0, 51, 34, 34, 34, 80, 4, 0, 0, 51, 50, 34, 34, 37, 0, 0, 0, 51, 51, 51, 34, 37, 32, 0, 0, 51, 51, 51, 50, 34, 34, 32, 6, 51, 51, 51, 51, 34, 34, 34, 6, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 50, 32, 96, 51, 51, 51, 51, 51, 51, 32, 96, 35, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 51, 51, 51, 48, 0, 35, 34, 35, 102, 51, 51, 0, 0, 37, 82, 32, 102, 51, 48, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 50, 34, 34, 34, 81, 64, 0, 51, 50, 34, 34, 34, 80, 0, 0, 51, 51, 51, 34, 34, 80, 0, 0, 51, 51, 51, 51, 34, 35, 48, 0, 51, 51, 51, 51, 34, 35, 34, 6, 51, 51, 51, 51, 51, 50, 34, 6, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 50, 34, 96, 51, 51, 51, 51, 51, 51, 38, 96, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 48, 0, 35, 51, 51, 102, 99, 51, 0, 0, 83, 51, 80, 102, 102, 48, 0, 0, 5, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 34, 37, 3, 0, 51, 51, 51, 51, 34, 37, 83, 0, 51, 51, 51, 51, 50, 34, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 6, 51, 51, 51, 51, 51, 51, 34, 6, 51, 51, 51, 51, 51, 51, 34, 96, 51, 51, 51, 51, 51, 51, 34, 96, 51, 51, 51, 51, 51, 51, 118, 0, 51, 51, 51, 51, 51, 51, 48, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 35, 51, 51, 54, 99, 51, 48, 0, 35, 51, 80, 102, 6, 48, 0, 0, 35, 85, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 50, 34, 51, 48, 51, 51, 51, 51, 50, 34, 51, 48, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 6, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 119, 96, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 54, 102, 51, 48, 0, 51, 51, 53, 96, 0, 51, 0, 0, 115, 53, 80, 0, 0, 0, 0, 0, 119, 48, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 56, 51, 51, 51, 51, 51, 51, 51, 48, 51, 51, 51, 51, 51, 51, 51, 54, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 51, 96, 51, 51, 51, 51, 51, 51, 55, 96, 51, 51, 51, 51, 51, 51, 119, 0, 51, 51, 51, 51, 51, 51, 55, 112, 51, 51, 51, 51, 51, 51, 55, 112, 51, 51, 51, 51, 51, 51, 51, 112, 51, 51, 51, 54, 103, 115, 48, 0, 51, 51, 51, 96, 7, 119, 0, 0, 119, 51, 80, 0, 0, 0, 0, 0, 119, 56, 0, 0, 0, 0, 0, 0, 51, 56, 51, 102, 104, 51, 51, 51, 51, 51, 54, 102, 104, 131, 115, 51, 51, 51, 102, 102, 102, 136, 119, 48, 51, 54, 102, 102, 102, 102, 136, 128, 51, 102, 102, 102, 102, 102, 102, 96, 51, 102, 102, 102, 102, 102, 102, 96, 56, 102, 102, 102, 102, 102, 102, 0, 56, 102, 102, 102, 102, 102, 102, 0, 136, 102, 102, 102, 102, 99, 56, 0, 136, 134, 102, 102, 102, 51, 55, 128, 56, 136, 102, 102, 104, 51, 55, 112, 51, 51, 136, 102, 103, 51, 119, 112, 51, 51, 56, 96, 7, 119, 119, 0, 51, 51, 136, 0, 8, 119, 0, 0, 119, 56, 128, 0, 0, 0, 0, 0, 135, 112, 0, 0, 0, 0, 0, 0, 55, 48, 102, 96, 0, 135, 115, 51, 119, 118, 102, 0, 0, 8, 119, 51, 54, 102, 102, 0, 0, 0, 135, 48, 54, 102, 96, 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 48, 0, 0, 0, 0, 0, 0, 51, 55, 0, 128, 0, 0, 0, 0, 51, 55, 128, 56, 136, 0, 0, 8, 119, 119, 128, 51, 136, 128, 0, 8, 135, 120, 0, 115, 136, 0, 0, 0, 136, 0, 0, 120, 128, 0, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 120, 128, 0, 0, 0, 8, 119, 51, 119, 0, 0, 0, 0, 0, 119, 56, 112, 0, 0, 0, 0, 0, 7, 48, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 131, 56, 0, 0, 0, 0, 0, 0, 51, 56, 0, 128, 0, 0, 0, 0, 55, 136, 0, 51, 0, 0, 0, 0, 8, 128, 0, 56, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 115, 51, 112, 0, 0, 0, 0, 0, 135, 48, 48, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 128, 0, 0, 0, 0, 0, 0, 136, 128, 0, 0, 0, 0, 0, 0, 136, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 51, 56, 128, 0, 0, 0, 0, 0, 3, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 48, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 3, 35, 13, 46, 8, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 4, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 17, 222, 188, 154, 120, 86, 52, 34, 34, 222, 188, 154, 120, 86, 69, 51, 51, 222, 188, 154, 120, 102, 86, 68, 68, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 69, 3, 48, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 69, 3, 0, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 4, 64, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 4, 0, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 85, 85, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 5, 0, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 2, 0, 222, 188, 154, 120, 86, 69, 0, 0, 222, 188, 154, 120, 102, 86, 0, 0, 239, 205, 171, 137, 119, 103, 5, 80, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 102, 102, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 6, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 53, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 6, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 154, 170, 154, 136, 136, 239, 205, 187, 171, 187, 171, 153, 153, 239, 221, 204, 188, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 103, 0, 0, 239, 205, 171, 137, 136, 120, 0, 96, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 171, 153, 170, 154, 136, 136, 239, 205, 187, 160, 187, 171, 153, 153, 239, 221, 204, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 18, 16, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 6, 0, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 11, 144, 170, 154, 136, 136, 239, 205, 11, 0, 187, 171, 153, 153, 239, 221, 204, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 2, 0, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 5, 0, 0, 222, 188, 154, 120, 102, 6, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 0, 0, 239, 205, 171, 137, 153, 137, 119, 119, 239, 205, 11, 144, 170, 154, 136, 136, 239, 205, 11, 0, 187, 171, 153, 153, 239, 221, 12, 0, 204, 188, 170, 170, 255, 238, 221, 205, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 0, 210, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 102, 0, 0, 0, 239, 205, 171, 137, 119, 7, 0, 0, 239, 205, 171, 137, 136, 120, 0, 0, 239, 205, 144, 136, 153, 137, 0, 112, 239, 205, 0, 0, 170, 154, 136, 136, 239, 205, 0, 0, 187, 171, 153, 153, 239, 221, 12, 0, 204, 188, 170, 170, 255, 238, 221, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 52, 18, 33, 222, 188, 154, 120, 86, 52, 0, 0, 213, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 102, 0, 0, 0, 239, 205, 171, 137, 119, 0, 0, 0, 239, 205, 11, 120, 136, 8, 0, 0, 239, 205, 0, 135, 153, 137, 0, 112, 239, 205, 0, 0, 170, 154, 8, 136, 239, 205, 0, 0, 187, 171, 153, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 221, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 34, 222, 188, 154, 120, 86, 4, 0, 17, 222, 188, 154, 120, 86, 4, 0, 16, 214, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 239, 205, 171, 137, 7, 0, 0, 0, 239, 205, 11, 112, 135, 0, 0, 0, 239, 205, 0, 112, 152, 9, 0, 0, 239, 13, 0, 0, 169, 154, 0, 136, 239, 205, 0, 0, 176, 171, 153, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 13, 192, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 18, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 4, 0, 0, 215, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 222, 188, 154, 120, 0, 0, 0, 0, 239, 205, 11, 0, 0, 0, 0, 0, 239, 205, 0, 96, 7, 0, 0, 0, 239, 205, 0, 0, 152, 9, 0, 0, 239, 13, 0, 0, 160, 10, 0, 0, 239, 13, 0, 0, 176, 11, 144, 153, 239, 221, 0, 0, 204, 188, 170, 170, 255, 238, 13, 0, 221, 205, 187, 187, 255, 255, 238, 222, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 32, 1, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 216, 188, 154, 120, 0, 0, 0, 0, 222, 188, 154, 8, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 176, 0, 0, 153, 239, 221, 0, 0, 204, 188, 160, 170, 255, 238, 13, 0, 221, 205, 187, 187, 255, 255, 238, 208, 238, 222, 204, 204, 255, 255, 255, 239, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 35, 1, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 154, 120, 6, 0, 0, 0, 217, 188, 154, 120, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 192, 12, 0, 170, 255, 238, 13, 0, 221, 13, 0, 187, 255, 255, 238, 208, 238, 222, 204, 204, 255, 255, 255, 63, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 52, 0, 0, 222, 188, 154, 120, 86, 0, 0, 0, 222, 188, 154, 120, 0, 0, 0, 0, 220, 188, 128, 7, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 30, 12, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 63, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 205, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 0, 0, 0, 160, 255, 238, 13, 0, 208, 13, 0, 187, 255, 255, 14, 208, 238, 222, 192, 204, 255, 255, 255, 111, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 188, 154, 120, 86, 4, 0, 0, 222, 188, 128, 103, 64, 3, 0, 0, 222, 188, 128, 7, 0, 0, 0, 0, 239, 205, 112, 0, 0, 0, 0, 0, 222, 12, 0, 0, 0, 0, 0, 0, 35, 188, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 111, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 221, 0, 0, 0, 0, 0, 0, 255, 238, 0, 0, 0, 0, 0, 176, 255, 255, 14, 0, 227, 222, 0, 204, 255, 255, 255, 159, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 128, 16, 222, 188, 128, 0, 0, 0, 0, 0, 222, 188, 128, 6, 0, 0, 0, 0, 222, 188, 154, 0, 0, 0, 0, 0, 239, 205, 11, 0, 0, 0, 0, 0, 222, 12, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 159, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 255, 238, 0, 0, 13, 0, 0, 0, 255, 255, 14, 0, 230, 14, 0, 0, 255, 255, 255, 207, 255, 239, 221, 221, 255, 255, 255, 255, 255, 255, 238, 238, 222, 12, 0, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 222, 188, 10, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 255, 238, 0, 48, 3, 0, 0, 0, 255, 255, 14, 206, 57, 14, 0, 0, 255, 255, 255, 255, 255, 239, 0, 208, 255, 255, 255, 255, 255, 255, 238, 238, 222, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 239, 13, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 96, 6, 0, 0, 0, 255, 255, 14, 254, 108, 14, 0, 0, 255, 255, 255, 255, 255, 239, 0, 0, 255, 255, 255, 255, 255, 255, 238, 0, 14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 144, 9, 0, 0, 0, 255, 255, 0, 254, 159, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 255, 14, 0, 192, 12, 0, 0, 0, 255, 255, 0, 240, 207, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 192, 156, 0, 0, 0, 0, 0, 0, 192, 204, 9, 0, 0, 15, 0, 0, 204, 204, 153, 0, 0, 15, 0, 204, 204, 204, 156, 9, 0, 207, 204, 204, 204, 204, 204, 153, 0, 207, 204, 204, 204, 204, 204, 204, 0, 255, 204, 204, 204, 204, 204, 204, 0, 255, 204, 204, 204, 204, 204, 204, 0, 255, 0, 192, 204, 204, 204, 204, 0, 15, 0, 0, 204, 204, 204, 12, 0, 15, 0, 0, 192, 204, 204, 0, 0, 15, 0, 0, 192, 204, 0, 0, 0, 255, 0, 0, 240, 207, 0, 0, 0, 255, 255, 0, 240, 255, 0, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 255, 207, 204, 15, 0, 0, 0, 240, 255, 255, 204, 12, 0, 15, 0, 255, 255, 255, 204, 204, 12, 255, 255, 255, 255, 255, 207, 204, 12, 255, 255, 255, 255, 255, 255, 204, 204, 255, 255, 255, 255, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 15, 240, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 0, 0, 255, 255, 255, 255, 15, 15, 0, 0, 240, 255, 255, 0, 0, 255, 0, 0, 240, 255, 15, 0, 0, 255, 255, 0, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 15, 240, 0, 0, 240, 255, 255, 255, 15, 0, 0, 0, 255, 255, 255, 255, 255, 0, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 15, 255, 15, 240, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 15, 0, 255, 255, 255, 255, 255, 15, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 240, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 15, 15, 240, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 4, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
-
- let packet = ClientboundLevelChunkWithLight::azalea_read(&mut Cursor::new(&bytes)).unwrap();
-
- let heightmaps_nbt = &packet.chunk_data.heightmaps;
- // necessary to make the unwrap_or work
- let empty_nbt = BaseNbt::default();
- let heightmaps = heightmaps_nbt.unwrap_or(&empty_nbt).deref();
-
- let chunk = Chunk::read_with_dimension_height(
- &mut Cursor::new(&packet.chunk_data.data),
- 256,
- 0,
- heightmaps,
- )
- .unwrap();
-
- assert_eq!(chunk.sections.len(), 16);
- }
-}
diff --git a/azalea-protocol/src/packets/game/c_player_chat.rs b/azalea-protocol/src/packets/game/c_player_chat.rs
index 3628fa95..a9a57301 100644
--- a/azalea-protocol/src/packets/game/c_player_chat.rs
+++ b/azalea-protocol/src/packets/game/c_player_chat.rs
@@ -2,17 +2,20 @@ use std::io::{Cursor, Write};
use azalea_buf::{AzBuf, AzaleaRead, AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError};
use azalea_chat::{
- translatable_component::{StringOrComponent, TranslatableComponent},
FormattedText,
+ translatable_component::{StringOrComponent, TranslatableComponent},
};
use azalea_core::bitset::BitSet;
use azalea_crypto::MessageSignature;
use azalea_protocol_macros::ClientboundGamePacket;
-use azalea_registry::{ChatType, OptionalRegistry};
+use azalea_registry::Holder;
+use simdnbt::owned::NbtCompound;
use uuid::Uuid;
#[derive(Clone, Debug, AzBuf, ClientboundGamePacket, PartialEq)]
pub struct ClientboundPlayerChat {
+ #[var]
+ pub global_index: u32,
pub sender: Uuid,
#[var]
pub index: u32,
@@ -52,34 +55,30 @@ pub enum FilterMask {
PartiallyFiltered(BitSet),
}
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, PartialEq, AzBuf)]
pub struct ChatTypeBound {
- pub chat_type: ChatType,
+ pub chat_type: Holder<azalea_registry::ChatType, DirectChatType>,
pub name: FormattedText,
pub target_name: Option<FormattedText>,
}
-impl AzaleaRead for ChatTypeBound {
- fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let Some(chat_type) = OptionalRegistry::<ChatType>::azalea_read(buf)?.0 else {
- return Err(BufReadError::Custom("ChatType cannot be None".to_owned()));
- };
- let name = FormattedText::azalea_read(buf)?;
- let target_name = Option::<FormattedText>::azalea_read(buf)?;
-
- Ok(ChatTypeBound {
- chat_type,
- name,
- target_name,
- })
- }
+
+#[derive(Clone, Debug, PartialEq, AzBuf)]
+pub struct DirectChatType {
+ pub chat: ChatTypeDecoration,
+ pub narration: ChatTypeDecoration,
}
-impl AzaleaWrite for ChatTypeBound {
- fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- OptionalRegistry(Some(self.chat_type)).azalea_write(buf)?;
- self.name.azalea_write(buf)?;
- self.target_name.azalea_write(buf)?;
- Ok(())
- }
+#[derive(Clone, Debug, PartialEq, AzBuf)]
+pub struct ChatTypeDecoration {
+ pub translation_key: String,
+ pub parameters: Vec<ChatTypeDecorationParameter>,
+ pub style: NbtCompound,
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, AzBuf)]
+pub enum ChatTypeDecorationParameter {
+ Sender = 0,
+ Target = 1,
+ Content = 2,
}
// must be in Client
@@ -106,8 +105,6 @@ impl ClientboundPlayerChat {
let content = self.content();
let target = self.chat_type.target_name.clone();
- let translation_key = self.chat_type.chat_type.chat_translation_key();
-
let mut args = vec![
StringOrComponent::FormattedText(sender),
StringOrComponent::FormattedText(content),
@@ -116,12 +113,22 @@ impl ClientboundPlayerChat {
args.push(StringOrComponent::FormattedText(target));
}
+ let translation_key = self.chat_type.translation_key();
let component = TranslatableComponent::new(translation_key.to_string(), args);
FormattedText::Translatable(component)
}
}
+impl ChatTypeBound {
+ pub fn translation_key<'a>(&'a self) -> &'a str {
+ match &self.chat_type {
+ Holder::Reference(r) => r.chat_translation_key(),
+ Holder::Direct(d) => d.chat.translation_key.as_str(),
+ }
+ }
+}
+
impl AzaleaRead for PackedMessageSignature {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
let id = u32::azalea_read_var(buf)?;
diff --git a/azalea-protocol/src/packets/game/c_set_equipment.rs b/azalea-protocol/src/packets/game/c_set_equipment.rs
index 234de5d9..ad691d66 100755
--- a/azalea-protocol/src/packets/game/c_set_equipment.rs
+++ b/azalea-protocol/src/packets/game/c_set_equipment.rs
@@ -80,22 +80,3 @@ impl EquipmentSlot {
}
}
}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_hypixel_set_equipment() {
- let mut cursor = Cursor::new(
- [
- 230, 25, 0, 1, 224, 6, 2, 0, 3, 0, 22, 79, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- ]
- .as_slice(),
- );
-
- let packet = ClientboundSetEquipment::azalea_read(&mut cursor).unwrap();
- println!("packet {packet:?}");
- assert_eq!(cursor.position(), cursor.get_ref().len() as u64);
- }
-}
diff --git a/azalea-protocol/src/packets/game/c_add_experience_orb.rs b/azalea-protocol/src/packets/game/c_test_instance_block_status.rs
index 295e1010..9dc958c1 100755..100644
--- a/azalea-protocol/src/packets/game/c_add_experience_orb.rs
+++ b/azalea-protocol/src/packets/game/c_test_instance_block_status.rs
@@ -1,12 +1,10 @@
use azalea_buf::AzBuf;
+use azalea_chat::FormattedText;
use azalea_core::position::Vec3;
use azalea_protocol_macros::ClientboundGamePacket;
-use azalea_world::MinecraftEntityId;
#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)]
-pub struct ClientboundAddExperienceOrb {
- #[var]
- pub id: MinecraftEntityId,
- pub pos: Vec3,
- pub value: u16,
+pub struct ClientboundTestInstanceBlockStatus {
+ pub status: FormattedText,
+ pub size: Option<Vec3>,
}
diff --git a/azalea-protocol/src/packets/game/c_update_advancements.rs b/azalea-protocol/src/packets/game/c_update_advancements.rs
index cd0c0b98..1c645965 100755
--- a/azalea-protocol/src/packets/game/c_update_advancements.rs
+++ b/azalea-protocol/src/packets/game/c_update_advancements.rs
@@ -13,6 +13,7 @@ pub struct ClientboundUpdateAdvancements {
pub added: Vec<AdvancementHolder>,
pub removed: Vec<ResourceLocation>,
pub progress: HashMap<ResourceLocation, AdvancementProgress>,
+ pub show_advancements: bool,
}
#[derive(Clone, Debug, AzBuf)]
@@ -161,6 +162,7 @@ mod tests {
)]
.into_iter()
.collect(),
+ show_advancements: false,
};
let mut data = Vec::new();
diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs
index e9c9e2a1..aae840bc 100755
--- a/azalea-protocol/src/packets/game/mod.rs
+++ b/azalea-protocol/src/packets/game/mod.rs
@@ -7,124 +7,124 @@ declare_state_packets!(GamePacket,
Clientbound => [
bundle_delimiter, // 0x00
add_entity, // 0x01
- add_experience_orb, // 0x02
- animate, // 0x03
- award_stats, // 0x04
- block_changed_ack, // 0x05
- block_destruction, // 0x06
- block_entity_data, // 0x07
- block_event, // 0x08
- block_update, // 0x09
- boss_event, // 0x0A
- change_difficulty, // 0x0B
- chunk_batch_finished, // 0x0C
- chunk_batch_start, // 0x0D
- chunks_biomes, // 0x0E
- clear_titles, // 0x0F
- command_suggestions, // 0x10
- commands, // 0x11
- container_close, // 0x12
- container_set_content, // 0x13
- container_set_data, // 0x14
- container_set_slot, // 0x15
- cookie_request, // 0x16
- cooldown, // 0x17
- custom_chat_completions, // 0x18
- custom_payload, // 0x19
- damage_event, // 0x1A
- debug_sample, // 0x1B
- delete_chat, // 0x1C
- disconnect, // 0x1D
- disguised_chat, // 0x1E
- entity_event, // 0x1F
- entity_position_sync, // 0x20
- explode, // 0x21
- forget_level_chunk, // 0x22
- game_event, // 0x23
- horse_screen_open, // 0x24
- hurt_animation, // 0x25
- initialize_border, // 0x26
- keep_alive, // 0x27
- level_chunk_with_light, // 0x28
- level_event, // 0x29
- level_particles, // 0x2A
- light_update, // 0x2B
- login, // 0x2C
- map_item_data, // 0x2D
- merchant_offers, // 0x2E
- move_entity_pos, // 0x2F
- move_entity_pos_rot, // 0x30
- move_minecart_along_track, // 0x31
- move_entity_rot, // 0x32
- move_vehicle, // 0x33
- open_book, // 0x34
- open_screen, // 0x35
- open_sign_editor, // 0x36
- ping, // 0x37
- pong_response, // 0x38
- place_ghost_recipe, // 0x39
- player_abilities, // 0x3A
- player_chat, // 0x3B
- player_combat_end, // 0x3C
- player_combat_enter, // 0x3D
- player_combat_kill, // 0x3E
- player_info_remove, // 0x3F
- player_info_update, // 0x40
- player_look_at, // 0x41
- player_position, // 0x42
- player_rotation, // 0x43
- recipe_book_add, // 0x44
- recipe_book_remove, // 0x45
- recipe_book_settings, // 0x46
- remove_entities, // 0x47
- remove_mob_effect, // 0x48
- reset_score, // 0x49
- resource_pack_pop, // 0x4A
- resource_pack_push, // 0x4B
- respawn, // 0x4C
- rotate_head, // 0x4D
- section_blocks_update, // 0x4E
- select_advancements_tab, // 0x4F
- server_data, // 0x50
- set_action_bar_text, // 0x51
- set_border_center, // 0x52
- set_border_lerp_size, // 0x53
- set_border_size, // 0x54
- set_border_warning_delay, // 0x55
- set_border_warning_distance, // 0x56
- set_camera, // 0x57
- set_chunk_cache_center, // 0x58
- set_chunk_cache_radius, // 0x59
- set_cursor_item, // 0x5A
- set_default_spawn_position, // 0x5B
- set_display_objective, // 0x5C
- set_entity_data, // 0x5D
- set_entity_link, // 0x5E
- set_entity_motion, // 0x5F
- set_equipment, // 0x60
- set_experience, // 0x61
- set_health, // 0x62
- set_held_slot, // 0x63
- set_objective, // 0x64
- set_passengers, // 0x65
- set_player_inventory, // 0x66
- set_player_team, // 0x67
- set_score, // 0x68
- set_simulation_distance, // 0x69
- set_subtitle_text, // 0x6A
- set_time, // 0x6B
- set_title_text, // 0x6C
- set_titles_animation, // 0x6D
- sound_entity, // 0x6E
- sound, // 0x6F
- start_configuration, // 0x70
- stop_sound, // 0x71
- store_cookie, // 0x72
- system_chat, // 0x73
- tab_list, // 0x74
- tag_query, // 0x75
- take_item_entity, // 0x76
- teleport_entity, // 0x77
+ animate, // 0x02
+ award_stats, // 0x03
+ block_changed_ack, // 0x04
+ block_destruction, // 0x05
+ block_entity_data, // 0x06
+ block_event, // 0x07
+ block_update, // 0x08
+ boss_event, // 0x09
+ change_difficulty, // 0x0A
+ chunk_batch_finished, // 0x0B
+ chunk_batch_start, // 0x0C
+ chunks_biomes, // 0x0D
+ clear_titles, // 0x0E
+ command_suggestions, // 0x0F
+ commands, // 0x10
+ container_close, // 0x11
+ container_set_content, // 0x12
+ container_set_data, // 0x13
+ container_set_slot, // 0x14
+ cookie_request, // 0x15
+ cooldown, // 0x16
+ custom_chat_completions, // 0x17
+ custom_payload, // 0x18
+ damage_event, // 0x19
+ debug_sample, // 0x1A
+ delete_chat, // 0x1B
+ disconnect, // 0x1C
+ disguised_chat, // 0x1D
+ entity_event, // 0x1E
+ entity_position_sync, // 0x1F
+ explode, // 0x20
+ forget_level_chunk, // 0x21
+ game_event, // 0x22
+ horse_screen_open, // 0x23
+ hurt_animation, // 0x24
+ initialize_border, // 0x25
+ keep_alive, // 0x26
+ level_chunk_with_light, // 0x27
+ level_event, // 0x28
+ level_particles, // 0x29
+ light_update, // 0x2A
+ login, // 0x2B
+ map_item_data, // 0x2C
+ merchant_offers, // 0x2D
+ move_entity_pos, // 0x2E
+ move_entity_pos_rot, // 0x2F
+ move_minecart_along_track, // 0x30
+ move_entity_rot, // 0x31
+ move_vehicle, // 0x32
+ open_book, // 0x33
+ open_screen, // 0x34
+ open_sign_editor, // 0x35
+ ping, // 0x36
+ pong_response, // 0x37
+ place_ghost_recipe, // 0x38
+ player_abilities, // 0x39
+ player_chat, // 0x3A
+ player_combat_end, // 0x3B
+ player_combat_enter, // 0x3C
+ player_combat_kill, // 0x3D
+ player_info_remove, // 0x3E
+ player_info_update, // 0x3F
+ player_look_at, // 0x40
+ player_position, // 0x41
+ player_rotation, // 0x42
+ recipe_book_add, // 0x43
+ recipe_book_remove, // 0x44
+ recipe_book_settings, // 0x45
+ remove_entities, // 0x46
+ remove_mob_effect, // 0x47
+ reset_score, // 0x48
+ resource_pack_pop, // 0x49
+ resource_pack_push, // 0x4A
+ respawn, // 0x4B
+ rotate_head, // 0x4C
+ section_blocks_update, // 0x4D
+ select_advancements_tab, // 0x4E
+ server_data, // 0x4F
+ set_action_bar_text, // 0x50
+ set_border_center, // 0x51
+ set_border_lerp_size, // 0x52
+ set_border_size, // 0x53
+ set_border_warning_delay, // 0x54
+ set_border_warning_distance, // 0x55
+ set_camera, // 0x56
+ set_chunk_cache_center, // 0x57
+ set_chunk_cache_radius, // 0x58
+ set_cursor_item, // 0x59
+ set_default_spawn_position, // 0x5A
+ set_display_objective, // 0x5B
+ set_entity_data, // 0x5C
+ set_entity_link, // 0x5D
+ set_entity_motion, // 0x5E
+ set_equipment, // 0x5F
+ set_experience, // 0x60
+ set_health, // 0x61
+ set_held_slot, // 0x62
+ set_objective, // 0x63
+ set_passengers, // 0x64
+ set_player_inventory, // 0x65
+ set_player_team, // 0x66
+ set_score, // 0x67
+ set_simulation_distance, // 0x68
+ set_subtitle_text, // 0x69
+ set_time, // 0x6A
+ set_title_text, // 0x6B
+ set_titles_animation, // 0x6C
+ sound_entity, // 0x6D
+ sound, // 0x6E
+ start_configuration, // 0x6F
+ stop_sound, // 0x70
+ store_cookie, // 0x71
+ system_chat, // 0x72
+ tab_list, // 0x73
+ tag_query, // 0x74
+ take_item_entity, // 0x75
+ teleport_entity, // 0x76
+ test_instance_block_status, // 0x77
ticking_state, // 0x78
ticking_step, // 0x79
transfer, // 0x7A
@@ -195,10 +195,12 @@ declare_state_packets!(GamePacket,
set_creative_mode_slot, // 0x36
set_jigsaw_block, // 0x37
set_structure_block, // 0x38
- sign_update, // 0x39
- swing, // 0x3A
- teleport_to_entity, // 0x3B
- use_item_on, // 0x3C
- use_item, // 0x3D
+ set_test_block, // 0x39
+ sign_update, // 0x3A
+ swing, // 0x3B
+ teleport_to_entity, // 0x3C
+ test_instance_block_action, // 0x3D
+ use_item_on, // 0x3E
+ use_item, // 0x3F
]
);
diff --git a/azalea-protocol/src/packets/game/s_chat.rs b/azalea-protocol/src/packets/game/s_chat.rs
index 40c7e123..07702ddf 100755
--- a/azalea-protocol/src/packets/game/s_chat.rs
+++ b/azalea-protocol/src/packets/game/s_chat.rs
@@ -5,6 +5,7 @@ use azalea_protocol_macros::ServerboundGamePacket;
#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)]
pub struct ServerboundChat {
+ #[limit(256)]
pub message: String,
pub timestamp: u64,
pub salt: u64,
@@ -15,6 +16,7 @@ pub struct ServerboundChat {
#[derive(Clone, Debug, AzBuf, Default)]
pub struct LastSeenMessagesUpdate {
#[var]
- pub messages: u32,
+ pub offset: u32,
pub acknowledged: FixedBitSet<{ 20_usize.div_ceil(8) }>,
+ pub checksum: u8,
}
diff --git a/azalea-protocol/src/packets/game/s_set_structure_block.rs b/azalea-protocol/src/packets/game/s_set_structure_block.rs
index 14b403ab..b2f2aeb1 100755
--- a/azalea-protocol/src/packets/game/s_set_structure_block.rs
+++ b/azalea-protocol/src/packets/game/s_set_structure_block.rs
@@ -47,15 +47,17 @@ pub enum StructureMode {
Data = 3,
}
-#[derive(AzBuf, Clone, Copy, Debug)]
+#[derive(AzBuf, Clone, Copy, Debug, Default)]
pub enum Mirror {
+ #[default]
None = 0,
LeftRight = 1,
FrontBack = 2,
}
-#[derive(AzBuf, Clone, Copy, Debug)]
+#[derive(AzBuf, Clone, Copy, Debug, Default)]
pub enum Rotation {
+ #[default]
None = 0,
Clockwise90 = 1,
Clockwise180 = 2,
diff --git a/azalea-protocol/src/packets/game/s_set_test_block.rs b/azalea-protocol/src/packets/game/s_set_test_block.rs
new file mode 100644
index 00000000..579b689e
--- /dev/null
+++ b/azalea-protocol/src/packets/game/s_set_test_block.rs
@@ -0,0 +1,19 @@
+use azalea_buf::AzBuf;
+use azalea_core::position::BlockPos;
+use azalea_protocol_macros::ServerboundGamePacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)]
+pub struct ServerboundSetTestBlock {
+ pub position: BlockPos,
+ pub mode: TestBlockMode,
+ pub message: String,
+}
+
+#[derive(Clone, Copy, Debug, AzBuf, Default)]
+pub enum TestBlockMode {
+ #[default]
+ Start,
+ Log,
+ Fail,
+ Accept,
+}
diff --git a/azalea-protocol/src/packets/game/s_test_instance_block_action.rs b/azalea-protocol/src/packets/game/s_test_instance_block_action.rs
new file mode 100644
index 00000000..7ebda866
--- /dev/null
+++ b/azalea-protocol/src/packets/game/s_test_instance_block_action.rs
@@ -0,0 +1,44 @@
+use azalea_buf::AzBuf;
+use azalea_chat::FormattedText;
+use azalea_core::position::{BlockPos, Vec3i};
+use azalea_protocol_macros::ServerboundGamePacket;
+use azalea_registry::TestInstanceKind;
+
+use super::s_set_structure_block::Rotation;
+
+#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)]
+pub struct ServerboundTestInstanceBlockAction {
+ pub pos: BlockPos,
+ pub action: Action,
+ pub data: TestInstanceBlockEntityData,
+}
+
+#[derive(Clone, Copy, Debug, AzBuf, Default)]
+pub enum Action {
+ #[default]
+ Init,
+ Qurey,
+ Set,
+ Reset,
+ Save,
+ Export,
+ Run,
+}
+
+#[derive(Clone, Debug, AzBuf, Default)]
+pub struct TestInstanceBlockEntityData {
+ pub test: Option<TestInstanceKind>,
+ pub size: Vec3i,
+ pub rotation: Rotation,
+ pub ignore_entities: bool,
+ pub status: TestInstanceBlockEntityStatus,
+ pub error_message: Option<FormattedText>,
+}
+
+#[derive(Clone, Copy, Debug, AzBuf, Default)]
+pub enum TestInstanceBlockEntityStatus {
+ #[default]
+ Cleared,
+ Running,
+ Finished,
+}
diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs
index 5f28e340..ade5c915 100755
--- a/azalea-protocol/src/packets/mod.rs
+++ b/azalea-protocol/src/packets/mod.rs
@@ -11,8 +11,8 @@ use azalea_buf::{AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError};
use crate::read::ReadPacketError;
-pub const PROTOCOL_VERSION: i32 = 769;
-pub const VERSION_NAME: &str = "1.21.4";
+pub const PROTOCOL_VERSION: i32 = 770;
+pub const VERSION_NAME: &str = "1.21.5";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ConnectionProtocol {
diff --git a/azalea-registry/azalea-registry-macros/src/lib.rs b/azalea-registry/azalea-registry-macros/src/lib.rs
index ee0f2490..e2f88251 100755
--- a/azalea-registry/azalea-registry-macros/src/lib.rs
+++ b/azalea-registry/azalea-registry-macros/src/lib.rs
@@ -7,24 +7,28 @@ use syn::{
punctuated::Punctuated,
};
-struct RegistryItem {
+struct Registry {
name: Ident,
- id: String,
+ items: Vec<RegistryItem>,
+ attrs: Vec<Attribute>,
}
-struct Registry {
+struct RegistryItem {
+ attrs: Vec<Attribute>,
name: Ident,
- items: Vec<RegistryItem>,
- attributes: Vec<Attribute>,
+ id: String,
}
impl Parse for RegistryItem {
// Air => "minecraft:air"
fn parse(input: ParseStream) -> Result<Self> {
+ // parse annotations like #[default]
+ let attrs = input.call(Attribute::parse_outer).unwrap_or_default();
+
let name = input.parse()?;
input.parse::<Token![=>]>()?;
let id = input.parse::<LitStr>()?.value();
- Ok(RegistryItem { name, id })
+ Ok(RegistryItem { attrs, name, id })
}
}
@@ -36,7 +40,7 @@ impl Parse for Registry {
// }
// this also includes docs
- let attributes = input.call(Attribute::parse_outer).unwrap_or_default();
+ let attrs = input.call(Attribute::parse_outer).unwrap_or_default();
input.parse::<Token![enum]>()?;
let name = input.parse()?;
@@ -48,7 +52,7 @@ impl Parse for Registry {
Ok(Registry {
name,
items: items.into_iter().collect(),
- attributes,
+ attrs,
})
}
}
@@ -65,13 +69,15 @@ pub fn registry(input: TokenStream) -> TokenStream {
// }
let mut enum_items = quote! {};
for (i, item) in input.items.iter().enumerate() {
+ let attrs = &item.attrs;
let name = &item.name;
let protocol_id = i as u32;
enum_items.extend(quote! {
+ #(#attrs)*
#name = #protocol_id,
});
}
- let attributes = input.attributes;
+ let attributes = input.attrs;
generated.extend(quote! {
#(#attributes)*
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, azalea_buf::AzBuf, simdnbt::ToNbtTag, simdnbt::FromNbtTag)]
diff --git a/azalea-registry/src/data.rs b/azalea-registry/src/data.rs
index 17338c8f..7ae55119 100644
--- a/azalea-registry/src/data.rs
+++ b/azalea-registry/src/data.rs
@@ -1,41 +1,55 @@
-use azalea_buf::AzBuf;
+use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite};
+
+use crate::Registry;
/// A registry which has its values decided by the server in the
/// `ClientboundRegistryData` packet.
///
/// These can be resolved into their actual values with
/// `ResolvableDataRegistry` from azalea-core.
-pub trait DataRegistry {
+pub trait DataRegistry: AzaleaRead + AzaleaWrite {
const NAME: &'static str;
fn protocol_id(&self) -> u32;
+ fn new_raw(id: u32) -> Self;
}
-
-#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
-pub struct Enchantment {
- #[var]
- id: u32,
-}
-impl DataRegistry for Enchantment {
- const NAME: &'static str = "enchantment";
- fn protocol_id(&self) -> u32 {
- self.id
+impl<T: DataRegistry> Registry for T {
+ fn from_u32(value: u32) -> Option<Self> {
+ Some(Self::new_raw(value))
}
-}
-#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
-pub struct DimensionType {
- #[var]
- id: u32,
-}
-impl DimensionType {
- pub fn new_raw(id: u32) -> Self {
- Self { id }
+ fn to_u32(&self) -> u32 {
+ self.protocol_id()
}
}
-impl DataRegistry for DimensionType {
- const NAME: &'static str = "dimension_type";
- fn protocol_id(&self) -> u32 {
- self.id
- }
+
+macro_rules! data_registry {
+ ($name:ident, $registry_name:expr) => {
+ #[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
+ pub struct $name {
+ #[var]
+ id: u32,
+ }
+ impl DataRegistry for $name {
+ const NAME: &'static str = $registry_name;
+ fn protocol_id(&self) -> u32 {
+ self.id
+ }
+ fn new_raw(id: u32) -> Self {
+ Self { id }
+ }
+ }
+ };
}
+
+data_registry! {Enchantment, "enchantment"}
+data_registry! {DimensionType, "dimension_type"}
+data_registry! {DamageKind, "damage_kind"}
+data_registry! {WolfSoundVariant, "wolf_sound_variant"}
+data_registry! {CowVariant, "cow_variant"}
+data_registry! {ChickenVariant, "chicken_variant"}
+data_registry! {FrogVariant, "frog_variant"}
+data_registry! {CatVariant, "cat_variant"}
+data_registry! {PigVariant, "pig_variant"}
+data_registry! {PaintingVariant, "painting_variant"}
+data_registry! {WolfVariant, "wolf_variant"}
diff --git a/azalea-registry/src/extra.rs b/azalea-registry/src/extra.rs
index 1ba1f0a9..694b9820 100644
--- a/azalea-registry/src/extra.rs
+++ b/azalea-registry/src/extra.rs
@@ -7,24 +7,82 @@ use azalea_registry_macros::registry;
use crate::Registry;
registry! {
-enum WolfVariant {
- Pale => "minecraft:wolf",
- Spotted => "minecraft:wolf_spotted",
- Snowy => "minecraft:wolf_snowy",
- Black => "minecraft:wolf_black",
- Ashen => "minecraft:wolf_ashen",
- Rusty => "minecraft:wolf_rusty",
- Woods => "minecraft:wolf_woods",
- Chestnut => "minecraft:wolf_chestnut",
- Striped => "minecraft:wolf_striped",
+#[derive(Default)]
+enum FoxVariant {
+ #[default]
+ Red => "minecraft:red",
+ Snow => "minecraft:snow",
}
}
-#[allow(clippy::derivable_impls)]
-impl Default for WolfVariant {
- fn default() -> Self {
- WolfVariant::Pale
- }
+registry! {
+enum ParrotVariant {
+ RedBlue => "minecraft:red_blue",
+ Blue => "minecraft:blue",
+ Green => "minecraft:green",
+ YellowBlue => "minecraft:yellow_blue",
+ Gray => "minecraft:gray",
+}
+}
+
+registry! {
+#[derive(Default)]
+enum MooshroomVariant {
+ #[default]
+ Red => "minecraft:red",
+ Brown => "minecraft:brown",
+}
+}
+
+registry! {
+#[derive(Default)]
+enum RabbitVariant {
+ #[default]
+ Brown => "minecraft:brown",
+ White => "minecraft:white",
+ Black => "minecraft:black",
+ WhiteSplotched => "minecraft:white_splotched",
+ Gold => "minecraft:gold",
+ Salt => "minecraft:salt",
+ Evil => "minecraft:evil",
+}
+}
+
+registry! {
+#[derive(Default)]
+enum HorseVariant {
+ #[default]
+ White => "minecraft:white",
+ Creamy => "minecraft:creamy",
+ Chestnut => "minecraft:chestnut",
+ Brown => "minecraft:brown",
+ Black => "minecraft:black",
+ Gray => "minecraft:gray",
+ DarkBrown => "minecraft:dark_brown",
+}
+}
+
+registry! {
+#[derive(Default)]
+enum LlamaVariant {
+ #[default]
+ Creamy => "minecraft:creamy",
+ White => "minecraft:white",
+ Brown => "minecraft:brown",
+ Gray => "minecraft:gray",
+}
+}
+
+registry! {
+#[derive(Default)]
+enum AxolotlVariant {
+ #[default]
+ Lucy => "minecraft:lucy",
+ Wild => "minecraft:wild",
+ Gold => "minecraft:gold",
+ Cyan => "minecraft:cyan",
+ Blue => "minecraft:blue",
+}
}
registry! {
@@ -135,38 +193,3 @@ enum Instrument {
DreamGoatHorn => "minecraft:dream_goat_horn",
}
}
-
-registry! {
-enum PaintingVariant {
- Kebab => "minecraft:kebab",
- Aztec => "minecraft:aztec",
- Alban => "minecraft:alban",
- Aztec2 => "minecraft:aztec2",
- Bomb => "minecraft:bomb",
- Plant => "minecraft:plant",
- Wasteland => "minecraft:wasteland",
- Pool => "minecraft:pool",
- Courbet => "minecraft:courbet",
- Sea => "minecraft:sea",
- Sunset => "minecraft:sunset",
- Creebet => "minecraft:creebet",
- Wanderer => "minecraft:wanderer",
- Graham => "minecraft:graham",
- Match => "minecraft:match",
- Bust => "minecraft:bust",
- Stage => "minecraft:stage",
- Void => "minecraft:void",
- SkullAndRoses => "minecraft:skull_and_roses",
- Wither => "minecraft:wither",
- Fighters => "minecraft:fighters",
- Pointer => "minecraft:pointer",
- Pigscene => "minecraft:pigscene",
- BurningSkull => "minecraft:burning_skull",
- Skeleton => "minecraft:skeleton",
- Earth => "minecraft:earth",
- Wind => "minecraft:wind",
- Water => "minecraft:water",
- Fire => "minecraft:fire",
- DonkeyKong => "minecraft:donkey_kong",
-}
-}
diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs
index 59b8101f..11e44829 100755
--- a/azalea-registry/src/lib.rs
+++ b/azalea-registry/src/lib.rs
@@ -158,10 +158,9 @@ impl<R: Registry, Direct: AzaleaRead + AzaleaWrite> AzaleaRead for Holder<R, Dir
if id == 0 {
Ok(Self::Direct(Direct::azalea_read(buf)?))
} else {
- let Some(value) = R::from_u32(id - 1) else {
- return Err(BufReadError::UnexpectedEnumVariant {
- id: (id - 1) as i32,
- });
+ let id = id - 1;
+ let Some(value) = R::from_u32(id) else {
+ return Err(BufReadError::UnexpectedEnumVariant { id: id as i32 });
};
Ok(Self::Reference(value))
}
@@ -415,6 +414,9 @@ enum Block {
ShortGrass => "minecraft:short_grass",
Fern => "minecraft:fern",
DeadBush => "minecraft:dead_bush",
+ Bush => "minecraft:bush",
+ ShortDryGrass => "minecraft:short_dry_grass",
+ TallDryGrass => "minecraft:tall_dry_grass",
Seagrass => "minecraft:seagrass",
TallSeagrass => "minecraft:tall_seagrass",
Piston => "minecraft:piston",
@@ -546,6 +548,7 @@ enum Block {
Ice => "minecraft:ice",
SnowBlock => "minecraft:snow_block",
Cactus => "minecraft:cactus",
+ CactusFlower => "minecraft:cactus_flower",
Clay => "minecraft:clay",
SugarCane => "minecraft:sugar_cane",
Jukebox => "minecraft:jukebox",
@@ -1144,6 +1147,8 @@ enum Block {
WarpedWallSign => "minecraft:warped_wall_sign",
StructureBlock => "minecraft:structure_block",
Jigsaw => "minecraft:jigsaw",
+ TestBlock => "minecraft:test_block",
+ TestInstanceBlock => "minecraft:test_instance_block",
Composter => "minecraft:composter",
Target => "minecraft:target",
BeeNest => "minecraft:bee_nest",
@@ -1326,6 +1331,8 @@ enum Block {
FloweringAzalea => "minecraft:flowering_azalea",
MossCarpet => "minecraft:moss_carpet",
PinkPetals => "minecraft:pink_petals",
+ Wildflowers => "minecraft:wildflowers",
+ LeafLitter => "minecraft:leaf_litter",
MossBlock => "minecraft:moss_block",
BigDripleaf => "minecraft:big_dripleaf",
BigDripleafStem => "minecraft:big_dripleaf_stem",
@@ -1377,6 +1384,7 @@ enum Block {
ClosedEyeblossom => "minecraft:closed_eyeblossom",
PottedOpenEyeblossom => "minecraft:potted_open_eyeblossom",
PottedClosedEyeblossom => "minecraft:potted_closed_eyeblossom",
+ FireflyBush => "minecraft:firefly_bush",
}
}
@@ -1430,6 +1438,8 @@ enum BlockEntityKind {
Crafter => "minecraft:crafter",
TrialSpawner => "minecraft:trial_spawner",
Vault => "minecraft:vault",
+ TestBlock => "minecraft:test_block",
+ TestInstanceBlock => "minecraft:test_instance_block",
}
}
@@ -1452,22 +1462,6 @@ enum BlockPredicateKind {
}
registry! {
-enum CatVariant {
- Tabby => "minecraft:tabby",
- Black => "minecraft:black",
- Red => "minecraft:red",
- Siamese => "minecraft:siamese",
- BritishShorthair => "minecraft:british_shorthair",
- Calico => "minecraft:calico",
- Persian => "minecraft:persian",
- Ragdoll => "minecraft:ragdoll",
- White => "minecraft:white",
- Jellie => "minecraft:jellie",
- AllBlack => "minecraft:all_black",
-}
-}
-
-registry! {
enum ChunkStatus {
Empty => "minecraft:empty",
StructureStarts => "minecraft:structure_starts",
@@ -1533,6 +1527,7 @@ enum CommandArgumentKind {
ResourceOrTagKey => "minecraft:resource_or_tag_key",
Resource => "minecraft:resource",
ResourceKey => "minecraft:resource_key",
+ ResourceSelector => "minecraft:resource_selector",
TemplateMirror => "minecraft:template_mirror",
TemplateRotation => "minecraft:template_rotation",
Heightmap => "minecraft:heightmap",
@@ -1725,7 +1720,8 @@ enum EntityKind {
PiglinBrute => "minecraft:piglin_brute",
Pillager => "minecraft:pillager",
PolarBear => "minecraft:polar_bear",
- Potion => "minecraft:potion",
+ SplashPotion => "minecraft:splash_potion",
+ LingeringPotion => "minecraft:lingering_potion",
Pufferfish => "minecraft:pufferfish",
Rabbit => "minecraft:rabbit",
Ravager => "minecraft:ravager",
@@ -1798,14 +1794,6 @@ enum Fluid {
}
registry! {
-enum FrogVariant {
- Temperate => "minecraft:temperate",
- Warm => "minecraft:warm",
- Cold => "minecraft:cold",
-}
-}
-
-registry! {
enum GameEvent {
BlockActivate => "minecraft:block_activate",
BlockAttach => "minecraft:block_attach",
@@ -2098,9 +2086,13 @@ enum Item {
Cobweb => "minecraft:cobweb",
ShortGrass => "minecraft:short_grass",
Fern => "minecraft:fern",
+ Bush => "minecraft:bush",
Azalea => "minecraft:azalea",
FloweringAzalea => "minecraft:flowering_azalea",
DeadBush => "minecraft:dead_bush",
+ FireflyBush => "minecraft:firefly_bush",
+ ShortDryGrass => "minecraft:short_dry_grass",
+ TallDryGrass => "minecraft:tall_dry_grass",
Seagrass => "minecraft:seagrass",
SeaPickle => "minecraft:sea_pickle",
WhiteWool => "minecraft:white_wool",
@@ -2149,6 +2141,8 @@ enum Item {
SugarCane => "minecraft:sugar_cane",
Kelp => "minecraft:kelp",
PinkPetals => "minecraft:pink_petals",
+ Wildflowers => "minecraft:wildflowers",
+ LeafLitter => "minecraft:leaf_litter",
MossCarpet => "minecraft:moss_carpet",
MossBlock => "minecraft:moss_block",
PaleMossCarpet => "minecraft:pale_moss_carpet",
@@ -2217,6 +2211,7 @@ enum Item {
Ice => "minecraft:ice",
SnowBlock => "minecraft:snow_block",
Cactus => "minecraft:cactus",
+ CactusFlower => "minecraft:cactus_flower",
Clay => "minecraft:clay",
Jukebox => "minecraft:jukebox",
OakFence => "minecraft:oak_fence",
@@ -2719,6 +2714,8 @@ enum Item {
BambooChestRaft => "minecraft:bamboo_chest_raft",
StructureBlock => "minecraft:structure_block",
Jigsaw => "minecraft:jigsaw",
+ TestBlock => "minecraft:test_block",
+ TestInstanceBlock => "minecraft:test_instance_block",
TurtleHelmet => "minecraft:turtle_helmet",
TurtleScute => "minecraft:turtle_scute",
ArmadilloScute => "minecraft:armadillo_scute",
@@ -2855,6 +2852,8 @@ enum Item {
Book => "minecraft:book",
SlimeBall => "minecraft:slime_ball",
Egg => "minecraft:egg",
+ BlueEgg => "minecraft:blue_egg",
+ BrownEgg => "minecraft:brown_egg",
Compass => "minecraft:compass",
RecoveryCompass => "minecraft:recovery_compass",
Bundle => "minecraft:bundle",
@@ -3403,6 +3402,7 @@ enum MemoryModuleKind {
NearestPlayers => "minecraft:nearest_players",
NearestVisiblePlayer => "minecraft:nearest_visible_player",
NearestVisibleTargetablePlayer => "minecraft:nearest_visible_targetable_player",
+ NearestVisibleTargetablePlayers => "minecraft:nearest_visible_targetable_players",
WalkTarget => "minecraft:walk_target",
LookTarget => "minecraft:look_target",
AttackTarget => "minecraft:attack_target",
@@ -3581,6 +3581,7 @@ enum ParticleKind {
Infested => "minecraft:infested",
CherryLeaves => "minecraft:cherry_leaves",
PaleOakLeaves => "minecraft:pale_oak_leaves",
+ TintedLeaves => "minecraft:tinted_leaves",
SculkSoul => "minecraft:sculk_soul",
SculkCharge => "minecraft:sculk_charge",
SculkChargePop => "minecraft:sculk_charge_pop",
@@ -3658,6 +3659,7 @@ enum ParticleKind {
RaidOmen => "minecraft:raid_omen",
TrialOmen => "minecraft:trial_omen",
BlockCrumble => "minecraft:block_crumble",
+ Firefly => "minecraft:firefly",
}
}
@@ -4075,6 +4077,8 @@ enum SoundEvent {
ItemBundleInsert => "minecraft:item.bundle.insert",
ItemBundleInsertFail => "minecraft:item.bundle.insert_fail",
ItemBundleRemoveOne => "minecraft:item.bundle.remove_one",
+ BlockCactusFlowerBreak => "minecraft:block.cactus_flower.break",
+ BlockCactusFlowerPlace => "minecraft:block.cactus_flower.place",
BlockCakeAddCandle => "minecraft:block.cake.add_candle",
BlockCalciteBreak => "minecraft:block.calcite.break",
BlockCalciteStep => "minecraft:block.calcite.step",
@@ -4254,6 +4258,7 @@ enum SoundEvent {
ItemCrossbowQuickCharge2 => "minecraft:item.crossbow.quick_charge_2",
ItemCrossbowQuickCharge3 => "minecraft:item.crossbow.quick_charge_3",
ItemCrossbowShoot => "minecraft:item.crossbow.shoot",
+ BlockDeadbushIdle => "minecraft:block.deadbush.idle",
BlockDecoratedPotBreak => "minecraft:block.decorated_pot.break",
BlockDecoratedPotFall => "minecraft:block.decorated_pot.fall",
BlockDecoratedPotHit => "minecraft:block.decorated_pot.hit",
@@ -4379,6 +4384,7 @@ enum SoundEvent {
BlockFenceGateClose => "minecraft:block.fence_gate.close",
BlockFenceGateOpen => "minecraft:block.fence_gate.open",
ItemFirechargeUse => "minecraft:item.firecharge.use",
+ BlockFireflyBushIdle => "minecraft:block.firefly_bush.idle",
EntityFireworkRocketBlast => "minecraft:entity.firework_rocket.blast",
EntityFireworkRocketBlastFar => "minecraft:entity.firework_rocket.blast_far",
EntityFireworkRocketLargeBlast => "minecraft:entity.firework_rocket.large_blast",
@@ -4618,6 +4624,11 @@ enum SoundEvent {
EntityIllusionerPrepareBlindness => "minecraft:entity.illusioner.prepare_blindness",
EntityIllusionerPrepareMirror => "minecraft:entity.illusioner.prepare_mirror",
ItemInkSacUse => "minecraft:item.ink_sac.use",
+ BlockIronBreak => "minecraft:block.iron.break",
+ BlockIronStep => "minecraft:block.iron.step",
+ BlockIronPlace => "minecraft:block.iron.place",
+ BlockIronHit => "minecraft:block.iron.hit",
+ BlockIronFall => "minecraft:block.iron.fall",
BlockIronDoorClose => "minecraft:block.iron_door.close",
BlockIronDoorOpen => "minecraft:block.iron_door.open",
EntityIronGolemAttack => "minecraft:entity.iron_golem.attack",
@@ -4650,6 +4661,11 @@ enum SoundEvent {
BlockLavaAmbient => "minecraft:block.lava.ambient",
BlockLavaExtinguish => "minecraft:block.lava.extinguish",
BlockLavaPop => "minecraft:block.lava.pop",
+ BlockLeafLitterBreak => "minecraft:block.leaf_litter.break",
+ BlockLeafLitterStep => "minecraft:block.leaf_litter.step",
+ BlockLeafLitterPlace => "minecraft:block.leaf_litter.place",
+ BlockLeafLitterHit => "minecraft:block.leaf_litter.hit",
+ BlockLeafLitterFall => "minecraft:block.leaf_litter.fall",
EntityLeashKnotBreak => "minecraft:entity.leash_knot.break",
EntityLeashKnotPlace => "minecraft:entity.leash_knot.place",
BlockLeverClick => "minecraft:block.lever.click",
@@ -5064,6 +5080,8 @@ enum SoundEvent {
BlockSandHit => "minecraft:block.sand.hit",
BlockSandPlace => "minecraft:block.sand.place",
BlockSandStep => "minecraft:block.sand.step",
+ BlockSandIdle => "minecraft:block.sand.idle",
+ BlockSandWind => "minecraft:block.sand.wind",
BlockScaffoldingBreak => "minecraft:block.scaffolding.break",
BlockScaffoldingFall => "minecraft:block.scaffolding.fall",
BlockScaffoldingHit => "minecraft:block.scaffolding.hit",
@@ -5440,15 +5458,50 @@ enum SoundEvent {
ItemWolfArmorCrack => "minecraft:item.wolf_armor.crack",
ItemWolfArmorDamage => "minecraft:item.wolf_armor.damage",
ItemWolfArmorRepair => "minecraft:item.wolf_armor.repair",
+ EntityWolfShake => "minecraft:entity.wolf.shake",
+ EntityWolfStep => "minecraft:entity.wolf.step",
EntityWolfAmbient => "minecraft:entity.wolf.ambient",
EntityWolfDeath => "minecraft:entity.wolf.death",
EntityWolfGrowl => "minecraft:entity.wolf.growl",
- EntityWolfHowl => "minecraft:entity.wolf.howl",
EntityWolfHurt => "minecraft:entity.wolf.hurt",
EntityWolfPant => "minecraft:entity.wolf.pant",
- EntityWolfShake => "minecraft:entity.wolf.shake",
- EntityWolfStep => "minecraft:entity.wolf.step",
EntityWolfWhine => "minecraft:entity.wolf.whine",
+ EntityWolfPuglinAmbient => "minecraft:entity.wolf_puglin.ambient",
+ EntityWolfPuglinDeath => "minecraft:entity.wolf_puglin.death",
+ EntityWolfPuglinGrowl => "minecraft:entity.wolf_puglin.growl",
+ EntityWolfPuglinHurt => "minecraft:entity.wolf_puglin.hurt",
+ EntityWolfPuglinPant => "minecraft:entity.wolf_puglin.pant",
+ EntityWolfPuglinWhine => "minecraft:entity.wolf_puglin.whine",
+ EntityWolfSadAmbient => "minecraft:entity.wolf_sad.ambient",
+ EntityWolfSadDeath => "minecraft:entity.wolf_sad.death",
+ EntityWolfSadGrowl => "minecraft:entity.wolf_sad.growl",
+ EntityWolfSadHurt => "minecraft:entity.wolf_sad.hurt",
+ EntityWolfSadPant => "minecraft:entity.wolf_sad.pant",
+ EntityWolfSadWhine => "minecraft:entity.wolf_sad.whine",
+ EntityWolfAngryAmbient => "minecraft:entity.wolf_angry.ambient",
+ EntityWolfAngryDeath => "minecraft:entity.wolf_angry.death",
+ EntityWolfAngryGrowl => "minecraft:entity.wolf_angry.growl",
+ EntityWolfAngryHurt => "minecraft:entity.wolf_angry.hurt",
+ EntityWolfAngryPant => "minecraft:entity.wolf_angry.pant",
+ EntityWolfAngryWhine => "minecraft:entity.wolf_angry.whine",
+ EntityWolfGrumpyAmbient => "minecraft:entity.wolf_grumpy.ambient",
+ EntityWolfGrumpyDeath => "minecraft:entity.wolf_grumpy.death",
+ EntityWolfGrumpyGrowl => "minecraft:entity.wolf_grumpy.growl",
+ EntityWolfGrumpyHurt => "minecraft:entity.wolf_grumpy.hurt",
+ EntityWolfGrumpyPant => "minecraft:entity.wolf_grumpy.pant",
+ EntityWolfGrumpyWhine => "minecraft:entity.wolf_grumpy.whine",
+ EntityWolfBigAmbient => "minecraft:entity.wolf_big.ambient",
+ EntityWolfBigDeath => "minecraft:entity.wolf_big.death",
+ EntityWolfBigGrowl => "minecraft:entity.wolf_big.growl",
+ EntityWolfBigHurt => "minecraft:entity.wolf_big.hurt",
+ EntityWolfBigPant => "minecraft:entity.wolf_big.pant",
+ EntityWolfBigWhine => "minecraft:entity.wolf_big.whine",
+ EntityWolfCuteAmbient => "minecraft:entity.wolf_cute.ambient",
+ EntityWolfCuteDeath => "minecraft:entity.wolf_cute.death",
+ EntityWolfCuteGrowl => "minecraft:entity.wolf_cute.growl",
+ EntityWolfCuteHurt => "minecraft:entity.wolf_cute.hurt",
+ EntityWolfCutePant => "minecraft:entity.wolf_cute.pant",
+ EntityWolfCuteWhine => "minecraft:entity.wolf_cute.whine",
BlockWoodenDoorClose => "minecraft:block.wooden_door.close",
BlockWoodenDoorOpen => "minecraft:block.wooden_door.open",
BlockWoodenTrapdoorClose => "minecraft:block.wooden_trapdoor.close",
@@ -5626,6 +5679,7 @@ registry! {
enum WorldgenFeature {
NoOp => "minecraft:no_op",
Tree => "minecraft:tree",
+ FallenTree => "minecraft:fallen_tree",
Flower => "minecraft:flower",
NoBonemealFlower => "minecraft:no_bonemeal_flower",
RandomPatch => "minecraft:random_patch",
@@ -5888,6 +5942,8 @@ enum WorldgenTreeDecoratorKind {
Beehive => "minecraft:beehive",
AlterGround => "minecraft:alter_ground",
AttachedToLeaves => "minecraft:attached_to_leaves",
+ PlaceOnGround => "minecraft:place_on_ground",
+ AttachedToLogs => "minecraft:attached_to_logs",
}
}
@@ -5992,8 +6048,10 @@ enum BlockKind {
Brushable => "minecraft:brushable",
BubbleColumn => "minecraft:bubble_column",
BuddingAmethyst => "minecraft:budding_amethyst",
+ Bush => "minecraft:bush",
Button => "minecraft:button",
Cactus => "minecraft:cactus",
+ CactusFlower => "minecraft:cactus_flower",
Cake => "minecraft:cake",
CalibratedSculkSensor => "minecraft:calibrated_sculk_sensor",
Campfire => "minecraft:campfire",
@@ -6028,7 +6086,7 @@ enum BlockKind {
Crop => "minecraft:crop",
CryingObsidian => "minecraft:crying_obsidian",
DaylightDetector => "minecraft:daylight_detector",
- DeadBush => "minecraft:dead_bush",
+ DryVegetation => "minecraft:dry_vegetation",
DecoratedPot => "minecraft:decorated_pot",
DetectorRail => "minecraft:detector_rail",
DirtPath => "minecraft:dirt_path",
@@ -6050,6 +6108,7 @@ enum BlockKind {
Fence => "minecraft:fence",
FenceGate => "minecraft:fence_gate",
Fire => "minecraft:fire",
+ FireflyBush => "minecraft:firefly_bush",
FletchingTable => "minecraft:fletching_table",
Flower => "minecraft:flower",
FlowerPot => "minecraft:flower_pot",
@@ -6082,7 +6141,7 @@ enum BlockKind {
Lantern => "minecraft:lantern",
LavaCauldron => "minecraft:lava_cauldron",
LayeredCauldron => "minecraft:layered_cauldron",
- Leaves => "minecraft:leaves",
+ LeafLitter => "minecraft:leaf_litter",
Lectern => "minecraft:lectern",
Lever => "minecraft:lever",
Light => "minecraft:light",
@@ -6107,8 +6166,7 @@ enum BlockKind {
Nylium => "minecraft:nylium",
Observer => "minecraft:observer",
Piglinwallskull => "minecraft:piglinwallskull",
- ParticleLeaves => "minecraft:particle_leaves",
- PinkPetals => "minecraft:pink_petals",
+ FlowerBed => "minecraft:flower_bed",
PistonBase => "minecraft:piston_base",
PistonHead => "minecraft:piston_head",
PitcherCrop => "minecraft:pitcher_crop",
@@ -6133,6 +6191,7 @@ enum BlockKind {
Roots => "minecraft:roots",
RotatedPillar => "minecraft:rotated_pillar",
Sapling => "minecraft:sapling",
+ Sand => "minecraft:sand",
Scaffolding => "minecraft:scaffolding",
SculkCatalyst => "minecraft:sculk_catalyst",
Sculk => "minecraft:sculk",
@@ -6141,6 +6200,7 @@ enum BlockKind {
SculkVein => "minecraft:sculk_vein",
Seagrass => "minecraft:seagrass",
SeaPickle => "minecraft:sea_pickle",
+ ShortDryGrass => "minecraft:short_dry_grass",
ShulkerBox => "minecraft:shulker_box",
Skull => "minecraft:skull",
Slab => "minecraft:slab",
@@ -6167,11 +6227,16 @@ enum BlockKind {
StructureVoid => "minecraft:structure_void",
SugarCane => "minecraft:sugar_cane",
SweetBerryBush => "minecraft:sweet_berry_bush",
+ TallDryGrass => "minecraft:tall_dry_grass",
TallFlower => "minecraft:tall_flower",
TallGrass => "minecraft:tall_grass",
TallSeagrass => "minecraft:tall_seagrass",
Target => "minecraft:target",
+ Terracotta => "minecraft:terracotta",
+ Test => "minecraft:test",
+ TestInstance => "minecraft:test_instance",
TintedGlass => "minecraft:tinted_glass",
+ TintedParticleLeaves => "minecraft:tinted_particle_leaves",
Tnt => "minecraft:tnt",
TorchflowerCrop => "minecraft:torchflower_crop",
Torch => "minecraft:torch",
@@ -6184,6 +6249,7 @@ enum BlockKind {
TurtleEgg => "minecraft:turtle_egg",
TwistingVinesPlant => "minecraft:twisting_vines_plant",
TwistingVines => "minecraft:twisting_vines",
+ UntintedParticleLeaves => "minecraft:untinted_particle_leaves",
Vault => "minecraft:vault",
Vine => "minecraft:vine",
WallBanner => "minecraft:wall_banner",
@@ -6307,8 +6373,7 @@ enum DataComponentKind {
CanBreak => "minecraft:can_break",
AttributeModifiers => "minecraft:attribute_modifiers",
CustomModelData => "minecraft:custom_model_data",
- HideAdditionalTooltip => "minecraft:hide_additional_tooltip",
- HideTooltip => "minecraft:hide_tooltip",
+ TooltipDisplay => "minecraft:tooltip_display",
RepairCost => "minecraft:repair_cost",
CreativeSlotLock => "minecraft:creative_slot_lock",
EnchantmentGlintOverride => "minecraft:enchantment_glint_override",
@@ -6319,12 +6384,14 @@ enum DataComponentKind {
UseCooldown => "minecraft:use_cooldown",
DamageResistant => "minecraft:damage_resistant",
Tool => "minecraft:tool",
+ Weapon => "minecraft:weapon",
Enchantable => "minecraft:enchantable",
Equippable => "minecraft:equippable",
Repairable => "minecraft:repairable",
Glider => "minecraft:glider",
TooltipStyle => "minecraft:tooltip_style",
DeathProtection => "minecraft:death_protection",
+ BlocksAttacks => "minecraft:blocks_attacks",
StoredEnchantments => "minecraft:stored_enchantments",
DyedColor => "minecraft:dyed_color",
MapColor => "minecraft:map_color",
@@ -6334,6 +6401,7 @@ enum DataComponentKind {
ChargedProjectiles => "minecraft:charged_projectiles",
BundleContents => "minecraft:bundle_contents",
PotionContents => "minecraft:potion_contents",
+ PotionDurationScale => "minecraft:potion_duration_scale",
SuspiciousStewEffects => "minecraft:suspicious_stew_effects",
WritableBookContent => "minecraft:writable_book_content",
WrittenBookContent => "minecraft:written_book_content",
@@ -6343,8 +6411,10 @@ enum DataComponentKind {
BucketEntityData => "minecraft:bucket_entity_data",
BlockEntityData => "minecraft:block_entity_data",
Instrument => "minecraft:instrument",
+ ProvidesTrimMaterial => "minecraft:provides_trim_material",
OminousBottleAmplifier => "minecraft:ominous_bottle_amplifier",
JukeboxPlayable => "minecraft:jukebox_playable",
+ ProvidesBannerPatterns => "minecraft:provides_banner_patterns",
Recipes => "minecraft:recipes",
LodestoneTracker => "minecraft:lodestone_tracker",
FireworkExplosion => "minecraft:firework_explosion",
@@ -6359,6 +6429,31 @@ enum DataComponentKind {
Bees => "minecraft:bees",
Lock => "minecraft:lock",
ContainerLoot => "minecraft:container_loot",
+ BreakSound => "minecraft:break_sound",
+ VillagerVariant => "minecraft:villager/variant",
+ WolfVariant => "minecraft:wolf/variant",
+ WolfSoundVariant => "minecraft:wolf/sound_variant",
+ WolfCollar => "minecraft:wolf/collar",
+ FoxVariant => "minecraft:fox/variant",
+ SalmonSize => "minecraft:salmon/size",
+ ParrotVariant => "minecraft:parrot/variant",
+ TropicalFishPattern => "minecraft:tropical_fish/pattern",
+ TropicalFishBaseColor => "minecraft:tropical_fish/base_color",
+ TropicalFishPatternColor => "minecraft:tropical_fish/pattern_color",
+ MooshroomVariant => "minecraft:mooshroom/variant",
+ RabbitVariant => "minecraft:rabbit/variant",
+ PigVariant => "minecraft:pig/variant",
+ CowVariant => "minecraft:cow/variant",
+ ChickenVariant => "minecraft:chicken/variant",
+ FrogVariant => "minecraft:frog/variant",
+ HorseVariant => "minecraft:horse/variant",
+ PaintingVariant => "minecraft:painting/variant",
+ LlamaVariant => "minecraft:llama/variant",
+ AxolotlVariant => "minecraft:axolotl/variant",
+ CatVariant => "minecraft:cat/variant",
+ CatCollar => "minecraft:cat/collar",
+ SheepColor => "minecraft:sheep/color",
+ ShulkerColor => "minecraft:shulker/color",
}
}
@@ -6370,39 +6465,6 @@ enum EntitySubPredicateKind {
Slime => "minecraft:slime",
Raider => "minecraft:raider",
Sheep => "minecraft:sheep",
- Axolotl => "minecraft:axolotl",
- Fox => "minecraft:fox",
- Mooshroom => "minecraft:mooshroom",
- Rabbit => "minecraft:rabbit",
- Horse => "minecraft:horse",
- Llama => "minecraft:llama",
- Villager => "minecraft:villager",
- Parrot => "minecraft:parrot",
- Salmon => "minecraft:salmon",
- TropicalFish => "minecraft:tropical_fish",
- Painting => "minecraft:painting",
- Cat => "minecraft:cat",
- Frog => "minecraft:frog",
- Wolf => "minecraft:wolf",
-}
-}
-
-registry! {
-enum ItemSubPredicateKind {
- Damage => "minecraft:damage",
- Enchantments => "minecraft:enchantments",
- StoredEnchantments => "minecraft:stored_enchantments",
- PotionContents => "minecraft:potion_contents",
- CustomData => "minecraft:custom_data",
- Container => "minecraft:container",
- BundleContents => "minecraft:bundle_contents",
- FireworkExplosion => "minecraft:firework_explosion",
- Fireworks => "minecraft:fireworks",
- WritableBookContent => "minecraft:writable_book_content",
- WrittenBookContent => "minecraft:written_book_content",
- AttributeModifiers => "minecraft:attribute_modifiers",
- Trim => "minecraft:trim",
- JukeboxPlayable => "minecraft:jukebox_playable",
}
}
@@ -6625,3 +6687,66 @@ enum SlotDisplay {
Composite => "minecraft:composite",
}
}
+
+registry! {
+enum TicketKind {
+ Start => "minecraft:start",
+ Dragon => "minecraft:dragon",
+ PlayerLoading => "minecraft:player_loading",
+ PlayerSimulation => "minecraft:player_simulation",
+ Forced => "minecraft:forced",
+ Portal => "minecraft:portal",
+ EnderPearl => "minecraft:ender_pearl",
+ Unknown => "minecraft:unknown",
+}
+}
+
+registry! {
+enum TestEnvironmentDefinitionKind {
+ AllOf => "minecraft:all_of",
+ GameRules => "minecraft:game_rules",
+ TimeOfDay => "minecraft:time_of_day",
+ Weather => "minecraft:weather",
+ Function => "minecraft:function",
+}
+}
+
+registry! {
+enum TestFunction {
+ AlwaysPass => "minecraft:always_pass",
+}
+}
+
+registry! {
+enum TestInstanceKind {
+ BlockBased => "minecraft:block_based",
+ Function => "minecraft:function",
+}
+}
+
+registry! {
+enum DataComponentPredicateKind {
+ Damage => "minecraft:damage",
+ Enchantments => "minecraft:enchantments",
+ StoredEnchantments => "minecraft:stored_enchantments",
+ PotionContents => "minecraft:potion_contents",
+ CustomData => "minecraft:custom_data",
+ Container => "minecraft:container",
+ BundleContents => "minecraft:bundle_contents",
+ FireworkExplosion => "minecraft:firework_explosion",
+ Fireworks => "minecraft:fireworks",
+ WritableBookContent => "minecraft:writable_book_content",
+ WrittenBookContent => "minecraft:written_book_content",
+ AttributeModifiers => "minecraft:attribute_modifiers",
+ Trim => "minecraft:trim",
+ JukeboxPlayable => "minecraft:jukebox_playable",
+}
+}
+
+registry! {
+enum SpawnConditionKind {
+ Structure => "minecraft:structure",
+ MoonBrightness => "minecraft:moon_brightness",
+ Biome => "minecraft:biome",
+}
+}
diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs
index 08def1b3..ffabba8c 100644
--- a/azalea-registry/src/tags/blocks.rs
+++ b/azalea-registry/src/tags/blocks.rs
@@ -360,8 +360,10 @@ pub static BEE_ATTRACTIVE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::MangrovePropagule,
Block::CherryLeaves,
Block::PinkPetals,
+ Block::Wildflowers,
Block::ChorusFlower,
Block::SporeBlossom,
+ Block::CactusFlower,
])
});
pub static BEE_GROWABLES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@@ -383,9 +385,6 @@ pub static BEEHIVES: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::BeeNest, Block::Beehive]));
pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
- Block::Farmland,
- Block::Clay,
- Block::MossBlock,
Block::Dirt,
Block::GrassBlock,
Block::Podzol,
@@ -393,9 +392,11 @@ pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Mycelium,
Block::RootedDirt,
Block::MossBlock,
- Block::PaleMossBlock,
Block::Mud,
Block::MuddyMangroveRoots,
+ Block::Farmland,
+ Block::Clay,
+ Block::MossBlock,
])
});
pub static BIRCH_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@@ -450,6 +451,14 @@ pub static CAMEL_SAND_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::ne
Block::BlackConcretePowder,
])
});
+pub static CAMELS_SPAWNABLE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Block::Sand,
+ Block::RedSand,
+ Block::SuspiciousSand,
+ Block::SuspiciousSand,
+ ])
+});
pub static CAMPFIRES: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::Campfire, Block::SoulCampfire]));
pub static CANDLE_CAKES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@@ -753,41 +762,6 @@ pub static DARK_OAK_LOGS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::StrippedDarkOakWood,
])
});
-pub static DEAD_BUSH_MAY_PLACE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
- HashSet::from_iter(vec![
- Block::Sand,
- Block::RedSand,
- Block::SuspiciousSand,
- Block::SuspiciousSand,
- Block::Terracotta,
- Block::WhiteTerracotta,
- Block::OrangeTerracotta,
- Block::MagentaTerracotta,
- Block::LightBlueTerracotta,
- Block::YellowTerracotta,
- Block::LimeTerracotta,
- Block::PinkTerracotta,
- Block::GrayTerracotta,
- Block::LightGrayTerracotta,
- Block::CyanTerracotta,
- Block::PurpleTerracotta,
- Block::BlueTerracotta,
- Block::BrownTerracotta,
- Block::GreenTerracotta,
- Block::RedTerracotta,
- Block::BlackTerracotta,
- Block::Dirt,
- Block::GrassBlock,
- Block::Podzol,
- Block::CoarseDirt,
- Block::Mycelium,
- Block::RootedDirt,
- Block::MossBlock,
- Block::PaleMossBlock,
- Block::Mud,
- Block::MuddyMangroveRoots,
- ])
-});
pub static DEEPSLATE_ORE_REPLACEABLES: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::Deepslate, Block::Tuff]));
pub static DIAMOND_ORES: LazyLock<HashSet<Block>> =
@@ -852,6 +826,8 @@ pub static DRAGON_IMMUNE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::IronBars,
Block::RespawnAnchor,
Block::ReinforcedDeepslate,
+ Block::TestBlock,
+ Block::TestInstanceBlock,
])
});
pub static DRAGON_TRANSPARENT: LazyLock<HashSet<Block>> =
@@ -866,6 +842,50 @@ pub static DRIPSTONE_REPLACEABLE_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::ne
Block::Deepslate,
])
});
+pub static DRY_VEGETATION_MAY_PLACE_ON: LazyLock<HashSet<Block>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Block::Farmland,
+ Block::Sand,
+ Block::RedSand,
+ Block::SuspiciousSand,
+ Block::SuspiciousSand,
+ Block::Terracotta,
+ Block::WhiteTerracotta,
+ Block::OrangeTerracotta,
+ Block::MagentaTerracotta,
+ Block::LightBlueTerracotta,
+ Block::YellowTerracotta,
+ Block::LimeTerracotta,
+ Block::PinkTerracotta,
+ Block::GrayTerracotta,
+ Block::LightGrayTerracotta,
+ Block::CyanTerracotta,
+ Block::PurpleTerracotta,
+ Block::BlueTerracotta,
+ Block::BrownTerracotta,
+ Block::GreenTerracotta,
+ Block::RedTerracotta,
+ Block::BlackTerracotta,
+ Block::Dirt,
+ Block::GrassBlock,
+ Block::Podzol,
+ Block::CoarseDirt,
+ Block::Mycelium,
+ Block::RootedDirt,
+ Block::MossBlock,
+ Block::PaleMossBlock,
+ Block::Mud,
+ Block::MuddyMangroveRoots,
+ ])
+});
+pub static EDIBLE_FOR_SHEEP: LazyLock<HashSet<Block>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Block::ShortGrass,
+ Block::ShortDryGrass,
+ Block::TallDryGrass,
+ Block::Fern,
+ ])
+});
pub static EMERALD_ORES: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::EmeraldOre, Block::DeepslateEmeraldOre]));
pub static ENCHANTMENT_POWER_PROVIDER: LazyLock<HashSet<Block>> =
@@ -878,6 +898,9 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<HashSet<Block>> = LazyLock::n
Block::ShortGrass,
Block::Fern,
Block::DeadBush,
+ Block::Bush,
+ Block::ShortDryGrass,
+ Block::TallDryGrass,
Block::Seagrass,
Block::TallSeagrass,
Block::Fire,
@@ -896,6 +919,7 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<HashSet<Block>> = LazyLock::n
Block::WarpedRoots,
Block::NetherSprouts,
Block::CrimsonRoots,
+ Block::LeafLitter,
Block::HangingRoots,
])
});
@@ -918,6 +942,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::WarpedFungus,
Block::WarpedNylium,
Block::WarpedRoots,
+ Block::CactusFlower,
Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy,
@@ -1061,8 +1086,10 @@ pub static FLOWERS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::MangrovePropagule,
Block::CherryLeaves,
Block::PinkPetals,
+ Block::Wildflowers,
Block::ChorusFlower,
Block::SporeBlossom,
+ Block::CactusFlower,
Block::Dandelion,
Block::OpenEyeblossom,
Block::Poppy,
@@ -1439,6 +1466,8 @@ pub static INSIDE_STEP_SOUND_BLOCKS: LazyLock<HashSet<Block>> = LazyLock::new(||
Block::LilyPad,
Block::SmallAmethystBud,
Block::PinkPetals,
+ Block::Wildflowers,
+ Block::LeafLitter,
])
});
pub static INVALID_SPAWN_INSIDE: LazyLock<HashSet<Block>> =
@@ -1698,71 +1727,39 @@ pub static MANGROVE_ROOTS_CAN_GROW_THROUGH: LazyLock<HashSet<Block>> = LazyLock:
pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::NoteBlock,
- Block::AttachedMelonStem,
- Block::AttachedPumpkinStem,
- Block::Azalea,
Block::Bamboo,
Block::Barrel,
Block::BeeNest,
Block::Beehive,
- Block::Beetroots,
Block::BigDripleafStem,
Block::BigDripleaf,
Block::Bookshelf,
Block::BrownMushroomBlock,
- Block::BrownMushroom,
Block::Campfire,
- Block::Carrots,
Block::CartographyTable,
Block::CarvedPumpkin,
- Block::CaveVinesPlant,
- Block::CaveVines,
Block::Chest,
Block::ChorusFlower,
Block::ChorusPlant,
Block::Cocoa,
Block::Composter,
Block::CraftingTable,
- Block::CrimsonFungus,
Block::DaylightDetector,
- Block::DeadBush,
- Block::Fern,
Block::FletchingTable,
Block::GlowLichen,
- Block::ShortGrass,
- Block::HangingRoots,
Block::JackOLantern,
Block::Jukebox,
Block::Ladder,
- Block::LargeFern,
Block::Lectern,
- Block::LilyPad,
Block::Loom,
- Block::MelonStem,
Block::Melon,
Block::MushroomStem,
- Block::NetherWart,
- Block::Potatoes,
- Block::PumpkinStem,
Block::Pumpkin,
Block::RedMushroomBlock,
- Block::RedMushroom,
- Block::Scaffolding,
- Block::SmallDripleaf,
Block::SmithingTable,
Block::SoulCampfire,
- Block::SporeBlossom,
- Block::SugarCane,
- Block::SweetBerryBush,
- Block::TallGrass,
Block::TrappedChest,
- Block::TwistingVinesPlant,
- Block::TwistingVines,
Block::Vine,
- Block::WarpedFungus,
- Block::WeepingVinesPlant,
- Block::WeepingVines,
- Block::Wheat,
Block::MangroveRoots,
Block::BambooMosaic,
Block::BambooMosaicSlab,
@@ -1825,17 +1822,6 @@ pub static MINEABLE_AXE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::MangrovePlanks,
Block::BambooPlanks,
Block::CherryPlanks,
- Block::OakSapling,
- Block::SpruceSapling,
- Block::BirchSapling,
- Block::JungleSapling,
- Block::AcaciaSapling,
- Block::DarkOakSapling,
- Block::PaleOakSapling,
- Block::Azalea,
- Block::FloweringAzalea,
- Block::MangrovePropagule,
- Block::CherrySapling,
Block::OakButton,
Block::SpruceButton,
Block::BirchButton,
@@ -2026,16 +2012,6 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Shroomlight,
Block::Sponge,
Block::WetSponge,
- Block::JungleLeaves,
- Block::OakLeaves,
- Block::SpruceLeaves,
- Block::PaleOakLeaves,
- Block::DarkOakLeaves,
- Block::AcaciaLeaves,
- Block::BirchLeaves,
- Block::AzaleaLeaves,
- Block::FloweringAzaleaLeaves,
- Block::MangroveLeaves,
Block::SculkSensor,
Block::CalibratedSculkSensor,
Block::MossBlock,
@@ -2046,7 +2022,16 @@ pub static MINEABLE_HOE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::SculkCatalyst,
Block::SculkVein,
Block::SculkShrieker,
- Block::PinkPetals,
+ Block::JungleLeaves,
+ Block::OakLeaves,
+ Block::SpruceLeaves,
+ Block::PaleOakLeaves,
+ Block::DarkOakLeaves,
+ Block::AcaciaLeaves,
+ Block::BirchLeaves,
+ Block::AzaleaLeaves,
+ Block::FloweringAzaleaLeaves,
+ Block::MangroveLeaves,
Block::CherryLeaves,
])
});
@@ -2917,6 +2902,29 @@ pub static PLANKS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::CherryPlanks,
])
});
+pub static PLAYS_AMBIENT_DESERT_BLOCK_SOUNDS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Block::Sand,
+ Block::RedSand,
+ Block::Terracotta,
+ Block::WhiteTerracotta,
+ Block::OrangeTerracotta,
+ Block::MagentaTerracotta,
+ Block::LightBlueTerracotta,
+ Block::YellowTerracotta,
+ Block::LimeTerracotta,
+ Block::PinkTerracotta,
+ Block::GrayTerracotta,
+ Block::LightGrayTerracotta,
+ Block::CyanTerracotta,
+ Block::PurpleTerracotta,
+ Block::BlueTerracotta,
+ Block::BrownTerracotta,
+ Block::GreenTerracotta,
+ Block::RedTerracotta,
+ Block::BlackTerracotta,
+ ])
+});
pub static POLAR_BEARS_SPAWNABLE_ON_ALTERNATE: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::Ice]));
pub static PORTALS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
@@ -2980,6 +2988,9 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::ShortGrass,
Block::Fern,
Block::DeadBush,
+ Block::Bush,
+ Block::ShortDryGrass,
+ Block::TallDryGrass,
Block::Seagrass,
Block::TallSeagrass,
Block::Fire,
@@ -2998,9 +3009,70 @@ pub static REPLACEABLE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::WarpedRoots,
Block::NetherSprouts,
Block::CrimsonRoots,
+ Block::LeafLitter,
Block::HangingRoots,
])
});
+pub static REPLACEABLE_BY_MUSHROOMS: LazyLock<HashSet<Block>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Block::PaleMossCarpet,
+ Block::ShortGrass,
+ Block::Fern,
+ Block::DeadBush,
+ Block::Vine,
+ Block::GlowLichen,
+ Block::Sunflower,
+ Block::Lilac,
+ Block::RoseBush,
+ Block::Peony,
+ Block::TallGrass,
+ Block::LargeFern,
+ Block::HangingRoots,
+ Block::PitcherPlant,
+ Block::Water,
+ Block::Seagrass,
+ Block::TallSeagrass,
+ Block::BrownMushroom,
+ Block::RedMushroom,
+ Block::BrownMushroomBlock,
+ Block::RedMushroomBlock,
+ Block::WarpedRoots,
+ Block::NetherSprouts,
+ Block::CrimsonRoots,
+ Block::LeafLitter,
+ Block::ShortDryGrass,
+ Block::TallDryGrass,
+ Block::Bush,
+ Block::FireflyBush,
+ Block::JungleLeaves,
+ Block::OakLeaves,
+ Block::SpruceLeaves,
+ Block::PaleOakLeaves,
+ Block::DarkOakLeaves,
+ Block::AcaciaLeaves,
+ Block::BirchLeaves,
+ Block::AzaleaLeaves,
+ Block::FloweringAzaleaLeaves,
+ Block::MangroveLeaves,
+ Block::CherryLeaves,
+ Block::Dandelion,
+ Block::OpenEyeblossom,
+ Block::Poppy,
+ Block::BlueOrchid,
+ Block::Allium,
+ Block::AzureBluet,
+ Block::RedTulip,
+ Block::OrangeTulip,
+ Block::WhiteTulip,
+ Block::PinkTulip,
+ Block::OxeyeDaisy,
+ Block::Cornflower,
+ Block::LilyOfTheValley,
+ Block::WitherRose,
+ Block::Torchflower,
+ Block::ClosedEyeblossom,
+ ])
+});
pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::PaleMossCarpet,
@@ -3020,9 +3092,14 @@ pub static REPLACEABLE_BY_TREES: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::Water,
Block::Seagrass,
Block::TallSeagrass,
+ Block::Bush,
+ Block::FireflyBush,
Block::WarpedRoots,
Block::NetherSprouts,
Block::CrimsonRoots,
+ Block::LeafLitter,
+ Block::ShortDryGrass,
+ Block::TallDryGrass,
Block::JungleLeaves,
Block::OakLeaves,
Block::SpruceLeaves,
@@ -3486,49 +3563,15 @@ pub static STRIDER_WARM_BLOCKS: LazyLock<HashSet<Block>> =
LazyLock::new(|| HashSet::from_iter(vec![Block::Lava]));
pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
- Block::ShortGrass,
- Block::Fern,
- Block::DeadBush,
Block::Vine,
Block::GlowLichen,
- Block::Sunflower,
- Block::Lilac,
- Block::RoseBush,
- Block::Peony,
- Block::TallGrass,
- Block::LargeFern,
- Block::HangingRoots,
- Block::PitcherPlant,
- Block::BrownMushroom,
- Block::RedMushroom,
- Block::SugarCane,
Block::Pumpkin,
Block::CarvedPumpkin,
Block::JackOLantern,
Block::Melon,
- Block::AttachedPumpkinStem,
- Block::AttachedMelonStem,
- Block::LilyPad,
Block::Cocoa,
- Block::PitcherCrop,
- Block::SweetBerryBush,
- Block::CaveVines,
- Block::CaveVinesPlant,
- Block::SporeBlossom,
- Block::PinkPetals,
Block::BigDripleaf,
Block::BigDripleafStem,
- Block::SmallDripleaf,
- Block::NetherWart,
- Block::WarpedFungus,
- Block::WarpedRoots,
- Block::NetherSprouts,
- Block::CrimsonFungus,
- Block::WeepingVines,
- Block::WeepingVinesPlant,
- Block::TwistingVines,
- Block::TwistingVinesPlant,
- Block::CrimsonRoots,
Block::ChorusPlant,
Block::ChorusFlower,
Block::JungleLeaves,
@@ -3542,27 +3585,10 @@ pub static SWORD_EFFICIENT: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::FloweringAzaleaLeaves,
Block::MangroveLeaves,
Block::CherryLeaves,
- Block::OakSapling,
- Block::SpruceSapling,
- Block::BirchSapling,
- Block::JungleSapling,
- Block::AcaciaSapling,
- Block::DarkOakSapling,
- Block::PaleOakSapling,
- Block::Azalea,
- Block::FloweringAzalea,
- Block::MangrovePropagule,
- Block::CherrySapling,
- Block::Beetroots,
- Block::Carrots,
- Block::Potatoes,
- Block::Wheat,
- Block::MelonStem,
- Block::PumpkinStem,
- Block::TorchflowerCrop,
- Block::PitcherCrop,
])
});
+pub static SWORD_INSTANTLY_MINES: LazyLock<HashSet<Block>> =
+ LazyLock::new(|| HashSet::from_iter(vec![Block::Bamboo, Block::BambooSapling]));
pub static TERRACOTTA: LazyLock<HashSet<Block>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Block::Terracotta,
@@ -3682,6 +3708,7 @@ pub static WALL_POST_OVERRIDE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::SoulTorch,
Block::RedstoneTorch,
Block::Tripwire,
+ Block::CactusFlower,
Block::WhiteBanner,
Block::OrangeBanner,
Block::MagentaBanner,
@@ -3827,6 +3854,8 @@ pub static WITHER_IMMUNE: LazyLock<HashSet<Block>> = LazyLock::new(|| {
Block::MovingPiston,
Block::Light,
Block::ReinforcedDeepslate,
+ Block::TestBlock,
+ Block::TestInstanceBlock,
])
});
pub static WITHER_SUMMON_BASE_BLOCKS: LazyLock<HashSet<Block>> =
diff --git a/azalea-registry/src/tags/items.rs b/azalea-registry/src/tags/items.rs
index f7ec01a5..7e6758f4 100644
--- a/azalea-registry/src/tags/items.rs
+++ b/azalea-registry/src/tags/items.rs
@@ -108,8 +108,10 @@ pub static BEE_FOOD: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::MangrovePropagule,
Item::CherryLeaves,
Item::PinkPetals,
+ Item::Wildflowers,
Item::ChorusFlower,
Item::SporeBlossom,
+ Item::CactusFlower,
])
});
pub static BIRCH_LOGS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@@ -144,6 +146,8 @@ pub static BOATS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::CherryChestBoat,
])
});
+pub static BOOK_CLONING_TARGET: LazyLock<HashSet<Item>> =
+ LazyLock::new(|| HashSet::from_iter(vec![Item::WritableBook]));
pub static BOOKSHELF_BOOKS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Item::Book,
@@ -560,6 +564,8 @@ pub static DYEABLE: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::WolfArmor,
])
});
+pub static EGGS: LazyLock<HashSet<Item>> =
+ LazyLock::new(|| HashSet::from_iter(vec![Item::Egg, Item::BlueEgg, Item::BrownEgg]));
pub static EMERALD_ORES: LazyLock<HashSet<Item>> =
LazyLock::new(|| HashSet::from_iter(vec![Item::EmeraldOre, Item::DeepslateEmeraldOre]));
pub static ENCHANTABLE_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| {
@@ -985,6 +991,40 @@ pub static FISHES: LazyLock<HashSet<Item>> = LazyLock::new(|| {
Item::TropicalFish,
])
});
+pub static FLOWERS: LazyLock<HashSet<Item>> = LazyLock::new(|| {
+ HashSet::from_iter(vec![
+ Item::Sunflower,
+ Item::Lilac,
+ Item::Peony,
+ Item::RoseBush,
+ Item::PitcherPlant,
+ Item::FloweringAzaleaLeaves,
+ Item::FloweringAzalea,
+ Item::MangrovePropagule,
+ Item::CherryLeaves,
+ Item::PinkPetals,
+ Item::Wildflowers,
+ Item::ChorusFlower,
+ Item::SporeBlossom,
+ Item::CactusFlower,
+ Item::Dandelion,
+ Item::OpenEyeblossom,
+ Item::Poppy,
+ Item::BlueOrchid,
+ Item::Allium,
+ Item::AzureBluet,
+ Item::RedTulip,
+ Item::OrangeTulip,
+ Item::WhiteTulip,
+ Item::PinkTulip,
+ Item::OxeyeDaisy,
+ Item::Cornflower,
+ Item::LilyOfTheValley,
+ Item::WitherRose,
+ Item::Torchflower,
+ Item::ClosedEyeblossom,
+ ])
+});
pub static FOOT_ARMOR: LazyLock<HashSet<Item>> = LazyLock::new(|| {
HashSet::from_iter(vec![
Item::LeatherBoots,
diff --git a/azalea-world/src/chunk_storage.rs b/azalea-world/src/chunk_storage.rs
index db5ac877..d6243b87 100755
--- a/azalea-world/src/chunk_storage.rs
+++ b/azalea-world/src/chunk_storage.rs
@@ -1,5 +1,4 @@
use std::collections::hash_map::Entry;
-use std::str::FromStr;
use std::{
collections::HashMap,
fmt::Debug,
@@ -13,7 +12,6 @@ use azalea_buf::{AzaleaRead, AzaleaWrite, BufReadError};
use azalea_core::position::{BlockPos, ChunkBlockPos, ChunkPos, ChunkSectionBlockPos};
use nohash_hasher::IntMap;
use parking_lot::RwLock;
-use simdnbt::owned::NbtCompound;
use tracing::{debug, trace, warn};
use crate::heightmap::Heightmap;
@@ -177,7 +175,7 @@ impl PartialChunkStorage {
&mut self,
pos: &ChunkPos,
data: &mut Cursor<&[u8]>,
- heightmaps: &NbtCompound,
+ heightmaps: &[(HeightmapKind, Box<[u64]>)],
chunk_storage: &mut ChunkStorage,
) -> Result<(), BufReadError> {
debug!("Replacing chunk at {:?}", pos);
@@ -333,7 +331,7 @@ impl Chunk {
buf: &mut Cursor<&[u8]>,
dimension_height: u32,
min_y: i32,
- heightmaps_nbt: &NbtCompound,
+ heightmaps_data: &[(HeightmapKind, Box<[u64]>)],
) -> Result<Self, BufReadError> {
let section_count = dimension_height / SECTION_HEIGHT;
let mut sections = Vec::with_capacity(section_count as usize);
@@ -344,18 +342,10 @@ impl Chunk {
let sections = sections.into_boxed_slice();
let mut heightmaps = HashMap::new();
- for (name, heightmap) in heightmaps_nbt.iter() {
- let Ok(kind) = HeightmapKind::from_str(&name.to_str()) else {
- warn!("Unknown heightmap kind: {name}");
- continue;
- };
- let Some(data) = heightmap.long_array() else {
- warn!("Heightmap {name} is not a long array");
- continue;
- };
+ for (kind, data) in heightmaps_data {
let data: Box<[u64]> = data.iter().map(|x| *x as u64).collect();
- let heightmap = Heightmap::new(kind, dimension_height, min_y, data);
- heightmaps.insert(kind, heightmap);
+ let heightmap = Heightmap::new(*kind, dimension_height, min_y, data);
+ heightmaps.insert(*kind, heightmap);
}
Ok(Chunk {
@@ -449,7 +439,7 @@ impl AzaleaRead for Section {
let block_count = u16::azalea_read(buf)?;
// this is commented out because the vanilla server is wrong
- // ^ this comment was written ages ago. needs more investigation.
+ // TODO: ^ this comment was written ages ago. needs more investigation.
// assert!(
// block_count <= 16 * 16 * 16,
// "A section has more blocks than what should be possible. This is a bug!"
diff --git a/azalea-world/src/heightmap.rs b/azalea-world/src/heightmap.rs
index f1ef30d2..00ebad41 100644
--- a/azalea-world/src/heightmap.rs
+++ b/azalea-world/src/heightmap.rs
@@ -1,6 +1,7 @@
use std::{fmt::Display, str::FromStr};
use azalea_block::BlockState;
+use azalea_buf::AzBuf;
use azalea_core::{math, position::ChunkBlockPos};
use azalea_registry::tags::blocks::LEAVES;
@@ -8,7 +9,7 @@ use crate::{BitStorage, Section, chunk_storage::get_block_state_from_sections};
// (wg stands for worldgen)
-#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
+#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, AzBuf)]
pub enum HeightmapKind {
WorldSurfaceWg,
WorldSurface,
diff --git a/azalea-world/src/palette.rs b/azalea-world/src/palette.rs
index 97786e7c..699ee2d5 100755
--- a/azalea-world/src/palette.rs
+++ b/azalea-world/src/palette.rs
@@ -2,7 +2,6 @@ use std::io::{Cursor, Write};
use azalea_block::block_state::BlockStateIntegerRepr;
use azalea_buf::{AzaleaRead, AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError};
-use azalea_core::math;
use tracing::warn;
use crate::BitStorage;
@@ -45,37 +44,15 @@ impl PalettedContainer {
buf: &mut Cursor<&[u8]>,
container_type: &'static PalettedContainerKind,
) -> Result<Self, BufReadError> {
- let server_bits_per_entry = u8::azalea_read(buf)?;
- let palette_type = PaletteKind::from_bits_and_type(server_bits_per_entry, container_type);
+ let bits_per_entry = u8::azalea_read(buf)?;
+ let palette_type = PaletteKind::from_bits_and_type(bits_per_entry, container_type);
let palette = palette_type.read(buf)?;
let size = container_type.size();
- let data = Box::<[u64]>::azalea_read(buf)?;
-
- // we can only trust the bits per entry that we're sent if there's enough data
- // that it'd be global. if it's not global, then we have to calculate it
- // ourselves.
- // this almost never matters, except on some custom servers like hypixel limbo
- // TODO: this is incorrect. we should be getting the log2 of the max blockstate
- // or biome instead of data.len(). this code might be causing wrong data to be
- // read. ¯\_(ツ)_/¯
- let calculated_bits_per_entry = math::ceil_log2(data.len() as u32) as u8;
- let calculated_bits_per_entry_palette_kind =
- PaletteKind::from_bits_and_type(calculated_bits_per_entry, container_type);
- let bits_per_entry = if calculated_bits_per_entry_palette_kind == PaletteKind::Global {
- server_bits_per_entry
- } else {
- calculated_bits_per_entry
- };
-
- debug_assert!(
- bits_per_entry != 0 || data.is_empty(),
- "Bits per entry is 0 but data is not empty."
- );
let mut storage = match BitStorage::new(
- bits_per_entry.into(),
+ bits_per_entry as usize,
size,
- if data.is_empty() {
+ if bits_per_entry == 0 {
Some(Box::new([]))
} else {
// we're going to update the data after creating the bitstorage
@@ -90,9 +67,11 @@ impl PalettedContainer {
));
}
};
- // minecraft does this to allow the data to have extra padding bits. most
- // servers don't use this, but it's notably used by hypixel.
- storage.data = data;
+
+ // now read the data
+ for i in 0..storage.data.len() {
+ storage.data[i] = u64::azalea_read(buf)?;
+ }
Ok(PalettedContainer {
bits_per_entry,
diff --git a/codegen/genitemcomponents.py b/codegen/genitemcomponents.py
index 625af847..b0002ae2 100644
--- a/codegen/genitemcomponents.py
+++ b/codegen/genitemcomponents.py
@@ -1,167 +1,6 @@
-import lib.code.inventory
-import lib.code.registry
+import lib.code.item_components
import lib.code.version
-import lib.code.packet
-import lib.code.utils
-import lib.code.tags
-import lib.download
-import lib.extract
-import lib.utils
-
-ITEM_COMPONENTS_DIR = 'azalea-inventory/src/components.rs'
-
-def generate(version_id: str):
- expected_variants = get_expected_variants(version_id)
- actual_variants = get_actual_variants()
-
- new_variants = []
- removed_variants = []
-
- for variant in expected_variants:
- if variant not in actual_variants:
- new_variants.append(variant)
- for variant in actual_variants:
- if variant not in expected_variants:
- removed_variants.append(variant)
-
- print('New variants:')
- for variant in new_variants:
- print('-', variant)
- print()
- print('Removed variants:')
- for variant in removed_variants:
- print('-', variant)
- print()
-
- for variant in removed_variants:
- print(f'Removing {variant}...')
- remove_variant(variant)
- for variant in new_variants:
- print(f'Adding {variant}...')
- add_variant(variant)
-
- lib.code.utils.fmt()
-
- print('Done!')
-
-def get_expected_variants(version_id: str):
- expected_variants = []
- registries = lib.extract.get_registries_report(version_id)
-
- registry = registries['minecraft:data_component_type']
- registry_entries = sorted(
- registry['entries'].items(), key=lambda x: x[1]['protocol_id'])
- for variant_name, _variant in registry_entries:
- variant_struct_name = lib.utils.to_camel_case(variant_name.split(':')[-1])
- expected_variants.append(variant_struct_name)
-
- return expected_variants
-
-def get_actual_variants():
- actual_variants = []
- with open(ITEM_COMPONENTS_DIR, 'r') as f:
- code = f.read().split('\n')
-
- in_match = False
- for line in code:
- if in_match:
- if line == ' })':
- break
- variant_line_prefix = ' DataComponentKind::'
- if line.startswith(variant_line_prefix):
- variant = line[len(variant_line_prefix):].split(' ', 1)[0]
- actual_variants.append(variant)
- elif line == ' Ok(match kind {':
- in_match = True
-
- return actual_variants
-
-def remove_variant(variant: str):
- with open(ITEM_COMPONENTS_DIR, 'r') as f:
- code = f.read().split('\n')
-
- first_line_with_variant = None
- line_after_variant = None
-
- in_match = False
- for i, line in enumerate(list(code)):
- if in_match:
- if line == ' })':
- line_after_variant = i
- break
- variant_line_prefix = ' DataComponentKind::'
- if line.startswith(variant_line_prefix):
- if first_line_with_variant is not None:
- line_after_variant = i
- break
- variant_name = line[len(variant_line_prefix):].split(' ', 1)[0]
- if variant_name == variant:
- first_line_with_variant = i
- elif line == ' Ok(match kind {':
- in_match = True
-
- if first_line_with_variant is None:
- raise ValueError(f'Variant {variant} not found')
- if line_after_variant is None:
- raise ValueError(f'Couldn\'t find end of variant {variant}')
-
- code = code[:first_line_with_variant] + code[line_after_variant:]
-
- # now remove the struct
- line_before_struct = None # this is the #[derive] line
- line_after_struct = None # impl DataComponent for ... {\n...\n}
- for i, line in enumerate(list(code)):
- if line == f'pub struct {variant} {{' or line == f'pub struct {variant};':
- line_before_struct = i - 1
- elif line == f'impl DataComponent for {variant} {{':
- line_after_struct = i + 3
- break
- if line_before_struct is None:
- raise ValueError(f'Couldn\'t find struct {variant}')
- if line_after_struct is None:
- raise ValueError(f'Couldn\'t find impl DataComponent for {variant}')
-
- code = code[:line_before_struct] + code[line_after_struct:]
-
- with open(ITEM_COMPONENTS_DIR, 'w') as f:
- f.write('\n'.join(code))
-
-def add_variant(variant: str):
- with open(ITEM_COMPONENTS_DIR, 'r') as f:
- code = f.read().split('\n')
-
- in_match = False
- last_line_in_match = None
- for i, line in enumerate(list(code)):
- if in_match:
- if line == ' })':
- last_line_in_match = i
- break
- elif line == ' Ok(match kind {':
- in_match = True
-
- if last_line_in_match is None:
- raise ValueError('Couldn\'t find end of match')
-
- code = code[:last_line_in_match] + [
- f' DataComponentKind::{variant} => Box::new({variant}::azalea_read(buf)?),',
- ] + code[last_line_in_match:]
-
- # now insert the struct
- code.append('')
- code.append('#[derive(Clone, PartialEq, AzBuf)]')
- code.append(f'pub struct {variant} {{')
- code.append(' pub todo: todo!(), // see DataComponents.java')
- code.append('}')
- code.append(f'impl DataComponent for {variant} {{')
- code.append(f' const KIND: DataComponentKind = DataComponentKind::{variant};')
- code.append('}')
-
- with open(ITEM_COMPONENTS_DIR, 'w') as f:
- f.write('\n'.join(code))
-
- lib.code.utils.fmt()
if __name__ == '__main__':
version_id = lib.code.version.get_version_id()
- generate(version_id)
+ lib.code.item_components.generate(version_id)
diff --git a/codegen/lib/code/blocks.py b/codegen/lib/code/blocks.py
index 181ce774..aaa95ffa 100755
--- a/codegen/lib/code/blocks.py
+++ b/codegen/lib/code/blocks.py
@@ -33,8 +33,7 @@ def generate_blocks(blocks_report: dict, pixlyzer_block_datas: dict, ordered_blo
for property_id in list(block_data_report.get('properties', {}).keys()):
property_variants = block_data_report['properties'][property_id]
- property_struct_name = get_property_struct_name(
- block_id, property_id, property_variants)
+ property_struct_name = get_property_struct_name(block_id, property_id, property_variants)
if property_struct_name in properties:
if not properties[property_struct_name] == property_variants:
@@ -192,6 +191,10 @@ def get_property_struct_name(block_id: str, property_id: str, property_variants:
return 'TrialSpawnerState'
if property_variants == ['inactive', 'active', 'unlocking', 'ejecting']:
return 'VaultState'
+ if property_variants == ['start', 'log', 'fail', 'accept']:
+ return 'TestMode'
+ if property_variants == ['save', 'load', 'corner', 'data']:
+ return 'StructureMode'
if 'harp' in property_variants and 'didgeridoo' in property_variants:
return 'Sound'
if is_list_of_string_integers(property_variants):
diff --git a/codegen/lib/code/entity.py b/codegen/lib/code/entity.py
index a1f5525d..c27c4ce7 100644
--- a/codegen/lib/code/entity.py
+++ b/codegen/lib/code/entity.py
@@ -103,23 +103,24 @@ def generate_entity_metadata(burger_entities_data: dict, mappings: Mappings):
// This file is generated from codegen/lib/code/entity.py.
// Don't change it manually!
-use crate::particle::Particle;
-
-use super::{
- ArmadilloStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion,
- Rotations, SnifferStateKind, VillagerData,
-};
use azalea_chat::FormattedText;
use azalea_core::{
direction::Direction,
position::{BlockPos, Vec3},
};
use azalea_inventory::ItemStack;
+use azalea_registry::DataRegistry;
use bevy_ecs::{bundle::Bundle, component::Component};
use derive_more::{Deref, DerefMut};
use thiserror::Error;
use uuid::Uuid;
+use super::{
+ ArmadilloStateKind, EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion,
+ Rotations, SnifferStateKind, VillagerData,
+};
+use crate::particle::Particle;
+
#[derive(Error, Debug)]
pub enum UpdateMetadataError {
#[error("Wrong type ({0:?})")]
@@ -410,12 +411,15 @@ impl From<EntityDataValue> for UpdateMetadataError {
# some types don't have Default implemented
if type_name == 'CompoundTag':
default = 'simdnbt::owned::NbtCompound::default()'
- elif type_name == 'CatVariant':
- default = 'azalea_registry::CatVariant::Tabby'
- elif type_name == 'PaintingVariant':
- default = 'azalea_registry::PaintingVariant::Kebab'
- elif type_name == 'FrogVariant':
- default = 'azalea_registry::FrogVariant::Temperate'
+ # elif type_name == 'CatVariant':
+ # # TODO: the default should be Tabby but we don't have a way to get that from here
+ # default = 'azalea_registry::CatVariant::new_raw(0)'
+ # elif type_name == 'PaintingVariant':
+ # default = 'azalea_registry::PaintingVariant::Kebab'
+ # elif type_name == 'FrogVariant':
+ # default = 'azalea_registry::FrogVariant::Temperate'
+ elif type_name.endswith('Variant'):
+ default = f'azalea_registry::{type_name}::new_raw(0)'
elif type_name == 'VillagerData':
default = 'VillagerData { kind: azalea_registry::VillagerKind::Plains, profession: azalea_registry::VillagerProfession::None, level: 0 }'
else:
@@ -430,7 +434,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
default = f'BlockPos::new{default}'
elif type_name == 'OptionalBlockPos': # Option<BlockPos>
default = f'Some(BlockPos::new{default})' if default != 'Empty' else 'None'
- elif type_name == 'OptionalUuid':
+ elif type_name == 'OptionalLivingEntityReference':
default = f'Some(uuid::uuid!({default}))' if default != 'Empty' else 'None'
elif type_name == 'OptionalUnsignedInt':
default = f'OptionalUnsignedInt(Some({default}))' if default != 'Empty' else 'OptionalUnsignedInt(None)'
diff --git a/codegen/lib/code/item_components.py b/codegen/lib/code/item_components.py
new file mode 100644
index 00000000..3d4bf6a6
--- /dev/null
+++ b/codegen/lib/code/item_components.py
@@ -0,0 +1,164 @@
+import lib.code.inventory
+import lib.code.registry
+import lib.code.version
+import lib.code.packet
+import lib.code.utils
+import lib.code.tags
+import lib.download
+import lib.extract
+import lib.utils
+
+
+ITEM_COMPONENTS_DIR = 'azalea-inventory/src/components.rs'
+
+def generate(version_id: str):
+ expected_variants = get_expected_variants(version_id)
+ actual_variants = get_actual_variants()
+
+ new_variants = []
+ removed_variants = []
+
+ for variant in expected_variants:
+ if variant not in actual_variants:
+ new_variants.append(variant)
+ for variant in actual_variants:
+ if variant not in expected_variants:
+ removed_variants.append(variant)
+
+ print('New variants:')
+ for variant in new_variants:
+ print('-', variant)
+ print()
+ print('Removed variants:')
+ for variant in removed_variants:
+ print('-', variant)
+ print()
+
+ for variant in removed_variants:
+ print(f'Removing {variant}...')
+ remove_variant(variant)
+ for variant in new_variants:
+ print(f'Adding {variant}...')
+ add_variant(variant)
+
+ lib.code.utils.fmt()
+
+ print('Done!')
+
+def get_expected_variants(version_id: str):
+ expected_variants = []
+ registries = lib.extract.get_registries_report(version_id)
+
+ registry = registries['minecraft:data_component_type']
+ registry_entries = sorted(
+ registry['entries'].items(), key=lambda x: x[1]['protocol_id'])
+ for variant_name, _variant in registry_entries:
+ variant_struct_name = lib.utils.to_camel_case(variant_name.split(':')[-1])
+ expected_variants.append(variant_struct_name)
+
+ return expected_variants
+
+def get_actual_variants():
+ actual_variants = []
+ with open(ITEM_COMPONENTS_DIR, 'r') as f:
+ code = f.read().split('\n')
+
+ in_match = False
+ for line in code:
+ if in_match:
+ if line == ' })':
+ break
+ variant_line_prefix = ' DataComponentKind::'
+ if line.startswith(variant_line_prefix):
+ variant = line[len(variant_line_prefix):].split(' ', 1)[0]
+ actual_variants.append(variant)
+ elif line == ' Ok(match kind {':
+ in_match = True
+
+ return actual_variants
+
+def remove_variant(variant: str):
+ with open(ITEM_COMPONENTS_DIR, 'r') as f:
+ code = f.read().split('\n')
+
+ first_line_with_variant = None
+ line_after_variant = None
+
+ in_match = False
+ for i, line in enumerate(list(code)):
+ if in_match:
+ if line == ' })':
+ line_after_variant = i
+ break
+ variant_line_prefix = ' DataComponentKind::'
+ if line.startswith(variant_line_prefix):
+ if first_line_with_variant is not None:
+ line_after_variant = i
+ break
+ variant_name = line[len(variant_line_prefix):].split(' ', 1)[0]
+ if variant_name == variant:
+ first_line_with_variant = i
+ elif line == ' Ok(match kind {':
+ in_match = True
+
+ if first_line_with_variant is None:
+ raise ValueError(f'Variant {variant} not found')
+ if line_after_variant is None:
+ raise ValueError(f'Couldn\'t find end of variant {variant}')
+
+ code = code[:first_line_with_variant] + code[line_after_variant:]
+
+ # now remove the struct
+ line_before_struct = None # this is the #[derive] line
+ line_after_struct = None # impl DataComponent for ... {\n...\n}
+ for i, line in enumerate(list(code)):
+ if line == f'pub struct {variant} {{' or line == f'pub struct {variant};':
+ line_before_struct = i - 1
+ elif line == f'impl DataComponent for {variant} {{':
+ line_after_struct = i + 3
+ break
+ if line_before_struct is None:
+ raise ValueError(f'Couldn\'t find struct {variant}')
+ if line_after_struct is None:
+ raise ValueError(f'Couldn\'t find impl DataComponent for {variant}')
+
+ code = code[:line_before_struct] + code[line_after_struct:]
+
+ with open(ITEM_COMPONENTS_DIR, 'w') as f:
+ f.write('\n'.join(code))
+
+def add_variant(variant: str):
+ with open(ITEM_COMPONENTS_DIR, 'r') as f:
+ code = f.read().split('\n')
+
+ in_match = False
+ last_line_in_match = None
+ for i, line in enumerate(list(code)):
+ if in_match:
+ if line == ' })':
+ last_line_in_match = i
+ break
+ elif line == ' Ok(match kind {':
+ in_match = True
+
+ if last_line_in_match is None:
+ raise ValueError('Couldn\'t find end of match')
+
+ code = code[:last_line_in_match] + [
+ f' DataComponentKind::{variant} => Box::new({variant}::azalea_read(buf)?),',
+ ] + code[last_line_in_match:]
+
+ # now insert the struct
+ code.append('')
+ code.append('#[derive(Clone, PartialEq, AzBuf)]')
+ code.append(f'pub struct {variant} {{')
+ code.append(' pub todo: todo!(), // see DataComponents.java')
+ code.append('}')
+ code.append(f'impl DataComponent for {variant} {{')
+ code.append(f' const KIND: DataComponentKind = DataComponentKind::{variant};')
+ code.append('}')
+
+ with open(ITEM_COMPONENTS_DIR, 'w') as f:
+ f.write('\n'.join(code))
+
+ lib.code.utils.fmt()
diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py
index 1d60378a..5ae2d41f 100755
--- a/codegen/lib/code/packet.py
+++ b/codegen/lib/code/packet.py
@@ -14,6 +14,8 @@ MOJMAP_TO_AZALEA_STATE_NAME_MAPPING = {
}
AZALEA_TO_MOJMAP_STATE_NAME_MAPPING = {v: k for k, v in MOJMAP_TO_AZALEA_STATE_NAME_MAPPING.items()}
+PACKETS_DIR = '../azalea-protocol/src/packets'
+
def generate_packet(packets_report, packet_name, direction, state):
mojmap_state = AZALEA_TO_MOJMAP_STATE_NAME_MAPPING.get(state, state)
_packet_report = packets_report[mojmap_state][direction]['minecraft:' + packet_name]
@@ -24,7 +26,7 @@ def generate_packet(packets_report, packet_name, direction, state):
packet_derive_name = f'{to_camel_case(direction)}{to_camel_case(state)}Packet'
packet_struct_name = to_camel_case(f'{direction}_{packet_name}')
- packet_module_name = f'{direction[0]}_{packet_name}'
+ packet_module_name = get_packet_module_name(packet_name, direction)
code.append(f'use azalea_buf::AzBuf;')
code.append(f'use azalea_protocol_macros::{packet_derive_name};')
@@ -42,11 +44,16 @@ def generate_packet(packets_report, packet_name, direction, state):
# this won't handle writing to the packets/{state}/mod.rs file since we'd need to know the full packet list
-def set_packets(packets_report):
+def get_packet_module_name(packet_name: str, direction: str):
+ return f'{direction[0]}_{packet_name}'
+
+def set_packets(packets_report):
for mojmap_state in packets_report:
state = MOJMAP_TO_AZALEA_STATE_NAME_MAPPING.get(mojmap_state, mojmap_state)
- mod_rs_dir = get_dir_location(
- f'../azalea-protocol/src/packets/{state}/mod.rs')
+
+ expected_packet_module_names = set()
+ state_dir = get_dir_location(f'{PACKETS_DIR}/{state}')
+ mod_rs_dir = get_dir_location(f'{state_dir}/mod.rs')
serverbound_packets = packet_direction_report_to_packet_names(packets_report[mojmap_state]['serverbound'])
clientbound_packets = packet_direction_report_to_packet_names(packets_report[mojmap_state].get('clientbound', {}))
@@ -61,10 +68,12 @@ def set_packets(packets_report):
code.append(' Clientbound => [')
for packet_id, packet_name in enumerate(clientbound_packets):
code.append(f' {packet_name}, // {padded_hex(packet_id)}')
+ expected_packet_module_names.add(get_packet_module_name(packet_name, 'clientbound'))
code.append(' ],')
code.append(' Serverbound => [')
for packet_id, packet_name in enumerate(serverbound_packets):
code.append(f' {packet_name}, // {padded_hex(packet_id)}')
+ expected_packet_module_names.add(get_packet_module_name(packet_name, 'serverbound'))
code.append(' ]')
code.append(');')
code.append('')
@@ -72,6 +81,23 @@ def set_packets(packets_report):
with open(mod_rs_dir, 'w') as f:
f.write('\n'.join(code))
+ existing_packet_module_names = set()
+ # iterate over the directory
+ for file in os.listdir(state_dir):
+ if file.endswith('.rs') and file != 'mod.rs':
+ existing_packet_module_names.add(file[:-len('.rs')])
+ for packet_module_name in expected_packet_module_names - existing_packet_module_names:
+ direction = None
+ if packet_module_name.startswith('c_'):
+ direction = 'clientbound'
+ elif packet_module_name.startswith('s_'):
+ direction = 'serverbound'
+ else:
+ raise Exception(f'Invalid packet module name: {packet_module_name}')
+ packet = packet_module_name[2:]
+ generate_packet(packets_report, packet, direction, state)
+
+
def packet_direction_report_to_packet_names(report):
name_to_id = {}
for resource_location, packet in report.items():
@@ -82,8 +108,7 @@ def packet_direction_report_to_packet_names(report):
return names_sorted
def get_packets(direction: str, state: str):
- mod_rs_dir = get_dir_location(
- f'../azalea-protocol/src/packets/{state}/mod.rs')
+ mod_rs_dir = get_dir_location(f'{PACKETS_DIR}/{state}/mod.rs')
with open(mod_rs_dir, 'r') as f:
mod_rs = f.read().splitlines()
diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py
index c62b2b99..564133e2 100755
--- a/codegen/lib/extract.py
+++ b/codegen/lib/extract.py
@@ -85,8 +85,7 @@ def run_python_command_and_download_deps(command):
break
missing_lib = regex_match.group(1)
print('Missing required lib:', missing_lib)
- os.system(
- f'{determine_python_command()} -m pip install {missing_lib}')
+ subprocess.run(f'venv/bin/pip install {missing_lib}', cwd=os.path.dirname(os.path.dirname(__file__)))
print('ok')
@@ -99,7 +98,7 @@ def get_burger_data_for_version(version_id: str):
print('\033[92mRunning Burger...\033[m')
run_python_command_and_download_deps(
f'cd {get_dir_location("__cache__/Burger")} && '\
- f'{determine_python_command()} munch.py {get_dir_location("__cache__")}/client-{version_id}.jar '\
+ f'venv/bin/python munch.py {get_dir_location("__cache__")}/client-{version_id}.jar '\
f'--output {get_dir_location("__cache__")}/burger-{version_id}.json '\
f'--mappings {get_dir_location("__cache__")}/mappings-{version_id}.txt'
)
diff --git a/codegen/migrate.py b/codegen/migrate.py
index 53d5b588..30e33812 100755
--- a/codegen/migrate.py
+++ b/codegen/migrate.py
@@ -1,3 +1,4 @@
+import lib.code.item_components
import lib.code.inventory
import lib.code.language
import lib.code.registry
@@ -48,7 +49,7 @@ new_block_states_report = lib.extract.get_block_states_report(new_version_id)
new_registries = lib.extract.get_registries_report(new_version_id)
new_ordered_blocks = lib.code.blocks.get_ordered_blocks(new_registries)
lib.code.blocks.generate_blocks(
- new_block_states_report, new_pixlyzer_block_datas, new_ordered_blocks)
+ new_block_states_report, new_pixlyzer_block_datas, new_ordered_blocks, new_burger_data)
lib.code.shapes.generate_block_shapes(
new_pixlyzer_block_datas, new_shape_datas['shapes'], new_shape_datas['aabbs'], new_block_states_report)
@@ -60,10 +61,13 @@ print('Generating registries...')
import genregistries
genregistries.generate(new_version_id)
-# print('Generating entity metadata...')
+print('Generating entity metadata...')
burger_entities_data = new_burger_data[0]['entities']
lib.code.entity.generate_entity_metadata(burger_entities_data, new_mappings)
+print('Generating item components...')
+lib.code.item_components.generate(new_version_id)
+
print('Finishing touches, setting version in README and formatting code...')
lib.code.version.set_version_id(new_version_id)