From 0b0fed1e0099126434791307240fffc622d26bff Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 5 Oct 2020 21:45:31 +0300 Subject: [PATCH] More slimes --- .../ru/betterend/entity/EntityEndSlime.java | 34 ++++++++ .../entity/render/RendererEntityEndSlime.java | 4 +- .../ru/betterend/registry/EntityRegistry.java | 8 +- .../ru/betterend/registry/ItemRegistry.java | 82 ++++++++++++------ .../textures/entity/end_slime_mossy.png | Bin 0 -> 8607 bytes 5 files changed, 97 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/assets/betterend/textures/entity/end_slime_mossy.png diff --git a/src/main/java/ru/betterend/entity/EntityEndSlime.java b/src/main/java/ru/betterend/entity/EntityEndSlime.java index 6b069fb4..a5601c97 100644 --- a/src/main/java/ru/betterend/entity/EntityEndSlime.java +++ b/src/main/java/ru/betterend/entity/EntityEndSlime.java @@ -1,15 +1,26 @@ package ru.betterend.entity; +import net.minecraft.entity.EntityData; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.mob.SlimeEntity; +import net.minecraft.nbt.CompoundTag; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; +import net.minecraft.world.LocalDifficulty; +import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; +import ru.betterend.registry.BiomeRegistry; public class EntityEndSlime extends SlimeEntity { + private static final TrackedData MOSSY = DataTracker.registerData(EntityEndSlime.class, TrackedDataHandlerRegistry.BOOLEAN); + public EntityEndSlime(EntityType entityType, World world) { super(entityType, world); } @@ -21,9 +32,32 @@ public class EntityEndSlime extends SlimeEntity { .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 16.0D) .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.15D); } + + @Override + public EntityData initialize(ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, EntityData entityData, CompoundTag entityTag) { + EntityData data = super.initialize(world, difficulty, spawnReason, entityData, entityTag); + if (world.getRandom().nextBoolean() && BiomeRegistry.getFromBiome(world.getBiome(getBlockPos())) == BiomeRegistry.FOGGY_MUSHROOMLAND) { + this.setMossy(true); + } + return data; + } + + @Override + protected void initDataTracker() { + super.initDataTracker(); + this.dataTracker.startTracking(MOSSY, false); + } @Override protected ParticleEffect getParticles() { return ParticleTypes.PORTAL; } + + protected void setMossy(boolean mossy) { + this.dataTracker.set(MOSSY, mossy); + } + + public boolean isMossy() { + return this.dataTracker.get(MOSSY); + } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java index 60b72ccd..bdf2229a 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java @@ -8,9 +8,11 @@ import net.minecraft.client.render.entity.model.SlimeEntityModel; import net.minecraft.entity.mob.SlimeEntity; import net.minecraft.util.Identifier; import ru.betterend.BetterEnd; +import ru.betterend.entity.EntityEndSlime; public class RendererEntityEndSlime extends SlimeEntityRenderer { private static final Identifier TEXTURE = BetterEnd.makeID("textures/entity/end_slime.png"); + private static final Identifier TEXTURE_MOSSY = BetterEnd.makeID("textures/entity/end_slime_mossy.png"); private static final RenderLayer GLOW = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime_glow.png")); public RendererEntityEndSlime(EntityRenderDispatcher entityRenderDispatcher) { @@ -25,6 +27,6 @@ public class RendererEntityEndSlime extends SlimeEntityRenderer { @Override public Identifier getTexture(SlimeEntity entity) { - return TEXTURE; + return ((EntityEndSlime) entity).isMossy() ? TEXTURE_MOSSY : TEXTURE; } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/EntityRegistry.java b/src/main/java/ru/betterend/registry/EntityRegistry.java index f7d4ddba..62893fe2 100644 --- a/src/main/java/ru/betterend/registry/EntityRegistry.java +++ b/src/main/java/ru/betterend/registry/EntityRegistry.java @@ -12,11 +12,12 @@ import net.minecraft.entity.attribute.DefaultAttributeContainer.Builder; import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.entity.EntityEndSlime; +import ru.betterend.util.MHelper; import ru.betterend.entity.EntityDragonfly; public class EntityRegistry { - public static final EntityType DRAGONFLY = register("dragonfly", SpawnGroup.AMBIENT, 0.6F, 0.5F, EntityDragonfly::new, EntityDragonfly.createMobAttributes()); - public static final EntityType END_SLIME = register("end_slime", SpawnGroup.AMBIENT, 0.6F, 0.5F, EntityEndSlime::new, EntityEndSlime.createMobAttributes()); + public static final EntityType DRAGONFLY = register("dragonfly", SpawnGroup.AMBIENT, 0.6F, 0.5F, EntityDragonfly::new, EntityDragonfly.createMobAttributes(), MHelper.color(32, 42, 176), MHelper.color(115, 225, 249)); + public static final EntityType END_SLIME = register("end_slime", SpawnGroup.AMBIENT, 0.6F, 0.5F, EntityEndSlime::new, EntityEndSlime.createMobAttributes(), MHelper.color(28, 28, 28), MHelper.color(99, 11, 99)); public static void register() {} @@ -25,9 +26,10 @@ public class EntityRegistry { return type; } - private static EntityType register(String name, SpawnGroup group, float width, float height, EntityFactory entity, Builder attributes) { + private static EntityType register(String name, SpawnGroup group, float width, float height, EntityFactory entity, Builder attributes, int eggColor, int dotsColor) { EntityType type = Registry.register(Registry.ENTITY_TYPE, BetterEnd.makeID(name), FabricEntityTypeBuilder.create(group, entity).dimensions(EntityDimensions.fixed(width, height)).build()); FabricDefaultAttributeRegistry.register(type, attributes); + ItemRegistry.registerEgg("spawn_egg_" + name, type, eggColor, dotsColor); return type; } } diff --git a/src/main/java/ru/betterend/registry/ItemRegistry.java b/src/main/java/ru/betterend/registry/ItemRegistry.java index 1877ac1e..b07cf8b2 100644 --- a/src/main/java/ru/betterend/registry/ItemRegistry.java +++ b/src/main/java/ru/betterend/registry/ItemRegistry.java @@ -5,16 +5,25 @@ import java.util.List; import com.google.common.collect.Lists; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.DispenserBlock; +import net.minecraft.block.dispenser.ItemDispenserBehavior; +import net.minecraft.entity.EntityType; import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.SpawnReason; import net.minecraft.item.ArmorItem; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; +import net.minecraft.item.Item.Settings; +import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.ShovelItem; +import net.minecraft.item.SpawnEggItem; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolItem; import net.minecraft.item.ToolMaterials; import net.minecraft.tag.Tag; +import net.minecraft.util.math.BlockPointer; +import net.minecraft.util.math.Direction; import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.item.EndArmorMaterial; @@ -31,37 +40,37 @@ public class ItemRegistry { private static final List MOD_ITEMS = Lists.newArrayList(); //Materials - public final static Item ENDER_DUST = registerItem("ender_dust", new Item(new Item.Settings().group(CreativeTab.END_TAB))); - public final static Item TERMINITE_INGOT = registerItem("terminite_ingot", new Item(new Item.Settings().group(CreativeTab.END_TAB))); - public final static Item AETERNIUM_INGOT = registerItem("aeternium_ingot", new Item(new Item.Settings().group(CreativeTab.END_TAB))); + public final static Item ENDER_DUST = registerItem("ender_dust", new Item(makeSettings())); + public final static Item TERMINITE_INGOT = registerItem("terminite_ingot", new Item(makeSettings())); + public final static Item AETERNIUM_INGOT = registerItem("aeternium_ingot", new Item(makeSettings())); //Armor - public static final Item TERMINITE_HELMET = registerItem("terminite_helmet", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.HEAD,new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item TERMINITE_CHESTPLATE = registerItem("terminite_chestplate", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.CHEST, new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item TERMINITE_LEGGINGS = registerItem("terminite_leggings", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.LEGS, new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item TERMINITE_BOOTS = registerItem("terminite_boots", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.FEET, new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item AETERNIUM_HELMET = registerItem("aeternium_helmet", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.HEAD,new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item AETERNIUM_CHESTPLATE = registerItem("aeternium_chestplate", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.CHEST, new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item AETERNIUM_LEGGINGS = registerItem("aeternium_leggings", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.LEGS, new Item.Settings().group(CreativeTab.END_TAB))); - public static final Item AETERNIUM_BOOTS = registerItem("aeternium_boots", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.FEET, new Item.Settings().group(CreativeTab.END_TAB))); + public static final Item TERMINITE_HELMET = registerItem("terminite_helmet", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.HEAD, makeSettings())); + public static final Item TERMINITE_CHESTPLATE = registerItem("terminite_chestplate", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.CHEST, makeSettings())); + public static final Item TERMINITE_LEGGINGS = registerItem("terminite_leggings", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.LEGS, makeSettings())); + public static final Item TERMINITE_BOOTS = registerItem("terminite_boots", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.FEET, makeSettings())); + public static final Item AETERNIUM_HELMET = registerItem("aeternium_helmet", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.HEAD, makeSettings())); + public static final Item AETERNIUM_CHESTPLATE = registerItem("aeternium_chestplate", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.CHEST, makeSettings())); + public static final Item AETERNIUM_LEGGINGS = registerItem("aeternium_leggings", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.LEGS, makeSettings())); + public static final Item AETERNIUM_BOOTS = registerItem("aeternium_boots", new ArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.FEET, makeSettings())); //Tools - public static ToolItem TERMINITE_SHOVEL = registerTool("terminite_shovel", new ShovelItem(EndToolMaterial.TERMINITE, 1.5F, -3.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem TERMINITE_SWORD = registerTool("terminite_sword", new SwordItem(EndToolMaterial.TERMINITE, 3, -2.4F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem TERMINITE_PICKAXE = registerTool("terminite_pickaxe", new EndPickaxe(EndToolMaterial.TERMINITE, 1, -2.8F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem TERMINITE_AXE = registerTool("terminite_axe", new EndAxe(EndToolMaterial.TERMINITE, 6.0F, -3.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem TERMINITE_HOE = registerTool("terminite_hoe", new EndHoe(EndToolMaterial.TERMINITE, -3, 0.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem TERMINITE_HAMMER = registerTool("terminite_hammer", new EndHammer(EndToolMaterial.TERMINITE, 5.0F, -3.2F, 0.3D, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_SHOVEL = registerTool("aeternium_shovel", new ShovelItem(EndToolMaterial.AETERNIUM, 1.5F, -3.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_SWORD = registerTool("aeternium_sword", new SwordItem(EndToolMaterial.AETERNIUM, 3, -2.4F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_PICKAXE = registerTool("aeternium_pickaxe", new EndPickaxe(EndToolMaterial.AETERNIUM, 1, -2.8F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_AXE = registerTool("aeternium_axe", new EndAxe(EndToolMaterial.AETERNIUM, 5.0F, -3.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_HOE = registerTool("aeternium_hoe", new EndHoe(EndToolMaterial.AETERNIUM, -3, 0.0F, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem AETERNIUM_HAMMER = registerTool("aeternium_hammer", new EndHammer(EndToolMaterial.AETERNIUM, 6.0F, -3.0F, 0.3D, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem IRON_HAMMER = registerTool("iron_hammer", new EndHammer(ToolMaterials.IRON, 5.0F, -3.2F, 0.2D, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem GOLDEN_HAMMER = registerTool("golden_hammer", new EndHammer(ToolMaterials.GOLD, 4.5F, -3.4F, 0.3D, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem DIAMOND_HAMMER = registerTool("diamond_hammer", new EndHammer(ToolMaterials.DIAMOND, 5.5F, -3.1F, 0.2D, new Item.Settings().group(CreativeTab.END_TAB))); - public static ToolItem NETHERITE_HAMMER = registerTool("netherite_hammer", new EndHammer(ToolMaterials.DIAMOND, 6.0F, -3.0F, 0.2D, new Item.Settings().group(CreativeTab.END_TAB))); + public static ToolItem TERMINITE_SHOVEL = registerTool("terminite_shovel", new ShovelItem(EndToolMaterial.TERMINITE, 1.5F, -3.0F, makeSettings())); + public static ToolItem TERMINITE_SWORD = registerTool("terminite_sword", new SwordItem(EndToolMaterial.TERMINITE, 3, -2.4F, makeSettings())); + public static ToolItem TERMINITE_PICKAXE = registerTool("terminite_pickaxe", new EndPickaxe(EndToolMaterial.TERMINITE, 1, -2.8F, makeSettings())); + public static ToolItem TERMINITE_AXE = registerTool("terminite_axe", new EndAxe(EndToolMaterial.TERMINITE, 6.0F, -3.0F, makeSettings())); + public static ToolItem TERMINITE_HOE = registerTool("terminite_hoe", new EndHoe(EndToolMaterial.TERMINITE, -3, 0.0F, makeSettings())); + public static ToolItem TERMINITE_HAMMER = registerTool("terminite_hammer", new EndHammer(EndToolMaterial.TERMINITE, 5.0F, -3.2F, 0.3D, makeSettings())); + public static ToolItem AETERNIUM_SHOVEL = registerTool("aeternium_shovel", new ShovelItem(EndToolMaterial.AETERNIUM, 1.5F, -3.0F, makeSettings())); + public static ToolItem AETERNIUM_SWORD = registerTool("aeternium_sword", new SwordItem(EndToolMaterial.AETERNIUM, 3, -2.4F, makeSettings())); + public static ToolItem AETERNIUM_PICKAXE = registerTool("aeternium_pickaxe", new EndPickaxe(EndToolMaterial.AETERNIUM, 1, -2.8F, makeSettings())); + public static ToolItem AETERNIUM_AXE = registerTool("aeternium_axe", new EndAxe(EndToolMaterial.AETERNIUM, 5.0F, -3.0F, makeSettings())); + public static ToolItem AETERNIUM_HOE = registerTool("aeternium_hoe", new EndHoe(EndToolMaterial.AETERNIUM, -3, 0.0F, makeSettings())); + public static ToolItem AETERNIUM_HAMMER = registerTool("aeternium_hammer", new EndHammer(EndToolMaterial.AETERNIUM, 6.0F, -3.0F, 0.3D, makeSettings())); + public static ToolItem IRON_HAMMER = registerTool("iron_hammer", new EndHammer(ToolMaterials.IRON, 5.0F, -3.2F, 0.2D, makeSettings())); + public static ToolItem GOLDEN_HAMMER = registerTool("golden_hammer", new EndHammer(ToolMaterials.GOLD, 4.5F, -3.4F, 0.3D, makeSettings())); + public static ToolItem DIAMOND_HAMMER = registerTool("diamond_hammer", new EndHammer(ToolMaterials.DIAMOND, 5.5F, -3.1F, 0.2D, makeSettings())); + public static ToolItem NETHERITE_HAMMER = registerTool("netherite_hammer", new EndHammer(ToolMaterials.DIAMOND, 6.0F, -3.0F, 0.2D, makeSettings())); protected static Item registerItem(String name, Item item) { if (item != Items.AIR) { @@ -94,6 +103,25 @@ public class ItemRegistry { return item; } + + public static Item registerEgg(String name, EntityType type, int background, int dots) { + SpawnEggItem item = new SpawnEggItem(type, background, dots, makeSettings()); + ItemDispenserBehavior behavior = new ItemDispenserBehavior() { + public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { + Direction direction = pointer.getBlockState().get(DispenserBlock.FACING); + EntityType entityType = ((SpawnEggItem) stack.getItem()).getEntityType(stack.getTag()); + entityType.spawnFromItemStack(pointer.getWorld(), stack, null, pointer.getBlockPos().offset(direction), SpawnReason.DISPENSER, direction != Direction.UP, false); + stack.decrement(1); + return stack; + } + }; + DispenserBlock.registerBehavior(item, behavior); + return registerItem(name, item); + } + + private static Settings makeSettings() { + return new Item.Settings().group(CreativeTab.END_TAB); + } public static void register() {} diff --git a/src/main/resources/assets/betterend/textures/entity/end_slime_mossy.png b/src/main/resources/assets/betterend/textures/entity/end_slime_mossy.png new file mode 100644 index 0000000000000000000000000000000000000000..819beac44420c8ea8c3e8fff8b41e9b79b38e9b1 GIT binary patch literal 8607 zcmb_?2UJttx@`z8ROuj~g!U;qJRQ| zAibkhsi9o_+q?I^bIv>CjF&N1_S$>T^?h@GWv`tv604)7N=D2`3;+Pg?yAA{u8(2Y zLmotM{rzboH1zsFgjO^41OP~=e+?W!Rt^IIK*;WBVB%$>sUd}QcNIX`y4#=x{9Mu3 zXaGQ3&JT@1I-|V6HYj^XHyO5_rdBqvqpb{^v8X0g6Rm`Da8wKMKVTEpJy2j# z0WkI?(*H^$-M8Ms{UQkF*o1qn63jR=!ZZH3JE}eN%|dVi~Jjh_V#f3 z-MKAN5aoh$MY(x-USoy+#-bhEz1%$=-2aK`zi~l?%{g)cFl#ΜpOgO;O_47SE6+Oq6}72`jr?7 zFt@Rzo2|RAC(nOdgMuTxP%>=7P+=%U2nvCU8VEzBL`0>8#QC5iQc&n0P)&DRM?3%j z8!99vA|?eB`XA8is_mQNp{Xf#*Ui%l;f6%rh0CyA%NB5Sw3U)T+6g1YQQ{C0*tGyV2^bP$BOzo5fuayF zl$f2Jh=e%uuk~Qb)7*teT z6owT3YrVFI<8^Z(T>fJ_*G=$$6#ivJ;aZXBb@n{}Y!O9-{hu=zN7-L8|6Q8Wg1`FV zdJ*`K*&l`k|Fy^8t5izO@fQRCKmF>X9{kM!{Ci!xDN(V%I^sWM|7UQK4hT1U)b%r5knKO$ z^Y8V?Kg-7d>hS-sdVa6gKT1vTe^=q}_x{_H{;!h0-adX!|K7K*PyXKdP;S?u^0?mD zlzG!80RTp}yKn^qzpp=2UV^&x{b&NyEFyV-sO==beP*zq}a9GE#%}Vk?4s3Ib|5_d31P%wQ>&LGTXAc>OotiJJmDd195~&BV4ArdLQ(?RTo#O@7Wh36P;}b*{_5>MMW2HT%U)C23=dORi9(?KE%2sSr zf;Ohd81w%YpTD$!z%>^VJtIHQ?#96q10RqbbV^a@949|pI5-7i*Kd4P%$Be_4NB9m zQFSWSTkIGPZNcx|^-UREsrjk-WTbwe0Q zuK11b_-!BiABZ!OaRvn`O-@23HaT{dZgjoP>Er^o%TTn0TI18oHOZ%k9ORD$o(S>g z$=vgi(0EA8S1u*1wRLq?v%V;IMItFZ+3uIab(+`pRdj5S*mLh4{eDtHLcfFdaE>5N zMIFsI=o|@#1f#fIyI3Hn^AW^n&}<}K=&CFRL3bV`Q&m@{EQ3OBYXBFn42yy zln=D?j5`d(qz-5wD2Pd{d5b_tv==a%mz9|j%^|k7W_{>sKj!GtS!U-w^MA8T7J5KE z5PZsc+LWey{_#ah@D9z3$yeFc&0aa*M=NRWdABXE4dqqWX;@j+cj{)p^f7U=;-7eF z{c{|WIwW6ASz&&=)Ipf?X^3Ji1uSGK;9N#xRax9+GP=m`YQp{11;?3heA4`cPFOb` zM3KI)yA4r*Cc{f`w$5a*HP`oBvmh?h8?(g+Fq-fYmV2DR466W`bV%`N(wy!CyQqop zbE+*LwNSD8zgcmNEK)^FP#*IkinGfGq!wm3rows^-%C%ql<2}4cv zv~=C5_c!MSwJwz_`21qp`&t2RF5WEBAEZ36Pz7@V{Z&bq=n4dh>9isql1 zw&ZkVi|H-=yjgU(Rql65ec$s08hn<0RdmvPr~IT{@_xNNKv2>8z$Dm1?>F!SN+}z~v%R%p^=*Vedn5xkqT_sWivtOPdCHqMsHg zar9rCDje$r~~Hv8bz-k!4dPJ1I!GmlS+HlHC#;b=J| z&qA2&%sjXudF$3#zme?OIfzX92-KZ{3xM=khDHb)K)3F)4& zyrl!J^D%E6>E<|ni0U`&G4DdJDY_IM-grdzsXmF`@syp=aq~u*V_5JdH? zN_4EJr`&xF7q-`vO|uf1;*402)+6erkjq119?q$-C6kKDEaj6Mk=&KvrU9TiQn=o zEk48p4j#pc{ zbD=EhL&6G=*NGFmIm2tT#4#kmWxl+m{_?p&21#>p$1(>egXn&h7gees{&$R@AWlk7 zlzGHXDCFX6gXQh{Et9LotNWqAOFOeh>91~C4X&dMlmKb%j0C?@7c_d%9 zOh}F%|4(^eannMu_cvcb4EC%%y?=fz^VRb1$clt5sq42Q^N7)Jr755^h%2CHlx6Su z)9px5WiJ<;CT`<{Sq#ummqh(>t7?aOKV{$Hz1uiYosKM_6JYux3kr<^*o@%68JBUv zkl%PI$H>YuC$gI^XE4>)Qg&&M!Zl23r(^nwby(5Y9zBWgCeJM*5JS#spQ3Rh79nx6Jaa)1bCv7#$CW~6jD++|J$$IWnVP7#0@VUPx~L#q>VDU+)B^!D;;$fP_-;p zj%IzU6pRhXHVt-}wlI)LKhZzL}!F@u_ssc6ew!gRsFgwTZ0HTN@mtgkW{aytli5bH}_*FBW_C1Za&$CE5}j5vX@? z@6~wZ77!ejNpz8T_!*%xj`#Ks<<3bM1AmBmWR@73_N6`<*8kCgU-6aP!WIvm>CiJ# zT}ToAW)#^eQcAtrFs+1&VYsbiU zi{5SEby&SH5DUJ>(rLTS2;X#;Rvv^>pL`yDeR-KEhjIcfAR#z zo2n#hw?SZL77JmHn4b3}qjUS>%GB5X8iFS#+TB$fQE|#_cyjZ5IS)nbBbrxJN*fPp z4f^T(78131sL#c!a+DN%iFG3Lbs3o0v++&rEGaQmVaFfm|BC$!*#r%Ni$(gL zw|hUBudI9ltvmVyc2MS02{YTrm_>Ur_uT@!?e|ZE_+w5Q>pO2{i|KwzgLD?o&MNhj zF-1Y>Kv&~q!M(Q(c#QjPl{cC_`NmBP=;o{hjk({UL`YiHGaoZWV|TtOY)reeXuYuT zbg;%AEpVHKMB>j4x{g(d@)|m&m^7tjagr-EHI@%uthZp@L@CF7zgTn*X6VC>Y8bao z>Nj=b@{!1in$a#19_F}2T2kFai@TYa&9#=gWRI)2dN{GgAF`vVzo#|4Sg>{X7o`E$0c+~I>q+hY}~n!PeAly*x&(%4b| zH-2)&!YLgFHRh$lB4+Gvr{%-mPclK{9{vNla;=F9w)nB= zlQj)3-Pj$%(JhPb!1Ms0aD;kNOyS(N|KVu)lnm1dr7r}_pGR-te6jj^cTaeR(| zL@HT5DIaTUv!Z~Nxv|aBy2b3hd5COb;KPr8Br>EMUI<=+Qr3sajE=o_y2@*n!(Jtf zLLLJQZ^Ja|Y@l~0(`#h?!U*|QrO~}TnGNqq_ud`kk3{v}mP|%Cn+NW;eZ~w6>ZyjZ zykoA!waeyyZ%v{l^uAikD=bTGgG;}+=j4)r#66C%HFS8JeK4f%kI$&>O!B| zi9=s4Q?@-SO=ka~o*MAhy{scBttDuKGw$f<6MygK)(tr+nD-g~;m)m+fL9ylfmn+Z zuQE^Ujf8{;eQReI>?&X=Fn_iQd1uAm-tqggGmTBC?9pbW^!gL>4|&1)6A!r8Z{RUY z^D&U$se@!EBowFcGv96(+0-D#`pzhgD<)Ov`C)=KNJH~Wrfs(BG^f(N zxj2t{%5Qpg5qA7XL*s6Ft+K2pct8d&H!EtTna|z>j zS7g&Z!oKczqz*Rlm)lieV?sZ#O&9?vp8u@C5xzMD` zu-VdGy3+`T7geoTp<%}`*Vm&Q*ciKzb|%ST-r_qvQhNP{)ZNmo)c5U}eEZp_AsB63 zsl8j^c^xY(4kn;V-kGeuZr+?#@d%jN^oF`Hz2LbRiu=~QPTcV7?2arwcwARhGPNfX`Ff`X>a>R2E&CAQfiAZ8RZg1c~%`3T@ zJ!=y@IN*7bChRWE;;BK^zzH3jCYXZdNhD)Zj7gL4ZA&j|a-fmJ6ZCm=r0 z=<{$5_MX)~l#c)HQCIi;t7Tewj~zV%F8l%=QXa~uiX^6n5p%-R1j_C1COia;YT$b{ zw!7WHW<0IZBvYai=38F?u_JUedS8?67aGPc6mIUB8SxXnzh@98d+#ujrlF66{-`;% z^IjgVNl5F0h^8oudqefj*K{6NCv9g(G#g+ zU4CB7exVL^>Gb&{UbCBcxP`@e!~3U0Q?W!T+2v2}C)rLDytPL&aZTXHG?hE#TiGhB z*YUL<=yY@u+jJp?igP|NQt~Uj;vWxz(TP;fsJ@QCj@T1(unb?UEd`XI}xY7 z2cGzQz5M)Hp|Vos(L)r~nqQK&N5FkkP3J?+X1Dv*OdTmM5;XhIo$>-?Ci&Al_t29W zOf0^(blRzD$UUBcdU`r<#aNA3Q>1n1@G6g%cT=XDT4fQsgT(aq_GF)Td^Jp@Nm?HX z3w^ljk>O=S5|u15?gVmu2|NqqFLe=HA6)CK0!IzM%!v~?joNk2B2`x);VZidCO*Y| zIPX{2usj%kfqCZwqa`m}lRbTu6;-&pr2pK2k67o@C_S2IZurXjfnA7)@V6oQ;t%R% zidxY^mEw1-oMGA9B~dsJgO{5_3av-1cgc-bS3gnmF}NCR8RX?^7PrP~JTqE4vWHQoO5>aN za2$}V^kiv{hsdPg!&p2(z67+e0^060;Z<4+s1i?|;su?})H@sa z=J-i4x)$V8@jb4fYw;+ppH%vAa3D$ZbcjCQs13$GuE$!qNi}~=#-7JV!-)UQcSf*2 zRMX<(^H^7H&kqs!^P}{0mjat*?yNCos*K6KKspV-VTIba?$ghnwVF)6@Uxf_{7WUirq0^Xp8_dTgb0IovG?5Ar&VNq$kyc&Z{Jzvi(MXPB^j2B+P2Z3u`S zL^(30lq#V(mGS0eVp`41=SjaQNiZCzdAonV>Z;Z9W?&$eoVjg>)x}#T78fUmWVeGq zsQM&SwCrOV=^*EY2TwPBVx+>e8zGkI_DhWC1nP;a_!34)CV~spoEAr7!R31{NuMLh&)}SU-HdpGr~+ zVpkkdzFj2YN05j!tP}To{l%@4>GT%=ZykpoxIcanP{>zlMGB@}d7FLK*NxcGE3B1Y zf88A)U+$a?+M-*bc#RfCyk5bOOC(6kQK`gFa0aAmS6LN>caJIrVwc2`KUP0fFK=)@ zXHOHDdLI>nh%644OL(3lVAfjV`w+PJY6V3F4wDC&*;72QP^-ZnJ1g)hK2O4hQ+eVk z^fUQc0#IA!aLzKX$cG__?E**-6B;LGim9NNoAQ`;3pbj?aA=3&oZ_zqXrvk;{aDdj~iKTP_ zVg{eoig03?;iDYpRhwrrW@fEfX_o}XWb*Jfusef|lh*lslAo&@GQVM&ak@xW!S-BzZ z6C+4R4j$HijR-xvQN?g%tqKQ5khjc>Y%MT#;eQVoW{;ib!Px|c@8ZpN2FF)(p2*Bd^n zeq-qh`e|T%)(u8oj+iK$l4xNaQWTrcDxiGm#}{CoWK&lJ=2adF$Fx-h_=~AAjTDF; z-XqyzsoH=+Tk!WeMb?9vc=C+L2m2%K@k#~iG=c6~G$R9jdtnotoP)BK?M-y=O|mIe zh&Bvntw?$&o?G_+yvx=x?Gve$?qScDMY7= zjd6)o!xr!I-ghF(4nR28H#Z#gtO38G4DaROzK$+<0r>Ia9}HI>*DI3m#=Y;R2u$F= P{z7qASqomRXdV7vIJYi1 literal 0 HcmV?d00001