From 2d067ef4157bd60eee13c1a09f9abb5dfb6f80e7 Mon Sep 17 00:00:00 2001 From: VictorABoye Date: Fri, 27 Oct 2023 13:19:19 +0200 Subject: [PATCH] Added alert sound when starting battle from mapview --- .../modulemon/Interaction/BattleEvent.java | 25 +++++++++++++++++- .../Interaction/InteractProcessing.java | 7 +++-- src/main/resources/sounds/alert.ogg | Bin 0 -> 15061 bytes 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/sounds/alert.ogg diff --git a/src/main/java/dk/sdu/mmmi/modulemon/Interaction/BattleEvent.java b/src/main/java/dk/sdu/mmmi/modulemon/Interaction/BattleEvent.java index 518c1b5d..86fbae7b 100644 --- a/src/main/java/dk/sdu/mmmi/modulemon/Interaction/BattleEvent.java +++ b/src/main/java/dk/sdu/mmmi/modulemon/Interaction/BattleEvent.java @@ -1,5 +1,6 @@ package dk.sdu.mmmi.modulemon.Interaction; +import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -10,10 +11,13 @@ import dk.sdu.mmmi.modulemon.CommonMap.Data.EntityType; import dk.sdu.mmmi.modulemon.CommonMap.IMapEvent; import dk.sdu.mmmi.modulemon.CommonMap.IMapView; +import dk.sdu.mmmi.modulemon.common.SettingsRegistry; +import dk.sdu.mmmi.modulemon.common.AssetLoader; import dk.sdu.mmmi.modulemon.common.data.GameData; import dk.sdu.mmmi.modulemon.common.data.GameKeys; import dk.sdu.mmmi.modulemon.common.drawing.Rectangle; import dk.sdu.mmmi.modulemon.common.drawing.TextUtils; +import dk.sdu.mmmi.modulemon.common.services.IGameSettings; import java.util.Queue; @@ -24,10 +28,13 @@ public class BattleEvent implements IMapEvent { private Entity aggresor; private Entity victim; private IMapView mapView; + private Sound alertSound; + private boolean alertSoundPlayed = false; + private IGameSettings settings; private BattleState currentState; - public BattleEvent(Queue lines, Entity aggressor, Entity victim, IMapView map) { + public BattleEvent(Queue lines, Entity aggressor, Entity victim, IMapView map, IGameSettings settings) { if (lines == null || lines.isEmpty()) { throw new IllegalArgumentException("Argument 'lines' is null or has no elements"); } @@ -38,6 +45,8 @@ public BattleEvent(Queue lines, Entity aggressor, Entity victim, IMapVie this.victim = victim; this.lines = lines; this.mapView = map; + alertSound = AssetLoader.getInstance().getSoundAsset("/sounds/alert.ogg", this.getClass()); + this.settings = settings; textBox = new Rectangle(20, 20, -1, -1); exlamationBox = new Rectangle(-1, -1, -1, -1); currentState = BattleState.BEFORE_BATTLE; @@ -106,6 +115,11 @@ public void draw(GameData gameData, SpriteBatch spriteBatch, ShapeRenderer shape visualVictimPosition.x + 16, visualVictimPosition.y + 85); + if(!alertSoundPlayed){ + playAlertSound(); + } + + TextUtils.getInstance().drawNormalRoboto(spriteBatch, lines.peek(), Color.BLACK, @@ -122,6 +136,15 @@ public void draw(GameData gameData, SpriteBatch spriteBatch, ShapeRenderer shape spriteBatch.end(); } + private void playAlertSound(){ + var volume = settings != null + ? (float)settings.getSetting(SettingsRegistry.getInstance().getSoundVolumeSetting()) / 100f + : 0.6f; + + alertSound.play(volume); + alertSoundPlayed = true; + } + @Override public void handleInput(GameData gameData) { if (gameData.getKeys().isPressed(GameKeys.ACTION)) { diff --git a/src/main/java/dk/sdu/mmmi/modulemon/Interaction/InteractProcessing.java b/src/main/java/dk/sdu/mmmi/modulemon/Interaction/InteractProcessing.java index 691739ef..fc669295 100644 --- a/src/main/java/dk/sdu/mmmi/modulemon/Interaction/InteractProcessing.java +++ b/src/main/java/dk/sdu/mmmi/modulemon/Interaction/InteractProcessing.java @@ -13,6 +13,7 @@ import dk.sdu.mmmi.modulemon.CommonMap.Data.EntityParts.InteractPart; import dk.sdu.mmmi.modulemon.CommonMap.Services.IPostEntityProcessingService; import dk.sdu.mmmi.modulemon.common.data.GameKeys; +import dk.sdu.mmmi.modulemon.common.services.IGameSettings; import java.util.Arrays; import java.util.Collections; @@ -24,6 +25,8 @@ public class InteractProcessing implements IPostEntityProcessingService { private InteractPair previousInteractPair = new InteractPair(); + private IGameSettings settings; + @Override public void process(GameData gameData, World world) { boolean wasAbleToInteract = false; @@ -95,9 +98,9 @@ public void process(GameData gameData, World world) { BattleEvent battle; if(entity.getType() == EntityType.PLAYER){ - battle = new BattleEvent(lines, entity, interactPart.getInteractWith(), mapView); + battle = new BattleEvent(lines, entity, interactPart.getInteractWith(), mapView, settings); }else{ - battle = new BattleEvent(lines, interactPart.getInteractWith(), entity, mapView); + battle = new BattleEvent(lines, interactPart.getInteractWith(), entity, mapView, settings); } mapView.addMapEvent(battle); } diff --git a/src/main/resources/sounds/alert.ogg b/src/main/resources/sounds/alert.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c1a4e3d64fd35205ab50fe34f2329fdd6809ac90 GIT binary patch literal 15061 zcmeHtd0bOh+VHs{2_YnyU=qV-LqrXmB}yn-wE+@j37S9>L(onLpb)^i(psx?iGU%1 zMNo<;HiX3x5+_lDOKT@ALB$PZk!rQJRqNWZt=dl88NL(j%s1bB@9%xT-|zi>|Gk%+ z%eiNJ&UyCdId|3i^%(#Ie!oW!#q7AHL~ zcUw-uhV?ArhLVEK?`$Z}+psm%Ju?&jgewzP354m((6|9G&X zbLjwJ0m|{(+j>7)b7k>*=KQ^z4T}p_#vWyP>Lqs;d-c7Tm$RXxyQ6T!mC(5aawZNU z2k?`E%W3KEhguh0!Gw=Jft$|K}pli9yY8r0( z@$zDyrhA4?+M&_jO6j5br#l-DO;fPwir+VomZ3ujU510hO$O^ z#-YN~UTb0Luepc6yX@tz`*-%?L%L;8G6$Qrtet!DYFcndaQ*D9ANtfAxaULLX4mXZ zOzGS$PWPMNzEwNDa~1$)lxZ&h$77n6UvY6;ojz=cbK=s%ixKXJrT@y3$F_b-0*MQ` zID!YcxW;k+$d+S^lM34%6Uy-R{pl&8?XM&X5|x!(8;AFs7Ltm_%|oF_p;Y`U;hu$D zr3Q`s%YF6xK#A{Mc#kZM%viKcCY7x&DbD<8+s%{ZYbUpTd41=X*K7VTtK#1o>z|SX zpwN^}%jAA_HTT@%-7Dk0UJ>{olCz0+ZeQSqeIcpGL(;BAT>c??)sN95Gli1qv<&*% z5&E`KMqWnD+EHHKs4Q>1B=7T{ysVQuGkbm)m{(%+<@IgpW5LNe>-ZEsj#+0=RP$iq$}@!upTUw^bwe^jUcR=1Z^*-%i~WIk;y8anp) z%zt_RQ*u^p4uLn69O34We~}y~H!uN8)A5M3A7AZp*$71FR^hCFB>(`3}zr%u1oQs6~ zXlP0P``3Q}OTt4|{R=F9bQ)ip_TPu}KQsIf2L4M7Ko&=Q;ExgC5*&^}V-c|D8-5)t z`B^lYllg4vd;X%CcNC1JGnza{{~;aF!2S^Z-t46_I=pJ5XB_doy1U??-XmabhYd$y z=OlN-x4r-1Yq*eSqM03DBV`)Q($TVlzUXZ8f4n#p02J{AD403K|L2-olY9Y)t;@}X z{zXz<9sW^Ya=zb?XCl?l>3-t*_v z5O-&cdvyWPa~YnT=-j!0f&+Ip(k@<$mfVePXfH6H-xQHLD%h6?ouEo~G%Qk&e7n8F z>*|ki-yFTM00YenL_5xn_L%&X2p@6&`4qqk0nV>t8}4m4a`e!DG7oKvxcH+$LQBh# zt^Md5MZ>q1Mov?Q`OE?c=<2kIg3euj(?6@D(`Zl&Lv6fvR@41T_Y7w9F>ly&G&&9T zypA*GH+6KHp(Wu@cO2igc9zavXNJ}VHU{uG4r3JVte0KL7O z{pw4LzYU2`;od*I#W%Q}3Ei7cT8`Vt*`+p^NyQbN9IFxC)agsKQbTst(v;FS2ayb zul|nx?MHsc@#eLV8g4|*z38SZP_>7$bWps3Gu!y z&+nAmd`EZ#uxcX!VYcjTW%Wk86B;^<+g_G&38B#E!Uwle;*&zlYyVI7M^HEhrTiYD z#8hYhUfM+b*Qn)x$1ndsOOwh%t3wW$SIRy3nPoMLEFsPGz4%%F$9)083sOB!$9)j8 zzb++(9$&qfGxtD)Qg4mdaS82hW6B~fALjl@{;ys$qW}?AQK#0|W%;|GfbMg44Vj0Sj&y{D8Z!yDWIa zdqUY&y?H1(*_x2(f8WqHnd}+tP^9Lu;)aq_nze*bd}n!eSbJlAL;S_YbdoxpyS19T zV(~p`{5f}YuLZz^x^O0e#xE@;fmnW0Ed~(1NkRQWK7T=QtJAPi6g$5;27ox-B}%2v z#p1U3bHX}2P#3P^18{zLGU=03=mL*5!>+ZS@q~DaRuRZYykcX&s+fQKSy{kgLx%Jb zAHo4(Hn;=T*XMxEHXi)u!Ly%%7u7E~l)E^NI^Fyx_!)qtbX2FyzaP6~>2iL&ATcRL zv{DS!8!~MP`2ZmhUIm=)cLL#6HpCe_uiGXmrxVq-CsCC{7 zGx0w6Uh$HxC9>DoVt=^Q{2ilt;z-h^1;IzJMzy{k?ZX zd(Xwa_3KV+>`zGR$XERf$r=0n>MvaaVC?f7A&;LHS0opkd#^Zxo~_KP50s`|i=JQ1 zr*G`n(-T%a{jw{e^?G>CX>LyKeEezK zrr#cymScVl3PLtsD%_MBIC~Qzm6Y2Vfgfh06K4;>%tvh(6{0??yG8x>ZJ3eNm ze&VesHLo7qrHy#%L+gFFu(0dk!V9?I8ZHPkliKk^Y5LUXHHj8c$>hOo(DPFkZ&`!uWVLY(<*sM zsy+qrQ*#e^;q&Z4{PVm-7Wm7FV~@|T!mb3Qc`v5cU*CW4Yw6O`w;IQ$u5S=0e-`-h zUnUwP5}RmjGoVOF#<27L(LHplYRt@*YZxiKu=dddj)rL2PR0)9$SsFpTnqflW(9`< z@cy@f#J@kyihNYRd`q|Qmy7rG{qa}1_dCB_8qxpOxq96?2}39?yhxFBZ8+k~lSF=H zm{D{)E<&cC>A6~05leHGK`R0P&1Po2SyHv>t#{wHX5)lmi>@lE0xZ9{s-vN#K{LL& zs8!&SN~1`^$nhqGr5eabsHw5hz3f4j&L=1(JcXdE#55h6pZnKHss3K=(c+Vbbomi_ zvYe{gG|-QpB`B+ydr&Q3LQHNcUpM(N620h+@lwiU2?s|p#bxdKb5BS2XAxi&(|J%y z)`g%QqK~VFnmC_pC#F9x?gPt{SA~KE~U{xxp&hF0>`<+;UHLFRZ zU>bEyAhR=&C|!BH=j39_+YPfzY_vCck#R}g%V(H%QMsQ8qLkJWu4<3Bsa7USmSIbs znc*jX-0^qb%HZ_J;t)yzb`6r9k4r+GNp&_Y=dLGEm105-ks!J@ICB++g2`E`qu2=G zlrdjW&DIeBt+OZoiMnpXYZc38sXA@;;1G~A#zoU&0T|_dxVxRTF{!!+d*qE3W(8WYdjH@47T?$xLsk9UNjWV6i1 z4x5M=6JUW;UcA-JNS!e?R9v83O^ZWt(f(07Hd|}e@cgOO!l>{Ue~Iv~F^FF>YqfvF z1KYB$f;}x+qkyo{l;shE@xGAE)P`UOT09v}=HoCvsP3+Ly0Nx;wI@sqBVUc*nIeK~ zcMdc}CORXk?mjaj3;jNsVH1WV>%qR(Cy4sZvPKRj;69n!f+coJo3`$0nH*!lEp62$ zC6CpnPJ9fG=x*hIx4!VNk~8a$zMbBY@A9<=T>e{8lJly zSt3=yNDFi1fe_e)Qs67>lJSwekp;7%18qsLqa3}mPKPp8ij#A7kW-CXjm4y{iL8ES z3oqoeT;*Bcck&TH^eTcTbXemZOeO>4NQBxHJ z*p&%QQ%_H$di~_V60=#udRfuf6Vu@Z1e)*;ldyQq15Ht=qgvgqcE2e`gnUe$3U%@N~u(sIy-dA(c?(~O{5R&TsoQcLARVr zQXQrm7H&Z%P8_$x#WRJiBc_Q?XdP@!eh!x*p*r{e{UB2pjFRPIzU6^UhYUb}1of}D z+z}`9@OPuPd!E9UZ*c%%8+N?FEZ5x{-Zi6l(Q@+-L+R`-cggBKH?NlN99(g(HRb!n z+eqE^p`^T927gJ$MwPN*J~-cWsb9U(aLco=;xg;l>DLdB_t6&X+Bg3gvvi9#3|!<-lEV1J{~(k2Rfa0zg+b%Pq%( zE(Yci0Z=0#-*|ALZLgK#e1YZDo(P4J*2-OyTh(lr@S0fGQ{RTNoHaNBg!c zWtgTC2MEv|W660$3_$5*koVjRu(Z?~v%}c`%UIO8Z71$OO$;LI_J3QgN7c<7BXu?S z>>^MXY5DR6aJyh)lAzhw70O`2GP5CvA1TE>)?>iz#vpM0>%Qu~rh7*sR#Ut&Cp_*b z*Gx(ji-Iy2oVe2)!j=hAk|!iT!E6P}3HxFg@4LZPZ+nt}cCHNNgD(Mi?x~{y)K>cR zt;+C(kk4!T4P&S>7-Y^+dGE*)1}T)>0DB5t0u0-Fo-#hHyJPr zDxZr2let+)rUOxcW08#-0J)v-OWLs-0S^wYl&x5?I*<)(`id6nIFAe*fHsZoKU37o ztAdM)05qtKyH6~#@)&d+h~lOpVwlv3BJ)K38r@l;tJ}^2+U!DQlxS3aBLFq3bMo^{ zbO3l7tBa$q;nB+UmE5xMFp^iC+vCkA&+Q~&<9;KVOwq}~n?h3%0j)+3&jrZ=7R3pH zkYcxOIH9BWM~nK`9f}0VcZ=Z0h5^giiva{p8l1Qr*093V%9HC($olaC5dt`?U<4Rs zTXmBaTc&=+gSU0$3pbf3E*w~P?8&t)NU8@-o$y14de1HR| zvU__lZ$$B{`mxUtR@b&LM_lgMem25J#a))89FMZgs^%B-Rev}o^6gs+)PJx!AC?Il z-N=q$Bv5w*>=4qR`0xzqc`VRKJgSVqG)@c1a^8L$o~=NopppP_e{``Bnx`vaIs){9 zpwiMvtxQ2R7X#Q6%wChEi`XddA`>(@%$JO=nrz)T1@PN%*R`Ab)8By@L)nc(_mU+G z_V~`eSk4J?dakNX5Hc&M#x+E=Ajkp6=4IVbHOeiS3K;-Y56ega08zZEoXj9{)DW#J zC+ErW#Lfh#>;gdafdE8Et@?+K0Baw7BzfY zEqQz5$@i=c59TtKW`x&caxrc^{|t_Az_1=mgX?F3&_}fIVxqJIo~ZcfN-u%ql8BGx zw_Hj&n>VlTgCPQM9BgEGt(?RW0`hNOebej8Q=TnKMPY4pBTqF>7-Z69E|?%=`$qFA zVj&qOP1FMhO${`B)iOG_=&1`zxmEqne68}y7zK`z*yRH0m`M>nVFIWLU?!N@a6F`% zTIr(TiUb3RV!J=1s#zBbS;AD{IN5*2N0w#j2m|`&f*fjA){Zy<9|6)d@17EZx3^dV zT}W0)S!_Hhff*MprW|WyeV7^-0mY)Idn6qJq=2z?h&QO=-~(jc3Yo)<0NctqxDKGh z0@dy`xvSf~s)*tO#iB@=C{+rb5^Uj!;Su}~z@HNlgeH-3pS_L>KZ5UXzjrzOr|e7P z6S9+a2S2K7d)Bo2yZ**5YuARki(a4Gt6oPyjXf`+_5hNv5JYD>*|dM|0^8YB^HDFx zYhcJ?4J|#cdw(tqLy?>})g#%~J-CRtN$21JG@fBE z$I-VrD=RU816UOWId+{=sMSNfhLyzhXu@H4&~Za2v_q~ExMpWHsV_&7`s2raM{Skb z*Ux94QiZPOAHKH`0~%u{^KrdUU0D^#Kp$n)%#-vtFy;|ieCEJr0$_ zkZ%-KiTqk231u2{+zL@z16%I=*%K^pyc~8lGWFcnhZDm4>HBkXXRJFhwB_P8?%Ffk z_MN8PV}8EkS8oQmbKv-fvj+sr^6q%(Zrs4KE-nf6T41=>-jM|Ez5&2yK9+SNeU%^+ zwe_4p7!_0&%d&GV>vm~W+YsEp%B~=L>w;p~lQ#frahWBpVX7LoQHu#1gt*fwTiJ3t z!168XqjD+_GA0ff4JKhx+76c)uuVGq1T)8_G7F0>9ol8)4zi~4I+5Stqs|lj9Qv1bNOS;x{=~-;y)g(6^>ZkE{cRb1B#yU?x}7`ldqyPJU55D3 zz~m16k28F%^Pf^oWlpVyd61N;gsGsZSopVSYW@^wD&g;Yg6{rh&cUi9;k7d6vl(xm z|1xpmjAg6)#!+tse3~#8fH)*x=rc^)60f&`II?dUBEWbGP#s0WXm4UsCNhRBA>jH3 zXN2mj57Is-RH1yg=Lh)7Qu=O*ozbOH^RUQ(dc6atlw^D;7hNis*$~qMEtGBYMw7Zr zYaVCdL?T`>nJdEraX8biwkqlM_f8WDVDI;nRyAg??`x@z{eA1~;>QgpwpMJ|vPl&0gch8AgRoe<4PEIC zRGF*ht&+fX@Z@<(T0DE-C#3LzRJ`smN#RgVK*=&6}}c zwq)^~0_U>FwLg5ZaQnvZbwhqQk6mV72$CGUFu2Wf;n5zGH59{h@PTQ<>x~H8;)ghJ z;7r^6($@e;pP&LZ{1U{nGaEPW{y++g{N(P+o<$U0h{%oOL@RSQhdpSP$s!a|YK~P+ z8dP!>;cSyjNt4>-QiPNdB?eA0{mlsY!ndLvBAXE~lP4OLL(NFHm}F2F@riU@T5|!H zUS?i!FkinOxB892Vp=3LU)!|zJijQ|Tm0H|*mYr(uB%$*;E zCZ@MnSR$Wq&0Ni;jEWz}WSzXgkf%{$#=lKaB$naCu?-~9@F@|1q8c^SQ+s^U&cIxt zsNWWCxtYJVct8+3vqAx!f1Lp&lJH4WML95NTu^mvWx015jwOu(3-lh%ZXw$>{}$oh z)Z4pQpDBo#f#$7qzTj>Dwe)9|7k26TTloI=#N(4TAl*?v0|Shu zIE9OhB9wptojSXDS3bhPW6B5tlXCxMlRnHW^&=$%}HQvFv?=+ z(I?UN6hPTEs(F-s?{z(-LRA$~zjc_AEbaW$qcowlLfuwioX*6k{5$sfv>N)Bav5d) zdCb0})dp7CfQgxaizV$zFyXmcA4>+0??f+VS2mj3C?EO~RJ&!4k%o$3fDRS6AY)Nv z0T^9q*X%2|`fPkK%rZkAAhvg8T2l}dY$*RW@N@cnp6C^fGb_r`M+eLC!O z$Ad3_G&aW|J;_1JEMTrzz%^U^9c7WsDM51Vi(6rx@<3RyW ztT81q6=>78L|?ujGNxqmAegKoX!Y4jWPl;JDD3R826aKDs)$~lFKZX|mkrw|BGx%USFteJKHE!q4J*3M{oPF*K)8mcz zgZsKMK(--yQ(Sd~A8tdqA+L4Tr#j>9c%AVGX+eI@ACIPBocL#W9VzpjwB#9-Qof|7 z$s#R{I!t~hkYoX4^&?E!eC3nAhbzClHaz`lhC=94=M)Nsy=)DSMz_Bx+RlK6_8WA7!y)b1_Gk^E_~LFYhu86 z^_?;KUirLSZpaw%2N4Rc{{Y0H(cBRn(}l5hI*&+82QbEroUCcgq;J2EqF4 zyP$Y1IG>IM`Dj3?pdUp@^QxAtnF|Nzxe`-9HvpaKg@r-T5&XOGNC0T81+IN__aHQP zf*zGcE4$ThpB2cTN+foet8B#lwiMj%37owPzo~TBSCs9=7r**y{TGzoU8tkGkGZGSmPjpZShYNOBVZHa1(?0rxO+{Zd z9lG)(<}tWwjxfB&sJ1KYO*-M2f1y>GGY<6`)oz^7nuQXF#${G;nKYh39-#|U)2RV6 z5>7NG9%XkJ7!IvW<`N7A|eE{E?emrV7E*4vh<)rKa{Cx=& zD#kG8PH}x!^2PA`_~p(N`NNYXU+7*CfAF|0ls|m;Pvr&mg)eJ#ODHeaVV-}{h{fFh z>}a+x``gbkUtbX*g;}h!#laHy#GOQ&pQ5S_b7ER}lM&l}sDf^YyvjG8f6|}zjsG(1hnaoxA1B1k=;1XFnf;w1nJy=Zwq(WQ~Vll}bc$%n>>D{Z^fP&->Pfd<2tspKJP5fm;%~% z&SuzVMkcau{6t&L{~#=M?`{u1A1B&2J_;AjUS6JtS9oUFJLFcikOnPVB-vX);TQFk%cQP&1WLq`?j9mA z88y_dih@NjXfp#NYF3)INnIdIb%O<1OGFNSpV>FupN3H9)Q&i>z?>dVYH!{yrpsta zi@s#cLmTI5#=G$tC<4(F`Ki!(fDY{)5_u<>O6#OL9plm4ppYO0+YW$lp* zECDeG8)9yz7YA3AclOx!t$MHT>kr~%*XX_ncx*=Takb1z>D_(n3{egpr%Yyw2a0@` z8~u3rPZK}5cE%toVHJ+T!b&3tbvko?>Me*BplCB0-hj5d_Tg9xbt~KkSQiYuCXMP;Q`q1IhbIhLi^`!5$CQ>9bJ)))7{tNLCiK4O8V?3P(>2u?f6&i9hR@p7I~O_>{v)N(5QyiWV~T#<^gjwOw> zUN*{-x2~M)m}KcxIrfu03(PpG3v(PdswO+p*xBETHYNh!(Z4f2j--6tAYNYC6oV7< z#SXUCVIG8eZ!`0zUREfli*e3)>tuc~+U^e~VL*{D3sR~$$I)&jsw-70J^ix$I@pb1 zLdRBuYDvm-s9E{#t+8wY4HWtkQ2&u%9OzE&oSO*NlW}AW`{Jw^TdHGVQPs?(xn}r(AJ!V ze>mP#Ylq$}RjO^v*3L_=|+3WzvwUU5&w5sV%l?-F4y zrq|5t)o1HN0V^gu8-}Xs`R+|SyNh=pJP4d22HT~Oa1e;kRl)Dc01aE!3o}emn>ovf z*I6MUhobxoBWp<&!D9>gLxh_VtkAqN8w(50`w-!ggy7oVLDt4&=i+7n1>OaG!2k#( z{swmCeNlF4MdOU_U2|I>{4wu~pD(@n+%x6Rb&{wOZjzsHtRb}ZH)u)_&7voNjRS8` zs&Rema%QgZ4)Bh!AoT~Yew4ZiJKzxlb*G7ILb(+jJ_bjz4=TGj655Wg0`zQ47>7j! zOnF!KdYH+zDxO%>Fljxeh9^Rr97UwQ=EjZ6aREH(%o?R5Qc9P#rGh+B)GZDW+Kp@_ z(sxl*hQsE+-+&-gafWrSh6UI?N=H+pE*s`1F%wcjjs%EA0XS(;D!82&xMA7u<-^Mu@fRi+ ze6#Vf-+;$02PN;D??90*|HpmDbs>)?A_3TD4s0xoJR5lj1$~40-`u(L9CwVrJe{1p z+dY#yXMLevpH1aiP0A-v$##c%Tzj^ltHNK(=hrCbaM%Q`0>(*=9nIqcE;6S#jnZG+ z2(#p+ZR3mp9&|tZp(}!`V(YvNF*kE>Q5<@p(rKGwGIpxf4m}y3h(RiHtyxOU zU*xEN$Ih-Vd0;g+D0ARivgTqQaw z!kC&gBb{~}F3DNyKB2SpBgMYx>j;Wqdkt~hz(O?G^BTsfT0VmXfz89vKFbSCT)IL& zYrrvwS-t&YZ1sCJ79ZW}RZ+|@8C7Qt(&UzoD{tmaq!`mf(2_4~eDCz2l2Y%<5G5&i zJZ4en+aE+BX>JTDcKchXg<_r_={0BuFc>+>LnTZG~3>B_uv6B{F5!};*mTw!?mn-Z7o6Xjp3`25MG0q|<%4Wrw%R>RG(iWI6Gc^7% z5*$W=(uDy&C$>$9xTI7V;0T^GHhH7eTgI$zU})684P_Q3MZX^+NCDt`Fpwk+H*kq! zOx}%!^hp@vF81BM-%2NO@SlH_UenpJW_J+SIOFuZDDkxp}jEKv_t&*fljAotdYVc&lh23Utuv z^c^Id9cIR$0R!S3tH0F3o-_+-e1tUfO_$uFts%aY%YfLnx1hk()WDn=zZOM9Eb97D z4%8f4#biDQ@F~97xkb)({aEkRUNnQD!EYK}Q~ZzL1C&8?CSJoq!x%Opq8a#Y!)$!fK)>g#Q4H?fEFr?c5q?7!KzC>s4J*9^ZK!4;s6VVQ&b2OhhGn~5-&w`w{sw( z4TOWa%U*`T9ex;=aOA_G_iOk4Ex`w%A0gn($r0NIRz)YcqcKH6lu)o-mO;iN#6W?m z)mdk*Ax3>41Lhn;cWSrRtSpb7dZP+!uvOF4PBm-J>{{xnx}}>RYfF1XCs`TuK77Mj z&-*-G1wWMjdtUb!uU!b();T{iE#R=%!8@N-H~czhd+UN1ZS4iSgGA3f&jRnl8{HX4 z>K>7bbSBzb1ID7JA&}zmbDeHpk+s96X{^wXUkQ_UO=eO1qevbefYv*3#pX$;NqVm} zwd+U5)GJNcYA~C0*td@yKmf^Lt8RE_$e5@{F}dm zmQ0-lG-hD#9