From 3bdd7b4c94b05e9c24f3f0b0052ee147930719d4 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 27 Nov 2025 10:51:48 +0100 Subject: [PATCH] evil mechanism --- .../handler/nei/NEIGenericRecipeHandler.java | 4 +- .../hbm/handler/nei/PrecAssRecipeHandler.java | 13 +++ .../hbm/inventory/recipes/PrecAssRecipes.java | 4 +- .../recipes/loader/GenericRecipes.java | 20 +++- .../com/hbm/items/machine/ItemBlueprints.java | 9 +- src/main/java/com/hbm/main/NEIRegistry.java | 15 +-- .../hbm/render/tileentity/RenderPrecAss.java | 11 +- .../TileEntityMachineAssemblyMachine.java | 15 +-- .../machine/TileEntityMachinePrecAss.java | 105 +++++++++++++----- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/items/blueprints_528.png | Bin 0 -> 344 bytes 12 files changed, 138 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/hbm/handler/nei/PrecAssRecipeHandler.java create mode 100644 src/main/resources/assets/hbm/textures/items/blueprints_528.png diff --git a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java index becbbad76..843381b59 100644 --- a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java @@ -110,12 +110,12 @@ public abstract class NEIGenericRecipeHandler extends TemplateRecipeHandler impl } @Override public List getIngredients() { return getCycledIngredients(cycleticks / 20, Arrays.asList(this.input)); } - @Override public PositionedStack getResult() { return this.output[0]; } + @Override public PositionedStack getResult() { return null; } @Override public List getOtherStacks() { List other = new ArrayList(); - for(int i = 1; i < this.output.length; i++) other.add(this.output[i]); + for(int i = 0; i < this.output.length; i++) other.add(this.output[i]); other.add(this.machine); if(this.template != null) other.add(this.template); return getCycledIngredients(cycleticks / 20, other); diff --git a/src/main/java/com/hbm/handler/nei/PrecAssRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PrecAssRecipeHandler.java new file mode 100644 index 000000000..40b1c39d0 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PrecAssRecipeHandler.java @@ -0,0 +1,13 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.PrecAssRecipes; + +public class PrecAssRecipeHandler extends NEIGenericRecipeHandler { + + public PrecAssRecipeHandler() { + super(ModBlocks.machine_precass.getLocalizedName(), PrecAssRecipes.INSTANCE, ModBlocks.machine_precass); + } + + @Override public String getRecipeID() { return "ntmPrecAss"; } +} diff --git a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java index 815d4aed9..2dbf86f83 100644 --- a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java @@ -30,7 +30,7 @@ public class PrecAssRecipes extends GenericRecipes { @Override public void registerDefaults() { - + registerPair(new GenericRecipe("precass.controller").setup(400, 15_000L) .inputItems(new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CHIP), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CAPACITOR), @@ -42,6 +42,7 @@ public class PrecAssRecipes extends GenericRecipes { DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 10, 25); } + /** Registers a generic pair of faulty product and recycling of broken items. */ public void registerPair(GenericRecipe recipe, ItemStack output, int chance, int reclaim) { recipe.outputItems(new ChanceOutputMulti( new ChanceOutput(output, chance), @@ -56,6 +57,7 @@ public class PrecAssRecipes extends GenericRecipes { for(int i = 0; i < recycle.length; i++) { ItemStack stack = recipe.inputItem[i].extractForNEI().get(0).copy(); int stackSize = (int) (recipe.inputItem[i].stacksize * fReclaim); + // if the resulting stack size is >= 1, use that, otherwise use the original stack size but a chance output percentage if(stackSize > 0) { stack.stackSize = stackSize; recycle[i] = new ChanceOutput(stack); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 5c2b59400..879669229 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -12,6 +12,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.util.ItemStackUtil; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -38,6 +39,8 @@ public abstract class GenericRecipes extends Serializab public static final String POOL_PREFIX_DISCOVER = "discover."; /** Secret recipes, self-explantory. Why even have this comment? */ public static final String POOL_PREFIX_SECRET = "secret."; + /** 528 greyprints */ + public static final String POOL_PREFIX_528 = "528."; public List recipeOrderedList = new ArrayList(); public HashMap recipeNameMap = new HashMap(); @@ -235,13 +238,14 @@ public abstract class GenericRecipes extends Serializab @Override public ItemStack collapse() { - if(this.chance >= 1F) return getSingle().copy(); - return RNG.nextFloat() <= chance ? getSingle().copy() : null; + if(this.chance >= 1F) return getSingle(); + return RNG.nextFloat() <= chance ? getSingle() : null; } - @Override public ItemStack getSingle() { return this.stack; } + @Override public ItemStack getSingle() { return this.stack.copy(); } @Override public boolean possibleMultiOutput() { return false; } - @Override public ItemStack[] getAllPossibilities() { return new ItemStack[] {getSingle()}; } + /** For NEI, includes tooltip labels */ + @Override public ItemStack[] getAllPossibilities() { return new ItemStack[] {this.chance >= 1F ? getSingle() : ItemStackUtil.addTooltipToStack(getSingle(), EnumChatFormatting.RED + "" + (int)(this.chance * 1000) / 10F + "%")}; } @Override public void serialize(JsonWriter writer) throws IOException { @@ -297,7 +301,13 @@ public abstract class GenericRecipes extends Serializab @Override public ItemStack[] getAllPossibilities() { ItemStack[] outputs = new ItemStack[pool.size()]; - for(int i = 0; i < outputs.length; i++) outputs[i] = pool.get(i).getAllPossibilities()[0]; + int totalWeight = WeightedRandom.getTotalWeight(pool); + for(int i = 0; i < outputs.length; i++) { + ChanceOutput out = pool.get(i); + float chance = (float) out.itemWeight / (float) totalWeight; + outputs[i] = chance >= 1 ? out.getAllPossibilities()[0] : + ItemStackUtil.addTooltipToStack(out.getAllPossibilities()[0], EnumChatFormatting.RED + "" + (int)(chance * 1000) / 10F + "%"); + } return outputs; } diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index 13254d6de..fc6c960ac 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -24,6 +24,7 @@ public class ItemBlueprints extends Item { @SideOnly(Side.CLIENT) protected IIcon iconDiscover; @SideOnly(Side.CLIENT) protected IIcon iconSecret; + @SideOnly(Side.CLIENT) protected IIcon icon528; @Override @SideOnly(Side.CLIENT) @@ -31,6 +32,7 @@ public class ItemBlueprints extends Item { super.registerIcons(reg); this.iconDiscover = reg.registerIcon(this.getIconString() + "_discover"); this.iconSecret = reg.registerIcon(this.getIconString() + "_secret"); + this.icon528 = reg.registerIcon(this.getIconString() + "_528"); } @Override @@ -45,11 +47,12 @@ public class ItemBlueprints extends Item { if(stack.hasTagCompound()) { String poolName = stack.stackTagCompound.getString("pool"); if(poolName == null) return this.itemIcon; - if(poolName.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) return this.iconDiscover; - if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return this.iconSecret; + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) return this.iconDiscover; // beige + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return this.iconSecret; // black + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_528)) return this.icon528; // grey } - return this.itemIcon; + return this.itemIcon; // blue } @Override diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 31671e8df..682d83f00 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -17,21 +17,25 @@ public class NEIRegistry { handlers.add(new AnvilRecipeHandler()); handlers.add(new SmithingRecipeHandler()); + handlers.add(new PressRecipeHandler()); handlers.add(new AlloyFurnaceRecipeHandler()); handlers.add(new ShredderRecipeHandler()); - handlers.add(new PressRecipeHandler()); + handlers.add(new CrucibleSmeltingHandler()); + handlers.add(new CrucibleAlloyingHandler()); + handlers.add(new CrucibleCastingHandler()); + handlers.add(new AssemblyMachineRecipeHandler()); + handlers.add(new PrecAssRecipeHandler()); + handlers.add(new ChemicalPlantRecipeHandler()); + handlers.add(new RefineryRecipeHandler()); handlers.add(new CentrifugeRecipeHandler()); handlers.add(new GasCentrifugeRecipeHandler()); handlers.add(new BreederRecipeHandler()); handlers.add(new CyclotronRecipeHandler()); - handlers.add(new AssemblyMachineRecipeHandler()); - handlers.add(new RefineryRecipeHandler()); handlers.add(new VacuumRecipeHandler()); handlers.add(new CrackingHandler()); handlers.add(new RadiolysisRecipeHandler()); handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); - handlers.add(new ChemicalPlantRecipeHandler()); handlers.add(new PUREXRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); @@ -41,9 +45,6 @@ public class NEIRegistry { handlers.add(new FuelPoolHandler()); handlers.add(new RBMKRodDisassemblyHandler()); handlers.add(new RBMKWasteDecayHandler()); - handlers.add(new CrucibleSmeltingHandler()); - handlers.add(new CrucibleAlloyingHandler()); - handlers.add(new CrucibleCastingHandler()); handlers.add(new ToolingHandler()); handlers.add(new ConstructionHandler()); handlers.add(new SatelliteHandler()); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java b/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java index 4009fcfc5..de84b54a4 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java @@ -57,11 +57,6 @@ public class RenderPrecAss extends TileEntitySpecialRenderer implements IItemRen BobMathUtil.interp(assembler.prevArmAngles[1], assembler.armAngles[1], interp), BobMathUtil.interp(assembler.prevArmAngles[2], assembler.armAngles[2], interp) }; - - // test for null position - arm[0] = 45; - arm[1] = -30; - arm[2] = 45; GL11.glRotated(spin, 0, 1, 0); ResourceManager.assembly_machine.renderPart("Ring"); @@ -69,7 +64,7 @@ public class RenderPrecAss extends TileEntitySpecialRenderer implements IItemRen for(int i = 0; i < 4; i++) { renderArm(arm, BobMathUtil.interp(assembler.prevStrikers[i], assembler.strikers[i], interp)); - GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(-90, 0, 1, 0); } GL11.glPopMatrix(); @@ -156,9 +151,9 @@ public class RenderPrecAss extends TileEntitySpecialRenderer implements IItemRen ResourceManager.assembly_machine.renderPart("Frame"); ResourceManager.assembly_machine.renderPart("Ring"); ResourceManager.assembly_machine.renderPart("Ring2"); - double[] arm = new double[] {45, -15, -5}; + double[] arm = new double[] {45, -30, 45}; for(int i = 0; i < 4; i++) { - renderArm(arm, -0.75); + renderArm(arm, 0); GL11.glRotated(90, 0, 1, 0); } GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 4ac660a73..de65af07f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -169,18 +169,11 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl if(this.ringTarget > this.ring) this.ring += this.ringSpeed; if(this.ringTarget < this.ring) this.ring -= this.ringSpeed; if(this.ringTarget == this.ring) { - if(ringTarget >= 360) { - this.ringTarget -= 360D; - this.ring -= 360D; - this.prevRing -= 360D; - } - if(ringTarget <= -360) { - this.ringTarget += 360D; - this.ring += 360D; - this.prevRing += 360D; - } + double sub = ringTarget >= 360 ? -360D : 360D; + this.ringTarget += sub; + this.ring += sub; + this.prevRing += sub; this.ringDelay = 20 + worldObj.rand.nextInt(21); - //MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); } } else { if(this.ringDelay > 0) this.ringDelay--; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java index 67b436477..2aea274ca 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java @@ -37,6 +37,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; // horribly copy-pasted crap device @@ -64,6 +65,7 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I public double[] prevArmAngles = new double[] {45, -15, -5}; public double[] strikers = new double[4]; public double[] prevStrikers = new double[4]; + public boolean[] strikerDir = new boolean[4]; protected int strikerIndex; protected int strikerDelay; @@ -151,37 +153,94 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I this.prevRing = this.ring; - if(didProcess) { - if(this.ring != this.ringTarget) { - double ringDelta = Math.abs(this.ringTarget - this.ring); - if(ringDelta <= this.ringSpeed) this.ring = this.ringTarget; - if(this.ringTarget > this.ring) this.ring += this.ringSpeed; - if(this.ringTarget < this.ring) this.ring -= this.ringSpeed; - if(this.ringTarget == this.ring) { - if(ringTarget >= 360) { - this.ringTarget -= 360D; - this.ring -= 360D; - this.prevRing -= 360D; - } - if(ringTarget <= -360) { - this.ringTarget += 360D; - this.ring += 360D; - this.prevRing += 360D; - } - this.ringDelay = 20 + worldObj.rand.nextInt(21); - } + for(int i = 0; i < 4; i++) { + if(this.strikerDir[i]) { + this.strikers[i] = -0.75D; + this.strikerDir[i] = false; } else { + this.strikers[i] = MathHelper.clamp_double(this.strikers[i] + 0.5D, -0.75D, 0D); + } + } + + if(this.isInWorkingPosition(prevArmAngles) && !this.isInWorkingPosition(armAngles)) { + if(!this.muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F); + } + + if(this.ring != this.ringTarget) { + double ringDelta = Math.abs(this.ringTarget - this.ring); + if(ringDelta <= this.ringSpeed) this.ring = this.ringTarget; + if(this.ringTarget > this.ring) this.ring += this.ringSpeed; + if(this.ringTarget < this.ring) this.ring -= this.ringSpeed; + if(this.ringTarget == this.ring) { + double sub = ringTarget >= 360 ? -360D : 360D; + this.ringTarget += sub; + this.ring += sub; + this.prevRing += sub; + this.ringDelay = 100 + worldObj.rand.nextInt(21); + } + } + + if(didProcess) { + if(this.ring == this.ringTarget) { if(this.ringDelay > 0) this.ringDelay--; if(this.ringDelay <= 0) { - this.ringTarget += (worldObj.rand.nextDouble() * 2 - 1) * 135; + this.ringTarget += 45 * (worldObj.rand.nextBoolean() ? -1 : 1); this.ringSpeed = 10D + worldObj.rand.nextDouble() * 5D; if(!this.muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStart", this.getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F); } } + + if(!isInWorkingPosition(this.armAngles) && canArmsMove()) { + move(WORKING_POSITION); + } + + if(isInWorkingPosition(this.armAngles)) { + this.strikerDelay--; + if(this.strikerDelay <= 0) { + this.strikerDir[this.strikerIndex] = true; + this.strikerIndex = (this.strikerIndex + 1) % this.strikers.length; + this.strikerDelay = this.strikerIndex == 3 ? 10 : 2; + } + } + + } else { + for(int i = 0; i < 4; i++) this.strikerDir[i] = false; // set all strikers to retract + if(canArmsMove()) move(NULL_POSITION); } } } + public double[] NULL_POSITION = new double[] {45, -30, 45}; + public double[] WORKING_POSITION = new double[] {45, -15, -5}; + + private boolean canArmsMove() { + for(int i = 0; i < 4; i++) if(this.strikers[i] != 0) return false; + return true; + } + + private boolean isInWorkingPosition(double[] arms) { + for(int i = 0; i < 3; i++) if(arms[i] != WORKING_POSITION[i]) return false; + return true; + } + + private boolean move(double[] targetAngles) { + boolean didMove = false; + + for(int i = 0; i < armAngles.length; i++) { + if(armAngles[i] == targetAngles[i]) continue; + didMove = true; + double angle = armAngles[i]; + double target = targetAngles[i]; + double turn = 15D; + double delta = Math.abs(angle - target); + + if(delta <= turn) { armAngles[i] = targetAngles[i]; continue; } + if(angle < target) armAngles[i] += turn; + else armAngles[i] -= turn; + } + return !didMove; + } + @Override public AudioWrapper createAudioLoop() { return MainRegistry.proxy.getLoopedSound("hbm:block.motor", xCoord, yCoord, zCoord, 0.5F, 15F, 0.75F, 20); } @@ -233,10 +292,6 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I this.maxPower = buf.readLong(); this.didProcess = buf.readBoolean(); this.assemblerModule.deserialize(buf); - - if(wasProcessing && !didProcess) { - MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); - } } @Override @@ -324,7 +379,7 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I @Override public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { - info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembly_machine)); + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_precass)); if(type == UpgradeType.SPEED) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 360780ad4..89c00ef12 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -411,6 +411,7 @@ container.machineLargeTurbine=Industrielle Dampfturbine container.machineLiquefactor=Verflüssiger container.machineMixer=Industrieller Mixer container.machineOreSlopper=B.E.M. +container.machinePrecAss=Präzisions-Montagemaschine container.machinePUREX=PUREX container.machinePyroOven=Pyrolyseofen container.machineRefinery=Ölraffinerie @@ -4539,6 +4540,7 @@ tile.machine_nuke_furnace_on.name=Atombetriebener Ofen tile.machine_orbus.name=Schwerer Magnetischer Lagerbehälter tile.machine_ore_slopper.name=Bedrockerzmaschine tile.machine_powerrtg.name=PT-Isotopenzelle +tile.machine_precass.name=Präzisions-Montagemaschine tile.machine_press.name=Befeuerte Presse tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank tile.machine_pumpjack.name=Pferdekopfpumpe diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 08e145734..c9c45d46e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -816,6 +816,7 @@ container.machineLargeTurbine=Industrial Steam Turbine container.machineLiquefactor=Liquefactor container.machineMixer=Industrial Mixer container.machineOreSlopper=B.O.P. +container.machinePrecAss=Precision Assembly Machine container.machinePUREX=PUREX container.machinePyroOven=Pyrolysis Oven container.machineRefinery=Oil Refinery @@ -5806,6 +5807,7 @@ tile.machine_nuke_furnace_on.name=Nuclear Furnace tile.machine_orbus.name=Heavy Magnetic Storage Tank tile.machine_ore_slopper.name=Bedrock Ore Processor tile.machine_powerrtg.name=PT Isotope Cell +tile.machine_precass.name=Precision Assembly Machine tile.machine_press.name=Burner Press tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank tile.machine_pumpjack.name=Pumpjack diff --git a/src/main/resources/assets/hbm/textures/items/blueprints_528.png b/src/main/resources/assets/hbm/textures/items/blueprints_528.png new file mode 100644 index 0000000000000000000000000000000000000000..f981e5a69c8124c4787a637bd815b18449897c62 GIT binary patch literal 344 zcmV-e0jK_nP)4h+k$4Hc&RZzGg+itC2ukmu(Cd^cl|rJF zOr>&*&2Jf-dpFrVjWILlJLeDZM;V_kbX|AII!Thpee;vCEX&)T4tWrxC^~H02Eei` zeBVFM)^#P%^IMa1aZOZ80btuUmSvp)-}fI7L$4}{(=`1GV)lJc5CpeF0M~U89GD~