From 7e9d80981476a46a966a7812c097ba2071daa8b9 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 21 Jan 2021 07:06:34 +0300 Subject: [PATCH] Lumecorn seed & rod --- .../betterend/blocks/BlueVineSeedBlock.java | 6 ++ .../blocks/GlowingPillarSeedBlock.java | 6 ++ .../betterend/blocks/LanceleafSeedBlock.java | 6 ++ .../ru/betterend/blocks/LumecornBlock.java | 53 +++++++++++++----- .../betterend/blocks/LumecornSeedBlock.java | 28 +++++++++ .../java/ru/betterend/registry/EndBlocks.java | 4 +- .../java/ru/betterend/registry/EndItems.java | 1 + .../betterend/blockstates/lumecorn_seed.json | 8 +++ .../assets/betterend/lang/en_us.json | 5 +- .../assets/betterend/lang/ru_ru.json | 5 +- .../lights/item/blue_vine_lantern.json | 7 +++ .../item/glowing_pillar_luminophor.json | 7 +++ .../betterend/lights/item/lumecorn_rod.json | 7 +++ .../materialmaps/block/lumecorn_seed.json | 3 + .../materialmaps/item/lumecorn_rod.json | 3 + .../materialmaps/item/lumecorn_seed.json | 1 + .../models/block/lumecorn_seed_0.json | 6 ++ .../models/block/lumecorn_seed_1.json | 6 ++ .../models/block/lumecorn_seed_2.json | 6 ++ .../models/block/lumecorn_seed_3.json | 6 ++ .../betterend/models/item/lumecorn_seed.json | 6 ++ .../item/{lumicorn.png => lumecorn_rod.png} | Bin .../betterend/textures/item/lumecorn_seed.png | Bin 0 -> 1591 bytes 23 files changed, 162 insertions(+), 18 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/LumecornSeedBlock.java create mode 100644 src/main/resources/assets/betterend/blockstates/lumecorn_seed.json create mode 100644 src/main/resources/assets/betterend/lights/item/blue_vine_lantern.json create mode 100644 src/main/resources/assets/betterend/lights/item/glowing_pillar_luminophor.json create mode 100644 src/main/resources/assets/betterend/lights/item/lumecorn_rod.json create mode 100644 src/main/resources/assets/betterend/materialmaps/block/lumecorn_seed.json create mode 100644 src/main/resources/assets/betterend/materialmaps/item/lumecorn_rod.json create mode 100644 src/main/resources/assets/betterend/materialmaps/item/lumecorn_seed.json create mode 100644 src/main/resources/assets/betterend/models/block/lumecorn_seed_0.json create mode 100644 src/main/resources/assets/betterend/models/block/lumecorn_seed_1.json create mode 100644 src/main/resources/assets/betterend/models/block/lumecorn_seed_2.json create mode 100644 src/main/resources/assets/betterend/models/block/lumecorn_seed_3.json create mode 100644 src/main/resources/assets/betterend/models/item/lumecorn_seed.json rename src/main/resources/assets/betterend/textures/item/{lumicorn.png => lumecorn_rod.png} (100%) create mode 100644 src/main/resources/assets/betterend/textures/item/lumecorn_seed.png diff --git a/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java b/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java index 38812d8c..a4710621 100644 --- a/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.util.Random; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -46,4 +47,9 @@ public class BlueVineSeedBlock extends EndPlantWithAgeBlock { protected boolean isTerrain(BlockState state) { return state.isOf(EndBlocks.END_MOSS) || state.isOf(EndBlocks.END_MYCELIUM); } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java b/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java index 4109481b..3c29919f 100644 --- a/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java @@ -4,6 +4,7 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.BlockState; import net.minecraft.block.Material; import net.minecraft.sound.BlockSoundGroup; @@ -66,4 +67,9 @@ public class GlowingPillarSeedBlock extends EndPlantWithAgeBlock { protected boolean isTerrain(BlockState state) { return state.isOf(EndBlocks.AMBER_MOSS); } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java b/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java index f4ddf4a6..182519aa 100644 --- a/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.util.Random; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos.Mutable; @@ -37,4 +38,9 @@ public class LanceleafSeedBlock extends EndPlantWithAgeBlock { protected boolean isTerrain(BlockState state) { return state.isOf(EndBlocks.AMBER_MOSS); } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/LumecornBlock.java b/src/main/java/ru/betterend/blocks/LumecornBlock.java index a201101c..309fb3bf 100644 --- a/src/main/java/ru/betterend/blocks/LumecornBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.block.Block; @@ -7,6 +10,8 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.block.ShapeContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; import net.minecraft.state.StateManager; import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.BlockPos; @@ -19,16 +24,21 @@ import ru.betterend.blocks.BlockProperties.LumecornShape; import ru.betterend.blocks.basis.BaseBlockNotFull; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; +import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndItems; import ru.betterend.registry.EndTags; +import ru.betterend.util.MHelper; public class LumecornBlock extends BaseBlockNotFull implements IRenderTypeable { public static final EnumProperty SHAPE = EnumProperty.of("shape", LumecornShape.class); - private static final VoxelShape SHAPE_BIG = Block.createCuboidShape(5, 0, 5, 11, 16, 11); - private static final VoxelShape SHAPE_MEDIUM = Block.createCuboidShape(6, 0, 6, 10, 16, 10); - private static final VoxelShape SHAPE_SMALL = Block.createCuboidShape(7, 0, 7, 9, 16, 9); + private static final VoxelShape SHAPE_BOTTOM = Block.createCuboidShape(6, 0, 6, 10, 16, 10); + private static final VoxelShape SHAPE_TOP = Block.createCuboidShape(6, 0, 6, 10, 8, 10); public LumecornBlock() { - super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).hardness(0.5F).luminance((state) -> { + super(FabricBlockSettings.of(Material.WOOD) + .breakByTool(FabricToolTags.AXES) + .hardness(0.5F) + .luminance((state) -> { return state.get(SHAPE).getLight(); })); } @@ -45,16 +55,7 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTypeable { @Override public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { - LumecornShape shape = state.get(SHAPE); - if (shape == LumecornShape.LIGHT_MIDDLE) { - return SHAPE_SMALL; - } - else if (shape == LumecornShape.LIGHT_TOP_MIDDLE) { - return SHAPE_MEDIUM; - } - else { - return SHAPE_BIG; - } + return state.get(SHAPE) == LumecornShape.LIGHT_TOP ? SHAPE_TOP : SHAPE_BOTTOM; } @Override @@ -63,9 +64,12 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTypeable { if (shape == LumecornShape.BOTTOM_BIG || shape == LumecornShape.BOTTOM_SMALL) { return world.getBlockState(pos.down()).isIn(EndTags.END_GROUND); } - else { + else if (shape == LumecornShape.LIGHT_TOP) { return world.getBlockState(pos.down()).isOf(this); } + else { + return world.getBlockState(pos.down()).isOf(this) && world.getBlockState(pos.up()).isOf(this); + } } @Override @@ -77,4 +81,23 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTypeable { return state; } } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + LumecornShape shape = state.get(SHAPE); + if (shape == LumecornShape.BOTTOM_BIG || shape == LumecornShape.BOTTOM_SMALL || shape == LumecornShape.MIDDLE) { + if (MHelper.RANDOM.nextBoolean()) { + return Collections.singletonList(new ItemStack(EndBlocks.LUMECORN_SEED)); + } + else { + return Collections.emptyList(); + } + } + if (MHelper.RANDOM.nextBoolean()) { + return Collections.singletonList(new ItemStack(EndItems.LUMECORN_ROD)); + } + else { + return Collections.emptyList(); + } + } } diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java new file mode 100644 index 00000000..de06b251 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -0,0 +1,28 @@ +package ru.betterend.blocks; + +import java.util.Random; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.blocks.basis.EndPlantWithAgeBlock; +import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndFeatures; + +public class LumecornSeedBlock extends EndPlantWithAgeBlock { + @Override + public void growAdult(StructureWorldAccess world, Random random, BlockPos pos) { + EndFeatures.LUMECORN.getFeature().generate(world, null, random, pos, null); + } + + @Override + protected boolean isTerrain(BlockState state) { + return state.isOf(EndBlocks.END_MOSS); + } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.NONE; + } +} diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 0560bb93..6d337615 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -57,6 +57,7 @@ import ru.betterend.blocks.LacugroveSaplingBlock; import ru.betterend.blocks.LanceleafBlock; import ru.betterend.blocks.LanceleafSeedBlock; import ru.betterend.blocks.LumecornBlock; +import ru.betterend.blocks.LumecornSeedBlock; import ru.betterend.blocks.MengerSpongeBlock; import ru.betterend.blocks.MengerSpongeWetBlock; import ru.betterend.blocks.MossyGlowshroomCapBlock; @@ -228,7 +229,8 @@ public class EndBlocks { public static final Block SMALL_JELLYSHROOM = registerBlock("small_jellyshroom", new SmallJellyshroomBlock()); - public static final Block LUMECORN = registerBlock("lumecorn", new LumecornBlock()); + public static final Block LUMECORN_SEED = registerBlock("lumecorn_seed", new LumecornSeedBlock()); + public static final Block LUMECORN = registerBlockNI("lumecorn", new LumecornBlock()); // Crops public static final Block BLOSSOM_BERRY = registerBlock("blossom_berry_seed", new EndCropBlock(EndItems.BLOSSOM_BERRY, PINK_MOSS)); diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 71c4230c..b9bc0d75 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -73,6 +73,7 @@ public class EndItems { public final static Item LEATHER_STRIPE = registerItem("leather_stripe"); public final static Item LEATHER_WRAPPED_STICK = registerItem("leather_wrapped_stick"); public final static Item SILK_FIBER = registerItem("silk_fiber"); + public final static Item LUMECORN_ROD = registerItem("lumecorn_rod"); // Armor // public static final Item TERMINITE_HELMET = registerItem("terminite_helmet", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.HEAD, makeItemSettings())); diff --git a/src/main/resources/assets/betterend/blockstates/lumecorn_seed.json b/src/main/resources/assets/betterend/blockstates/lumecorn_seed.json new file mode 100644 index 00000000..7277a13a --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/lumecorn_seed.json @@ -0,0 +1,8 @@ +{ + "variants": { + "age=0": { "model": "betterend:block/lumecorn_seed_0" }, + "age=1": { "model": "betterend:block/lumecorn_seed_1" }, + "age=2": { "model": "betterend:block/lumecorn_seed_2" }, + "age=3": { "model": "betterend:block/lumecorn_seed_3" } + } +} diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index d44bc57d..71f863e0 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -589,5 +589,8 @@ "block.betterend.thallasium_door": "Thallasium Door", "block.betterend.thallasium_plate": "Thallasium Pressure Plate", "block.betterend.thallasium_tile": "Thallasium Tile", - "block.betterend.thallasium_trapdoor": "Thallasium Trapdoor" + "block.betterend.thallasium_trapdoor": "Thallasium Trapdoor", + + "block.betterend.lumecorn_seed": "Lumecorn Seed", + "item.betterend.lumecorn_rod": "Lumecorn Rod" } diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index ed391bab..1d247de1 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -591,5 +591,8 @@ "block.betterend.thallasium_door": "Талласиевая дверь", "block.betterend.thallasium_plate": "Талласиевая нажимная плита", "block.betterend.thallasium_tile": "Талласиевая плитка", - "block.betterend.thallasium_trapdoor": "Талласиевый люк" + "block.betterend.thallasium_trapdoor": "Талласиевый люк", + + "block.betterend.lumecorn_seed": "Семя люмекорна", + "item.betterend.lumecorn_rod": "Стержень люмекорна" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/lights/item/blue_vine_lantern.json b/src/main/resources/assets/betterend/lights/item/blue_vine_lantern.json new file mode 100644 index 00000000..5e61fc7d --- /dev/null +++ b/src/main/resources/assets/betterend/lights/item/blue_vine_lantern.json @@ -0,0 +1,7 @@ +{ + "intensity": 0.5, + "red": 0.0, + "green": 0.0, + "blue": 1.0, + "worksInFluid": true +} diff --git a/src/main/resources/assets/betterend/lights/item/glowing_pillar_luminophor.json b/src/main/resources/assets/betterend/lights/item/glowing_pillar_luminophor.json new file mode 100644 index 00000000..adffdd3a --- /dev/null +++ b/src/main/resources/assets/betterend/lights/item/glowing_pillar_luminophor.json @@ -0,0 +1,7 @@ +{ + "intensity": 0.5, + "red": 1.0, + "green": 0.5, + "blue": 0.0, + "worksInFluid": true +} diff --git a/src/main/resources/assets/betterend/lights/item/lumecorn_rod.json b/src/main/resources/assets/betterend/lights/item/lumecorn_rod.json new file mode 100644 index 00000000..44c23281 --- /dev/null +++ b/src/main/resources/assets/betterend/lights/item/lumecorn_rod.json @@ -0,0 +1,7 @@ +{ + "intensity": 0.5, + "red": 0.5, + "green": 1.0, + "blue": 0.0, + "worksInFluid": true +} diff --git a/src/main/resources/assets/betterend/materialmaps/block/lumecorn_seed.json b/src/main/resources/assets/betterend/materialmaps/block/lumecorn_seed.json new file mode 100644 index 00000000..c19e0715 --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/block/lumecorn_seed.json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:waving_floor_glow_50" +} diff --git a/src/main/resources/assets/betterend/materialmaps/item/lumecorn_rod.json b/src/main/resources/assets/betterend/materialmaps/item/lumecorn_rod.json new file mode 100644 index 00000000..36db9946 --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/item/lumecorn_rod.json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:glow_50" +} diff --git a/src/main/resources/assets/betterend/materialmaps/item/lumecorn_seed.json b/src/main/resources/assets/betterend/materialmaps/item/lumecorn_seed.json new file mode 100644 index 00000000..69a88e3b --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/item/lumecorn_seed.json @@ -0,0 +1 @@ +{} diff --git a/src/main/resources/assets/betterend/models/block/lumecorn_seed_0.json b/src/main/resources/assets/betterend/models/block/lumecorn_seed_0.json new file mode 100644 index 00000000..b368c4dd --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/lumecorn_seed_0.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_no_distortion", + "textures": { + "texture": "betterend:block/lumecorn_0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lumecorn_seed_1.json b/src/main/resources/assets/betterend/models/block/lumecorn_seed_1.json new file mode 100644 index 00000000..a86effd6 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/lumecorn_seed_1.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_no_distortion", + "textures": { + "texture": "betterend:block/lumecorn_1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lumecorn_seed_2.json b/src/main/resources/assets/betterend/models/block/lumecorn_seed_2.json new file mode 100644 index 00000000..b73ac4a8 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/lumecorn_seed_2.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_no_distortion", + "textures": { + "texture": "betterend:block/lumecorn_2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lumecorn_seed_3.json b/src/main/resources/assets/betterend/models/block/lumecorn_seed_3.json new file mode 100644 index 00000000..3223318b --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/lumecorn_seed_3.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/cross_no_distortion", + "textures": { + "texture": "betterend:block/lumecorn_3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/lumecorn_seed.json b/src/main/resources/assets/betterend/models/item/lumecorn_seed.json new file mode 100644 index 00000000..b00d70f6 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/lumecorn_seed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "betterend:item/lumecorn_seed" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/item/lumicorn.png b/src/main/resources/assets/betterend/textures/item/lumecorn_rod.png similarity index 100% rename from src/main/resources/assets/betterend/textures/item/lumicorn.png rename to src/main/resources/assets/betterend/textures/item/lumecorn_rod.png diff --git a/src/main/resources/assets/betterend/textures/item/lumecorn_seed.png b/src/main/resources/assets/betterend/textures/item/lumecorn_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d72406f86f734a08eafd216bd2b6193b20f1d1 GIT binary patch literal 1591 zcmbVMTZr6L7*5wkdbi%XU0Z0HRqLh6NiwrDo6xvBovhB#&A4m_y6c1VOmb!>>?9{9 z+0N{`^-`odkBU;MqUeKC1p8JIrHf!$s}#WpMOf*sg$iov%4ln8o$+KYL8NMJAj!FW z=ld_;fBx!d=8<))?^;b!)Vg#^9V7n@!MpNi^4(f%K=NDVq$WIyT625wuAq**zKNo` zYi4%bAJ;}?9a|hUa1L=5%OPlr+BsNppgxIwI)@6TtuPlpnqz3wP?){_8m~D?R5VjF zF4{Ab$?7wcx@0he579d-G9j>#59x|kvOT$?Fil>WjDuys&`pRxsW6GaAU&>)(n;(h zx}S@&x)2rVxWoxDUJ|1_XptA?9^nFJL zpj<9<~W z*7n+IA_)T(=m3G^gOHj)Ll1Gzlv`>VH*|nX$U?U75v&kmNtQG%gkO`^vO=`y5AP=) zwPU*`+RIKm2#g^QPq{i8-cKy{bsTew*vDQG|3e(%b{LH#CtU=6>}D}8b%Yx2u+Yh5 zAj|-L-(J%;aM`;*Fw{PSROlmx5qVJ{lCh$YC8|Y!{3d}!+^ttt$0l`~C4?iZn+gM!Y+^1Q^7a?7(h zJ|1VKXe273e7}^7$2#X#tWO0ZcFr6B^ZcW(NiGpA-8fGulAOdP>}uE`S&jrH+$<$I zWqL%f>Gq}AgPv%QN+#W`9vSLEfh&w2D2oiHy=>laW?Ho6A|j;!B6kbs;k;jlE=m+g z7O$tG0P!CLx3Lup_NoxG6_2wvPt`LNuT=pms*|lxF6GMB0KPf zeznmUyy>22s?Y8kdU?eyjT4vW&V5&H-0|VitFIiM?OC{T@ufs{_m=mz^u0Co>tlXx z?uCtN?X^kJd;H|l$ZhAl-km6X@=jy+^5*2)^+O!}oF(QOKRw@FpTBqh;OTSAyN@j$ zUnpe?i+3);#l`O#ZbRb8w}z*%JlH-D|R>a_U|t~2`-H+1g$+ioKfH3weR4c-@X`O literal 0 HcmV?d00001