From 04e63544c745d4b2980aeabfb02a7f3e6e0e3802 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 10 Mar 2022 23:38:41 +0100 Subject: [PATCH] functional chemfac, chemfac base texture finished, fluid net enhancement --- .../hbm/blocks/machine/MachineChemfac.java | 1 - .../com/hbm/interfaces/IFluidAcceptor.java | 4 + .../com/hbm/inventory/gui/GUIChemfac.java | 41 +++++++++- src/main/java/com/hbm/lib/Library.java | 6 +- .../machine/TileEntityMachineChemfac.java | 54 ++++++++++++- .../TileEntityMachineChemplantBase.java | 76 ++++++++++++++++-- .../textures/gui/processing/gui_chemfac.png | Bin 5056 -> 5273 bytes .../hbm/textures/models/machines/chemfac.png | Bin 6406 -> 8301 bytes 8 files changed, 168 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemfac.java b/src/main/java/com/hbm/blocks/machine/MachineChemfac.java index b533df783..4a06df07e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemfac.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemfac.java @@ -6,7 +6,6 @@ import com.hbm.tileentity.machine.TileEntityMachineChemfac; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; diff --git a/src/main/java/com/hbm/interfaces/IFluidAcceptor.java b/src/main/java/com/hbm/interfaces/IFluidAcceptor.java index dcb749c85..5195ac1b1 100644 --- a/src/main/java/com/hbm/interfaces/IFluidAcceptor.java +++ b/src/main/java/com/hbm/interfaces/IFluidAcceptor.java @@ -17,4 +17,8 @@ public interface IFluidAcceptor extends IFluidContainer { public default int getMaxFluidFillForReceive(FluidType type) { return this.getMaxFluidFill(type); } + + public default void receiveFluid(int amount, FluidType type) { + this.setFluidFill(this.getFluidFill(type) + amount, type); + } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIChemfac.java b/src/main/java/com/hbm/inventory/gui/GUIChemfac.java index 51036d6b3..bed51516f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIChemfac.java +++ b/src/main/java/com/hbm/inventory/gui/GUIChemfac.java @@ -1,5 +1,6 @@ package com.hbm.inventory.gui; +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerChemfac; @@ -27,18 +28,54 @@ public class GUIChemfac extends GuiInfoContainer { @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 234, guiTop + 25, 16, 52, chemfac.power, chemfac.getMaxPower()); + + for(int i = 0; i < 8; i ++) { + + int offX = guiLeft + 110 * (i % 2); + int offY = guiTop + 38 * (i / 2); + chemfac.tanks[i * 4 + 0].renderTankInfo(this, mouseX, mouseY, offX + 40, offY + 45 - 32, 5, 34); + chemfac.tanks[i * 4 + 1].renderTankInfo(this, mouseX, mouseY, offX + 45, offY + 45 - 32, 5, 34); + chemfac.tanks[i * 4 + 2].renderTankInfo(this, mouseX, mouseY, offX + 102, offY + 45 - 32, 5, 34); + chemfac.tanks[i * 4 + 3].renderTankInfo(this, mouseX, mouseY, offX + 107, offY + 45 - 32, 5, 34); + } } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { } @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + protected void drawGuiContainerBackgroundLayer(float interp, int mX, int mY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, 211); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, 167); + drawTexturedModalRect(guiLeft + 26, guiTop + 167, 26, 167, 230, 44); drawTexturedModalRect(guiLeft + 26, guiTop + 211, 26, 211, 176, 45); + int p = (int) (chemfac.power * 52 / chemfac.getMaxPower()); + drawTexturedModalRect(guiLeft + 234, guiTop + 77 - p, 0, 219 - p, 16, p); + + if(chemfac.power > 0) + drawTexturedModalRect(guiLeft + 238, guiTop + 11, 0, 219, 9, 12); + + for(int i = 0; i < 8; i ++) { + + int offX = guiLeft + 110 * (i % 2); + int offY = guiTop + 38 * (i / 2); + + int prog = chemfac.progress[i]; + int j = prog * 17 / Math.max(chemfac.maxProgress[i], 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(offX + 51, offY + 16, 202, 247, j, 11); + + chemfac.tanks[i * 4 + 0].renderTank(offX + 41, offY + 46, this.zLevel, 3, 32); + chemfac.tanks[i * 4 + 1].renderTank(offX + 46, offY + 46, this.zLevel, 3, 32); + chemfac.tanks[i * 4 + 2].renderTank(offX + 103, offY + 46, this.zLevel, 3, 32); + chemfac.tanks[i * 4 + 3].renderTank(offX + 108, offY + 46, this.zLevel, 3, 32); + } + + if(Keyboard.isKeyDown(Keyboard.KEY_LMENU)) for(int i = 0; i < this.inventorySlots.inventorySlots.size(); i++) { Slot s = this.inventorySlots.getSlot(i); diff --git a/src/main/java/com/hbm/lib/Library.java b/src/main/java/com/hbm/lib/Library.java index f9a3861bc..ecfb05daa 100644 --- a/src/main/java/com/hbm/lib/Library.java +++ b/src/main/java/com/hbm/lib/Library.java @@ -628,11 +628,13 @@ public class Library { if(consume.getMaxFluidFillForReceive(type) - consume.getFluidFillForReceive(type) >= part) { that.setFluidFill(that.getFluidFill(type) - part, type); - consume.setFluidFillForReceive(consume.getFluidFillForReceive(type) + part, type); + consume.receiveFluid(part, type); + //consume.setFluidFillForReceive(consume.getFluidFillForReceive(type) + part, type); } else { that.setFluidFill(that.getFluidFill(type) - (consume.getMaxFluidFillForReceive(type) - consume.getFluidFillForReceive(type)), type); - consume.setFluidFillForReceive(consume.getMaxFluidFillForReceive(type), type); + consume.receiveFluid(consume.getMaxFluidFillForReceive(type) - consume.getFluidFillForReceive(type), type); + //consume.setFluidFillForReceive(consume.getMaxFluidFillForReceive(type), type); } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index c386e4b72..19f7d6f45 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -2,12 +2,17 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import java.util.Random; +import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.inventory.fluid.FluidType; +import com.hbm.main.MainRegistry; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase { @@ -15,9 +20,56 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase { super(77); } + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + + NBTTagCompound data = new NBTTagCompound(); + data.setLong("power", this.power); + data.setIntArray("progress", this.progress); + data.setIntArray("maxProgress", this.maxProgress); + data.setBoolean("isProgressing", isProgressing); + + for(int i = 0; i < tanks.length; i++) { + tanks[i].writeToNBT(data, "t" + i); + } + + this.networkPack(data, 150); + } else { + + if(this.worldObj.getTotalWorldTime() % 5 == 0) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + Random rand = worldObj.rand; + + double x = xCoord + 0.5 - rot.offsetX * 0.5; + double y = yCoord + 3; + double z = zCoord + 0.5 - rot.offsetZ * 0.5; + + worldObj.spawnParticle("cloud", x + dir.offsetX * 1.5 + rand.nextGaussian() * 0.15, y, z + dir.offsetZ * 1.5 + rand.nextGaussian() * 0.15, 0.0, 0.15, 0.0); + worldObj.spawnParticle("cloud", x - dir.offsetX * 0.5 + rand.nextGaussian() * 0.15, y, z - dir.offsetZ * 0.5 + rand.nextGaussian() * 0.15, 0.0, 0.15, 0.0); + } + } + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.power = nbt.getLong("power"); + this.progress = nbt.getIntArray("progress"); + this.maxProgress = nbt.getIntArray("maxProgress"); + this.isProgressing = nbt.getBoolean("isProgressing"); + + for(int i = 0; i < tanks.length; i++) { + tanks[i].readFromNBT(nbt, "t" + i); + } + } + @Override public long getMaxPower() { - return 0; + return 10_000_000; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java index 3206ab001..38f54b8a4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.FluidTank; @@ -31,7 +34,7 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa public long power; public int[] progress; - public int maxProgress = 100; + public int[] maxProgress; public boolean isProgressing; public FluidTank[] tanks; @@ -43,8 +46,9 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa super(scount); int count = this.getRecipeCount(); - + progress = new int[count]; + maxProgress = new int[count]; tanks = new FluidTank[4 * count]; for(int i = 0; i < 4 * count; i++) { @@ -131,12 +135,12 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa private boolean hasRequiredItems(ChemRecipe recipe, int index) { int[] indices = getSlotIndicesFromIndex(index); - return InventoryUtil.doesArrayHaveIngredients(slots, indices[2], indices[3], recipe.inputs); + return InventoryUtil.doesArrayHaveIngredients(slots, indices[0], indices[1], recipe.inputs); } private boolean hasSpaceForItems(ChemRecipe recipe, int index) { int[] indices = getSlotIndicesFromIndex(index); - return InventoryUtil.doesArrayHaveSpace(slots, indices[0], indices[1], recipe.outputs); + return InventoryUtil.doesArrayHaveSpace(slots, indices[2], indices[3], recipe.outputs); } private void process(int index) { @@ -150,9 +154,9 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa int template = getTemplateIndex(index); ChemRecipe recipe = ChemplantRecipes.indexMapping.get(slots[template].getItemDamage()); - this.maxProgress = recipe.getDuration() * this.speed / 100; + this.maxProgress[index] = recipe.getDuration() * this.speed / 100; - if(this.progress[index] >= this.maxProgress) { + if(this.progress[index] >= this.maxProgress[index]) { consumeFluids(recipe, index); produceFluids(recipe, index); consumeItems(recipe, index); @@ -178,7 +182,7 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa for(AStack in : recipe.inputs) { if(in != null) - InventoryUtil.tryConsumeAStack(slots, indices[2], indices[3], in); + InventoryUtil.tryConsumeAStack(slots, indices[0], indices[1], in); } } @@ -188,7 +192,7 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa for(ItemStack out : recipe.outputs) { if(out != null) - InventoryUtil.tryAddItemToInventory(slots, indices[0], indices[1], out.copy()); + InventoryUtil.tryAddItemToInventory(slots, indices[2], indices[3], out.copy()); } } private void loadItems(int index) { @@ -357,6 +361,62 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa return maxFill; } + @Override + public int getFluidFillForReceive(FluidType type) { + + int fill = 0; + + for(FluidTank tank : tanks) { + if(tank.index % 4 < 2 && tank.getTankType() == type) { + fill += tank.getFill(); + } + } + + return fill; + } + + @Override + public void receiveFluid(int amount, FluidType type) { + + List rec = new ArrayList(); + + for(FluidTank tank : tanks) { + if(tank.index % 4 < 2 && tank.getTankType() == type) { + rec.add(tank); + } + } + + if(rec.size() == 0) + return; + + int demand = 0; + + for(FluidTank tank : rec) { + demand += tank.getMaxFill() - tank.getFill(); + } + + int part = demand / rec.size(); // dividing ints rounds down anyway + + for(FluidTank tank : rec) { + tank.setFill(tank.getFill() + part); + demand -= part; + } + + //getting rid of annoying rounding errors + if(demand > 0) { + + while(demand > 0) { + + FluidTank tank = rec.get(worldObj.rand.nextInt(rec.size())); + if(tank.getFill() < tank.getMaxFill()) { + //we do single mB steps because the distribution is more even this way and honestly the remainder can't possibly be that big + tank.setFill(tank.getFill() + 1); + demand--; + } + } + } + } + public abstract int getRecipeCount(); public abstract int getTankCapacity(); public abstract int getTemplateIndex(int index); diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemfac.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemfac.png index 9f8823a1971dd90b5046583069f442b21b0e160d..4bbef79d55635c56f0e634b08b0fd10b5d4bb363 100755 GIT binary patch literal 5273 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 literal 5056 zcmb7Ic|4SD+rDPTGC~H0hcG5dWs3)89g}(}V~e6NWO)i1dNL|Yqhu}nzE`qUwy~7G zRElJ8Xc|(=I%Lhz=)H$}p7;IU@Av(F-~4mWecjh}-sg3m$8jF#bw`++{=vURda_H0dV2cDgY&@_b@$tAOzEfYpF*(|x>|nL5dz=ZlkHZ!^vydui6LpTbquDc*x&M^AL?8Rt9O zDwU3oj+TF)8~!0E829I_!}c~$H~ous-Ah!Vbo$g%t@W~K5fbRlH8ruSlBWl-H4^q$ z73E2X9&(uMJe%}u!2TWUQ;dGwm4=}o-s>Its?wJJajj#tZKfo5`2C7vv~!w?+&7mA#ITDFkOPly z=Iafcyk7qtGF|h;(fe!cm_MiQf#UsS#uEN+jsmk&FWBKwFVQUxpZDxA3%q}J})b5WX% zGzX~1QMr%DZDl>Kb!u8f^48UbKo5&wdaZO@R$CzVf`RB_q-Gq_A9fkHc)GWnrQ>@2 zx(W<5h`hbF5nJ==P#!RDYtCCsA7Aw_D3@>-M+NHH{k$!c*b8zEt!cTmTO~~*9Cc1d zL1KEF#yIKjR4M0kuT(%r;q5n*v|$L-zfg>ixpBp7M5kKmz_Kq`Jbe|*N!GHcdR1IktsmTb_(WN4;>+*|n*!8cuV0-MrM72!PW znG%KPupRa8%Qj!W;}aWRjEUYszuujZJN&vrFL(=(x9I=r&l9gyA#g9hg8$c6{zaHK&ihIRcvH?moL%Nl8fb* zyu@Pyuti0l*Z&EU@5zK+y*?-R`u<}|7#J2)PqYe1+XT`cD5D?j(cE|iTpbxMWPN^f zEoxec0bA)&+}G1`&x;*6;=vD9RPw}u%Q*i}V8e-H_x7Pe2< zd%Wx-8nze!qkLy#-M+lk=gi0;go{t(>}j!+553Q09E zHyPB^%wpb+0p3WuId3qEbn-Fyh05)~^N)TAy%N4!h+P?po0~iifAr42s-bbt4V#Zl zw0CvwA_lGT|AIf#_8A8|j{H_U=GMp0mlDNUE_07hN0=W=|KBs0Yl`o$)K2Y?Y9#Hl zaDN4nuZhJa4E_`Kt6aq#-WJE10mApteerS-K_8gq!pV%nNN?eY51W*IVCMLLqI53| z<-S++7ou;&!BMNKpO7h&$mjSUSx0vFasC5$v?VJ)DZdq`JImCmu0_{7z1Y|!j}<6f z%YIx7RWO*3+U>vnfRm%rC!t#PO;h-&qAeHeOUuwO~EGcUub3yLiti5E2_mGgkR;ex5)2 zF}p@BB^vg-ZvHFILB-qFs;7xj1{>;d`yE~6lNPx##aXU*E=bs@Hga;X?&J;Cj6s17 z4urV-NjQqYeUt_j7Pdo`I(LA-3WXdA+5Qtp(3bGu)a`kYy$Dpfv~>+tbExl(oOy-u zZ%{V!?|DjMg`vdXr&~7;o5LtpzGGvY0S{vnwrZbg z_Y&O)s8dyZVTT4iHMCPfv%;BV<`zi#JqH->Ori(`VoUqu>bfG6mpjMG`#Bpz^P%d$ zxA-mMnU4aEQ9YlI9@_eT)TYoZM;YxUx2SLws`S1q3ygYJwz4sXF#K@)rLT0q`H_~e zHjfq3haJ0j$22shb$Og!?TDrmytrq!xF&E>M}v95yR+$1FKw0wzh&$RnI>?sPQ;Xo z^2S9{;3iZo9^wARrd_H%vnis2dNW6-;%*+ItF!Me?Iy zdGqCBiZQOYRB_XsUBrHGK5~_dfVesW>S%T#%1r3}F0U@WPdb`~!YvmJFIGw-$UFek z?{WWAm_YsIsbYL|pfX_Pj~$B_^9R<{e{VLhG5@Vf$Lg}8|9jM8=th$_5W6E?xwbOo84(7qZnJ=B*9pGhbqAU zk|oNqlwnqD8gKR!k`>)yxYD9Pt&1WLDNfbMlsHjP!yfUs zKCSxpj@M0$Yt{sP5+id4Y|@QRG|1vcTQ<}crUq2YU3OA%TPYs6+TYkWv}Jv zPC!)Rx8pX)Y&2zCR&}%>zs`+lk%esS*>qcm&vy}{@II`IqnY$xurwsLy`>~WqI8m zKUt|Re#_-|aY+TbVnUr~Ym`*;6t(np&D_W5yv&ukoir!yNm3*8OU7G9qD5ul*!+Bt zymH%z>UYL-7!dwmE0>=*R38^3tzRKoeb=kis+3mvIZEnTMVMO0hr`1j_az0BLC68u z28ZGHH+a22)#@IS<}dX^{{7i=*g$-e??qaWpK6*F>GM=|!YmJTZ0(U@hCQ03Op(L@ zvgk>GUTNL7l_3+XHNO`|JCb-mONS4#C#Nq?sOr$nXrKtxKO|Lnqhe#pP5}K(hS|-O zOLc=)GDg|A`zP9T7_<56>^U1JV)oj+SMSz!5?+luEZ20KO1*)jKBj&j4@~f?KPQ5v znTl`$oV&SS0pX(e>o1Cj7gh!z*va|zn{I(3C}~lttsLmsKB`0$gv{rORGTjEx&Jxi z?Mn4K_WhxX1tv2gAab;X1_h`7(j0E6{&EXxz_gT+dX^%gVz%n|#e=E(xSdpgNg0@N zoYB^+OwbpUUvnVW5dIi0BB0$L`GSsDlM& zb2XAcZ{(6V;g>HY^xM;ts9M&3xBtRs|f9x*8T|DU0` zGumau-7RHVDl{HJWm68!vp-H{BRLFQdCG(b@9EpxE}P+ya!D|BZB)QS4l^vrfQ+(Z z2cY?PDUO?lcRb(5DD)lC*`CT+=`vln`hY6r1A`?&)jM7WRR^0Dv{bMS`*_!?f<)a> z4e219k^XyLz$^)*bbNflO+j1CLFO0T%-2{YVpOQ;@AZDY@+yKMMD~HHuCSS$P8$kP}y` zhnv<@P8vh7R-rMJS1IGel%`pS^SE&SE&jllYrP_;Hx1~04{@~cP&2nq_ACEA6?O52 znbgul+^#A(w)cqv?xkWQckokSuD(RQ=pGvzJ9iMd<0dT8b*-XEPl;3RcGnjJDgDc` z_j9h67v7S*ghtB1K0VihavbIg<@osX;U9CuN2os*==c4b*1ppUs;%Am%{b-qLZ*wF zXFG>9)>)M#23n}EbDjch_|AZa~bPHGZ*w5qA6rZQc+Gq4^@e*0)3Z8gOp zDa?Ec_tbUq^*gPYC*>(R`I<2!<@o{mPwh-a*C!deIEeA~KGVJFp7skzs$0El7;ufj ze*aD=ytiLFKk4e#M~@yM6c=Duc0Glt|Jj0OekStg3Kkoe;@MJ~UzA&^6sqNh1u5Tj zs#qPtdio2#)}rMAEv>B3%EF#KV>>=R)-N{tSqXgsu?-FmuDv7RF9n3 z{`A}M+qckf#8k4dufChd93(B}oQKLeLJ2()Sr756i`>tAHmB)9CU7_e&fNdvU%I5E zq>g`-=(7q$pC*gO-l70_KJr7V#) zys~eu{(VU1WzdGo;?U63iXBD`qqMlxL62+h%E^TJO5aWRG|{=`6G9?YC$fVz|8w^| zQf-kf@<PVx+R!oucYiT8?m7fC8&m!Pt>@>8Tr|ZPa$hx@+YCOsthp+3mhJxU$r!Qo7GVnJCJ4wtUolW)bauT1b3qy)Cp{pH5doOW`9BR>I2Y)Cng~`aSkOJa@)Z~UE^BQwQ+(ecEk|(N%zK4y|C%N4aI9~1oFur z2Z^#&=FtsxR7p>hynn2^Clj>CKw9Cij zWQZNH$^0Wg{l^bt$;uKL-X&Eo*t*}na`_`LX-5VS`vvQzWG!lRlNr* zpZ*B%r#o%tMZG?6Yb5esW7k+P-KlmZK-bsz;A)SPVhPte*tZL=@T==x~MXl;5{2zIf*g5ZWJbs$n zZQpn(*K#Nw%FuVpvsz%&vye7L3M?2|*ydACPS;YD36st)vF>%Dd=>3$pS{|!m`#G@ zy#3khC(ps@;}ZOPBcO)YMia%IiLJ@B6i96E>(<8`ayQvRVr>7|o0M$^N@)aK!AfZJ z#pX&0lZsgtr86T`jDGqx!cZj-QX;tAbfo!ZvWrn~6oB3x5UX&-J6vE}08YNazviUC9f{BO}}51~=U$a`y_ z>|sO8&FRPRc*^Y1fBwg36u17eXKpr*AQ2!X6j<8kIZnf>ZAreyICY7L|V1#mDv60jAd+k_2;ZvgD&^fT@p=E3qt}nRy+r4;k z-=EmM=`b57!w@G>sHg$!y`?E$Bo(+f^vw74eenL6L#;qgo#_0_#*mIkMkysF@zvqK zD}C$&P*UXcmgz=GA+UZEdS;lmq;ZSqVBdiW0%W4 zL4J9?zm`HZ5eV+S@$q2YYr@yi3nIQzZ%6)s5&y>jduRR8RI2Cszq1*$=nIO!I$#2f z#Zod!n7=dPQ2)#8XZS7%1cI{u1t^QvNX2unX)idXJ;U47x`l^G14$u9+H4N3ufb6B zs;a72k|Eo%MMffi2UEV8%`;wbWh<0<-zShA)KH5_U~zKt#_;ek5CFFNAKv@}=v$4I z#d455!9rs=*I%2q@2@H{4TG6Ov&@{$Tk&L=8_Wznvm9F8YwQQ7_t?kn?JWfvJ9&un zYj^t3{-8PQdM}!7gP2Ud1cK@D-B^&6efjNUb}s>J&sU8J(Y{xd3XT*|MKVQjr_4X% zg$bA4{-t4$P7Z*^jD9q;Yj#?E+T!v?^Wno_4#q;(65}^z>Yl;u<2i;ro45n`lG0^c zq02>vA7rcLF9V&tu{{fb%==_|o_RJV=i0!?S{l?_g2WF#0mS{^%?W5&!>{KJIqMDv zJ>R@+R)u~eUh;II)CW#k_&A4E{(N*ajTC5LgGiZAp(2V25%;=Ye^xFwO2>}-bNsZZ zLI*$%Y27>T*x;mBSoCWQUxb9f$8lsH-iXgZ?^*?{j&A+u@B71ocLo$LYazSZV&_;~ zD_f^6ciHwQ8$1nE&PB0Jd^qnr)Y7*LfBi=v^wEP^nR4!3ArU5ghRA_tOa#A=2m61# zW)lSFkzpzG$nDxcc1}(v`SYWlMf2vzILsXZ1bWa7CtX^#-5AIHwbx~|srzve{W<}r z5ii`yVVm~{(70c2G8he8ZM~IwfqF)-5ibZDWhVXZ4%E@IH>EZ3=)+yWKT>hXdRI;) za=#=>5YU*^Akm zi63}4_mE79>PcXpNsIA+b>F_-YzcN zm$^^yUKX{aLGJ4rgXs=<+sT#|(DBJh)ssxNkj)Rjb^o*8N4$!+9U3eajAM-@QuE6~ zoTGQ=!{awn14Ac&r%xR>UcZ=|_T%elJSyCOv*+mONXr^=-}5Ay&4yB6vT!pdW@`(L zQEZaAesYh2TR!67zYvS&Ak*=2(U(ieGdTswO7e!{mlxPGCIs)W zNy1$k8DM&mG$PRTOZ&sY(DYZcwG?v1U=@<4yZiM1>43q|Hs?;D)f*ctaU%Qp&!2BL z{6`86ia)W@UQWU!-3vOri)_G5cj@dTyMF#U>^g+1++p6Q#Ma3X+l$((Dp}vLs}mM? z0R7ic&gp1veZAIk%Yxb_?R9{ORpN6KE`M|lkf24Xy_zeqrH#Dww*8~Bl9KCceuL|- zXkeaIYZlm{7m+IQe4qzQ#6a`NzCZiq&F_uFG+0~(63Op588ejrjw{T9ns`+Dp6pC^ zJBsvIHE|@jYLo+}D=W-GEBszt+{O_;bNzFni7D7ksyaWv#67%&F4G((RzaY8z^QKj z{P_b&=Iw@J>M<9HSE4wP?$cB=M#C9HmzJr@bloQTxe0-w?kPU;p}Qc%uhWky;#txF zVY%2PTsm__m4oQVEQ4n?GH6VE3)ky%DTy=3gX4<&FdMA=&cNWOUwF-tnoR0>-37<* zQio9@1ggvB53Z~#{*WTjX!H>}tsRb|mio?lL~z_m6}$53k~-gj7O^H5XM<@aM9Ng>cE zzE8M@gQ3Y*F?4I9BVzJ|E9VIJ&ObUjTI$}tH>vP|JAHl}@QkA?^U;6)SalPLHaYz5|hi>~xEi-&_^l6Mdn)TNQ`m0wjf#kv$QeD`!UOPP9|Uyq1V&A; zS$Mw=$PMvWz5DLDiD>sln_@0XsGqhDnebyDXlvew+YVHGOO7jfGBzeaQ_H8R~MIVh=Q`bd`Tv~LFq_i1=aMBjtO0yfI|>(C+r@F zgbFvsLisiCsT_K#ggu){;R}c0FsUe0cxKTyGgMC#m)n_w*$YtGuQiHPBO7xu?!v*4 zOdc8tI^C$bG9!^F-q=7D>tdsUSFUZW-mjzqs>1(`gS6}OC~ahQzI)gqmo(+c4WKlz zG%*2*f7j4}^?eFUzl#?~7~C2*?G3=ibIG}ZKuP0)Kk3Y?On$vuzb>Vr^CSrqQFOcU z0bf(9ValA04&f80wCI}W0uuViAVomvd-&ZXuofEZgTug5&>_5cv^7-wF7xDdA>&af znW@FR1m#QDlHt8FS~}m}qB#@y4=+hH1`%df#W0s|O%9{{YVCZ^A`OcS6`=(6wR z)d3OlGwb&sDR{YRcsaSb_v|z_ryhyxu1zG z#?y+AZ_Mm9SuI+TVs@Eiq9A~@16?6G85yq&9KVd*>mk`L?Qj0Rx#W*aA`7dntu06v z!?ztb4v&n)9dO1`j!#VVPfxpHY)DynJ81
    >GJNK{l*_h4yl%`51tq-Ud29kbic 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