From 5f4e3e2d28a1988cd9a1c09aa30f738040f6e031 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 5 Apr 2021 17:18:49 +0200 Subject: [PATCH] RBMK fuel because the RBMK needs fuel --- src/main/java/com/hbm/items/ModItems.java | 37 ++++ .../com/hbm/items/machine/ItemRBMKRod.java | 32 ++++ .../hbm/tileentity/TileEntityMachineBase.java | 1 - .../machine/rbmk/IRBMKFluxReceiver.java | 6 + .../rbmk/TileEntityRBMKActiveBase.java | 11 ++ .../machine/rbmk/TileEntityRBMKBase.java | 31 ++- .../machine/rbmk/TileEntityRBMKRod.java | 18 +- .../rbmk/TileEntityRBMKSlottedBase.java | 181 ++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 11 ++ ...k_fuel_plutonium.png => rbmk_fuel_lep.png} | Bin .../{rbmk_fuel_rgp.png => rbmk_fuel_mep.png} | Bin .../hbm/textures/items/rbmk_fuel_meu.png | Bin 0 -> 603 bytes .../hbm/textures/items/rbmk_fuel_mox.png | Bin 0 -> 580 bytes ...k_fuel_thorium.png => rbmk_fuel_thmeu.png} | Bin .../hbm/textures/items/rbmk_fuel_uranium.png | Bin 611 -> 0 bytes 15 files changed, 325 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hbm/items/machine/ItemRBMKRod.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKActiveBase.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java rename src/main/resources/assets/hbm/textures/items/{rbmk_fuel_plutonium.png => rbmk_fuel_lep.png} (100%) rename src/main/resources/assets/hbm/textures/items/{rbmk_fuel_rgp.png => rbmk_fuel_mep.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/rbmk_fuel_meu.png create mode 100644 src/main/resources/assets/hbm/textures/items/rbmk_fuel_mox.png rename src/main/resources/assets/hbm/textures/items/{rbmk_fuel_thorium.png => rbmk_fuel_thmeu.png} (100%) delete mode 100644 src/main/resources/assets/hbm/textures/items/rbmk_fuel_uranium.png diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 69d9cd313..7e180ff15 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -877,6 +877,18 @@ public class ModItems { public static Item rod_dual_coolant; public static Item rod_quad_coolant; + public static Item rbmk_fuel_empty; + public static Item rbmk_fuel_meu; + public static Item rbmk_fuel_thmeu; + public static Item rbmk_fuel_lep; + public static Item rbmk_fuel_mep; + public static Item rbmk_fuel_mox; + public static Item rbmk_fuel_les; + public static Item rbmk_fuel_mes; + public static Item rbmk_fuel_hes; + public static Item rbmk_fuel_po210be; + public static Item rbmk_fuel_pu238be; + public static Item scrap; public static Item trinitite; public static Item nuclear_waste_long; @@ -3069,6 +3081,19 @@ public class ModItems { rod_dual_tritium = new ItemHazard(1F).setUnlocalizedName("rod_dual_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_dual_empty).setTextureName(RefStrings.MODID + ":rod_dual_tritium"); rod_quad_tritium = new ItemHazard(2F).setUnlocalizedName("rod_quad_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_quad_empty).setTextureName(RefStrings.MODID + ":rod_quad_tritium"); + rbmk_fuel_empty = new Item().setUnlocalizedName("rbmk_fuel_empty").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_fuel_empty"); + //todo: make one item and handle all of this trash with metadata + rbmk_fuel_meu = new ItemRBMKRod("Medium Enriched Uranium").setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu"); + rbmk_fuel_thmeu = new ItemRBMKRod("Thorium with MEU Driver Fuel").setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu"); + rbmk_fuel_lep = new ItemRBMKRod("Low Enriched Plutonium").setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); + rbmk_fuel_mep = new ItemRBMKRod("Medium Enriched Plutonium").setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); + rbmk_fuel_mox = new ItemRBMKRod("Mixed LEU & LEP Oxide").setUnlocalizedName("rbmk_fuel_mox").setTextureName(RefStrings.MODID + ":rbmk_fuel_mox"); + rbmk_fuel_les = new ItemRBMKRod("Low Enriched Schrabidium").setUnlocalizedName("rbmk_fuel_les").setTextureName(RefStrings.MODID + ":rbmk_fuel_les"); + rbmk_fuel_mes = new ItemRBMKRod("Medium Enriched Schrabidium").setUnlocalizedName("rbmk_fuel_mes").setTextureName(RefStrings.MODID + ":rbmk_fuel_mes"); + rbmk_fuel_hes = new ItemRBMKRod("Highly Enriched Schrabidium").setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes"); + rbmk_fuel_po210be = new ItemRBMKRod("Polonium-210 & Beryllium Neutron Source").setUnlocalizedName("rbmk_fuel_po210be").setTextureName(RefStrings.MODID + ":rbmk_fuel_po210be"); + rbmk_fuel_pu238be = new ItemRBMKRod("Plutonium-238 & Beryllium Neutron Source").setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); + trinitite = new ItemHazard().addRadiation(ItemHazard.trn * ItemHazard.ingot).toItem().setUnlocalizedName("trinitite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":trinitite_new"); nuclear_waste_long = new ItemHazard(5F).setUnlocalizedName("nuclear_waste_long").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long"); nuclear_waste_long_tiny = new ItemHazard(0.5F).setUnlocalizedName("nuclear_waste_long_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_tiny"); @@ -5680,6 +5705,18 @@ public class ModItems { GameRegistry.registerItem(rod_waste, rod_waste.getUnlocalizedName()); GameRegistry.registerItem(rod_dual_waste, rod_dual_waste.getUnlocalizedName()); GameRegistry.registerItem(rod_quad_waste, rod_quad_waste.getUnlocalizedName()); + + GameRegistry.registerItem(rbmk_fuel_empty, rbmk_fuel_empty.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_meu, rbmk_fuel_meu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_thmeu, rbmk_fuel_thmeu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_lep, rbmk_fuel_lep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mep, rbmk_fuel_mep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mox, rbmk_fuel_mox.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_les, rbmk_fuel_les.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mes, rbmk_fuel_mes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hes, rbmk_fuel_hes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_po210be, rbmk_fuel_po210be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_pu238be, rbmk_fuel_pu238be.getUnlocalizedName()); GameRegistry.registerItem(scrap, scrap.getUnlocalizedName()); GameRegistry.registerItem(waste_uranium_hot, waste_uranium_hot.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java new file mode 100644 index 000000000..c4cdefee8 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -0,0 +1,32 @@ +package com.hbm.items.machine; + +import java.util.List; + +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemHazard; +import com.hbm.main.MainRegistry; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemRBMKRod extends ItemHazard { + + String fullName = ""; + + public ItemRBMKRod(String fullName) { + + this.fullName = fullName; + + this.setContainerItem(ModItems.rbmk_fuel_empty); + this.setMaxStackSize(1); + this.setCreativeTab(MainRegistry.controlTab); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + list.add(EnumChatFormatting.ITALIC + this.fullName); + super.addInformation(stack, player, list, bool); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index 4726f4d50..c736a60d1 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -16,7 +16,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidTank; -@Spaghetti("Not spaghetti in itself, but for the love of god please use this base class for all machines") public abstract class TileEntityMachineBase extends TileEntity implements ISidedInventory { public ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java new file mode 100644 index 000000000..bebbdaa0e --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/IRBMKFluxReceiver.java @@ -0,0 +1,6 @@ +package com.hbm.tileentity.machine.rbmk; + +public interface IRBMKFluxReceiver { + + public void receiveFlux(float flux); +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKActiveBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKActiveBase.java new file mode 100644 index 000000000..830e04c01 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKActiveBase.java @@ -0,0 +1,11 @@ +package com.hbm.tileentity.machine.rbmk; + +/** + * Base class for all RBMK components that have a GUI + * @author hbm + * + */ +public abstract class TileEntityRBMKActiveBase extends TileEntityRBMKBase { + + public abstract String getName(); +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 85d858990..ae505a1c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -2,9 +2,38 @@ package com.hbm.tileentity.machine.rbmk; import net.minecraft.tileentity.TileEntity; -public class TileEntityRBMKBase extends TileEntity { +/** + * Base class for all RBMK components, active or passive. Handles heat and the explosion sequence + * @author hbm + * + */ +public abstract class TileEntityRBMKBase extends TileEntity { + + public float heat; public boolean hasLid() { return false; } + + public float maxHeat() { + return 1500; + } + + public float passiveCooling() { + return 5; + } + + //necessary checks to figure out whether players are close enough to ensure that the reactor can be safely used + public boolean shouldUpdate() { + return true; + } + + @Override + public void updateEntity() { + moveHeat(); + } + + private void moveHeat() { + + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 69cc55fb1..4b257c4d2 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -1,5 +1,21 @@ package com.hbm.tileentity.machine.rbmk; -public class TileEntityRBMKRod extends TileEntityRBMKBase { +public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver { + + //amount of "neutron energy" buffered for the next tick to use for the reaction + private float flux; + public TileEntityRBMKRod() { + super(1); + } + + @Override + public String getName() { + return "container.rbmkRod"; + } + + @Override + public void receiveFlux(float flux) { + this.flux += flux; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java new file mode 100644 index 000000000..746058693 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -0,0 +1,181 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.packet.NBTPacket; +import com.hbm.packet.PacketDispatcher; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.fluids.FluidTank; + +/** + * Base class for RBMK components that have GUI slots and thus have to handle + * those things Yes it's a copy pasted MachineBase class, thank the lack of + * multiple inheritance for that + * + * @author hbm + * + */ +public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase implements ISidedInventory { + + public ItemStack slots[]; + + private String customName; + + public TileEntityRBMKSlottedBase(int scount) { + slots = new ItemStack[scount]; + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : getName(); + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; + } + } + + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return false; + } + + @Override + public ItemStack decrStackSize(int slot, int amount) { + if(slots[slot] != null) { + if(slots[slot].stackSize <= amount) { + ItemStack itemStack = slots[slot]; + slots[slot] = null; + return itemStack; + } + ItemStack itemStack1 = slots[slot].splitStack(amount); + if(slots[slot].stackSize == 0) { + slots[slot] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return new int[] {}; + } + + public int getGaugeScaled(int i, FluidTank tank) { + return tank.getFluidAmount() * i / tank.getCapacity(); + } + + public void networkPack(NBTTagCompound nbt, int range) { + + if(!worldObj.isRemote) + PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + } + + public void networkUnpack(NBTTagCompound nbt) { + } + + public void handleButtonPacket(int value, int meta) { + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + for(int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) { + if(slots[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte) i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d250cf3ae..7068c5c38 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1887,6 +1887,17 @@ item.radaway.name=RadAway item.radaway_flush.name=Elite RadAway item.radaway_strong.name=Strong RadAway item.radx.name=Rad-X +item.rbmk_fuel_empty.name=Empty RBMK Fuel Rod +item.rbmk_fuel_hes.name=HES RBMK Fuel Rod +item.rbmk_fuel_lep.name=LEP RBMK Fuel Rod +item.rbmk_fuel_les.name=LES RBMK Fuel Rod +item.rbmk_fuel_mep.name=MEP RBMK Fuel Rod +item.rbmk_fuel_mes.name=MES RBMK Fuel Rod +item.rbmk_fuel_meu.name=MEU RBMK Fuel Rod +item.rbmk_fuel_mox.name=MOX RBMK Fuel Rod +item.rbmk_fuel_po210be.name=Po210Be RBMK Neutron Source +item.rbmk_fuel_pu238be.name=Pu238Be RBMK Neutron Source +item.rbmk_fuel_thmeu.name=ThMEU RBMK Fuel Rod item.reactor_core.name=Breeding Reactor Core item.reactor_sensor.name=Reactor Remote Sensor item.record.glass.desc=? ? ? diff --git a/src/main/resources/assets/hbm/textures/items/rbmk_fuel_plutonium.png b/src/main/resources/assets/hbm/textures/items/rbmk_fuel_lep.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/rbmk_fuel_plutonium.png rename to src/main/resources/assets/hbm/textures/items/rbmk_fuel_lep.png diff --git a/src/main/resources/assets/hbm/textures/items/rbmk_fuel_rgp.png b/src/main/resources/assets/hbm/textures/items/rbmk_fuel_mep.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/rbmk_fuel_rgp.png rename to src/main/resources/assets/hbm/textures/items/rbmk_fuel_mep.png diff --git a/src/main/resources/assets/hbm/textures/items/rbmk_fuel_meu.png b/src/main/resources/assets/hbm/textures/items/rbmk_fuel_meu.png new file mode 100644 index 0000000000000000000000000000000000000000..02bdb10128ec2bb40e328034ab0bdb20242e3e7c GIT binary patch literal 603 zcmV-h0;K(kP)zlsx46vlt|vZOZu3g5scu+1VNAYv!MHKec*U06x6f~aUC z3O;}jASxrW`T!=&Vk4U(UD8|8+PN!?w)tm@)+YQlLqm;s0i-@p_yX}U!#N2UlHpak@?*Pc|F4kIwOZ8cb^85}Yv*wsGaL^65=gDn>13M6aa=Tvdl8~9Wsk%1VONLe*6AY!Z2hse&ZC+nSjy?r4;-3o)Cs1rBaF6Y=(#+;?#ja zff~?CqqSblffekXK$-y&N#?)`_D(>nWb%oXECYG$oq$rw8(T?IzKZ=5(8=f(yO1D{ zy%We%E-Mmjs|(Vi%Oud-mOw31p4LDfdnb^6|HWdhUBli9q*b5Kz*gJvLW{85Zb;g8 z*4m{uOtJTsY;<}Iz?Hq5OA`E?e9L^i5rF(k)(7CvuW@$%U#?_304FS}XCGDgZ>cbW zO)pN?twFYuUN-Y=c+-MB+Ej~IP`v=|#O|;ZaA_xEg002ovPDHLkV1nCM6=nbc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/rbmk_fuel_mox.png b/src/main/resources/assets/hbm/textures/items/rbmk_fuel_mox.png new file mode 100644 index 0000000000000000000000000000000000000000..425e16f5f86f33f98c419d528e111d8510dc906e GIT binary patch literal 580 zcmV-K0=xZ*P)zl#$=6vsa^oCwBiLQ-gzLdz=zMI|73ji&(#u@MVx(u#_V!0ygv@fg!Pk93txr4-g$L@a;fUS~sGVy?M38)Im2$a%op8(13=&{}iw z=(`i)mAP9+CbMuk_ z^!xpV48*A)?;SbCbS}Zw>m6pZfWcs}uzq{%8NUCE@!orGn@;*+ SI0}6L0000HEh7=Zy3M(mA5EX4i z!5`oc5S0;G{Q)M6*oZ08C5@$xyx_j>qd*?lPbq~#E6N|+HHa0OaDoreX%W;ZyP3V!^@X0 zFaV53qk;md^t1UdQA}|ST)BRPFbd)Oe&PJa?MDcL0JHf^Q9LmLQUoHx!L5e~f&jHz z4Ph99nZYdTKmZj6ks<}9R6Ykv*g1hz0cK9-KnXi1peUJqY&cWE#?A>4C2wpvk-UuE z6Hv+MWs|4C#?A?3l5;5qyXu0p=&}^3U8jI@$Ba4fwbyv1$Nqo zXIg~AeuvYxGsYC!FvZSSvf1Yo06=^HS|J5L7GE+SX9NIyB^v_(e*c_j=l`{mNo}hu z*(vhsIRI7uTdGW8(~FaJYm%*GwoN7z%clZ?Q!sBr;_&!6wAS$bH-+>4t2Ys?BFyF= xB=;vv>86+4mag&LZWmf>JbUtDr>WbT{RPP1SMxW&LOcKf002ovPDHLkV1hUN3c>&Y