From 3a22954baa620bb6fe7d023ed6a8ab3bebb07c91 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 9 Oct 2020 12:59:38 +0200 Subject: [PATCH] Improved the ability icons and added separate icons for ability variations --- .../unicopia/ability/Ability.java | 10 ++++++++++ .../unicopia/ability/AbilityDispatcher.java | 5 ++++- .../ability/UnicornProjectileAbility.java | 11 +++++++++++ .../ability/UnicornTeleportAbility.java | 15 +++++++++++++-- .../unicopia/client/gui/UHud.java | 6 +----- .../unicopia/textures/gui/ability/cast.png | Bin 715 -> 302 bytes .../textures/gui/ability/cast_original.png | Bin 0 -> 715 bytes .../unicopia/textures/gui/ability/disguise.png | Bin 838 -> 315 bytes .../textures/gui/ability/disguise_original.png | Bin 0 -> 838 bytes .../unicopia/textures/gui/ability/grow.png | Bin 656 -> 546 bytes .../unicopia/textures/gui/ability/hang.png | Bin 735 -> 746 bytes .../textures/gui/ability/shoot_focused.png | Bin 0 -> 488 bytes .../textures/gui/ability/shoot_unfocused.png | Bin 0 -> 427 bytes .../unicopia/textures/gui/ability/stomp.png | Bin 679 -> 1511 bytes .../unicopia/textures/gui/ability/teleport.png | Bin 768 -> 0 bytes .../textures/gui/ability/teleport_far.png | Bin 0 -> 411 bytes .../textures/gui/ability/teleport_near.png | Bin 0 -> 368 bytes 17 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/cast_original.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/disguise_original.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/shoot_focused.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/shoot_unfocused.png delete mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/teleport.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/teleport_far.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/teleport_near.png diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Ability.java b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java index c6428de8..ecbbe0dc 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/Ability.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java @@ -6,6 +6,7 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.entity.player.Pony; +import net.minecraft.util.Identifier; import net.minecraft.world.World; public interface Ability { @@ -47,6 +48,15 @@ public interface Ability { Hit.Serializer getSerializer(); + /** + * The icon representing this ability on the UI and HUD. + * @return + */ + default Identifier getIcon(Pony player) { + Identifier id = Abilities.REGISTRY.getId(this); + return new Identifier(id.getNamespace(), "textures/gui/ability/" + id.getPath() + ".png"); + } + /** * Called to actually apply the ability. * Only called on the server side. diff --git a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java index fdd01760..42486e1f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java @@ -178,7 +178,10 @@ public class AbilityDispatcher implements Tickable, NbtSerialisable { public Optional> getAbility() { Race race = player.getSpecies(); - return Abilities.BY_SLOT.computeIfAbsent(slot, c -> Collections.emptySet()).stream().filter(a -> a.canUse(race)).findFirst(); + return Abilities.BY_SLOT.computeIfAbsent(slot, c -> Collections.emptySet()) + .stream() + .filter(a -> a.canUse(race)) + .findFirst(); } protected synchronized void setActiveAbility(Ability power) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java index 4814670c..1969106e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java @@ -11,12 +11,23 @@ import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.MagicParticleEffect; +import net.minecraft.util.Identifier; + /** * A magic casting ability for unicorns. * (only shields for now) */ public class UnicornProjectileAbility implements Ability { + /** + * The icon representing this ability on the UI and HUD. + */ + @Override + public Identifier getIcon(Pony player) { + Identifier id = Abilities.REGISTRY.getId(this); + return new Identifier(id.getNamespace(), "textures/gui/ability/" + id.getPath() + (player.getEntity().isSneaking() ? "_focused" : "_unfocused") + ".png"); + } + @Override public int getWarmupTime(Pony player) { return 4; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index e6e6dda5..97a40855 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -18,6 +18,7 @@ import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; +import net.minecraft.util.Identifier; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -28,6 +29,16 @@ import net.minecraft.world.World; * Unicorn teleport ability */ public class UnicornTeleportAbility implements Ability { + + /** + * The icon representing this ability on the UI and HUD. + */ + @Override + public Identifier getIcon(Pony player) { + Identifier id = Abilities.REGISTRY.getId(this); + return new Identifier(id.getNamespace(), "textures/gui/ability/" + id.getPath() + (player.getEntity().isSneaking() ? "_far" : "_near") + ".png"); + } + @Override public int getWarmupTime(Pony player) { return 20; @@ -39,8 +50,8 @@ public class UnicornTeleportAbility implements Ability { } @Override - public boolean canUse(Race playerSpecies) { - return playerSpecies.canCast(); + public boolean canUse(Race race) { + return race.canCast(); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java index c312ca06..3fa67233 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.client.gui; import java.util.ArrayList; import java.util.List; -import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.ability.AbilityDispatcher; import com.minelittlepony.unicopia.ability.AbilitySlot; import com.minelittlepony.unicopia.entity.player.Pony; @@ -67,11 +66,8 @@ public class UHud extends DrawableHelper { void renderAbilityIcon(MatrixStack matrices, AbilityDispatcher.Stat stat, int x, int y, int u, int v, int frameWidth, int frameHeight) { stat.getAbility().ifPresent(ability -> { - Identifier id = Abilities.REGISTRY.getId(ability); - client.getTextureManager().bindTexture(new Identifier(id.getNamespace(), "textures/gui/ability/" + id.getPath() + ".png")); - + client.getTextureManager().bindTexture(ability.getIcon(Pony.of(client.player))); drawTexture(matrices, x, y, 0, 0, frameWidth, frameHeight, u, v); - client.getTextureManager().bindTexture(HUD_TEXTURE); }); } diff --git a/src/main/resources/assets/unicopia/textures/gui/ability/cast.png b/src/main/resources/assets/unicopia/textures/gui/ability/cast.png index 1640da82981ede855149b82f8ebfbc337de42ac0..097c07af0c1bd958a4464765c3d71734fb5aabab 100644 GIT binary patch delta 276 zcmV+v0qg$D1+D^+BYyz(NklJ0(7wYbA{{tY4k0000j35#~4?s{7|AYYwUWSQSTLb0Y4G^P=N-Do{2v zgzKzue0v{Hz=oddO#M#5vnbXqOtDJzXHh(xfu1It>VMsmgq%O8fn>5^yMmeM3)R~+ z>tz`xS`K1C&5I-V0^7dFw|C88Fb6#ktTq<_3Zw7Akczyk$xHb9J1IB2?Qjm5z0Wtb zoCmZtMt=}#8DfH4_Fan|=t&!@x5 z_s0nUgt|M8Z0Vs?-O^i0000j35#~4?s{7 z|AYYwUWSQSTLb<6kHPj}^yV_$(^jQ>Rv)dwzVpMI@tGOaoLWNp$q`ho&VvvCM`a($v zMs<-zu}(weP)i#74F7(bC zU>{qvKkQRNr_on!gTp>GKNU}D!@R2jz^mE@L^}^ocanplmt*Kh6L7IW!4LZsr^^`t zaJrl|dU`(x{iGYZYQaLazD}3(K>PlB8#rZuy`c<~aS1Fe^jQ>Zl$-%Vuezle>wTV( zKbHZTe55z0oy);m^66fn(et9?cPdaeGlc7`aD00oPr!zr>rDMl!LumVEKIRV^k-2# zn}MDto9chvl7yT;r-5X$V7r2u=nK``H0xyan|=t&!@x5_s0nUgt|M8Z0Vs?z69pZOc_{pOi`MS?0cqYP`)B3Tpspfz{PeVpn zBElx0o>hpIjh+CJ%_7!G|4UbHVqjokU^sMe zKe7V`cR4^3n73%%|2q%g|G)F_Jw{N&#L-K|L0=LQmD;ftM(BkLF>1&P0ZOW5V)U{Q nYZxKl5ECM!U>X#R0&D;PB8`f@*;OHg00000NkvXXu0mjfq`!c{ delta 816 zcmV-01JC@s0>%cABYy)8NklpsebTGujP=uWvsTA#CowJwe z#h{Fd1bTGPLyHHG9=r)1jO{Sci#UkTG8~(Sv5SA!fny9Z=V>C2Arl6xhjfR99-fE# zUSFCtO`8q;AcW+7$@~3&-}k-m1O7K#-|+8CPivs3wLtqxt$#qU%WLDg!3qA{ExAxT zhxH9$bi}?n0KR!pMJ2yK=_E9rgj4D!ZppDUeS7f_6_pUf&rRwf4=2D;#h?Y^(m>Zn1DHFI1{aR0d9{?b(FQ07){L20% zqXiD1)GkKnZGR!RL|IyGJimCJ0{|4Joge@B`Hlj>)hiE3JO5VXYzpk`hR=nim$Ehm zlpzZ{yJ74fdjD`L`vd^+a(Pmf_BB80#AhNW-GhFu(kop{XsqDFftM9)CBJDe7STYK!|$J-$Kxt^vU2 zrw>F_fB~2tP=lX@evCw9$ILK0pte?kp-hgY9c&8IWfF~sVVagLJZ{Vj(`904D)I-* zoVCb4qolo?Q6tHK(Ob6x0NTTQRFs^_t`}G84e9eo0oWFDdyB|Ny)WP&C$#xFZOJ6 z5|IO`z{kzAKAC5f1Xtm`%VG`}-V3x=lJCaF-X zvH^glRfFEY+i0bYiTI9f24L-0Jf!vyH>n81G=D8zE6f6V9t&E1kZ}!xAIl%O4{fLM~eqy4)xcJpf`&M>#P uXeleb=5?vt<{|psebTGujP=uWvsTA#CowJwe#h{Fd1bTGPLyHHG9=r)1jO{Sci#UkT zG8~(Sv5SA!fny9Z=V>C2Arl6xhjfR99-fE#USFCtO`8q;AcW+7$@~3&-}k-m1O7K# z-|+8CPivs3wLtqxtw6BLYvZ}W3I5zIxllWY^$lQj#J)KIzIjkZCBHxEBs86bQ|cye z$+0wjd+`qyl@Ph3S*QlJos zmQm7}8=SBy6SxfhT2Fr;03fa}pKS>I%Kjyz1rDFoE=K2VA-6Zi0>ITP4@f)zR^)67?Cgfmg{7CWHU*R+3p=}E>>qmna4P!*0Pu2trlmSvhd>#! z0K`chh(Upz<0G~)0|Jy?6EM~rC!-_vQ<6kvM?;$%oN$)m&Tbg%8w^OpqR}wF{FJ91hM*-Lta(j!&N94|WLC`r*w6EWL`2X0Qv2WXstIyt$+}y)WP&C$#xFZOJ65|IO`z{ zkzAKAC5f1Xtm`%VG`}-V3x=lJCaF-XvH^glRfFEY+i0bYiTI9f24L-0Jf!vyH>n81 zG%Z{!%mR8I3tD}UaSeeV%OAK8Af{>A%Cp(NJL=CA#&35dX zriEB{kt=E^J^u}Ft@j8E4}7*soUlv0ukA>O&C*ge0N*_3rH7i03|h^ Q;Q#;t07*qoM6N<$f_Ev34gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/gui/ability/grow.png b/src/main/resources/assets/unicopia/textures/gui/ability/grow.png index 713e6477413f765eb543a0275207503455c3812c..08c7192e6757cf4ee5605e668527763b5db9300a 100644 GIT binary patch delta 522 zcmV+l0`>in1)>CyBYy$uNklY5PcgCFS)%GcZg{OO9=?(2Z%))OHss1 z(o4Y3BAuOul>z+)sVwZ%ihm#=TFQzyPvzNVP?{;H8E(0O=F?+i+@4cA; zR?VKC^?d_>guoxov>#C&V1F-q-@Pk_*N$xg0DApF_{^=g6Musfzh|hTmo1uSMvb@^ zJFOxYwK_V{!c4XP{$6(FYcpx{h=>dM$WIX2UarV3+0ATa%Itm4M z-D%VS0F;{l%Rn4kb&XOppwtW;+X@`p3IOmw{X)c(kww07d>QfezrO$g*<60&+pGr( zMT*2iAnH~L$A5Su0Pq0NgA1Zv8^+mit8Jpi0fza{pu0E{I<}>yXFhVB=VJd#Q~|>+ z&KTzNvfHi0$pL!(f${*0kZ2?WaS*VNWOI3VX%-@IY-gB@5@ke{NtF4#Ki;fHDXx^t zAR3y5=M6!rDP_5HbTzd^*DMzR@Ol19GOEp&-i&0MQ-5k|OO(ev&WB~dF07}^f&SZv zz6x|Csxp~Rsu_?%;8xpHO~1<=$;h~$6Ml~9G-_dq6$uyDJNPw*?)176Goh@dvc|&7 zD{DqfYEU$z)Td%H>jwgVg!=XgDy4GB?EB^eDy1^)!a9ulY2y1|OF+lWCWSWF00000 MNkvXXt^-0~f?~Awi~s-t delta 632 zcmV-;0*C#g1ds)gBYy%{Nkl8wx5ERK<2gKsaA`%!dcyNbu$N7A=&ybKl zDYEnK-krbq^SuZBZ}Rg{eQ)6T2t5B$_mQ*@SbZ1%fA*=s-hYkRX#l{$y<)n2(@F#< zo~Nauml**FR6(VAREt|!>=iiF>F7jZp6dO3^ow%aiL@{azbtvAWE*i8k6dC%c)ctK z#66;3^rDu4Jc~YyEy)ssk&BjP^X26Y0N~a7c1Uk<@28))001*H&y>!LcpxrYMQ!mVW z+Zj(4Ebo6u=jb3l1o@_geA6PbR&8t?OZCD$K~7eF6PdnWw8+viGFlsx()Qx|F z7&^5AiH(J&5<}Vf4e%2fVJt{tY=uNCHBq7@N*&jZZ3ei*4t8wE148ggQIvNt_uhTq zyLS)x*Fnns*)+Dp*}cxL&I|29|1<;iuasbh`oul+N|DKcy??ra?z(}AVaVW|ad5_C zei2*98HZ_Xmt$bEzK#iTp$1j(%gflw8}-JIpF98=z;Jw~2CJv4ex;Lc~a1V|E$IF*M#Tmw! zAScH_MVITM0Mn4PPEL+N3Bjn@%ub*-7)T~O-v_;(;?e6j<+|PV6rS(H#Zvx0P;rJ( zC`HvLv7*ZZ;U~VUK7m51WH(m=wZQ;TRS>?M-lQB`et+gR8@>#vs$@6&8j9>f54i5* zJ%+HrQ%{;%gia5>8x(KFx2}3{D-7PK+?(aQ0cykHVsF9i?lbw%*!Xnz836F`-UFFr zR&l0EaDQr90DyO`yHIrvYVf-RgO!!JzZaf}MDSC~0-aXiyHiY*5U+SpXn1MV8;d{3 z0$aL*8xlhC0ae$e=DX$&_UoImhO=Ma#ICs$tBq)lsc}Yq#ez zF^jXSbCNJIm%9aNObEMp@6+ajto1@TwX8yn{Kq2r4!73^zMq0qivR!s07*qoM6N<$ Eg5TO-F8}}l delta 711 zcmV;&0yzEZ1>XgbB!8w!L_t(o!|j&8Zqra0#ea4j*S;9qL?w=zs#OE(Kv3Herf$3m zV(8S0orR?mL)m!-cmzfm3sM-1kWi&2N|Z#Y<2td;!nN|piS1@U2#yrVxxV&y?m5Tb zz3{I?S?1xYy(2F}d2w;|J<~hYKdpfJS6UD!{WQ{Ak*I*PzJE!xVl%MqsCcPZ0thW( zVF_zuz8tICJK<6a3@Q}{iiaNLu`VxTSN@v_j_c5O`dGq37y^JsyOBzXSOt0;Hi4;< zfAu;l?yPTSwrX0P^cJ{7yrUEDK7YZWQlY(hpU1iUg!JPOhM-g|MXR66OE{=h(i7;F z%czP%;rMt$iGO7fm@2&uI~@U!6|7ckLW$73S&D#nbOP=$9f6$NolrtKJB6G%^Pmji zJdEF0&Q4JkgOAN6{~v$yY->vq>8hQ5!-O8P#KbGvA&O5UISisHf+ z2RSeAD`=`3shf&Gq0<3fN3m8D3puV6{bHMqwFKp-i;kyjBC?!|p?L z(?AdATYu15TU+=)GXYuryjDXUk=@4_P?O0;l)VNVXG#_-+i1v8t z`F?ee!{S!twJ-#S#Vz)$do$Tcl>xc>aqMa)KL#UwMp1v4L5mC7_*ka%KwR-@C8p76 zHzHLQjin-RP_HkXxT~2_0bvMPL;)08RF0L3B|t^a%Vfbpy}nS1n1IckEyvD{xBCj_ tDIv#Y4(6Q)lI~~1d99X7k^i_2egW+N{Llz8$(sNG002ovPDHLkV1klYT%!O0 diff --git a/src/main/resources/assets/unicopia/textures/gui/ability/shoot_focused.png b/src/main/resources/assets/unicopia/textures/gui/ability/shoot_focused.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b27929141d93c97b1fc97e2e6597bd3f5265d5 GIT binary patch literal 488 zcmVP)m{0V7furZQ$>C@;VxG~Ft7?AGBr zgbTJY#uySyy(y8LeE0wN+X;ZD>NPR~06<@0t{Ql(*(SuAPxY0KK!wjXAyzU1A|jpj zrDQ;b@x7>CgjeDKBBHKQZVtuGZBKBBEsXvJoO8oKkemesqN+z7)@n!*&55WGhrN zVR~2KqMG3h?zcMoMJdqp#~ZRZoiSohfeV=75*Pq}zP<}U{>aI{0F{hC#N% zT=fuac3p6;-70*NE)RAGz)))17|wH4$59g&+qJZ|-|FbpyER}^9Y;;Lxx3ZAWRfn0 z^yjm;J@f)OoqE+K@S%XwSzG(yTQCmWBqrPhkE5ov_th=toPpoRS30Ir90|`|%?%M* zH*$29*o3a+;3d|fJ2?Wb`n-!a@QeSLY!<0*sHt~VZ~a43pLdZR;p6riaHkT_hW#hm eLwSY&tNH^V5O9mMU&6Wo0000 zv2MaJ5Qgufuyw4|t$BsK03EV0c4I-xSP(;bmM*9;BC#-)F$+U^0Un|0hQ!#d!*!|Y z*>xNTJF!&tpMV&B|NXu@00^XUza#(v3$M|og{#Ws52_eVH*h`B8u0OyZ3YDJRxDM)dU3m`Sn&Z$5V;gtX{xP*Wm=@ zAW}5$m!zKYK3-Mga4v0=`Y@u#ZZip9H{nxqe}>P>EplUZ-;I5Mr-R|ohXv5%+e_sZ zR1=9^;1U=BK8`2QO@eVzd8zsvzB=q+R&LQY{zeJ#d*<+Yv8ny>aZW(M^E89iVJAJC z4u-#~Z?bgIw(301;OgdDdv0EAr0#EGAhxO61a?)V1M?0y!SgheX8)3XuRZ+vu%@~y zML%%3x*eT*fSb^XH=ffU7SqEj6TaZqW2hS8UGKdKb?Plg*jtW}uiIeayWwAdLSH-f VF)izjxq|=z002ovPDHLkV1gs_#zz1E literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/gui/ability/stomp.png b/src/main/resources/assets/unicopia/textures/gui/ability/stomp.png index be49dcaea7c5088b06a9ca99dabbae6344e2d8eb..add9938b1e80b8c9dbc592537d3abc479760f7c7 100644 GIT binary patch delta 1494 zcmV;{1u6Qc1?LNpBYy?1Nkl-9RwUW5Q71Y69~o(MYI=zp-O@Y)49bbKk?q`2-u zCl5yri_FGGWWpdV@#;Cxz56B}I9hKC2zRZ`KR-R_@6Tp7N+sOd(-w(3^$bJczB`4} zZw6qzDGZovZQlFsg@_F_@vMrW&S&_Ls4KxWPxLoUfolT*P%CsI$YR2bE5y$jjY3{x zit^j1dfiRo!7MF$OEVWIwsN;l)!L2-7 zK4MFzNkwu}+2E;ZT zhI+ZMDifjioH{yU7632(iDq?f`K3k)TcjRVy)6a<*g|pxk#GwBY&V z9z_8{!_`dDHF9d$KG9i^7NJ_h={HxL{-IyvC$KP@XcRbmiI{D zOn+c8P0YH;SPjm=%oU2E5^47gm&8 zI==hTCQp8L4O=HdbhMgLm7O(^N@ngnQ_a+@WDGhOT+6(@mC-uzhu0Gy+v_lDG18c} z62>;Pbr7LR#SMyir{Fv+mLp$%P#BA)S$|3(+Ndy;mGVsjj1}$kKV_9=TLg;!SO&KGO=YM{7iEli* zhXsYL%b8WJ+_8T^YN1NQh~uqyMuIi$=_8?YG#c6ps*sytieWZamPt7J;+5akwhNjS zR4v-z(%7gOR?AAmP;%wzM+c@_*xFig+uq3Sdm^za6^CFEl>PI_vO=6$rmQr90Av~w zOXv*bN|d_O1!k(K2U7(LdFiy~J-oNJm@xRBv0sSiCWd_F`FaQ7m07*qoM6N<$g6A;THvj+t delta 656 zcmV;B0&o523#SE;BYy&JNkl&OI(L%p~(N@AJH$ z6X1V-_$dTGg@w*26;bTmK8W{E13=11dC{lzuiaP}Kv6f8(|-iEV}mQ77%3gLx>)Qs ziSqZ)A-f2`c5DCu2LQ8TWM(AG2FDQFvB8r-l#&81=^3`VVor0zA2QhhQPwW@F4Msid zbLs#wC*?G&?ti#yAsY28%wLuOfceW(uqSX=1wbrGDb3Y-EmoA$ddjTP&j-M)7u!fV9m1>Eq)3`oL%Gs+3d1At`dZ1#XxWj#V{)d+JiNh(+~jm%?a1Zo-1&( zMnAs=CwZnX9IzwJbx*gJX!!G|*PpYP|-Q)(w9?nvr`!l9^SI09a=l;Mcc# ztVWD_7JSzOOL76B-j0PyxuQUuF~l4I?%tlT*lmQ#<#l2+l1+C195pHVSRJy=-P@Dw z#~hq(FmAGFc^;M*|@N10hk$T(p7!FFzqa!7&IaTG*nHf`E{q@eNW>^u9MqMa0--`&~od*Ao&-G%6XZGY$&C5Iy=ha2C<0Ns3lNDIVRlT{ zqcOW)4q)o^x$cctQ(pD$L;lTlj5|}TQAuaS!1KeS?CAPMc90#**r4B}CP)Afxx~Qr zi`=Wm6l-*H6aqlxIR>&6i(~kyWKcY*uYILOXxWl5c5Yf1p-+fA+ntD@g`cGSLfC2*phjwO|Ipo|660;I}(R73PA z`#Av6f8|Vy6SAz&fES&Ee&6fL07ku`)GM7A6d=>g7n@a72UgC6(&IJ{LTsWfIOozG zKIiTm$Th3V*}d=VsC|1TN2rKcq#e$gU55lA5sguIIDqf>H(Zzbc0=NQ4_7YZB9(7p zayX9D8x(i`{P0-33z%IOk5ZP6u4u<#y%2Gj{>b;bTxO=b5rGlaZCE;TZ_iYq80dex zn9;|dqwwis#v`At7vy_gYP6a%18|yk{+`xoH7RljOX&29(n(2o=(YZ28A=4!` zSI&f9g9Ta9kZ)@^AN7VbTQ8~s5I`^@VriiQ)r{G7S~(L&M9jIm%hi%mZ%AN4tTj0R zrt}B#Qrh3i;TQ(-GK7r?BX>YnG~~L2g_9Ui?Gj{qT5+5HaenfQ0 zArb>!47?MJe#8bcdGMaUbn2@z^)JpG1DOg$9|=;pLn}p*Q;AfBHiK`GVaw!^JW>Ky ztSG<Wg!`_}fHUF@=@*qwa|Ql%^!M5zeu_P8j6 zrhAOEeZptw)NYUHFwm1IXy+zZ%g}K<_TK4?%R&zwhJ{X^UW7&~Ldyvx>1F~+V*lyi zYbRm;^!sJ%opA7bQkRpG6H@e}