From 185c6c79f8ba30981aad4e1d66f98143a344b95e Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Wed, 8 Aug 2012 18:13:29 +0200 Subject: [PATCH] added spell selection battle state --- Debug/src/battle/states/subdir.mk | 9 ++- Release/src/battle/states/subdir.mk | 9 ++- src/battle/BattleState.h | 9 ++- src/battle/Hero.h | 1 + src/battle/states/SelectAttackType.cpp | 18 +++++- src/battle/states/SelectMoveAction.cpp | 2 +- src/battle/states/SelectSpell.cpp | 75 +++++++++++++++++++++++++ src/battle/states/SelectSpell.h | 46 +++++++++++++++ src/main.cpp | 6 +- test-data/battle-bg.png | Bin 15937 -> 15122 bytes test-data/select-frame.png | Bin 0 -> 483 bytes 11 files changed, 163 insertions(+), 12 deletions(-) create mode 100644 src/battle/states/SelectSpell.cpp create mode 100644 src/battle/states/SelectSpell.h create mode 100644 test-data/select-frame.png diff --git a/Debug/src/battle/states/subdir.mk b/Debug/src/battle/states/subdir.mk index 8a61792..bb15270 100644 --- a/Debug/src/battle/states/subdir.mk +++ b/Debug/src/battle/states/subdir.mk @@ -5,15 +5,18 @@ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ ../src/battle/states/SelectAttackType.cpp \ -../src/battle/states/SelectMoveAction.cpp +../src/battle/states/SelectMoveAction.cpp \ +../src/battle/states/SelectSpell.cpp OBJS += \ ./src/battle/states/SelectAttackType.o \ -./src/battle/states/SelectMoveAction.o +./src/battle/states/SelectMoveAction.o \ +./src/battle/states/SelectSpell.o CPP_DEPS += \ ./src/battle/states/SelectAttackType.d \ -./src/battle/states/SelectMoveAction.d +./src/battle/states/SelectMoveAction.d \ +./src/battle/states/SelectSpell.d # Each subdirectory must supply rules for building sources it contributes diff --git a/Release/src/battle/states/subdir.mk b/Release/src/battle/states/subdir.mk index 05f8177..a1256fc 100644 --- a/Release/src/battle/states/subdir.mk +++ b/Release/src/battle/states/subdir.mk @@ -5,15 +5,18 @@ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ ../src/battle/states/SelectAttackType.cpp \ -../src/battle/states/SelectMoveAction.cpp +../src/battle/states/SelectMoveAction.cpp \ +../src/battle/states/SelectSpell.cpp OBJS += \ ./src/battle/states/SelectAttackType.o \ -./src/battle/states/SelectMoveAction.o +./src/battle/states/SelectMoveAction.o \ +./src/battle/states/SelectSpell.o CPP_DEPS += \ ./src/battle/states/SelectAttackType.d \ -./src/battle/states/SelectMoveAction.d +./src/battle/states/SelectMoveAction.d \ +./src/battle/states/SelectSpell.d # Each subdirectory must supply rules for building sources it contributes diff --git a/src/battle/BattleState.h b/src/battle/BattleState.h index 72342f0..858b111 100644 --- a/src/battle/BattleState.h +++ b/src/battle/BattleState.h @@ -37,7 +37,7 @@ class BattleState : public app::State { public: - BattleState(SDL_Surface *background, const PartyLayout &monstersLayout, const PartyLayout &heroesLayout, const graphics::Sprite *attackIcons, const graphics::Sprite *moveIcons, const graphics::Frame *heroTagFrame, const graphics::Frame *activeHeroTagFrame, const graphics::Gauge *healthGauge, const graphics::Gauge *manaGauge, const graphics::Gauge *ikariGauge, const graphics::Sprite *heroTagSprites, const graphics::Font *heroTagFont) + BattleState(SDL_Surface *background, const PartyLayout &monstersLayout, const PartyLayout &heroesLayout, const graphics::Sprite *attackIcons, const graphics::Sprite *moveIcons, const graphics::Frame *heroTagFrame, const graphics::Frame *activeHeroTagFrame, const graphics::Gauge *healthGauge, const graphics::Gauge *manaGauge, const graphics::Gauge *ikariGauge, const graphics::Sprite *heroTagSprites, const graphics::Font *heroTagFont, const graphics::Frame *selectFrame) : background(background) , monstersLayout(&monstersLayout) , heroesLayout(&heroesLayout) @@ -48,6 +48,7 @@ public: , ikariGauge(ikariGauge) , heroTagSprites(heroTagSprites) , heroTagFont(heroTagFont) + , selectFrame(selectFrame) , attackTypeMenu(attackIcons) , moveMenu(moveIcons) , activeHero(-1) { } @@ -71,9 +72,14 @@ public: public: AttackTypeMenu &GetAttackTypeMenu() { return attackTypeMenu; } MoveMenu &GetMoveMenu() { return moveMenu; } + const graphics::Frame &GetSelectFrame() const { return *selectFrame; } bool HasMoreHeroes() const { return activeHero < (int) heroes.size(); } void NextHero() { ++activeHero; } + bool BeforeFirstHero() const { return activeHero < 0; } + void PreviousHero() { --activeHero; } + Hero &ActiveHero() { return heroes[activeHero]; } + const Hero &ActiveHero() const { return heroes[activeHero]; } bool HasChosenAttackType() const { return attackChoices[activeHero].GetType() != AttackChoice::UNDECIDED; } void SetAttackType(AttackChoice::Type t) { attackChoices[activeHero].SetType(t); } bool AttackSelectionDone() const { return activeHero >= (int) heroes.size(); } @@ -103,6 +109,7 @@ private: const graphics::Gauge *ikariGauge; const graphics::Sprite *heroTagSprites; const graphics::Font *heroTagFont; + const graphics::Frame *selectFrame; AttackTypeMenu attackTypeMenu; MoveMenu moveMenu; std::vector > monsterPositions; diff --git a/src/battle/Hero.h b/src/battle/Hero.h index b1982b0..69db286 100644 --- a/src/battle/Hero.h +++ b/src/battle/Hero.h @@ -32,6 +32,7 @@ public: Uint16 MaxMana() const { return maxMana; } Uint16 Mana() const { return mana; } int RelativeMana(int max) const { return maxMana == 0 ? 0 : mana * max / maxMana; } + bool CanUseMagic() const { return maxMana > 0; } Uint8 IP() const { return ip; } int RelativeIP(int max) const { return ip * max / 255; } diff --git a/src/battle/states/SelectAttackType.cpp b/src/battle/states/SelectAttackType.cpp index b3b3e0b..7dd06f6 100644 --- a/src/battle/states/SelectAttackType.cpp +++ b/src/battle/states/SelectAttackType.cpp @@ -7,6 +7,8 @@ #include "SelectAttackType.h" +#include "SelectMoveAction.h" +#include "SelectSpell.h" #include "../AttackChoice.h" #include "../BattleState.h" #include "../../app/Application.h" @@ -31,7 +33,10 @@ void SelectAttackType::ExitState(Application &c, SDL_Surface *screen) { } void SelectAttackType::ResumeState(Application &ctrl, SDL_Surface *screen) { - + if (battle->AttackSelectionDone()) { + // pass through + ctrl.PopState(); + } } void SelectAttackType::PauseState(Application &ctrl, SDL_Surface *screen) { @@ -65,8 +70,9 @@ void SelectAttackType::HandleInput(const Input &input) { battle->NextHero(); break; case AttackChoice::MAGIC: - // TODO: switch to spell select - battle->NextHero(); + if (battle->ActiveHero().CanUseMagic()) { + ctrl->PushState(new SelectSpell(battle, this)); + } break; case AttackChoice::DEFEND: battle->NextHero(); @@ -82,6 +88,12 @@ void SelectAttackType::HandleInput(const Input &input) { default: throw std::logic_error("selected invalid attack type"); } + } else if (input.JustPressed(Input::ACTION_B)) { + battle->SetAttackType(AttackChoice::UNDECIDED); + battle->PreviousHero(); + if (battle->BeforeFirstHero()) { + ctrl->ChangeState(new SelectMoveAction(battle)); + } } if (battle->AttackSelectionDone()) { diff --git a/src/battle/states/SelectMoveAction.cpp b/src/battle/states/SelectMoveAction.cpp index 5631e69..c728db0 100644 --- a/src/battle/states/SelectMoveAction.cpp +++ b/src/battle/states/SelectMoveAction.cpp @@ -43,7 +43,7 @@ void SelectMoveAction::Resize(int width, int height) { } -void SelectMoveAction::HandleInput(const app::Input &input) { +void SelectMoveAction::HandleInput(const Input &input) { if (input.IsDown(Input::PAD_UP)) { battle->GetMoveMenu().Select(MoveMenu::CHANGE); } else if (input.IsDown(Input::PAD_DOWN)) { diff --git a/src/battle/states/SelectSpell.cpp b/src/battle/states/SelectSpell.cpp new file mode 100644 index 0000000..66b55f1 --- /dev/null +++ b/src/battle/states/SelectSpell.cpp @@ -0,0 +1,75 @@ +/* + * SelectSpell.cpp + * + * Created on: Aug 8, 2012 + * Author: holy + */ + +#include "SelectSpell.h" + +#include "SelectAttackType.h" +#include "SelectMoveAction.h" +#include "../BattleState.h" +#include "../../app/Application.h" +#include "../../app/Input.h" +#include "../../geometry/operators.h" +#include "../../geometry/Point.h" +#include "../../graphics/Frame.h" + +using app::Application; +using app::Input; +using geometry::Point; +using geometry::Vector; +using graphics::Frame; + +namespace battle { + +void SelectSpell::EnterState(Application &c, SDL_Surface *screen) { + ctrl = &c; +} + +void SelectSpell::ExitState(Application &c, SDL_Surface *screen) { + ctrl = 0; +} + +void SelectSpell::ResumeState(Application &ctrl, SDL_Surface *screen) { + +} + +void SelectSpell::PauseState(Application &ctrl, SDL_Surface *screen) { + +} + + +void SelectSpell::Resize(int width, int height) { + +} + + +void SelectSpell::HandleInput(const Input &input) { + if (input.JustPressed(Input::ACTION_A)) { + // TODO: switch to target select + battle->NextHero(); + ctrl->PopState(); + } + if (input.JustPressed(Input::ACTION_B)) { + ctrl->PopState(); // return control to parent + } +} + +void SelectSpell::UpdateWorld(float deltaT) { + +} + +void SelectSpell::Render(SDL_Surface *screen) { + parent->Render(screen); + const Frame &frame(battle->GetSelectFrame()); + Point position(frame.BorderWidth(), frame.BorderHeight()); + Vector offset(battle->CalculateScreenOffset(screen)); + int width(battle->BackgroundWidth() - 2 * frame.BorderWidth()); + // TODO: replace with font height + int height(frame.BorderHeight() * 13); + frame.Draw(screen, position + offset, width, height); +} + +} diff --git a/src/battle/states/SelectSpell.h b/src/battle/states/SelectSpell.h new file mode 100644 index 0000000..e0bb118 --- /dev/null +++ b/src/battle/states/SelectSpell.h @@ -0,0 +1,46 @@ +/* + * SelectSpell.h + * + * Created on: Aug 8, 2012 + * Author: holy + */ + +#ifndef BATTLE_SELECTSPELL_H_ +#define BATTLE_SELECTSPELL_H_ + +#include "../../app/State.h" + +namespace battle { + +class BattleState; +class SelectAttackType; + +class SelectSpell +: public app::State { + +public: + SelectSpell(BattleState *battle, SelectAttackType *parent) + : ctrl(0), battle(battle), parent(parent) { } + +public: + virtual void EnterState(app::Application &ctrl, SDL_Surface *screen); + virtual void ExitState(app::Application &ctrl, SDL_Surface *screen); + virtual void ResumeState(app::Application &ctrl, SDL_Surface *screen); + virtual void PauseState(app::Application &ctrl, SDL_Surface *screen); + + virtual void Resize(int width, int height); + + virtual void HandleInput(const app::Input &); + virtual void UpdateWorld(float deltaT); + virtual void Render(SDL_Surface *); + +private: + app::Application *ctrl; + BattleState *battle; + SelectAttackType *parent; + +}; + +} + +#endif /* BATTLE_SELECTSPELL_H_ */ diff --git a/src/main.cpp b/src/main.cpp index c8668dc..97a9399 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -138,7 +138,11 @@ int main(int argc, char **argv) { Gauge manaGauge(gauges, 0, 32, 0, 0, 16, 6, 1, 6); Gauge ikariGauge(gauges, 0, 48, 0, 0, 16, 6, 1, 6); - BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &attackIconsSprite, &moveIconsSprite, &heroTagFrame, &activeHeroTagFrame, &healthGauge, &manaGauge, &ikariGauge, &heroTagSprite, &heroTagFont)); + SDL_Surface *selectFrameImg(IMG_Load("test-data/select-frame.png")); + Frame selectFrame(selectFrameImg, 16, 16); + + // TODO: create a container for all the battle resources + BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &attackIconsSprite, &moveIconsSprite, &heroTagFrame, &activeHeroTagFrame, &healthGauge, &manaGauge, &ikariGauge, &heroTagSprite, &heroTagFont, &selectFrame)); battleState->AddMonster(monster); battleState->AddMonster(monster); battleState->AddMonster(monster); diff --git a/test-data/battle-bg.png b/test-data/battle-bg.png index 65fa4087c0e8c54024ed97ef827e50bbac2e134d..73e42b94fd2c501efc70ea661335d114bbbdf537 100644 GIT binary patch literal 15122 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 literal 15937 zcmZvDcUaPG^fyg=T0T9MBU782nOT~e18te*EX}>jg^6fR6h!UmX_%{0GjmXxnFCP~ z90*qCUYUXlg5_3JQUp{S?-#7!?|R?sz51iN;Cp}X`<&1DoO3?sCgz5@(XQ^rO0{`6bX`Apb#{)+Hfk1~q*RNc>6-JxR1V8bxEq&ABNc+e${&sc$wc?4q z19GOjh`$hec*Ujz@f!cApJ{aPI@op^+SFb8>oz3Ao{G>5dvMG|#l#0YVkUm-#Fib- zLnE91%8z?=7u)iz9Kw!uC$8W@poQfIzJ12Ue-X%JR|DFUy%aWRjAU) z@}OSD=<@Qr&!+eNQzQ zwI#fi5bTYw+eC$^wCegvt%AIS#Dt=Am}Lzt{)2m%z#VDEKU;mT@1IKC z*Imc+E6QS$8Slpo$>nFAWDHVXUK3cDdyzC#@fUsQSfhUyFGfB?vr^>sfHgnzL2CN< z$KS=qw(Oc7wm-|m5_`(K@CMoOkB9G@-Y*-Q@{fHHyI4QXKXqVO40w`vG4dDi+%Hhz zYvbUAj}kIzrL-n;I@Ojys+9ZUNAnM1Hy?Pd(W~1M_al3V>Dt6i+jdtWsJ0$9Vhfw@ z$&MEtDWpkU4p^ld3350ZPHUPhvD;Bslew|vqKmFxX4#63Eu>Hp7B#WF>tbLM_w?5h z^4BZNw!9NwMaj^1)zb$GYbsV6#Q`5UVV8ew0D&%$#C}X`b-gx&hE;y>7pE8U%V}4? z*%w)z2@wqCdKA7ruV&{SFyCW7J2PtN-vBdMcVFrs6U_0hIUPN-)-!SLmmdusRpnvo zPYkrt^x0s141U4zdXpMKS~5)zkCzvj4)sj*Tw^#$(VzAzQ?kx6N;TvoeG+BTRvnPG z($Hnu+}R1$^{&amGx=5E7cFnGaCBfW^Nhac*p;b6u#sJN|7-wl!E5LO9H8Cu|$yb`y;vpUDqHD*l}K4SuGA+YALBXj|=3 z_Ls?7unjP~NHhtGnq(X`0L-KQekBZ8It;|!iM4f+DLIguM>jAe`7hR!XZf_h$6odZ zG){f*M=XEgrT>B{X?d4D_D4<(0dkFMG$zy z+*IrU?MIAIU0!W;4)LGlSva#DY4;)y;=7Kbha#+gZzJjXx|wG|)lVtB*KwLH-GZ#D z0|VXD9dXQOhyiKn@uZr!>>=)w7iIm7iXw2xU1%5oNGc^T%Olh?x3)0ohq$5UpS_*Dros3M%t@jqjhRj5fkfMd>gn<09p=?sQAg?~3Pm)3DIt$=d zY{5cU{%mCocjmb~@V%x)1JSlGm|K}SVgo3x9QM({#$9;wsoP~*=%5MonX z{Kv4F3@)AEvKY**NK9~{UlgcVbqiiLKRlq?qT9Yo)qK*cuOsP*mJ0df^rL!9bLv8Z z@ty;Hwd^$`&E>HIAamOvl|@Y=Mnadt&=Ns^=&+ww&TregaF2=jXckmPWjscVbd{`$ zz+KJ*mtOWqh>TmAxxOK;T(svTV!-M$DKIwjoorURHCs*?nIfEdb3t?awIB5e$fp@d z+++%!Xm4_nwHAl@iN9CH69ooNX7TeTz_JMOPd*sHj`EVuA?#7Aayj+e>FMPEcePMg zHgeJ@LaW@RlHYF%eH_=?mj62twhFhb7o8!01L+9^0?SKhSH?sg5RH<-V7_Vc8TL;` z|DWh;*e>GmPewkL><=!Bv$GG>Ji#-ftP{m8!wmFL1*=Q5Ngfs)ZICAI#OxKAOwq|# z;{VH4(vaVTP0sAV>RSM)nMCxzqr>g}QT>PkcJ<1yNnCI664uQ%qk7Sb(vD}$PmCpM z(w2W=#B9;%2u@kKWWc__fj?n6Fm_*rl;U{61T`+aN|#Dr{jrT7F_pEoLoNkooX@HQ zJ5H&>?8DL;1+MEBM(eFJ3TCOSy z4r6nxY2d)YQ>9DF8U6GDpxl;uCH5I)TxOSVD zk$ukpW>LIWDk-o0ZLV~}$Vz`!fNcIL3cO+8H6W4z5)~*=l_lqkOfIr}=cf}wQ2WK3 zcBQ^nVUpX@Eq~*M2|V#hO6~$vPWpEg6e31S>dMk@9{9e>=vfabQK&o;lD)$Yw`Cwo z(kCVZu=z0l#HZ}O;&ge_J=40HzP-Hmh^V zxn4pJENWLO-B+ga0j}bcUWbe0z5N|R_;u##Ru3Vu^D33N%`jbCigSW7N=1^PS%Mq( z)0FSihogVf%ieYObccZ!pB@~dDi7q$FvbugRZnBvsNZrc5gFB$i*0=aWal-mhmB@O z813|?KPdPUXNA-QKu}PfyWXlN=lZSvLJWMlM{g^ih^)HPFtL(W%6H@)p`Cmnu=x$1 zxb@T(FZRQ_kkI2%X8!@89?HT8zbLPHH7+^C>_rw$DPQwi{p%#!%u@MMdzL4_0_%i1 zI}<15B8*%#<>sO?ko8)$y6*lkRpq^PshoOOW~bZk015wksny7UkNa&8nEOK!z<(Uo z$jdFTEz;JHyz!y10fj)Q-4$T72wXu0li!nwo_br+D78H{3Z1(0@poXKQvAPC1K_Vi zY;0~(gGv>uinn8kDqzYlREkYI-#}^!~ zUPqLm|KL<4gjF@o1YGzmUm$zbzY|JACt6QnZ_N2c!(2vp8Bu?#0AqruVt|6cSLvD?Aa#bm_xZly=f1wog;}oF<;z! z!}6$S70=OGWf+Ky)EGTk;-5tB@+Xo1;-%kh)3gC_!wRrqtS%@?L(SDg^lVGNfYV!W zZoJ&zCYAm}oQM1qH|96BF(y0wfa$#Bs-J_2$#4Mrd6$zgsVziSNfl)* zDCl0((2=)yt9Wte2+_2zs=W$AOURxocacbt9vx^4kuZC zK6BiTC~xtsdfU(Wc@KZZ%S%P-&yUw!atsPRSMR28KwK*1ocj-`FKwy>+FMX`>xg2^xHqMc}fGzq&^i0sf5i6-ym=PlynEY3g_J0fpVf+hvG&+wie}fOO0MFF2CTvFqPy))M-`u26q6r+%`sorcBLc@PUl{1$4&(RQy$gAa zYui4gDiJlX;6mO^;T5w*da;-%rQPwVsX%Kf)?htt zzseg7yiBCIBx>kOx)v2|om{?u{*kW4Kdf$v{=tDB?PIw$5o5FlVfXY5y}WR0b!ndv z%3H%g4p`c?ByZX#PuC|~_cHL`!^CU{JoJ0&ai?Zw)nMOj5hR?2G%R8i8tbK{cp_#C ze>fdaxfh{BAD9)EJHv_x|4{LR)>rapVR2@O{VecAJ_ zxia!G z3o!cE?9?7O*`Yv|{nI#xzmGD$WKz`>~`K z&0ueO)qdn7EK#zCSfuCq`%?k%>FvMseBM}kzRNzWYK$dBl!Q?W(n9tXCUbt^C`Bfx zm$=1#>A7fuebuWV+5Yq_DN}&p6^F|%Sy{OA@{M!M0WXPNio2X^ME76^)oSerT2)314OAK2oES&R!S;sHPR`G2eiI;=(cz1cZu2rfI zbheRV$lr}e!jcuO9EJ-2KBRf@>3~P8K*Nne* z3iItJ!P@fmH&Ksn5Ba4T%i8!uWnbm3-Wl>1d{b@O{H?P7#f}UEe{TapT?Amso{%<4 z`wKuoO>P*6gWhHT=O8=2LQom?R36?HGa_1fyr-Z?RakgkC=k21)B@Ke&j!DFoI6lP zc3^~aB1}}-l)(|sB(d(S2C$ED$rVJ(k}!`8Q$J?Q@ZB#`NJ0YqMFOQh%P+2m&!o}! zh6CRMj>@92{=B^R)FD+XN&#LL(n))g&Vc5shmy*9Rh9%yzpTN-^&`5FB1L2_B^OP- zspIm2`}PNEf_L)n*Zt+lB6wK=Nuj9JOt^t}u2`QMVdM9PvgsKL#B9Q=cY~2#7 zEdDarqvf@(-82pSS5Rkxt+-ANSQF;5Hu=LF6XHB={QJe;>o30Su5w65iQ{A4(DSti zx}v>V))fl9?!`YeRJ(9SKdyruFABOhkGplFv%j?ih_yDqujF z`Z|uzs{VV%l}X5_r&FARs?^ZAB{^_j@QnhBwD6U8B6xQq&hG($<^Tpc?z#n4cYg4t zAbk4mKuZIjU%f4}KDM+jggYPeW=Ws9`+`h5XEH!tKTaGtwiA1ySQzKPgW7w0krva2 z{l}U|NuAVL)dGJ!m0Jc~#V#EvND4W4#(&2)3wf0F^1)4_S4yE-vgkTj^q|l+An^-E zuY+guy>lt2@h5x~mW*q-ymQmRUm^2PG!x(}edjaVl)Qc$=<)1NS>TmBIUw_a$S`i( z@@x{OW-fFv+yTK4W3yoWHyXCX2-r_TpNJ3P{D*4IZ-YSNhv7$FRh!v#o*+JMn=D&6 zCi}B0*ne~)O%|>b*ziB!-7BmN@0sL9ioL->M@Tr-njF*}(^V$N$-lF+f$j;R-*$Wz z^G~xb{P!tPGV(qfHh?~z5&twe@{=~6j-h5&)>h!pSLcRV*O4;A4q#pWxC+>hkavX$ z-urnlpE_Il+6CrkAx5)%MV&0spO4H@*;uePB#W?VpykVo417jkps7D4Y+!7}59#k| z)g4lx{`WGe3k@6p6kstNqwMFH=`R@1l;4ML6roUjD9Cx}@^3D~MIml1CrwO`C1|Rb zRNBGo4(Mm!Bq^&~%$^HRB*3pm1HK1P2Z^eG3Dm?4Y?$q_G*LQb;w;@cITCLYFg^V;)cqwU6z}p?L z>Z`vM!k1QCN6S?0!mr)HdmO;gV)7`dE5zUrn0WjyqlPcl%~3W{Uhj~yD+jOgeXs)~ zd!fiS5tmJ;sS53TK^%zQV^;~^lf+0-6y&e@tSW)gYko!Xz$22RIi4w6}^_I7&8ImtT~_X7z-NR**MLIE-c8+7F| z;E2=@S3()8pSvY?pF5?pI(73%yUWSau`| z%;%?xxw)Q>p%{qOI78eLde7;77W!{nZtTz_*S0Z|=Eik<{2}g)YHqPD)H5)o;Y+Lm z&4)%vAdoLRE}OHM)fzwT!7dbk@QXC+q%Pg+a+>fcZe)ol)Kg)4Fq6CBrC7`;f7uks zZ5*%~lk!H5TeERz)l_FbXjHfVq)2a^wemGDBUx0_zd>Oiaz(lOtgDC6#RX!&R^|1T za{6oFb~&kPv{P8^AptUc8&l3uHoRMRYt$@H_qZ+Eg0AGEcgqpH_%zy8&!q-mK0VJ< zM!>y9*3j(eX{cG1{aqNLm+5GPMl1J4XTbrOMi_Ae=d0#5-hLzXwhNWt+HRZ>i zIubD-8g!I@{P>vcXZ|k}+#6K-u@pXK-Z=A@QK;(RMPTBQ{Af=jZ z2zJEWn2QRLxPN735cPnUW!SgdEwOR&HdA|N9IJ#3aO#~ z7wD09J^^tcygEpY82&juiqfl$IsRf177>qkqR~dV0Sn>pMW`Vi;MB$37O|EPu=CR+ zUDo{i@9`y!w`gw*>1jI5&R7c}g+|}is3GCH56@0M?tRIsI#HE%z2A%B%5EbUdB2kW z4FP&Yo59+F^^#RcPIgP}!(~-BS?CnMxO2t$9n}Lg-Co`}3Kbf48xu-dDYc1#T-=tm zW!PRBw&yAl@_mNn@dto?S{9;0rD@Z%Q*Rco6q`PZro`Jk=Y7pG1iFbF^|QvfG>%aJZy82$AyLd6&6 zc`f0hm(e@C#ytIA0dlC?U7Ve@%1u{k8XD0+l3M5*BJ(gFEq)O)^BuY9dLM)IY29OD znn7BsHN9EK-*>FdoBs_)34T&-!YNJo_Qa41zGKUBz#0)rmqea^k;-lr@gpoIvqI#*|7jbwD;vDr^~n{Q^8Lvee8U4xk=1Px!gU@Ph*$zqH`bEzOKnYE#CUwr>8RfBHJ8md%5oS@9|kZ;_6!$0xXpbU870`K zI&i2aTXpReyPVlY50r63#seht3Tqomb}rADp|Xc%Ja>LHk)TS|_;>^UgAwI-#*#Eib^)fx3Tr>&Iw(ao%19BtWr zw=cB)c`kiKU}*G^rT(DI`4Hj4#7e=6uS&u~^H2W7)kxKHmpmjU8!bAN>1hK4rCdY0*domo{3)ywI5+7Zrac5dmb*T61rXlcu z0V?&$wyER?wi^^?VtZU2_wEt(%bmkxYp`Zf@p5~o_@|joQVH$X8zE|8kpH~Y{tjk- zxmT^{=a_OPD)gfQQ+nKaFB+U&d6^6jFfRvFwuzRwK0LPgVfopX&7yWD*MfX9CxXkU zPA*-D>?|m7mp$LllQvJ6ecri7JDr3i3zE9Nr>YcJyP#?gQofbqZaQ}uH&4mpbJJ-x z2#B`53GAAMNP3XAk7VA+UaEbUJU5GtdMr#r>F;?Po+#M+q##+c(U45j2foY_hHUQh zinnb%4A}mh{!d(ic6N~dkgq2re<3rn6hp$t~E$ulC!sw!BB?Di?V;*rg}l z7tMwIhDF8Lnbu8Vyk$ds&kdBU3~Afq^e#knFPXF2J;rXc%@i39aRolPuux#;(?R2|H|{&1J9sO#05) z@WXmz)6^RoOTm%$SSeQfqAbcqC3(Rk=e+paT-SC+uvY-tEsj**f@m*qYq|4l=8Q{6j1-XaMZbyIuoT=M39_CF6V5G zTz(&{9@@~XMCj>#`ruzo@Hpd6*bJ_{ouGS31fMjg$Smy0<5P!3OzWXoT%;~0z2ZB4 z{;-wO@dt!rH`;gY}hx>Z_*?loSU$*BdJGD?@EPq71J>2ihpEk}bN)-%G`VP^A8g>}%Z;?_ig` zQjd!4k=@imnnrzH57&&ps)rl!nl28qwR>np6LAFPaAQ&fPD_?6D5 zsxM#@|5e-_UKRNc@;UtI`bCAtxgdzTS8X`p=5Ln)1Gn&7u68lo`E$(kVZ0}pxN(YA z8S&syE_BDuxr(~{($34_gT;_G&8*}6?$C_*ZT`~IBGlBsKsP&?iDqjcG=*F`t`d>8 z5`NUc&~^TVJsoC!efCY^$)Yj}XoBX%5}+SyW<&6Ip+_RCZbjQiuD1DO^-WTwoE0r0 zC?|%Dhyt7&J2+GAJAoym9gPiD-W)f$YC9A3VY;G9C$R{7#G7u`Wz%-kRq17Nr13I} zj;nsj%H77azq#(|BL)f|M4g;e?WV@5)5NykaSW67F{mInZ001+%~`|cTMCurli+?> zdx-bm29~`6u&b$B;>jh|+=`$hQXzG96Ab+9%riUn66S;eZ7B7!VHrH@k=Z>U?bLUmev`lCxGVij5aILKPbQ(g5EyQwUUs0Fl#eEz8}Q&cE&ec*nyr6bd_ zigH01?zdlw-R=}@+9Gqk%)gBD+!%9s=)@~B)2Cvk48)9ZC4lT&UffA(*_>zOVBWh;iatE_S zXJFEl-G5V+{e}0%%lL`hOLopo<%)H^3+HNWi_fn@O@U*_YfkCz!9B4h?iI=Cqax5M zB%#OB=Qy8h;UaQs+VqWbp<|WpYV10CcPl&NkVU$uxyDnC>eYjeyYTpKe0vY!0o={U zH_txZ#2tqroji*VBC)}9$Ur^vW6u5CNi%WwArb&+KniG8V&^QCag9?*Yc02TPqIfZI@95voeMp z5CR#a|JKRpO5_Y|piMY-y=QWrwCQ{}>yFaM5AK8S;Qbd^@`({n9S(onAd$~YTX)x1 z%!Gf)1k>nw?XO}=CgUb(ruUjE<+2Qm)boZISxo;ShZh0X@O8p}DIfCBr&4%^aKA6R zbwMR+FRSXV$ib3LSi^B!aoU@7+H*Kj7#I9N82%rO=UYzdP-s2xwU%4xIp57T2H=EG zh_7I-?-69qibBFhla`LwZQjHW>}2IXM%GQAvmz@A#n9sGAu4ae*cp$hB|1g9CAnD$ z2k_-Wl_AY;8|{uUHP#-SwUwG?Y7uL&FD7*JV9g}4&-Yo_e<3@yk}}t?A)Ow1i~<%C zs+H>Z#b@x{#k}CTIZjI|G&7X%hc%b`Qqkd4pfWSD);rVKyE{!c4p|=ITAzPEK@>yA zk=-@l=fYRVu)kei%mxK7n-5Vo^gJgYKo zP}e-P66+Lr<*4+$cCCpu$RLG=tbD#XLE+R1G8C)Rdu^5`EFrUXgKU-@gX9=!FQJo< z9PRaXo6XF@q|>C!asC~FRfy3GI~XqhLA~mck0e9dOhRA+?n;h?0xOoQ!CN{hlC_67 zlo{%|>oz*r5hly28H%~-p-xU3#B5vL$_-;V$$>XDr}jY=5!Nd@1XgD#^f-t9@Gh?C z`8!xr7~2)T+5ExHxzLmK+`h*RENFIb$wNPb#FQ;%rEhw83rFq*^bn%1>DmK^RbjCf zV=bGlgsG+Y*3>3Dvi<7K31;zYBO{Ys3$^cKeU7_ap?kt?9-)$E`rOhKcYmg-YU-i z={K~lsT?v{oqsojJ*{=>^VZ3fNxZD2}^mvg})?I7I0cdBa6Zz7e(S5m3 z7k6QtEe-&I1+z1WxCT`(Cfm8z_VoN2y7<0m-uNOv&?GX>H@;eB$llcI>t-$(Vgx0r z`2VyeoshAKUiJySrQl=1Z;#!jYgq2{1a(VLV7|F4qc1rv;BFASz9UmP8Y*MG## zJZ_Qa*fyKNty?+}gv#?aQw$W{NqRkb>X4w`Y5whSIimAi`qBQ}q;j;slEbaQG;ln| z@gHay7CdB=)bV3luB@`jMU{57o~EE_bi^+))06%p!tgp21DSG7v{>Wb%neg@>>>~|91rnvS%gj}w9)J=#f7x;y@1xU&6#yqgw)B=%# zCsmA5)RFA|lJ*2hj_Mbdr^J{t0tqjM6;tn1c~wSLGwyn7i1~9>V5%`b?O4G}WJ#yt z87O;o7)(jE$9i_#Xw)T4|5A4z+0AR0R_@>g>Y3;fE(p=uy|iS(c3x3lnOfW_ln0go zo?e)5vSqC;2DCOnG0>s+_!L=ns=b9w>-BVAd^I?ryWSeMYiYq48Q(s{%OAIEIikLi zY3ErVG3ldXb?x6@bwgMaxc|LX*=QzT5L-TQU4ND$XHD(dW#_8!;ZN?m?XL%tx!6_t zo!R#mH-GnHK;5eut(Dvd2&56|n%k=2C#<+TAr5Yn-~O51GR54I#h9EI69-RMFaG--8+Z52Jp8k6UqS>|WBXvnv6D1+2!Y<>?F6{eH`n=9>#BmqJq=K2(`xsNdGO z=h%9>DB>T8V0R4FbLOC}WB@zkNfYht{M?Z_h^^;4dH{P)dVcYmA9}^QT=5WxPG}6Q zPQNdN9~>3%yOa|)Fx<7}3I_E_$m_N-$^c|A@lr+?!^?Hp{T^&*;tYkR@vp6Xy$r-( zYvS3GUO+3@fL*eGlB2T{%Is*E zowll;JO?{kyX1x%$q`)x0R|&0yDtnHGl~8M#A+WYIrqM!(sQ)Peg*<>aj?MXvabZR zGAtkzNJ>L{i10)MVAy!KhyEes_7Y?y5B#FJ@Z|KE^ENA-D zac|Ybzrm`i%-q@PMCrY%76$0I{>rUk>RH;3_)zNbEd`h|KGPrviNT!7Bf02WxzzX$ z2r=DB?P1|AsT=~zL_Ww@=DgS$QLFoSC}NmqCvt+x<*ou)De@GapD#E2w7a zaYFbU#j57t-w28}GL(2$ZAE2+%0`Y8kK0NZM>(mr=Tl2?=Z|P#;jq8!^paA#Uvj77 zBgkLk-ryvsPCKRZ)k5Sskf$RZ99sO8aItt6tDVME+_6ohF9H&8z{m!>U0$r5;8U?1 ztY_5rl(9-T@)l##c-@12rw%wjZg6-LE?tcDbZ2RFIfU=Mx5TSuvc?k8$*^3phK@O( z)o#K|0F6FQu5e?ekyR3Y=RKjQ1+>+`Rhxt&D?$n(YwC1!@4uWQp0ygB)rRBPf)PzI zJp)|?j~nNBy*KvxIbe`lJRS}bbOll+S*Dv;&A1y$5cJx#5RjshCaY_lWQt1yD2x3ugc z3J4p2>a|mc0I{h1q7w=S_OTZ{0*@-pn8!^&%xn0H z^RAXo90O+ssIrgy!7$VEjw^CiJ^08AUZH~-@iRFxq4c;q~~%VTyZ~VhcW)rWTwz_H@#)2qXK`{)o$p$!Drm zQ*ZjBY+`_1aJ}L;%(R2GnE3!8LJm33q+0V6=}A#hp8yVwCz3y|pFG-j*E#G%ANW`M z9fqu4(}Pw;O;_&X4c+09Gphu1}{MJ@upff!s6f`AwPUF2S@ujPiG7q)9zXFRlqoNs23HyAoyTgw7f6n zS6XA z=KWog_(hj!4fTRvt{XS*=O>yYr-_5z)L(-wnpqWRLLaY^IcB*=4KlW&*qFerdexZ) zvvy65dc@ucL{Dkb*i1W*Ul<8SDCUL$wD`|auNv2kv8WvN5epj+ zfG%y9u=p-deu@HFIwQiF5ms$b$31m4gv*Kqv}YJC0}bh`1IEr#Biwg{197&}R|j#l zcO}HL>fi$}#9;K>L!+}3Hy53z?EVRsDPyFTv{#eA5*^*cp9r!B+J3}OKATJt+G`HC zWV_VIk$mX$257cSCS^aBey@v&%)w?kx0*!BJ(Q$4%+rjrFk=%JwAt6qJ?GB7b;3Qp zC8vNdLkaxRMKw)dO*!yqtM&Gjf}7Lqhy8~Q)Uqh&fp~d$onigUe+KgsWM&i_%egePI>*x zeYDV7H{S(s?oXcMn)-C;#t(J#R$Wv_6VXm6g5V5kTWOnvws6=1@pLE%`V|rdHc4CO zjQUCR+9FgW{!eWf&-}z}H;u)l4)!64tvac288?>wj#&hsJZW>i=*wv%1^4n%NPp}X zR@le#$LgGY9Z8LJnsg0dZ1TfJ7n~^30JTJl_b!njDGrdEET3IUy_6~$TdFej#liAj zJh$izjT1eWvJX$iW4@2a?T~GeX}S81_aqfp=y*H|pLQ6J!upLZ9`UyJEguDBXItb* zYo9$0P9nr4m?()E^<~kh;_YO57AZ|Xfs(MJAqqtbSA8wnjq)x zs`a2TIinnxLEQ#z8J8?eSj&(oeNb2|bKz*VTn^GM9KhU>yMU2sv(w2M8Layk_FsFw z{E!aYAKS@Ode}JdyO#CwgVlckVqwcE|RM*mQYXn!<(K?&3 z?lcryEfgJ=J)6~G)vNxPdlaN6!&86nCyiL`U zDJCr6$;lTV+7Re_(2(nYSjzB@B9M0Hfwq5Xz4<#^`s)0hlTo`AP3wAsz5qrS+Qig! z?7?HU=t|RV@!PYt?-uU>>Zf$S9HBWBW)5$-v=bk|uS|d0Sz%{#2T&Ep}=T3IenM`3-AaX(29s$IPe2eK7gvUnj$CsuusT z5!fH2R~0y~O9?H!W5E^pIJGKfvX|VsgAg z{^|0Z82tf7M*WXOVQ>MEDAqm$N!yG>{sp`X_+i;EH{gyz`6}jnIZtJg0H47z1;MbV zc$XA#pinZ1zQZ63C4NYo@`i< ziOo?1E8BLHWV)Pvh0V+0)3}vW5NfD7REJrej(;^Mk}6UGslu@xkSewdbt!LD9vqa$ z#|!gg80bD_t=8>w`IELI+KoKZmh(oJSf;AB4vv=twVEC~_Zb(r*s`vZ}|$_&>nJAHsP2Fx${$tvnBd>k$RLvJ&N#ng<=S}k5A*lR=d+M)Yay)leLnGHK!S**fcP*)WC{uvRp@J zA44zrB>L3ru#x`&?kR)$>vm$PU=ttJK{h>lYd!4tOAN-AKRc_ zNb+VtPM+6J0#h!;fB3FDSSZ1r!#5bRnNFv&@25-jFB1)wMp~!(({nnW%^hhe*~MC+ zTm?-tzc3t+(=;cp#`g%!xsfJ|UO&4p#$nEwj27M&%)fK!!#Pq$U3EJs@bf{TCEMNZ zXFcSemz+#Qc&N#V1G`9Za81!A3PJb_6md+If&dZJu9hD$igNicm#-$c#Bn&+F6N2{ z)C*@@?VVW~h(4%QtEt3O{P}s=!KV*UAvY5qteT&-VKSytLXUCHojbOcuY7+FXTPRs zL6t2NYclsN7V;m4{+hZGq*Zx&)LweNG5PC)u)N;SGFgeu(w3G2q@EuyfoMknGaeH4 zDgH-w^^;|}YSVcYYSH3OS7<=tQb;l7QeK;V`?BUhR+y?=dP=VP-_^vvfP|nxx3q~e zoLW>pE7R5JA;y=P%)M+qA%=dkSQGMVTZCE?@H+~k_=P}!a7*2!rGL3&p|kto ztJ?}QQ;vJ-@J+i92mK2r!%EuJB78}UbBLeZtAsZ9#!;^JX@_003my8316l(**#SM`M343jn~& z(?f00&R!1y5bpK?0Nu#O3SVukEr}CAQAYfa%u7%iAXsu~kk_Yl9}om$nOz8}7gsB}!Oe(L++-_91s9l$!?Uife6VjvuEp*8 z<6Yh0%UCj(GETUINhn4yRv`zHCL@2YO literal 0 HcmV?d00001 -- 2.39.2