From 0401120300a6bf8c3b3e26de68c4b1a6b676994f Mon Sep 17 00:00:00 2001 From: funions123 Date: Mon, 14 Oct 2024 22:19:21 -0400 Subject: [PATCH] Preliminary BWR Functionality (#1) * BWR functionality addition Adds the ability to pump distilled water directly into a reactor core and get steam. Efficiency (configurable) currently set at 2x compared to LHE 5x Maximum output per reactor set at around 600 HU/s, based on the size of the output buffer tank. * Update FluidList.java * applied spotless --------- Co-authored-by: RecursivePineapple --- .../nuclear_horizons/Config.java | 5 +++ .../reactors/fluids/FluidList.java | 8 ++++- .../reactors/fluids/IconLoader.java | 4 +++ .../reactors/items/MetaCellItem.java | 6 +++- .../reactors/tile/TileReactorCore.java | 34 +++++++++++++++--- .../assets/nuclear_horizons/lang/en_US.lang | 3 ++ .../textures/blocks/distilled_water_flow.png | Bin 0 -> 9847 bytes .../blocks/distilled_water_flow.png.mcmeta | 5 +++ .../textures/blocks/distilled_water_still.png | Bin 0 -> 14305 bytes .../blocks/distilled_water_still.png.mcmeta | 5 +++ .../textures/items/cellDistilledWater.png | Bin 0 -> 301 bytes 11 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_still.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_still.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/cellDistilledWater.png diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java index c4310ad..99703de 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java @@ -11,6 +11,11 @@ public class Config { public static double MOX_EU_COEFFICIENT = 4; public static int REACTOR_EU_MULTIPLIER = 100; public static int FLUID_NUKE_HU_MULTIPLIER = 2; + // 1 HU converts this/160 mb of distilled water to this mb of steam + // ex: 600 HU/s converts 1200mb/s of distilled water to 192000mb/s of steam + // BWRs are limited by the size of the reactor output buffer and this value + // which currently puts maximum power at just over 600 HU/s + public static int BWR_STEAM_PER_HU_MULTIPLIER = 320; public static int COOLANT_SPECIFIC_HEAT = 1; public static int NAQ_COOLANT_SPECIFIC_HEAT = 8; diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java index dd23c28..405ba03 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java @@ -15,17 +15,20 @@ public class FluidList { + public static final String DISTILLED_WATER_NAME = "distilled_water"; public static final String COOLANT_NAME = "nh_coolant"; public static final String HOT_COOLANT_NAME = "nh_hot_coolant"; public static final String PSEUDO_LIQUID_NAQUADAH_NAME = "pseudo_liquid_naquadah"; public static final String HOT_PSEUDO_LIQUID_NAQUADAH_NAME = "hot_pseudo_liquid_naquadah"; - + public static final Fluid DISTILLED_WATER = new Fluid(DISTILLED_WATER_NAME); public static final Fluid COOLANT = new Fluid(COOLANT_NAME); public static final Fluid HOT_COOLANT = new Fluid(HOT_COOLANT_NAME); public static final Fluid PSEUDO_LIQUID_NAQUADAH = new Fluid(PSEUDO_LIQUID_NAQUADAH_NAME); public static final Fluid HOT_PSEUDO_LIQUID_NAQUADAH = new Fluid(HOT_PSEUDO_LIQUID_NAQUADAH_NAME); public static void registerFluids() { + FluidRegistry.registerFluid(DISTILLED_WATER); + FluidRegistry.registerFluid(COOLANT); HOT_COOLANT.setTemperature(273 + 200); @@ -43,6 +46,7 @@ public static void registerContainers() { registerCell(HOT_COOLANT, 1); registerCell(PSEUDO_LIQUID_NAQUADAH, 2); registerCell(HOT_PSEUDO_LIQUID_NAQUADAH, 3); + registerCell(DISTILLED_WATER, 4); } private static void registerCell(Fluid fluid, int metadata) { @@ -59,6 +63,8 @@ public static void registerCoolants() { FluidRegistry.getFluid("ic2hotcoolant"), Config.COOLANT_SPECIFIC_HEAT); + CoolantRegistry.registerCoolant(DISTILLED_WATER, FluidRegistry.getFluid("steam"), 1); + CoolantRegistry .registerCoolant(PSEUDO_LIQUID_NAQUADAH, HOT_PSEUDO_LIQUID_NAQUADAH, Config.NAQ_COOLANT_SPECIFIC_HEAT); diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java index c792a4f..b7744cd 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java @@ -18,6 +18,10 @@ public void register() { @SubscribeEvent public void registerIcons(TextureStitchEvent.Pre event) { if (event.map.getTextureType() == 0) { + FluidList.DISTILLED_WATER.setIcons( + event.map.registerIcon(NuclearHorizons.MODID + ":distilled_water_still"), + event.map.registerIcon(NuclearHorizons.MODID + ":distilled_water_flow")); + FluidList.COOLANT.setIcons( event.map.registerIcon(NuclearHorizons.MODID + ":coolant_still"), event.map.registerIcon(NuclearHorizons.MODID + ":coolant_flow")); diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java index 9d50dc7..cfa7961 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java @@ -18,7 +18,7 @@ public class MetaCellItem extends Item { - private IIcon[] icons = new IIcon[4]; + private IIcon[] icons = new IIcon[5]; public MetaCellItem() { setUnlocalizedName("metacell"); @@ -35,6 +35,7 @@ public void registerIcons(IIconRegister register) { icons[1] = register.registerIcon(NuclearHorizons.MODID + ":cellHotCoolant"); icons[2] = register.registerIcon(NuclearHorizons.MODID + ":cellPseudoLiquidNaquadah"); icons[3] = register.registerIcon(NuclearHorizons.MODID + ":cellHotPseudoLiquidNaquadah"); + icons[4] = register.registerIcon(NuclearHorizons.MODID + ":cellDistilledWater"); } @Override @@ -53,6 +54,7 @@ public String getUnlocalizedName(ItemStack stack) { case 1 -> "item.cell_hot_coolant"; case 2 -> "item.cell_pseudo_liquid_naquadah"; case 3 -> "item.cell_hot_pseudo_liquid_naquadah"; + case 4 -> "item.cell_distilled_water"; default -> "item.invalid_cell"; }; } @@ -66,6 +68,7 @@ public void addInformation(ItemStack stack, EntityPlayer player, List li case 1 -> I18n.format("item.cell_hot_coolant.tooltip"); case 2 -> I18n.format("item.cell_pseudo_liquid_naquadah.tooltip", Config.NAQ_COOLANT_SPECIFIC_HEAT); case 3 -> I18n.format("item.cell_hot_pseudo_liquid_naquadah.tooltip"); + case 4 -> I18n.format("item.cell_distilled_water"); default -> ""; }); } @@ -76,5 +79,6 @@ public void getSubItems(Item item, CreativeTabs tab, List subItems) { subItems.add(new ItemStack(this, 1, 1)); subItems.add(new ItemStack(this, 1, 2)); subItems.add(new ItemStack(this, 1, 3)); + subItems.add(new ItemStack(this, 1, 4)); } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java index 26714ee..6a4f0ec 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java @@ -96,7 +96,10 @@ public class TileReactorCore extends TileEntity Coolant coolantCache; FluidTank coolantTank = new FluidTank(10_000); - FluidTank hotCoolantTank = new FluidTank(10_000); + // change for testing distilled water->steam conversion + // since so much steam is produced per HU, you need a large output buffer to capture useful + // steam/s production + FluidTank hotCoolantTank = new FluidTank(200_000); private ArrayList reactorBlocks = new ArrayList<>(); @@ -1040,12 +1043,35 @@ public int addAirHeat(int airHeat) { this.coolantTank.getFluidAmount(), this.hotCoolantTank.getCapacity() - this.hotCoolantTank.getFluidAmount()); - int consumedCoolant = Math.min(roundedHeat / coolantCache.specificHeatCapacity, heatableCoolant); + int consumedCoolant; + // BWR + if (this.coolantCache.cold.getName() + .equals("distilled_water")) { + consumedCoolant = Math.min( + roundedHeat / (coolantCache.specificHeatCapacity), + Math.min( + this.coolantTank.getFluidAmount(), + (this.hotCoolantTank.getCapacity() - this.hotCoolantTank.getFluidAmount()) + / Config.BWR_STEAM_PER_HU_MULTIPLIER)); + } + // conventional coolants + else { + consumedCoolant = Math.min(roundedHeat / coolantCache.specificHeatCapacity, heatableCoolant); + } this.roundedHeat -= consumedCoolant * coolantCache.specificHeatCapacity; this.addedHeat += consumedCoolant * coolantCache.specificHeatCapacity; - this.coolantTank.drain(consumedCoolant, true); - this.hotCoolantTank.fill(new FluidStack(coolantCache.hot, consumedCoolant), true); + // for BWRs, convert distilled water to a configured amount of steam instead of the same quantity of hot + // coolant + if (this.coolantCache.cold.getName() + .equals("distilled_water")) { + this.coolantTank.drain(consumedCoolant, true); + this.hotCoolantTank + .fill(new FluidStack(coolantCache.hot, consumedCoolant * Config.BWR_STEAM_PER_HU_MULTIPLIER), true); + } else { + this.coolantTank.drain(consumedCoolant, true); + this.hotCoolantTank.fill(new FluidStack(coolantCache.hot, consumedCoolant), true); + } return 0; } else { diff --git a/src/main/resources/assets/nuclear_horizons/lang/en_US.lang b/src/main/resources/assets/nuclear_horizons/lang/en_US.lang index 1f00384..5aaa9bf 100644 --- a/src/main/resources/assets/nuclear_horizons/lang/en_US.lang +++ b/src/main/resources/assets/nuclear_horizons/lang/en_US.lang @@ -7,6 +7,8 @@ tile.reactor_redstone_port.name=Reactor Redstone Port tile.reactor_thermal_sensor.name=Reactor Thermal Sensor tile.reactor_simulator.name=Reactor Simulator +tile.distilled_water.name=Distilled Water + tile.nh_coolant.name=Coolant tile.nh_hot_coolant.name=Hot Coolant @@ -48,6 +50,7 @@ item.reactorPlatingExplosive.name=Containment Reactor Plating item.debugHeatAbsorber.name=Creative Heat Absorber item.reactorPlatingHeatDebug.name=Creative Reactor Plating +item.cell_distilled_water.name=Distilled Water Cell item.cell_coolant.name=Coolant Cell item.cell_hot_coolant.name=Hot Coolant Cell item.cell_pseudo_liquid_naquadah.name=Pseudo-Crystalline Naquadah Cell diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png b/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..39d3c70c3f6ded3bcaf617253af82a663d08df97 GIT binary patch literal 9847 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 Qe?V`Fa9!1iL4C z#KzA>^&DIH*c!^>66{)iB&vi)>VHX9o1EII!jDzC`uf7-G=5*3He$hVoE)Bw8St!U!6JYbK-r}jd-?ZJ2m z=XM5;>~oT?D;W(?%dzv%_9cPvv)q<#B{Zot{J0W$;v>XVs8l_^wi{svZu)yu+u20T zN9W(r-+nCFzioA-d27K?zOyN*>rz=fe{h-uGP>SlN0tX|=y0okig8Rmh-RQ}z%IJB z9t-hXx+(WZydsMhvyoW0(5@|1M5n-HS1Yc=jIqJIqQX-1j!)lw{ifR9qqGnw9_I za2k2TP^n3wTf9)KO5%}fRyp~v+{E~uNX;hBKd!Ey%D+6hc?HlNNui!-)=9Xw7!fh8 zD3h);3|3EBh-B5YoUVcq`p@HU2z=W*QD+n=2J^F*V1_QPK~RJdpfe|n`y!U^iPF;2 z3|$iLGmX`c=-I1|t_^(W*DLB?G28xK^A))TK0ZOhEQwh>R1~?Ofb1Cxw9Ja^Gzu?3 z{q^kr4v02ZQlNlU>8h}>X2-lrb{Lupu|&*p$u{H6R@>{0{o$w07c$?7E+AmY7sdBi znef7%BL4R@Mg0HGiU^f!(Enrt)W7wZLM<2VGbVH>VEf$*pw=_m%`&F;j+nnR-Oz0q zT*7%wH5T1L-#9;EM-+dmu$ik&1Fuv38W@j#Dvb7g_Gy;S;w+1w)_K}TI=}3x>E}Bf zoqQyWsLH+9Sr;zThr@7v9iCs-`a_4&%Qn5)ZwG7Pzd-%D}5z7V!bc~f_v?1H1*Kv4%=g`qEmJ{o@iZq>Tk@SOO5eYQ}W^$aElHB)+t{QW8*MMlv)SB zd?#06I}9iJV@=QQ9!)=dKo4?-pt8>S60g0B7vP0t4jX8t<6x5NI;Fq9o!lLTq_C!!IIZXp8X z{-VaQ39FKNzWz}GxoIyu;*Z#2zgr78d;xcJ?rLeNTML3u61-Ij@-VlqQ>xbLgBGMd zYINCb?+?C4=%GzSYG!a&RNRl%c4Aemj7Zg|;3JarYhaG0xXo_|A>uAr#YIJLux@Fv z&|xT4Z-BeZSi ze+h~wxxIbN;T^E$Q36gMIs6JQaL=mNHLi+?U~m7kEo?Z;Mz%b(&dty57I5X()4y+>C;`7FPtWWM^vx8G-ROA2Sg%%JpL=Jj5J5v)3XcD=qg>d(O01z|izEs_7OqFy9t zEReC7=WeE-a8}AZzP(J7Hs||V?6`W_N!7icppN60>YXC+7za(uhZPcq4zjDGiHzK{Cu--es1QNe`i zZkU?qqz)m98+QcgO-=DekW{N!dJJ~$KFI3ul}9^a%K-y;v@8j<{$Uh&^(N$|zc;9a z({ciQt0=7)&eX{=1CgB_X@TF?5v;5J< z`y%ZLo0XihbR!_zi#vpvK(N`=j&mB{v|>t#|LZ$w_Ip%8SBbWLg mll@=uDgY7MD4k5y$t5bE8FooFjv;Ij18AsdE7vJmNB%#O>fX=* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png.mcmeta b/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png.mcmeta new file mode 100644 index 0000000..a1b7fad --- /dev/null +++ b/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_still.png b/src/main/resources/assets/nuclear_horizons/textures/blocks/distilled_water_still.png new file mode 100644 index 0000000000000000000000000000000000000000..df24378612c8cc9f0d27e1c1ca09fd790f8e55ae GIT binary patch literal 14305 zcmV<7Hy+4|P)_^PpP9dyKb^0bvu3UCGcBo9s;s<31cO2P z#V(i!z?_U!pLkJLC`dZp%{G9&H(>OC{$Hp6dz~;r0Vq<<$WQ{DT1Q#c^jghl+j2LM1tRz;-%mL9j&uK)yu z9d7fCvlb*R$i=T(;vRQ3BWpzgfuX2cfjr|xgg^ld0C~b0Kp7wL69o#y;N?|cq}$EOyTL05a0Pl6Fb8yb#hho%-5$5{@>l);?0%vEz0C-yg_G zWwEOv2Gp%48JY$9;2}kt)%ohMP zj@S?P^iT`x^rT-)!kT8x$KUjGO_;Qzg1{UQ0YvF`xLqflpmsBt1D@t*{kGwOpogN? zgb9QY28^-Cxcfw(;)p?}XME!Tt_76{g#sdX7&jcqSR4CWj0iZ1Qy@v;U;7A=Y;_|9bh6kVM)A^fzSxz`<#zG8^ zJKUuild8eI@0mIu@I*m5j<_WTi|lB(9B~8y=`nO4=u@}HetE@f$(l4Hg8?G+6u|99 z<{4|Z$6j84*8d40_>RQ#qThhaR`welw4x9r<}+R?Al8ayPKF23x39g4ZP$2(2bCDi z5kicsAdW;+l4^UCbAGvJN*nw5;UR14^$d|VC*!TDJK!kAf zd;IbEtNuON4u)_UlkG|ZVxDpG&C`~$)QY7n4nq-rh#2yWqim1Rqc9RCFeL7ATUN|% zKLo*8SFBpF)D`El;0yo~dW_X>nB50^8a2;2UgJScm;j)^!-vq*z!7nN)+g!qxE=24 zaeCJ8>x7d(=g{C@tF2Nk_LY_+Ug)ebj@X015_;;FH$4yoalqK$(I4V~VS3RgULmz0 z6TlQ9ERYZp(;26{VCi-k<@gW%i{GpOMVX)VE3SV$0n>_986l}XS}n+i2LVAZH*$-@ zY8z(D8#tmTMywuixI?cQMYgTEMc6HC4Yh9D8~(yf{sFZh6M+Tr91;E)^^zYD+wUFP zL;Jl}R5kR1_@$(_7aY=<>`kG?@&g%hO9V<2UNt)&0Fded!hZtP18K$Lc+iK4Ar3TB zK)Cq{KOH~ouW7;w6;-%1OsMv*=yte`d%DqrG9UD*BxF_O^{mITVm*CvJm?({`Wrl? z850z>7L@53U#2Jh($+i+q!v_N?TT2?%YbqBfj;(kxRvP%-zb2!*!E?CMeK}4Gg7hq zfVHAl1JWf=c$;5ry$CTF08{X7n~{l8+Zz%?C?G@&wmEd@@`R&5u_`1#;DH5^o_g?> zgeyv3G5Z!i!?Lsj0{@5y+}_XwP5~i+!J3ilVz~r&7^TB5oiBJ$d>vFIR4_R1u`da$ zhdZ#KuLTP#P!~+gj5h!f?k@le0vj42XUhjTbm-L*&V>lv-Qgj0)P)|y^sHZ{8!`6x z^vCI0pYn`ZfrS`-e}ntwgkw#1*;jb*M8WX@U1vv1h~1sdL8;Xz;l=N0E-xKKHw*NkaSSi}noTqPNS*l?gl zW9U|p_8=s!7J#%M$yKpYwg6jf`&O%y0?5<*Y_Vhkz1va!&5BvTh zwfMgoEFNW-Z5?j6?xFNAyG>8EAa`-{}94 z5w~as2Y2Yna$%6=2YVT4S1Zc;rmrPo_3A{YC;f8%jxQ7trN>wt4{p{EmL#-C%dY1FzH?h?E7BCM?Myulmy}STU6eZ_A4nB|_{; z6>njD(Sp+QL}J4P8L%%2S$cG7!nwVnP{gSA6zUc25xigyygSUE!c#l@3zNL?-J zQh)%cB)Vdcj(qP9Apbf1q%pa%MWfWKiIexLDYf*MJ)?n^XwIi z7oOD%PDVxc{NMywf(heR7Gfao@E|>PGGc%Jre7qExa;l5TgQW2JmdvSSuxdwIxjdu)tH+O`_Q4Q z6}e2lXBaW`=x%=Kity;2ZZTapNY_-W(Za-#*$}yoXfiHdk#Iu5Yg3wR3@xi015yH$nC$-pW+UKoWJ1< z2?S1s`4vbyh15Huq-63&0BC!o3A z8`)u8&p65^LX@q{F+AAe-t~mCaclmD`Ha_evU?+*I3x;&N}92tqPm`dFktlDX@#P6 zdpv}my12vs^hG~Q=rDwc+q__^7D#%(g8h2IgO;V$K!LJi2@#$2==(c* zBmzy(`sAFd=}R4kZby3-#QC64>lst%&`DcBE%TbbZ~Q?^^8yKwCmhS7vnq=7Zwu78 z_4d4@Et3t2!-fZqe^(?BP!>$IsXV&j!B#Ig8S@SgR8bUH|6M#k;Aq@=tJ>ODh9Yw? z#Qp&fplSrg1rKISE;aKwnn`86WW}&6x6x z6B3q`FsWLKBO`7(fJ;Vler+K}WQN@S3;jWM80Gv8zmTAB-$@4CvOv~19MTDgw*I$F z4oHp%-$0gR?Of5T>YwC-<+i=S;5gu36*czg*Aq@Ho``Eki(YEPZNWHm3n*%yaCAIa zaf#+Eb;acBW^A0I7GzH@Hj-+KOyqd5$L;F*0XNE{Whrbb$EGi~kk$|?pK(ejyb`^~ z15mhBD@|Vv1NQ$5JlLJS=x@Ri9rxIIb&@C;yA^xv*E3Eo(AGxEEwA`SqJ86`1wgF@ znIj|!#_pExv;fPSKDUe=gcy4aaYuWO=;jxFPP0`oQdeZPRJX1LX?l9kClXsNna()o zMQ0cuj5TBBh_10Xg%}Zr3GYI@s!_tAjYmN?JP2jNNg4&%G}WeXLQ(1^R)j5&u)@Dk zw$xujkKUtkZYmGRlTE8i%9SD*u84}j0W2Y+%SHj9DH>jtK#Lcef*3k<)fbqStTS1}K@IcjQF(Pn2LEO}y-Ga2qse1Vd)021ihbPEU5E%SW=zZw zsis~PT~Jd+nxFNzEBxc;4B7C&h0T&Mb7!c$Y@v-1)OQ?_rMFs5q`iK;*%ZQF^KznFBf&jJ05q@ex0z2~##%JZVKLt64?*XvJlobjrprEX0Ti!2Q3` zzl9!s!vo9A8Qkr0ON_9daGVc#dY2#Ajhyl|pC~)*IhdkV7EJ3K4xTe#U_Lk-c&`#Mb_trbPuX7Nl!T4LR5Nl!4F7G*Ax zfU&zlpBF5GMtKzn60)@)N9>$KF8)SMu-f0a?I` zP?Tycb_^W`>CvZU%MZ{vSH}a6cudxs*{tY3Aa}+i3@+g0x1cr zb27z!uh z39APp-2ajO9J&i0G~r(QTLY2hgyZy#FIOUNQ3Z-~>Kh)!J#IrpEEy%wIGI%jtoe%F z50L%_A8JAAZ|QM5=y$ghbOHh|N4#uyfoq8O`auiw@`@+J4s8iYDl3xY$x2@$7*}D> zJT%Q|BPPNX_!2nY;GwubvHD|5sIECj^xcSYwfvxX0a8Ksw`IXwp7BOxMwYQ&=}9%2 zIJ0C^yjak)QNR-v=x_1B9gT57cmA&5#Px)hR4)w=LPW?3smwUl^%Aw_7poWa4)^9i z5OgKmmm|3(na!KhzPm(p-Hp`?%d0-;1q(5P)Pmd$u60I9`d({vj$QJCRFdZh19r7w zjSp*JA*;oR$3{Z54{1OnM39m&U*Q3$A|N<5Vss$G^2Dtud7mF#@E~mULUC5ZKB;r- z>F(iQ>CYiz089;RgH~h~qlV&+_KpYN-oEH(7T4n#kns^eEpIMRJ09e- z)dg|Dz9y{8L32q+C1K`>E-=E~pXkp)5aj$FpNTeKrVRJ^qy=?7J} ze%7xbK)PEzN{_y*Skr{l^n@>sW8X*^0e3fe(2COE(c}E0-^+?M^ccjx8@}M$E@paC z%MWTzsPhZH5rfw^Jv2N}0Gv)ZZ0u#QT9Mdp(3Nu(UPE*HI&qI%6Rv%=wM>;52%Qn} zjt5DL=YvwVErrqJi{C2MN zNXf`$##D`zNC3k8VtitMgL`u6yesQw?na0h+{|`{0wf4fQ#!gmZdoXM;>^woY!(*ECoNY0sl97X;BLUs~p8muEe8B^ciQ@x3 zYSFsd*8aSawDw3-u~e+#L6H6qA7rGluDYxzoX+3O4dv+6@`Kpl;#Mm#Jkb60Y>`QN z^o9rD^*61^TFkeO_rWF9gk^fhLIJ!S^{JUyvZBiR=E+5SWKP0+)p}{oU?XoEVHtXi znvt*liO^!b3!%e44la$VDLu|)2e+c4EXYJCCR{tO96I!6!BP{Z#WGiBL5#b1c<_lM z^`Wz@-C8g_fHXYdh>-}Qidtlxv6s{xq;Aj3UAqy>v-YY70CVhn$X zi0hla<_V`-P|Awz$p!B|(!US^GCkuPIqk`Ue*8e6YSJamSmpzsw!++t@jPw*cH_w(G-EB+QPnDyq-s%!qq#iNgi{EX zr8>h=^^$ZfEkD>-0}BZq`eM~tTAOoH(8t}y?AYCyKam(=IqIvZx%2x5gedvw}rrkb%-^J9lA zrk~kEzq(_%1VoPL>V&D`!QzjvY=jeC(*JtFib9N_giw-oS)IS@m(6CnF-Byn|242U z%LB)Q^YucJ?iL?dz^$#Icb!kXNL#Vs1ruS+Gz*hy%vusLyFa)QXa4tZddx8Se22 z05ZSe$xVI25##tspK8)6uUMvMeDjtAZt*kEmijCQcL(u1ea zRGpOY{9w4pM=i*^kMwCi;AK7QQ9ASzA`Nd}^fxWY)vN^N$D~tNoX_8|a6~^}@Ss8g zIe*vBSEMxBB661yZ_2pYFl{w@pe-wsY?63uehb#@Bt7~x;Y95Dfmuz`wO~bzAS~!B zT_TMZq?)lf9#j(aagTjjt#6~-<1TbGfPnQ)kD^UBw~mn}Ohq^PW-UnB*uJXO{Rct& zxWg_)M3DhQwvb+$JW>;Ki^`t476il~=z>60UA$6j3d_Whx*};s^*o`x%Ma||wPYlX z7%70)lODSr-To6EymNji_=o%;`rk4U`26%951P^Qy+CnceXCZavb^UXrMtxg3nZO4 z8?jkxM(l|oZgd9-i7L>D$+kkJteDDbmixw+5dqmcYPa5wCR;Fh0qW$X6z>Y4fL_an zi-4^*4sPzL*&Gqw4c*NL{Zf*{0C(7VYS(+d&ZcQp{&TuQJ>G>^^3cKY7_D(AdV08QLEPR1ASbMcwJBW z76d_Lp#ABq{#Fv!x^8%Ik%udwE0)t&{Rc;k^Q(U2Xof#1IywEOKkF45w``OIJ8w;H zmV&R}MMKQ@{v2}XfE3)W%G`CfFg;rZ6B{#2;flF6b%ig;^ z?pV-iMNJDP+30WuS_he9LV%jRD!U89@!*95IP};Dfk+&&PuBQU$napS32QU=Q1C7z zV>g)u!VHc(x&fe4G8T@IGGVC|s0lBv#RLRqMO3xeps>AA3aY;8TO2V;nKwMZ4|s5C zOC+z}8X^<8D%R-*ryui!YYyQW52Qu!mLFXB#9KTBK}=`7I^MHOW_JLP+@lKu$lRiv zsfmJx_fx^vMG93UstD^FUbdd53r6x*?O*jb)|L;yYu9uuUl_3G)`G+V5 z69;fr)L>nwBI^-{*5l0){cum8@?=f(=kJCGEqj9ksr-Nk!vj9__w-N_@_N+6`ANTQ z?FhJZU5}6S5ekft_^_Vww!G>q2Z(exba(!)-^+rzSlLsqKEWDBSDepZHE~2g9q=3? zy7o8n`gd#Hzbg5HI{{*o20#cT7Nv+0@?`xS&?eqr*UHhdHWqZv0f-he-)ApoWFhlo z79Z0PwZ%jeuL=kBJU|=|5M84!=Bm!(&c_4=O0nkHs|>ZYEWY8vdPIV8j(v#eq}yY^ zo-CDRf1wkQOXC>z3Y}Z~c6UQJP^jb;OXx7<3CEgIap@#$`GGYAu?sW~ILlFAV{dqH zYE<7lEWkU9p{-6vsM%tvCSYFhBsC#jby#mXLhEC6JcthQr3GM+`<3I3p=`di8C5W( zzrh1Bu%2;pA8UJ)wE5WBj4V@`?T@bX1@9j7nILs@M#Qa_qTMn zyy}Y#G^{`C+dARM0UZif7Iegbq&LF@ju<&Y`VaI|p7ad>&foM`Ey(LpTNzk$wII}X ztKq>N-Io=4J?ZQGtWPyvxMpGlo83qHNh`|ufRAayd3n_XF<89M_c_g&+*)*v2Y@2z ziskg1{>&Zr^8troeIH;T$n#(H->>9>t-qb3k&fB! z0(VZ=6=(fnsk0!8+aZL+8O<%`eAO1#mj!R6T>yya^T7>qLNPLP|cSWiz!_)cFNp$fEFNNqY_b4i7fH zRUpV$c%UX(%CMOiY!-xA731($+wcH(llxsOYe5JhVi-TrM*z6_2_Iknsz0w2j=oMn zj39Am12Iaz;DIxlGThU{`lhck(0KS6zoZFMaQ9hf`Rf1x7h*|7K~!8@_L5Haj$yzU z1YP$)pVFjf062ZsU$mgkFYkpU-?7#D9UkzZyQTZGVohg#n-BWrJ&vt%joe|p`H6mC zR;Md!=HlazpqGccXlEo(rR4qs~S*q)7RnUTxi>EW*OuZg)XrVrI7^K@`5AfA>N*R3w3QqX<2rc;}Qr^)8ZDaMtV^tNIlxAl3*4Z<1k- z5Wk|*Rw6gjAy^ZAZDU?SM7R4uKdC|;5B}PE`-lJtL}b98+#T441-KX~;|KbtrU($>vSj>bHI0!`28K>6l5Cjr$ahn$#@AURre>EF{UP?l`I7SPZ;`u4=X;)UH zH0gPH!)Y7kpiL_K{_pxfww4pUNMlWugw0bkJg}CuTrXoCuJAy8PFB-XY}Hkd4HrDn zi!J{e54KqkMBaIA#?~zEq|FPCQ1mil#|*08B)1J0(!AlpLIFb7lAF@WyqW$K@_IDI zd-FAWNPZZe;CN74@lj?kL;;j!3detySX`)3r-@a!WTQ0+SmS)?u*1b>S{su) z+~cDRG%T!TR+iFjxqHZZo=&`$ku;R`a z#2xNkLSQGZd%AqBDp&0{CG^<)GL;PvKGH|6(Eac5;pMOT^YVsc>#k`nS$o&d@>Pdf z;0PH%(C@rn*dP9mf8+&|^yu?!Ham_G$rFyP*+B`}W%9%U@$IwzVkT()tqq>q@W6x& zQ#`{!`?~6s3v!yw?V!b4aEO60;O6cR^si~gy!(ic>l@zYgTB;)B>SJ}57U!=%?p-n z_S#GLP{V@-)8X$M9!&00p&;nx`@ie|bA<=xe~AZ-J};PA%vs$eRB^vHV1-5WXI$H? zxP}L1v2?i1m#9VTlX==BA={B{7Eo6cvJB`|p?NlUkc`+h#jhl+HmR$iszs>jN)Ab0 zA51M)YDGQtq>OU zUb(d%$Jm(cxW|5RmAh$=SNp~C1GS)9t}GM@8TIs4|3Tlk9-r1Y_YM!VAhUZ9q6`?D z8?MnGARyl0)~&^WI!;_uqHT;*%}AkpH*_n64xJa>b^i$;UjC|oU5;0HKw#m{KDidR z*PGfMSkR3h=y%IOpSkyXVZjmx3_7C{Og@%k?T8%rHlCmvT{$2ef7QQPtgzk@ZS%C+ zTA2aq?(oQhP?FU^DPuxKN^O>$4V>HG|B3!JO_;|I_%I)ESY90uZhoTQpTFz3nlP8u z$C#*h7!#N(LRoNn{+s?qdJO4|Q=6X^B6@lHpZfoT4C7&45!;+3-xF;L2j>N+TG3Za z`GaOGa_z71XI|ZRmbO7FUM~PZzO?QH(1nn^;DLc=4V_ub#I}2JJScI853L~2i|fv+ z8y+kzD=8~h%~;Sy4l1uDBjbVxRoxkcRxel*8lkAJ%}4Quj?0v?3m!CEQE95b(}L3#c4TqDc+VeT zBkA9ROL>O}Q5EUExvzOr1#!5;V|Pop^NT(^9&lN_Fl}^zBFeQ-`Ks7S=Wkf1C;f6| zzmF8`MsMV#qP7m}5C+_ARcrGjFj)4uclpr73-7wTX0psFYidv5D)TnQb^nn*szS#P zcs%@7|FWKNQnnjwb2LZnwOE_gc7p^lL=3|NJuYwh%7NtYS3TwxDRk&`1-OG)ns;_Q zxWRo{u(oz9V({B%{kz3THDqoh9x6&{e4@1eg=9CStT+L-)4cc&p~L?EU+Le{8PoUy zkLM>muW#m-mHqGN_tUd}cSUc47hTs`d0jER{7wHebQsnXjx9cfh$x4@>VG&MTqbf^ zFAHCFn%dJ{F{_w&&!y#)w6(r9NM9P~tuhM`T(#$I7Imizq!A3x5%ulOWW=BaRl2R4 zV8esZne8miK8(~&t5a$DfuL_xc{*)!Dg&qu56F{G2|b1~W9I1ITwmH-40JGY9d^8; zLxl(|Wx>ie%I;L(mGoY!g_NJ02ykbJ|R&{=t?q8-AmZmqt8UO$o!zcdE zl<`;cRvpqte+Oyr8HbkP<_f<BSvE)IXkh!}UD z==T70xX1nL&-%CJgwr;}+Pe#HosrnQC_YG`>u%^_ebpBVkmUu>IbjLrTSFKygor5l zgck~Km+^^YZtUjM7yad`Aq+mDte~P|!khIw?{Fv4It6`<(TNzbOg^Q=t+x#ihDSV{ zzv1h8(o?O-GCt6!<<-ap@35;?FHPi7pejx;f7Acuh;BLIwPviU;2`Ma?N|M4d#;UG zA*&JMRW(~-ldmUL^sTN=i{SyoLYS>Py5bfs3NuWTxB4<+q03U=^u|O4<^dzvX6D5m zMy=56{*HzR($k=-bv@xI6d)8K)ka;NT3VmZIB7vyk9ht851!UH<*iN0{fIgA=mCta z9kY$|y7p$Wp!YhvlI2nMVh-SJ)|mWH)jVxOis40A0BkY=DWc)Q#i(^XGi^)%^)j^l z8V^u?0HbA|^e({&S5k6t*BH0iSWvf95LnpyTd(_70*SS)5BKyqA56p|Y&OjNE?Wno zHuq!mVxrhg@#R&Y+V}zxBFkkgSOZ?J1qDXN-H_O%=hlYBvhm2l2d-3i%-M!gRPlKa zs2K|f^vahO%+OiNPXy|3ar^p<{(U{$Kz}D{A#sP>l6{ngjq+f!a~7oA(`|awS5?&M z3Ezr8axLI^W3$vGop5Xu&hv^jICBpL&foNN(_3BX+VX=ux&I*a7`a22ZSZi)rtsSg zN$1!&qQCnC{V~m0hX>r9zv|a@!bvl-cp7uuGWLpE;UbOu)~li(e$l^k^rljqyIffy za{8kG*qjcgEA(2hXq)tVsa{iE5j1SmpE=L(@c>PbXafUKFC$Xj$dF4yAzY4C5E9>A z1aOZL0gQqgcV3+jG~`+5h6lr~;Qv#oGrJe3bqH*eoc$4o9{cf;9_JT* zZo|22{$WgF^P#jZn)X#tfReDJlO8>929L0#61{g#L%!UWSW+evq zuU4^ovN1hXw!twO3+(G`m0E}xhC6zofY9IK=Jgl-IZc}<%Vwp>4)-;g-m1+yWan-4 zp+mo(^jH=8_7%UPO~Pkzx5KUU)JuB96APk@HanEPn+h=9^;&7Xnj={A39lfvDHLQX z&q)hvwr>00{U%I|${qH1f1p342~&TA`?s(9xmZ4tCGK#WO#Ta6Z6#{O8H%7}>!2<; z9saI=p@6s?@#-9WC5FiSg5S1&1@CuvG^!0$+$F}SSn8GGrL34_qj(Lbt<~2_S*;dC zJpoT3glY}7rJVvHBt}NLAE_sXD1dInSSyNH&*OZRAKY<-aG*FH^hG#gtku_L_55Hv3BwbL#wEJu zwADbQ zPuKIuWx&2>tgSIhfy%{NE{lxVd5zHU0PJTkI36rDVU@vWAGj+*T0&8?G5QS?+NhiU zhVBp`{SN!%7yUJ#@v7Ji4^{d*Jmv+nOJmu0eBy{PMD%&qsbr+-J3c$R7de3Y9d5%w zy{xZzCb6cEnr!w}Yr$BLcu}>%{o3+_Hb3yq@qjyHc5AXMrFeIxyBw^itH*x-JNhZl zn7SQqPv7-RSum@jiVWE2#a)2y93r)hT-A1CS#Uc3s(-gJ!Z@|TB1B+WZ7@P`7FSrD zy{H#+oG+e5t$A#t2CDOkp$T%{+uUpuR^GAa2|m%Ztlp}{-VC%U8EsyaGnz7>*McfN z4SCTiO*lfq-41u5N5_HUe9$K`4}qE0YQ}mCrnN= zY7lfP=%lm2l4hGo)~FE{6RwE8)nC1_zMVtj>1)m>XK}8*S2pS}`@E=aOlqkp;v@4f zGeq@rs7cFKwx;T`4Q@3%ZZeOifr)N}VZM_Lo4vd-oF*l+xPB77<*d!i5(F#hJB6^OF2QuI`jx^2(J#02(vJAE?n9>Oc zTx}@#Cvxbuuf!vi-hG(14F(cnisxO%L}TZ>YbZ3OD&AeUBrg#W5upi2m_QE*M& zZl^tvt`1HM6B(GduDMoPCH4=pGg z9&qP)Kv!)z=9nGH@jxr;a8Hj-F41!FBQX@Ebr=R0C!Cn>SxC4;H$Ut5^OJt@%C!fO zq`Sd=Y9oLvYMF7Y&LL2MWJRqft+itDqvj$ zx^CQitv=bh%s_gxh$TJ>IQVd(TD*7!)D@}j5E(YU1;4LXDa;sux zeZ%2uFmX*MJzo2AS_1A?`T$oindpHz+_;1IXSJJ*HO2kBMT9@`uS|_ zw1f7B^@=a>^d8hIHoxiO9*fY_Ucx2^aNOa;*6+pJ>@>TfHZFD9NZDGh4tw)aXX_hY zwmzna&f8JetCO=5S5F*S5ZQg}F4Q+CK-^Xz0plZm@)oV61xY+72rYC=hfX?-YSP#g z>@XK_J3ix^{?fFlHY4gb&zMPVE|`z`JT^0{R-3!4#h{)p+QVIci(AVN!i75{!AN8( zw-%J*X}@c%0YEM@-j-KA9DyR+jB&RW)`Y1Iks)$GWyIkl{YzPOCPB9xacDY=Y@!QX z5@T-?gflx3(|F zZ(jZ_%3xM>C1LSoYCDf*IpT#FEWM7c@Wg!3XE!Jf-JU*$4sm(a*S2Ze#2#X6jwvhF zl96S=DAO~Z8Yh5?l-~64L+{q6FOVIM+a7aH8H=?c=-(+y zk0FjWPkBA*iN(r5Vql#yEk}LX@Sq^I^Bd1CgryUX>zf|7lhU#e-f5FA?J$>qc%;WT zVkh$po>?wE+-{-VdK7**&ou)$=Lunc(WiD632y~QFPTIT&kc zLXUkn8sEwtqRcP&dS$iV8e*@`doO5|ha#5+OM1ic^i_WW5X8@;Yk*N}Mx}zYs_`k_ zJRIX5o!dy-aK6n2V)Bo#0~T=H;jtDgZ?D}CEC^}F>Pe^hP+C7TUrv$?>4fJWP9B$Z zbykh%6I>ILyraa`8bK`jVr-R(Wnz%Ejex=4`4(IT0b6@^EemD> zLVu43j?{rb%TZsY+nLwo{7rw`Jn7aDJGL@^^Jf5cJ|I!hC<6u}JKuS~yxE*-j_A5O zJjOlUtVey-%c+{e;tH_0C*}ofH)536pSSbg&8Yi^7kt%=d4skyiV6`z@oZfcnAbKM z*eBJs12NlaX;){na4`QSyQQqQ`7zC(xRrR`_)~ruhg?c|cQQhB^cHD~@8$-k3wz-a zt9dZ4iHPKtOlB6RIT{UeIV3$^c@sGd7~>xI@V(NGIF~EhD_kwx>L;JHb4YH-5A>lH z=EE<>&kwQorja1CHnPUkO8|qT^vI!PA{FjQIJVdz*W9a^a3NB zS%K_?310kcZeqz#?%X&W$tZiFp|Qk)Tf(q-d3W0$p( ze7g^YNtK;TT+6D^(h$VeP$N*+-oD;sUpIt8On9 zS#+>^@wF(EJSmA}4^30yQo|QhGbRK@IpoAHkWM;RDSIUA2Jc3@$N6lEEDU