From 4da37b23619a356bf7e65a87946c7deea18d014e Mon Sep 17 00:00:00 2001 From: PetteriM1 <26197131+PetteriM1@users.noreply.github.com> Date: Sat, 21 Dec 2024 22:24:48 +0200 Subject: [PATCH] Fixes & updates (#2208) - Fixed players becoming invisible after sleeping - Fixed server hanging when reading corrupted Zlib input - Updated enchanted golden apple regeneration amplifier to match vanilla - Bed/anchor explosions can now create fire - Bamboo from world generator can generate taller - Conduits now give conduit power effect - Froglight now rotates correctly when placed - Using ThreadLocalRandom --- gradle/libs.versions.toml | 2 +- src/main/java/cn/nukkit/Player.java | 7 +- src/main/java/cn/nukkit/Server.java | 6 +- src/main/java/cn/nukkit/block/BlockBed.java | 1 + .../java/cn/nukkit/block/BlockBeetroot.java | 5 +- .../java/cn/nukkit/block/BlockCauldron.java | 2 +- .../cn/nukkit/block/BlockChorusFlower.java | 3 +- src/main/java/cn/nukkit/block/BlockCocoa.java | 4 +- .../java/cn/nukkit/block/BlockComposter.java | 5 +- .../java/cn/nukkit/block/BlockConduit.java | 15 +- src/main/java/cn/nukkit/block/BlockCrops.java | 7 +- .../java/cn/nukkit/block/BlockDeadBush.java | 5 +- .../java/cn/nukkit/block/BlockDispenser.java | 5 +- .../cn/nukkit/block/BlockDoublePlant.java | 5 +- .../java/cn/nukkit/block/BlockDragonEgg.java | 6 +- .../java/cn/nukkit/block/BlockDropper.java | 4 +- src/main/java/cn/nukkit/block/BlockFire.java | 21 +- .../java/cn/nukkit/block/BlockFlower.java | 12 +- .../java/cn/nukkit/block/BlockFroglight.java | 34 +++ .../java/cn/nukkit/block/BlockGlowstone.java | 7 +- .../java/cn/nukkit/block/BlockGravel.java | 5 +- .../java/cn/nukkit/block/BlockIceFrosted.java | 13 +- src/main/java/cn/nukkit/block/BlockLava.java | 9 +- .../java/cn/nukkit/block/BlockLeaves.java | 9 +- src/main/java/cn/nukkit/block/BlockMelon.java | 7 +- .../java/cn/nukkit/block/BlockNetherWart.java | 7 +- .../java/cn/nukkit/block/BlockOreCoal.java | 4 +- .../java/cn/nukkit/block/BlockOreDiamond.java | 4 +- .../java/cn/nukkit/block/BlockOreEmerald.java | 4 +- .../java/cn/nukkit/block/BlockOreLapis.java | 6 +- .../java/cn/nukkit/block/BlockOreQuartz.java | 4 +- .../cn/nukkit/block/BlockOreRedstone.java | 6 +- .../java/cn/nukkit/block/BlockPotato.java | 9 +- .../cn/nukkit/block/BlockRespawnAnchor.java | 1 + .../java/cn/nukkit/block/BlockSeaLantern.java | 5 +- .../java/cn/nukkit/block/BlockTallGrass.java | 5 +- .../cn/nukkit/block/BlockVinesNether.java | 2 +- src/main/java/cn/nukkit/block/BlockWheat.java | 5 +- .../cn/nukkit/blockentity/BlockEntity.java | 15 + .../nukkit/blockentity/BlockEntityBeacon.java | 30 +- .../blockentity/BlockEntityConduit.java | 261 ++++++++++++++++++ .../command/defaults/SummonCommand.java | 2 +- src/main/java/cn/nukkit/entity/Entity.java | 7 +- .../java/cn/nukkit/entity/EntityHuman.java | 2 - .../cn/nukkit/entity/EntityHumanType.java | 6 +- .../java/cn/nukkit/entity/EntityLiving.java | 2 +- .../cn/nukkit/entity/data/EntityMetadata.java | 4 + .../nukkit/entity/item/EntityFishingHook.java | 22 +- .../nukkit/entity/item/EntityMinecartTNT.java | 7 +- .../nukkit/entity/projectile/EntityArrow.java | 5 +- .../entity/weather/EntityLightning.java | 9 +- src/main/java/cn/nukkit/item/ItemBow.java | 7 +- .../java/cn/nukkit/item/ItemCrossbow.java | 5 +- .../java/cn/nukkit/item/ItemFireCharge.java | 5 +- .../java/cn/nukkit/item/ItemFlintSteel.java | 5 +- .../java/cn/nukkit/item/ItemPainting.java | 4 +- src/main/java/cn/nukkit/item/ItemTool.java | 5 +- .../nukkit/item/enchantment/Enchantment.java | 6 +- .../damage/EnchantmentDamageArthropods.java | 5 +- src/main/java/cn/nukkit/item/food/Food.java | 2 +- .../cn/nukkit/item/food/FoodEffective.java | 3 +- .../cn/nukkit/item/randomitem/Selector.java | 3 +- src/main/java/cn/nukkit/level/Explosion.java | 28 +- src/main/java/cn/nukkit/level/Level.java | 16 +- .../cn/nukkit/level/generator/Nether.java | 8 +- .../cn/nukkit/level/generator/Normal.java | 5 +- .../generator/object/ObjectTallGrass.java | 10 +- .../populator/impl/PopulatorBamboo.java | 2 +- .../populator/impl/PopulatorFlower.java | 4 +- src/main/java/cn/nukkit/metrics/Metrics.java | 9 +- .../cn/nukkit/network/query/QueryHandler.java | 6 +- .../java/cn/nukkit/utils/DummyBossBar.java | 4 +- src/main/java/cn/nukkit/utils/Utils.java | 13 +- .../java/cn/nukkit/utils/ZlibThreadLocal.java | 3 + src/main/resources/runtime_block_states.dat | Bin 54532 -> 54539 bytes .../resources/runtime_block_states_729.dat | Bin 54412 -> 54417 bytes 76 files changed, 589 insertions(+), 202 deletions(-) create mode 100644 src/main/java/cn/nukkit/blockentity/BlockEntityConduit.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3d423a2fc1b..2e4d2f248d4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ leveldbjni = { group = "net.daporkchop", name = "leveldb-mcpe-jni", version = "0 snappy = { group = "org.xerial.snappy", name = "snappy-java", version = "1.1.10.7" } jwt = { group = "com.nimbusds", name = "nimbus-jose-jwt", version = "9.23" } jopt-simple = { group = "net.sf.jopt-simple", name = "jopt-simple", version = "5.0.4" } -blockstateupdater = { group = "org.cloudburstmc", name = "block-state-updater", version = "1.21.30-SNAPSHOT" } +blockstateupdater = { group = "org.cloudburstmc", name = "block-state-updater", version = "1.21.40-SNAPSHOT" } lmbda = { group = "org.lanternpowered", name = "lmbda", version = "2.0.0" } noise = { group = "net.daporkchop.lib", name = "noise", version = "0.5.6-SNAPSHOT" } lombok = { group = "org.projectlombok", name = "lombok", version = "1.18.36" } diff --git a/src/main/java/cn/nukkit/Player.java b/src/main/java/cn/nukkit/Player.java index c1f4c95d933..f4fa122f805 100644 --- a/src/main/java/cn/nukkit/Player.java +++ b/src/main/java/cn/nukkit/Player.java @@ -94,6 +94,7 @@ import java.util.*; import java.util.Queue; import java.util.Map.Entry; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; @@ -1477,7 +1478,7 @@ public void stopSleep() { this.server.getPluginManager().callEvent(new PlayerBedLeaveEvent(this, this.level.getBlock(this.sleeping))); this.sleeping = null; - this.setDataProperty(new IntPositionEntityData(DATA_PLAYER_BED_POSITION, 0, 0, 0)); + this.removeDataProperty(DATA_PLAYER_BED_POSITION); this.setDataFlag(DATA_PLAYER_FLAGS, DATA_PLAYER_FLAG_SLEEP, false); this.level.sleepTicks = 0; @@ -2085,7 +2086,7 @@ protected void handleMovement(Vector3 newPos) { server.getPluginManager().callEvent(waterFrostEvent); if (!waterFrostEvent.isCancelled()) { level.setBlockAt((int) block.x, (int) block.y, (int) block.z, Block.ICE_FROSTED, 0); - level.scheduleUpdate(level.getBlock(this.chunk, block.getFloorX(), block.getFloorY(), block.getFloorZ(), true), Utils.random.nextInt(20, 40)); + level.scheduleUpdate(level.getBlock(this.chunk, block.getFloorX(), block.getFloorY(), block.getFloorZ(), true), ThreadLocalRandom.current().nextInt(20, 40)); } } } @@ -6938,7 +6939,7 @@ public boolean pickupEntity(Entity entity, boolean near) { } if (!itemsWithMending.isEmpty()) { - int itemToRepair = itemsWithMending.getInt(Utils.random.nextInt(itemsWithMending.size())); + int itemToRepair = itemsWithMending.getInt(ThreadLocalRandom.current().nextInt(itemsWithMending.size())); boolean isOffhand = itemToRepair == -1; Item repaired = isOffhand ? offhand : this.inventory.getItem(itemToRepair); diff --git a/src/main/java/cn/nukkit/Server.java b/src/main/java/cn/nukkit/Server.java index ce46f7893bd..81a10575dc4 100644 --- a/src/main/java/cn/nukkit/Server.java +++ b/src/main/java/cn/nukkit/Server.java @@ -94,6 +94,7 @@ import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; @@ -2111,7 +2112,7 @@ public boolean loadLevel(String name) { * @return generated */ public boolean generateLevel(String name) { - return this.generateLevel(name, Utils.random.nextLong()); + return this.generateLevel(name, ThreadLocalRandom.current().nextLong()); } /** @@ -2772,6 +2773,9 @@ private static void registerBlockEntities() { BlockEntity.registerBlockEntity(BlockEntity.BLAST_FURNACE, BlockEntityBlastFurnace.class); BlockEntity.registerBlockEntity(BlockEntity.SMOKER, BlockEntitySmoker.class); BlockEntity.registerBlockEntity(BlockEntity.BELL, BlockEntityBell.class); + BlockEntity.registerBlockEntity(BlockEntity.CONDUIT, BlockEntityConduit.class); + + // Persistent container, not on vanilla BlockEntity.registerBlockEntity(BlockEntity.PERSISTENT_CONTAINER, PersistentDataContainerBlockEntity.class); } diff --git a/src/main/java/cn/nukkit/block/BlockBed.java b/src/main/java/cn/nukkit/block/BlockBed.java index 213641230e5..973aee70931 100644 --- a/src/main/java/cn/nukkit/block/BlockBed.java +++ b/src/main/java/cn/nukkit/block/BlockBed.java @@ -75,6 +75,7 @@ public boolean onActivate(Item item, Player player) { } Explosion explosion = new Explosion(this.add(0.5, 0, 0.5), 5, this); + explosion.setFireSpawnChance(0.3333); explosion.explodeA(); explosion.explodeB(); } diff --git a/src/main/java/cn/nukkit/block/BlockBeetroot.java b/src/main/java/cn/nukkit/block/BlockBeetroot.java index 90ab0f6363f..10c01aad5bb 100644 --- a/src/main/java/cn/nukkit/block/BlockBeetroot.java +++ b/src/main/java/cn/nukkit/block/BlockBeetroot.java @@ -1,7 +1,8 @@ package cn.nukkit.block; import cn.nukkit.item.Item; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/11/22 by xtypr. @@ -36,7 +37,7 @@ public Item[] getDrops(Item item) { if (this.getDamage() >= 0x07) { return new Item[]{ Item.get(Item.BEETROOT, 0, 1), - Item.get(Item.BEETROOT_SEEDS, 0, Utils.random.nextInt(0, 4)) + Item.get(Item.BEETROOT_SEEDS, 0, ThreadLocalRandom.current().nextInt(0, 4)) }; } else { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockCauldron.java b/src/main/java/cn/nukkit/block/BlockCauldron.java index 9c8130b2453..82cf91137e0 100644 --- a/src/main/java/cn/nukkit/block/BlockCauldron.java +++ b/src/main/java/cn/nukkit/block/BlockCauldron.java @@ -434,7 +434,7 @@ public void clearWithFizz(BlockEntityCauldron cauldron) { cauldron.clearCustomColor(); this.level.setBlock(this, Block.get(CAULDRON_BLOCK), true); this.level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_FIZZ); - this.getLevel().addParticle(new SmokeParticle(add(Math.random(), 1.2, Math.random())), null, 8); + this.getLevel().addParticle(new SmokeParticle(add(ThreadLocalRandom.current().nextDouble(), 1.2, ThreadLocalRandom.current().nextDouble())), null, 8); } @Override diff --git a/src/main/java/cn/nukkit/block/BlockChorusFlower.java b/src/main/java/cn/nukkit/block/BlockChorusFlower.java index 68308fd6b19..0c8fd5a7e1a 100644 --- a/src/main/java/cn/nukkit/block/BlockChorusFlower.java +++ b/src/main/java/cn/nukkit/block/BlockChorusFlower.java @@ -131,7 +131,8 @@ public int onUpdate(int type) { } // Grow Horizontally } else if (!isFullyAged()) { - for (int i = 0; i < ThreadLocalRandom.current().nextInt(ground ? 5 : 4); i++) { + ThreadLocalRandom random = ThreadLocalRandom.current(); + for (int i = 0; i < random.nextInt(ground ? 5 : 4); i++) { BlockFace face = BlockFace.Plane.HORIZONTAL.random(); Block check = this.getSide(face); if (check.getId() == AIR && check.down().getId() == AIR && isHorizontalAirExcept(check, face.getOpposite())) { diff --git a/src/main/java/cn/nukkit/block/BlockCocoa.java b/src/main/java/cn/nukkit/block/BlockCocoa.java index 19d098d522e..e53a63d9df8 100644 --- a/src/main/java/cn/nukkit/block/BlockCocoa.java +++ b/src/main/java/cn/nukkit/block/BlockCocoa.java @@ -15,6 +15,8 @@ import cn.nukkit.utils.Faceable; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * Created by CreeperFace on 27. 10. 2016. */ @@ -111,7 +113,7 @@ public int onUpdate(int type) { return Level.BLOCK_UPDATE_NORMAL; } } else if (type == Level.BLOCK_UPDATE_RANDOM) { - if (Utils.random.nextInt(2) == 1) { + if (ThreadLocalRandom.current().nextInt(2) == 1) { if (this.getDamage() >> 2 < 2) { BlockCocoa block = (BlockCocoa) this.clone(); block.setDamage(block.getDamage() + 4); diff --git a/src/main/java/cn/nukkit/block/BlockComposter.java b/src/main/java/cn/nukkit/block/BlockComposter.java index 36e1febeee1..c74ed28fc2a 100644 --- a/src/main/java/cn/nukkit/block/BlockComposter.java +++ b/src/main/java/cn/nukkit/block/BlockComposter.java @@ -6,9 +6,10 @@ import cn.nukkit.item.*; import cn.nukkit.level.Sound; import cn.nukkit.utils.DyeColor; -import cn.nukkit.utils.Utils; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import java.util.concurrent.ThreadLocalRandom; + public class BlockComposter extends BlockTransparentMeta implements ItemID { private static final Int2IntOpenHashMap ITEMS = new Int2IntOpenHashMap(); @@ -109,7 +110,7 @@ public boolean onActivate(Item item, Player player) { return false; } - boolean success = Utils.random.nextInt(100) < chance; + boolean success = ThreadLocalRandom.current().nextInt(100) < chance; ComposterFillEvent event = new ComposterFillEvent(this, player, item, chance, success); this.level.getServer().getPluginManager().callEvent(event); diff --git a/src/main/java/cn/nukkit/block/BlockConduit.java b/src/main/java/cn/nukkit/block/BlockConduit.java index 41c3c4c7ce5..e84afd51a16 100644 --- a/src/main/java/cn/nukkit/block/BlockConduit.java +++ b/src/main/java/cn/nukkit/block/BlockConduit.java @@ -1,8 +1,12 @@ package cn.nukkit.block; +import cn.nukkit.Player; +import cn.nukkit.blockentity.BlockEntity; +import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; +import cn.nukkit.math.BlockFace; -public class BlockConduit extends BlockSolidMeta { +public class BlockConduit extends BlockTransparentMeta { public BlockConduit() { this(0); @@ -56,4 +60,13 @@ public WaterloggingType getWaterloggingType() { public boolean alwaysDropsOnExplosion() { return true; } + + @Override + public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { + if (this.getLevel().setBlock(this, this, true, true)) { + BlockEntity.createBlockEntity(BlockEntity.CONDUIT, this.getChunk(), BlockEntity.getDefaultCompound(this, BlockEntity.CONDUIT)); + return true; + } + return false; + } } diff --git a/src/main/java/cn/nukkit/block/BlockCrops.java b/src/main/java/cn/nukkit/block/BlockCrops.java index 028aaca5d27..2485567920a 100644 --- a/src/main/java/cn/nukkit/block/BlockCrops.java +++ b/src/main/java/cn/nukkit/block/BlockCrops.java @@ -9,7 +9,8 @@ import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -40,7 +41,7 @@ public boolean onActivate(Item item, Player player) { if (item.getId() == Item.DYE && item.getDamage() == ItemDye.BONE_MEAL) { if (this.getDamage() < 7) { BlockCrops block = (BlockCrops) this.clone(); - block.setDamage(block.getDamage() + Utils.random.nextInt(3) + 2); + block.setDamage(block.getDamage() + ThreadLocalRandom.current().nextInt(3) + 2); if (block.getDamage() > 7) { block.setDamage(7); } @@ -74,7 +75,7 @@ public int onUpdate(int type) { return Level.BLOCK_UPDATE_NORMAL; } } else if (type == Level.BLOCK_UPDATE_RANDOM) { - if (Utils.random.nextInt(2) == 1) { + if (ThreadLocalRandom.current().nextInt(2) == 1) { if (this.getDamage() < 0x07) { BlockCrops block = (BlockCrops) this.clone(); block.setDamage(block.getDamage() + 1); diff --git a/src/main/java/cn/nukkit/block/BlockDeadBush.java b/src/main/java/cn/nukkit/block/BlockDeadBush.java index 66d06ac0108..a9eb1883e26 100644 --- a/src/main/java/cn/nukkit/block/BlockDeadBush.java +++ b/src/main/java/cn/nukkit/block/BlockDeadBush.java @@ -5,7 +5,8 @@ import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/12/2 by xtypr. @@ -68,7 +69,7 @@ public Item[] getDrops(Item item) { }; } else { return new Item[]{ - Item.get(Item.STICK, 0, Utils.random.nextInt(3)) + Item.get(Item.STICK, 0, ThreadLocalRandom.current().nextInt(3)) }; } } diff --git a/src/main/java/cn/nukkit/block/BlockDispenser.java b/src/main/java/cn/nukkit/block/BlockDispenser.java index 0976b60b37b..f393d842189 100644 --- a/src/main/java/cn/nukkit/block/BlockDispenser.java +++ b/src/main/java/cn/nukkit/block/BlockDispenser.java @@ -15,9 +15,9 @@ import cn.nukkit.nbt.tag.StringTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.Faceable; -import cn.nukkit.utils.Utils; import java.util.Map.Entry; +import java.util.concurrent.ThreadLocalRandom; /** * Created by CreeperFace on 15.4.2017. @@ -163,10 +163,11 @@ public void dispense() { Item target = null; Inventory inv = ((BlockEntityDispenser) blockEntity).getInventory(); + ThreadLocalRandom random = ThreadLocalRandom.current(); for (Entry entry : inv.getContents().entrySet()) { Item item = entry.getValue(); - if (!item.isNull() && Utils.random.nextInt(r++) == 0) { + if (!item.isNull() && random.nextInt(r++) == 0) { target = item; slot = entry.getKey(); } diff --git a/src/main/java/cn/nukkit/block/BlockDoublePlant.java b/src/main/java/cn/nukkit/block/BlockDoublePlant.java index 9d0ce3ace01..2eb4ebe7169 100644 --- a/src/main/java/cn/nukkit/block/BlockDoublePlant.java +++ b/src/main/java/cn/nukkit/block/BlockDoublePlant.java @@ -8,7 +8,8 @@ import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/11/23 by xtypr. @@ -115,7 +116,7 @@ public Item[] getDrops(Item item) { switch (type) { case TALL_GRASS: case LARGE_FERN: - boolean dropSeeds = Utils.random.nextInt(10) == 0; + boolean dropSeeds = ThreadLocalRandom.current().nextInt(10) == 0; if (item.isShears()) { if (dropSeeds) { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockDragonEgg.java b/src/main/java/cn/nukkit/block/BlockDragonEgg.java index dc6465562c6..1588ad911f8 100644 --- a/src/main/java/cn/nukkit/block/BlockDragonEgg.java +++ b/src/main/java/cn/nukkit/block/BlockDragonEgg.java @@ -4,7 +4,8 @@ import cn.nukkit.level.Level; import cn.nukkit.network.protocol.LevelEventPacket; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; public class BlockDragonEgg extends BlockFallable { @@ -52,8 +53,9 @@ public int onUpdate(int type) { } public void teleport() { + ThreadLocalRandom random = ThreadLocalRandom.current(); for (int i = 0; i < 1000; ++i) { - Block to = this.getLevel().getBlock(this.add(Utils.random.nextInt(-16, 16), Utils.random.nextInt(-16, 16), Utils.random.nextInt(-16, 16))); + Block to = this.getLevel().getBlock(this.add(random.nextInt(-16, 16), random.nextInt(-16, 16), random.nextInt(-16, 16))); if (to.getId() == AIR) { BlockFromToEvent event = new BlockFromToEvent(this, to); this.level.getServer().getPluginManager().callEvent(event); diff --git a/src/main/java/cn/nukkit/block/BlockDropper.java b/src/main/java/cn/nukkit/block/BlockDropper.java index 07efd6f5e2b..fbe7d26d2e1 100644 --- a/src/main/java/cn/nukkit/block/BlockDropper.java +++ b/src/main/java/cn/nukkit/block/BlockDropper.java @@ -14,7 +14,6 @@ import cn.nukkit.nbt.tag.StringTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.Faceable; -import cn.nukkit.utils.Utils; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; @@ -138,10 +137,11 @@ public void dispense() { Item target = null; Inventory inv = ((BlockEntityDropper) blockEntity).getInventory(); + ThreadLocalRandom random = ThreadLocalRandom.current(); for (Map.Entry entry : inv.getContents().entrySet()) { Item item = entry.getValue(); - if (!item.isNull() && Utils.random.nextInt(r++) == 0) { + if (!item.isNull() && random.nextInt(r++) == 0) { target = item; slot = entry.getKey(); } diff --git a/src/main/java/cn/nukkit/block/BlockFire.java b/src/main/java/cn/nukkit/block/BlockFire.java index 0e151138555..07fe89f6899 100644 --- a/src/main/java/cn/nukkit/block/BlockFire.java +++ b/src/main/java/cn/nukkit/block/BlockFire.java @@ -22,7 +22,8 @@ import cn.nukkit.potion.Effect; import cn.nukkit.potion.Potion; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -138,21 +139,22 @@ public int onUpdate(int type) { } int meta = this.getDamage(); + ThreadLocalRandom random = ThreadLocalRandom.current(); if (meta < 15) { - int newMeta = meta + Utils.random.nextInt(3); + int newMeta = meta + random.nextInt(3); if (newMeta > 15) newMeta = 15; this.setDamage(newMeta); this.getLevel().setBlock((int) this.x, (int) this.y, (int) this.z, BlockLayer.NORMAL, this, false, true, false); // No need to send this to client } - this.getLevel().scheduleUpdate(this, this.tickRate() + Utils.random.nextInt(10)); + this.getLevel().scheduleUpdate(this, this.tickRate() + random.nextInt(10)); if (!forever && !this.canNeighborBurn()) { if (!this.isBlockTopFacingSurfaceSolid(this.down()) || meta > 3) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true); } - } else if (!forever && !(this.down().getBurnAbility() > 0) && meta == 15 && Utils.random.nextInt(4) == 0) { + } else if (!forever && !(this.down().getBurnAbility() > 0) && meta == 15 && random.nextInt(4) == 0) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true); } else { int o = 0; @@ -191,8 +193,8 @@ public int onUpdate(int type) { //TODO: decrease the t if the rainfall values are high - if (t > 0 && Utils.random.nextInt(k) <= t) { - int damage = meta + (Utils.random.nextInt(5) >> 2); + if (t > 0 && random.nextInt(k) <= t) { + int damage = meta + (random.nextInt(5) >> 2); if (damage > 15) { damage = 15; @@ -223,9 +225,10 @@ private void tryToCatchBlockOnFire(Block block, int bound, int damage) { return; } - if (Utils.random.nextInt(bound) < burnAbility) { - if (Utils.random.nextInt(damage + 10) < 5) { - int meta = damage + (Utils.random.nextInt(5) >> 2); + ThreadLocalRandom random = ThreadLocalRandom.current(); + if (random.nextInt(bound) < burnAbility) { + if (random.nextInt(damage + 10) < 5) { + int meta = damage + (random.nextInt(5) >> 2); if (meta > 15) { meta = 15; diff --git a/src/main/java/cn/nukkit/block/BlockFlower.java b/src/main/java/cn/nukkit/block/BlockFlower.java index 96ff0b6861f..0cbf9b38ea1 100644 --- a/src/main/java/cn/nukkit/block/BlockFlower.java +++ b/src/main/java/cn/nukkit/block/BlockFlower.java @@ -8,7 +8,8 @@ import cn.nukkit.math.BlockFace; import cn.nukkit.math.Vector3; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/11/23 by xtypr. @@ -108,14 +109,15 @@ public boolean onActivate(Item item, Player player) { this.level.addParticle(new BoneMealParticle(this)); + ThreadLocalRandom random = ThreadLocalRandom.current(); for (int i = 0; i < 8; i++) { Vector3 vec = this.add( - Utils.random.nextInt(-3, 4), - Utils.random.nextInt(-1, 2), - Utils.random.nextInt(-3, 4)); + random.nextInt(-3, 4), + random.nextInt(-1, 2), + random.nextInt(-3, 4)); if (vec.getY() >= level.getMinBlockY() && vec.getY() <= level.getMaxBlockY() && level.getBlock(vec).getId() == AIR && level.getBlock(vec.down()).getId() == GRASS) { - if ((this.getDamage() == POPPY || this.getDamage() == DANDELION) && Utils.random.nextInt(10) == 0) { + if ((this.getDamage() == POPPY || this.getDamage() == DANDELION) && random.nextInt(10) == 0) { this.level.setBlock(vec, this.getUncommonFlower(), true); } else { this.level.setBlock(vec, get(this.getId(), this.getDamage()), true); diff --git a/src/main/java/cn/nukkit/block/BlockFroglight.java b/src/main/java/cn/nukkit/block/BlockFroglight.java index 86a103bb176..9356d0e25f7 100644 --- a/src/main/java/cn/nukkit/block/BlockFroglight.java +++ b/src/main/java/cn/nukkit/block/BlockFroglight.java @@ -1,7 +1,9 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemBlock; +import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; public abstract class BlockFroglight extends BlockSolidMeta { @@ -34,4 +36,36 @@ public BlockColor getColor() { public Item toItem() { return new ItemBlock(Block.get(this.getId(), 0), 0); } + + @Override + public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { + this.setPillarAxis(face.getAxis()); + return this.getLevel().setBlock(block, this, true, true); + } + + public void setPillarAxis(BlockFace.Axis axis) { + switch (axis) { + case Y: + this.setDamage(0); + break; + case X: + this.setDamage(1); + break; + case Z: + this.setDamage(2); + break; + } + } + + public BlockFace.Axis getPillarAxis() { + switch (this.getDamage() % 3) { + case 2: + return BlockFace.Axis.Z; + case 1: + return BlockFace.Axis.X; + case 0: + default: + return BlockFace.Axis.Y; + } + } } diff --git a/src/main/java/cn/nukkit/block/BlockGlowstone.java b/src/main/java/cn/nukkit/block/BlockGlowstone.java index 99eebf56fed..2ae4e482b91 100644 --- a/src/main/java/cn/nukkit/block/BlockGlowstone.java +++ b/src/main/java/cn/nukkit/block/BlockGlowstone.java @@ -4,7 +4,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.math.MathHelper; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/12/6 by xtypr. @@ -43,11 +44,11 @@ public Item[] getDrops(Item item) { return new Item[]{this.toItem()}; } - int count = 2 + Utils.random.nextInt(3); + int count = 2 + ThreadLocalRandom.current().nextInt(3); Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - count += Utils.random.nextInt(fortune.getLevel() + 1); + count += ThreadLocalRandom.current().nextInt(fortune.getLevel() + 1); } return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockGravel.java b/src/main/java/cn/nukkit/block/BlockGravel.java index df8fab2ce86..2d7020d842e 100644 --- a/src/main/java/cn/nukkit/block/BlockGravel.java +++ b/src/main/java/cn/nukkit/block/BlockGravel.java @@ -8,7 +8,8 @@ import cn.nukkit.level.generator.object.ObjectTallGrass; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -43,7 +44,7 @@ public String getName() { @Override public Item[] getDrops(Item item) { - if (Utils.random.nextInt(9) == 0 && !item.hasEnchantment(Enchantment.ID_SILK_TOUCH)) { + if (ThreadLocalRandom.current().nextInt(9) == 0 && !item.hasEnchantment(Enchantment.ID_SILK_TOUCH)) { return new Item[]{ Item.get(Item.FLINT) }; diff --git a/src/main/java/cn/nukkit/block/BlockIceFrosted.java b/src/main/java/cn/nukkit/block/BlockIceFrosted.java index 45007fd067e..e2fefb28d95 100644 --- a/src/main/java/cn/nukkit/block/BlockIceFrosted.java +++ b/src/main/java/cn/nukkit/block/BlockIceFrosted.java @@ -5,7 +5,8 @@ import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; public class BlockIceFrosted extends BlockTransparentMeta { @@ -46,7 +47,7 @@ public double getFrictionFactor() { public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { boolean success = super.place(item, block, target, face, fx, fy, fz, player); if (success) { - level.scheduleUpdate(this, Utils.random.nextInt(20, 40)); + level.scheduleUpdate(this, ThreadLocalRandom.current().nextInt(20, 40)); } return success; } @@ -61,10 +62,10 @@ public boolean onBreak(Item item) { public int onUpdate(int type) { if (type == Level.BLOCK_UPDATE_SCHEDULED) { int time = level.getTime() % Level.TIME_FULL; - if (((time < 13184 || time > 22800) || this.getLevel().getBlockLightAt((int) this.x, (int) this.y, (int) this.z) >= 12) && (Utils.random.nextInt(3) == 0 || countNeighbors() < 4)) { + if (((time < 13184 || time > 22800) || this.getLevel().getBlockLightAt((int) this.x, (int) this.y, (int) this.z) >= 12) && (ThreadLocalRandom.current().nextInt(3) == 0 || countNeighbors() < 4)) { slightlyMelt(true); } else { - level.scheduleUpdate(this, Utils.random.nextInt(20, 40)); + level.scheduleUpdate(this, ThreadLocalRandom.current().nextInt(20, 40)); } } else if (type == Level.BLOCK_UPDATE_NORMAL) { if (countNeighbors() < 2) { @@ -72,7 +73,7 @@ public int onUpdate(int type) { } } else if (type == Level.BLOCK_UPDATE_RANDOM) { int time = level.getTime() % Level.TIME_FULL; - if (((time < 13184 || time > 22800) || this.getLevel().getBlockLightAt((int) this.x, (int) this.y, (int) this.z) >= 12) && (Utils.random.nextInt(3) == 0 || countNeighbors() < 4)) { + if (((time < 13184 || time > 22800) || this.getLevel().getBlockLightAt((int) this.x, (int) this.y, (int) this.z) >= 12) && (ThreadLocalRandom.current().nextInt(3) == 0 || countNeighbors() < 4)) { slightlyMelt(true); } } @@ -99,7 +100,7 @@ protected void slightlyMelt(boolean isSource) { if (age < 3) { setDamage(age + 1); level.setBlock(this, this, true); - level.scheduleUpdate(level.getBlock(this), Utils.random.nextInt(20, 40)); + level.scheduleUpdate(level.getBlock(this), ThreadLocalRandom.current().nextInt(20, 40)); } else { level.setBlock(this, get(WATER), true); if (isSource) { diff --git a/src/main/java/cn/nukkit/block/BlockLava.java b/src/main/java/cn/nukkit/block/BlockLava.java index c495bdc9cbc..98a77468db6 100644 --- a/src/main/java/cn/nukkit/block/BlockLava.java +++ b/src/main/java/cn/nukkit/block/BlockLava.java @@ -16,7 +16,8 @@ import cn.nukkit.math.Vector3; import cn.nukkit.potion.Effect; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -85,11 +86,11 @@ public int onUpdate(int type) { int result = super.onUpdate(type); if (type == Level.BLOCK_UPDATE_RANDOM && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK)) { - int i = Utils.random.nextInt(3); + int i = ThreadLocalRandom.current().nextInt(3); if (i > 0) { for (int k = 0; k < i; ++k) { - Vector3 v = this.add(Utils.random.nextInt(3) - 1, 1, Utils.random.nextInt(3) - 1); + Vector3 v = this.add(ThreadLocalRandom.current().nextInt(3) - 1, 1, ThreadLocalRandom.current().nextInt(3) - 1); Block block = this.getLevel().getBlock(v); if (block.getId() == AIR) { @@ -112,7 +113,7 @@ public int onUpdate(int type) { } } else { for (int k = 0; k < 3; ++k) { - Vector3 v = this.add(Utils.random.nextInt(3) - 1, 0, Utils.random.nextInt(3) - 1); + Vector3 v = this.add(ThreadLocalRandom.current().nextInt(3) - 1, 0, ThreadLocalRandom.current().nextInt(3) - 1); Block block = this.getLevel().getBlock(v); if (block.up().getId() == AIR && block.getBurnChance() > 0) { diff --git a/src/main/java/cn/nukkit/block/BlockLeaves.java b/src/main/java/cn/nukkit/block/BlockLeaves.java index 6b4acac3125..79cfe8784d0 100644 --- a/src/main/java/cn/nukkit/block/BlockLeaves.java +++ b/src/main/java/cn/nukkit/block/BlockLeaves.java @@ -13,6 +13,7 @@ import cn.nukkit.utils.Utils; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; /** * @author Angelic47 @@ -92,17 +93,17 @@ public Item[] getDrops(Item item) { if (item.hasEnchantment(Enchantment.ID_SILK_TOUCH)) { return new Item[]{this.toItem()}; } - if (this.canDropApple() && Utils.random.nextInt(200) == 0) { + if (this.canDropApple() && ThreadLocalRandom.current().nextInt(200) == 0) { return new Item[]{ Item.get(Item.APPLE) }; } - if (Utils.random.nextInt(20) == 0) { + if (ThreadLocalRandom.current().nextInt(20) == 0) { if (Utils.rand()) { return new Item[]{ - Item.get(Item.STICK, 0, Utils.random.nextInt(1, 2)) + Item.get(Item.STICK, 0, ThreadLocalRandom.current().nextInt(1, 2)) }; - } else if ((this.getDamage() & 0x03) != JUNGLE || Utils.random.nextInt(20) == 0) { + } else if ((this.getDamage() & 0x03) != JUNGLE || ThreadLocalRandom.current().nextInt(20) == 0) { return new Item[]{ this.getSapling() }; diff --git a/src/main/java/cn/nukkit/block/BlockMelon.java b/src/main/java/cn/nukkit/block/BlockMelon.java index 3e99161d1e1..99a39ca8cd9 100644 --- a/src/main/java/cn/nukkit/block/BlockMelon.java +++ b/src/main/java/cn/nukkit/block/BlockMelon.java @@ -4,7 +4,8 @@ import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/12/11 by Pub4Game. @@ -37,11 +38,11 @@ public Item[] getDrops(Item item) { return new Item[]{this.toItem()}; } - int count = 3 + Utils.random.nextInt(5); + int count = 3 + ThreadLocalRandom.current().nextInt(5); Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - count += Utils.random.nextInt(fortune.getLevel() + 1); + count += ThreadLocalRandom.current().nextInt(fortune.getLevel() + 1); } return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockNetherWart.java b/src/main/java/cn/nukkit/block/BlockNetherWart.java index 502cd7baad2..8d2fe45c354 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherWart.java +++ b/src/main/java/cn/nukkit/block/BlockNetherWart.java @@ -7,7 +7,8 @@ import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created by Leonidius20 on 22.03.17. @@ -40,7 +41,7 @@ public int onUpdate(int type) { return Level.BLOCK_UPDATE_NORMAL; } } else if (type == Level.BLOCK_UPDATE_RANDOM) { - if (Utils.random.nextInt(10) == 1) { + if (ThreadLocalRandom.current().nextInt(10) == 1) { if (this.getDamage() < 0x03) { Block block = this.clone(); block.setDamage(block.getDamage() + 1); @@ -80,7 +81,7 @@ public int getId() { public Item[] getDrops(Item item) { if (this.getDamage() == 0x03) { return new Item[]{ - Item.get(Item.NETHER_WART, 0, 2 + (int) (Math.random() * (3))) + Item.get(Item.NETHER_WART, 0, 2 + (int) (ThreadLocalRandom.current().nextDouble() * (3))) }; } else { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockOreCoal.java b/src/main/java/cn/nukkit/block/BlockOreCoal.java index 1f7216f1707..ed23b2c5905 100644 --- a/src/main/java/cn/nukkit/block/BlockOreCoal.java +++ b/src/main/java/cn/nukkit/block/BlockOreCoal.java @@ -5,6 +5,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * @author MagicDroidX * Nukkit Project @@ -46,7 +48,7 @@ public Item[] getDrops(Item item) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - int i = Utils.random.nextInt(fortune.getLevel() + 2) - 1; + int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1; if (i < 0) { i = 0; diff --git a/src/main/java/cn/nukkit/block/BlockOreDiamond.java b/src/main/java/cn/nukkit/block/BlockOreDiamond.java index 6d0d75d97cf..4e198064fc2 100644 --- a/src/main/java/cn/nukkit/block/BlockOreDiamond.java +++ b/src/main/java/cn/nukkit/block/BlockOreDiamond.java @@ -5,6 +5,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * @author MagicDroidX * Nukkit Project @@ -46,7 +48,7 @@ public Item[] getDrops(Item item) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - int i = Utils.random.nextInt(fortune.getLevel() + 2) - 1; + int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1; if (i < 0) { i = 0; diff --git a/src/main/java/cn/nukkit/block/BlockOreEmerald.java b/src/main/java/cn/nukkit/block/BlockOreEmerald.java index c9f1d3d3426..6caefdc75fa 100644 --- a/src/main/java/cn/nukkit/block/BlockOreEmerald.java +++ b/src/main/java/cn/nukkit/block/BlockOreEmerald.java @@ -5,6 +5,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * Created on 2015/12/1 by xtypr. * Package cn.nukkit.block in project Nukkit . @@ -46,7 +48,7 @@ public Item[] getDrops(Item item) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - int i = Utils.random.nextInt(fortune.getLevel() + 2) - 1; + int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1; if (i < 0) { i = 0; diff --git a/src/main/java/cn/nukkit/block/BlockOreLapis.java b/src/main/java/cn/nukkit/block/BlockOreLapis.java index 1883976ea20..2e825ffdee0 100644 --- a/src/main/java/cn/nukkit/block/BlockOreLapis.java +++ b/src/main/java/cn/nukkit/block/BlockOreLapis.java @@ -5,6 +5,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * @author MagicDroidX * Nukkit Project @@ -43,10 +45,10 @@ public Item[] getDrops(Item item) { return new Item[]{this.toItem()}; } - int count = 4 + Utils.random.nextInt(6); + int count = 4 + ThreadLocalRandom.current().nextInt(6); Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - int i = Utils.random.nextInt(fortune.getLevel() + 2) - 1; + int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1; if (i < 0) { i = 0; diff --git a/src/main/java/cn/nukkit/block/BlockOreQuartz.java b/src/main/java/cn/nukkit/block/BlockOreQuartz.java index ba52256307c..8c5d690b902 100644 --- a/src/main/java/cn/nukkit/block/BlockOreQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockOreQuartz.java @@ -5,6 +5,8 @@ import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * Created on 2015/12/26 by xtypr. * Package cn.nukkit.block in project Nukkit . @@ -46,7 +48,7 @@ public Item[] getDrops(Item item) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - int i = Utils.random.nextInt(fortune.getLevel() + 2) - 1; + int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1; if (i < 0) { i = 0; diff --git a/src/main/java/cn/nukkit/block/BlockOreRedstone.java b/src/main/java/cn/nukkit/block/BlockOreRedstone.java index a96f0cc371c..8fa98c4c454 100644 --- a/src/main/java/cn/nukkit/block/BlockOreRedstone.java +++ b/src/main/java/cn/nukkit/block/BlockOreRedstone.java @@ -6,6 +6,8 @@ import cn.nukkit.level.Level; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * @author MagicDroidX * Nukkit Project @@ -44,11 +46,11 @@ public Item[] getDrops(Item item) { return new Item[]{this.toItem()}; } - int count = Utils.random.nextInt(2) + 4; + int count = ThreadLocalRandom.current().nextInt(2) + 4; Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING); if (fortune != null && fortune.getLevel() >= 1) { - count += Utils.random.nextInt(fortune.getLevel() + 1); + count += ThreadLocalRandom.current().nextInt(fortune.getLevel() + 1); } return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockPotato.java b/src/main/java/cn/nukkit/block/BlockPotato.java index 65527080f70..0f792f85e23 100644 --- a/src/main/java/cn/nukkit/block/BlockPotato.java +++ b/src/main/java/cn/nukkit/block/BlockPotato.java @@ -1,7 +1,8 @@ package cn.nukkit.block; import cn.nukkit.item.Item; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created by Pub4Game on 15.01.2016. @@ -34,14 +35,14 @@ public Item toItem() { @Override public Item[] getDrops(Item item) { if (getDamage() >= 0x07) { - if (Utils.random.nextInt(100) < 2) { + if (ThreadLocalRandom.current().nextInt(100) < 2) { return new Item[]{ - Item.get(Item.POTATO, 0, Utils.random.nextInt(3) + 2), + Item.get(Item.POTATO, 0, ThreadLocalRandom.current().nextInt(3) + 2), Item.get(Item.POISONOUS_POTATO, 0, 1) }; } else { return new Item[]{ - Item.get(Item.POTATO, 0, Utils.random.nextInt(3) + 2) + Item.get(Item.POTATO, 0, ThreadLocalRandom.current().nextInt(3) + 2) }; } } else { diff --git a/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java b/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java index 430bedc6a76..2e338cb2a92 100644 --- a/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java +++ b/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java @@ -110,6 +110,7 @@ public boolean onActivate(Item item, Player player) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); Explosion explosion = new Explosion(this.add(0.5, 0, 0.5), 5, this); + explosion.setFireSpawnChance(0.3333); explosion.explodeA(); explosion.explodeB(); } diff --git a/src/main/java/cn/nukkit/block/BlockSeaLantern.java b/src/main/java/cn/nukkit/block/BlockSeaLantern.java index 463f7ad8141..a3c0fe4e882 100644 --- a/src/main/java/cn/nukkit/block/BlockSeaLantern.java +++ b/src/main/java/cn/nukkit/block/BlockSeaLantern.java @@ -3,7 +3,8 @@ import cn.nukkit.item.Item; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; public class BlockSeaLantern extends BlockTransparent { @@ -38,7 +39,7 @@ public Item[] getDrops(Item item) { return new Item[]{this.toItem()}; } return new Item[]{ - Item.get(Item.PRISMARINE_CRYSTALS, 0, Utils.random.nextInt(2, 4)) + Item.get(Item.PRISMARINE_CRYSTALS, 0, ThreadLocalRandom.current().nextInt(2, 4)) }; } diff --git a/src/main/java/cn/nukkit/block/BlockTallGrass.java b/src/main/java/cn/nukkit/block/BlockTallGrass.java index 05820c18327..fd1b2ab5d74 100644 --- a/src/main/java/cn/nukkit/block/BlockTallGrass.java +++ b/src/main/java/cn/nukkit/block/BlockTallGrass.java @@ -8,7 +8,8 @@ import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author Angelic47 @@ -130,7 +131,7 @@ public Item[] getDrops(Item item) { }; } - if (Utils.random.nextInt(10) == 0) { + if (ThreadLocalRandom.current().nextInt(10) == 0) { return new Item[]{ Item.get(Item.WHEAT_SEEDS) }; diff --git a/src/main/java/cn/nukkit/block/BlockVinesNether.java b/src/main/java/cn/nukkit/block/BlockVinesNether.java index 0a6adeea540..20dc1bb92b9 100644 --- a/src/main/java/cn/nukkit/block/BlockVinesNether.java +++ b/src/main/java/cn/nukkit/block/BlockVinesNether.java @@ -73,7 +73,7 @@ public void randomizeVineAge(boolean pseudorandom) { int age; ThreadLocalRandom random = ThreadLocalRandom.current(); - for(age = 0; random.nextDouble() < chance; ++age) { + for (age = 0; random.nextDouble() < chance; ++age) { chance *= 0.826D; } diff --git a/src/main/java/cn/nukkit/block/BlockWheat.java b/src/main/java/cn/nukkit/block/BlockWheat.java index d4cf81c5fc9..91fcb669d88 100644 --- a/src/main/java/cn/nukkit/block/BlockWheat.java +++ b/src/main/java/cn/nukkit/block/BlockWheat.java @@ -1,7 +1,8 @@ package cn.nukkit.block; import cn.nukkit.item.Item; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created on 2015/12/2 by xtypr. @@ -37,7 +38,7 @@ public Item[] getDrops(Item item) { if (this.getDamage() >= 0x07) { return new Item[]{ Item.get(Item.WHEAT), - Item.get(Item.WHEAT_SEEDS, 0, Utils.random.nextInt(0, 4)) + Item.get(Item.WHEAT_SEEDS, 0, ThreadLocalRandom.current().nextInt(0, 4)) }; } else { return new Item[]{ diff --git a/src/main/java/cn/nukkit/blockentity/BlockEntity.java b/src/main/java/cn/nukkit/blockentity/BlockEntity.java index a7433392530..8cc210197ff 100644 --- a/src/main/java/cn/nukkit/blockentity/BlockEntity.java +++ b/src/main/java/cn/nukkit/blockentity/BlockEntity.java @@ -53,6 +53,7 @@ public abstract class BlockEntity extends Position { public static final String LECTERN = "Lectern"; public static final String BLAST_FURNACE = "BlastFurnace"; public static final String SMOKER = "Smoker"; + public static final String CONDUIT = "Conduit"; // Not a vanilla block entity public static final String PERSISTENT_CONTAINER = "PersistentContainer"; @@ -266,4 +267,18 @@ public boolean equals(Object obj) { public boolean canSaveToStorage() { return true; } + + protected int getBlockIdIfLoaded(int bx, int by, int bz) { + if (by < this.level.getMinBlockY() || by > this.level.getMaxBlockY()) return 0; + int cx = bx >> 4; + int cz = bz >> 4; + FullChunk fullChunk = this.chunk; + if (fullChunk == null || cx != fullChunk.getX() || cz != fullChunk.getZ()) { + fullChunk = level.getChunkIfLoaded(cx, cz); + if (fullChunk == null) { + return -1; + } + } + return fullChunk.getBlockId(bx & 0x0f, by, bz & 0x0f); + } } \ No newline at end of file diff --git a/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java b/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java index 0b60b55f955..0ac55e845ff 100644 --- a/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java +++ b/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java @@ -21,8 +21,6 @@ */ public class BlockEntityBeacon extends BlockEntitySpawnable { - private long currentTick; - public BlockEntityBeacon(FullChunk chunk, CompoundTag nbt) { super(chunk, nbt); } @@ -75,7 +73,7 @@ public boolean onUpdate() { } //Only apply effects every 4 secs - if (currentTick++ % 80 != 0) { + if (level.getCurrentTick() % 80 != 0) { return true; } @@ -162,9 +160,9 @@ public boolean onUpdate() { private static final int POWER_LEVEL_MAX = 4; private boolean hasSkyAccess() { - int tileX = getFloorX(); - int tileY = getFloorY(); - int tileZ = getFloorZ(); + int tileX = (int) this.x; + int tileY = (int) this.y; + int tileZ = (int) this.z; //Check every block from our y coord to the top of the world for (int y = tileY + 1; y <= this.level.getMaxBlockY(); y++) { @@ -179,9 +177,9 @@ private boolean hasSkyAccess() { } private int calculatePowerLevel() { - int tileX = getFloorX(); - int tileY = getFloorY(); - int tileZ = getFloorZ(); + int tileX = (int) this.x; + int tileY = (int) this.y; + int tileZ = (int) this.z; //The power level that we're testing for for (int powerLevel = 1; powerLevel <= POWER_LEVEL_MAX; powerLevel++) { @@ -211,20 +209,6 @@ private int calculatePowerLevel() { return POWER_LEVEL_MAX; } - private int getBlockIdIfLoaded(int bx, int by, int bz) { - if (by < this.level.getMinBlockY() || by > this.level.getMaxBlockY()) return 0; - int cx = bx >> 4; - int cz = bz >> 4; - FullChunk fullChunk = this.chunk; - if (fullChunk == null || cx != fullChunk.getX() || cz != fullChunk.getZ()) { - fullChunk = level.getChunkIfLoaded(cx, cz); - if (fullChunk == null) { - return -1; - } - } - return fullChunk.getBlockId(bx & 0x0f, by, bz & 0x0f); - } - @Override public void setDirty() { super.setDirty(); diff --git a/src/main/java/cn/nukkit/blockentity/BlockEntityConduit.java b/src/main/java/cn/nukkit/blockentity/BlockEntityConduit.java new file mode 100644 index 00000000000..ecb975fc052 --- /dev/null +++ b/src/main/java/cn/nukkit/blockentity/BlockEntityConduit.java @@ -0,0 +1,261 @@ +package cn.nukkit.blockentity; + +import cn.nukkit.block.Block; +import cn.nukkit.block.BlockID; +import cn.nukkit.block.BlockLayer; +import cn.nukkit.entity.Entity; +import cn.nukkit.entity.mob.EntityMob; +import cn.nukkit.event.entity.EntityDamageByBlockEvent; +import cn.nukkit.event.entity.EntityDamageEvent; +import cn.nukkit.event.entity.EntityPotionEffectEvent; +import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.SimpleAxisAlignedBB; +import cn.nukkit.math.Vector2; +import cn.nukkit.nbt.tag.CompoundTag; +import cn.nukkit.network.protocol.LevelSoundEventPacket; +import cn.nukkit.potion.Effect; +import lombok.Getter; +import lombok.Setter; + +import java.util.Arrays; +import java.util.concurrent.ThreadLocalRandom; + +public class BlockEntityConduit extends BlockEntitySpawnable { + + @Getter + private boolean active; + @Setter + @Getter + private long target = -1; + private int frameBlocks; + + public BlockEntityConduit(FullChunk chunk, CompoundTag nbt) { + super(chunk, nbt); + } + + @Override + protected void initBlockEntity() { + this.scheduleUpdate(); + + super.initBlockEntity(); + } + + @Override + public boolean isBlockEntityValid() { + return level.getBlockIdAt(chunk, (int) x, (int) y, (int) z) == Block.CONDUIT; + } + + @Override + public CompoundTag getSpawnCompound() { + return new CompoundTag() + .putString("id", BlockEntity.CONDUIT) + .putInt("x", (int) this.x) + .putInt("y", (int) this.y) + .putInt("z", (int) this.z) + .putBoolean("Active", this.active) + .putLong("Target", this.target); + } + + @Override + public void setDirty() { + super.setDirty(); + this.spawnToAll(); + } + + // Adapted from https://github.com/PowerNukkit/PowerNukkit/blob/master/src/main/java/cn/nukkit/blockentity/BlockEntityConduit.java + + @Override + public boolean onUpdate() { + if (this.closed) { + return false; + } + + if (level.getCurrentTick() % 40 != 0) { + return true; + } + + boolean activeBefore = this.active; + this.active = checkStructure(); + + if (activeBefore != this.active) { + this.spawnToAll(); + + if (activeBefore && !this.active) { + this.target = -1; + + level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_CONDUIT_DEACTIVATE); + } else if (!activeBefore && this.active) { + level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_CONDUIT_ACTIVATE); + } + } + + if (this.active) { + attackMob(); + addEffectToPlayers(); + } + + return true; + } + + private void addEffectToPlayers() { + int radius = getEffectRadius(); + if (radius <= 0) { + return; + } + + Vector2 conduit = new Vector2(x, z); + int radiusSquared = radius * radius; + + level.getPlayers().values().stream() + .filter(this::canAffect) + .filter(p -> conduit.distanceSquared(p.x, p.z) <= radiusSquared) + .forEach(p -> p.addEffect(Effect.getEffect(Effect.CONDUIT_POWER).setDuration(260).setAmbient(true), EntityPotionEffectEvent.Cause.CONDUIT)); + } + + private void attackMob() { + int radius = getAttackRadius(); + if (radius <= 0) { + return; + } + + boolean updated = false; + + Entity targetEntity = level.getEntity(this.target); + if (targetEntity != null && !canAttack(targetEntity)) { + targetEntity = null; + this.target = -1; + updated = true; + } + + if (targetEntity == null) { + Entity[] mobs = Arrays.stream(level.getCollidingEntities(new SimpleAxisAlignedBB(x - radius, y - radius, z - radius, x + 1 + radius, y + 1 + radius, z + 1 + radius))) + .filter(this::canAttack) + .toArray(Entity[]::new); + + if (mobs.length == 0) { + if (updated) { + this.spawnToAll(); + } + return; + } + + targetEntity = mobs[ThreadLocalRandom.current().nextInt(mobs.length)]; + this.target = targetEntity.getId(); + updated = true; + } + + if (!targetEntity.attack(new EntityDamageByBlockEvent(this.getLevelBlock(), targetEntity, EntityDamageEvent.DamageCause.MAGIC, 4))) { + this.target = -1; + updated = true; + } + + if (updated) { + this.spawnToAll(); + } + } + + private boolean canAttack(Entity target) { + return target instanceof EntityMob && canAffect(target); + } + + private boolean canAffect(Entity target) { + return target.isInsideOfWater() || (level.isRaining() && target.canSeeSky()); + } + + private boolean checkWater() { + int tileX = (int) this.x; + int tileY = (int) this.y; + int tileZ = (int) this.z; + + for (int xx = -1; xx <= 1; xx++) { + for (int zz = -1; zz <= 1; zz++) { + for (int yy = -1; yy <= 1; yy++) { + Block block = level.getBlock(this.chunk, tileX + xx, tileY + yy, tileZ + zz, BlockLayer.NORMAL, false); + if (!Block.isWater(block.getId())) { + block = level.getBlock(this.chunk, tileX + xx, tileY + yy, tileZ + zz, BlockLayer.WATERLOGGED, false); + if (!Block.isWater(block.getId())) { + return false; + } + } + } + } + } + + return true; + } + + private int checkFrame() { + int tileX = (int) this.x; + int tileY = (int) this.y; + int tileZ = (int) this.z; + int frameBlocks = 0; + + for (int yy = -2; yy <= 2; yy++) { + if (yy == 0) { + for (int xx = -2; xx <= 2; xx++) { + for (int zz = -2; zz <= 2; zz++) { + if (Math.abs(zz) != 2 && Math.abs(xx) != 2) { + continue; + } + + if (getBlockIdIfLoaded(tileX + xx, tileY, tileZ + zz) == BlockID.PRISMARINE) { + frameBlocks++; + } + } + } + } else { + int absIY = Math.abs(yy); + + for (int xx = -2; xx <= 2; xx++) { + if (absIY != 2 && xx == 0) { + continue; + } + + if (absIY == 2 || Math.abs(xx) == 2) { + if (getBlockIdIfLoaded(tileX + xx, tileY + yy, tileZ) == BlockID.PRISMARINE) { + frameBlocks++; + } + } + } + + for (int zz = -2; zz <= 2; zz++) { + if (absIY != 2 && zz == 0) { + continue; + } + + if (absIY == 2 && zz != 0 || Math.abs(zz) == 2) { + if (getBlockIdIfLoaded(tileX, tileY + yy, tileZ + zz) == BlockID.PRISMARINE) { + frameBlocks++; + } + } + } + } + } + + return frameBlocks; + } + + private boolean checkStructure() { + if (!checkWater()) { + this.frameBlocks = 0; + return false; + } + + int frameBlocks = checkFrame(); + if (frameBlocks < 16) { + this.frameBlocks = 0; + return false; + } + + this.frameBlocks = frameBlocks; + return true; + } + + public int getEffectRadius() { + return (this.frameBlocks / 7) * 16; + } + + public int getAttackRadius() { + return this.frameBlocks >= 42 ? 8 : 0; + } +} diff --git a/src/main/java/cn/nukkit/command/defaults/SummonCommand.java b/src/main/java/cn/nukkit/command/defaults/SummonCommand.java index d596c44fa2b..b881b1f9b73 100644 --- a/src/main/java/cn/nukkit/command/defaults/SummonCommand.java +++ b/src/main/java/cn/nukkit/command/defaults/SummonCommand.java @@ -36,7 +36,7 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args) return true; } - if (args.length == 0 || (args.length == 1 && !(sender instanceof Player))) { + if (args.length == 0 || (args.length != 2 && !(sender instanceof Player))) { sender.sendMessage(new TranslationContainer("commands.generic.usage", this.usageMessage)); return false; } diff --git a/src/main/java/cn/nukkit/entity/Entity.java b/src/main/java/cn/nukkit/entity/Entity.java index a9e783bf427..4bdd46ff620 100644 --- a/src/main/java/cn/nukkit/entity/Entity.java +++ b/src/main/java/cn/nukkit/entity/Entity.java @@ -41,7 +41,6 @@ import cn.nukkit.potion.Effect; import cn.nukkit.utils.ChunkException; import cn.nukkit.utils.MainLogger; -import cn.nukkit.utils.Utils; import com.google.common.collect.Iterables; import java.lang.reflect.Constructor; @@ -1529,7 +1528,7 @@ protected boolean checkObstruction(double x, double y, double z) { direction = 5; } - double force = Utils.random.nextDouble() * 0.2 + 0.1; + double force = ThreadLocalRandom.current().nextDouble() * 0.2 + 0.1; if (direction == 0) { this.motionX = -force; @@ -2692,6 +2691,10 @@ public boolean setDataProperty(EntityData data, boolean send) { return false; } + protected boolean removeDataProperty(int id) { + return this.dataProperties.remove(id) != null; + } + protected boolean setDataPropertyAndSendOnlyToSelf(EntityData data) { if (data == null) { throw new IllegalArgumentException("setDataPropertyAndSendOnlyToSelf: EntityData must not be null"); diff --git a/src/main/java/cn/nukkit/entity/EntityHuman.java b/src/main/java/cn/nukkit/entity/EntityHuman.java index f6de2da1d52..09bccd3513c 100644 --- a/src/main/java/cn/nukkit/entity/EntityHuman.java +++ b/src/main/java/cn/nukkit/entity/EntityHuman.java @@ -1,7 +1,6 @@ package cn.nukkit.entity; import cn.nukkit.Player; -import cn.nukkit.entity.data.IntPositionEntityData; import cn.nukkit.entity.data.Skin; import cn.nukkit.event.entity.EntityDamageBlockedEvent; import cn.nukkit.event.entity.EntityDamageEvent; @@ -97,7 +96,6 @@ public void setSkin(Skin skin) { protected void initEntity() { this.setDataFlag(DATA_PLAYER_FLAGS, DATA_PLAYER_FLAG_SLEEP, false, false); this.setDataFlag(DATA_FLAGS, DATA_FLAG_GRAVITY, true, false); - this.setDataProperty(new IntPositionEntityData(DATA_PLAYER_BED_POSITION, 0, 0, 0), false); if (!(this instanceof Player)) { if (this.namedTag.contains("NameTag")) { diff --git a/src/main/java/cn/nukkit/entity/EntityHumanType.java b/src/main/java/cn/nukkit/entity/EntityHumanType.java index ab67441fbf5..cf3c19d2e51 100644 --- a/src/main/java/cn/nukkit/entity/EntityHumanType.java +++ b/src/main/java/cn/nukkit/entity/EntityHumanType.java @@ -16,10 +16,10 @@ import cn.nukkit.nbt.NBTIO; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.nbt.tag.ListTag; -import cn.nukkit.utils.Utils; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; public abstract class EntityHumanType extends EntityCreature implements InventoryHolder { @@ -169,7 +169,7 @@ public boolean attack(EntityDamageEvent source) { source.setDamage(-source.getFinalDamage() * armorPoints * 0.04f, EntityDamageEvent.DamageModifier.ARMOR); } - source.setDamage(-source.getFinalDamage() * Math.min(NukkitMath.ceilFloat(Math.min(epf, 25) * ((float) Utils.random.nextInt(50, 100) / 100)), 20) * 0.04f, + source.setDamage(-source.getFinalDamage() * Math.min(NukkitMath.ceilFloat(Math.min(epf, 25) * ((float) ThreadLocalRandom.current().nextInt(50, 100) / 100)), 20) * 0.04f, EntityDamageEvent.DamageModifier.ARMOR_ENCHANTMENTS); //source.setDamage(-Math.min(this.getAbsorption(), source.getFinalDamage()), EntityDamageEvent.DamageModifier.ABSORPTION); @@ -224,7 +224,7 @@ protected Item damageArmor(Item armor, Entity damager, float damage, boolean shi Enchantment durability = armor.getEnchantment(Enchantment.ID_DURABILITY); if (durability != null && durability.getLevel() > 0 - && (100 / (durability.getLevel() + 1)) <= Utils.random.nextInt(100)) { + && (100 / (durability.getLevel() + 1)) <= ThreadLocalRandom.current().nextInt(100)) { return armor; } diff --git a/src/main/java/cn/nukkit/entity/EntityLiving.java b/src/main/java/cn/nukkit/entity/EntityLiving.java index 8cd225563de..bc7dbddb046 100644 --- a/src/main/java/cn/nukkit/entity/EntityLiving.java +++ b/src/main/java/cn/nukkit/entity/EntityLiving.java @@ -332,7 +332,7 @@ public boolean entityBaseTick(int tickDiff) { this.resetFallDistance(); } - if (inWater && !this.hasEffect(Effect.WATER_BREATHING)) { + if (inWater && !this.hasEffect(Effect.WATER_BREATHING) && !this.hasEffect(Effect.CONDUIT_POWER)) { if (this instanceof EntitySwimming || this instanceof EntityDrowned || this instanceof EntitySkeletonHorse || this instanceof EntityIronGolem || (this instanceof Player && (((Player) this).isCreative() || ((Player) this).isSpectator()))) { this.setAirTicks(400); diff --git a/src/main/java/cn/nukkit/entity/data/EntityMetadata.java b/src/main/java/cn/nukkit/entity/data/EntityMetadata.java index bea49e0e10f..5b33e5a4e03 100644 --- a/src/main/java/cn/nukkit/entity/data/EntityMetadata.java +++ b/src/main/java/cn/nukkit/entity/data/EntityMetadata.java @@ -50,6 +50,10 @@ public EntityMetadata put(EntityData data) { return this; } + public EntityData remove(int id) { + return this.map.remove(id); + } + public int getByte(int id) { return (int) this.getOrDefault(id, new ByteEntityData(id, 0)).getData() & 0xff; } diff --git a/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java b/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java index 5f207eed56c..e6b91ba977a 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java +++ b/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java @@ -130,8 +130,8 @@ public boolean onUpdate(int currentTick) { --this.waitTimer; } if (this.waitTimer == 0) { - if (Utils.random.nextInt(100) < 90) { - this.attractTimer = (Utils.random.nextInt(40) + 20); + if (ThreadLocalRandom.current().nextInt(100) < 90) { + this.attractTimer = (ThreadLocalRandom.current().nextInt(40) + 20); this.spawnFish(); this.caught = false; this.attracted = true; @@ -141,7 +141,7 @@ public boolean onUpdate(int currentTick) { } } else if (!this.caught) { if (this.attractFish()) { - this.caughtTimer = (Utils.random.nextInt(20) + 30); + this.caughtTimer = (ThreadLocalRandom.current().nextInt(20) + 30); this.fishBites(); this.caught = true; } @@ -189,17 +189,17 @@ public void fishBites() { Server.broadcastPacket(viewers, teasePk); this.level.addParticle(new BubbleParticle(this.setComponents( - this.x + Utils.random.nextDouble() * 0.5 - 0.25, + this.x + ThreadLocalRandom.current().nextDouble() * 0.5 - 0.25, this.getWaterHeight(), - this.z + Utils.random.nextDouble() * 0.5 - 0.25 + this.z + ThreadLocalRandom.current().nextDouble() * 0.5 - 0.25 )), null, 5); } public void spawnFish() { this.fish = new Vector3( - this.x + (Utils.random.nextDouble() * 1.2 + 1) * (Utils.rand() ? -1 : 1), + this.x + (ThreadLocalRandom.current().nextDouble() * 1.2 + 1) * (Utils.rand() ? -1 : 1), this.getWaterHeight(), - this.z + (Utils.random.nextDouble() * 1.2 + 1) * (Utils.rand() ? -1 : 1) + this.z + (ThreadLocalRandom.current().nextDouble() * 1.2 + 1) * (Utils.rand() ? -1 : 1) ); } @@ -210,7 +210,7 @@ public boolean attractFish() { this.fish.y, this.fish.z + (this.z - this.fish.z) * multiply ); - if (Utils.random.nextInt(100) < 85) { + if (ThreadLocalRandom.current().nextInt(100) < 85) { this.level.addParticle(new WaterParticle(this.fish)); } double dist = Math.abs(Math.sqrt(this.x * this.x + this.z * this.z) - Math.sqrt(this.fish.x * this.fish.x + this.fish.z * this.fish.z)); @@ -232,7 +232,7 @@ public void reelLine() { if (!item.hasEnchantments()) { item = item.clone(); Enchantment enchantment = Enchantment.getEnchantment(Utils.rand(0, 35)); - if (Utils.random.nextDouble() < 0.3) { + if (ThreadLocalRandom.current().nextDouble() < 0.3) { enchantment.setLevel(Utils.rand(1, enchantment.getMaxLevel())); } item.addEnchantment(enchantment); @@ -241,13 +241,13 @@ public void reelLine() { if (Utils.rand(1, 3) == 2 && !item.hasEnchantments()) { item = item.clone(); Enchantment enchantment = Enchantment.getEnchantment(ROD_ENCHANTMENTS[Utils.rand(0, 4)]); - if (Utils.random.nextDouble() < 0.3) { + if (ThreadLocalRandom.current().nextDouble() < 0.3) { enchantment.setLevel(Utils.rand(1, enchantment.getMaxLevel())); } item.addEnchantment(enchantment); } } - int experience = Utils.random.nextInt(3) + 1; + int experience = ThreadLocalRandom.current().nextInt(3) + 1; Vector3 motion = player.subtract(this).multiply(0.1); motion.y += Math.sqrt(player.distance(this)) * 0.05; diff --git a/src/main/java/cn/nukkit/entity/item/EntityMinecartTNT.java b/src/main/java/cn/nukkit/entity/item/EntityMinecartTNT.java index 9aaac688a16..1e1840bb9a6 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityMinecartTNT.java +++ b/src/main/java/cn/nukkit/entity/item/EntityMinecartTNT.java @@ -16,7 +16,8 @@ import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.MinecartType; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author Adam Matthew [larryTheCoder] @@ -66,7 +67,7 @@ public boolean onUpdate(int currentTick) { if (isAlive() && fuse <= 0) { if (this.level.getGameRules().getBoolean(GameRule.TNT_EXPLODES)) { - this.explode(Utils.random.nextInt(5)); + this.explode(ThreadLocalRandom.current().nextInt(5)); } this.close(); return false; @@ -94,7 +95,7 @@ public void explode(double square) { root = 5.0D; } - EntityExplosionPrimeEvent event = new EntityExplosionPrimeEvent(this, (4.0D + Utils.random.nextDouble() * 1.5D * root)); + EntityExplosionPrimeEvent event = new EntityExplosionPrimeEvent(this, (4.0D + ThreadLocalRandom.current().nextDouble() * 1.5D * root)); server.getPluginManager().callEvent(event); if (event.isCancelled()) { return; diff --git a/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java b/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java index eb48e455a7e..6ba0ed4ec75 100644 --- a/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java +++ b/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java @@ -7,7 +7,8 @@ import cn.nukkit.math.Vector3; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -135,7 +136,7 @@ public int getResultDamage() { int base = NukkitMath.ceilDouble(Math.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ) * getDamage()); if (this.isCritical()) { - base += Utils.random.nextInt((base >> 1) + 2); + base += ThreadLocalRandom.current().nextInt((base >> 1) + 2); } if (this.isFromCrossbow) { diff --git a/src/main/java/cn/nukkit/entity/weather/EntityLightning.java b/src/main/java/cn/nukkit/entity/weather/EntityLightning.java index 88a3d9e4444..9a6fc1922ac 100644 --- a/src/main/java/cn/nukkit/entity/weather/EntityLightning.java +++ b/src/main/java/cn/nukkit/entity/weather/EntityLightning.java @@ -11,7 +11,8 @@ import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * Created by boybook on 2016/2/27. @@ -39,7 +40,7 @@ protected void initEntity() { super.initEntity(); this.state = 2; - this.liveTime = Utils.random.nextInt(3) + 1; + this.liveTime = ThreadLocalRandom.current().nextInt(3) + 1; if (isEffect && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK) && (this.server.getDifficulty() >= 2)) { Block block = this.level.getBlock(this.chunk, this.getFloorX(), this.getFloorY(), this.getFloorZ(), true); @@ -57,7 +58,7 @@ protected void initEntity() { if (!e.isCancelled()) { level.setBlock(fire, fire, true); - level.scheduleUpdate(fire, fire.tickRate() + Utils.random.nextInt(10)); + level.scheduleUpdate(fire, fire.tickRate() + ThreadLocalRandom.current().nextInt(10)); } } } @@ -105,7 +106,7 @@ public boolean onUpdate(int currentTick) { if (this.liveTime == 0) { this.close(); return false; - } else if (this.state < -Utils.random.nextInt(10)) { + } else if (this.state < -ThreadLocalRandom.current().nextInt(10)) { this.liveTime--; this.state = 1; diff --git a/src/main/java/cn/nukkit/item/ItemBow.java b/src/main/java/cn/nukkit/item/ItemBow.java index 00600a9514d..7a7592c5842 100644 --- a/src/main/java/cn/nukkit/item/ItemBow.java +++ b/src/main/java/cn/nukkit/item/ItemBow.java @@ -14,7 +14,8 @@ import cn.nukkit.nbt.tag.FloatTag; import cn.nukkit.nbt.tag.ListTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -121,7 +122,7 @@ public boolean onRelease(Player player, int ticksUsed) { double p = (double) ticksUsed / 20; double f = Math.min((p * p + p * 2) / 3, 1) * 2.8; - EntityArrow arrow = (EntityArrow) Entity.createEntity(EntityArrow.NETWORK_ID, player.chunk, nbt, player, f > 2.3, false); + EntityArrow arrow = (EntityArrow) Entity.createEntity(EntityArrow.NETWORK_ID, player.chunk, nbt, player, f > 2.3); if (itemArrow.getDamage() > 0) { arrow.setData(itemArrow.getDamage()); } @@ -154,7 +155,7 @@ public boolean onRelease(Player player, int ticksUsed) { if (!this.isUnbreakable()) { Enchantment durability = this.getEnchantment(Enchantment.ID_DURABILITY); - if (!(durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= Utils.random.nextInt(100))) { + if (!(durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= ThreadLocalRandom.current().nextInt(100))) { this.setDamage(this.getDamage() + 2); if (this.getDamage() >= getMaxDurability()) { this.count--; diff --git a/src/main/java/cn/nukkit/item/ItemCrossbow.java b/src/main/java/cn/nukkit/item/ItemCrossbow.java index 8533e982df6..90ce482f04b 100644 --- a/src/main/java/cn/nukkit/item/ItemCrossbow.java +++ b/src/main/java/cn/nukkit/item/ItemCrossbow.java @@ -11,7 +11,8 @@ import cn.nukkit.math.Vector3; import cn.nukkit.nbt.tag.*; import cn.nukkit.network.protocol.LevelSoundEventPacket; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; public class ItemCrossbow extends ItemBow { @@ -73,7 +74,7 @@ public boolean onUse(Player player, int ticksUsed) { if (!player.isCreative()) { if (!this.isUnbreakable()) { Enchantment durability = this.getEnchantment(Enchantment.ID_DURABILITY); - if (!(durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= Utils.random.nextInt(100))) { + if (!(durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= ThreadLocalRandom.current().nextInt(100))) { this.setDamage(this.getDamage() + 2); if (this.getDamage() >= DURABILITY_CROSSBOW) { this.count--; diff --git a/src/main/java/cn/nukkit/item/ItemFireCharge.java b/src/main/java/cn/nukkit/item/ItemFireCharge.java index 4ef3be088d2..3feff6ed523 100644 --- a/src/main/java/cn/nukkit/item/ItemFireCharge.java +++ b/src/main/java/cn/nukkit/item/ItemFireCharge.java @@ -6,7 +6,8 @@ import cn.nukkit.level.Level; import cn.nukkit.level.Sound; import cn.nukkit.math.BlockFace; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; public class ItemFireCharge extends Item { @@ -54,7 +55,7 @@ public boolean onActivate(Level level, Player player, Block block, Block target, if (!e.isCancelled()) { level.setBlock(fire, fire, true); - level.scheduleUpdate(fire, (fire.tickRate() + Utils.random.nextInt(10))); + level.scheduleUpdate(fire, (fire.tickRate() + ThreadLocalRandom.current().nextInt(10))); level.addSound(block, Sound.MOB_GHAST_FIREBALL); if (!player.isCreative()) { diff --git a/src/main/java/cn/nukkit/item/ItemFlintSteel.java b/src/main/java/cn/nukkit/item/ItemFlintSteel.java index e3170f6a6ce..45028aed8d8 100644 --- a/src/main/java/cn/nukkit/item/ItemFlintSteel.java +++ b/src/main/java/cn/nukkit/item/ItemFlintSteel.java @@ -8,7 +8,8 @@ import cn.nukkit.level.particle.ItemBreakParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -61,7 +62,7 @@ public boolean onActivate(Level level, Player player, Block block, Block target, if (!e.isCancelled()) { level.setBlock(fire, fire, true); - level.scheduleUpdate(fire, fire.tickRate() + Utils.random.nextInt(10)); + level.scheduleUpdate(fire, fire.tickRate() + ThreadLocalRandom.current().nextInt(10)); level.addLevelSoundEvent(block, LevelSoundEventPacket.SOUND_IGNITE); if (!player.isCreative()) { diff --git a/src/main/java/cn/nukkit/item/ItemPainting.java b/src/main/java/cn/nukkit/item/ItemPainting.java index 992815d8beb..67add04402e 100644 --- a/src/main/java/cn/nukkit/item/ItemPainting.java +++ b/src/main/java/cn/nukkit/item/ItemPainting.java @@ -13,10 +13,10 @@ import cn.nukkit.nbt.tag.FloatTag; import cn.nukkit.nbt.tag.ListTag; import cn.nukkit.network.protocol.LevelEventPacket; -import cn.nukkit.utils.Utils; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -75,7 +75,7 @@ public boolean onActivate(Level level, Player player, Block block, Block target, } } int direction = DIRECTION[face.getIndex() - 2]; - EntityPainting.Motive motive = validMotives.get(Utils.random.nextInt(validMotives.size())); + EntityPainting.Motive motive = validMotives.get(ThreadLocalRandom.current().nextInt(validMotives.size())); Vector3 position = new Vector3(target.x + 0.5, target.y + 0.5, target.z + 0.5); double widthOffset = offset(motive.width); diff --git a/src/main/java/cn/nukkit/item/ItemTool.java b/src/main/java/cn/nukkit/item/ItemTool.java index afbb283eafd..f36288cb484 100644 --- a/src/main/java/cn/nukkit/item/ItemTool.java +++ b/src/main/java/cn/nukkit/item/ItemTool.java @@ -3,7 +3,8 @@ import cn.nukkit.block.Block; import cn.nukkit.entity.Entity; import cn.nukkit.item.enchantment.Enchantment; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -106,7 +107,7 @@ public boolean useOn(Entity entity) { private boolean isDurable() { Enchantment durability = getEnchantment(Enchantment.ID_DURABILITY); - return durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= Utils.random.nextInt(100); + return durability != null && durability.getLevel() > 0 && (100 / (durability.getLevel() + 1)) <= ThreadLocalRandom.current().nextInt(100); } @Override diff --git a/src/main/java/cn/nukkit/item/enchantment/Enchantment.java b/src/main/java/cn/nukkit/item/enchantment/Enchantment.java index dda16e1c1c2..3c4ca40d7d4 100644 --- a/src/main/java/cn/nukkit/item/enchantment/Enchantment.java +++ b/src/main/java/cn/nukkit/item/enchantment/Enchantment.java @@ -21,10 +21,10 @@ import cn.nukkit.item.enchantment.trident.EnchantmentTridentImpaling; import cn.nukkit.item.enchantment.trident.EnchantmentTridentLoyalty; import cn.nukkit.item.enchantment.trident.EnchantmentTridentRiptide; -import cn.nukkit.utils.Utils; import java.util.ArrayList; import java.util.HashSet; +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -272,8 +272,8 @@ protected Enchantment clone() { public static String getRandomName() { HashSet set = new HashSet<>(); - while (set.size() < Utils.random.nextInt(3, 6)) { - set.add(Enchantment.words[Utils.random.nextInt(0, Enchantment.words.length)]); + while (set.size() < ThreadLocalRandom.current().nextInt(3, 6)) { + set.add(Enchantment.words[ThreadLocalRandom.current().nextInt(0, Enchantment.words.length)]); } String[] words = set.toArray(new String[0]); diff --git a/src/main/java/cn/nukkit/item/enchantment/damage/EnchantmentDamageArthropods.java b/src/main/java/cn/nukkit/item/enchantment/damage/EnchantmentDamageArthropods.java index 90a84a0f594..fcffaf18f49 100644 --- a/src/main/java/cn/nukkit/item/enchantment/damage/EnchantmentDamageArthropods.java +++ b/src/main/java/cn/nukkit/item/enchantment/damage/EnchantmentDamageArthropods.java @@ -4,7 +4,8 @@ import cn.nukkit.entity.EntityArthropod; import cn.nukkit.event.entity.EntityPotionEffectEvent; import cn.nukkit.potion.Effect; -import cn.nukkit.utils.Utils; + +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -39,7 +40,7 @@ public double getDamageBonus(Entity entity) { public void doPostAttack(Entity attacker, Entity entity) { if (entity instanceof EntityArthropod) { entity.addEffect( - Effect.getEffect(Effect.SLOWNESS).setDuration(20 + Utils.random.nextInt(10 * this.level)).setAmplifier(3), + Effect.getEffect(Effect.SLOWNESS).setDuration(20 + ThreadLocalRandom.current().nextInt(10 * this.level)).setAmplifier(3), EntityPotionEffectEvent.Cause.ATTACK); } } diff --git a/src/main/java/cn/nukkit/item/food/Food.java b/src/main/java/cn/nukkit/item/food/Food.java index 55f03256b6c..6ecb3b75c78 100644 --- a/src/main/java/cn/nukkit/item/food/Food.java +++ b/src/main/java/cn/nukkit/item/food/Food.java @@ -24,7 +24,7 @@ public abstract class Food { .addEffect(Effect.getEffect(Effect.ABSORPTION).setDuration(2400)) .addRelative(Item.GOLDEN_APPLE)); public static final Food apple_golden_enchanted = registerDefaultFood(new FoodEffective(4, 9.6F) - .addEffect(Effect.getEffect(Effect.REGENERATION).setAmplifier(4).setDuration(600)) + .addEffect(Effect.getEffect(Effect.REGENERATION).setAmplifier(1).setDuration(600)) .addEffect(Effect.getEffect(Effect.ABSORPTION).setDuration(2400).setAmplifier(3)) .addEffect(Effect.getEffect(Effect.DAMAGE_RESISTANCE).setDuration(6000)) .addEffect(Effect.getEffect(Effect.FIRE_RESISTANCE).setDuration(6000)) diff --git a/src/main/java/cn/nukkit/item/food/FoodEffective.java b/src/main/java/cn/nukkit/item/food/FoodEffective.java index 96f0da18fa7..2243225f678 100644 --- a/src/main/java/cn/nukkit/item/food/FoodEffective.java +++ b/src/main/java/cn/nukkit/item/food/FoodEffective.java @@ -7,6 +7,7 @@ import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; /** * Created by Snake1999 on 2016/1/13. @@ -37,7 +38,7 @@ protected boolean onEatenBy(Player player) { super.onEatenBy(player); effects.forEach((effect, chance) -> { - if (chance >= Math.random()) { + if (chance >= ThreadLocalRandom.current().nextDouble()) { player.addEffect(effect.clone(), EntityPotionEffectEvent.Cause.FOOD); } }); diff --git a/src/main/java/cn/nukkit/item/randomitem/Selector.java b/src/main/java/cn/nukkit/item/randomitem/Selector.java index 1ac7b6ba8fd..cf62b907ebb 100644 --- a/src/main/java/cn/nukkit/item/randomitem/Selector.java +++ b/src/main/java/cn/nukkit/item/randomitem/Selector.java @@ -1,6 +1,7 @@ package cn.nukkit.item.randomitem; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; /** * Created by Snake1999 on 2016/1/15. @@ -30,7 +31,7 @@ public Object select() { public static Selector selectRandom(Map selectorChanceMap) { final float[] totalChance = {0}; selectorChanceMap.values().forEach(f -> totalChance[0] += f); - float resultChance = (float) (Math.random() * totalChance[0]); + float resultChance = (float) (ThreadLocalRandom.current().nextDouble() * totalChance[0]); final float[] flag = {0}; final boolean[] found = {false}; final Selector[] temp = {null}; diff --git a/src/main/java/cn/nukkit/level/Explosion.java b/src/main/java/cn/nukkit/level/Explosion.java index b27a2844d89..dea7015091a 100644 --- a/src/main/java/cn/nukkit/level/Explosion.java +++ b/src/main/java/cn/nukkit/level/Explosion.java @@ -2,6 +2,7 @@ import cn.nukkit.Player; import cn.nukkit.block.Block; +import cn.nukkit.block.BlockID; import cn.nukkit.block.BlockTNT; import cn.nukkit.blockentity.BlockEntity; import cn.nukkit.blockentity.BlockEntityShulkerBox; @@ -31,6 +32,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; /** * @author Angelic47 @@ -49,6 +51,7 @@ public class Explosion { private final Object what; private boolean doesDamage = true; private double minHeight = Integer.MIN_VALUE; + private double fireSpawnChance; public Explosion(Position center, double size, Entity what) { this.level = center.getLevel(); @@ -87,6 +90,7 @@ public boolean explodeA() { Vector3 vector = new Vector3(0, 0, 0); Vector3 vBlock = new Vector3(0, 0, 0); + ThreadLocalRandom random = ThreadLocalRandom.current(); int mRays = 15; for (int i = 0; i < rays; ++i) { @@ -100,7 +104,7 @@ public boolean explodeA() { double pointerY = this.source.y; double pointerZ = this.source.z; - for (double blastForce = this.size * (Utils.random.nextInt(700, 1301)) / 1000d; blastForce > 0; blastForce -= 0.22499999999999998) { + for (double blastForce = this.size * (random.nextInt(700, 1301)) / 1000d; blastForce > 0; blastForce -= stepLen * 0.75d) { int x = (int) pointerX; int y = (int) pointerY; int z = (int) pointerZ; @@ -203,6 +207,8 @@ public boolean explodeB() { Item air = Item.get(Item.AIR); BlockEntity container; + ThreadLocalRandom random = ThreadLocalRandom.current(); + for (Block block : this.affectedBlocks) { if (block.getId() == Block.TNT) { ((BlockTNT) block).prime(Utils.rand(10, 30), this.what instanceof Entity ? (Entity) this.what : null); @@ -223,7 +229,7 @@ public boolean explodeB() { } } container.close(); - } else if (block.alwaysDropsOnExplosion() || Math.random() * 100 < yield) { + } else if (block.alwaysDropsOnExplosion() || random.nextDouble() * 100 < yield) { if (this.level.getBlockIdAt((int) block.x, (int) block.y, (int) block.z) == Block.AIR) { continue; // Block broken by another explosion (end crystals) } @@ -232,7 +238,11 @@ public boolean explodeB() { } } - this.level.setBlockAt((int) block.x, (int) block.y, (int) block.z, Block.AIR); + if (this.fireSpawnChance > 0 && random.nextDouble() < this.fireSpawnChance) { + this.level.setBlockAt((int) block.x, (int) block.y, (int) block.z, BlockID.FIRE); + } else { + this.level.setBlockAt((int) block.x, (int) block.y, (int) block.z, BlockID.AIR); + } Vector3 pos = new Vector3(block.x, block.y, block.z); @@ -345,7 +355,7 @@ private double getSeenPercent(Vector3 source, Entity entity) { bb.getMinZ() + k * (bb.getMaxZ() - bb.getMinZ()) + zOffset ); - if (!this.raycast(source, target)) { + if (!this.raycastHit(source, target)) { ++misses; } @@ -357,7 +367,7 @@ private double getSeenPercent(Vector3 source, Entity entity) { return total != 0 ? (double) misses / (double) total : 0; } - private boolean raycast(Vector3 start, Vector3 end) { + private boolean raycastHit(Vector3 start, Vector3 end) { Vector3 current = new Vector3(start.x, start.y, start.z); Vector3 direction = end.subtract(start).normalize(); @@ -445,4 +455,12 @@ private static double boundary(double start, double distance) { public void setMinHeight(double minHeight) { this.minHeight = minHeight; } + + /** + * Set chance for fire to be spawned + * @param fireSpawnChance 0.0 - 1.0 + */ + public void setFireSpawnChance(double fireSpawnChance) { + this.fireSpawnChance = fireSpawnChance; + } } diff --git a/src/main/java/cn/nukkit/level/Level.java b/src/main/java/cn/nukkit/level/Level.java index f90d3bd693c..bbfd75ba6a5 100644 --- a/src/main/java/cn/nukkit/level/Level.java +++ b/src/main/java/cn/nukkit/level/Level.java @@ -105,7 +105,7 @@ public class Level implements ChunkManager, Metadatable, GeneratorTaskFactory { /** * The blocks that can be randomly ticked */ - private static final boolean[] randomTickBlocks = new boolean[Block.MAX_BLOCK_ID]; + public static final boolean[] randomTickBlocks = new boolean[Block.MAX_BLOCK_ID]; static { randomTickBlocks[Block.GRASS] = true; @@ -934,7 +934,7 @@ public void doTick(int currentTick) { } private void performThunder(long index, FullChunk chunk) { - if (Utils.random.nextInt(100000) < 1) { + if (ThreadLocalRandom.current().nextInt(100000) < 1) { if (areNeighboringChunksLoaded(index)) { return; } @@ -984,7 +984,7 @@ public Vector3 adjustPosToNearbyEntity(Vector3 pos) { } if (!list.isEmpty()) { - return list.get(Utils.random.nextInt(list.size())).getPosition(); + return list.get(ThreadLocalRandom.current().nextInt(list.size())).getPosition(); } else { if (pos.getY() == -1) { pos = pos.up(2); @@ -1149,8 +1149,8 @@ private void tickChunks() { int existingLoaders = Math.max(0, this.chunkTickList.getOrDefault(index, 0)); this.chunkTickList.put(index, existingLoaders + 1); for (int chunk = 0; chunk < chunksPerLoader; ++chunk) { - int dx = Utils.random.nextInt(randRange << 1) - randRange; - int dz = Utils.random.nextInt(randRange << 1) - randRange; + int dx = ThreadLocalRandom.current().nextInt(randRange << 1) - randRange; + int dz = ThreadLocalRandom.current().nextInt(randRange << 1) - randRange; long hash = Level.chunkHash(dx + chunkX, dz + chunkZ); if (!this.chunkTickList.containsKey(hash) && provider.isChunkLoaded(hash)) { this.chunkTickList.put(hash, -1); @@ -1985,7 +1985,7 @@ public EntityItem dropAndGetItem(Vector3 source, Item item, Vector3 motion, bool motion = new Vector3(-MathHelper.sin(f1) * f, 0.20000000298023224, MathHelper.cos(f1) * f); } else { - motion = new Vector3(Utils.random.nextDouble() * 0.2 - 0.1, 0.2, Utils.random.nextDouble() * 0.2 - 0.1); + motion = new Vector3(ThreadLocalRandom.current().nextDouble() * 0.2 - 0.1, 0.2, ThreadLocalRandom.current().nextDouble() * 0.2 - 0.1); } } @@ -3764,7 +3764,7 @@ public boolean setRaining(boolean raining) { if (raining) { pk.evid = LevelEventPacket.EVENT_START_RAIN; - int time = Utils.random.nextInt(12000) + 12000; + int time = ThreadLocalRandom.current().nextInt(12000) + 12000; pk.data = time; setRainTime(time); } else { @@ -3807,7 +3807,7 @@ public boolean setThundering(boolean thundering) { // These numbers are from Minecraft if (thundering) { pk.evid = LevelEventPacket.EVENT_START_THUNDER; - int time = Utils.random.nextInt(12000) + 3600; + int time = ThreadLocalRandom.current().nextInt(12000) + 3600; pk.data = time; setThunderTime(time); } else { diff --git a/src/main/java/cn/nukkit/level/generator/Nether.java b/src/main/java/cn/nukkit/level/generator/Nether.java index 763ac530603..82ccbde8ce3 100644 --- a/src/main/java/cn/nukkit/level/generator/Nether.java +++ b/src/main/java/cn/nukkit/level/generator/Nether.java @@ -24,7 +24,6 @@ import net.daporkchop.lib.random.PRandom; import java.util.*; -import java.util.concurrent.ThreadLocalRandom; public class Nether extends Generator { @@ -97,10 +96,13 @@ public ChunkManager getChunkManager() { @Override public void init(ChunkManager level, NukkitRandom random) { this.level = level; - this.nukkitRandom = random; this.nukkitRandom.setSeed(this.level.getSeed()); + SplittableRandom random1 = new SplittableRandom(this.level.getSeed()); + this.localSeed1 = random1.nextLong(); + this.localSeed2 = random1.nextLong(); + if (this.legacy || this.version < 2) { for (int i = 0; i < noiseGen.length; i++) { noiseGen[i] = new SimplexF(this.nukkitRandom, 4, 1 / 4f, 1 / 64f); @@ -112,8 +114,6 @@ public void init(ChunkManager level, NukkitRandom random) { } this.nukkitRandom.setSeed(this.level.getSeed()); - this.localSeed1 = ThreadLocalRandom.current().nextLong(); - this.localSeed2 = ThreadLocalRandom.current().nextLong(); this.biomeNoise = new SimplexF(this.nukkitRandom, 2F, 1F / 8F, 1F / 2048f); diff --git a/src/main/java/cn/nukkit/level/generator/Normal.java b/src/main/java/cn/nukkit/level/generator/Normal.java index 56f45e0ac25..45daeb6555e 100644 --- a/src/main/java/cn/nukkit/level/generator/Normal.java +++ b/src/main/java/cn/nukkit/level/generator/Normal.java @@ -98,11 +98,12 @@ public Biome pickBiome(int x, int z) { public void init(ChunkManager level, NukkitRandom random) { this.level = level; this.nukkitRandom = random; - SplittableRandom random1 = new SplittableRandom(); this.nukkitRandom.setSeed(this.level.getSeed()); + + SplittableRandom random1 = new SplittableRandom(this.level.getSeed()); this.localSeed1 = random1.nextLong(); this.localSeed2 = random1.nextLong(); - this.nukkitRandom.setSeed(this.level.getSeed()); + this.selector = new BiomeSelector(this.nukkitRandom); this.minLimitPerlinNoise = new NoiseGeneratorOctavesF(random, 16); diff --git a/src/main/java/cn/nukkit/level/generator/object/ObjectTallGrass.java b/src/main/java/cn/nukkit/level/generator/object/ObjectTallGrass.java index 9c432741e02..0d864ddcd2e 100644 --- a/src/main/java/cn/nukkit/level/generator/object/ObjectTallGrass.java +++ b/src/main/java/cn/nukkit/level/generator/object/ObjectTallGrass.java @@ -8,6 +8,8 @@ import cn.nukkit.math.Vector3; import cn.nukkit.utils.Utils; +import java.util.concurrent.ThreadLocalRandom; + /** * @author ItsLucas * Nukkit Project @@ -33,7 +35,7 @@ public static void growGrass(ChunkManager level, Vector3 pos) { while (true) { if (num >= i >> 4) { if (level.getBlockIdAt(x, y, z) == Block.AIR) { - if (Utils.random.nextInt(8) == 0) { + if (ThreadLocalRandom.current().nextInt(8) == 0) { //TODO: biomes have specific flower types that can grow in them if (Utils.rand()) { level.setBlockAt(x, y, z, Block.DANDELION); @@ -51,7 +53,7 @@ public static void growGrass(ChunkManager level, Vector3 pos) { } x += Utils.rand(-1, 1); - y += Utils.rand(-1, 1) * Utils.random.nextInt(3) >> 1; + y += Utils.rand(-1, 1) * ThreadLocalRandom.current().nextInt(3) >> 1; z += Utils.rand(-1, 1); if (y > maxBlockY || y < minBlockY || level.getBlockIdAt(x, y - 1, z) != Block.GRASS) { @@ -78,7 +80,7 @@ public static void growSeagrass(ChunkManager level, Vector3 pos) { if (num >= i >> 4) { int block = level.getBlockIdAt(x, y, z); if (block == Block.WATER || block == Block.STILL_WATER) { - //if (Utils.random.nextInt(8) == 0) { + //if (ThreadLocalRandom.current().nextInt(8) == 0) { // TODO: coral & tall seagrass //} else { level.setBlockAt(x, y, z, Block.SEAGRASS, 0); @@ -90,7 +92,7 @@ public static void growSeagrass(ChunkManager level, Vector3 pos) { } x += Utils.rand(-1, 1); - y += Utils.rand(-1, 1) * Utils.random.nextInt(3) >> 1; + y += Utils.rand(-1, 1) * ThreadLocalRandom.current().nextInt(3) >> 1; z += Utils.rand(-1, 1); int block; diff --git a/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorBamboo.java b/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorBamboo.java index 3fcc0ab617a..fd543b96f48 100644 --- a/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorBamboo.java +++ b/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorBamboo.java @@ -23,7 +23,7 @@ protected int getBlockId(int x, int z, NukkitRandom random, FullChunk chunk) { @Override protected void placeBlock(int x, int y, int z, int id, FullChunk chunk, NukkitRandom random) { - int height = Utils.rand(1, 10); + int height = Utils.rand(5, 16); int part = 0; while (part < height) { int yy = y + part; diff --git a/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorFlower.java b/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorFlower.java index b73700c359b..176d86651f2 100644 --- a/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorFlower.java +++ b/src/main/java/cn/nukkit/level/generator/populator/impl/PopulatorFlower.java @@ -6,10 +6,10 @@ import cn.nukkit.level.generator.populator.helper.EnsureGrassBelow; import cn.nukkit.level.generator.populator.type.PopulatorSurfaceBlock; import cn.nukkit.math.NukkitRandom; -import cn.nukkit.utils.Utils; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; /** * @author Angelic47, Niall Lindsay (Niall7459) @@ -35,7 +35,7 @@ public List getTypes() { @Override protected void placeBlock(int x, int y, int z, int id, FullChunk chunk, NukkitRandom random) { if (!flowerTypes.isEmpty()) { - int[] type = flowerTypes.get(Utils.random.nextInt(flowerTypes.size())); + int[] type = flowerTypes.get(ThreadLocalRandom.current().nextInt(flowerTypes.size())); chunk.setFullBlockId(x, y, z, (type[0] << Block.DATA_BITS) | type[1]); if (type[0] == DOUBLE_PLANT) { chunk.setFullBlockId(x, y + 1, z, (type[0] << Block.DATA_BITS) | (8 | type[1])); diff --git a/src/main/java/cn/nukkit/metrics/Metrics.java b/src/main/java/cn/nukkit/metrics/Metrics.java index 73eab0a8cbf..6fa57006f70 100644 --- a/src/main/java/cn/nukkit/metrics/Metrics.java +++ b/src/main/java/cn/nukkit/metrics/Metrics.java @@ -12,10 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.zip.GZIPOutputStream; /** @@ -79,8 +76,8 @@ private void startSubmitting() { // bStats backend. To circumvent this problem, we introduce some randomness into the initial and second delay. // WARNING: You must not modify and part of this Metrics class, including the submit delay or frequency! // WARNING: Modifying this code will get your plugin banned on bStats. Just don't do it! - long initialDelay = (long) (1000 * 60 * (3 + Math.random() * 3)); - long secondDelay = (long) (1000 * 60 * (Math.random() * 30)); + long initialDelay = (long) (1000 * 60 * (3 + ThreadLocalRandom.current().nextDouble() * 3)); + long secondDelay = (long) (1000 * 60 * (ThreadLocalRandom.current().nextDouble() * 30)); scheduler.schedule(submitTask, initialDelay, TimeUnit.MILLISECONDS); scheduler.scheduleAtFixedRate(submitTask, initialDelay + secondDelay, 1000 * 60 * 30, TimeUnit.MILLISECONDS); } diff --git a/src/main/java/cn/nukkit/network/query/QueryHandler.java b/src/main/java/cn/nukkit/network/query/QueryHandler.java index 845ecfda0f5..b0521f3ec9d 100644 --- a/src/main/java/cn/nukkit/network/query/QueryHandler.java +++ b/src/main/java/cn/nukkit/network/query/QueryHandler.java @@ -2,7 +2,6 @@ import cn.nukkit.Server; import cn.nukkit.event.server.QueryRegenerateEvent; -import cn.nukkit.utils.Utils; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -13,6 +12,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; +import java.util.concurrent.ThreadLocalRandom; /** * @author MagicDroidX @@ -56,7 +56,7 @@ public void regenerateToken() { this.lastToken = this.token; byte[] token = new byte[16]; for (int i = 0; i < 16; i++) { - token[i] = (byte) Utils.random.nextInt(255); + token[i] = (byte) ThreadLocalRandom.current().nextInt(255); } this.token = token; } @@ -73,7 +73,7 @@ public static byte[] getTokenString(byte[] token, InetAddress address) { digest.update(token); return Arrays.copyOf(digest.digest(), 4); } catch (NoSuchAlgorithmException e) { - return ByteBuffer.allocate(4).putInt(Utils.random.nextInt()).array(); + return ByteBuffer.allocate(4).putInt(ThreadLocalRandom.current().nextInt()).array(); } } diff --git a/src/main/java/cn/nukkit/utils/DummyBossBar.java b/src/main/java/cn/nukkit/utils/DummyBossBar.java index b2b0103267f..ece2038ed7d 100644 --- a/src/main/java/cn/nukkit/utils/DummyBossBar.java +++ b/src/main/java/cn/nukkit/utils/DummyBossBar.java @@ -7,6 +7,8 @@ import cn.nukkit.entity.mob.EntityCreeper; import cn.nukkit.network.protocol.*; +import java.util.concurrent.ThreadLocalRandom; + /** * DummyBossBar * =============== @@ -44,7 +46,7 @@ public static class Builder { public Builder(Player player) { this.player = player; - this.bossBarId = 1095216660480L + Utils.random.nextLong(0, 0x7fffffffL); + this.bossBarId = 1095216660480L + ThreadLocalRandom.current().nextLong(0, 0x7fffffffL); } public Builder text(String text) { diff --git a/src/main/java/cn/nukkit/utils/Utils.java b/src/main/java/cn/nukkit/utils/Utils.java index 4ef795cd25d..b5410ef084b 100644 --- a/src/main/java/cn/nukkit/utils/Utils.java +++ b/src/main/java/cn/nukkit/utils/Utils.java @@ -16,9 +16,9 @@ import java.nio.file.Files; import java.util.Arrays; import java.util.Map; -import java.util.SplittableRandom; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadLocalRandom; import java.util.zip.GZIPInputStream; /** @@ -29,11 +29,6 @@ */ public class Utils { - /** - * A SplittableRandom you can use without having to create a new object every time. - */ - public static final SplittableRandom random = new SplittableRandom(); - public static void writeFile(String fileName, String content) throws IOException { writeFile(fileName, new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))); } @@ -322,7 +317,7 @@ public static int rand(int min, int max) { if (min == max) { return max; } - return random.nextInt(max + 1 - min) + min; + return ThreadLocalRandom.current().nextInt(max + 1 - min) + min; } /** @@ -336,7 +331,7 @@ public static double rand(double min, double max) { if (min == max) { return max; } - return min + random.nextDouble() * (max-min); + return min + ThreadLocalRandom.current().nextDouble() * (max-min); } /** @@ -345,7 +340,7 @@ public static double rand(double min, double max) { * @return random boolean */ public static boolean rand() { - return random.nextBoolean(); + return ThreadLocalRandom.current().nextBoolean(); } /** diff --git a/src/main/java/cn/nukkit/utils/ZlibThreadLocal.java b/src/main/java/cn/nukkit/utils/ZlibThreadLocal.java index 33b5807f90a..79a63b1f34e 100644 --- a/src/main/java/cn/nukkit/utils/ZlibThreadLocal.java +++ b/src/main/java/cn/nukkit/utils/ZlibThreadLocal.java @@ -116,6 +116,9 @@ public byte[] inflate(byte[] data, int maxSize) throws IOException { int length = 0; while (!inflater.finished()) { int i = inflater.inflate(buffer); + if (i == 0) { + throw new IOException("Could not decompress data"); + } length += i; if (maxSize > 0 && length >= maxSize) { throw new IOException("Inflated data exceeds maximum size"); diff --git a/src/main/resources/runtime_block_states.dat b/src/main/resources/runtime_block_states.dat index 7eb78aade549560e7d9b3f5986e6a1cec3108ae9..ad2bf55d96a9720052e50d3b16503a6791428e9d 100644 GIT binary patch delta 44647 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%0DN+r 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 J=QR<={{Ri7(?9?K diff --git a/src/main/resources/runtime_block_states_729.dat b/src/main/resources/runtime_block_states_729.dat index b37e2702fb597485e9c0b154f76ef92970c24145..cdaf8cf70b15c3382a9bfc0d1955021a9773e693 100644 GIT binary patch literal 54417 zcmZUaWmH^Ew5CIFcemgK4G`R+ad&qO?!nz%LkRBf?!n#NgS#~D+=lPY%#X=hEFRwd z)~-5|(^aQ-6Gy;&`tRRrIS)~@k@>5lmXkKK5e?XE z+_evX|2zZ$+UlL&L86;>(Y;7m+HmTKGib!ny!P$jdrCUv*f`^4ZAV!+->)5A1VlT| z9lj@2S0nFRh4bsqEsV1#jXmu&UrM#I>y4qt_k9GQa= z?jH^kqY;*8ZI^Rhh5*Fy4_s5DpGl^skhs<>$b7_|oP49NoOh7JqGcz6Ncr}bP0=e1 zD!?rTG4|qIxyiUeV~4!(U()lE#N#^Uu|h49Z_FL)iALqG-51V`X0@see96P3#6?5b z9gHZL5^q;Yv@8%N!L%mwx!0K`+9{n~KcQ5l-qIXQ{Gc{)XPI8yCWaA2yrGh0e1w{7 zL|+gr(qBz>hw*M$io751Xw~M6G6i{OJEzk;O+$yXgpTyAWcd=P1O61h$va-A0C1HR zUJAccWlAIp>dd|Q@9nUJF&EW6Dvb@9p_#~g+++e+?-unf3zFUs=F7n;?gv02`?$;{%Z6i=*}f79U1j z@1TdF;l%vuQ2$RVJe2xRvi;Mc{GXJ67;`j4g+}o$kEIWA!;jc_i*zg?W{@D&VkI3*GbpF}$I4!A=1gKr|*a$DlkgKHr*$6l- zA&{#y{@HWHkHqjzG7!RK{7#JUO*#<5sYF-RzTALs-#3{8AXmToXZJ-vX#CY7#lbr; zWXu3xrT5R~jfS+If5D)qa&&VioDEMJrC@H-t@Pkbm7^?kC9RFGI5qb4HBS}u&Q=ZF zl!U08A?sA8?LG(55?QArE$KfHZIE@E-oXlEfLT8b+Aewtk$zsjiQA}o3IssZ0m(Xz z?qI`U%+JNV^{|-8(c@$j=O2^Mkc;zeNs={WsZ@OcWpHg7;wZW4o=(Df!lpQf=eCk4Ch_DV(Zgbl`uS3N{T#45P#cWXz z<#%Fkfm2!{T*{BR3ViOV;vo(`b(t~i4Aa?r#DxEHe}+0yKZ~&gr?^3ux7+~FYlb)^ z9p9-j&ug1Fq!-^QdXq;=Ki$EUrQijj*qcHiR8IZID=ZehOS^wKmibeoUVlzsg`@n` z=cK>4BN}y!H>fn4SqzKbK@2`j0D5@}t4_t_PVqW{v8opuombMS&zQZpaz~fgVOT{} z4SMB(2xFJQpmQPT>K8mL`m;;;S-h1>lc_C+PJ!L(7q0&#k`?~^5k2w_c$J~sW9Nqm z0Q@ZV3V%6B(#$ekdd2<7doyx7@v9yIPE)mz%9@tyX)HXG5-urYBuN+%6%JEk0&_Uq z8x<~JY$9nm8w?eWRdhmSI9m`Et`9Ill_V@oicu1rQR?h!`+LoUViE?HuqYTS9(qiO z5_=+L2qT4=OUehIF@;w<*{S@+PulNX1TYz#+XjcA00yvY%2e~yQ~tC`K=e-q1qD;U zDuf+K0}~GSWwIxr4NfTMbLiuR>1j2}JU%=cBq|$ZuoUDZK8)?A%9kPNNoW|`-FJ|G z2nlh;6u$(UecHsS{4BxeOT*t5rRGOYEMQH%Ucrmia^3F_5M(dTs+AOsKN3qsd<@<5 zJ_!*qDed&~1a1^Eo95Is<+X;#N}8yq;cSrLv}TffSsy;+B{B4(&ucSC$V?GcpPuK; ziyG&rmpOG0Q^Ef_qQL7H35;B{FELp}O4bG>%2scyj8qYRZ4NEUG^8r}Wxy@&fT{rK zlb!vCA50BSQ@r@XdLImcN>r*&`2G&F%GJ>37l>g9)MbXqi3QEqg3JMp_YKP49JYIC zLvUX|i!B9rGUSEQPg!Qn5Qjz1U@NRq77pPpQY znePU!hGyvXEZuK93F(~W$@Vts-{?CIHi@y`42}fas(z>O$2MHL=~dkm&+INAz09^v z$c#;5X}-kdaHJ7GwxHP)KIBhh_}={tVUgG{kLNkM+02_^pF5CBY0e=(uS6~^?3g2W zn?3GHDYLE2t?GlVbjEDpU@D-rGTDl3(Ic2OhEdU%34lPvbZwYX*mV`~I|B+C+Rz=3=ON_q$Avm^L17n*$Gf;=01~a=MQTEj z=;-h+cD;+6!65M-4x(k-Y~{8qw(1EiXKRo09Z_)BgP5ddndq*wLQjNNgz7 z+id>H>3$vriss{o-PVK2*}z0#Ln>E^%^4>AnlWV9Zl5(QVtc6F8B_Kj!rO|CG18(1__s8)3cy5zUp^07+xbP(n@>hDf@4Ver8~67Ac14#D{G<*%^?e zfLIm(i%HE7Bo}naYR-iy>gx9{QTC_R^L4j6F_WZdx`Zqm>-VnskhrW*ut(jxP$&e( z*lwlv+P=hnx>;GQ{C(vQ_&n=i)M+{nj|MBh5cLww$tX@P5XFA0^`B{d@%%rNw^66r zhY33RMNku3Gfdm`_0!i}+LZN7X{!BSj&`Oxfkm*C-npNQLUGLRsAz2Fl%lG)e$dKc z+JNaj8B$skh8LCvs9Kb}+9avX@RJhRa*TJe0vLGCFRnP7yyM{e#;S(85JR<#%!Bup z?SddE9kL^FGxq;Ub}-H|^uQuj>^uo|Ftf%ec{ z&@omB^6-e0C6ik$-_ok{gC{(z&9f*}8HpiK9O#H!<&7E<651ICh7Y>^tnO1W^$({X zuyUM;+~C1gFRg**7gsn{@wO2mew|5Rv=0rg&vz>r`iC_jj}?&{_q!+Cf`~KoJtqG> zrY+zDSYq0gzBW7Uhm0>Lf9~Uf(27t)fIRzR`D}P84I%|0~%+KRZN* zjdtTkk~}nd>0RVu1#gwhXp%oT@aNQ=A)OAfyYtwA~aYhD> zL&FVjpL=buo(0uGI=VdlvCD<9MclUnc3jZ_<}V%nox3u@or1V10oxn5lw^}x2%$5; zbLyL@!JHIbyX?(c<&Q8b$OST8o7x!|Yh>eNBhU;^o#R_sGb5_m@e`KfmI|K{#>wOG>DHhmR z6KS3lX>8-o#Mh`z9s6WI*dEDi`DS(MaM2^xIKr$e9H}+hCSHutQ;vYs_}i^o5!bts zS%1}Vk3!M}0(7kQ5h=+uNvKY=;7|;v^sAiKp*-zBfmMd zgx6ySeXAo=9F?KUwj1^rP>gUta;@b>Mp5T(rfRf)Eaa4H*>Y;!>AdEL`}P%69>D9L zocQFFzqDrNYyKvIVbO*S_+xwrHrM@(*uhk!=)x~nUnLM=i*WR7O-eUti0zT}vOg<+ z>4j&m8}Ejx$lAqB8QyYsAZvN)#q&SO$0c()k;gQ&JBxIgcOj975*3Pd`pi@5@;3lS zS*8_TX2=N5Kwj)r*G7^k0VZJB;_kIzhbin^QN2s$cZwK^K*5`OkLs^((xeDS)oUU5 zSHD{!;A>@CzScBd=pByyxe*lTr31@##ZN}}KDc$`nPQm1=d-F2fGW35|xv-s;BbU-laUOr%G z%*z(q{l6q`Z+=jN{<3eq|eRxB@B=o&JS3z&dVe8Ia)~H zv-D>r9!b2_&KHROTK793jQuStPUjJCv{-0u%wJcPb0CjUnioWWp}X8 z5k-u6;NN?t^OyP^)G!nr+aq2HDWW(SKVbekwD}Mj8p*ee*(U*dHvlPU_2y2T_u+R{ zI3Loy3e(HX-8m5oFHx1fvo{}yytf%~YtViVh(O~HeGQgE4nyKW-1+q^Eq z2v&Uu`?Mf4d%FsLie{8#A0u z<)qk*YaUS0jWRo1*6tHK{~AD6igOKuRiwCxg$>@+fR(QfK+V>DJG)i@gRaJ%Hj+&v zD9Hhh@N9QYdd{XXgB+uwW_5fs0BT_g^g2Pxa&S9r6pp~)Niv5%K4bDtiAz*`T6%c`ipo zEY%uTy+Zu@|JHGId#%CZ2z{Pokn8{s<3PjdJ^v>Wjy!+Ey*+CXOpXKfhpGu*D|(ksB~f&mpNzr&UVzfCJpxcz)ZF&OzvTP#a0 zVx`F!DVgmkz%ic-VhBd-Q70*+ZGFox;cy+QED$!fM1xT89h)B$DfO5DUtL$`ZvJ?R zfRy&fI!e7b@vfChzT6=-a>Wa*vWb#d(v(B{%?4Ne`F)POrV(0K+WCFX58$3hBv4%4 z#cZQEh6g3sYH-z>$7X#92f(fWxuKBhAdT~HH1pC(s1(opN3W^(Rca|vQPm9B8lK{b zH*f(hXz1RgBqeyT7afsNZR|Qiny2FeZf?|fu(uYjQh5v^T$(54f@W?scCgnGhQGMW z7C0-o>rHF0g&TmmcS~bBoW_r$C!SKM73SJCygT|JovqK-fBTXWIzvdjZHP~bzvVnI z(7fm!hiKorjjny-I~aVw)^*z+0E)N{>}sFH4hFlf+XspABOhNn!g34Muz&V&u88|f zSbe-9(0k^z>-lQU+}ej`;KpFmclFgVTEFi8k@l_TK0wG}UAhl@Y}Q-Pwc?(JS;_=+ zHfXt@QWn!sh>}*)7hs4WncyPg|A)OQ%oY6fE0*V2t}Q81dwWfccWqj^%je|{DH(w` z!FH6^S3?n)aiKQ_5UztzR^&|rgdOjy*qcT~3{DP8THg3+3QUprfs&T7HZCg?5soxA@ZTveT9yOajWYqw6XP05hnK=aYk>;CM_BBd8 zqK}MXM?VYMkY{SRFxMCoGAVkWMFEzNO3VC?E8Whva!>Te^T*su+-!i>#m@n5EXm>p z5h<;gBtn*Q9(nhjeiprY*;>9+R$$)NpXWVAP(D4_KkjOO_Akw#z96BO&Ft&fL!|OU zUb1^kYT^B|YK0vc``N-`(L_pP|KAt3oDB{VcABGL z2{EQzl_pN54`M_6@jcHb_cvW@k&{EDCSAAXAlJYT$WxStmvW+xj#g<-Cz4C@=5%^@ zgzG5EtQ5R~orwVKs5;R6J~1UCwUFY9Z(IJs&09P+mr+58O*@uE4WL&Nc=A&)SQ(X9 z36}GpKSB!WBXh>N=O6K40BTa^--8EksliyP95bM&87%HJ;2M)>LqjN-4%Lfd;wPUD zdCzx`YpaZNI+C6;_iKU=Aa}o3`7m)_9hBDZo<N#Ad?@(6c4lDto#xCN-09C zJe~xRC+BLavLo}9qjY=>YT4#C>-py_ha`OrFh_W z5jYT>TJ{>X3bhGX-MhHlThYw^G8JG~H9PAG;iQYDZ z2Cxw^IPzd~Q`Z1}Q_!0hN#deHM$?L>CV*MEZ2ZYpz^W8Dk55ZdBM*Jrl(jp`S|>SM zKWnT!LTgSZAI>$jb*oCe)97|Ai7Yb&ZoP$`q?q533Ap3LO&zSai}ww zX$a9ZGHA;eGA8nVB_F`=Yoc>H8r174Ed9GA%CRT+MMb4k6Bs`0v4w zI8A)jXHaLQ=tnR9@m3zC#SS=bvT`f3KlYyDst}20wc-7uIRM$eg4aldQNCTWc^ajK z95!$N^}=p@z9+|7d&9$Nd!7sgb*;Jf$MiYQ=I&I{KUUpK%?ULZ!qTI(Y|+bw!MUnS z?T=4EK{Bdn>s9v+HGz4P@j~r2ulxj4dEX~R@6)IK&eBVe7x3*;On5g~;zT`W=95CM@Oi&Cu@7D80~-Y>@w}^}7fA202Gx3!cI{QJbZH|> z-6lp&%Keq*TYe8~Ce5UmxM!rKX|%i*%g!tYo`3gD|G%%6tDgXzjDyC8txMZf4_W7rBv)X%w;~O?Xbr!eoBqAw}Veg+z3N3Hgp%^seRQMkU)&`&=mTH zBkL`{vt9C>p7tC&IAC(y%JEx02rJq~ewi)D+MbHa2+MQuLuNycu_Lwjr`jgA zOsadpBK6URq|8nGD(&|7IKQ4iGdGho24=gQ${J^H+HYG|Df#)+dt^_Tfa&^PQJ|6O zbeQpBXR2M{&CTq5MzWnaleR<`As^#z?AA{TNcP9HArgvzl5l5tZnzkPpRbWXN`)uvV1{9|#cn12xdhF( zbj9r(3fe&PEo{ZK+^_HRtssob>BRRboKU!0DUxZA^SA9F3?j0@2v8#-_w|kEoccPK z$7&NUq-CF9cooG~Qn+Qz=^Dco>$j|#w9Ax?>o9+TI>iq) z@&+evoMgI}#n~l`j#yEZ!_un5nl;lw)0?ahLN;#eQj0=NOyB;N3T%PN3nN%-M0#4%NIFYS~k{%RrQQvcr%&?_DG5KaAmhagA}4)*zn`|*-T z)%#z{_eN9d-eILNFRujkj`mrO33z8e`wKCA9I?RJ0LubtT77LK?-mQYG3g&c5wyK} zS!r6lyc(NZIY1UCF9U7yim`e-dpF3oa=f%r?3Hi;k2NNi)c$4?5`FeB+(hW_#lqo~ z8)~K}iQj5cW{)msnx43wav**jWM5W@Q#Pi>oXeT0S{)G??Eh1P5r5m@6-Ge)++6Uc z`u@!HYny&Uo{05@@gtailbeXmg7FKS@<}xl7Y`J0Ip|CWN1F!=i;XS%G*mEJXB6|I zO3Klo(x9t$9x9O%l19fDW^tCk|1fSQnTur;E!&z{g(J-9MB^Nxb}e-H zxFr3|e|e&)N50Kwvh>fn6iOg~Y5t z3ZL$b))tIixV?K$OPrjg`Dt3qx1jDtrec0F^)N80ld&Dj{G<`T;`V4K;(W6s2``H% zrG06R`K2Bm`keOs(=f%`Pn{_5iia+*V;KRN#?$QUR201Nr>!SngUxoTre#T$wVw8g zHaMR2ZNQ_7a=M~%k}PWnG8a^2($i~Y9in1Y1#CJ@>I`?JkaXL1?N@^UB3Oz`EYXVv z76IEjn&!zA4ToWbKsC?5nRgZ^VX3D?T)9V(c`qoEj$wqb!|2S04QPUlwF1R*YN#MjTdFQifZssK}+X z-@sj3nH*{oPgYl^Ta~B;fX}Z+e~;vmd`Jl)5s8HjeDZOtywnXS8gb;pXhBP1aidRl z{>LWI{a?&fK`|TSn)uB$ajBfVjAl#R(a=gHJ}nl6#-V6Q>l=qxxJANr)a>uS+x1^d zh9uY(d!Xdhq2q#c;U7t(<^uyz*#597{Rw}Q$Rmz5GN>*}^j;09JQr zL&TM&nzgv}q({jUC!AHal8B3)C zZTIb9m}4lM@m{@!$RZJ&J(7a+Xq#*~%!(1^I0;--%0elofyduoPJlHNS$kW?p*hG6 zT8u|Ug`58)4*|8z0UlhCl6K?gG(bzF2_qJ!jbu=fliES-%AB}?c5$I))<-{t-#hgG z38Ldh6X%JfXsXxUvcULYVx%XW_OlBQ>(L(Bde zCPHG&|B=I@Y+b zNfw2gZEg7yURtQtDp074RcDcq>D*|)d4b7wGo2+8u{_$TvhlPkpC_or=9XJZ=oL~q zRg4Wawm4W`p&!CH4PyGmad;hTZJl<>LS2m8+h~V7v;~HlV(j43!&mBVYOQ!LjQTMx zo>UEqM7#yoJ-x7bs}bDjP-|maF{UhqmDa}B{bgBp7Yxjm2KEKHHG`Es1%2}^&-i>c z=QbnrM`~)_?k_(M)3SsC@Zu!)r6-oWB$jwWaAC)56*qxpKhmkm*?ffIRtGV0G`ogk z+}!8?%*P3Bc{#*8R3S|SiN^bHkzNHB?mJ;-H_bjX$b~gD4CVcv6gs=lq%yT0kzfK+ zUg<4NtkT#Dd?l?*PKfWW%V5`Q4e6GFL7DY=?tNnZ2rbVVy@0yi7Ix_2}g zI9=ZC?4R|+`qTkZb9Cp(%Wcu#GoaK)u$vhj2<7=n(d(K^t^HL+lPtr}E2FSg^LJga zWiRiS9y#ysml3PKVqcnL&Rpay|0;YbKYuPSl~V(vszF=fGLqHwU89@ml?+oIeMjar zdfL}M)va_1=kjav+hta(tlYwM-nv-jN$v55GI_|AC6I0Cbxj9n6!OSXJa!#R(L8ny zTS7Ov`LwgZg&J$Z{yH~j!0_ATIB?5b1|NFECc*MJPpIFzk#iYd&$g!;(yh@b#>2D+ zEO>>(ngLa9Pc;2(O&qtj6n50+ZWQdt=S5KMQ89SO`lZ~C6k%jCI=$|NOwD{N7vG$I zwfk#p>8uWVjYXgUJTA|_BNkCpYLcKVgh!n z&W#T->{V3dd;5&CTqcp&r90h4471FCdo$DTnWqL8iz6l?dc`eLjrFFSY?9kRd4yz$#AH;eKO9%}9CXat?je2eBHVa3_eM0F8mIRWTcY z7^mJ>soNbaX}Hz7{4799xuqM~g1m+8EI?SjOT)XUidK3*C$%X5U3yVk_%hng5_Tr7$TIA*92(YZ zP#;ls;@Ds4Of2(9m^rHQ>A9n-h@n1$&q{d(8IlBRk;psTbShS(bZU__MLk;e34OK+ z`nMkChyf4Vg88{m?X46<&6uBe)!$0-u}G=72*lJ-(NwWmiGl#Xd(<-Cw+}E(Un-~K z#mI%Sl#hMNfANr_esR~~6>3Qo zi4r4O%Zn|dCXXAE5BY^T((zvICu>+9EBR6G_nR&~Tk$by^H_J>R4PgTN3N{QG`kHM zO=8rWJmVNj9&SaR;MnxO8spf;Kdk^7({1acd`LV`%O(NJ1D!wFg9};HORgdAKcXJ- zX8F7fZl>{WSc`($UZvXWM7t8fHy1eWi2yoiS|QY#k#Fk z!cB%0G5Nv?WRl1e+^q*@Q0}sZeJ|>JZ26P8Kt64Ue%b!vZlW{~h;G|s*tPleV_NB_ z@;>WN#5siv!M9?v%4QEs-i!IqT$g`Z8|UF|Pj7FODy^+V+xKKOiN#wTUuG?*OlK|6 z@@@j^eAq!9DV}`-m>)kDFR+zwxLe!3%v+`|*tR#AfItfbY<1qp^*9=p)=3gt4CM?X zg`=E822wXamimY>;;&3;I?M}hpSm4Wgh*B^CGSl&tJOe)>TRI=9hYmS7YIJJFNHomwXO^ttez|r?d3dyMY$o0< z)4u5WOD+W6qX)P8qdZM>+s^fu&O$5x<#87_lLErzTimy-225oJ$W_W}oj>w=;~Eq& zhsa=hKgT7@%2`IKu%}JO>f>Kgob`pFk(W@0 zRPo>vOTEO9RfhQN!R3Vs;WLyWSBCCS$jwUR!m#zW=*Z1dEc6SbJnbPV&z@bgnpP_V*&;jCf#jilz8b1WuO{G$XT)6 z+GlTrP?{`NytSTlY&1-H_NcSnJNPiTqHNJS;1g(ndsZno$v)|~vIv)grjhpWLEi6< zAZ=65boCe1>f?I`i~YGwTwri$2m;dswrHDPudv1MXIe78FIyy3(yvjd#2CO>1j@JZ zP~|PE{7^+Ydq@hme3Fixs1QI}^0ED;lUw@8UBtWA&SPlRs`V3vINOIT z24_Wgfw0%?=zJU1Xyu_LfV%E6ciFQarSBinxwkbR8EU{&8+6@6Bmm*;W<77rjNH(! z^DYaIDW2058!6JGgZ(PhKH1D};|`06>Fg5W>}7qJtY0Ui>t#cD*;91uZxb|6!AC3N zd$x~s9$k%=SGZv~tH^xXShX4$wJpy3 zpJ*qDtjW3^%4$M#-H9$@Q=%F3MrXgP_t2Rgu+SO zN{a5)i&E7sI|LmOSU@|fe0lFCK}$HA_-9f1dbE&$0~*OMR5&Dak_56jrPO{H27xNH z_8j3AIS|ajs6VtNgvI`9ASM1dlrl#y5;)x*IQk*fcd5tB!Db zUgYA|&HcOuh~O);_E0gKm!4Nug|iho1{0SGq&6nV(ky3P;_`(FYURE{)lXh*>FId)+FMG21 z1gh-MS)dU}oCVDs1!p!zA2rGxH+kc058SNmIcs-XYk*)L1c>F^kMyGRwptX+9OEii zI#Q91B4$f<@*yTFb${}|oQh@U;|Huf2y3~FAh7^dCmg&u?}CbaaW=v;@@PQ? zz<*s;ufae;0DPpL2yxMWlFGH4(9 z5p8$4LYK0RBqy6|3A8%{+Q^ZQJUKEFf(Cq_C29rj&VV*@6phsQ-|y4xnnl*Xfk+YN z)Z{MKhC*T>3t}s1a|X1NGaRUsnlf2VidW*VqxE~zniMbGS4S&l@{|;B`B_I;`Tz+P zQRcY<2falJARN(QiI3hQ1rP@Bu;fN>(E zIx{h~&mLR^r8si!c=HeiKs5e+xPN$sABHFXea7C)n@j=x!SwMVe0J6uuBRE0Y`ko& zxXrL3z-ZzgEfLk~2~L=N=tjwUc8PdxQh@&WEV|V<*`CsH{hsRDwczgfJ=Fn(4CBEE zV9QATB&{qN+KYdnU`eKPuEWUOIxaj){g!~Y;<*h1nEwM|Om9nGe_KH-vfNw1HEvIBTBUZ3>d zKTEa`JMX@2fs+!+y}b~V@lkI9uQxn!fh4HN8V17yp~w-g;^0b9WPGGsBxi-sk@r}r z$b>1ypU65?dW9!UXa+-V(SegHDR4~hpCs2Z1>KSNNT|r^am6rX9ZJ2z=SC$#s2dbp z*{w`-!=dL`z{$?v7P;=+6m1J+rF>G~uc`|_9>Q|Y?j`OedU;!ZvT{mth@r|nBZr6Y z&*1O@4qjniR&qrk1eL?APBHTKrVIifUG`S948#p+5>lleN>wH_g~Q2Z(3vwNR&E}S zCVWSf6%5mtG~Wx;4qc=dxD{_<_+=gZ`xhbm)9*~{XJB|3*-heqa8&O;A%@9oBg#Z( zc=!g3P&0T?LJjc>kdb06u%jDo5@peoVqi0)3$GJpm6Kwq(V>&A5M^1DVkA?dgD(FHITg6f3()w#i{{7YW~-Cxt->UNxsW z_=Y*h;Pj1>cn#&ymA9wy{=hpf`i{vnHHHWzfc5;mKM;(IW@qqBjv+!jbnWZDyFW09 zi~dQoIw}?u>eL3WfeD;l5rM@aV9YwjG|(m>^Kz?HEI zq~QpP<>H?KVYeNHV80s5bvv;DBD4nEx-$Uld4v zAO1m_zl?ByJA6V_1OzaAw?7%Ef(a^oiiQQKLk0rCIQYKs-y|@>*_HXS!;ycsTNOz8 z)RX^-K-k;_^UDx8N5*77jX*rKomF-P zkhl!S<^j6c2; z4|!vW!7o(oT4RXWV2REzq|EXnr%=}IBC{nH8ei~M9ImohA@U5PuyD;EwZVv>02$rP zlfJ=7PGfhni~HE?Zgjej>@*ayRgKgh2bL8f8 zqoJ?msv*J$_(T?YVpiyY|0L z=g|%&!u9jd$Um%ab&f8;uw4huYR^?ekX!x=lcsvbaCr_w5-~5Hc;I)z6BI_2K8DTC z{oZGfj=6x$K)D0W2iKQQo^ZBx{X;rHfcp*^ODE7DiZ=*86y2qhkPn3q1S$|2GeO@l zJ(J-kYza0_p)&PkKekCOu7|pb$^P8>%?#(A!F^4VPPx*hZkpL_bP}ws_NPz$RZYJ$ z%Ae-o;YfIqJ72M!Kw^tH7ViFFSJBHv#`<)^BnK7#3aaw~` zSeC4*TgZd=ibhSYtT(AAkG7Oj#8o_4+#k#JU+mpQqI_0%`ZJ-LtK{P3aCE&xP+=gV z%*i5K!9`+Lwp-L%4@w3a-S<+KN>eyF*p>(C?NQ zedZt`)8aDwCdq9@N+tEk$}uP^<`KuQv>9?Kj$%%c3ftg}Dp|P}siN!BRB0jtGx*+d z_kHc9TrJBY5v&uh#?@OI+@fi!!CII^1KDLq)YT88+6oa@_&rE>K?E%&Sh(Z6@mIID zaLbo}kAH8>E^|A~2lYgd5ww85g5i2plR}$jLkk=38=b&Ou0jz|r=m`mPd4xqlC@`0 zh9(daE~TsxBPh8t{ZIw4_5f=Ua}kl$nH(ICo=8zWK$|=#VA@UM7ekG$qNeGOM|t5s z{&Rx!TGd zl*ZD_o_uLOAL_H%naVsUX&X~-XE8}|wXRT>Mn(fHHA!??&J)R;obX;wTIf4i1j&;5 za~dmKZDYowLQ$f;=knRi7Q3hwvm{H4Z?=Mhn9uPJ22qssY2KV#%{9R+SkWY2nOFI9 zNfma$H!04fxunvp^>CidW?+LPw8Nt6Xn#mpxaIW|TwWxc-sD$5)oXzlR+^OW3d_1? zEXBs&)zpU-|Saxh(%K*!M92Ge02jpE=bJ||3*aphftA1oE1WK|;{&_tY1sL0y+^Lx)z#bz2zS#w*EzH&H< znWy_cUDN#uY3b;*#m2VSEK)6@tolxsF{pA3-aFPKgFHct<~33}8yn?D<&9x4Zs=jx z-^-!Xm%65#4sxtQ(lym^Nh(Pf=1gBhUp4IkBLqw;4d#GRpT zp56VZmtptAU*ziX_B^MJ;~|_UF8DMRRiNuVbKzpB>3#;A zD`>_QSyADviY(mMN0T&mT&c}k_MG!En+b}HZpA5`QXImyk#&`wI~oE> z7r<3UF6=>NF50MAv}{`9_W{Kb2$bF~>_ZjH*s+5t@F`BKn(B7TR$g2R?$X}%RzItj zZGKGs1EWoHc76^5(pVf{bDA8Bsc20kV%3)}H+n&VWj;30G>ui9vV{6u9C4TYWAkX3 z_+n95d|u+eaW003wzmMWX0g~I(E;tgiXxh zi%u)DWhTDIqR@_2)hfpljwm$G#&!d-z7SBVYW5SHDdiBm6`k8)Lb6B5#7&YpMZcdx zeCF(eS&;kWB9FP(c(NnQ&4w?WxLUcq>}qgPvhjMKmJwUr$d zL)bPLuCSiaUuKGoDL7d-wp?I}EJm8XW(V~X3}i}Nvjw$7*iKJeV_bO$9S|%9Rp+KU zD;iimxtkI6+^b8T?SHsoOzxmSV=>^7TzV-h*BQ8zB7|gl;rx(fmtN{X(zlGP6Yu`{ z3L~8Jf)nrIci4!j@o4`D<(+tUy(@AGE}iDs{n2NWB0<2PCp+Vyk$k7PTL2w#k85zv z6YWPvsil|v_h#$DOD~`^H*nsNT=V4k9%_rJd1847>GXE~7o`uYUQJX9@)HV-*+KDc`H0a=PcdR2S)aPw!cLZ&!G-{sVNzA0{Z1JH`)FO5$4QGU)oR5`lV& z*w_YLe~rMkl+X_sn+dzsM{?mM#HIJUWna-H;G>ya;+o6**(WGGY4|UqnCEu#F;WJR09U>vBskmG7XN zb+Z0(IM`oX-#%_@iQ%*Mj~+3Gy{z}2VtyiQgD2`7-awgvdQZz)@96~f+P{Kk(pZC6 zVDTn8Wic+@+=h2e*XKqyPl9eJ_GoiruCoQ} zva7fauf6MnwJvZjH}i{AWQSTa(#nX~2-ihh!`;^f1CJMT4d{~x9Is9X!UpWvU(SDT zW2TS~E|7(1!MFuQ`HOn^$+`5E1`k4iY({tmj2 zP;toq8wmw7Icq^%oq9~g9>&ALoiaGLBiPUwh-NI!{t|04It^0gCh6X^H-hsg{dfD} zK4R+Zp1dlZbx0beT}z7XmQL%V6!AZ5ADK_&`D(S*>1cDY%AR(Qohg^V-fcSVM{r0{6t<98*747$zcw&FP)9IBQTfvJx&&h;G7;4;|Vx{BztlEA58$xfH}_arwPF_5~)x(%!nWAL;F z_oR%2c#PTaT4<;-L;I2a20`gA6W~l4NBwwSc{j2>M*4@4QE1D9=JqzVIX^L_z|mns zkursmZa=;-S=K;z7z1&>ZgIA|v;+EUFD@xkPRqG*5JzWd0QH$im5{bTui)%0FMx!B zdh3hy6Hy5YHkv(3vKO*aD0~D*XirB7ZLbJ`pjT&u%s9&R@Kg4Ss{491YGJ`nNTvoG ze)(@+&p|b>U%<2-VJBS0q^9}t^OBgrftT{hypj+u&+lqp)I38R$8gT~v*nNSD7+ry z`3fra1`h(|kNW>Z*I5O{!9;BuclY2DBzVx^HUtmu?(XjH?(QTI+}+(JxVyVM?7+AG z*6zh#Ow~JYpKc0f=$_Nv=NS~Pmh6*aqta}2iq*0BMHth1vkc4Gog);&#WKqwgR+~= zZF4oF8_o$Jxd-v|l{cg$8&sfz zGnAUkD$x-6R@y$3w_?ebz=#ugl*x83MG2cb$PmYDhpIem*ztA{*DlJ;CB+nM1X-{Q z#@&|ikIKzX4td@~FvLJt0aDOk=~rU&c2uLl%1)cT1nK4zAziH)QJ?rikAIk?a37VQ z8GO6(^c1ow*k92$FsQQ~Rztf#DnpHBza)}VYbv6}?R1Cgtq*Hdnz@zEjJL+FMlP`d zmVbmgcKoz_7GC~=$huf`>SKau9QOyejsU}QTVv88zg{TMGGjc|bjC@gHWHnwCUPk% zq~7+Ip>%$|I$(J+C-TH{#;L>vuR>>azUY)~ij75pY=G6QMY9&sa%Au_a_J1kQYins zonU@Fm+r@ ztKY*qB&bkhhdZgmI=ZM(r^h=Z30rR?TXO$t$k#y%^W^;>tDU}ZpsNsF2Hmsxv4)n59lGxQOjKlI0UlCjO zmk&(+TiS1Fn?HE9Sa||?t&#*|D5jHnh+5@Qd)TIv1&CU?QCL9d52DuJC@c)q$s$Cp z-%(g-rjx~pUUCF8mu8T=ri?#8n?@bIjxTu#yA;4JRvr>ND&iS`)LXz!ih%0NlT02B(-G2n zCcZ>QN=#ZA9T#iKw$PCwkzVk~i9IVf05UGhpuZ)6HzxGVnqxj+kqz)T{&FZKx;9y7 zJ}*tG*8Ju0w>IGr>+zg4=~6ZDi8{A7=L$Dvc+5eux;}Q?U%(-6Ndkv==NJVJpX1-2 zPF~fX>KLZ$sFv8jGUpZ%*D1{Px9@!L^HBW~O_O6Bi|0KD-bi^~R z$*ZPLs++IO5|SMOO4X zYajo&-Y>z1ocu-8+?#lHRaCPSl`9q1I>g09Ob^+p_gR>`mZB>7bJJ5TVL|B2r2s1O znD~iq#6wI-a6S2*OxihO(r0r9vdKZPbTM*W; z5Hb)lh}InKy9>8~IjxdtTmX$ltm1L{_EBp>(m237+=mou5pq@)ZF*zREfO|1L2kjV zB;HJ?N0KZ_c@pHJTcS1fGhG#fy+eglb8%koMV3<*L%uwdS32O~q>uU{$ebJSctTEn z;Wh69bF(O+xB*^%iE>;+WcY9wE6m(R{9CAY!Yg8PdfFl6eleQa!!->FmG2og2w8fX zWY3sE|KY4lu0jmZle2fSi$Ijg-{Z4adZXtWt)0Q&qXU#@uF=`){5||Y>E>4P=xNHK zC~72+#*JVwE^b|QpSEuLDH&S+M{4!N{^x1Y^f06~0aj)e?s#UF@`nwl(+!+7$Bezx z7}u7R*?1B9m9e4`jtl6Lqc8Z(pqi^^Z%lFw?D|-isGywhyaRZBOrdR(M+3L^S@9sY z#TEGw*C02@_G9STpC)CL99G0@E)9vQ<^GO}`)g29K}F>^Ee9HFncbLPvb+;D7aGMM zf+NaZVi5N5I67wJe5b}h>aw0YRwP_d;b#lT|< zy<6Q&ACuVSsvKnJ{7s42xBCrx)n6&|6(V^>f8MPxQaASpjyq%ID%3(oq6rEddDjE` zkxSoiM+-!~T#SWVl>1m3QzOl~gKUzerJ>>SP<_qXy4$LpE=08(`=~}!o8$cLNG`}U z-m~i2GHDQcWj78wkoC6G!!qQk7M?8e9%s(_j@#T^RKf$tXe_+Vr^!h)Y0B07zPUtyCTx3REpCV~M51r-exsJb9L9oWlNQUZ&aw^!L*3$Z$F*PYaWJe>OyMZ@Oh_)P4E! z1~pAVmg!i-MYZ!jz3xi&c!G;MU`^Y28pB(1?~1=vAaNdY24d?OVVuoT?9U6fe)#@ zqa&ssCS<~}3YFh>?F$>&sE;pp<6*|~6t4YNo%5Qsp-RU1TaP<}OOms+h%U@i^v><^ ziasQ8K6g#mnx$Ybc_1c*T9n4AK4|3|b z7E}Vw1X}N0eBIPJ5*Q$k{QJVCV9mmyGRO`}NyCbklq$4pRSd$zBM@Gar`F{sS1S-f z`^*ydXA$oKjBDDePu00gE^OxZ-B`BblIkQiGR?<-_YjhP4yxXmAsQFFXtzL(k6@XS)q2TMn z6)yc?128HOZENd>>cip`M_pD__f|n5%=SM-(%RC33MGDjV@>)2d`+5hIzq{#$aRXS z`#a9)GD70#zHSDLfE?W)L3OQuZL9(NBfUh8=fPbkwhvuh{T0ah2(8dG-7t7q57^W( zT;x|Ub6Fa?(hS&5C3?=YkUnT&VqM!JSypnxu>D(tYfde5*0N4`p4Vg9RSNGJ zrr6FSTu(D7XT;_=d{`~F_KW7r2Aa9q zB5wi9MekTW&B!P0HJLZ0zGmE8hSuhnIHMf~p&7_P^Y@mt*p9EwHe$yj>7Qcg*!@38 z_GIAG$uT+e)@Hs+24K(3ye6}fd5bv+46VNV0!Ij?FB*KV(3#LayE=lJyd}AN*)1pF zgmcIo$m&>Wt00_o1a*J2yKi?Bm|va~d##gof8G71Omx8MojIc|dwQG9rTLn3oH;hA z9oNbU(oC;Oc{~5dQOz5%eEP}!nzO8K%k zgg|JE2bjL{rY#it*%fSrQXu8cLujwQt_O9idUUpELT8A=gO}UO2c<2iJN{Gr%86ic_R3}C|_lJT~9^d+rck43ocPa>iwg$7#M z7LT!{c9TG>H%T2MRw&A#h^YRh5!4Q`Th~!I5MOCyIWm^)Yts?^ANeF?75mib49@S; zxq`P`)eersc5aTC!*;nbxmH-D^Io^5uQhdv)xTTPilw!@337WDij{&lm7u?(=!=#i zb*K}>{EA3XBLHpSByPf4o;iYPo(28ezfi6uGFXNr${kc&a{4nE{~!TDOQayTfBXLe z75dPJlMuMbWCAx0a(eVcg9#M&kwcLV%5nY)K+ir3<$-h31UU=}IKBaQ5X!?y2y8w> zFJj;iZG?Jkk84G1^YSGWTU}c{I9ZXa+T)<^xBQy#$R5M2gtccALVviGOO67fWD4_Y30 zm6(_EtgnK-P31DIjIiC&|37p>ge0aYk31mfFwRu>`}W}eN1W;EoU#80o3ItgCZzii z%|MassGi+7_+(L&W6_bA)vyJBgJk(!I+rCmpggKj%vJ+rl_dAsNs1$gkTddP#amq| z<@BC^ytnlrDab)Z$XzU6s!7S?N_TP~`djp%Q~%==_9^`bDm3oQK5K!@u~Ce-w{zcY6O>@p=qX zpVkZ2-M{L%lpH|URDJ()h+VQsO2xVRq!K$5>K*r!>7Q9O5 zDJjm8bk*i zH4`20(;+w~F3J1Ti&A@PRDftfIBGSUvkOdGwG&QgOu8TL58^-$p=UrCRt6updU6L& z9#)0`x5x)>a07p<#Nh)JI8NHG_Gxf$nJ1Y1-Tx5}j282t3&(PPgxp8d9?0v{^y*sd zov$&mP1d&Iy+mw&5#DO~k^k`XgDU7}AGZGqE6h;zh^P0CHR*EgV^98nDTAbNiEqI) z!MLOt3}h|=b|2R|q`;#UkPt&;T7PcHen1ApoFTZ?I9R?4UV`}y99(E|uWGm5i|4pF zctb8J`Vv;ksiMuuJuNpj>CA$R=W-$|yMf`5g1AE{yMjFkgCsp>-$1~GfRwIQ+(E#E zfzS?CTtdKvf|OQQ+(N*FgV1JHTtkEa+k^RbVJAt!DhJ!v&~p?abatOirG3~?eRdCw zxj~nNLFQ7jZy^p)KvjNtjicwtL+G$RxJvubqxz7qA!dQBl7bx9Gq`|Rpnz7=G2RJF z`{V;aPR_zThtP9GAUY}97Ls{D-Go6->cTzy&~@@*eCX_}D%`+sLO~WDv0A3kiK)SK zz|~L8vp`-+LGE(dl_N&n22oN;;X z4wDH2o{?E=15k$<@^a3W=ks7NQDkL6&&(AA;KHbiAn)tG2?hc%6at@@9=RDucYM(l z0ssVxk>c2;_?{H<22+v@7`ll_)9j%-OFUbB?IcUVFiV;o+|3nBUTmq(&f$g$D1?b? z?KMUVeL!+lz+x(5H6WD0{9;M8W-G7D*6{FZ=p4!e>Qh z>Fl%QXGNyR>@)3WMW*EJv&BSA46sIX_8EU7rV_^YWae38A|?b_zB%*EJrRS23f8u; z)@UqR0^^%yaemDsv;=^;F>;rhh;c#%<5^ncn213F#w@M5PQ?5II?HPT#-hnEzH62h zyI=m%3FZVZw{#%es@-g#oLF zGS>bo%7|h>j2+z2m-%()5u4Z*MqAeBgir`{)x8{~1m%!t6HfgVi3`k`$|jrzihvy6 z6vAns@Xtv|A)E&aznr6#tVy8o&EZd7E0d4@x|W-i+O8dc>(DY^QnuJao{82Q9heH<%R>D1~EVcwhRYmLRTByYNUR)a#m?ce^ILuZsSlT?Yl zJ#0k@UtG%O&?M3`YPnL#{p{@DeXPI&gapGj_%_|soB)8QRrbb2la~NqM5$p z0Y{jWak$}={v4_ebv18<^{bi1Jts3=IY`S|$ zy_$_iZ8j@^&883ay-~fcge&vGX-#?%amB;NX)rv!lxYH!{UnjkC!auX@d=%mavhDo-pKvd!U{i zSfOdQWp$-BXiiLKjg_i2^(3#?0TG+gDLX*IW@@ooJ?gM=5`6eBNz4T5@6Lzy#Y70@ zQV#(PFvG5gvX_dlnL|Tbuo#fr?;GCaN#ESbWk@65r%O=sWf^?KbYIw<$ODr3ZyCL~ z-f2i$AxR%6ETyEJfc_Ktf z^y9-IXSkgq;bHYH#95WzYGVlc|6uBy3srUp8Zffur>Sr6W6}q_EtHzwtBv<7PuXsD zk?aiIQDIHWV(4tIqU`ItV{WsT1|^^3`M?k@?+f@%i3SKo>z@4R0}Fu(Ztq^WEUvmL z47BQ6fDNls2oTEFIRVUSkap(^F*S$JV*Qm)Mw`?l3n$w!6HDObKQ)f5NHpi-srgNSj;~WQe=uUc{8RJ}I zgCRk{%n?<(I=BlJKuOQmvb=4V}RpcA> zyz68uP7gZ8&>d0oATi9+Iyu7P>gBNKm8Y7dNjh~Vc+D_b(sQncV+4S@jCOaZKt2eA zx*+s)s6s*jKpQ3Z=sz#A5pG`)DS?v6f)HNYG@Ma&>JxunMVs$YfH)BZrBOP3$2^29 zm%5ZS{(h&?^KmC`UBLzBEyEUI_w#(`8z6xY*7}&*A;zZ3ymc7AB%U%g*f(^OhNUQysWOtgYwhvMR zDXc#8H6Edg{K-@x6{e3&B|cWNAX@Ws9L0v}bw1>dzXusY#fclc1K5C9bV0hNQzpGo z5zD+UP|!Jv^Kw^_v&KKJpPO9zGw6J5?bY6PVIN&zR8k-(=a7AMvuACd8KXk1KmP<0 zQK!yuoO&^%ZnhB3BcQryh{^*V>cWaNaqO5;-&=@AzU4Vd4UPdw7hb(fam}!FS0oJr zR->(hL;~jh)qjejde)IDY-#6IXZbw76WXuNcPjE&MtW^f~D0Sj!0- z)d>beq?lvABMa&dz@%|=?Z3!B|6bh=>I{#QVG1)3b#mwDO0-Fr{-*vSbdkz^BF{@r zJDhu(?UA}|f)T6Wjrbm4se~Rn-TNRN%DCoUVL|?Iq?I-b_6Rs#G@v%z+uAc7YMuC@ z@JmrdR!Dt4uC1Aj%dO3am;t~iI&rPsR^RjN+~#8&svKQ1HZ9_G>_)OpHAgCC^$?#$ zp=S$mye!W97Xm_n=oMvzGSP=*P2Js<_isRizoJ->v|DpX;I|^+xtNC>EX<#@JR+mV z0yIX+?{!u?K*2Oh2Pus@R4(6%8p>0*?nNFi2BVQ8w`5lbW|h5xD91v$aYGMz5P5(k z$23Y>=OukAMATF*5)|~9Keyg^RY``&if017Chf>ZJwUCTsUW+EdkhI#W-;$&i5xm_ zV7URdIjdsEUl>ZBp#Yl%!Ee8coK;vBCFdEhe!!wb8+N?xc2wzL)gZD;IMzr z2{YgHL)?fDZ(gMf-$ifu36ENoKg5REBX8y#*%bI8o!O*Y@e=6n<9%U zX&Rr+b5u3PM?`)#G2T#f_&@U6@hO_*$oHk@nt=0FBo7+c>U?xV6iPVA$F=@@+WV^; z@%xDfJF6%|x~JMOKCNRfQglnHqS8AF)6kuSK?z(E(wO?+9j4i9nt5~6ZnKGbgXVuq zx>LhtZJd-Ns%GYZzALPz-3Koksd5a4Wxm8pqB4Bb_QcAHA4AV}0T}w=K+xZdRxH@# z>W?rW-OsE-)OW_}#zwSiZzgBiA?qxflqM++3zOUL<16n%H9+fh;6}+pd@?PY}mCLbs?$X##sZ1Kaac zWQIy9tViJ^-TvQ+(bnM8e8wN)v`&{0WD2fM+svGg(gH&NoTM& zx-08qIOk>fm2Iez$wAi{0KUx17Iim=P2H9x4(-7oNF?v!j69AFES?5-5=PYH%o`3I zB;;{BF?!4MEg3Ms2fyLVS+uw&qmy8BbdvPd2Rn11rp5k8GL(S_B(Z$(2WP-yKS_qZ zYQ%9?6S;S$Z>`X|I%1yd6IZ$7+;eysVh&5PDtY9FKFN} z7w)9*P&mFlCfYQPRrxn55ZfOx1Q%}&meTh%znKL@9 zUJu?v;7k^~4SOsl8}RU+&+HdrWBMQ#-nikstUXNUDqwu!;txfigo<-33Mc8XBM#!B z4;>cX+Gv?j8lTR6Ur>WhNzN6tMgM{gVG9bWcc)P#qP5{Yvg?~q89v@xf4NW=pN{fC zPy_ont!9S-_}u*E-%$pnrgHmD31z=z+cMw{4Qnh59-H08<1qaR-H-caW%HX_p z{DBzDGld5-JZ|D{+x+hAg$)7JsAr6~Q7Gh4o0UHo*qLilEf^22nqUJ`aF{NN@84SL zFPIOxyCmo`VU?oXiaFg`(j|#x?nFEC{>agOobO#aRJ=->bcFQBw_&ABf}%zaxY04? z`UByA8Inx7LZrCoY23ou!P`9X8o<-N?bkTWn;Q>S09*)F$jIF^X09J8+*ai)WS9&IFl7EskQW(&*)<0O6II4hEx{sERUV7o zUg8pnWl5x6Y#9~;I%UTx>RhLsUb*oIx+xEewh*N4ik6`Fh zD$ek?`M$txXgAjZ;m*;|(H?02*`e;@o9%LyVClJ{_`pKAOo^J}xrYR4hQIMa^CCRs zv#_j)KHUY=t~Gchr%DYaslA7(3GrjgAs}D4)#k#-jly(WRA@uSfK>lvCFQ?b;tt<( zjknlJ$atTmJ?8hhtZSEb@dWhxLGJ;X^IzwhjRTlF(oivGJH;LV#ZtRpEH!* zbg$-rVyV~L;7doT@%U)^H#19WSFNl|%3`zi;wYyy(H=QZQG!#4*q~ci$@+j&L5b9B z=oJh5J9*8ltl{Cz=S46i1}$lWr2Vj6QC`FGSY%a2SqyI((ed=Z4|%Ce=kODTaDk(8 zsxw%E3dhDQVQ?5ssqsX>QI+$+&uC4DGS<= zXA{1}g(D2P8rD5xwl+jXy`zMorFRW{{dOFJ7qh~sT9qRY06!>kz}GqE4S0Btj%v?xg8C>POb;N&ZbPSZdf=D0gTI?&MT0vpz+U z40l;-I-A@O0P)91j)gzhV+XrVwcr08aG`NDlAo;C+W`v$(#Xy=BrydE56;>{b$up{ETeZ53#GfIGq0Is&Wee4h}#{;(o>T6d{E^&IEm=_tWSq zNGeId$}fL=UDBKRq)I(SL>kMMknb$x9rG({{&}G#l^-2sXPX1(&CEA0-zAq8s}cj+hVW+2^24>0B-1p^wwF3}h{JDZpiOqUasXa%=^)_eI-nMAKx0{@I7egx^O&S@8t1V$m;Z);=b&rSvhi@ z&G3S&!ofrta#Nj%b*6}6tSg;aF`1Cs78M&-<8SwV?n=_yNMo)v1 z=YrLS?RC+9WM~oD!A=AYZQ1Nn`v}Ndjt{E|%O=eER2&a705=T{39riN$^VXsWQ&}} zx2QK%s#$vw%C_9SD?h`R+_vnaDw@6XENQDm2J=K0i9Ej-swlUqUbq5w7riU2bOV9~ zA~`mu-@0Lt{mtw;C*Qhv2%#LeeYC6Sz4Hm7Ft_;m8yLHLaz}_!^gYh%;A?N7$C;#V^nKB= z#id^nyuS)7?axHx60JL&bGic!HMK z?+r%g&6J8h4RH0biP&IXxLFuafrfd9<&`gd$H^mX4LDN$Tr(;Pw!#^f#jZhQ7ooEA zKR(`GG#Br4?#RxD4iKYF>`>0aSB?FEinXPvP-5t1o5cYXr?&oVLs`bxN8vEKQlsP5 z3lSu4lGG~f15!qaOC-I-!#|KBoT;r^pMo&;#X)sYR#7l1xf(idhIfP0okE(7X`u7x z?ZHy}z;uYh_sM~a$-1`iLewE$;^B))*4N-d)J2_~>Ju93nD93vx+c|;Z3o6D(#t9l zq5_|@+WA&N;BV(v4c5HQO3?mz;Ey>8UVhkU`alAAATaN+Li-{Ec@tyKX@%yM0_L{B zO27{N-f^`C(H@&W`m8KbZJ^%Xk4u!#;Sr%9eVQ72YHMT{j29;cLxR5vBd%_y-d(LW z^_>t|nV4inx$&F^w444bKa8%ft}C`vvL=>_PBJs)rX(>6F$&Di`c_YH5b+6907T^5%+2y_()R((q zY1z}-PUsJbyMEy$s~z1HiI zal+K-rluhn8D*=lq`}U~Lhm5#IdV-+{PjuUc}Ef9<&cN)!k9-IsgAbmcWqRsnyf!C zE~JOwK3o@|YyG6K$(yT#TAA&cW|OTG;=^+>9rz3(1kp-#i?+$zg#!9~U|cEqZE>)arUk4iqi3(_aUH5gZ{9UdhIjOJZKRu}UprEI2=eRTB8Mh7Stry^kmdoB~|{ z8`?8pJE=u5@i}RA+=6r9bAX?)&&}66p3mR?Dskcd^RF?euE&RRhK_(r>>c`ANt)M# z5vx2sqe-x9+1tO4Mgtm6N-8h`iO&ev?^C~a4M4)->-U*ku_u9+1kvYrKXpZemPFC# z4?k%N0sjN5&!2wm$^6H1*8hHG@r(V$5hJ`Vk2Z8jP(f z74d}7D&_TZ%&88cOAP)b7hYKDi}2wbN1<1N%ZB+y#x~z!9Vp+d{}mMN#wR;NBrqLj z=p!9S8#Uu2Cfv5BX-*yie0dGu2M83`?20|iH9Wt%c+Bk8#@ycg;%rf&gjwUbHx;2c z9H_%2n~{XVFy3e0Wj2Zu$Z=l0Ho-MmXpHQDW2{Y5uu$yjOZdr#wgIK;4!Y36g@2}g?%ypDF_vsnW#cm-3Bf_Mia;N59E3c;eRzP6KMsQOuL=|}t8N_>vSw{s2z;O*ZPq4*!0*>VA!)9_0JG}X zX*6<6M6rQ~^8ecS{9CZI3U8mH0_CxLr!H@2A&c=HAy!yYYd`m#N(ITodQXV(2}$Tf^!$$?`yb&p zH*BH$OJJx6XEdH*)gplkQ}b%W?%2)Mb|efi6cMN7U_8DC11FUSS7eO_C#|Bv0Kdo2tg^CTl7Wd*PunRLbM$dfE~=T z*JelqX3Cwz_?1`V?RZi7Th_=y5UqkavSCs*&#}77+oSe9Nco-GL_n6Gz-q*xHY<qh2Bt}e`To~8i*q(RD6!3wy4LN?kIp0KxdN2^f5<~g@!S&=;)Q z>(Ae}hpg8l<`#7TRn~z3@6vF&3Dxkm1U7Z%W7|R2>l3FuNAZTzRDy$VqUMG-f^mIE z8FdsHLmbUi%8|u@g)4$rQ(SlcK6QWU-s!jrM~{DF|NM5)Y{Lgsrq6FX%@-g*rTt9k zpy`5wjr3IP>FuQHf)4Z~p5L~bFHnF=;F-`4n7IL4(>=W%HC>p29^LcXUh@T(#*YJ$ zJD!u~3nidp?)NN*kKX7OcxN16$vG&xU;~=){jcTl)&qh5jeLYQnl8}v_`MI8Img{x zwwuIR(dp-o3Ur(a>!MW1sc29C;?kt%R5%RJV&ptBVR_OeliyXx6edKyvJOCz2++ty zY`;RUtuWDuN3F-=y95Id5OyH&hkTEbgN27+Ipe_39XUwFf5nq=Tm&V{<0bcO%q>Md zxaKwNOjYB?f?Io{&P{%?73s3uIJGQv#c{^5+d#A~bpH_i72XF3$lJg-ek=Bwd;yx zPh$2qoR8bi>$V6Tz;!b;Gwhf5I5|&Z2J|@Ww_PAZ9{W(r!D&4}3qf<|$lY}F;c#xa zCdOgEbxndsSKyZ%RAvn+VMnSYj^OB4rjlB_(9k;$SCmEOamUlqIdsovDz3u4LY zAfN^w64yUSbbogM=GurV1(ZTW%?}@!1RR`#$IVjB|M=%%r{7Ryssw;V5DL58i6z`5 z0D(TGJjEq9<>w%=e`@IDbtAhVRIR^*mRH0t$_PQh%x4`7{5w)uEbV1n4n7c4;MqRCrt|Cgc(DK**XFncX=k-Z2K1r7dk4|}bui6HJ=#;1i9fiSkyuAMdj7Wi$ z5ETD}zBzZn-<)RbE>>V-61>RN4egJ&?&kzrbHS~hPrXSQ#aZd(YrSvbXo8?_S zbXz28#;(6wV#aa2$4=G8T0(zS9eZ|fzyt6 zPbz9a_-Wv10}9>Sq!Vz-x7KeD3;_*x3oxl_3wy*OrN%$H9oEJuh0IDgyB^lYQQP=_ z=vDC&mT1IQ%%5Mc5xs>jc#5i6_2u{ZH^5QUbV&~A7DdT746MEYj8c_f=dE# zkm~@RAm|SIwv?=I=AJX|bRy25-%NfiD})x;OZ!^116^GvyGEn|H|OOE7Ciddv&rUT zq&%T%!fsIZEoriP-1+4(Wb%F3Vh8=&CU{(ELf^_-%W}<_PC_A=F9g>lA(;hg;afx4 zr=wGe3n0rk#t?KUxH;eT)<%hq{5CLLV6BbNjr?FR8spfR15$}cAIZ`i=GuAkeqHLfKnP(Mpn7doM>VOR52@``z9MmY=1p$T zFAt^gD;f1JNZ!n;i*ccqD609?{2>)l2m=9h%H%=SK#`+K{sc|@S>jOdmZdH=NACPy zrmq@(+^))FE$&hT#?FG>*v?Tt8YP>uKA63}7*sffo`kLQ3p|)u0L*KZz}m_Y3=s*b zheZhU{1aQe7^E#X+es>WFoZj^6jHpwah~_D3Hq6p2Xyi!BNctsno`Vd$0T^%?1?>9 z8FRh{r_^zczbZ3-V`s`iHWK@Vyl)E>MVf>%{JRGThIr_jInQxW!oGU=X zD0`B$bAkb_i&^YF;MchWEo09y4@VY`Sx_(y?QnGh3!TWZpg%}1Cu5H8rZOTb7A=MY z!1WpATGg{ms~0&4iE&^S`;yd)(ZR>HqMeOl3%F*dz#p66e_D@K?MVMw%*V$&OIGHZ z+*U_Eg?Aba$xx0Cahz^3Q3b!W^eqeM+HICTKwYHrvm4YkMK;+ zx^U^2fvPTAm}aBQ`kvt1O5NWcEba2qo~m>bHx_D)U`Tu)R&{;>?2a?c&xYl`x7W)Y z#1xa=w{ZV{8EHIDYKbj#XMwzxTC-+~C*$M`eL1R{=?HE(aY>xTQBp%C3)#OraKn@32zD~Qu*2$?0AWTAdaWIAy;Bf?nrKD^daW66jaE=lpY8KlHpC7uC$}u!=`pvX4)N{p zDW%Sv*;UzEFFGU*=(S?J^)*EnV}j4)-=PL~bZH#mh%-A}t)Y|%V6Zj`1{f$;df<@2%i1oGN!C(|g+2=L+6+FSuxYEQSP z9h@ir4GZC+MP0nYGb!;6p7~c3GcU2Ya}*t->C27^x<&lVCPeQ5IW1uD0|!;)UY`>N z7J9jN3Oof#udB<+_J;V6Ke0`v5Plo%w7@an!nY{GZimSeWT(*l;O_*r_x`}x^zQ^; zAE8_Nrqme;44$AD?-T8E8}v9u?~$vmsdfdUbvOqfk*m+Y?h0D>IK(^<8LSHq2d+gO z5xRw1z4Xt5!`Y($|O--6eW&_K=WQ}ysI38f4$vBlEfaND~6$g|J8G5hx2KQeC{ zsY^($M|dH44MmS!<+tuhuzAd}7D9c|k)x{u%RK{cmCI>B9+M}HbCF*zFke`uBMr?c4O`Qwq9 z^2!`YByBN$y1JH2wmO=xCf>}}_BRU`OUEkIe%fz|Wv)}_ecoP#>P^;QKxp;d`+wAe2}5D80GCFTa8Gz}-T z(%R@s}h)cYD}h|J!O!Y<5@Q4NZh{m%Q6}{{Jqr`=)ircC!@{R zE<=Xrny1I*GMR3ggAO!T7s*uoex`fe<7ZX>%FMzB)v}m&KBH`NPToAfkgZ}m>~?>Y z=Q3F~&OI+%-ZWL#4B~fI`_3W)t|{SsSJzL12{z}N`LKUXo;tn<^xrBwyVL9Bw1jJH zmr^UYZ~^_XNMnLWF2s@3dk`AjP78w9sWOR->?sVw7E+aiP58tP zx3K2P0pA(Kh;`E`^iBeT*RL}9j^wEbQvXF?;GF9w8?2HJ2mWa-_Z`j0vQK65 z8p%@%gw3xiXPw~58gzjz04Q|sW{sVGio$bLf^)!M-u8b~L^qx214rA>c)R}P zE_zM8UOBS72l13q^8?6i!_b-6z2crPe||pZBxn8Dta=Z|y?zgR)a^A6B9QPst7m<3 zlINm9y8K^MePvJ_O|&-d!QI{6-GT)O?(PsgxNCwF+}$B~77gwmAi;HULU4EPzu+;(AcOzmO2`b)btyS7z!w`*pNtvBW?5& zm|meG00R>6e7ES3w4n5?wrSRGft#>RdjeC(8E{{os-n{N-U4pb`EfDnlaV)+G%M?? zSBBy+Nv8t_mNQ-+^U08uA8r|5u{(f!398VeBHAY0d${yJsA6NGEj{s& zyDfc_*W`}u7C{0hrzNEQ@4`^n;YkBfC*kz}ebrZ&fiFw_ogbs51{7(B_KB=?4q+h5 zOn#tjLD~(8DYVvrnU8BF|GH0r^}50!9M_->!xzy?{$Za0ug9U+ARgyZF#;S0EM-B8 zBvH1Qj>A3$Oa@@ASdGJy_)kJ&tl*Briug`SV6143!y0-|j!?E>jKlhSqCND^!nHc2 zBMbh^{e-dNF%H||IvIoD2)`S0+_D#s;7GR{^4x5lsz+tlq%=k(Mqi3$OPj04b-=(W{B8p2acBm>#n+I;6UUtF70|29xE@Qs z8z!(qiv684L=eyW1z&cMXhzLA9`bMhCAp`_l@xxw#bxf8VJzqrD)C!J%&=Ysfxb8+ zC&z$cY+pAN+rmTXu$6((_ik4!c$k~T%J5$q6AxClM;94>MFDq*Rt%Fep(v$0xEPJ5 zBCy%Yc&RgfnctD(J1?I>2qLN3{1v-+Ta8k|*jC$J(h-CvT9_W&S&{ao56YApx{k^^ zzmdPD@Z-cf(Yj==4I$K2#eQ4vj0`?3{rcGyMq6`7OL?#`D-y-}oQLwk9X=SLm_Nb# z^C9J7A^NbBp6FNy=>dWSdF$UNC{K>7L9%#o47;POt%~Yu5B#>^Dw<20M&NdETCcE{ z1&;u-5c$m~(-nz+C@^8nkvu&jEVnL0dwW=^O~Nw5Oq zcd!!9(T@382uQFCmtySvy)VzHMK2EJjLsa!yru}IE1A>a;oSIRc6@H2R&TlVW@ zzVeaJr;sC4{n4!op9#IetDXk;NSrLL*dF3YGm|Za-;8$_njGWrE|q=N1ey}Xce(0^ zk|4Qo+-s;@@}{Ky_VVVS(Q*s8aJq%=jOct0j3?O$#QHc+1#JoU&3cmDBGnQQ#^y0T zOhRnQA!wg4C=~ie|BJY^zAvcWnE42m{WAckfTe(PT;l7~R7)w07xYPzz%M2N1a|V0 z4DXI9nxM>S*k7l@(%TJLp;J(5nZf_0t^828kmMXoUl;>I%1ZH?FRnN5Y255PzbH`$ zulVSL{q#dS63mKlxWAb6D?ZV83SQ5n_idmbd&(wE@pU?u0LQLb}^J?GhPw z6=aR{D(ey%KB4&Nw12owpot9xqU=ph;Ztw{q-e4$UbQLD=#1Z~`M0I3XY$If_p0OG zcXiUs?H?>NmN=fd>dR?XDNLaQ8jBusv0ho+7Rz4HVGcKFnhoxzUTnD9qD4K&c*L1a zuq$!H(G|2!s`4X&8fU}~iwX86c&S^}Y^NkOWXqL6q+ZSnb?#7gg6@wll`H#}cv1ow zSDlD5nN3~a)EGoS3D)Q>jX3pXEX+^Sp%iDz^G=b&=&`I;=_dq-&1)mi=2tMkJ59)$ zcMOy5j%MQ>VCgH4Sk=O~b7R%cjaM#@Y#^N6M=p+$W6c>UziaUkHaulu!ZAxnK%{EE zpdlTSntGN!1}g{$N9NbZtuVA}ZFtlz>wZ%C%AfX&POT>BW4|@AFN!w!GYX9H=R<(Y zp<_q)>#rY*toaS0Tk;;ogfh>FaevXvmL^TDf{TlKR_ue{@Ce23FHAWW?8cIxEFEzs z$1hY)yPwCupb1Nq@Bic%ImCfs#N{Vw zyospz1rIro0=V!n5s(%X7|{iTVN~^xm>65GR zfsN{QN`vf=VGpJsUBsgO6qV`hKB@%f*|c=X3Zz!YTk5+eT7G02+-vX)pb^z(EFN~R zosu*%W-YCnXJs&^8(;8bqe~7^?f&lHwfW`T96N&jAz%U#r<)#K<$84p5vQLXUG(}X z4C^~$k$A(xjlNPjx=iqC-ARB_IlD}-SKW!{`0V#&46(6gBV?Ym9=LMda%m&jzCJFi z9uljb3%%T*D5z-&nS-~BmujCvm!ONUSwY~!Oyj92o>7f}k0lE8ph8E6teNvMTkq+D z^pa66Ka8Tv@%<0gK3KyNwy@`C-;BcCd$ibzjM67sHY`I|9V--W2BB)xA1$eNxKKhm zos~=c#y-ACi{$0&d4Os?uWGmUar>MZ+R|s!Ksfs-XR!L~eQ0`(f;N~vo_79hvW4y} zQ`8}7^Y@|w{Rh%~ScsjL{~iP=E42bXQt#jCiFKp3{&Yu&lz5rHmtcG3q5ft3>GcsT z*OY#D)ebDLkYx+ezQEaFRtkc~>q$F%L+ZFaX~;K-VdlMDMYV6`5@2HK)0AHS5DKX5VuVil zx2Jm$wuEb_fpKHRtUnS1RqXB$x^d5UjdCub^H5-+`CQ~6Hlt`Pm7E&m_uFXi$*^eh zeegZrB?zMU8{l`@ssNA&Wp%$1zT2~2#8cu{^7@@9=UPL>Kw+j_b(d4&Ev10J?wIy- zJxc~_`CZAVSTmkHER{G7UvBUsJF_hhb51lH5h0(2p|peLz6YJc1~amwcLdURmJ(52 zXS;q6iAK#b=9aI8Lj}yzRZcxQ8y&|MXV)w(y6ws;4zqU{8`oz6|HTye!RMuxbKhcY zNRM!cvec{Uo}%9?0lqz181teG!w}m_C0&ySZcvu8g8d~`uTbjE>8HrpQ7EeK8Ib=Q zR+S;~mW=%%lfaD5@2|n#`nNK-oF!ApEEv*6?O8{fi?&3$dYM29ImE|bI*7yHWda%G zBD+d4&b~Ne?<1!8jWNkS2KB>e_*{CBB0)etW#r-&Lr#se0DC(W&uQ zrFpcwQI5r)QL-CO?<2EFYr)W`N5eHAvJ#7%)OAvAhkCPA%s>HLPoa~@F z0009e&N;lvgns`jTzM1KVL)Z77A?*tT!tOnZMDyQrN99nNpOF|f2H6EAL-}D#^>WH zR1{dlqf;198@jNNXE(1zp$6plZ4ho^p8LEgt8n>1*KHgPMB->b5)N*pd^*=~$Dyes z2*Cl8rO*Nq2*C-GrRahV2*Ey*rSJlO2%iX{2D0}LkZ!3$Zt!8p5L4_oP`u)GcbBb6!Pcd9W}${)m?n%P0$_g#`BSi_yLXd$H1i=@5?__guF&Z_Rx zV_2fDQz%Mk77NHrW%hYGN-7|D&tclUGqonAyr_dAyKCrp4qFhomXw|$7Sva+#6#Qt=s0pJj`-cy! z-hQ)$^snZM4|{vfzk_PZ^ivbBf%&nfD5KHPjR_OBb;b}xw6L4Vj*w=fudXO?pfRl4 zl~)@a)*r0eB}N|xG`OTCtlG7=IOV6#L8^`#bM|zFJg*}y3`H;Y^sqdyRjp|SZ}#-w zJg=uWo1e>q!N>K1-&yl6net-7*r)FHz$>|DI1i$n+%sxejXRQuz2L1o(zK3J(lA?( zzzkU`pJtyu84?CiN!Px}SDrU0MEbd(B6wO}$qXn&j=P;|oRnbX!nsWK{NXM5ji3y@ zxC{OZG_qHQ_TB*#tfbtn`VbD2!%tos5pH}U*CrOW!(xm*<&MWe&Fw%;8NB9>e|eYN z2e1OwWx5II%FX8YXI5I<3tJc=0_8NKH$kdlP zn3SZ!5O+|~NvqT*jzAoqLJzYS&p%ZoW-+Va6?zv@HZ2H{coSA@5FS&6F1dfCZ~|T> zB1l{kvo#)%>5DFTUxaWZ9#f1ixpjm=fAlN>5F>;$@G43EemAaOAgZzMJ? z7?AiRkvAio7LiqO4fi>>QI*FyRF3)f-*z36bXcFZVVZWGoOIax+F>q6=CQ{8F*2E-`yRrWBubqmKUT>k+{3@|O!!2~PepiVp#{(}S!L;-7Hy8rQCl9%J(V5Y*#{LSw3IC?7V-Z9;MYM6kGN=2T0*9|!=2-=+xLy)d#1F0=ZasvRobi>ug(iL81hVS<7^Iq`$4vj?`i4y zgtGmp~=9tZyq)ZN#a=E_MOAHzIA4DE3<%$e%V;dzl+^dpN6eA`M z<+&StRir9B*mN&;g1MUoq)xnzy+-?xC29?ZMOl1a7tfOIoWsN|WEqJX!5BF~BI9K# zQ$x3NEP1#!+Bc%A{3y5?S#7hn0!EPswf%j3qWDJ|6Wh<=ob2Q}()V@RP^FmgYcz5n z9K;~i!=X=b-zck!-ryUAH_B=T-0j;D`MUO13I)Hm_ckF=4}?CsdArqDbOxh&y-`*( zYu)fb96(tyI)U~6W2Jr)wfr|-C_R7^-TtqsE3}8c>aN1#S4{UEQ<}>5EIIxVu?7ag z#zcjRcUWtMYmPih)#62u^wrV5JYvD*(gIGnDRpN4MP zKkxNos7)a#W`gm{Nl_>sC3=`qoDK1gxaZD8htgulFAnHYMuL3cz_;+}QAUJ>XUC`Z z=*fDk-#l*tmwgS&0%9C`vc3kr$4B|m0Ji?}N_!>#0JBJTPvE1t)Pb$v7KMuqdIB+D zd9Qd=STQ;n;vSQD6<9Ggn3b>|@<60#5W2GvT&NqvEi45X6$Nfl^)&jeh%>PO+_j(x zz2n}Y11jsv$z12GMILeu^edgqM7*T_tWyc;Hk+--H9f0*y}bPqjxwi=?a#5^-0!<$ zRK6>ZRF|)AYSDC8JN8%d6YB_DZGix7wkZcw9_hFX8a$T1C5ePURN=djHou{S`X&`* zQJ!^|&Y_*BQil+a@6NT(v3u}Zmi*zsO4M|G_I29cJ2TnjqU#E^CBb@PItXMLs4ybkv`KVPz!_VtN==l9_%?V}QP-P~tMM@74)?w{7@AR*oR z5LG10PC~jl-9Nny$khxyS*Ia4FB5ACVt^^z;K)hl_n`w42z+WglT|IEwHo;JXdm{ws5of^hx4Tu7zEudQ{&c+2Xgy~J@&Y*Ud>o~~<{%AJx=xG0Ora;qM*5SWq zWH+yjoOl>sTMuBefxI(1l=&}RAct#-Kv)B}7g_8%dP4aZq?H1su#gyPjcwE`b9y-u zNt)v+h_Dc1Dz}*b$TS2N*Kl4_`e8!Jp^nqFc;^#K@jhzo6FJW3%9f_Q_PP6c!h$bzcCaBik>T_CUgxRh z6!sESm{1>5JY^>Y#C%z`4C3MpN~k+Qagl-J!1O5on4RzuAJKOf-P!_y$`p@iHwML= z`p_v$fGP`ccd}$BumJ8&tzW}hKx>yTT$~{Zb#abcG4_3O3#QGkGEG2uhY&xN5Id&F zPEK}04nE?;73;5I))*M=UKAj3B`g74lh)(-YuGUcCancUMu4gaAJNg8VC5GmmhURn0|%yo17}MpmkYd1h>!xD z`FOp8ym~Y>V?+FWT94l>!OU*o37=YL$XNI?a^RHQU4Vh;iui4x%qSZ8d;_9M-U=cH%*+eF|lJXY#Ft#`Q z#fbU)F>SHG80FI76ufjj&N$qW)xMspy%?~ug2yd~-U9+8;Y)NMPw#;alF%o(h)4I;!5W#}_TEu#<{+g%aEgFR+9TBhQJp0UT>B`aMjQ`k(l$@^^TIst#{LGRmJeg4nh_Wfo>q$pb*Odkth~kW zZ?xO}YN>p#5U(q_YTReM2F7L}?;roK#u@Z~wco*r*Cay!FVZD6GVWqlbqj}09bOKL z*3r4LZ}y*V={NM+>)-j`>J~io-(16dw2qf=wL977n^4n(8U_1Pp?%iYTK^|s${9Z-wM?Wnx4?u^%IU>5vfjc3lDlOS^zk%i1JQ z=f=2MF`&sG>zvDaw7Uj$91f^+ZHRXnT$Uzi`pK=C45F{Is)YmGqczUE#cwQGc>_)M z0Zp!ByVh;5z!w0%0N@qhwT6}>2%m@XQzkDRvg)FQsWM?tf69E~qc9PJ3mvIm48(&% z1x#(3PiSxTE)^AvwMdYBrtIn7nNP}ZbZ}(J;tM7eD)3y!m-&?WR`T+xVDSYP%CX0U z{U6tZI|Wz^1ujVtw2lt-4afz`cq)CPgc&jxUofB?hfLVFI3HNv?*3Sepmp5Wx)*k1 z&Ib}(A+j{&7ylEApId8Lx&)*5HG;ovrYOj6Kanh32q-`rUS8+Tf}B!8xKnmFD6^o1 zSClZ>Uf7w_m_6H#oLb}AKAQ@PM_;t*cj+^0ohuViq~G8773&j`tZU8B6EpckEASP* z33cko>815{p&J+KcTleBS#U55Off81?Ik5+T}hA>#ieQwMR0Xts68cAK@RoIZ{oRM zPy~nyrGuY|*NrHt@V%JEDlgmhavjSnO{UhH7l{AVwdXe!v)U{c>X9K`?m3kGp&w&O zd#wca(>AP7>JyLiKc$p?=PEsBaS6QaB46zKMd)Lc-jUw-Ka^8{jvu~KDY51lR>eWz zm@5ixGH=hO-1DDKboh}xtBAcrjdl1Hr&A?g1-!$Y|CC`1nfT7ICVA5G;1Yfco)l5= zNBMIqjFb79z`u)&9VW|vP(7|RWUerJ!*+T(S1c!eE?3nb8~dC{WStR@XS?l>&$A`p2W$y?E=g1{qQG{SJkas_@-_` zjm(xdfwqj8>8ofeJ-1CK`J590J?p1|8TpI}L?oEk`2jIZIW zON^!74L%PlDvYwYiaI?q_|Nq^r6O8JzRjkFn=_a4InM5xxe8wFWg0desXY+B-12;hLX? z<|p3LBIt)&3>kcb?1V15x7qC_dg`&Ui47oXaWF~Mnu|!V%M8d^@ypEu0+Zd;x4p~r zjSe2k>K}QM$s_@omGcI3Gv^MH-xLBFRqr?c=#1nA2o+~BsraSRp<+TEWWOQr37y{yz)-xCV;AA?1f5m>?inZFYmr==zA&RG)!80i0 ze5mVJl|M*}7%TT9dTFjI#i3PeiFtR4M$;`jNVB@NbnAEC`;o3B9wnILzv-BC^wVXU z^i;g82kEW^z;8n8*8EHPlU|Jps4cWzV4zDfHg4@#s4KCncqfq`JlZeBamWh0sc}?K zy@#yUR>iyL9Kv?_GrEX_%tyh>l)X#EpYh+z9`V#Tt|Q02gJaFM2He8h37gbz6(V{c zJnNV8bZ-qrb9Ab7?`Jjsb;fD(L~8uZpVhpor5;_sAky;UoVA`Y_zAX93j0}UeISzx zNlTtH4^kQp6w!R1KO8fj;`%_h(-nL`;ih%+Db;xKW+&+LyPcOjldoNhKk+?>ys3IJ zI0T@X^%Fn2f0z{fUc;v<)FEd3B7pfb^RwD>R>h=$WC!9>VybqI|5-D7MC2aG1*#HJ zX^&xD9v%C_Dqt)&cQB9^x7uMz*T9FUam0zOa&Hjb`t0wKhM%6%Z}imyB~g ztok$={$KAp#jh48O=JDe56<->T)4mA2hQ}S=FQ3`kJVU@U)Rp?El4vMzYF*_`pn70 z=F3qjQU-FsQbb-z77Qe-Bxoc%MA8EamY;RXfnAWhx z>{x7`xUY2aq9=qU$O(aZrY))X0BtsbKjX)l!(&z}06DEOr7)l&eOy$2cR_cWylgN^ z7-&}85U{4Yr z%pStn9Iv4Xz1yir7IwFq|Isskv4GX#YBdk+O}$+Bs!zoUpBCE*UkS@KW3Id;7@VPk zQd&L4x}^6xL*?CdPppVH@>feq&IL6-kF&Xm(Jy*+Y)*#^`gHVIQ9W>7^<|FL>5AoW z53obIOPos{W(rot*jPqGWK!ZNJng3&F=HXnUs#8bCBk}OvRa0 zsRn%_^612@HS?IqWF_JR`QNccq|BcfCsT1S`A;RpaG_qF`&y7DQ&8m!XQ->RA%-M- z6}|vs-PG6q3an$dzxRv~*KQ;`aBP3Sd;L+tb-erzw)(fvri`oY@X%yQ>Up#zSc^?8 z?etvd0|MdgUF(;;p>L4|+P?R#U&@A32mCG=jREh~!e@?CMkfGWFCf`*Z6&5ErlsDt zK6rm=yUC#mbG*8_KnOe$(nlfUfAs#+cauYfV0?78he5i2gCMcqF}gEJWzcz&5VEf+ z8c4cv;U8zl)6%#Sn>9vO;t}qS7_2YyOuunf;2=5Gy%C3rN_K$zzV`a2=u204p;@PQ zN*fu?ib#VYO8e+?9OfD+r<42%sMozCJ!-N7mPg%{-8uVor^%QLICbtiWiZy|x3_JP zefNB0RmsH%5>hd4IGNYgg|ub$s}0cswLZQf)xE5Q)A~QvRbj5$d^L;g$j25o1Oqea!e48Bo97pG> zAuM2+O}^a1DLatD)sOfimd#bePe2_o@pH)zWPpUPC}5F8&UWpU{Uaz426J2iLl`+e z@J&>palrKOTc9c^al+Os{c(wtLbN3S-j1ATZ>|~=A>Gl1#W2E4NE2Z*^WX~@w*aGT zN8sr~8a6W`>!mRGbvH;4Y_6Ekp#sW>)8FS}-fuwk0$w-VkO2O!CA@^1C;Ch$ILf|A zEirS&D_dN;NrK_SM=xQce9GnYGS@ADTVyf3hgj=| zAv@g=ZYklNeeuvmlL{i2Bw@t(J~h{``$|k!ymh62@h5Nf*iQ>%1o|jpu#EAdPGEg5 z->b9HZ922bjgS?Ql^XjIt8gJ@a3J80<)_f|L)`B`zyZrIngY4MBKHqpPc!}x@%94& z^Z!iMq^>{QFh|cVJU#_S7;LShvyJn5u%Or5J!WlwU6iSXrSyq?iSsgTIvz6~`ueS^s#(5yp-_H26|WIqoBd+x{os_tr-g zqZ5k8)W^PP?jo`rho4q4&Y=!4RzZ#RUM>ul?_qH;I>3+j|4clM{AuEXZNEztxW+_mOOO8K{-w9bkTjWcngSV_6V|)Z|;`Wexy; zAPH@i3uTtv`}h#p9)fbMxBtyA3F){04L|bi?%V&yyZkzed^h&{j)Gk4P<~}O6;+X0 z|H5EiWyCEO5f;@T@3nz+f9`@PhnfA>FHNbH$XMT9E+ky&xNJqQT`m-kQ-slCYtcS* zXtR&@U2kAhaa`Dbq+QPUiqz~lcy~uCKjS%zoTn)PfW;XBI`M?dDij9>WUYq_Q%CJOlbvpnE42r-Zsp%OTIKN-GMjpp=BY>zDVV zrM3y~8k`NAH~@%3*s9yYx@>bPO-UH*Cj-D10J6re{2+KPF)<{UjP>*2dWM9Kp{GZY~aaBGv?a~PR#=QWF z!>Mc|<^u(MG|B1Q^&cL#b#uZ*wIST9ut_I)-yyZ6Gs~k!Zt6>s7m(>~@?xMRl^VZKvgw`bhj!KOaix z9YG->>Qf7)+4zWPQIrZJ2<{ zw1O)^tZVGPRIFQ|K{1RDhM+3ODp_UuLb#9s1x_LrBXv9YE4B`YK%rUh#dvYu=6A{O zyDqjh-zSJT>Redq7_9|+Z6{KmmE~5q8Jb(CuvqGB&y&~FwP|B|#p#NTkTkxzBzaNP zsUd0Po>xSrhH5m^7rR7B?HqQk2}#r?MoG~ey~s)b!CsX{swl;5#J@pcqv?ra#K6H3 z3ZHf5y#CB>#4$<5Xm#M2fN3Hv99JGuK?ag3uS(e-wA+-{81$`Fc~{41B(?K%*CBIU z+kPJRCt+i7bcC(v@TnJY^&N3vefh>|&e8oYX6o$AeGV2zfVHR?}Q;W5jMi z_>|c8uuRw+V;tHkV=w^V-om`WJiiwvz0a38(AsGTA7GV@;CF+y#m&36NB;E-pMJ4E zB+YGS1>&6tk9S6vfq2M?g<7xkpFq4H!2^%75%xu4kSCe)n#VZwq|#tOU($T2H+W)r z!O8pFhXYOc8ow=%t`_a0`+aQv`q}msFfLn;Yv0^U zRqDWg)PWq{k$s`nl0aaBSbW;=GsF1;#Gl07^)uQGB6TB}C}LFR!!kjbhj0ML5m)O# z;?u;y_A^G9z?!VE<6>9lzhi=+ima!tM_Q_fVsFAnj?|nA#tE7p)X}L5QL2K75gW`L zVBGIT>W;9e0>KK?YLGOP+A1sb{! z3idPZ4ybQ6U{62a9TOsrPO7;QaIs*Smu66z z;m`vea7|=0Y6X)q1?|}@V^xv|;dFx<%c3>W`;oxjOI*N}^&)`@mbeBO5rC{Khq`YU z?WJ{XUyqatT!mGpfNWI=E-;1+D^dzA2_|5Gid=EnmE^#e%JFBs2*}Wf)SdomciIf6 z!5r3PocjX59!aq7wW)WN4s6cb7=)FoLRkMx!lu>3`-XDKwIul7((OfQq7S?!5w1sS zdQ0M}@!yqaSpCAQ%*O-1^wJDu;5&HhE6lsy@{c!Jh_~)JIG2fY*FTB zh8tyx<;Z@Ec||fqsrLFd?+H7@yjp>+(H;qm*Z%VBzA$KQlKXGyb!4Hzfv8Wl=*|$K z!Rn|_dFak~aG?TO1!TyOPJJfqnp|$p=+1m_p#+%)c?giQ9QcakC{G#){1H7SqE`ED zlHDKiQA$n2IstC1*M$9n^U|LJ%nld&A&r8g-Ur~uT2l-15Fu}Xr86^v`&M*kHn`A? zlmcS}$Qxi8PKDsU3)M|3(0@BIg;pWV5ew=VSZR~x zbc;hj1$Z`fs`ocYkVEYF;}IxN@(5mZaG{a$1;)s)2dkvN;Qusy-K^2mFf>IX*-e5^ z3=J0g8YINwMF+7?1JjNi>Ir%3FWKG3;l&5>B7@+C26qApUPppNGdYETSZ9L~j_3)6 zcod=lQ=pJSf!C2C(acZTAzma9yx8DQV8QTTg38#viV1~@(V=n&!ATJO^f1DqJw*^J z)G&Ssp+gY-)G)#!Jr6;yPpSyF)F`CzU@=61Y2kCzaiZeMKfmmULX-5k!19C_scoBz|LEchOfDuu0A;DcpkjiGK z6cEo@=%*FLd8pk{=%*w2esB;EUxOz5!Ca6n>Ik>YD5A(gZC`>W2f-jnFCe=Bz8@+? z7Ca0ynm9fz&iwVlwtI)%QD-@J0B*gEu*sTY=O1R_vNF)X`IF+ETaC&Lh_E%COsQh= zt6P(wsawPOKQE3H;K+lui>_s_}MFyts&aaTcCeO6v)Ym$^BF&Xi_k2Cv6#b1Vt&)9u`b9vG~ z2Uh^a9H#v8!QPOY<W@FEmuxRdf8+5@Btzdheu1f6$ar{fmD7q}*~Kz3U!4qHd)NcEk<snKNGg-lE4~eNx%tJB?niP@(%T^&5W1t_ z+|(NS07V{F%J-1(>*+JsEQ%k zAda?+o^a(}Gy}95HQGcc$#|ZPZ9&T!vIhlhhel<*r9)AC)S@T)#`h~=+o9Gr_cB}A zBBa0s>gXqrq-?A3ZEhjvvc(CP%vH*=#cG#Kl7v5pyaE%BX@3q;1tyM@{~WRkOsvtC zEv^E-ls|_@KqOV!Vh14T$`+qoGCSTYfy@D+t_1QN`E>0FL<4?kmrN1*vc>m+0Mh&J zaQjLrfs_;f9I6UTkS6^(^amWQWs6vVU?^LB*x`N%%C;f{dP@RA<&{8XfRIrFp#d4I zvaRxfv4sOM5ddT?TPy>te_b;D!vGa%Z4Ic4fQtI*y6!3}4OoZ!jk3&TYxenQ2{#J~ zOqrrkQlP9_5#&EJz(}#kD4x&(_4q?uT>KgdVblonBLL+9IA#Pn0l?@(oGC_MSSgFz zAl^l$e8X#`{rC*#7C^N8HBx$N2b2{M`5rJ=9pX4g0UsS838gP=HZa_5pxbO#-~(jHW&l1k zzy}y;_IoYyxJIbdBt221;e)X+6Dc8Ok*;@9Y78xt%=}44ayX#BhmyjzbdiP7oi*M( zs?V`k?!JGLsbK1#%>5#fXhVu_j>z^DF3lYmBPn5s}n0DP=cPgca63d`6761@9Ug=nOI=7H!ntFKK)* z+=5q>8FV(mNwiK0I;-X+B1>4j<;{q7N?W`|&4@ioUc6<^h+U@zovi}Cl*QX4Ad(7n z)&U4Q(Ag6wQP+E`EptGqTWxuc*grY~(SRSC6WCP*I(rWYAib|8Z-A85mU80at!hRr zS<>RIKj2^monZlj0d)3Y$@?5MK1c@imIQ>#TWysALdI$f4aitEK9~oLEgXo603aji ztPHUJ^6@&1V}kvEN}C689H7F0YcsJqHUWuFl%Mk6A008 zyl4hQ+{*3^5Sa&vF^6Z=)`_?ghi9eMiFKOhyS5$PK){bS?C_iq2*3fPKS^1B#Auxm z``~yX3-}csFKz%w%gU}Y5LOKM)0Q8hU9tjI950kpmme8gC-MM60JNZPz5@Y{sFhtZ zz(NJU?<>1`w9R*AK+gn#S_-H@x7L6vP<;2k^iDt|iM9Co#o{G868bSbfHLDLYWwX0^D)~9I_p{zf0z+7Hqtv@0G z1VjCiA?9-DN3-QNz{gmBviVN1%w+URU(K~K%@r&y62Z2-U@go0Z=*c+mhG-WsEPLFw3Tiv~?lkIX zFi>py?U5_ZXtR3wBxS3c?9ky^-9m{2N%j| zzyoRaU6}&#Jo+k(ApR5R{|T(!>1P3x^VB~B$vsTWwglBSFvq=Sk>fpf-Un%RzKq(y zF@p`0E;J7u8P`TNz!`&o0>)E_`z@A=S`)L_7gY~M3fLw}8fDB*v=5>>-Ujw60>)jj zeOG};-#z;4pF6M|ld6aAV|Km5OJWa-Yj5Wd-mA5%%%sYhd46xmA7JXrQNTmi6!kH7 zAlvEJU{AVMS5g$S`rSDiNzkphWGuiDn*QN|nGQG;2I*!Q-6~9qt1q1Zcfx*f+-iCp zcibLh!hT>}YkC~PN=AxnnH}_z8$`mjEX^gv4tmcG!r~J8u#1{hL8s=;BAPcJOYtQ6 zU9N^$%H^-3%*4>_*543i-HP$~7qV$rkLM7wBmUB0QP4%&qYWMVyUWy^n>v@v?9yE> zJ&FR$=yx-Fo)P!iUh#Yv{8k})Ik#L+yNKg3?m}m2NUmig+@nh0-_8De!MqYA*clP} z=AExZ*L<;^(=Du$mn2dpr#@abtJof|o(9tERQtJ!{BO|dQmu!cSMMt8_JD29)vB`L z-Sc0mr(75JuVSXUAtS|O$4T?7Y@fcG38$%I>B&!0zne0UQD)Yn#%OTDY*>q{*OF`8 z66naM*+LZ2HoD1RvfO3nh3EWRn2;*#a{nWhFQBoLc%&OHt71?6bIO$AEoR zh09iq_rrE@kR(td-?vF~DkqguF`1Lc|C`!A7|9sT5B@^bQyd2@vfvU2ep zG$qFf-su&7UTyNnn&;)&Kxbrv-sV*buv}}aOFRZiCk916X%*jZtZj=rdzGq+CgC})z>{yNU z{IzMUsf%}x7p6TCvp?|cd)8fVRJrfCdiRMSH>yPnd>0Fhx22evTX1^pwtUZ|^J6z6#m9ThaEJ?l20f~r`S=*gbQ!VuOQRfuj zXP?R78O(9nW`Ui(dS;@EmfQ2{X6gS7DhaG4CkcaRZpmcibD8%V?KEGQ7-_rm)n@8S z>@G@+B2>L6$(iUNs4yfl%affR1**s`B7qZgoP?3wFm9V3bp6Yw4QbWvpz(_yW?XRt zh7rDv4J3bTa!voi-7D|7_Z!X@tF2lL-L`Ki9i+`@W8;{0Df8gX7km;xRr!O_|IdNU z>i5w?Z9iQt^^pm2HeV-IkNO1SCukT4pL86{MS&g3HNj(QLfweWQ~sXJ5FItVm>L6j zj=I9I{jEu>frDg@ZxOZ9szuIQaY<)iWAy0zU2U~0XGa1O#6Na?%ebtGl_YYD>xSSF zB{AiRaxYKsCdmKs9HBeETuHRQgx{_;z>Bf-%R;x)ta#5y08KYGCXCBgFV+6B!%j@{ ziiFh?4;0pjgZT1cCrp+J6OQGm7k{u=%ewF26DAUlNx+!x->=EJY^lhsGgV@vvb1=* z>m@pwOnd0wDN7U})tYn6(VN^6TYbBp-Yix>yaM}6=_(9eBL(Zdcd~V&Uv%t7{|1&v zhWyhdt9)*`ic6mCifpA@Z_R=wrIkk&iPbze=rovpcS%oHAPVa$QmvDjXFQoW*5Tp* z#67n3P$6?AG?(wlT11O$c*&Vp_Ip8hjy`e`vmM_UzFB>wpD%qqz+v0CqZsV$!7(L~ z?-yq#JwB^R6sqCEwGl|gV|OZ|Wmjuqm3mlbDt4hBfO`*N$LZc-MebSI&xpUms=-<|#pJJy&2Z%KH9tfXvaQPhn~b1p_hC&_4MPDP>Ss%*VscWu}Mk7 z^L?lW<_o75yJ77hO-FtyR;77qyE`fFR}6D!&?_~$It?yOA#8ujUaa=PzVJ}_dnrAR zm?2Qo*L^&M)SYMvi?2h8{g8Y;gG!`lIU^6^ zt&JyErVFiqS7P;6#x@FHnAexgWdzFN!8^C)2e~&xjJerP29BNRbo~B4(B1}bn>M;H z#xVqDvV9M|_^*5s)%E7LMrYCT?{9)3{BJtSe`TvN&MDOhALJKEz$XN z5!?Gl8Wpaj7`=xupt32QX`?f#oP{Q?x-3$8ezm{Cav)T>*11_%8yx#mwbU}-elNSj zI!u0WcYZABK6|I9We8e9iuEwH*hfa@`N8v2k(^~P7R9ScQJ~e(8txJ^&(38qW)Q{{ z{sIq$=hZP$!?@;#_?)uLvoUp}8niO&yp=5I)BgHFk;H7$E5Qi+~Hy{olXV zis=n;w6QZ@nLBTD6eBy^%=7vRHcowopE@-iv))N&jd21?Mv3{nNEv^L?9j}N=A(J6 zKOGl$_Ir{jL;fVAY*NL7#;X%{_MaLYg7(*dxeJg(+uDH^xO^bT32 zqg5>SXuf3qk?A2Q7ra@tj1FJU7 zyXx_&El~&k%#O^%F1C|UHnz8-Y^2t{1oz>UTFaO?lUmqb+mT2ngt5y-&|3(|zF*ojJONXrl(7>JvGPI7?D(q3%&XL99i!u1 z`yKNPfO0hz93IJBh_r@EPdczDl^;FJW-!hF^8~1|YX37?xy;5oHHTb=+TApMloe&G zr%L%m*?XyM>Xe!;;y!htLVH+cHHVa*&vI!FFQ+zp-^BdPrMdD>2p-^<5#aqFWi4Ov zOVOyM!nVV#ZogfgvGS(Nvo%e z{4AB5euC8xTNcvmf!stznM16B=-MzoVf;R`Qm{^GH5omM5y=S1e^Hjah6SlU7E&u) zp~B=TFJ>j9>pg^^9mQd4fYQX$vO4cu_XqnN)idv;{k_pm7S~dp;UAb$C6_NHv`w5e z`#m9d?>^>QpLryu)~wMHsvaK6%8IJi(_Pg&b%rB!iS2Qt`liCD?Fy6ZTWieih~m>w zKh?M=Zf0&PUhBmiZIYrA+=yv))SCDI{jY#iw+?jP%WA~cHyXqjsuOAWwIk{5S|SEN zHSt}krNMr4i&_`lj_#@jy^}g1^i$SnE>DH6+FPsBc`CJe?-@3`&Uj582dD!kQ_R@} z>()We-!VYV$n81A%G=F7qmAs;rsh_=S8SFqdF*Em3{msVFJvX{Yq`=fEp7eQJC;hB zV!FKSqM4uCdP614iK){(Q++J%`kIxI%achqacz>1I!@QuMQ@KTqzp65v0Oi1tJVB~ z>du}@@3D88)>1nx1`e_}JsRPi=l=S@f!LKfe046+_0KSeDf4LRCrUtgL)O_X*2 z*k-ZC{Q#LtrTZ?V=2~HD2{^`IC({Krzf}3>_VQV1Et}jB!s_>ppb%d++UbT1Uqy{J zyD3?RsRC`mmCsT(#RFs@#xqim@TNkeXNov$*US(z3LAAc7 zU2F1Wipol!%3*%rGBIB@zt6aJVv@=(Ud(E0jZS7zcRBd{th{i!yiX>%iGw?8bI(|s zCHJ|d>_TQU$D-8k_2>fg42jT_0Mt&+k#DfFHCN~4sk0}OH*sh})*Tt>mJ;jrB-Gy5 z&_x_nSOPY@w#BO9{nSi4tU5OuEK3j7ci33N$j#Ic*IYa4t{(f8v*db{Mul3B-gOJT z*8%J#bL3joWlP};Xb$vYPdY$qMtt-uRK4@L@#8&II(Rdyffr6bE$%{qT=jJ%YKdoX=Dbbzphq*W|GkXQ%3ZOLf#=Wtp{9N+wt0 z#13Pp7kJ)9^~$F+_m!;85jA?@40Up3zu7z4+&Wp`5Scpp?qlv5s1$CPxmZYPnR$ze zZL5D+PA-i8ea$*Y=i{iuw@o2t{^Ft=rZ!Lyyo41rH@3jjcYQgJ31?9U^4`tb{&!3* zWr`Lbb#jK@awWFm)TDk)clxv;j87$Q1zZTuCwdZ z>51+4vG$W#Hf`GN6N^@ULhKcz=6-{3WajVuZq%UaedY@0SuM9S{M0?mp-$GE>gurp z7i&z^j?UmWZFZJ&xiL9F#rlzdAlLl)`0LLon{QzG>-t%#R6eaORvr5dt*0P{u|^ji zFO-&+$}Y+dYt*@|V3x(KzOm9(GC)l~gxuqg6p=R4y z)bf>e7it1xhIv^!*ayrxx1;V>o%#~1yI5~Jo7Y`X3qi``Sz)XCpbFRSf;?{eI95~G z7{aezQee%8EY}jSFw_#=)F)XDU}Gn0dC)UeBdb%Wceh&n^|<%y?VHsXX;Jg_qvn-G zgUoRY*AGNJ4KaE>tC4NWq%Jifb!3Ru_BP|PMCu~$*a=qVUwI~h<7cEEOzO42_=t0u z^i#cU|D#x+%EbXGYVK^;r&#U^H`&{7MIx$pkV1Z&)zB@A>aMzSYFsjL4a=1(^THfm ziJF-nA7RB(bAugMN20EtZGAJ#k&>EP?)UkOHC{?h&)!!v;9KUI(%EC_Lc07_=Cowq z687WN%Eud6#Z+3Vm}Lk*bvIMr7nn&}Ha$OY1VnAYI*Zh9{AFTs^@x0VzOE&!$5;P^ j8thz5O;a3Xb$s{*D>tp!PX&(N=lT9WWV!DDIcf?3;x`Z< delta 52924 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