From 79672753735f6f9dfe96485b0c015d75d79ba40a Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 26 Dec 2021 20:45:33 +0100 Subject: [PATCH 1/3] anvil NEI handler, some minor adjustments --- .../hbm/blocks/machine/MachineGasCent.java | 2 +- .../java/com/hbm/blocks/machine/NTMAnvil.java | 25 +++ .../java/com/hbm/handler/WeaponAbility.java | 34 ++++ .../hbm/handler/nei/AnvilRecipeHandler.java | 189 ++++++++++++++---- .../java/com/hbm/hazard/HazardRegistry.java | 3 + .../inventory/recipes/AssemblerRecipes.java | 2 +- .../hbm/inventory/recipes/BreederRecipes.java | 6 +- .../recipes/GasCentrifugeRecipes.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 6 +- .../java/com/hbm/lib/HbmChestContents.java | 10 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 8 +- .../java/com/hbm/main/CraftingManager.java | 2 +- .../java/com/hbm/packet/AnvilCraftPacket.java | 2 +- .../hbm/render/item/ItemRenderLibrary.java | 4 +- .../render/tileentity/RenderCentrifuge.java | 6 + .../machine/TileEntityMachineGasCent.java | 126 +++++------- src/main/java/com/hbm/util/ItemStackUtil.java | 32 +++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../assets/hbm/models/blocks/anvil.obj | 52 ++--- .../hbm/textures/gui/nei/gui_nei_anvil.png | Bin 38800 -> 3193 bytes .../hbm/textures/gui/processing/gui_anvil.png | Bin 3447 -> 3521 bytes .../hbm/textures/models/machines/gascent.png | Bin 820 -> 1090 bytes 23 files changed, 356 insertions(+), 157 deletions(-) create mode 100644 src/main/java/com/hbm/util/ItemStackUtil.java diff --git a/src/main/java/com/hbm/blocks/machine/MachineGasCent.java b/src/main/java/com/hbm/blocks/machine/MachineGasCent.java index 8ea3ad35c..eb011a64a 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineGasCent.java +++ b/src/main/java/com/hbm/blocks/machine/MachineGasCent.java @@ -68,7 +68,7 @@ public class MachineGasCent extends BlockDummyable implements IMultiblock { @Override public int[] getDimensions() { - return new int[] {2, 0, 0, 0, 0, 0,}; + return new int[] {3, 0, 0, 0, 0, 0,}; } @Override diff --git a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java index dcf8966ac..e43a9815c 100644 --- a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java +++ b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java @@ -1,5 +1,7 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.blocks.ITooltipProvider; @@ -28,6 +30,8 @@ import net.minecraft.world.World; public class NTMAnvil extends BlockFalling implements ITooltipProvider { public final int tier; + + public static final HashMap> tierMap = new HashMap(); @SideOnly(Side.CLIENT) private IIcon iconTop; @@ -38,6 +42,27 @@ public class NTMAnvil extends BlockFalling implements ITooltipProvider { this.setHardness(5.0F); this.setResistance(100.0F); this.tier = tier; + + List anvils = tierMap.get((Integer)tier); + if(anvils == null) + anvils = new ArrayList(); + anvils.add(this); + tierMap.put((Integer)tier, anvils); + } + + public static List getAnvilsFromTier(int tier) { + List anvils = tierMap.get((Integer)tier); + + if(anvils != null) { + List stacks = new ArrayList(); + + for(NTMAnvil anvil : anvils) + stacks.add(new ItemStack(anvil)); + + return stacks; + } + + return new ArrayList(); } @Override diff --git a/src/main/java/com/hbm/handler/WeaponAbility.java b/src/main/java/com/hbm/handler/WeaponAbility.java index e4fbd8d57..f533fc528 100644 --- a/src/main/java/com/hbm/handler/WeaponAbility.java +++ b/src/main/java/com/hbm/handler/WeaponAbility.java @@ -1,5 +1,7 @@ package com.hbm.handler; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.items.ModItems; import com.hbm.items.tool.IItemAbility; import com.hbm.packet.AuxParticlePacketNT; @@ -20,6 +22,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntitySlime; import net.minecraft.entity.monster.EntityZombie; @@ -316,4 +319,35 @@ public abstract class WeaponAbility { return I18n.format(getName()); } } + + public static class BobbleAbility extends WeaponAbility { + + @Override + public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + + if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { + + EntityMob mob = (EntityMob) victim; + + int chance = 1000; + + if(mob.getMaxHealth() > 20) { + chance = 750; + } + + if(world.rand.nextInt(chance) == 0) + mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); + } + } + + @Override + public String getName() { + return "weapon.ability.bobble"; + } + + @Override + public String getFullName() { + return I18n.format(getName()); + } + } } diff --git a/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java index 15565bf25..06f0759b6 100644 --- a/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java @@ -2,25 +2,27 @@ package com.hbm.handler.nei; import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; -import java.util.Arrays; +import java.awt.Rectangle; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import org.lwjgl.opengl.GL11; - +import com.hbm.blocks.machine.NTMAnvil; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.gui.GUIAnvil; import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilConstructionRecipe; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilOutput; +import com.hbm.inventory.recipes.anvil.AnvilRecipes.OverlayType; import com.hbm.lib.RefStrings; +import com.hbm.util.ItemStackUtil; -import codechicken.lib.gui.GuiDraw; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; public class AnvilRecipeHandler extends TemplateRecipeHandler { @@ -31,22 +33,87 @@ public class AnvilRecipeHandler extends TemplateRecipeHandler { public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { - PositionedStack output; + List input = new ArrayList(); + List output = new ArrayList(); + PositionedStack anvil; int tier; + OverlayType shape; - public RecipeSet(ItemStack output, int tier) { - this.output = new PositionedStack(output, 111, 24); + public RecipeSet(List in, List out, int tier) { + + //not the prettiest of solutions but certainly the most pleasant to work with + int inLine = 1; + int outLine = 1; + int inOX = 0; + int inOY = 0; + int outOX = 0; + int outOY = 0; + int anvX = 0; + int anvY = 31; + + if(in.size() == 1 && out.size() == 1) { + shape = OverlayType.SMITHING; + inOX = 48; + inOY = 24; + outOX = 102; + outOY = 24; + anvX = 75; + } else if(in.size() == 1 && out.size() > 1) { + shape = OverlayType.RECYCLING; + outLine = 6; + inOX = 12; + inOY = 24; + outOX = 48; + outOY = 6; + anvX = 30; + } else if(in.size() > 1 && out.size() == 1) { + shape = OverlayType.CONSTRUCTION; + inLine = 6; + inOX = 12; + inOY = 6; + outOX = 138; + outOY = 24; + anvX = 120; + } else { + shape = OverlayType.NONE; + inLine = 4; + outLine = 4; + inOX = 3; + inOY = 6; + outOX = 93; + outOY = 6; + anvX = 75; + } + + for(int i = 0; i < in.size(); i++) { + this.input.add(new PositionedStack(in.get(i), inOX + 18 * (i % inLine), inOY + 18 * (i / inLine))); + } + + for(int i = 0; i < out.size(); i++) { + this.output.add(new PositionedStack(out.get(i), outOX + 18 * (i % outLine), outOY + 18 * (i / outLine))); + } + + this.anvil = new PositionedStack(NTMAnvil.getAnvilsFromTier(tier), anvX, anvY); + this.tier = tier; } @Override public List getIngredients() { - return getCycledIngredients(cycleticks / 48, Arrays.asList(output)); + return getCycledIngredients(cycleticks / 48, input); } @Override public PositionedStack getResult() { - return output; + return output.get(0); + } + + @Override + public List getOtherStacks() { + List other = new ArrayList(); + other.addAll(output); + other.add(anvil); + return getCycledIngredients(cycleticks / 48, other); } } @@ -62,7 +129,7 @@ public class AnvilRecipeHandler extends TemplateRecipeHandler { List recipes = AnvilRecipes.getConstruction(); for(AnvilConstructionRecipe recipe : recipes) { - this.arecipes.add(new RecipeSet(recipe.output.get(0).stack.copy(), recipe.tierLower)); + this.addRecipeToList(recipe); } } else { super.loadCraftingRecipes(outputId, results); @@ -78,7 +145,8 @@ public class AnvilRecipeHandler extends TemplateRecipeHandler { for(AnvilOutput out : recipe.output) { if(NEIServerUtils.areStacksSameTypeCrafting(out.stack, result)) { - this.arecipes.add(new RecipeSet(recipe.output.get(0).stack.copy(), recipe.tierLower)); + this.addRecipeToList(recipe); + break; } } } @@ -96,39 +164,92 @@ public class AnvilRecipeHandler extends TemplateRecipeHandler { @Override public void loadUsageRecipes(ItemStack ingredient) { + + List recipes = AnvilRecipes.getConstruction(); + + for(AnvilConstructionRecipe recipe : recipes) { + + outer: + for(AStack in : recipe.input) { + + List stacks = in.extractForNEI(); + for(ItemStack stack : stacks) { + if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) { + this.addRecipeToList(recipe); + break outer; + } + } + } + } + } + + private void addRecipeToList(AnvilConstructionRecipe recipe) { + + List ins = new ArrayList(); + for(AStack input : recipe.input) { + ins.add(input.extractForNEI()); + } + + List outs = new ArrayList(); + for(AnvilOutput output : recipe.output) { + + ItemStack stack = output.stack.copy(); + if(output.chance != 1) { + ItemStackUtil.addTooltipToStack(stack, EnumChatFormatting.RED + "" + (((int)(output.chance * 1000)) / 10D) + "%"); + } + + outs.add(stack); + } + + this.arecipes.add(new RecipeSet(ins, outs, recipe.tierLower)); } @Override public void loadTransferRects() { - } - - @Override - public void drawExtras(int recipe) { - - RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); - - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - fontRenderer.drawString("Tier " + rec.tier + " anvil", 51 + i, 50 + j, 0x000000); - fontRenderer.drawString("Tier " + rec.tier + " anvil", 52, 51, 0xffffff); - } + //hey asshole, stop nulling my fucking lists + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); - @Override - public int recipiesPerPage() { - return 1; + transferRectsGui.add(new RecipeTransferRect(new Rectangle(11, 42, 36, 18), "ntmAnvil")); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(65, 42, 36, 18), "ntmAnvil")); + + guiGui.add(GUIAnvil.class); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); } @Override public String getGuiTexture() { return RefStrings.MODID + ":textures/gui/nei/gui_nei_anvil.png"; } - + @Override - public void drawBackground(int recipeIndex) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - drawTexturedModalRect(0, 0, 5, 11, 166, 120); + public void drawBackground(int recipe) { + super.drawBackground(recipe); + + RecipeSet set = (RecipeSet) this.arecipes.get(recipe); + + switch(set.shape) { + case NONE: + drawTexturedModalRect(2, 5, 5, 87, 72, 54); //in + drawTexturedModalRect(92, 5, 5, 87, 72, 54); //out + drawTexturedModalRect(74, 14, 131, 96, 18, 36); //operation + break; + case SMITHING: + drawTexturedModalRect(47, 23, 113, 105, 18, 18); //in + drawTexturedModalRect(101, 23, 113, 105, 18, 18); //out + drawTexturedModalRect(74, 14, 149, 96, 18, 36); //operation + break; + case CONSTRUCTION: + drawTexturedModalRect(11, 5, 5, 87, 108, 54); //in + drawTexturedModalRect(137, 23, 113, 105, 18, 18); //out + drawTexturedModalRect(119, 14, 167, 96, 18, 36); //operation + break; + case RECYCLING: + drawTexturedModalRect(11, 23, 113, 105, 18, 18); //in + drawTexturedModalRect(47, 5, 5, 87, 108, 54); //out + drawTexturedModalRect(29, 14, 185, 96, 18, 36); //operation + break; + } } } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 4a86fc9ad..3e611edac 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -140,6 +140,9 @@ public class HazardRegistry { HazardSystem.register(Items.gunpowder, makeData(EXPLOSIVE, 1F)); HazardSystem.register(Blocks.tnt, makeData(EXPLOSIVE, 4F)); HazardSystem.register(Items.pumpkin_pie, makeData(EXPLOSIVE, 4F)); + + HazardSystem.register(ModItems.ball_dynamite, makeData(EXPLOSIVE, 2F)); + HazardSystem.register(ModItems.stick_dynamite, makeData(EXPLOSIVE, 1F)); HazardSystem.register("dustCoal", makeData(COAL, powder)); HazardSystem.register("dustTinyCoal", makeData(COAL, powder_tiny)); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 74538c2e8..d56a8b622 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -260,7 +260,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.seal_frame, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 3), new ComparableStack(ModItems.wire_aluminium, 4), new OreDictStack(REDSTONE.dust(), 2), new ComparableStack(ModBlocks.steel_roof, 5), },50); makeRecipe(new ComparableStack(ModBlocks.seal_controller, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 3), new OreDictStack(POLYMER.ingot(), 4), new OreDictStack(MINGRADE.ingot(), 1), new OreDictStack(REDSTONE.dust(), 4), new ComparableStack(ModBlocks.steel_roof, 5), },100); makeRecipe(new ComparableStack(ModBlocks.machine_centrifuge, 1), new AStack[] {new ComparableStack(ModItems.centrifuge_tower, 1), new OreDictStack(STEEL.ingot(), 4), new OreDictStack(IRON.ingot(), 4), new OreDictStack(STEEL.plate(), 2), new OreDictStack(CU.plate(), 2), new ComparableStack(ModItems.wire_red_copper, 8), },250); - makeRecipe(new ComparableStack(ModBlocks.machine_gascent, 1), new AStack[] {new ComparableStack(ModItems.centrifuge_tower, 1), new OreDictStack(STEEL.ingot(), 4), new OreDictStack(POLYMER.ingot(), 2), new OreDictStack(DESH.ingot(), 1), new OreDictStack(STEEL.plate(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.wire_red_copper, 8), new ComparableStack(ModItems.wire_gold, 4), },300); + makeRecipe(new ComparableStack(ModBlocks.machine_gascent, 1), new AStack[] {new ComparableStack(ModItems.centrifuge_tower, 1), new OreDictStack(STEEL.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new ComparableStack(ModItems.coil_tungsten, 4), new ComparableStack(ModItems.wire_red_copper, 32) },300); makeRecipe(new ComparableStack(ModBlocks.machine_rtg_furnace_off, 1), new AStack[] {new ComparableStack(Blocks.furnace, 1), new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(PB.plate(), 6), new OreDictStack(OreDictManager.getReflector(), 4), new OreDictStack(CU.plate(), 2), },150); makeRecipe(new ComparableStack(ModBlocks.machine_diesel, 1), new AStack[] {new ComparableStack(ModItems.hull_small_steel, 4), new ComparableStack(Blocks.piston, 4), new OreDictStack(STEEL.ingot(), 6), new OreDictStack(MINGRADE.ingot(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.wire_red_copper, 6), },200); makeRecipe(new ComparableStack(ModBlocks.machine_selenium, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(TI.plate(), 6), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.hull_big_steel, 1), new ComparableStack(ModItems.hull_small_steel, 9), new ComparableStack(ModItems.pedestal_steel, 1), new ComparableStack(ModItems.coil_copper, 4), },250); diff --git a/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java b/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java index 85d430e2c..e10014143 100644 --- a/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java @@ -50,9 +50,9 @@ public class BreederRecipes { recipes.put(new ComparableStack(ModItems.rod_neptunium), new BreederRecipe(ModItems.rod_pu238, 3)); recipes.put(new ComparableStack(ModItems.rod_dual_neptunium), new BreederRecipe(ModItems.rod_dual_pu238, 3)); recipes.put(new ComparableStack(ModItems.rod_quad_neptunium), new BreederRecipe(ModItems.rod_quad_pu238, 3)); - recipes.put(new ComparableStack(ModItems.rod_pu238), new BreederRecipe(ModItems.rod_pu239, 2)); - recipes.put(new ComparableStack(ModItems.rod_dual_pu238), new BreederRecipe(ModItems.rod_dual_pu239, 2)); - recipes.put(new ComparableStack(ModItems.rod_quad_pu238), new BreederRecipe(ModItems.rod_quad_pu239, 2)); + recipes.put(new ComparableStack(ModItems.rod_pu238), new BreederRecipe(ModItems.rod_pu239, 4)); + recipes.put(new ComparableStack(ModItems.rod_dual_pu238), new BreederRecipe(ModItems.rod_dual_pu239, 4)); + recipes.put(new ComparableStack(ModItems.rod_quad_pu238), new BreederRecipe(ModItems.rod_quad_pu239, 4)); recipes.put(new ComparableStack(ModItems.rod_pu239), new BreederRecipe(ModItems.rod_pu240, 2)); recipes.put(new ComparableStack(ModItems.rod_dual_pu239), new BreederRecipe(ModItems.rod_dual_pu240, 2)); recipes.put(new ComparableStack(ModItems.rod_quad_pu239), new BreederRecipe(ModItems.rod_quad_pu240, 2)); diff --git a/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java index c781a8f98..05dddc267 100644 --- a/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java @@ -21,7 +21,7 @@ public class GasCentrifugeRecipes { MEUF6 (200, 100, "HEUF6", "Medium Enriched UF6", false, new ItemStack(ModItems.nugget_u238, 1)), HEUF6 (300, 0, "NONE", "High Enriched UF6", true, new ItemStack(ModItems.nugget_u238, 2), new ItemStack(ModItems.nugget_u235, 1), new ItemStack(ModItems.fluorite, 1)), - PF6 (300, 0, "NONE", "Plutonium Hexafluoride", false, new ItemStack(ModItems.nugget_pu238, 1), new ItemStack(ModItems.nugget_pu_mix, 2), new ItemStack(ModItems.fluorite, 1)); + PF6 (300, 0, "NONE", "Plutonium Hexafluoride", true, new ItemStack(ModItems.nugget_pu238, 1), new ItemStack(ModItems.nugget_pu_mix, 2), new ItemStack(ModItems.fluorite, 1)); int fluidConsumed; int fluidProduced; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 4441b27cb..b63bcb4b0 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -5197,7 +5197,8 @@ public class ModItems { cobalt_hoe = new ModHoe(MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_hoe").setTextureName(RefStrings.MODID + ":cobalt_hoe"); ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 1000, 15.0F, 2.5F, 25).setRepairItem(new ItemStack(ModItems.ingot_cobalt)); - cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); + cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt) + .addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) .addBreakAbility(new ToolAbility.RecursionAbility(4)) .addBreakAbility(new ToolAbility.HammerAbility(1)) @@ -5219,7 +5220,8 @@ public class ModItems { ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 1000, 20.0F, 2.5F, 30).setRepairItem(new ItemStack(ModItems.ingot_starmetal)); starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal) .addHitAbility(new WeaponAbility.BeheaderAbility()) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); + .addHitAbility(new WeaponAbility.StunAbility(3)) + .addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) .addBreakAbility(new ToolAbility.RecursionAbility(6)) .addBreakAbility(new ToolAbility.HammerAbility(2)) diff --git a/src/main/java/com/hbm/lib/HbmChestContents.java b/src/main/java/com/hbm/lib/HbmChestContents.java index c0f444084..395071e9e 100644 --- a/src/main/java/com/hbm/lib/HbmChestContents.java +++ b/src/main/java/com/hbm/lib/HbmChestContents.java @@ -186,23 +186,17 @@ public class HbmChestContents { private static WeightedRandomChestContent[] missile = new WeightedRandomChestContent[] { new WeightedRandomChestContent(ModItems.missile_generic, 0, 1, 1, 4), new WeightedRandomChestContent(ModItems.missile_incendiary, 0, 1, 1, 4), - new WeightedRandomChestContent(ModItems.missile_cluster, 0, 1, 1, 4), - new WeightedRandomChestContent(ModItems.missile_buster, 0, 1, 1, 4), - new WeightedRandomChestContent(Item.getItemFromBlock(ModBlocks.launch_pad), 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.gas_mask_m65, 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.battery_advanced, 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.designator, 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.crate_caller, 0, 1, 1, 1), new WeightedRandomChestContent(ModItems.thruster_small, 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.thruster_medium, 0, 1, 1, 4), - new WeightedRandomChestContent(ModItems.thruster_large, 0, 1, 1, 2), new WeightedRandomChestContent(ModItems.fuel_tank_small, 0, 1, 1, 5), new WeightedRandomChestContent(ModItems.fuel_tank_medium, 0, 1, 1, 4), - new WeightedRandomChestContent(ModItems.fuel_tank_small, 0, 1, 1, 2), - new WeightedRandomChestContent(ModItems.warhead_mirvlet, 0, 1, 1, 1), - new WeightedRandomChestContent(ModItems.warhead_nuclear, 0, 1, 1, 1), new WeightedRandomChestContent(ModItems.bomb_caller, 0, 1, 1, 1), - new WeightedRandomChestContent(ModItems.bomb_caller, 3, 1, 1, 1) }; + new WeightedRandomChestContent(ModItems.bomb_caller, 3, 1, 1, 1), + new WeightedRandomChestContent(ModItems.bottle_nuka, 0, 1, 3, 10) }; private static WeightedRandomChestContent[] spaceship = new WeightedRandomChestContent[] { new WeightedRandomChestContent(ModItems.battery_advanced, 0, 1, 1, 5), diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 1c37135bb..89c4d468e 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -108,10 +108,10 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.cinnebarSpawn, 4, 8, 16, ModBlocks.ore_cinnebar); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.cobaltSpawn, 4, 4, 8, ModBlocks.ore_cobalt); - DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ironClusterSpawn, 6, 5, 50, ModBlocks.cluster_iron); - DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.titaniumClusterSpawn, 6, 5, 30, ModBlocks.cluster_titanium); - DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 5, 40, ModBlocks.cluster_aluminium); - DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.copperClusterSpawn, 6, 5, 20, ModBlocks.cluster_copper); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ironClusterSpawn, 6, 15, 45, ModBlocks.cluster_iron); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.titaniumClusterSpawn, 6, 15, 30, ModBlocks.cluster_titanium); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 15, 35, ModBlocks.cluster_aluminium); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.copperClusterSpawn, 6, 15, 20, ModBlocks.cluster_copper); if(GeneralConfig.enable528ColtanSpawn) { DungeonToolbox.generateOre(world, rand, i, j, GeneralConfig.coltanRate, 4, 15, 40, ModBlocks.ore_coltan); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index e760c13b4..15baebddc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -732,7 +732,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.upgrade_centrifuge, 1), new Object[] { "PHP", "PUP", "DTD", 'P', ModItems.centrifuge_element, 'H', Blocks.hopper, 'U', ModItems.upgrade_shredder, 'D', POLYMER.ingot(), 'T', ModBlocks.machine_transformer }); addRecipeAuto(new ItemStack(ModItems.upgrade_crystallizer, 1), new Object[] { "PHP", "CUC", "DTD", 'P', new ItemStack(ModItems.fluid_barrel_full, 1, FluidType.ACID.ordinal()), 'H', ModItems.circuit_targeting_tier4, 'C', ModBlocks.barrel_steel, 'U', ModItems.upgrade_centrifuge, 'D', ModItems.motor, 'T', ModBlocks.machine_transformer }); addRecipeAuto(new ItemStack(ModItems.upgrade_screm, 1), new Object[] { "SUS", "SCS", "SUS", 'S', STEEL.plate(), 'U', ModItems.upgrade_template, 'C', ModItems.crystal_xen }); - addRecipeAuto(new ItemStack(ModItems.upgrade_gc_speed, 1), new Object[] {"TCT", "HUH", "TCT", 'T', TC99.nugget(), 'C', ModItems.coil_copper, 'H', ModItems.coil_tungsten, 'U', ModItems.upgrade_template}); + addRecipeAuto(new ItemStack(ModItems.upgrade_gc_speed, 1), new Object[] {"TCT", "HUH", "TCT", 'T', ModItems.nugget_bismuth, 'C', ModItems.coil_copper, 'H', ModItems.coil_tungsten, 'U', ModItems.upgrade_template}); addRecipeAuto(new ItemStack(ModItems.mech_key, 1), new Object[] { "MCM", "MKM", "MMM", 'M', ModItems.ingot_meteorite_forged, 'C', ModItems.coin_maskman, 'K', ModItems.key }); addRecipeAuto(new ItemStack(ModItems.spawn_ufo, 1), new Object[] { "MMM", "DCD", "MMM", 'M', ModItems.ingot_meteorite, 'D', DNT.ingot(), 'C', ModItems.coin_worm }); diff --git a/src/main/java/com/hbm/packet/AnvilCraftPacket.java b/src/main/java/com/hbm/packet/AnvilCraftPacket.java index 228a2bf15..fc322a148 100644 --- a/src/main/java/com/hbm/packet/AnvilCraftPacket.java +++ b/src/main/java/com/hbm/packet/AnvilCraftPacket.java @@ -57,7 +57,7 @@ public class AnvilCraftPacket implements IMessage { if(!recipe.isTierValid(anvil.tier)) //player is using the wrong type of anvil -> bad return null; - int count = m.mode == 1 ? 64 : 1; + int count = m.mode == 1 ? (recipe.output.size() > 1 ? 64 : (recipe.output.get(0).stack.getMaxStackSize() / recipe.output.get(0).stack.stackSize)) : 1; for(int i = 0; i < count; i++) { diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 97e1db930..a8d512e0d 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -62,10 +62,12 @@ public class ItemRenderLibrary { renderers.put(Item.getItemFromBlock(ModBlocks.machine_gascent), new ItemRenderBase() { public void renderInventory() { GL11.glTranslated(0, -4, 0); - GL11.glScaled(4.5, 4.5, 4.5); + GL11.glScaled(3.5, 3.5, 3.5); } public void renderCommon() { + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.gascent_tex); ResourceManager.gascent.renderPart("Centrifuge"); + GL11.glShadeModel(GL11.GL_FLAT); }}); renderers.put(Item.getItemFromBlock(ModBlocks.iter), new ItemRenderBase() { diff --git a/src/main/java/com/hbm/render/tileentity/RenderCentrifuge.java b/src/main/java/com/hbm/render/tileentity/RenderCentrifuge.java index 28340fa76..24848110c 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCentrifuge.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCentrifuge.java @@ -30,10 +30,16 @@ public class RenderCentrifuge extends TileEntitySpecialRenderer { } if(tileEntity instanceof TileEntityMachineGasCent) { + GL11.glRotatef(180, 0F, 1F, 0F); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.gascent_tex); ResourceManager.gascent.renderPart("Centrifuge"); ResourceManager.gascent.renderPart("Flag"); + GL11.glShadeModel(GL11.GL_FLAT); } + + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index 30e6c37e8..595f067f6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -52,8 +52,6 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I private static final int[] slots_bottom = new int[] {2, 3, 4}; private static final int[] slots_side = new int[] { }; - private String customName; - public TileEntityMachineGasCent() { super(6); tank = new FluidTank(FluidType.UF6, 2000, 0); @@ -65,28 +63,21 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I public String getName() { return "container.gasCentrifuge"; } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return side == 0 ? slots_bottom : side == 1 ? slots_top : slots_side; + } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - NBTTagList list = nbt.getTagList("items", 10); power = nbt.getLong("power"); progress = nbt.getShort("progress"); tank.readFromNBT(nbt, "tank"); inputTank.readFromNBT(nbt, "inputTank"); outputTank.readFromNBT(nbt, "outputTank"); - slots = new ItemStack[getSizeInventory()]; - - 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 @@ -97,26 +88,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I tank.writeToNBT(nbt, "tank"); inputTank.writeToNBT(nbt, "inputTank"); outputTank.writeToNBT(nbt, "outputTank"); - 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); } - - @Override - public int[] getAccessibleSlotsFromSide(int meta) - { - return meta == 0 ? slots_bottom : (meta == 1 ? slots_top : slots_side); - } @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { @@ -398,15 +370,21 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I return list; } + AxisAlignedBB bb = null; + @Override public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 5, zCoord + 1); + } + + return bb; } @Override @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() - { + public double getMaxRenderDistanceSquared() { return 65536.0D; } @@ -461,44 +439,44 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I type = PseudoFluidType.valueOf(nbt.getString(s + "_type")); } - /* ______ ______ - * _I____I_ _I____I_ - * / \\\ / \\\ - * |IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{|| || } || | - * | || || || | - * | } || ||IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{|| | - * |IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{|| || } || | - * | || || || | - * | } || ||IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{|| | - * |IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{ || || } || | - * | IF{|| || } || | - * | || || || | - * | } || ||IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{ || | - * | } || || IF{|| | - * _|_______||_||_______||_|_ - * | | + /* ______ ______ + * _I____I_ _I____I_ + * / \\\ / \\\ + * |IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{|| || } || | + * | || || || | + * | } || ||IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{|| | + * |IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{|| || } || | + * | || || || | + * | } || ||IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{|| | + * |IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{ || || } || | + * | IF{|| || } || | + * | || || || | + * | } || ||IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{ || | + * | } || || IF{|| | + * _|_______||_||_______||_|_ + * | | * | | * | |==========| | * | |NESTED | | diff --git a/src/main/java/com/hbm/util/ItemStackUtil.java b/src/main/java/com/hbm/util/ItemStackUtil.java new file mode 100644 index 000000000..f694822d2 --- /dev/null +++ b/src/main/java/com/hbm/util/ItemStackUtil.java @@ -0,0 +1,32 @@ +package com.hbm.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.EnumChatFormatting; + +public class ItemStackUtil { + + /** + * UNSAFE! Will ignore all existing tags and override them! In its current state, only fit for items we know don't have any display tags! + * Will, however, respect existing NBT tags + * @param stack + * @param lines + */ + public static void addTooltipToStack(ItemStack stack, String... lines) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + NBTTagCompound display = new NBTTagCompound(); + NBTTagList lore = new NBTTagList(); + + for(String line : lines) { + lore.appendTag(new NBTTagString(EnumChatFormatting.RESET + "" + EnumChatFormatting.GRAY + line)); + } + + display.setTag("Lore", lore); + stack.stackTagCompound.setTag("display", display); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b98980c51..75a25f27f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3569,6 +3569,7 @@ tool.ability.silktouch=Behutsamkeit tool.ability.smelter=Auto-Ofen weapon.ability.beheader=Köpfer +weapon.ability.bobble=Glück des Sammlers # Should rhyme with the translation for "chainsaw" weapon.ability.chainsaw=Skelettensäge weapon.ability.fire=Flammend diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index dafb95fff..f1880aa62 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3647,6 +3647,7 @@ tool.ability.silktouch=Silk Touch tool.ability.smelter=Auto-Smelter weapon.ability.beheader=Decapitator +weapon.ability.bobble=Luck of the Collector # Should rhyme with the translation for "chainsaw" weapon.ability.chainsaw=Painsaw weapon.ability.fire=Flaming diff --git a/src/main/resources/assets/hbm/models/blocks/anvil.obj b/src/main/resources/assets/hbm/models/blocks/anvil.obj index 37ba2789c..b25b72332 100644 --- a/src/main/resources/assets/hbm/models/blocks/anvil.obj +++ b/src/main/resources/assets/hbm/models/blocks/anvil.obj @@ -250,40 +250,40 @@ v -0.056348 0.632910 -0.687500 v -0.079687 0.576563 -0.687500 v -0.056348 0.520215 -0.687500 v 0.000000 0.656250 -0.937500 -vt 0.125000 0.125000 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.812500 0.187500 -vt 0.687500 0.125000 -vt 0.812500 0.125000 -vt 0.687500 0.187500 -vt 0.562500 0.125000 -vt 0.125000 0.187500 +vt 0.875000 0.125000 +vt 1.000000 0.187500 +vt 1.000000 0.125000 +vt 0.187500 0.187500 +vt 0.312500 0.125000 vt 0.187500 0.125000 -vt 0.187500 0.250000 -vt 0.562500 0.250000 -vt 0.250000 0.312500 +vt 0.312500 0.187500 +vt 0.437500 0.125000 +vt 0.875000 0.187500 +vt 0.812500 0.125000 +vt 0.812500 0.250000 +vt 0.437500 0.250000 +vt 0.750000 0.312500 vt 0.500000 0.437500 vt 0.500000 0.312500 -vt 0.250000 0.500000 -vt 0.625000 0.562500 -vt 0.187500 0.562500 -vt 0.000000 0.562500 -vt 0.000000 0.812500 +vt 0.750000 0.500000 +vt 0.375000 0.562500 +vt 0.812500 0.562500 +vt 1.000000 0.562500 vt 1.000000 0.812500 -vt 1.000000 0.687500 -vt 0.125000 0.812500 -vt -0.000000 0.625000 -vt 0.125000 0.625000 +vt 0.000000 0.812500 +vt 0.000000 0.687500 +vt 0.875000 0.812500 +vt 1.000000 0.625000 +vt 0.875000 0.625000 vt 0.312500 0.625000 -vt 0.500000 0.687500 -vt 0.312500 0.687500 +vt 0.500000 0.562500 vt 0.312500 0.562500 +vt 0.312500 0.687500 vt 0.500000 0.625000 vt 0.750000 0.625000 -vt 0.500000 0.562500 -vt 0.750000 0.562500 -vt 0.000000 0.812500 +vt 0.500000 0.687500 +vt 0.750000 0.687500 +vt 1.000000 0.812500 vn -1.0000 0.0000 0.0000 vn -0.7071 0.0000 -0.7071 vn -0.7071 0.0000 0.7071 diff --git a/src/main/resources/assets/hbm/textures/gui/nei/gui_nei_anvil.png b/src/main/resources/assets/hbm/textures/gui/nei/gui_nei_anvil.png index fc8105f4fa2271fe094a478ef9929c6bbc8e4883..8e12057239b6a28ed2d38d8ff39eb81d82279a2d 100644 GIT binary patch literal 3193 zcmcgvcT|&E7XMO6C;^lr(m`NU5J5~R31A#Wi6~8}(nPwT8EJt40U1C>5yXN*0$C6t zK=cL&E zX(=p_2KF2(RE~0j8n;?aNr=96*3M;6?}<7NmEPkh?~}S9^C|>oR${EZ z)0zD8*EWq0RGwtUcou^{d%W~|mmyD=6H4_mX2wA@x1yM6DkSppmh^lOE5Px<^_LErA820=hxO+={sOAF-81ch)@2JlT|I zc_8Z56T2T5=S?mqf7nV8By-2+8_(x3!?0qeTVAGkqz4IdQWaKEgidu<2Tkzx&1)4G zah!&_6q&KhJ`a1l@Y_sV9C%LL;^c!1TVn9U(}|-Vo)j9H1%G=ZO&yp`pl^;nwH%8= z#=)&+Hu}3K)pE(hI|1<$2`@pcYq)$|3H#v{A_ogDS!3SG95!zk&n8ahDNm~UGoWKx zO#i9sPdfPClF6Kj)GDAHB=cS%H=f75-*M%5pj!D`wfB#<3GOkQo17sK&T)mu534#G z6qxB%DYKp+?>14k{$9g8$W>FdfK=Ez3bm=;|-_^eu)Q=Z2z zsL=(Vg(fg`;%&&OR4}1TZ)!I4fCc`Y6J7y7Xi4};!)xN@3}1`bHA@O0^K8trL`KG& z=&oA=uZ2 z`a|cm5NvT0C}g)-(t=@ilSLh)~LZoiolsQ9&U}PAB`ifT$O#sw@C?qdIxF6Z2 zYdwjW^LZR+x`8z1hY(g_8%EVd;3hA?pjGkWSHIk6!71hkO49T5BG>P zSBVC-YS8)G<6CwcQ0~g>(fQPuCD;$q+?!5Zx|3m>v?W6!VFIF_TgeV&1W2|n)ZtO5 zY_~M|(d8^@Yzi`KD*>3DfQ{xOy1^vx(jQDhPjS>UJEspyuOhlC511+uOsCrE9Woc2 zclLrCO?cXYz<`mNs5f+N)V!WlftDT1`(#5|vtfM5;Ccou+97)s6P>SvUjXPECZOWq z5kA=_7R3S+OD1cK%p;(2Ak&3-{DejImM=qf47>Ur$I>UvB(#kYkm5t>cBx98OMqm0 zIP-f2hyZ6rfts4&=xW~8q}!vh!4%7vZMM!!EWn;H+WAO<*%H;c0#w9oV?*Wz`^d{G zgtZLr(v**1O{6TLZyGR60t16A=gb(=TLR*tVpc z4jI;Y%5-4$wfho{N_Q@kASM&=%vRaT zyer;)aX(G0?j~%22_%ulOKS}Q0n*VEP-!n{PUEJfC!8vOUW5)|M4-r~VmZ^Sn<=J{ ztlIT9oGEh27TE;|$C<5|{(T)H-$+z{%3J>jb{`EpEhatlN;Vi|XX=pjWUxV}_|;0c zMX4_N)e6F1PuKoFzs`RqkR6{rK&afG`~^OgTvqs7F0a*@)<}3^1ITC1hOB*LL070{ zcypIJ7p0fY5XZV>%Zpg}$17XvW3L{)eBis2vVNNWNd~KzDpWpEWEPDL83|&mzQ^_g z^}dA40E1NyC1LY}KB)tZL_XQrAe8%83?8N2yty5oboaqU03j*aaE37W@KoqnHE3=h ziK2}|0Q%`2l6yn~0P7@0z|jYmD0dH}@h`Tx6+?ZuC#NS|g1O1#DXfmCr>75fV`#lh zCbpa2WC*N4`FwsPyx%u}kQRwf&jDh|#ra%WSy_a%baWiWb_#(FcjwnDD=VKT5bmjB zq9Xh#w!b2wrk**IlqSFK}V!`QUz>_!|`DS z#~jqG?+-7ON(kbje0E@luV-eS4HOxsHQcj%9h;1g;_RO>TlI4)Uqc^SFbiIXqRli~ z;Z%PVi8~~SuQ~mtes1mOp^%wleno<)T?*j6!@iXZ3LzNY2T$Uyu)o>83)svtrYaAY zwWU?tw-m2kDE+9G8=9 z$e+TjpPZg9CPYNe*RPY4=bk=&if*(Oo_obq=y{t>?{j_X+7$PaL5Akle4o(J&{xSi zVObF&6kA^)=r`yLbcWY`JaT+wudV^;FT!(RDvb50AzNgwzQmS2drcdc{XgmhpHJwH zyWw2znmu}33}pC_K8cZlv0?AV+uFVIJRW~)|&}cOI;fIP=bK$?P55Ile^S3m$H`N)nPGx+XOP4OO zQsd*}Po6qOFExI-$Gt$SqpH2#a&3`yc75WG#ka3s-CPAC5{Vz?<}Qpeg2HOw@pNsK z8%8|<;W8+X(gQ77Mb^Jd6~GOnKY5GZmY;Ar@P@Iiw5=8XN96unAk*KcVBPfh?R77R z_YTQvK6SWmY+Dadq?LKMd zY<}&{cI%K73|PLePyvji<2CJT2-4py8hhf7Qv+PP(Yml`Xvp#n6Sw;3WrwWFr*2>u zW^Z7_*q^?;X6&|F5)|nnI+XBVAp0lg#<%Y|B3P@qhd$jU=c$wHU z&e(BgCMiuS<&!oyuCEmuVNyZ*arIB4@TcQ?Q6eW@(*&@Xzd*9KG#tyuF zz3Vyo<2?WmXrO^!*c2svQ4heo_uO;OIrseb-#J&X0>w7A@&15#uN&}#f~A2}N^R5s zHr^i)Lclf?xFgWmCjM=_&+yu7ufev)dPg8w!vJ1?{q^^*HQU(67V!JO|N8*^q&+DE0K_8>{1K#%x0J=qCodBQ9sS_=JExhQ zDR9?F^9RW;=u!8DSoy3vzRqXuxm5?Y@t)y*!2p&BT=fW=C6#}(>)t;04llp-5_7W! z!cgHj9!J0X76_fK692MqVJ*LSzlru6N#+5tu_X=S2Too3{>KfY0Cx+k zJjxrEp<8CnaTL9iujBCR)Y)!3eCOq(T$`9840OJG^i96?t(UoY;VS?1*OCYnTj7C9 zflzdQ^)}$PC#nRg-B~sq1Ym6ZSl4sH-)g&VM|iJnM6uGCrJ>!X|GS6p3k_hc<8CcF zA-?sF3pAmzTJ2vsKR>s?#KcuDUOJ0rwE5FN{v*Eq!Z#V{%ahHex7|EG)-(tqua)v$M=N> zAht+Yo6eE0N?ETrIDO_U$B&<&Tq@A2G^s3HWBkHZJTK(K&pwW2=$pr{H@f#0MAXJb zLRc)q`PUIws;DsBys}Mi=0JH0@#-;XeYmRzZS~rob}iiDcCEct*IC=~8;IrankJA^ zE$2yS+sxpu;eDY2ETJ>6<+AsG>9cmWHyRE8?kiv8xEoX?>62&+%*lLcV4Vz@LSaYmdb9#FqBXT zz;)X!&d#&2P@qvMtilix)9<1fOZ1tT^*@Gp=*ySumZTf_0c zKz#Mv;EljP{a46Gvptu#;OqY{+SlFzIS8Nm4djoEuGh^Dk%l$+&X>@>GK>1ePPFI0 zg>VK?zwpmd-TtUm%%W4vdMbTy^3Zx?xa3aUFH(H!Lags{8N{B$ybTk4|=?L{k4A41!{51dSH~%{tPQbnc2N)h6+>+KT z*nDzo&yAqH(F7v!Ct;^j$A|y#i||)RQJ={7+$ZR?UMWQLMYJFNBx3hxk)IKW-}ybn zFa12K%K$dIZEtcD0Nyvye&QtSXt4EmTjL&2W7=L8(~dg>QVDbUH&U79){}V<)IFhWh+Pg7M?XkJwQB7UC_xGhQ$M zHsVh&pg#T&QI9-@d}cp{Gid+U=V3jQUq3?l!b^lp{rUVPUTKnGsXxEl>Cf^oZJ;If znh;8<>oveGXk8EfdZo591q7YuuS5Zq zQdFx|=I4r>Jb9d5BN?)NalEF3)2x$9rWqa@q}i%rMGX$#v!6ZtMnPzxv<>a%oAUn~ zCg=jRJnYMZF#w+m&mO~BMpqhxL0s_Q0zKKu~IQM1v&tF8$jUYer5oBKg;Rf1GPk+?@PJiTQ z|Lbmljw6Dt4a-_ZrMCwXP(Mh?Qtu<&k_pgp{zyU@qU$=E&yQJ}FxS0qE9&4@ z`~fSHe>DRU2;zwdANtS-Ii5<=ZWZ~^2M=-a>?NwzB0JLuXte?~VH1tS`RSke)J@H| zTeeN}{hg-T(Tyi~{KLpE{W;oieirfi*Ac(^68f)wf$)!ha`_r5C1DtL%o`La0ajg?b=O*{U$CWLIF=cgY4>i&HzD@Tu-0x|eX=8V)}{x8;^eU@EIq-(%p?&#&9U!I(3c;>S034<&EC-*{rNPX z_=%6BYphJT+f_l=UK?IPeDP~&$G(pEtv^Iqk0Sr|&vwfwMAyC-p1)GX+y4RWOGVTt ze*<-o0ezzoU&*A`b!~Z!rIbDPv_Rm2t3b7&tx&ko3_63;c0uTB6!s+@Q{9tv5y8RKyzK;Gs{Sm@?lyJE}z5VYE5q2~dDdlo| z*FMkdO|9EVE#AgW!I%d6yab09^s>_L#L|C zjin4bejZIj*SiirDUmWnbeC?gcHQ1^RJZXi;+DgJVK-B(BZWj~BCe78ON`;x(Uk;U z8od#uR5V*H78k0Fj6gb{VCRl8E{(UzXKR!T0oSgbCLWLQvp@GFreP8W63tjG#BQmH z>wPtjAYXV9HM&;GilF{vlJHN~R`hAY_V27ZqIxQnQsMi-DjQnU^bSFp4-mdoUe}So zwq@$s-y(SZx7IlyLH_Y1-XE_y9G+a&pKw=if7X~9N+D2~ra>4=f?&x**l~24rhylP zXhN)5UfcBkp5m5FfG`YKN%ysqe+jok{2eo5>04**|JwRiEk^}rXJ)C_>$tAV*w`*2 zF`ZJu;oIN-7Jk?w616~C^bh2aQeqeyGL(0Aa}ebtdC%jsw=M%#0#R(+E3G?y=2;KGHo9J*&8AN}Z~>>1m|qmMt% zuCX0R31PT#z;U&2q33wd=emP{_TV#!vjGIB5FZ>s`?n`&us^bC5pKl+CTFxTymAPhqcLnoB7W3uT2)6_d{)pc~kKmmc@(ExhK>^9Oa zwsD)-k_oUh0fVrk(g{Q-Xpq^N zSthTIGdMDeVJ#)#D0E#zN`rj>Eg#$*8-^Lz(^z((ZRsAHq-EbptjCDL zP$IMy|4k4`EXyGD<#M*)HkrTo*wh4AN#7J5)lLWu-FR0eKWv;0xD;txediEG$mNR@ z9J%ihgM&7W`XVDkIYO^Re=bSO3&{2FCD)fjhz{XPDSJXsTfjQesap%dus?J(fo!ln#B zN=Xm~UDXZ@-B^B@OPPP~Cf3^GYR%tH8J&8y&E<=eTpgcbVZMfKoBYI2{V0aza^d26 z_U+rvj-5NY{t87Hb{tk6=_*#;>uzbFOAfx?Pv^K?mj2Mmx#+0(97)EESwIGno46DeW7*>mx98>G3^%I#`njVR zAHPa0rqgb=c=^Te^3FRaDV556?BmZ-SZMLJuYQY{UwV}=l<2xa7>2i&mU;tE)q2jX z-p{ggPhG#>ePzA9?D@YZ)OQoAf3HtrEfZL;?44i+LTH@@Nr0|vC?&h`|4!Y8p>@Yz ztZ0W^dy*aYGGYIlsRr#TV|Z z-hnWBYFFKXR*u-4?cD;yLOK9&O7f=EYC1KeT9?noaM^+m5wH37zm*) zd($@}>Fb33M%jYvoa(jVH`)MWshm=DQ)X3{33LiCC0A{9-MfL?d9FeT48!OqErs~L z#P?-4=R)uLF_!wYPQSK2gLfS_)Bud`?y{ZK&6TXaURk!))qBh3H%b#$TTDqRpW;M(N{;(mv9_7yU)nmnBk_CM zr`8ng!Ah8~b57SgW3H{Y3o0v_mp8&vncJ1>w|0GJ6PESs+Pv-CioxB*4e4NM&Hl;) zjSfW5&sMRtW?)IHSUR?%WvsUCZ$=0iy2;>B22U<>?~x&*xLg@O$HdhMoR)zu;@r!gxLiJS8wti793s=IKeXN4tOAiT8^3&G0Z!b(Tg%Ghs^w7GdJ zZ=!=+njh=tb8O>o%#>nt)@&h?6)8gE@ON{Ohuxy`V zp|JI4bnhb&o!s>vsl4RTzdgyn5~l0y@N?rwv67!4HgT5qo)p)W>wRAD<^Fq1g49yr`q+nCyJkyX21ff|N$YPOwmD@aoaiOk9{? zajHNfpFzlwkU?x=5VzV)&&(mU+rROhdU3^#Z0lPJi{4$ukz>PV<1qL;UlDXebr>8Wq24NGdV({?Er z+w4DZh(@cE=4%)pUI=dJFkdclZMH-%n?d%d05`f_?aFb-7O}n-w+qm1WrLA(8 zrTz_T24qL_uhJCOoL7>`^RH7~oWk`SUiivan46r%Y1R1h7d}U`UVqOCuXoJ1@$TcM zb_5cg)j%uW{3WK)Q)1ogZc^1>HFbNU0XLcytyY_B6VucyB`h;ewbdpTj}VFXF+V#? z)2VW8a)Lkm4}ZqL{OmtR@9p_gD#8sCb~bL|jj>gNT2)SMZaS>rB*l7Whw3if7AP(q zf0NgXFQBFRdEq<9NbGosX1mSv&;K3I{rFETx8*%a)!p_A-gRus0Ir|FJr1VcLpSsA zZh^gTMn|6O<9Q)qA*D{G(x6mn5Xc7ETpx!IJise2&EvJb?uHagJJxh6Ur{o8z0*tH z^)*aRbV>`g9CxFmOkJ-b2nAB~$TYQ-Sk+;qOQ}`Y|5>_+wo=iSu~GvHg1|%5pxtP3 z^w?!Cotx#_{3MlTn|F>ME zh)aRJmC1Zl*r5D!V&F~Hr*J(ViH@B}kVwR7&AJrkr}%|me1skS8s+&**jj_1`89=W`zgOi~ ztHjlN{J@384;%y`dq#HBD$Vl1SeC@SX++h<(P9i_p5TA`*Q4nAJNQ#?gXbV+fb;|! zQ6v_j*2%>Wl}@v+QLY=fM5xwkeDCZvhB660@Z>1XW*gHqu%dBtxja@hi7+Fb*IeU5 zXd?rS%M;VgmFrkxjZ7wvWroD#Hkzhm*%>U`M*1$csbkp@G&6~1SqRfaXf~Q=A?fU( ztLb`=IdpR-NTpKY7 zb7#{optqd6IVEP>=>455wv{HoV-Y=>u9>p-a}*T-?ImsLBgPh z=XhwEi_#<-Izr2W?xTDMlp+ZHPD_;yrli>{Q?FDRzjl=cSI4$39LK}OC6kQNsydu` z>l9;y2C0OJ6;0x_+q9aJNEF^UI?KeR3XxQdasL+&q&D9+9|7 zJM?f{E_O6Rp-|_@?g5S**@Gq9ci-Aa#fmEEwo_G{f z_lPA7L~@WwOk@1yMTWDITqcEW*d6~vC^3)(p(JWXsg@lsUsxd3Kfuv%y~dLV`>=|a zNe#qE4fkQSo6I+pj9;)hbng+;sT`o;c@9_4o#fbS-{H*Z6V%!*o_cIIc2sidyv}!C zxr(jDh$fRvO-_-^4^XStSTgQ5i09no^XqY-ik|Pcy6S5icN{ll0O}U(`}IP2w~7_= zmniAcZWQoaMXH4gwQ8IBLY0}Bd15(>R=Z6+mY`H9V`v8R3-d%H0nvz0ejtt0Y|?h? zWRo4UAqYZ*G7*FwyFZlpu1~AkWNLDOlNalpo~&X;ELtrWCk%;2463y<=}3&A-J~)# zLD;G=c3>}YJ5E6cEKV1=JnK+$6jE2bd0~cpL?fTga^l1Z_U_xm$blA#v_Z_Ole8kl zObtyBLD$d%g$R6f5mKov^3qFZF?~X5#CvLX0r69hZsNe zG9&w+BtNi|qes8P#K|+98?R%;hw*056H5lPt5wp8erlBln%*Q9)oA*HkzG0}@DV7a zSm&wVlCP&nYwR^4WiJodsLpqPySZ&_i2>X#ERnld{*8hlY*Vew(k#pqF`zJCrc`yQ zyBb1|lSpLnf&kz5SzKJCKbIv40#xYo_8YI!pZox^n84Icl+d7NYA1#*GIGD5_mO|$tZeckYZzw z!@J@v)EyRUU?<|7dgm0Q!@FoU4V=XaksxGrG)5*7#nwUB1)&N-hJ;e0`##_O&Uuoy zh2~U<=@z3IomOgy>|h#83lVM;D1$qTCdS#5-AQX9L}orgI?`ljdV-4+lf+UflnQzA z?Ku(?2^q0zw_8k3OyZGbzF4IZNc#FlSg1^s$sZyJ714NtTC;&}==h<> z^h}X2{Kc2}m0$g7GWi7AWE3IdwCWzF6{2Y-Qg&Wr6^0OaKBa1tVm+kM3W*>Ib%`k< zR1(b;C~Sm~T$x%VtNGXu#2DEfPPw*^Y&$4F!ou7< zVYkieStyP(y7Li|seC6-LU{yXfM(igLhoL+%?9oUZk++J zM%};7hNx~*jg$`6#W~vbGJdm+)AmS>juMGxsksZ3S`JsQE>bL4u#Bs;sx^dB!u5Tm z^2lXVWV0Cxg(AbFdr3xg>{tx^08KXur9srTK-D@q@S#Q+D%!3?P_H3`&2+Pg8L>&) zgTxHU?A#*NmP0-jW2`@q;gqS>eO^3UVY)uS!?l21zlP=%k!_#JredP%AQAN278zS{ z`P5nV?oIK;gCnHUCaJiAkaZ$v9CRJ!2cUd3KcG6h$ke>gLx)H344YJ+BxqJhX3`{6 z2AUoqm4*yM+_sKx=Mg~yg-*L&!mq!MGciphkUVg350R`7n6&*0P7^ZO6oHI@kz%e; z>3+jezwlzPu|Dk^hGQqKq`kud7i(2 z{!1iMqkR0Q{~=Z^g?_6W7i{CEaAO9r302>|iLjDpBvpvlT%=f-#j8~jp#yq|ZF$J* zHJWY3u7jf_%T=_nMNF5pd`T;rK!z@d4(&(aA-enhwc0L*86{9{Wav|GG-*{E?AzPd zk)FQZNu8HEp6g>65nN}E$;AfsMx9-$2vJKhkd0u79GR+(2{vgc-^O=MRLsJ*I{OEh(I~@F~n4$1-C$O7P?dALi>{ zd5x3DzssXf{n++efV+g-VgR>|Zj{LP8&nr2sTCJ-MT~YWz;CxnC3T{Hc?Wi)ou|Hiu(?a;k!P?@kw^}=a@QQVt7wK zcGSjD8u%d!h2LyZFPHevi3JEfY-Y&~WDzBS-Sp9Q#r^|35MhJ1<6;VUboU@3U>JF% zUjy5u*fj9lRX%Xv9v-?sNhWGyAcsb$>!wu5dM2;F38XP*41#=d(5 z|M%yQac06LlNltJjPoo1BzEp0k|Qxb_URnD9YbS#vyi)m+cE)e z9o;QP1vrgGPQ7uI3umsNnNh;;{3({Tcc)GQ`v%IqD>GSY9bFw;Pa7{|w5 zo_%bTXCEHJFkB+hDAH+zQv<^SO?A?P?KtQ*O6Y_^KoEwUy*NdxFVEq7hpzYQtKx0i0k6>*Cq4x1PsGaGBbA>O|&3vQYke^ zjfP~?I^|NGcsh$AG8hOnEkLte3`_#5*g_(NB$>!kt~+;W4sHYPA_G|M45U4?jcu zt6!xy{tnOlgHLl{UmoR2+LbvE^Jaiv+!Xz3`5Tem)6-e(qjM6ml z+h~3p8MsJk;R^>tcfl>)GB3WpBvWdFg#JpSN5o_h8n^vGUb z{@&M!rzNvRZ?S97Sa+4fIywJz9HGnKlt5}7!CxyaP+Yjk;0}wJZ8JO7 zBxV~}MiSdLiA4ii?FQw7LoAsko-!~9@P&aXbfUJRRh5X=A_IK~y8LH540tzicQt^n z0P%!?W`l41?ceh9(K85iEXyXBOL5=5d$0{3U4>YNh85AVA{x4gVWMa?tK?%A^~M4Y zA<~EvOBy`+)Z={fufN2xmtMg$Y;rl1j4jza7UAlJ2-ha&dHnG)L?8&;RXpY6`yEfU zX`2XBr_u_@CL$cXX9p=;!-`t8!)XjF#GbC>HXS5B1U|Om^4wEn%ui3!C^d-ZvV8Aa zn{?7*Xdr`%M$tnb3xO{>Z&Q|mi*7^^Qb&ajfeKKXi}WS+;vBQZ=coiX=?Aj5dQE$^I zH8D+#!NCkN@CeO-PzF>=KE5mQY!|(yFs%lm6VPb7q&%J4{2WnSta#8_k$Fp-No?b0 z@vbm{4P6Ial~N0R-g@=hy#DriG}9m|LWcVdc8!`0=OyuUidLgd=z9cC4GjxBnZZby zC{qx$UD8H~)0#z#XINOQA?x!z{_q&bzjuO?tN8H84s*|eEPl(S|M5JfLK&e;nzbqs zJtPPvhMgi5f_lA%5Fu@)k&SDl?I!Vfj6_;v&rX|kKFUB^;dxQoZHH7eiSN|eeRznz z!5w_>r4pJIWv*J{$p?l>J7OThSww3PE#@*crO;vy>A1nAt7SqHPMuodiI48=X74U7QeJO;frKz*aej_+ zO^C+o&79rbsl{#LbNv-AKx-J?5JE~)tU^*^gV}^cR;rnI!N777Zqr_VtC*B%o zckW)|hD)Q;Kv#;BZ=PlUo}FAfeU{vgy`;wCsK6yqog9Fs;}iOADusZ0p~%RtKI+Xf zk+@AZAH!+4v225gZ6lRKt5GDKGueMI&e4-TyT|f;^kYYerIT2C0yh){w2|!+0x*P5 z;D%_rj?@IY?IVI3*RITQepWI1M2fe+^EO^fVb~^_bQ%jEUxpk%d5Ko5Ni@@kkr?Hk z`*LLCF7a4MEELR<}}IpFpXLb z4M{qaz||GHFfcWrM7oZtn^f8@BKbIrGuL?KwYS*w*g+<)yhS$kF)+8?fOi8o&IIiF zf30P>-p+HqWtLv{v3#bx$%Ir6UVEHG2E1y6k*trsKS3&I;}U~b$cb;ffUr$6sTjhH zP^wAh=4!aEgB~$Sr!;mACrQP1G}%Ox0$UH5og8OyXplGGInUmmgM8=p5_`td%uZAZ zf`C@tr%;+D88f(a^&|(1E@oV3^ub5Da`ghfuc%hrjL&PRc9kITX@`QVN6*ujk5a2u zFii{JFR}07AcaLAr>#+}XPEOsKJnpuu}mE)L!4k1LJv)Oc-2{yRLF>h6gv0@x+!r> zP09;prst~czUMw@H<_7snJS0qx=R?8$t5&I&>{$QGP~|)Xds8zn5Q;7j*RQHlSzUw zz-TRykNHFs0y`c>#-o_Z11%)b4fJRX5zP@ACNZ@c3 z!Lg-uPt|$BXlL^sl%XM1<5Rlw}TB6X*M zDPYGSl%^UqS^?wd=9nqgxcA;Y9KSF}-^fl5-1o#yPv&jhJZ{VYZc+aOSqA%NzW>_TBDRd*sHyCHHg$>1tS(Mysu8IVHS$ z1!W52w#3yfVnKoSq(F~J0vTXv7KRzYv?D~57N!}&aSIr_jtoo!6=E16p2%~pHNvAG zcmStSBlN)c6?26;3xzTZr53qVj6|!7+iJ4=(7g=o7@=CZMmlekOUKZqhf^t27(dIx z%oIY|EG{Ti&|qLd;<|GjIHHK|&q2)Mb6+^e$j&wg_og|0riklH?tf^ER4Utjr(id< z*P7?lu@^ai{sKoHKFp=d=NK8@14fc!(PLq@%B~%IFm0FF`6~Awc>w7LMC=gH4;UIw zg4QMoQn)RP*_j#k+?yZ>T_Uzax$coo8VFlZsw^^HPH_Ljqnvp2IM06KAKcP}-p0-0 z&iVip6pFLF@!b=gJ~@HV>U`+ghq!qDJZ~I5MWHauFMZ}?WO9Spu`)xW!_-=eWZy8c zLpL&UBSVj9Ga?;Frv)Q z)`=$Lc)mv_6G14CL^_5ZkD=K)rlty9JX>JA4!`tshw014h(sk?;GtYW5K5#la2*GQ z#BT|_y2Nt@QKN+*%G`x%s#22AA0$lacr^zzHbDPioYMR}VVJ=(6p`#OmC z;~IUb7zak^9E*55|$mZb4L%Wbtu~?|n>b|P|;Nb+vkIj-uED|+SXhJeQ;ZR((xbL2T+4&lJ ztjRkki$oI^&wu@GKKaRE26pYhGR-?WHMg-o?jQqDOkSI!T)oD^{5+PWv1@FM#kqM} z%{rMZBq9T(k^!Ul?ZY-pIE6)gH-WP91S-Npp+&9c(7$64O$XaHNTy=gwm^k0QOhI} z4{+Na^YbkR4nIv{ahkbP7nq+abM8t3D-q|hC&zf~i9^KWIw%`g_vwp9sm#u^W7lqS zeRT#0bF`fr@l+1S)j4%;h7W!CL5AXOVx(wP7KrAfgc5Su0gQ+wVtPcWqnizasDT)8 zxN=cYYqd$G6XbGf0wYA%;)D+1G(kWl=_9c4+dkH?Nf;_ZLt+{>fwEaRUq_j7BJm`# zWPtP~(U{3Ve-asX(q;qc5j!-*NcuU#<^t~=eTRkFYdrGsA#!<%8MQEU4Vkd9LW@K^ zLawi$NG6SGNMw2shGsEw>IBK;E*vkx*-J(C9vI}v!9ApM1-|u_Kfn)TWCx?@#7L$r z%9R?gzI2hXef`+B;DxUrBNk8b&?ARXI*jiB5KgPax4-!Iku5>VLh{u!Et2Oo>8o=}GeCFW8%okcb`Q*pYjrS-=?S~9^ zV3a#*zwd{fI(?eHejBA+_8f@t{NH?={_F^kJ-(YKpM03n;Rp${P9!Q&?Et^(<7oP@+ZZ4f2sD zm(O10JKtz>&;5N2<}LEW188;vD-xhJD(Jd~jtQoTCOm>joJfBk4?Mn~zKqRdPe06; zzw|wdHJekXPcXV?C%R?g`!KL0%k)H(N=@;RA3H)Kn&Q;kCmF~`dEm)M(Cs=pd0O>4 zfm37e-rZcjavIxAGPWm;9Su2mqK+MfbLV^>ef%CW`H*C`O{G>u(-bn)5N3t@AKJ~U zubd_BYy8MZKFwp#ZaV<)7Va3Et(2?ShQXV!y~%+?qkQ2%|2>NfWprg=TRX@lOh$&H z1kDCv%ca@0aT0rQeT$jdI&-FN;0h91Fp+gNr4&vVgr1I>=10t@9eFfd8Q6>g;hMg>#&C=V*dNpvYm>^(#@ zH-QLZ?Q>3>;+1E#UFh(@$(ro!G z%!XXNROjr8DL(qiUCdr=vj4#k^5BsVa_GK$5lU?D6L^!oPNMmeW~kE)LS|~-?qdfQHpW^bxOXOlvQjv~i_k5qE?XxgZ zquvM+z9N&*u}qt`uaO_hlZgw0<~)OY_Hk~q&48{`nZAbQ)sSvTtJx;gmnCS`sTE3C zsTd;K$6Q6wT3jS*Sm-H-pr{cdC>MMN`vi8fv)#B1JcIz>mx$0K@Fk{Yp;9dm@d0;PQB*KsU__HKUpUEpzOkAmO=x~Y$ zA3DhClUEU%NvY80nUCCqrbFPFoIEzo)d|Tx_YAR^cbT57ksIvispmdPI-W&|Zs2h{ z59qF7iwt087nj}_JoLVX&d?3U#)hfYrt#ef>3o8|{upCB(o9{dvU9AT@e9-Z_1~PN z?Hlahm1XBhf=1b)T&mF@&!XEAOw%GMT4-*COe%-dZt&`>$Ea5vY(tVx=o~%zDo;QC z2>F2ozOzU^B}k+#d@UpqNn(o-JdiZ$8`2pXN@MB<*`595_CyH-iRaa5&lQ*`2F#bL zJUAT3DOOOSN43%%amqY*r_FjW1x=K%Bvm97?%_ zUT4ocJq)1bbi#g`L^lnD@{pl`h>50!C|{#*Y!~OIFVSkYNaW&}5gXB-!qPG*EJUk} z^uX6VP$8mSLk}D`zgwIz%II>Cy~%J_io$B@)qi>y3-Ju1~EV617s~@-~_bxbpwA_uf&GUDet5 z@8(;%x~sc7=P*4v&nV0&j5Nvt1R_dcWE{X?1I7kpW0P$#7%(>BC5R{q1VTbc2<4fP zCTVi&p3b?uy1R0|@%y8Dh7l%w_Q9&UyCm49`E)$CfKr zF*P2erQOHmq|HsYU4`EtI={H+B1z~ghyPcsz>c$6BtjGgL{V5`3SMN<5k&z>5YQ9_ z)3jN>qKBF3qu6c(f^DOS8V!vR0$~rve2IpLm->iAU5yV{R;Z6Qqj?>2*)*9{0a2Ez zs*rCsU=~Tt&XS&) zWkt_QjC>5EkONgi4|ws)2Ki(Gt85^LYM32QQycN2I7Nb9onqD^TIolWED#(j!vP8g z9N2w^q~M|KDbqg`C!#{gr!!v;5YU6zxD-n^E(Ve$VOyZNUQF9T5G-UtKoA^k$3PVp zmjkO>5GSajiw+Y*Q&a|)BPk*5a+1u<3|7&_TOTGAu0~RW*n*9vIT%I?SFAD9l~Jjzf%^6;M8RUimIfk~ zl}wE0>F+CY`88`$lsvnhJ)hSJ?B^Y5YNrP(Y!v zz8zJrMAK*Scy&&n>0|xs2%=m>upOpnCb?wWYR;Y+Vcq&JPMsd*ifgW=Dq6op^M29o zf2HwzI00Q8$5~SR#l{B;;iwmdCP6 zh(Z*%w7}{%6(?I}U@*s;ts80RtVIx^luM9K#Zkm+0+m%bio@L8Bv!G&+{84+T!xXM z5u&XX!ZQaO*V$dvLare{nvUx?Y!1l_G3+S?kL8Ji?C zn8AWGOq9zmB8B?nt_ag7|K zqb0hRMe+M1NN$)^-exA7qpK)U7N${5kOC1rzA%a+Qp!z$TSk@?aG)f}==JTaP-nr( z^F(hNMLW!GuiJv7OSqVf4GmE!O%tE>)7IU^(5WFps*W!pa_rC$nRGvfVX<;$GXsOC zSi5>Tt?kt~61226l9Dy)*t!a|AW)+o3T?&@M$Fh_hk zPjeuEnVlz}lJHhFP%a8cw!*^93=4@kIir9q2n-I#@%bx=&o5APWjsDVsjQ9e_Yn&F zF${yCM?w=U_B`=CHJvLlN;V$dCWMPqDq%SylB(nC9u!qWb!9@q5E)~dM6SS^74>-K z46;RfR!7aCMp{gpx;6Mz2Wt8=sm!o-X=B5{znFLYtP}f||WZxu@J#c_% zQ+)JIa54KPrI#vkxu%QDGK9>K`bT%+UjSJK?o&EQM|MFziX6Rpr`Z499MMI=pI zjL$`pLS}*Fe1g%*Sqh?vR0@!FO>)T`Go$m&Eadt2z85H#Oty>gVbkFm$wz)6fh@ML zth*KiOcYJw$)|SVSPJc3jjY|; zLSo*bwN7VQ_eNY^bRTUii{yqi=2T4uM zVYxcd`Us(FmH4c|%;Y2o5A-w8KT0&Bvvu1x;z@&i-etq49yDFTF2m5kB)PQBbsN`W zWlk|MU1Zmj$5__WKxcb^mX;{E1`{JmVhd9+@1e7+l6C7=virH?Wbzsv-K!ZJPT*B- zUVLGO>tFTOMefF2n(3JtK5DwWfyK5yASf3LhP*=ft<hN?!Vzfm0r#)UgqY8C|iD>dv=`t&mAE)beQUDi5<7D zp>Ay>!Io+eN+^nmEW3m%ywucHAWANpP+~SVghx>+`Fv@9(p>fSkY5U(C?y1fFR-Xhj1MM&Er9^%8Pjn+ajGWku1P)++i$f5X;%jWK2r7 z%*y6EzFgzy8|PX`5OGD9%H}3&>Z;My0`U~g#PUqX4NOO1YJ8B2XcN);1|(fY^@hpk zi#Vc7*#$vWK~)hI6+{6?6mTUA(W}wZ*+kaJ;t5AdWJO{Nc??UUxjw=(3QPe{$qubu z5%g#kg4Y0l067>&@I{bxKZ4@JlKr50kbMG)f<+>kW&GF~RIkLkEkU}MN66(2N@bDG zW%aDy&_%`;7@Vr)Y}$DJ+$BGF=-{ln_O6X-Lp{ zd8H>oVB5CKkY$N%+Mqfbp?g^imtVet*xWc(jmwxV)bhmcG!Ol>m*Yo|AZtl#J3WLV z0zO{=MH5j}5lt2FXcCFoEa{X*rQc6gFo;i)XsWGdW@3U;CP!_39k06MCZd%hJ|# zkx03eObOEwu>=WA09Td}L>1Aa)72Kh)uIIJ8c;QnOE)#)3mW{zJMV%^yV(-*QP|$d z`#x|Rf+vdPuSD<$k;74hKqaClgyan(NCswMj*|zT;|Je+m=X??35!@>X6=RsTH0#x zc`7kWIf8xxudLG6*hDU0=DO>8Y>wT}9AWk98d@4^IDK-6V<*QEHHC)8Dh}*Biyr8vy>t2b zGV0-Qm=AyWyq1wlNEN<|pHv8H!Qc(1c^oVA?JoO(9xcOYhJq9!X$o>I}OAD$O+>-t@+sL9mbv z14$Ne2~na1riEkVpqN1rz~`0lM=H^!1nHs)WrLzsMnEK0$T5{n5X&nFl7&wMY``(W zaj2_{AgdzsoWep;rm;q2JT^rvK1a#2DVi4d|KwR#^mI^JYjI{|l4vB1f{JXGkZl(U zkd{oZ7;7hyl2b!>j9D*3e5i+>8 ziD=AVXEUTy29t9Idi(NZiy|AYx*Ac5V5wBoo_x) zE?*#AqqFbGaSj|kMOCB~!Sz$jrr37nTC#0^cHVFkpyIeTFTSvwQ>RX1+cqO(aT;U+ ztc!~OO5%4K0LO7JVDb?#9g}UF*K&m{vb<<9sD=5b_kWOY-G3iDufGAo1wryMdh!Ul z&^*_F_%8_;ifl72s!W)WRetE&tX{d6owr|&B)KS>!=uk0;%|ZC1^@eAMaAnFyxso{Iyi0_K@hQQ3(K;R1p`$R5JfMJ zBOsJ*s;h!5Z>!?qK#D}MK&g;paAbg}WwFz7(FBnpk3!oyf(*$+uqjHkrui4blhdpaT(%evMOWmgEc58;er~+wGW-FBpZ#P%8#eba zGJ28&FZOYr04O=zfi? zAu=Es{3N%?D6-8Pq^OECHdN7AQ^^bIB)ju2t8|^4FJFctrEm=c$?IJt;B-v_s)A`1 z5C91Q(G+k+3*F)3>6dgfy$z*2;hBQL85lT)R%dKR~74JpP7kRB=^0?tLDpl~6v0)0MFEW#aqOCKR ziE?T>h*p^;>Pv9y*kNX78wrKlsj2ocHZjG*oQqFyX54;(-Fx=&9>?V#+oj2ZenG(J zxHJG@G9~Kldf)&=Jv{NF(|pZzIU|aU3j#O0HeWSt9x+|s{@^bD>Vt2hsildhpLhyq z{{W*F{H5yULCxeg%cR#Zc;`ft`~Ks{eExgiN0MZEdynwio3G)sd4n!j!utX$j|c*vv@+aP5P0yL-=(3cmbbt44J`Oo9$t#K zmm#ydy_Nfa^uIXf^KfYCTbhEzr$2Nz_q=vJAAI+-hM`Uxg@_KsIm$ z3)gUwoh+iYNWvkCBC=qhNfx4&K@rO|gj|+Y%k=gg<&%!Xt**?is>1en-@=>!@y)!= zD|7mM3rT4H3L>@bn0gI=|1S^lfbFmemD_cl9e?-d{PAZ$#$Sgu9v1{YY3F%!QQ)EP zK16q0Ej3l)#pS-C2&ylH><^%Ys*rttbWO$e1ZZrDqN)jWH-niz&g5L0jR;)oxU2$j zix{~QeWOiG6gE-RuOiUU!G^j1+9-YqNqnFt3FIE90)Ydp96G(R_8J|(IAt1R+dLj`vNPY7_kYjBsN^5R3! z;q^Q0-aEig4VOVdWpBX8UGIDc_vs2}1^9@W<=KOKkz@(mGWqknZ|9#220L62x9J{k z{mj4e$6x*y_xM%LTp*1XCk4GS_`L<#E}WeCS$`9E{_S7WKNaK7yRPQP(&E{kvdHMr z2!p5g^Y~Bxlhu~V?Jj&>jk5E~t9bPtx3GD`M*j7S@8^@gMT7ETE6IueGfa(-v2s;A zuYT=TzN#%g?{${Rz}aEG^|i0FZes^u))(FIx0F;Ke)0sqx_Tabcn^1E;OjmwZ~L%$RM1jUCeD`=XA@4IqK6BYOip^5`RMG)-=F;p<8jZ+^oqyyguzvUBHFKJ#xM z;NyYCn?7tNIB?`NnRE=Fo<|q+=wcbKSU{6<=;V;{QyhN!mwe$1-{-Mk?B& zKFQ-hc$!yV*+Xe#6JJu#eF+tm2zF#0j?zRS>*ADU@@a?kfo)V5kG++OS|10N9{C|PM5eoieeF%$;qww{sAr*=<|3nyCnRm=~Z98^^ZDW;6Wav2PGuNOF(u z@jS8=N`*es_X{``2;s*esuOWj^3!`N8eiV7p-)!9><< zFmgy@9sw2Ca&S=rXHif^un6GF8s3PXGehJ2#S#Vmab4h^Z9RyNh-<27nnK~i1`wc> z&-47_dw5N0v47ZaGFyAzp~GVf$;zmlL>^5iCihBCK+Ex5SCQlRR;F=={&+*dm%OeZLn zQ@FNDBvOml>t$?ofzIxFB*|shQ>Uq{Orx(_Msr6q!BCz=DunAodFhE~u&IiOY+QLY zMcbg5FY?rrPxIF!~X zC9c@To>@Qu$HvGdh%FebT)IiL4UCdWzEEP{o_>xVogi8rW)KAzOZEaPj^!Xq0-~+4Fgnike3na>O54V)5*4yTYG9On zIY4~ANX@yIUJ_J6aG04*)3x-DlH)Kky1;*Y`B8RkThE5gt@LzMa`xyfJubAC9bz*x zxMCNoYZDt?08clOHJ4!_s^=^RDP)`)OWYz@hIeSc{)0qkW>ZBbhuNiWZAmyTyy&$ z@zpQ=Ge7v={aiB8ONSxxv?eeHG_vSLI*!9Y{{$a&&b4)cNOjfHT9b>Ffd5b759b4L z0ay67nHr0$1?_YO!*p440H`s`EX+(Y8%yKy1xcmKh?2_GQexdkKnsLHt!7}v;OrZH1k;Fy>!Gj~~2&DqE1H&9SHBGT>qc8PTHLlB(kG_N>M@W{v z3{IOg|BB}vTqv4F9NYQTJK8p9vKf4hJ)9XXU|9WxLmKl-y_qdo$byStCmBDL#;)3k zTMlkAM1`dq}=;kV9pMkNWEQZheqM zW*plvUM45Sl7)BapVrDg;`0kjO}kiy=t2kJA|c2tgFnmwoG$`@ZaW777nj+bi008b zoH5wx!dBbl-l=)^?(4^+dzqOXA(bvrwRG2U)uyGYfo#6S%=8Smz3NWH;C(!^P~uwG zW}__eZrkBcMH@$!*=L&E^9XiXT~wn!#&-2s41&QZPyX^Lc3iiGdp!b0 zT=rNtV}i=M&PJ}gzK5@ApaAy*U)Ma`@an5*Xl%w8iBK#T$S3o(_guod?N?CKUX8D+ zlA_hf!Q%!$d&*?rAs+|M1h8tZVnME?+8d|7O6BKEw(KoViT>Cm*-Qzqs35w|Vqs4} z7DS50BI6?yTzU0+?pMyeV~+m#6gw`fW^Ip3l_y8vP?By3#s!H3cA0ouCAj7WdQXp1 z@>LOEa7o1_rpH|N?mEfrc#=$F9?`b(>naryhpv@X)Hhd9$YwClTOkM66-dTQ4E0Yl zGakpQdWlV%9Na&{^mq)>>kzJvBFio{wGpbL6%^6}iV~!2RWsM$x{eF^HU&|^N9*UCom`$33?0MU2@TY zVadzZZI@x1CfU4!=K=|N;)#dooyf3TUTo~UOVfPyKflEE^b~?1P%0beg;7SNP$)1x zJ$-RB;C~pu*8o_SO~ul0potPjxeS6!*(jkctpx}R5`trM$*LBj!3G9IiSG(fh0EI= zksp5bKbV>v;qhPmkOtdgHSi9_%k4X_;@TV6;rGd$Jl#*yV6-f#fhEmIW@Vmcc z1GZyhy9T%1`KNqY6DR}QoeWPDavb^ezwqI^Ud_lCzsQRvn=k2g-1F8yBjndP*BQLt zn&95A{|8&vb+9>^rEckaHzM%GPkjQ@aQKESk_RqvQhXrqvg5K%+`Mf)_kI6acG~CK zdWQYq`WkoMc_+@rBBB4IkbsYT{&ix2p^-sWbT;D30lpraB?`RXv54i1JbCmG%jaW!&2)K} zZ=6)V|sx)*X4ay zfr&(s@4Rq^#_2TwZn(TlQW>pKdCgs~C0o?7$|lvVtEi}o;H~yhDwZjxZ9>7t>Oh5p ziO;7qJ2k^#?*xPWW8C%T_wmc84sy5Sa+L#KY(Ab%vuFQ4Dl2>_l7wI{h9)JmKt5~Z zI0C6;it&+Yde2Og%ehQV=9!<#vUl$uKJfm(r@WBmpG^k^NZT$SeDV<UAUuWPG%CZz343#4K3UHR|Y!mvqvi*ybmnNfDcy=@TOE;SYm>MD;JWx8E3C6$ySvvKuW{bL~>!rG`1E*x71T@^TL2Py&GcTg4QD!Go=(@^i zA&+GnG&cKq`l;h2(^=l@fDU{bz_oanY4H;agkqY8rVa{)GP9v6nk?(-;=TQ+ zIbgbssudj4Wq$bm@6g=R%HO^BF1j9lnwxQ`GGM?H=J8UJCIm6S>o+Ohmvh9*fShk{*@u?%El6i&)<|yRnx%9H- ztXQ>zlLueomrwQ6)ZB$>r|DVK#fA+VsIS$r@@YcV5iB4W3Zlpwjx7-iR^gfsy}i9u zR8%oOHcfMLGyaH&a3IK!fA~1@g%XaLCU3=g&%5s8T3aEhA7S|mZjqw8c6v#j6TNL{1D13x&*BR_u;)5v2P zE{bBHYF-dr{9ct?Ze7pXmCNz_yr`N7N0d;+FzK|x$nZ3U;ymH7j$s%GQZ0%EsZ@*u z$Btl`BJsIAxon!{__Al_~3)*WcVWfoA|9BKy!05 zuX^?C7LzdUg;{^+8dW(^{T;rjL9&!zVxfr*y6i;R-VI$ujoS1LR6M1i_(@%(8X+ zA_aXeN_#nHY)V(RCtq%W&Kx)inWpo+>8C zbJY4Y{NY+^JDZt0-p}TEG zRIqu?<@jpLoH{eWjw`!()19k%=m$^Xt0=Q_+f`^45%h>j#!8V$NhD^o%#4nMWl<`a zcswe(d=UYigL?<5s;$JMx3O|X0im4Yl1uAYzN(hdQIolaJj4CtB<3V0f^)RC)^lM0 zX?($I98*T~h-}`v0mo?}pU?BNhd}T{_5c7N07*naR9>X6#m8lvI+&i<*|>ER`K--+ za)C7~BYgYI-($!1s~I@kM{;(INX2UOU?nb#MJOBTOvBF-jJeB_Ih7bCbvDTyZJWGZ}VVyM>4D+eKwC%!<|Pc;w-y zQ5-+7f5Vjot2O4Q7ch$n_B?x#OV%~;;^6_RqSaK^H!wcZPb3&ZkxU%NCJ?H{1*WDZ z$)-x^9-Yr@AJ{+70bUl8hp2L?YG9 zPbGL{{1lPeF4Bn-fk1%uYr4Ri;^v#Kqi?8}rq&Lg{KXL7&|$iRS0c#z68p1@BuOt* z`g8lh1qJ~GK|Fu#-0=&y^CI&bj=%hG5X6hgzgGf(paJ+jR#_0}x#T*e#}AVj9LFfT zAWLl9w1S>S1tXO}_1k3JC}+>iqIHn(B3a^uP&z`s3qh z{z|s($T2vkQE~*DdYb82wwkg26Bvd8jzT;=N+c4dt)m6U5s(!HQB-K}=)fu|9C_(9 zs^X>hST7ZgK5l#6olFkLC=}CltXa>=-ce>oQus6oX##p-0k5WG6-{Kc)DX%4{5(F9+c7{jY6=pKko&ST3% z)OD?;zNLwlt`<-YQt<-1UV$VP2?TWVg)*_pX(}T@I(j;gREZaMpJr}0gJC#ycGpo` zU&*m!qs-1F5JeA$Yhad&=y{iKf8$}6^(^Di{sH{{0GlrBB0g;~I53H0X*jmVaPKI7 zzkr~q6mtTPJaCqp#ySojI6_U`Cc;(ve{u8A?Jxe+zf#=AbME=;&QI+54N89Q^W669 z3BF%lf6)VYCGfka0xwP5T*U9U$bti|tfE=7T(#1VX^M3Av{O^B6PsQj)ZT%udT|9W z4y#z0oFm`~F*Pw3jDytM`2Zt!z5~q(HM^+S~5sk1? zpl=|v7WSn92pl>eN9pG(~RrXKz`_4w!IM_8O{eG#u5evb!mLFu30 zlWK8Y7gw;+WDh%U+rhCHk6@TGhfXDNdsTGZ%WZ3y(Y?Hu?|tLv%*;8I3MDMd;Ko}o zrM}fibvVcLjKtTz{w&3!N@s%~!-{jJH;k%D=%PYhrJq7>fpjW~BnhnEvXxM!k8&YF zCYvXjGto4iR4UKZ*dm=(duKDUTHx4AC1$5mtPoX-*%?-^ZROIft-Sr7e<7Yz@F?|k zHwUmwB}R|$$HMmECRN@gX^0Jl+D`!75t1;_Q9m5WRg_d^IhM434mF-7=Di60+*0 zrYV3(nf_Db%+AE{dBeE4lnsO9$7T_18C5ATINHa^$T)$ZkG1PpuyggbtlzvHQI_aj z(M9KqZVK5V)6-)tWKUDfXPJ+UQ&-)JEqR!luR!y9SiV`{i6>&rjK^qbs%3U|hKA-= zL`g&xULOCy+z|Zc9{o2><^An0|I)R>ujEX;nA>|r@Oun^`|{6U_sRqo%Q?9YuH!N} zImygyA1@uBrFXbUTYC$csd=iSezsk+98s6p{p=u9lO+m1 zyHAm~TbP*1kjZ7~Xo@mEks@CR3Paj3FO4zoAR}yebF`DYD@M#uJk<~a???m#|(7j?EUaucX5D;A#WDrmYL{yen zuc5uCn}>gVKl8C!W-EdimWPgI5*2|Eej(3>)oq+Pl|b>7nNRi7+}3%%D9nX1|Kg{x z)cgPLc>cou-xlwm>tHTSHD6o{@XFwK8-U-Ki9Hvyxl5#=F2lnUj1LbnJ~~7ym1brv zhwDIp-&txRwQShXO-oB9&pvUK{V(*<*wR8iIZo%=PBvWD#-T$8`1%(gW_&hBM^6;X zw#a3(JhQ8Wu4~|A*t}&e+pbzqTW2RCV3qPXPLfRCKy+1HQDZ(mgNuwLc+f3{xtUp7 zTI)D@WRkMul8B9Q=42m^W%H_AF2PL386O&;Qm~0PqS`y1CFfYN;+j%B2~D_wU0-B zeuP_Y*@C8-csv%exJU@9t6n0(2xUzmNRCuGP9iqXzJo`2=J_YN^X64_R?D;n^9Ydu zX9vnGU*C*BSdXUpafA@ARD&njf}|*mipnBOt00Pqh=?NR-FVd(WW~z0{QRdsLX-r$ zWC7u%Lw#E(rlB%Elp>K>K$(owv(if;S0oq?oLBT;83Ko;!QbEM=Kr>1|3%CMXUPBv zh{DB{fv+TfrvW%OB=fs4KR?ftPdmuV!FhUy@xOgC5{|C z%(d5S#1ry^;Lxz9gSTwm%I?SZ@cf}7c?(*iekyBf*}dxwd-wKo>1Ca~`c+$S%@WCY zg7{31sdSE+oJQEM(h+TDAyZ=Y>Wvhv5{lZ4#|JIl5kgfVR$f-7Xe!Jn6v|3Fx;Km> z$w-olAUH2`!zD>VT4F-FFqv0ZSBozoF*7@fFXX4Bdhtd|bT6x+pb|6b2 z=qHm-Q!Z9e$fl98=vWcu+8egBd{q~YVNguZ;qiu1M9Alppy-6dVFXdcr%7OB`G49w z@A$fkEAfBlw%61ptJs!%#SJ%%jcpkWED!@uXr?4fO9;tQmfd7GEc+vb1QOD>kdTB; zAql}ONmx3Dm||>-F~+#!F3EC}torooz4QCyy(c}%dXj9bJX!Pod^)|Ks_TfeN-MkM6kY=2_;@?4mWY}xlPIRZG>u*I6=u5~D|W$<7## z%YyQq&A4UFDT{Gqb5Wc#yZ=-ol8XUS4|PLqZ`9uOTSR%wk-gz~c=PjzrK* zC@s!m$DT@Ty@>204?)`x&4Q-T5bB$XFgzY~QwJncNYGl3YflJ%LijaJL(@SMpzDH> zV@5G{+?n`mc5viCEwa$fwoQBRx(z&e1w8ZQCNlF}Oq@KL>gpOap|^YY?HzZqpA(9p zJ*hrVx1p9!Dr(^Zd)}sHzB(mFc4>-^J9)!yY^60I);+s5`-Z@hKV{3KDQSciXbs*4AgP>P&0@2RpEBmlI8L< z)aB4rd5{S?1{X{k$?A7EBRs_{D;vk|od@_-gee$59dGGSiZdL-8D2~$K$I}yh9J_2 zV2dc4O+(i3O@N{4>O93@w>9HTwYAWMWz`- z6E=l8Zagj*uf6mUJ9amcnW3}fqKOn`JM7)vgzm{@=Jb__bD`*NhY^f6H zS^@guY)rQcZ>EkdZ8UkjW3K(kpIEQg_1MU(YZ_7$Oq(`~Xa4jNrV*mNd@qxyO=9Vg zc@z(wz%ze%39Rw#-(O3~n0z9UFfLc?hMyCinkUB+bYxAoy`D(%Z$)p>t@Plrf3*3O zit>Ggg8_DK-$~St@Wk(afEEsO36lGw4!0X_D#~|qu)30peGN4G{bXdCEM7W_Ncaek zeD67e5g1;QgXKgChQe&$yo-IiKP3>f@cWPOtN(fmG|7}{b16Ho08`Jv=ksC^Cd=c- zbb$;9*z@sL-hO8tZ+%cfey+xY|L-dD@^dkrD0LM+W)01va{B?UxaC@OOY-hp+t^gz zOvu*QQR%RD+YW4hl&eZd5HcHi?YTEFLSg35oyfssTY2~6-FUni=xz&_OHf|1hb*s) zPd;9Yzqy$yn&6zB4p(6EpH2;DoHdRt7q~RZ(BcvdkB37wwahW@aTDOwK%e7D9LUbXSm?YMUm1gvN#jLQ)`gFK%}R zUXOuh+gQ38H{%VY1~xX)sEya_ji+aG+N`^`Dgc3QBn!WW&;*8IVP=&uXTfqR$~SVj zD$M4Ow=jB4DI4G0%gFI(5RC@O&4V{z`H(GJj&b!3*W=5~B6;_CvLcXDwy{LIg^0(H z6F2=6xBU(bvI5iw!Zby6!cmDWW5-yZzhF2^ z=8eGe+LTurR8}-Fd_*&mre3ivzOeA4DvHG*;coMnwpRK&i1W*?cV#y z9a2d0oIP><w%ddXr$QiF%>RVvU&(#n(@h1?njxrs{{c2{+Ky>y7^a&he=S4u z3&_jOVfW^D@E>giDToMx5E0xy7jCzQ-8+x6V_P}8VRF{|GH$r>MqF+;waac~;|FiE z{iAm|Qof0XnmTq>HBnwu%f*+>ct;07&T=k<0em~wsALq`E*}P zOGSeYyFLvO4u{Y*iD_6Itf{5BDMHv0G&Khix{fU@Oe=!RZQ^o!uv{+OE*~D32TkZ$ zE>}#!x?Py2iD4QTMy$kwZzPUm8({b4Z|R|Y?lyLhs&0Kj!m0BfAAG_;3q5c9!$t0}rtL^0OH`ZYHKTpS&T(2+cqT949u_ zNK65`-KRQ5MFjQ*-ChQi(&4G6p5(W`eF9Bbj2txrgvPAd(+G$B?B92gNYrV0tr5p& z($tZxd4C(#$LjETGs(%%WBDbY;mWI5py>vVIcL#G45xy3-u;+O+be0Zp(sC>oPr@7s;a||1SlMmk2lBS_S^oB z{82@O0(Ddz2(xBgIXibBBI*c=3i6mXeiYcy5U8X%6r#2+cA8EMNi-5>XT>27RUgCF zAQTFr8z#E$#^2P0-`@yQ;>*Zl*wB$=__DDq3y;Tx#}hk5%d%V;hKXsKR8;Kc(BUei z<1l8-c&1F5(Z(7`SPH4$AH;;e{n~uOWS=%|7Vo_E9*s@)1VUkIYHArWB%i~FbJ=#Z zirkVMZdp8^KmPg!*1oxwJv%B1Ne?5&Oyu097ofXcXqtv?$By&q=!D;nl|m=BzViR| z8Qrn~HgEZe8$P=X|G}eNfF#G!*}l$Xoo%yx`86!MXeo8sO+c$lCxXKtR=&V&2j)si zwdvzUUGSwZei_X$aiqjS5{ZPl_nw=0^@Z2DSc8&a6bvsFhQY569p!5ee2ZYn&ui=6 ztV(EoTDJU*N7m4V=jzfTt|2cNb za^fpx{`U`EDu55yzrp1fUc`fe2u0}px8>%b5#iBbGdhB0&;EsmqemGrV>Xef6ITEZ zH%h^ZsHBj19>H)^ERWz9Z{fXd+i|%)I1=u?>uMTaS;Oui+?83#pS_J-WjC{>+2JcY z53=%?zv0rGZs3=XJ<5-x4%bM?jKF1@&2lNZCMfX$8h-vNGPvu(@1nVV1cL#Z{Pi@{ zALSR1KF0ULHe)fl&$1|$Vb+8qYzhT=b@dv;0@mT8DipxXa(Gne6Xb9b6NKp}{X`<^ohmY*#-M3!ke{6?g z(%?bM%|;`_-Qi#?hhTXnPyF&H+mV(G2DC%#Saj<6X%VkmRxolk9THM(x# z@t8!TI#Z^OCK3v>al;l?{%I8xCXFS_mql}P9sZC-B+$g;kNu46K7T!<#*U?ZWFU03 zYcOfcFR?AeQjPfiMyGL?fq0}%>D4tKbH6ntg{2gjB2kPah|{3se__m-{H z)iz=1T8kzxlW>b+F~{X%yxU-xi02U$Ijnv2EdUxDkMY8bYj`T)uv7S0>+|tn|N9cZ zak+a;I@CFY0(01 z@Cb&*>wLg)(X7e%I)AHkFy zdHY_D)HIV@SOl6*`The;n?8|Cmz8nxh4UF+l8IXnvw7{C1pIA}08dTovA&~y1&ZFK zQw8w*-+YTXp#Yal!FOC5pILq-)27d2;lj&!M$=diyobQ0fkC9r($M#q<9$FnQjh=SYA14+c=KKzux;03(p$Q zhWPa#ag`95J%=CtY$YS6jOLH=wWL{ih}72L@p$oNcsNpZkeh4(K`k~TMx8;~lB;>w z5!4bpdHAo6Bzxf!d=sZoS@{v?;V==HOPDL|D3>+W^99qOIsSOp+0E>&+(%wPA=x>( zv`%|9gl>|PTS!iBA$#|}&zVk?WfFdA7P55Fh0IxaJ~QVmFAI8iw12 zFby0{fT6dU79_9F+qR8uJ4B;lLg5fYN=k8Cu@V=*01@O|! zKXZLRVq@@WxQU`s)3I&H$}DBpIZIjQ%jAzk3K+lSd~7?~W;a)(5EKrdh-tYg8a6bR zM-V7<1l325BBi9LXe7(8yo_O%#pR-jXhwvk=S-!frm;1zoZ&_YjYVbWW9WKIMxL;4 zF@5G7EXze^UJfEL#|@pwE)DO=8`AESFA93;PB2sxQ9B(MZQR7w^vT*?_| zOy_XDsG#ZOEqZ>%OaCx?v8478ShEYNg=oSYnTa&p-J=_Xc0 z;yDCOozn3W$;rtfFE5|@3ohZ9Zn8~)2g&(*0f%<&Br7W`mZ^u>^N%sJId=FUd3i$^ zT9APuU~=|z~ypb7zSqCiP%0YIMwJH3&oWfo=iqeID>f$ z7f`nJJQgmwka_2v$FZ7YG}hJ=b%qd?nM|KOgQ(_W{PbB29XATE&lBH_bo_k3{T>2M zYqt%!1C#~OH+1R)*uD2KQyr*B;L;5m{f(Gvs-{zv}s#FL!0V=LE%bzXC6><3EY*Kr&PXdQ-) z3L&seqjei80^Km;fiez5hZgX1(*dSCl3OG2{nwsj#(C%CZw@mOSS8#{C@3H^Cl86B zsi~Q15{_sYtnzv|`=U!*9oF$3YZA%lG@Xo0ADNlnHVQ!K2HCkeXu3vyT?1z%atLZV zE{}`+g4|e0t`v+ORm8R}<(wg5R7BwS*OQf5sVT)?-xH z`WYr+mB?Vqh*G>>S6t{~AzHC%Ky3d$0(9Ms-CQQ-+pVL2Y~C%}C~aLAT)b>KpD|3L z(jgj+5)IkphTP1UHG^^ECNXNlXoi&xB{S2FrdecUmLNn3%hHiaX9L8PPRudbvej3_ z{3MA=bvoWFV;he)Yybck7fD1xRG?4jQ~@-HqIe|aVPiW2Lui<$3$NElU2Pp6w};iM zUu68Kahx&bj9AQh;*W(!LB5AMv*&Z*;9E&omEg$O;;|#S`%B9>_I5n4oVSGElx9%V zR7o@`uUxE?#zvQ99iZt3uB0&4_@@|_3$0z{R}@avW&x4zMg*iArFSV2SU^HjKyay* zkkqAPk?sa1mZe*or9`E>J6F2lN9V%JdH;m>yz^zwoOx!>%>8iBojdp52RRa!oCtlt zG~5xl8221?U1}Cn?0$Mu3;*|>B22t}m7iXE>@E>2KeQ?l_wT(^PkIpxt>n{4qIOasm z18ZEO69aTdUh(j&+dbDni3TtkE8m{c`O>YIfb}WL<oEpg z785Z(7Ap%HtJ2NoOir#yO0u#5k&ay%Iaqj%mzT1?K z@8aM2^=zG;I8DZM^>v;HgX|5`mQZPwlGJr68>Y{T9dxlPvl4BBY2cpwT_|3;c<m~whC`s{+BJoPnoU7$^nM0Cm&wi zx|7FR>%Ff=t|Wmuhw^aK3zJd~l&Kgy-V)6jx<uig(JIJ}GA)$8%D5Bs zqLggn{H~oIJhNu8xvxA35zF94`?9D3_|4c%jTSe?AI%y8d7o{I;q->=0zo%3cE%WU zV_IEzmvPdF4HSnsuSuSBef|u4K_^!EYJPADQnin2 zjP>WAF{=rJ4{D|FdvcdU{Ia*%fCgBnw8Q2G*G!o-3BDlxpT z70!w$?Hv7Qv{%S?h;M{zM^YL8s3vnmPp4QN2ixRJGuoy(27HdPj~J3L`Q^a}CDA4Y zGMD2JWEaYji|)IK?-f4bTlL=le%qaJDz3QIq4c4_TFwUsVwVlLf1L2_>u&AL_8um~ z(;|rcupV36l;IC&vkPNBG6&~+EL?m|cJ_{_96Ny~PX>PZ`L^$vM50U_U$?cFnJxk4 zi!#CS`^$dueWb}mNtbz3cP=|2SBuZ@JvPYZt}mY6y-Mr|@ur%A__3oL^(1~JS6lTY zLE_^q>azasNxejZzi9Zs=a9JO!mSfeufnjg9FLiD1j`(oDKhkckFPAUUmiI36tNwc zYUD2UF009=TwRhN_yRs0UeOL13ay~Rhv*qrFfPeQmHrXu%^lXzpU}yR;0(P0>iHh^;K5N7tUxnk|op7^7oai=sf~;y7BiyVCy@A|S~e+I?$P zLVkC@_3&D2^WAgMmwrLt zAC6o@!vZxD0|#0;eRrmr9{n`R_-zp6l^~i-dNBEX(aBo(_lX)73cy6}5Cf!+r5_kU z`X-K#Q}iIl&{-9kjuFy6x2-sRXl`l+o0+#736}Et%@+NoJU0Ys<_Gijj_Rzo1MsFj zZ!eVg_pnu;Z*8Awwxi#tkoEXzV(Grm{VsR6N8aFp@l0Q7i`jS5VjY5z zDNE#^%8mYN<0oHM%D=AX#mT+k_7dBPd(af^?O+wAQA?5?HFlN1P7X_Qzk=siub%H6=?&)9mXchnCXte$yteJvn0&Q=Zx-A+JiXDnX6OkDAeq zq`Z@;4L`J}f}!DbKOMyPBdw?AwU1^me(%%rXI}1xslVnv_nP51wTtR!NqR(-mzE}p zi@!G3qe_OuyQELv8q&E*g!Xz-ZT0T%elq^Rlz4ug;La()#Hd*FTaJT?vArgzdTo4` zJ~c)&A$5F`Izdx&YNP^EWA649R~o$!$uL~f`sljRdoplxZp;3fjSJt z(yz$tpd#xq|*?P_4vlCe-USn}r4u_zH{hZJK1- zSv#LlEpwm=-blZQRZrZ;;nISaHmcwZgO5KLN!KFh>0hOW*U&dk$aSwhb+adBvF`j)eYb5h z^5tR1*>eB0vnxg7YW^=zWYfB$KW6leXDcmDSnPko3bYZ6eiVoJ%ARtTtMZ0%(6qrU zv+n*a$lBqD%C!}Cae>$?<9)h)51W@G%&ULsT*OUEu5Mj4L zc7WM?-pSO_M<}UA@Nz=FaHMGMW9jrn3_UpRRJBumki6fzWm!w)mpnf1K3_MX{UhhY zR#3n`+k8$n{pU}r^c%va)66cJ;}(cciU?RuKv2zzD)0wOtD`U^A*Ji)61lO#{m{M} z-u)sj3Uq{#y!*B}8=>-dn*HhZ+HGa6`_^+6#x#8v+4ifxq%lD{dEYa;iR<@3iXvf}uC?g! z4s65Pq9NO8`}$p1Uw^T1x$NUL$q2@sv#f(LO2+B;@u-JkT^7)lm<@nSr4xvmQGvD*%fi1N(JM&SKu91;CJGyxj-nZAf5?6{e4E&Rdx-foXv~S5 z{(P?(*aK>%%u9pXmp6Lyp^4_V+heTKGaF#MRz0ztjMV@{oJ7UefdTxJuF`+p#zX6U zNv=I_>;PP`$iJP(RKRG*r=I_P3j;b-#%_)_SBN?<`)&?ppech`@(fgQ|BGVrZ7CQY z7c(+7?7li)t47RjH#setEPGztajD?KDHY zSBciL99iPeVo_f?x-+96FJ-a)@*(b>F?{0NAqxSXRIH}s!OK*^541$U2w|L^(2ic6 z4tk05^~OJr2hZyAV-!0L%aYb6lR$5C=@|tHS*zWJ>aP-J6tgE#YnlbJ@*h8#;(SePE zOg7IkC<0ad^RrXQ>5L+S0LbR~`Pej2d)URbLH=(>w}?>lwoE7q%kqk!&(s_j<>%I) zEOV$Ji|ttyGn$6}1EB^nUZ_PUc2urJb4C3#yTWaV*0xf%IZvnbbr1> zHhJc*ylNG}x)j+xt#4y#vsi;z^ z?P1cFxPp_iddMHpa=%?uV6-wFy~-e^2r+X{!tu^)%QMM^eFj@5ZkHOj_nE{?CjbS9 zweSI`j*&k72g=9{7wp$gT0&k;*UZo9OY9gKDZ!n=#`ZNs;bf!k8MX_HU;A9w%wjr! zs)}j4?0x^EDdkYL{Z!uKMPf-C`Nt1=iyIq$fRGNA6S7Nx#0Ihz&+M@@BFf1p3Dr)~ zvJr7P8GNEHt_0sHLvvA&8=d_Z2P*$M_TSi|>(NY;cUPoS+68y0hHKL>crW$*f#X@v z>j}$3_(0CM;^)&AKJ2Ooiq2F3z^K8=EJN64NRBC9P`KJ}dL}qRm|5_7C7N;Lk+Uq7 z6t(tGsycqckaNscC2gH@&l5oe-$OUtKRX3%E3vyfXnb|JN8Pwx9H67n=)o$BjvsPX zz&vnV+eS^eio(Ra_s_@hGsI1q5@vocNPlK8bQvEP=hyjk#{NQW#^xs0qb5uPIs%ip zG;=wv^x}8|+?OBn2N2;AP74x+B|W~fu?}gZbY7I*()ePM#;(?}#mvvET9F zy;KMAPzTW$U{OcDj@HE@>|#~n#R{<`x584yXPc=oTc9-0d4xSBAW{%8s>+7&=f2Ct z=Oe7Lk@BaDQG6-#uD$Xd4>e)PBT?%Ae>b+33?S(o&vMge4CulbfraQtoO0QBj=Le6$aW-7Y5Wf0`|IK))S0|AFTe@{;GV+A;VW4MxA`-aMNx zpi6D$7bPtvzpt{D-Ly`S4Q$sK#1 zc)6@|#Dm`aH)*jzO{+iC#SaYOfyw>wJSj~ISr|eekzZ6HPrg&EIo>J@EUhJ>_cNnV zMrWUox}|$>10(O*r;-nDQz||v&DaRMLd*mV?*UoP}X{|Ec47|`hB^+{J31>&<=W+m>5qt z?1%_Y-6#J9t#n&0wfE~{mxd}M2%Nbj;$)BS zhALFa!iWLiF+m;QCyI*Z?t+_Fc=PI@pK=37 zmFdPxOzr)6D^&p_#;4;>UZ?HosKaU;vs57HH*nb@V=7UO7zZfy-gJA zX)D-k`Jl0Ind+|Qcw^}=L9Y6&Wa{_VA|k(+H^|;%q);G|)$G;8|79*V=QOq=dafkx|5(fIlxmP<6bpE16o8Jz#a7|49aCqCC z3Flc2*sv1#2g1DJ2m=3kV=R}GK=F9>b&h#f#CEYiH-9`72FaQ4EDwSeM&HBX2dC=p zhU3G{ht4beWnXd~4TjS`&B2p<=(QUt96XA+(4v!T8LpRe@kLrpfL1$rIq>rf}Y7@h`Gl@52D`e z^W4`JdFKR{x3k|ZTGdziF%beYz$yuD6m9lV=&5hj+mI`W z&hmK#&42lN>qm|gdViK%NVIcx2hH@{L>@{N;x+dnH6S-&Ak`gUDND9Q`6=JyYzfeV zZ?7EG4hR14siV!F%x6Z9l6hKaD+37?Ac?UfXdQ%uuE*bsOoO5h-#@ajOUDae#6efaMTsP)^<)c{QN@j~f4< zI_Lx~Le?qLq2c8&^H;Z2`8A2jqeu>J;BKZ?eiF7+TES0PDIDTbng=&=>fdq3`zoUV zl=Udp^2vpN1yZfAhsYnqZm84g+D)~Ikf?G4fDCU15WDD%#kL5dI~ftMeJ zRiN8$7Gt!d`>Xy&LKI>{Gk;*y3-~pF)uwujd>p(=_d$MbC3qHYssA=$-p)mo z_dYr6$TOYNQfMOUir8Q83qq7@)>=eEvSNQzhOE}*W4<^*9Bg-E#p8wE<`Z_= z4T&oR{}@%?ZW(KMl(a|QZLttxNG{8^Lm3KpdAlK;5?^fR vGb;o&p)yP2FU5aYM>)P&{|AdASMY(wkH+GNO!|Hq>#?aRYbjMIng{+53_2c| diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png index e10e5041b954b58c3cedf76616d6e84060cb3abb..7fb48fbdbdc0bd4f50cc75626397aa2f84c8cd76 100755 GIT binary patch literal 3521 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 L&isL?ck+J${YN>j literal 3447 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 delta 782 zcmV+p1M&RA2($)}Gk*f>Nkl_ni{jTHFvtN?@Kk_+{w!lchNC1okz(@d$gc!jP)qmOQ7Yu1Ud}#}?KAw&n zfxKWDGj)c_Q@3p7oDw%Wq}Fl}1Qkb{k-`p=5RpAio0Ew{tv;cXSJ{*WB<0GM0JTkg9l0bljvAah>kgO#NY*KW64crJ>f6uBk`j0C`w9Nb-g z{g>f}3xCjU?cI5P{pq)I<1tIXNB|BrIz&+<{eC}pZIX=)aG)f-RurOC-L0&>3D2bK z2T8(%E7$%YNjMDyE^*u}GSJKTs5dw+alFZ7rsf#&l_wO$_p(q2`w+(0$E&vTNLF^f`!`Df zq$-OE$}U^8IN9;~UHg9s5vgj534Bjt*Zyw>F*yL8eZP~t_7CtI5m}o(H{RtY00000 MNe4wvM6N<$f(7nt7ytkO From 86e821e48c58b0286d53bcf436253d17f33a5f3c Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Sun, 26 Dec 2021 23:00:52 +0300 Subject: [PATCH 2/3] Updated ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 67 ++++++++++++++++--- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5925e014d..791cc8d84 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -9,6 +9,10 @@ itemGroup.tabMissile=Ракеты и спутники NTM itemGroup.tabWeapon=Оружие и турели NTM itemGroup.tabConsumable=Расходные материалы и снаряжение NTM +achievement.acidizer.desc=уфф ай моя кожа +achievement.acidizer=Кислюка +achievement.assembly.desc=Подождика, уже час утра? +achievement.assembly=Завод расширяется achievement.sacrifice=Жертва achievement.sacrifice.desc=Встреться лицом к лицу с огнём и выживи. achievement.impossible=Буквально невозможно @@ -39,16 +43,6 @@ achievement.radPoison=Ура, Радиация! achievement.radPoison.desc=Испытайте последствия радиационного отравления. achievement.radDeath=Ой, Радиация! achievement.radDeath.desc=Мария Кюри изобрела теорию радиоактивности, лечение радиоактивности и умирание от радиоактивности. -achievement.metalworks=Металлоконструкция -achievement.metalworks.desc=Бобмазон уровень 1 (Доменная печь) -achievement.assembly=Производство -achievement.assembly.desc=Бобмазон уровень 2 (Сборочный Станок) -achievement.chemistry=Химия -achievement.chemistry.desc=Бобмазон уровень 3 (Бетонные кирпичи) -achievement.oil=Нефть -achievement.oil.desc=Бобмазон уровень 4 (Электрический бойлер) -achievement.nuclear=Атомная Наука -achievement.nuclear.desc=Бобмазон уровень 5 (Урановое топливо) achievement.hidden=Скрытый Каталог achievement.hidden.desc=Убейте зараженного крипера падающим товарным вагоном achievement.horizonsStart=Апогей @@ -101,6 +95,52 @@ achievement.psycheSuperego.desc="...Но заглянуть внутрь, что achievement.psycheSuperego=Суперэго achievement.warpDrive.desc="Мне нравится мечтать, да" achievement.warpDrive=Полёт на ковре-самолёте +achievement.breeding.desc=Благодарю вас, да благословит вас Бог, и да благословит бог Соединенные Штаты Америки. +achievement.breeding=Иронично +achievement.bismuth.desc=Помните как люди спорили об этом месяц? Я помню. +achievement.bismuth=Висмут +achievement.blastFurnace.desc=Они разобрали затонувший дредноут для "Эксплорера-1". +achievement.blastFurnace=Железо и уголь +achievement.burnerPress.desc=Давление давит и на меня, и на тебя +achievement.burnerPress=Под давлением +achievement.centrifuge.desc=центробежная сила это фейк не @ меня +achievement.centrifuge=Центростремительная сила +achievement.chemplant.desc=Теперь ты думаешь химикатами! +achievement.chemplant=Завод расширяется: Часть 2 +achievement.chicagoPile.desc="Как там местные жители?" / "Очень дружелюбные". +achievement.chicagoPile=Мореплаватель высадился в Новом Свете +achievement.concrete.desc=Любимчик Большевиков. +achievement.concrete=Старый проверенный +achievement.desh.desc="Тогда давайте, вы все. Места, куда можно пойти!" +achievement.desh=Леверье +achievement.fusion.desc=Танец дейтронов, тритонов и энергии. +achievement.fusion=Синтез +achievement.gasCent.desc=Необогащенный уран ненавидит его! +achievement.gasCent=Стиль Молнии +achievement.manhattan.desc=8:15; 6 августа, 1945 год +achievement.manhattan=Проект Манхэттен +achievement.polymer.desc=Восхитительный, восхитительный микропластик. +achievement.polymer=Тефлон +achievement.RBMKBoom.desc=Какова цена лжи? +achievement.RBMKBoom=15,000. +achievement.RBMK.desc=Он бредит, отведите его в лазарет. +achievement.RBMK=3.6 Рентген? +achievement.redBalloons.desc="Это то, чего мы ждали. Вот она, ребята, война." +achievement.redBalloons=99 воздушных шариков +achievement.schrab.desc=Как бы то ни было, я бы не стал смотреть на это слишком долго. +achievement.schrab=Остров стабильности +achievement.SILEX.desc=Это круче, чем кажется, я обещаю. +achievement.SILEX=Лазерное разделение изотопов +achievement.tantalum.desc=Неуловимый, но всегда необходимый элемент. +achievement.tantalum="Тантал" +achievement.technetium.desc=Это целебно, это целебно! +achievement.technetium=Большой Человек, Человек-Свинья +achievement.watzBoom.desc=В следующий раз осушите свой септик. +achievement.watzBoom=Отвратительно +achievement.watz.desc=Поля Фолквангра также присутствуют +achievement.watz=Сила Е-126 +achievement.ZIRNOXBoom.desc=cope, seethe, mald +achievement.ZIRNOXBoom=ЦИРНОКС potion.hbm_taint=Порча potion.hbm_mutation=Заражённое порчей сердце @@ -746,6 +786,7 @@ geiger.envRad=Общее радиационное заражение среды: geiger.playerRad=Уровень радиоактивного заражения игрока: geiger.playerRes=Радиационная защита игрока: geiger.title=СЧЁТЧИК ГЕЙГЕРА +geiger.title.dosimeter=ДОЗИМЕТР hadron.analysis=Анализ... hadron.buttonOn=Камера анализа (если есть) включена @@ -1682,6 +1723,9 @@ item.ingot_fiberglass.name=Стекловолокно item.ingot_asbestos.name=Асбестовый лист item.solid_fuel.name=Твердое топливо +item.solid_fuel_presto.name=Топливные полена +item.solid_fuel_presto_triplet.name=Сжатые топливные полена +item.stick_dynamite.name=Динамитная шашка item.rocket_fuel.name=Твердое топливо (Ракетное) item.coke.name=Коксовый уголь item.lignite.name=Бурый уголь @@ -2343,6 +2387,7 @@ item.upgrade_centrifuge.name=Улучшение "Центрифуга" item.upgrade_crystallizer.name=Улучшение "Кристаллизатор" item.upgrade_nullifier.name=Улучшение "Уничтожитель мусора" item.upgrade_screm.name=Улучшение "Кричащий учёный" +item.upgrade_gc_speed.name=Улучшение "Разгон газовой центрифуги" item.fusion_core.name=Ядерный блок item.energy_core.name=Импровизированный энергоблок @@ -3158,6 +3203,7 @@ item.ammo_fireext_sand.name=Бак с песком для огнетушител item.cordite.name=Кордит item.ballistite.name=Баллистит +item.ball_dynamite.name=Динамит item.plate_kevlar.name=Кевларо-керамический состав item.weaponized_starblaster_cell.name=§cСмонтированная энергетическая ячейка Звездного бластера§r @@ -4132,6 +4178,7 @@ item.oil_detector.bullseye=Нефтяной резервуар прямо сни item.oil_detector.detected=Поблизости обнаружен резервуар нефти. item.oil_detector.noOil=Нефти не обнаружено. item.geiger_counter.name=Ручной счетчик Гейгера +item.dosimeter.name=Дозиметр item.digamma_diagnostic.name=Диагностика дигаммы tile.geiger.name=Счетчик Гейгера tile.glass_polonium.name=Полониевое стекло From 2aaa426feb0263b7b73f49845965666fdb19811f Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 26 Dec 2021 22:05:44 +0100 Subject: [PATCH 3/3] fixed batteries not disconnecting, acidizer output stacks --- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../machine/TileEntityMachineBattery.java | 11 +++++++++-- .../machine/TileEntityMachineCrystallizer.java | 2 +- .../tileentity/machine/TileEntityMachineFENSU.java | 13 ++++++++++--- src/main/resources/mcmod.info | 2 +- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 9d70d2aef..9149cf183 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4088)"; + public static final String VERSION = "1.0.27 BETA (4095)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBattery.java index ab0e2e4dc..0d2340897 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBattery.java @@ -217,8 +217,15 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I if(te instanceof IEnergyConductor) { IEnergyConductor con = (IEnergyConductor) te; - if(con.getPowerNet() != null && !con.getPowerNet().isSubscribed(this)) - con.getPowerNet().subscribe(this); + if(con.getPowerNet() != null) { + if(mode == 1 || mode == 2) { + if(con.getPowerNet().isSubscribed(this)) { + con.getPowerNet().unsubscribe(this); + } + } else if(!con.getPowerNet().isSubscribed(this)) { + con.getPowerNet().subscribe(this); + } + } } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index f2d2d61b0..3248d4d92 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -160,7 +160,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme return false; //Or is the output slot already full? - if(slots[2] != null && slots[2].stackSize >= slots[2].getMaxStackSize()) + if(slots[2] != null && slots[2].stackSize + result.stackSize > slots[2].getMaxStackSize()) return false; return true; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFENSU.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFENSU.java index 3c35edc82..c62c4bd95 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFENSU.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFENSU.java @@ -77,9 +77,16 @@ public class TileEntityMachineFENSU extends TileEntityMachineBattery { if(te instanceof IEnergyConductor) { IEnergyConductor con = (IEnergyConductor) te; - - if(con.getPowerNet() != null && !con.getPowerNet().isSubscribed(this)) - con.getPowerNet().subscribe(this); + + if(con.getPowerNet() != null) { + if(mode == 1 || mode == 2) { + if(con.getPowerNet().isSubscribed(this)) { + con.getPowerNet().unsubscribe(this); + } + } else if(!con.getPowerNet().isSubscribed(this)) { + con.getPowerNet().subscribe(this); + } + } } } diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 5e5ade27e..0c3c83c32 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "hbm", "name": "Hbm's Nuclear Tech", "description": "A mod that adds weapons, nuclear themed stuff and machines", - "version":"1.0.27_X4088", + "version":"1.0.27_X4095", "mcversion": "1.7.10", "url": "", "updateUrl": "",