From cc47d4113741862ed529d331c426cd1c0df6a0b1 Mon Sep 17 00:00:00 2001 From: Allanis Date: Wed, 30 Jan 2013 22:22:30 +0000 Subject: [PATCH] [Add] Initial commit of Lephisto. --- .gitignore | 28 +++++ bin/Makefile | 26 +++++ gfx/ship.png | Bin 0 -> 93004 bytes src/def.h | 6 + src/log.h | 14 +++ src/main.c | 93 ++++++++++++++++ src/opengl.c | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/opengl.h | 40 +++++++ src/physics.c | 134 ++++++++++++++++++++++ src/physics.h | 21 ++++ src/pilot.c | 80 +++++++++++++ src/pilot.h | 32 ++++++ src/ship.c | 2 + src/ship.h | 30 +++++ 14 files changed, 808 insertions(+) create mode 100644 .gitignore create mode 100644 bin/Makefile create mode 100644 gfx/ship.png create mode 100644 src/def.h create mode 100644 src/log.h create mode 100644 src/opengl.c create mode 100644 src/opengl.h create mode 100644 src/physics.c create mode 100644 src/physics.h create mode 100644 src/pilot.c create mode 100644 src/pilot.h create mode 100644 src/ship.c create mode 100644 src/ship.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4131ba3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Object files +*.o + +# Libraries +*.lib +*.a + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib +*.bin + +# Executables +*.exe +*.out +*.app + +# Crap. +*.log +*.swp +*.txt +*.tsv +*.pdf +*bin/Lephisto + + diff --git a/bin/Makefile b/bin/Makefile new file mode 100644 index 0000000..c9a0063 --- /dev/null +++ b/bin/Makefile @@ -0,0 +1,26 @@ +DEBUG = 1 +APPNAME = Lephisto + +OBJ := ../src/main.o \ + ../src/physics.o \ + ../src/opengl.o \ + ../src/ship.o \ + ../src/pilot.o + +CFLAGS = -Wall `sdl-config --cflags` +ifdef DEBUG +CFLAGS += -g3 -DDEBUG +else +CFLAGS += -O2 +endif + +LDFLAGS = -lm `sdl-config --libs` -lSDL_image -lGL + +%.o: ../src/%.c + gcc -c $(CFLAGS) -o $@ $< + +all: $(OBJ) + gcc $(LDFLAGS) -o $(APPNAME) $(OBJ) + +clean: + rm -rf $(OBJ) $(APPNAME) diff --git a/gfx/ship.png b/gfx/ship.png new file mode 100644 index 0000000000000000000000000000000000000000..4c845ef51a426849a40823800d9eb9c227228a5e GIT binary patch literal 93004 zcmce7g;SJo*fp_q3M(Kju7I?%gmgC&f*{=`-QA6(0s^v>AR$YGbV*4p2)N+VwRCsB z&u_l@{)2bk8FpcI7>4J*@9R3}I_KPRnr{?I2x$p1Ffd4zmE^QBFfi@@d*R~(pZKqv zPXpfwT$SE?U|KV<^i>>-hfLZTIuT&ma_iZiS8zb(9qNNPqV6y5Uwz9& zf&bk%5)9_Q&fT;he$@1be7(3^U`i=3pWF4@pNH>oqff35#E;gBe)l;>n6!@m_d9(X z7a-p1X`?6Nn*I&j7M zVnLosB9LZ635#+SouX3wuSP%c+yN;p%%^rR6TBAzmF)~3{;MwRvo98W&zmfhvA)uA zr?Kd9JusQ1FE@R*^leC52`jcPD4b;#A}{Q$Ko$VH2( zw^|f~I2H1m1|PIxSu^t!a>aUoH6W?^_lI4g=~384$QL`ooQo-k2Fdw)`!(FjKT9(_ z<V-~kHf5=WaO)8$8r7oA?8x`^_8jL`dubV3Dnb(B#?1Z+vUn8US1 z+3=3typY?7tcqr)#ft!@U8kn?s%V++OaiPJ3)Tb+IF>qc&As?C+bGy?U%Ng)S%!Yv z;q^28+xAg~lgM%h6iM&LpGg%QjT`n)Lxkm zEm*!lyUd`~rS0zHj(?}m=3s~Ahx5~elMJCw)p5@~MqMrEc*TgI*>yFa!n%t76C=3x z3(3?Wu7}C8Nw)S1btId_z21?w{knnH=f=+}>w1)j@V)&v%U&1lxQmzlLgv|mCErUP z5k?tBo8R9%K+zh(EBwYSCGE3(qc_ILe-w!du~v%o={A z<6`%h!s7gAQT(Tg1a~d6An)@40I6j%_ zu*8e+BP?M1GOh^(4AMS zsXE0J6Cd#;Tf7W2EVlRHqPJGS>eZ9a99K?dIu1waydk;SYOMSa<-bNq?o5@ww-R{| z!m4!xooC6WdQ}-oVnH^$?~VB-=#qXhF8MJAYss;1+UCUH9tFNUq2mo2;+)b^Y)LL; zkA@79BM8UZc>~l9DT-@X|3v|HZKE7MNTu5MIKI#${znT$IT4z3roQL>0WzO8!u2)J zvsgb+f;N%yOHR(~)2YdT;Y?XWL+3mzyX?dPN_Q^W0C^vugOcLD;>gvX%=m?wwzGFNA*K$DICH2iQxI`lzogew^Ha}_bXJ~XX zziaXGU87Exne@^b764&MsCya#qPaCOK@!KY1ML zv3-~tB#6lVW&7>^^P<%6k2yM8HEA~q8t$|mL&2Lf1Q~X^b!-QA>Snpb5IE|Str)j4 z#Mgym`Av?^(chFdo+eqE8kbSM6oZD#u@Go|=Hm~*ged2Cb~1tG&HWvy3N&freDjX{``Aq_2Uze)kI^irydS63rLJ&MC|SOG#I1+{pV>0;qK&wLvO_TKv! zl_z$}N0TX4Io-c@3jMv#VuTc@(fHND8sDRFA#pTg9f$VuIU@-;l=xM%oAWHSls8pL zYDxab53qSQD@}&c0PMt|~c^p_AhnY^czLgREq_;={kiM7V|T`0){AgO#7s z5Eed5l`$_4{orGqV9^{q`TY(3s8wB+i1)4Q(PHcV7=sXnsJCNCrbgQRAE^4#VQNH` znA`CTCGRbNkg8Alv%8@95}yy{Si`lCNMl|?p^?qae&62aRvTkq8SRTkoAYw>JU+0c ziASFGTT-Imw4;$#UITl)cflgLzLsK-5k^+g#+Ik;bh#zg9LJR5Z-hb

d;`2T{3uO&@Q-@QDHloqmXyE06_ArEbi*+cLhPG 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%0AyMV{75jJ``(`tIigNqG=D-ahUNzW~SiE8( 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 z

6Xb)+d*ad9{4`W)D8iym#xTS~#`A+R?>`qcc7g%r1n!!@G;tk&fVubNePh-g%# z0AD#cm}b>LE1kt-Z*OPC#tcIFoJFC}p9S>TxRiL4;hOzt0P5kTR&nE~y@Vgce2}Vq z`lM?9x|~Z?Ih#vMWnWb9bNMQaIPdcXs3(DYAFWI@ zB|yLl-}=BzrD>oRF{KN@h8i6`RLn)QnvfakSIuq={My#N;}%Ia$skD8Bp9E^_R5!A zmX7J@&)(0|-&a6IMh3b1Iakta^QT&tr8{H(9k$mRZ>kiITzlYv1Y+8!7Dd#5Zm&WB zFzi(Qgq{a5uc4Riugedwc%7&Y91Q64^xc zA~aJVawkVn&Y9zdr_~S&`mE^+>GJ{wFzqg{ua9-mQO-9AT}@uNVBz7v@_lJ(qwH7B z_7lQQu$SXKR%$$CNMj2o>$&R3Xkls9Fc!J`7@kL34lFWl>mj@B z=n6ADzOHK=v-r^Ul0z2xQhpW znxjclx)CWc{Jakl@G95t7(<5}hE}CNaHzdK@-=mUj@0LNqJr>o3!Y~Ad68pnB6C>t zeQ%oPLP5ecUIt#F!amn+#ia8>)kKY1Bq~yU4ud?=SQt}(7PtoKVGMgPP3v6vB8W() zP>P^eJ;$$^GxVUf?@C8*Mf}WoXp~)*RTcH&@6_siVLx{@kf?t7@J-vP*}v~cj|pqU zTf&F~=C&Iros}Y_Q{4mWp-8*ZqzcrZV4Ox(il`)P(DR3y7r*cH(-L^W&DQp(#^np$ z+?2m!;RxiqLW)VbGq8ZBLn&6fMmsk@ihC0mUe9zBPTi(U;omn)T{vF+XD@f?TWumHk9eEAH-@w7Oc zG)V5y)jW)O*yXO(X@tEXj0j10TxNcb%{^gdY zBhl>*qG0?3o(nVcyaFU&)R&QIeE#KcJoc$`^9YN32-ho=!wD;|``-e8@huMmqX#3ew?;w`*&DiChg7+X8$8#CqUrL2td*um zy%q}}%uLMgbV4c@#0BTvwVL{|TU`B>+wzmg-*2fknt04Yeb9NKx@-x~;Oat;*#~8^ zY!N&Vyoa5DHa}@j(C2zc%Y|Q8s}Y8-dFFY24j=9=usi0$d(J9K!$%zmccwDlSR6x< zHJ_|w8+3C}d2t)mCDI9pO~6~Rv@qMRFWSkj)aJ~R2=%g{U@$F`PT2HIn1RSII2?ph zg(MbvOlo3`gwANjzAh7l$_9+HP<>r1BZLaDc#wy8l>24qr$F7lcCq+Aj=M%= z)3Nc2=4BE>Wu|q_O3(u*M0T~vsP*uUO8xEP53-q7Bks1qf6`Vnf3;aLNYv&wqsE>H zY5%{2Z)Q#Y$k&DeD;{t7Wlq9G?B7-#zGn-Oe@gIv{xRkUP75w^C7qZ!j8? zCps&v6L`q4hxc@@;s|0vB)?3WgNu;lHS$zfWA=H89M>)gRM z_{JoiTix>!4b=Ex_#yP+nMLyIw72QWM}aH{jf7nmWVyh88ghmmU%;psWI{M$ZLd62 z1^stvkO_IPeZ6p7sa^bJ@8{yo%caW5rlqZ!{$DIQ+9Lzb)in~Ba2*+{NGoEJyQW+T zGyh^Bhn$%?x~x1s$tpP>yO_Z#bKDdQxKSwa#W7uGX`4%%EZ?y+wjS&*WfO)UIxWk* zKjHCzvtHblf45b#)AnQ9GQUhKO+BQ*Cj<>en$1-b1Y#+k{C3ZIpU|$s5;HJDgY5qL zE9p>|5ie!JmFV0jMl!KrkgThtdhM7aA?3YOs(Ya?iq=xuzm4IwJmL(9XJYu5OObQw*$r#w09F+hvU*F`056b4jQDBovL81|5N@TO z*nKcw+#Qpv`mA93Ac9(XTBD4R2V^*$8#@y+BDyON;tpYOtI{w=-UV=CYslq^u|a?x z@n$j9(RCw>LGKJKCOmfCN^jBBjxC=0NUI-bve17hSf=o>C=8rX!7zpkYN0j%5eZQ? zAZpMY7Id!p_z~IVuBcB9jnVwoj{&}1kaP*d=Fr4n2`>I8L4T)BgYjoPBxSc)u)W-U z2XZimdQckCbJLykcR88p+8-{)e82~I2L;Md_u711o>DMEU zc>sO{dfB>k77>I++d}fsExEF!i8hX4dUOLXI5sRVP;&+u(?^Vnbh$ve56U_fpmkRb zDMJ$>@q(zgiZz>6P2_x@9;-0+SVq2HY*bd9fo`YSf!_AcoH|>3* z4{j=I$R29Be!{z`EDA$^15kMQH^c7r#HvaPLW2?F48g!DdHrkTo9d4q`*9yBO-j&z zwm)$HmT24cxctd-aTg!^BQ%G7jWjqfy17W19sya$tzK9U85h>bNFXro@B2au3~q}k zWe=a4ny>3$YgK%|q2%T+1&4Ovz-~N)0oe z$!li*!BS-}ZXL>%Q&X5mx7X+-Eef%Rs`Lirsa2wO@RY8xxh`NfU3jpgiZmIoFFEh;&yyTk=&Wcuu9C9e39*a{m#C3{asV0L+GQ1Hc15myY z7a#-|S(Ezo#`F<|Oy>qI^WU>ANB`6~W%MuZ#*frqw{2oTMEo><|01aQ#;)H*s4X$< zp77>5U}B+5HW7)eNInAvyiWpM#V#0O?>HtYz8>F z(P#e62!V&oD;8RC4$SQdOm~+gjdU;R;`ds>yIE_t@;kG~ZYJ-c>IvIa1Gmq#Kw^&t zO~R+(35GP@?i>1;i?C|y@`O*(x$BxvLin7|$5PT1v|DYmP6LgKH!;LB zMimW9l}h#xSK97KsijSvLvTS{(dwT@?^hPLe0L8=8edi3P_XyQPR8(c3)R>ReYyB~ z3=_Wc+-Za4!ZU<2NkoQp1cFgCLQlD>jOG{X6ZXF~=C<0E2O9Y07x=@W#&Lzu-MaFt zhjraFX#?MPS4;AaUseygmTbSbmt(IBpanPVx(VYN7WP4e^_EQ%^Yo4%KSt*t?f(&d zRlt!+o>BR5cJ$&r-HU?ip+1`T@89IyCl5=BXbrV`TS*QNF-tmf@tq?w44F2EUV}J02)4X%R{Qat z?C*X81rlr_vZs@S-g`^iOS?k(Bo2|`^TeB*kDg~|N0qWere3HbeSzbz*x{p-@xZcQ zg?Zy+hiR8vHdu(z%({928xOjJ%{tKkmjd&)wa;TAG6D9GILTz3J#51~EGAxBn);2Y zc+DYf%&wR&IR!U#dba%*an;`Ot;Qf~j$~ze1Y%wIh{4QJZ03{3a zyq?JKTiPXdX+<#i+-%4SEb=YQ$r^2ua%!f%CV{`YH0dv8nI!vszyScW*Tir{9W}E+t^*#8y&Jo z-+2;}r>+EYt(mG2`bS2fSkKPReA#4mwefBlr$pjHq(=gp^1b7^UDn9;`&@%vyG=(& zuDucD&aSS_`YCT#`W>9B(ez3_83oO8d8waZ< zmio_=rLXgAj$cbgsip91goWJL;(KXP7mapq_4>4}TNmTkm{BXT2_)0FY~QI)`<}}= zJ+iX(1VDdfE|ZAhlu-e%FZfATNt~*q)LhD41Tp}NZcyjey;qS(H%&dY*U|s*mVK`} zHf)UvMViF|Kr@q@dxr*&C)OxUy9+6O%kjVMF}m+EFVrt@XE4!r2_~Y)o$I(v(qLNv zu}2o1a;Ri8wf-XlBP# zaPw~Gr+?834M_O;`SlMDMs8^xl-g$pZ(JoZxr}P~{$VI_soqO3ZH^*=OYRT6@U4e9 zFAU>l!*0pXo^q@pwCJNNxRrK?k}OZGw)V2vGI?E(_{vDajVIg+PlwG>0lIWt8es^{ zWV8bt_#AIrc8`t?UD*?E?)7ab@)L%fvw_Pc%?+guakd{{B7KOIU}6c)M&155B_ay< zNM2n0YE0OkTEfgRf+*5Xu^$y6Kfy*MuoW=nExB+luOeoCe?WLF%m47{4Y{-~Q@F7a zNRDjjNZono(&hS{#o)v--E<+vMVx)^-=U!k4Hr|j{N1h%#wUPSf3|Xnn^>_#-|K$- zMlEr`q0Z0or2CMY&28Y4IVsJRQPB42(=kz!WmW|q_iu)JhlDDpN z_*k0A;Jfzw*TXlyQ;8jN^@wLv#wvZNF1cB;wI8tj7u%XT96Zm8QKDzp!AFSTN>S8f zp;gFUHCUxQkBkAl;poYiJUY8xwsk}W^c`+Td-{Et{8Zu2hVSG<$!>enIElE70>~`9 z2Lk5CKsk!<+QXFZ(}djHF%_<{<>qho#25iLJ4Eh+sI;nE{o!Mc-|a@liH4^vZ-s?nbZtLL=MGhs0EA z`WrqF{pobYMnV{-Jod&74W*klB{vNL4Pc`dDS}h6kK3W(`XqLzcp!)ur;EwZH7Xw9 zd?}U5qF}bg64$99#vG>(^fNoV0?0;EaQptbWK3Y`)ZgL(<2By(bY^DzIQy4MxQCB| zH7MzPONAj}@1%X`jU0UvE8QMx${WbpOT1M)=l`8~rK;+3!UXp(E7srTMMZij-{1-( zpLOT{8;n1#EC{D2`Y0{KD?i*by90Qe^ z7o>4^?N_*%l{-__te6K&E@o%Fke>A&*G;oM8Ln9YL7MAWdC()0i`R7z4#^j*j1SlP zhBJZo?)@r$n1bS3P1(6~W3^r@2V?dxcYLs|PpA_uFV{b4ms{?VG#)G&n^Z9CQsm77 z`pY@l``fkBor{0}Y-g4Xj~KXYeOX($X#ePNcZXV4J(56X#+RcO$9(bj2Z#RL|4)Bl z`u2JIlV@%IU(>5)-`<9-FTbA6K;S4y~!KdaQ9AY8H5dF*Ao*jMWG z3t%Y6U9NhHw@+!(Wv_i$Iv*6y|L)}lpF=x4fih{P5qBG(u|mh#1F8gDZj!Z`%lb2l zr+OWvCt^g@AuqrGyfj3RLQB{9Z~xdhD!Wa796VX@@_`k5_2<-7tvNqqnA)!aW$ZHbZUqImj_C#7R!<42XYwl??Z?h?-a$yKlc_hdg9oErgG z4JS2utNR~?z?q!GzgM5i9OScDbW6V65N%c{Z|%E?qWteXDt4~-1977--j{PNn)`9P z{z68mhqWzx$O!S|u4tp3oUY;byhH`JKOO|%{_on~r=)}IZ{4CJGJgd8F#ar`rKz_6 zSS%RqOm~=I5q7$g*Iak{fsU_l%buila;K>&XtRXS9Eev4m~o{eY9W&qU5^P{(+op% z`yX{jSzbN2dhOLWg>U;KqRfcU2{rvKUr@2lOGmUB*gZTjIgJyOcYSsBcR(j|?0N5} zh|VOS8o1vb+Bx)++uh@|PjO$7KAo zs&P@m{~WO#ZCozZN#%I{22N=f>${JW#4ePR=y z_4fl0&0GV%RUDPw4LUWzeV@=$7&V4huH{&R6(uc-{MhfIsNY;mKIsM9Lj%& zHIf!532UP^gQG(DB@*afmCDp+dbdieR4pS@B8r5{MP`02ESR{yGeViB5i9wD&>TCT zovX2R}Q_ zO3FVREw14Fl?Ie@A&UNHEKoxD0A>A|N`(ngFB!I3%;&p>!s+@H-c#|;iT^Fm_XJ_~ zd_DSH!GDlM8yim6$ZHZWBHsT@!p$i$jAkk{&fJ-JRKN6THdiWmqPm3cTus7Bs60f- z@=v<}VxZdwl0%V^?|9QM4tFK$n%B)7NyRgu>X5y1JKsv@E5(|&Y&Jdm>O67#i2!o0 za~TrXISW9A&k$xHBP$ERo#Nu+M0B)Tos6_x*rT8I)p>cz8rUlkrnt4ii0$oxhrh-? zEAVKJAa}Ikck+w-v|r#0WQ=#N?%pvf8!R>Hw)sBqGj112X&uyVwQ~M!zsJ-YB>L&yCO#xjK0o!rE-;I9(3d>-QLEV;o zM(zW5i(0~_xzF0&=Q7u>Mcy5egv-{cTIS&3nj*bujjIAT{_<17R4tDRlRb8#!c?V+ zwS~v= z@ptwI$xhWv_Qdw@8wz1U3u%j}SYMzto)xFz1tToE`9}UN!{I=g0UpMq+YL@nJ{Xh2vXw;eUWF2H0+Y{t>u`C%9PF@ zKX}c%B)lwrhN80lr{0a+@XVxc$Ex{^&()8sdb>*f{%sF4`AgE6CmQ_Z7MEKjI2DEe&CWkaQF*y|Vt>CrkgCpYKGH@; z~s^j`UM<-xhZz#s{nF4-^Z=^4=2QW2x|A zjkn{p9BcjaM+Ck|Fl~mweH9cLK!Ji=68rVZg@qlBw0e^9wv&H9tyNwcsX6(M>ACNd z5We_A+~q8+9AJF5u(YJyIH;)ZPhsBsnD^g&v(EV(rn9xYr#9f^QEe#CP($+?A^30B zl3!WVflNxluU)ptlPk>=>4NETYgh$HorYZWe&?^RHAq4gi84xgITCX8(=TB$94xBq z+5=9UWq%d+O5(hme4C4e?u=Khc2ZpT>>*fg*0@yPUdadzm5-JuhW`@|D~Jt*3X zCEVvr)=)Gwc6+a=!;#(c(C96jUn6C33#@9- zXr{ojPC^(5iL@atkDylNC)UG++k45y`&E;tSy{<44?cOXbj!PNcSJon{OP^EcQ$5~ z4TZZ^{7R!8s&7;=%&otEu|m|+YzJm|*Z}$XKL`?UtvU1N(b=Eum)>)aQBqyiLxtwg zsXa+dgu?-`OepIb9p!*X4HEq|>-m?WBt%JEq}i;B*sPY}YOde&X?M+bE~FP9XPJ$2 z-!z)LX>6##NFzxhMg2@Xo2uQ0bPdb$;*W&0Kq#b$k+@dXH21$?7`u)uM9&8PXzw_2_}%IW>VX zuvPKk&OJ{HoncZ(OVPNAQ1s~iivu^oER7%IvP}yQY-Z~%z4;l{)$J*olm#+SLxw*yP%C1h_5R@ThflmJ3( zsVI$t*)FLXF#_Y^=@B+h_9n$8FH2n~aFe@vw<~+EDsj}e$aC7e`S6%fi8?MB{TeEt z&d-nwq8SQU=5*fU0=4DJN~T7~i2nJa5Ord-C0;AXya=6X89C1&PQwJ;xdO)$Th`y# zv*!Pjt$jD_eJeVG^x3^KXP4c(N5-qj@}M_)q6%x zZK&pVDZap285QWpaTeRf!*NC%Q0SawZdzM%qeBa(= zr$=!A{{0(G*6wCbC93mt>AyWS3e?#MTbYj@U30Gm;SReoyCGcY;nlTJPeXXzKGh%? z+jexs0jXnZ`XTCyvw=R_1GlD_0?|mu*xLX*Mn(+7TIP)+2W)3CDtu3MSFbX_Wyi%x z9{wZkyXQPPRsV00Pp)6M&HOW;g}5#7cSn5iNBNk`|Z@HfeaIO*A6z5#b=?J!@Vm znIGoewj)XWXA0i6V|1UV#c0*hHuqAPCR>d_ieY4~VB(jDo5x~*g9_X#W!H42#(xwF zE-4%wH`RJ|RF#XIt(S{+vH;A}V^LuTAsL@>inO`c%WV7?AkhG#se$@qRC2~NEm^l$ z8SiV7b|yAgF@;|+mR!ZKCiklg{IxsJhA5jiBVUT$C`=D-?Q@Rc*VMz1(MdvM-$KR8 zWf^6VL!D;L@GLAu{hxA*`|i~4VX`TVYJA=jI3RoaIPhQ2nu*D)?7B_+TKHj)pHZ#+ zkq(|$7r`B+-xXI~!-i{M5HRr-r`Bm#5;coJKSXL;Ib_gg5G#H}K2`>J)!G>z)x1lH zBc&w%P=Rc}KZl9foj&#J#*etz*~gwe@oo}{C0X{7oL(3FpKw=@S?G)1#@arjV@6Y? z5WleK0?5;UfGk1o=?c~q7fsBPM9}tf!>QlvV8tnE%O9SHX5Pm~QFT%s(0W7VozTPi ze_8;l!RWA$x@mK3KYkb_x|pFgi!4xN8S}m&M68i&Evv44nosB>m~tEy4Ei}x7oUXu zq)VHd`bY~LrAAATF86toeri#o+=n-XnBK(lwo;2&PD3%oW|JZ`>s#+m-e}&NYd#tT z*}#em=koA~>`A|Pk1%xAfc0EiS^4FDLi=7s%*xA)t4Wa_7A^^-ZX)1`i5(ic8o^J_ z(G||p2Iq2XNCYr3wDPId^!17d`tT#fbhL16+kVjyo4@<~f3o@uu+7Biwn~(UHLd-? z-?@5@bN7dKX|y{>@FiVC!qM0g2?xDHs9>5Qn}vX}B0 zQxr{C%h3xdDqi^l+GOPG=((;`x1<6M+25Gmo8^a9G@uo z7N(5X7|CX8)ilz_3Dovu9y{n9>}H1DpuYF;9$QXQ#Q1m+XvlKSMML>DJ$60r`8d#E zS&&+cKFN>o6ITvLI2OTktx{)xIjpIVR8CIrbh$YAH1*(&)WRukt75cn$J1b^tFr=2 zozWknP5A2)De^Pj1|D<@K;3b8f?-eT7d znv4{3yYGxN&JQ(XljDEy9tK)i$f*+&OICaA9>K+5I-jeb4h|vuwZqm;lA>y%Fk)`O z45j>xs8OS--F}U0PJ&W0iYZtR3w3yR;H~j=hK8Tm-kQ^u6 zpBcY17C1Bev*Kw`@rK-Lkb=G-a}(Pd#c7*>L3s(Kk%g*BYz_}0=beyhHaB(8`@bkn zO2A)-BrP&TPMZGSf7K3Hiyoe}v!m?KJ<@kz6K?*B42z#>PnC7iC}Eyc*c)Wwx^0A3)= zns41E%CdqjjR=lhiGB@>MyvHdyNH<+GD(Qa{W?iTTyGUJ_iLH>m0oy_%RHq%z5f-@ z0dvsM<~S|gcQh;j-BRU@bkx+6?lYUhyv=? zYAw=uCsI*j4=<1KT)}T*-&E3UeYno_l14@mUNTLX?RB&u8y30%$Iemc?!@+H_R)sT{pia$2j7SFxK*jLn z%Kbq=)+?t0O^c$Xv)*%=J|@D7_5APOcCAz#DKRLM1oga}7I7WbwllEx#!2R||1_S{ znp!53_cFNEhZXP;r+y^O7Nf3_61IG4(wEjnlj&0uNv|4Oljm(cW!8*RNC+xrQd(5i zecK>><`+zq_%#&`uXNmV2TGC;GfVj?b73bAhpw4`@G~muk7An*NRy$2S21$x2lAa5-Kn$j0d=yUDXWK;DaLm zUk+0^(cS0gK@QlvzD98b)mTxHk}(RUO@=+#YtIH|&xDW4v|HY?Ld(O^TH?Kf13$eI zqbWK>@{{wgCC~Z*Jh#HH?^emJ6`-Z!KYX!&G2we6{Hn*`5RQlg+f!Qm>+h zLMEW%-gH5uVwGmeuv;ThQ+1xy+d|R-qjb#*P@e?YC_3P9Dqk0)3b94{93x28nyep>b^~QFEyn z6Uj5Z|0xm)qJCeJ7^P6NPB!gsb9d20(WJZ)7w=1K4OId!W*EQwT3-+#dUI1tM5 zYIKuO0C-*Nc$%n)B3X+`8GK6^=JuOy8t(pi{2Nzxz-)Dadu6#hhu@W0Eg5d+Ic2h< z(ws6^qM{<6#uRdu%TS_&uG~!0m29$g8;jlkX{~1j$yGot0I4x+jvnGg>RFpgM{!hQ zz@@~x{l(7w{QdE#T+>Lz8?MNLvNPl=ENXoHaeT>&xx%JO;u4V$v&9NSH;-yAx zo=(=;XVQFAwWSxGHA<9WnfV4H`pvr@&&WW70v`!{w-Q#ADYf;C&xK8PwUU-i|60#` z{v5j#QQ&y1sOVuEU9xh{8n^SW^7T7>$%1wT_Vlz-`d?UD%CXbytj;4FI(VPq&Cx@W z(8<=hIS&Iu54X*xGpaNyl$esEiw{K&26ukL3#z>OaN6CyGP@v63p)D2_)^k;Hcg5M z^_<&c*3)}$GM(bMoh5$;pLDNG1gnT)Ja%c%Oognz%yF9yuJ(QtJ-|r>D5_{TL2|Iv z`O(sH4pXVQ-_77cDe5mv?cd7Alp=0R@H?D67Hg7 z<@_y`{A?LUB$s|YiYDoL+`0~Sn9%vUf0`T&BW#WDUS)m?#-4?~)`9NZl=pfvsuva) zVQv}HJKwI|kWJdV4|emV_~A@QMqSfvuz;cBV9xk>X#4skNf{f7P9b}2Wk#Vw&>wNH zSLv!v9IA~sqvnY*x}h^<=H)Xa&~Op`Y7Q1#ia*b|&fk_S-p0Vti`}FKvSe;QLPl05 zXPG?9XG6aQAAG5{JYe&5EASmb`=cY9r!HYBze?`V=S@mWkKdxJ)=4s*5SO2f}pYO zQL{T^&GU!CFSf=5MALH}f42rGQOVRG!#o(MDOt@_tZhD$QnOItO0O3sScemZf;OzP z^D2jI5DKWv@bO2wT!oLBqn8JDCW-&?&g0I<#gds-D;4YODlepzy>F@ank3n0KUn?y zF}I;Gj+LEV#lMK=wr=EH(wCC=z;`!^(~e8*t~|MyKa91v8$|S0&?8_h^SZf=8~D1( zZmf~-+CPXu*BDN*JF~Ywvv&BOjt*D&igdK9H6XW2mzD5Wz~-VnsU}YC9g3nn!EbEj zZeH7&z=<|KOhT`@iL(Z5W?WH$Q4j@gP2;=_502(fkge3c3h5p0(r_Z0NGtRjFG8v1 zbNqY=`ewRU!t%XcoEUGm*z4kA_GAre$RmHWY54s4D@Zr(gsGzRO(IJoR1S1%-J?UH)xg!pE2x+bM}j-Ck95GE8xKbUw%Bp$QJPB^%xuftE#^P#*!{Qe zDlF3F{@PI}GAa@sE#J4bwBrrG-CaAouc>E!fo}vEZ^ea1t>=slDTzeSs$H_VZMU_z zuBEXRlZh3JI2XB?|E>XsS(71-&#n2@_KE4z97EB!3~^4?lwi05J|dNxF+)Ox`*__* zYk5a`?*C)%JiM{~<2G*Zl@!@4-DQUCY+1?9$ljamy|?TTe$-6}Aw-cqLbsV@uOu_; zw&(NiIp_Hwo^v|Caq5&?-|uH!@9TP92z<%?_GFW@2&SO3wd)mfR6)rUIBVB%s(bnN ziEF+Gwm+Yd%ijEc<=qg<-Zzbir)(6zeSCrSYga^;g;2))=42ptwJ#k+aUtaftt7_x)VnO;yV$)_{k*eyjDczqMm-=F<9BL^zNYY9jQ(_SDS9+_RJ(LX=tZ5& zb%haiq5=xSm`U4l*~tFH6zIxpsp*pIWin$=ofp zJGb7C`Bs}}_`g0QtMBi|93hbvY>GiA%VLh&ud&vtV-3k zn#Xs!x_R+-qIH{}3DjI(hY2;egdr4qlpnap-}pchGudF@bpFkw!K_V6Qv6e(0f$^+ zYZgQ*cH$TZMQtB`8xzAZXJDdn)bgZKv@E&f?vWN#~E)g?|Ep%u1p!j1I=l8fec#FEJM(`h_ZFc9~dX!=LowB zu0dW-g`H1CFw(!7EYosl2K{9LeNt_`!NIP5zn|9)0*yJvfUSb|xE-vRl6*g`VtbaG z8}!ALv!)CtUzVm@{T8UvRROVVG%p)@CU%R}uj4ed=-lI=@3HrJn8hM())`G2`P#fm ztBweT9-g1?nXXp_ozu6i>o>c;O&#USu3a|*=~^!Mb}Fa6aTI&XFZ$d47H~-{&+3Ua zc&JCF$Dxfa2^zivBzk67{C?jF_U}1*lF&FTKG^z7wd=YgEa^XW%7U7eMyGF}Cc5|p zH_&k)oQ;mwesHF)cV1{h55`cve6z-nqZzqk0AmTgHvY>Vf|Tv!1J~fn|L#p;VXpDV z7f9YEYQdAC)Qz^ehoj6TTEA37|3yBP%GYEyNx^bE?&~jVA_+x#OLL01F<^H=7B=HY zS>V-MTlOR+z#F8W*`D9bi^&+~#)mn=8@N>BbG}jXWG0fm(zMoQR)B#aZ{(x_H&T{z z?_^Aezm1as>*_%od+XI6C+|HBinuP5{kSlOXc@V*a~k?pS&`onmfS3Q7B|LsA&d1* z=Jo3Q_t8!0vAufrN*ZXs-PEQppaJQhV}9dj zMQqR12iJLMkbIju#4A<#ZEqkuaE)~6&u6n91vx>rR*J-^>l@?A;D{2rN!Tg)e7kDv zTUS9T^`8}i?QhGto<4g@>;^_H>52&caL>V*S>D#qoV1CD(XvRBGOUfjDu_>kwFvBdv!)a$~1oaN5f&*2|%_94ySs|t80?|^PBtFgy6#>ldFaz3pZ)rhw+ zTat6jG;n15_SDprP`Aad8a>Kco5~t`(tZ)hgs!eTD0cB$2sOWWR2Y_;dadjFwZ~7M zba;Edr(@`xnITD1r*Drw$VDQEd`-Ic`@tTG-*Z|8Q)G3_^MTTWPm}MZa2HAq|4JoS z5c?R>65*V0e-}LX(^6lbK$!Wp;~VS0(GtPwzpf|`(Z{z5 zk`7Z5=logl<#BIl+U_c2mZVSYDxmK)cXOlgs73Ec^k;H*yAD$YoTV1x|G07+q;RKS zk!X`+mi|n#)X!5w?K9ASi&y7c#zSVl$?@@44^O*+dBqN-hs`K4MHdyAi|Y(=JKtw! z46LBxh-qv*8{4Brfy?x-o%W#srkb`)>Yd9Lq8@jhXM&eYN?hkAAXPXCnLp#nd2ow| zz^Z1=IHz*1(RLe!HqLtpF?n7tBG!Uy*c&~KEV04c{tJ|e*OA0q>=O5 zylAsTvOFsp01R?Cl+xh#2+1H2%*MTDuG*?Flfl)?C-{LyRp5QP-|?KV&{mVznN9u* z6LVa^~Z}h4zM@fE?RYh5gd@v1&F22>MS=H+C+JLr$4O%3{)~xhoP;zcQ+vvp{J0`0H&2r7n&8r(5odQEI zQ&83vWD0G>tgP1vCyi*ewYAM|%@6uCFU`&#ov#lTrJFyFxL^w&Lf5BJHCw-F4N=oy zP&7)T$C0b6Fc63gYzZx%k!~=O=DHcfuAGuVt3rCK&VjT~hZ4pJ4Mt=@S8#TAR^nKK zY+UlgLmG<_90Cf!CV`!~jgKCYhPS;kB&F*^^eK3u6EoAg>JH&Lm^0CO-$^>Xjy##E z$bJnY$Nc{=Ffc&Y4(h^{inPFY55aGUjF}k_g~ou-XTbk@hT)A9*_%b~&rxxKu07SA zI})*yua`syuQSesz@cUFvCT<{hq9WUqXaL>-Ljf?zWs|@5A7?HI2RC16IEo^@}=8C zR5T%C$%HT;+p$GYs*=tANB71`dZOvMb}}D$G%1b zB$HM!TVFMO7Hr*4OW<*ZcIQhwgj*#qZDj3-ob9bf9?w~fp3@IaFT>2sAS!Tnv>n4$ z4yzWFC51B2D^h;`Ro{Af8Y6XdqTbAcTd38S)XZQJ#V`N=EUS zu$2L<%OF9?sH>C1aSb#ME>y?v(vtocZ<4eXr2aPxdwWd5fl!P_LE|9&&=7w%+K;t` zxr}tiArBQav$(mrjcMW|e;Q`C%XeHe3YZ;JDj9_z5LMxXib|Db){Zo$W(KO9J(52w za%Og9@x{!H>IKcs*mZ`aP@O6VXKXz^YWQP83mci7jFV--k6wg`ONSPH(o)BBBdgkk zW$nI~^OyCxv09~W=B(F3)R`ArBm zqy|B;Jsh`yr2e1B;3FJtO_*^bHNIJTdqdu^qvri}L;aH4+Oyh5PDZUH|v|o&L8!7-qny7AH(=yaTfNQYpJiH@{XN4+Tz? zduftY0X7#3nZnC#+WQY;NJFwXllV;I?)X9qmC-mRZ|vRZqV1~$sjHcb>*?1+e6Fxt z{ZHiWse>++p4~e^CFTmL&R6%VGNKi?Y$a_eVl$P_PGvK=Dczk5SKrX>>ZUX7_q&?cw`P20=+tVZKvz5Grd z4#D2~;|J_&0>hrvMef%^p|K36ct+!1chgSWQgryiXN&-422cg zlaL<3B!}=>y$jSnc2)1*eXDi1e}J1c-5?BsBP|dtUt~#el7rB*v%|ww8--@fk$0uQ z)p1n($(B3tk8;`H55|iZiHR(XsvX1JFkKyzx{{z$h;~`k&@J+z@dk+Cuub z$pcwv6XK&fBnoz2d@ ziI2NRb~RYJ>}IPlHCB*dRFr((+0k+S%xF9aB}(^+@rU5S7y6zHFmhv8JyVd2HjkA@ z1b&fP-RN7c>9r9^$;E4IY)tLzpX<3l!`&M68}qCV+f7^d#;f9L405JtDnn8P7{V>+ zBVHfl^DZxA2d7#8&EOO3&y_Jok}*Qzk!{2&H*PI0#kB8rh?w8txjdQm`JvY{sMPDd ziHWMg!<8|E8RSM|x#=8oZLh!oH(M*3Widn?qxCjxj>-O>O5KT2k9B3*Tf1=chOs8S zak+bwWUcd`a)kS85PJ6r@NnPiWdf$;p9$Vq0@Jt-E@Ah@1&GzgK@TVJ{rY?VxNcNH zTRq=5!X^;2RqBiVXeNfjs1k2Us?t~BL6D4oNEx^ZyOwWK%==zDM^%|o!N|81=aNh} zi;Fchb>NB6)gH-oh(N^hId9a(yI7}uOmOlBfHDgek<6$kuv4e&t3Q9h=oEx(n~vHA zT9)PLApQDJgW9hjUyvVPT>7}qw=@T#MK`Lq+k&Az7#2i{v(4Jo&DAhdjnw!}nNs;* zZM%$c>@!Fmf$q$l0<+1RN@-mx{TboiY<)_;_%ou- z{nDdv5TzWCblo|LtTJ(1Jh=b^f<^|`FHKs(rwd1%6CqXv@nzxc1fHIrEkC_!*AMP} z?MZHnNVsgl+&?6d=AnAyANuz*AZ=m#q?Rl6aA0^}{Ayo2#9fwbkX>1<9^Ik(lOz3Z z3cF}ERInv8NHlH7T@AJ}&`mSHHx@X(*s9Dw8h#O0sF=)5`RiJ;eeZ8EaB50p{4MqV zoS)EFy7W#s*X}2=`VRe31`>IY^|WkkLpgkgi-2`egluXmU1Mx)+HcGOHwt<){)RH| zM7E*zm_+u=E*h0k8Tb@v^k=(@=4R)p5)GdG^G+ z&7<|v6Juzu(q|P0H4+PcZ7=YyPZQ##V`LMsgi$unlG)Q zEpgrGud1Hq(d&pqq1{U~RP%@`?;MCnz95 z37SvdjPGUzU5MQvlnVvvW(oz^C7W%qgBbEmKFdxFYLRMOq#qP z6>hr*ji3V3uv}L6hLe@hLIY1@K;yL?+>vXENR6_#4-CHf#PM&}aby^MH{-SkU2m)e zF5eh$dU%cCym~e3$ot^P%*+f!>U1P|cwC$y$)06VDnjo`%DZ)b$Uc>o<(8+vfKMV} zSd6WEms;Y}iPYg%KqognipfckHh05XSg*;fXTlqRvQbedxJAgo{pub@$!)($4Ziae zxfn9j*>Uk5w`R?g4&hcm(~T?C5!q%d*WBdTK{IFN=gqy0j2pg{VRJlh?s(DnBt?Jt zd=0M${cgN0SN9g@4PPqP&aoDyDb?2^UQbW-6vZV3r|uAa&y}GN#)}BkR8GSq41eR% zKo8)MB@uN#67(Sa&8=9ow|hv4iiil_?rZs*c~UDO3UN86w@QD4P-~(G^JkY`U0c5= zl6JH3@MBKb>%g{!<^RQ`yZjD&e-#IF9P88Xs&@5)6W$v#t?z<&q6*8aRFPHV2ah{) ztC&b8k^*bLyH)*EJEa}BtiMmCT&6;pzrsR4$@S17hl5=cPg%>1hBn%qHGL8T90rfk zXW5&l(>!)KqJor>E1RBqUm1046&a@O#dwV4B5}lND2KjTY;@J~zW)=vG|RlAcOh3) zHqrCpQZt(Pue0FGyyy{HV!Vzfd|I{i@D(v;Wg@jYf}z@e2JyoWT%8?vc7{LRqy?Hl z51!n8a;e=PY@dwnY^g}1PrbLN&`Z+HA`=dE&>?R$^vKrs4#>!ZPX@xxg+3K$soXw3 zrzElThy?t!pjwo9&hQVs$EZkl6}xPVZUQ%kX$SiZHk_9|huf{YgP~GxpN;MztqsAI znZFUrYX2f}`&IncUoldLXG~hW#g(fKe&*vdp;g!WO(Mmlec_mTVa!Lw3av2-8 z2z^1qXls@oiKpM~-;Q#^+88BE2IibmhGgpF+nLo{dg}+R`FVL&SZzsv#phSkFJ7lv zU&%lK6h(<8BSotcH0qrbpP1OMon(16IMc8;nP4BWQQ5HOU_iCK&9tRz>@}9*yFUWR zbWho|z=hbG?ooJuvh?1R67e^Xc3B{c3j|vj_ew){H;GYKJy}j=g$XRm?k|@evNk@ha{y?eUeyHZ0=lL<`smEy};f}o?y3t4u`;LA$W zCd>Jb4he}Y={6>e8Ga+qP|Ff^mUII-FFYT5!S@0p0>f)qt7n)3}R zG3-sj=RQL@vW5?qksF!o@eNvKlTqbWjfYI^eMhJ|EyCy}EF8>HyD)2g^0o)bmkVF0 zJuS%~z0_)Z)M7f{Vu??5BJosj93-!i>Dh>)WnB#_>>-a~2ZwsgaZ?L@o9wrd@x?CE zzYPeq=<6DzAIZtNsw>?gpeldh*m-BF+v;=R`eh9I0R~iC@^*TBFA1vIUZUzw3B?bi zzRx%DFFWo~w>P2Ue=_JQ{+1a+x@Ar6ldSH8|3n|64ZoGe z`Etd(7rl6@s>qQG3JiwP7sI}i+sYEOWO0i9Hh;3&c+aK;l6m?ZEp$_x zVD-eM$P;=MMHdy}>XhC7v5|2jzq%#!g{o=rd1)WFCnd%1H2xvext8fXMx!w5=GAPv z`o#j9qvKl0xM=HQ*@jYdLB7&kO5s_raRw3ZO`3ZdVp@HS6ZLTd+9j!|3WFSzvpY%s z7k#QdsD^RlzHY&#MB$lJW##>#Z}reQzxX*<&IC&9&pS(6LfCjT;ddwubU&V6)Hu#d zS_&^l43l6dE%7xv|Mo>tiSCaiU;M=7TxHzB_eMAESgEVK{%0-vqwK+|3MsfsEHIRR ztKX(v4Dg#e`I-DW_q>5_d2sikFdjBCB$ZwC1_>TT+@m*$2VmWsu2+AFTAnuX-JK+^ z5nY>dbYZ6NIq^c(Tt22aZcD0mMoXjz(WUsk^+obP>#nB_$!5;ZWV1~c|P+OsDEH0EXF#~TknL09sO*7R#&&AP%CV0kkFk!xj!xu?6TXH zDefC;JvqDR_PeXXH86pW0O#thet*az-O=pX_Rm5|&mE#P*1nLI(}k9!%p6*m)(dZm zizQnyKeP=mb`=qzxx_TL=y(M|$zc1&ngjoyQis6QR z;^6Q;2;NhdOl{W5^Mo&yB9VjfNtd__D*?>kEv&3)xO!x@>3l*?1+M;v-z1NJWI4O5 z|I2}#3?Zw2Q`JzCa=-YHBx7ak409iS5dc=3=gKdy9L&rXcrvY(hddT1c)n%u-&=NX zcYkl1llSm!Y1}}dHfVanGEV*%N3?ZyO;fl$f4I&)+;|JO{pITfc;~|(*K^uvLu$%B z{y2vCg`k^waW_|2Uz`Mn<#MCMzBEaM?8$!WZkcPB9QR-Xjp`Qs~dJWjcKLE6>Btw*jR>FZ`QrgmWug zgpb9D2Qs^)nOQOBaL;>q@Lzb|;&cPVrxhr3G2})j1f) z*Gql48g@=q+DB?2=```UsFyrLiQ1e!RdeiB*qN&S9@qqb>RFwg0Wh!nrkDv!NXSlmlPrPMdxhxreXbrf_N&egwwu`J>DIlT3q-47reT32udML8>DAPy1^?6Ne&IvOvtJzw zW9m+~BbpB?K3yQW`d)j{Qx}^T=g;#WGJ00v=XPp?ynv)-^TPJ$z^(`(rHpeSQy{9>LC;1D<;ukj;r;e_aWQ) zL7E1K&ELnyMqi_ruc=4Mgth(nZD3dN?UBAq%W_8FcLnkn?<%Z5HZ)AGr1!lvuHqcG z_AvOE!~NZB7R9zW(Ojg}-uOdY4f)Dd3+PCh)>#bG!8yfiLqfFQYzGI1UQY284V=hR zb=!}7ok4h!Sy}7Eux^KZQ5xNu(d0X{|K0tM*7*F`*jb|UbUoADCs!s<H zTSTv`)ve4zJ0d_8(W4}SH@h^y%oa_3v`3>;RJ^L`QIZq{IIcu^a^YO4WXjp?n)2UQhDOWf z4<*zYeyvJpKbe4s==|zra?JJf^A)x6)@=LSrh%fbJHy_)-%wQ<)0uW2Ey%&~D9YWW zC(+jVBzO_$m3d!!s+xXH#U#BJalnsY@m@Ke<9*I`G*sz$^%a=icHZT`GCs~x)9^ax=*KrMbE z2;W~!MLM5%4bBRz{ITV2cyyq6wXD5sRe)~2PjWPTI8tp&%QzM6Y40Z)P`Y-$Um_*f zYq2AjQ~YoM{VOD!X1;UwlGsP`>Kv^&qpG%X*&K5whwM%7jF@f}5vyrF%G+*Q+Jua* z=@+Uz3-zP6L`!iFNy%X;`qqP=pQw_Uq^6EPy>8w8^Qpz$>8$Hu`qSSg0s6QHKYuxL6}&?~1_OkOyzqiK;6}7rVi|{R1-T1%;O?-RTer6B_rp6j>m@ zEW@W`mN>o$?saGG{N8a!Qro~U$aiY$+_NR_wfticZo2$!+PZB$MXC)YIch1sbzg0)oGyxC_Cmd6QJ&2!%;7YSJEyUl`uII>4rg3+5 zB&#oTB$8c;Ag0qN@MzIh@`G+2UW7TI!_Hf2^+T@Qd=&W)MAMjA&a6}yx)lpYR@1N0 zuP>j3YzIj0Ec#090=v&PJ5Ulo$L53O*?yW*xEJ#PQbqA7L~9MAY4( zw(@5v3~9fAL~iD0wiCIsSU(hWneLbs|I;*R-jyV$_@wv8q<|%Gm?&=>c~4q1DrSWJL$`lw-%(FoS3B@XvNQ${HqIQr+UPpx+OiyRLahhJP7&{U z&{6FWgCA?&ljQ8;-Gp@8C&B2I2ByStPT+eb4CCctM`l0a zwcpM)?ANRH-)mDuF6o&B4`gkqT&O>&*u5n~;VqIBtn`|Otf8YSiUp{Mw$T#X0?=W50eh<{Tclgcb;5-& zl^gVS2DFH;QOx|?0*{;T*IWKFRw+DO%g<*l9?=kD!@wfIk;|h}2)Uv&4ft?2+Zy=g zh^hPjH5{3(>3~)59E(Tt$~2ZVHW4dPlhFl|E{1=eDNzb5r{To2f*6U&iAE@&IiXJL zrsslJUVCtPgND&`+745~lL^LH~h|9PDJ`%SLe#m0!8=Zh8JRW*is=XSxz ztTZH-b6|46Wb-Q8(;au_0BzbXCyEQtEcMc zN_-siobyLdM`<7eT?>%~8eGsq@!MV0X}zQ4hVZg(osPFGAuP&RB zb#;Pieb7q=cMJ0z9^b)a5Mk~-(3KO)Re&&{f)+R{1H89ceDhn;$e7lP?1~9}?DmBq zcIERYBJ|xI=U64e2lEv=D%%Wnbi{xJBOwLTtHN8c#`YSCXne(n%#lFtI+Mqv1AieAPVD*?xiu^^Na84S56Ba<^aKu&9UG!rV zNecN=c5mFYWL%iYW82jkgVq*XL07lDU zTyn_0|5R>o`R*1`Uk>xV09^N4#p;_}Zm-s*NX39Nf6WTrMKKr#w(zjvb@7w+yD+nm$-KRPa5U?)xBuLU5T6vItTH%t zsUaZ4|Hgmf%Rxqyk7i86NgT@9+n1;#3W)#<|F)#@KGlSFfe;p}2sEj6OGv znLx?QvttF#vfA+Zud|QWS5MT zO;8!~X9sA-uf&Ck;|tm~=slZpTX{o=^6#D0~9KBwST5-8gxKkcb(S*Mk^F!%H!g}LIwOvA0V zLI}~eZRIVh|0kyXJor!?-i8u2RAb_fMoy08MS6mH%-`v+S2{1>CQsM5|9nXaxqcR9 z{^Fs*xvBB#?cAJv90l#2GhZc2!tnhCe;zR{<*#c)PC)99Pe1g}{wyE5zRA%J^^SsQ$=#8qb1 z(7qSjZ9#w&#OHintq@lx1v-NUTN+@ufG{x z>psKHzhdj;e`KWu{(e9MzOko86R#{Bom?YR)V!Mkpke6=NaeAov%a_)kt9#~A2UY2 zI6lU9&=LM}KOEZ)}`Jb1&yxBq%eBKw**Sh_ZD) zLp+?+D1-_@v^);h{SRE&CJWEEW*R;z6om1nzuZ9Gbl*9XJv450JJP$Ma8lb7ay-1( z{k_+HQ}J$^zXBDzx3e=tv_0iOX0V3{RrJ4LGelfNmvG_VnpBJaj1G0Q1tWY$!er!( ztcy4VSQv{IpvO(0%P^IV@&Br(vauNiJAREx)!f+p_(j{^x2aC*^M}9v^e~SdGp(gU zIuC?HxM}0^jP#8pgoK6bc$Brip^fx2Nync9$Nt+g5soGl57`OofbZ-BJ(&6-!NfHk zU0H7ChnE5Ep!gc>QNCOdF43tFP8q8G^<_?!a<$6g=*6h1G`Z zGfdL?VtnHuIiaAd{sjlP4A}dU2X&||Qj^5(bH2vuC9~X2X!Ev$k46E7W0B19P;nth zd(SR9ytv%1E{BR2r1}QeSD=A7}nF%BUB~Rq2{oW4u?apk!%h_XzF2V`n zi&GN(;UxHR`{3|^Ezjf;*G*jB;SY})k{o461&`M-a7-dM8u-+%J8r1<+SI-qQ{6ec z&|n~~|JxoKb8v9L`*45fQ^o5elT!5hXQS~Vd&4J1jV`NyH=@{;0hz1Pj9F-Jxiv$g zRr=(mih>(f?aARTzKj-E@$F9KxArUwZ`}|E6HqjAoAKd(TmpK?@j5 zXK~0hVuU$V#6z0`cG1WyP&!1DzN8ngp+u6>zcdC^zSDKw)}i|r!;LzPZ9}KAtGYSi z*QiHxouq6kVeTx5wKbd=>>nJ+x;lUln!ZPlGLTuBmJ20KaU06;)W$U`p0W@C(TlzB z8~{4w6QBoHuOkh0!w^ca8@=Ns(y7~BwtXG& zN0r*c|2755AcRPp%kI8F#ILR@AwQM8j_aWm_sfUVVehhgY&R=}_9{2PI~?M?a?pr1 z?Va-YE8GqV)utbh)stXfG-K-zIY~Sa5BMVt;Ntq15oCDF$HT*iAtX5Amrgd=WyJ*} zcA@6Ce0ea*dEk^|)fbbIA;=1E=(qwRC6t+90hcU#QWg*!ExxQjl}B*u>hl?EoX^C1 zzKTD3<{I~&!tf17 z`GM{jP)l2UD^ga*&Jg<%D%4pVc3F)vh}$ZZ8Wqqc<`g0h?(qKlJxpA{{P&Nad9L-x zH^N>Y=o6sEqrF`Q_GjYyWph72!h{53hzG*&M@MHsfkOz@EZ5Y-mKp{GZ+5a$CbDFq z!2C%S4{XWjki1R<1KR3B##e}N(+123gm}%Y9GS8ZeFro7&WdG@Mq&OhWKkQUz_K}N(^oWg$h$Zhyp-ELlf!(nvX7R=w{a&dMhrO{c zq=nYT?}gMx`|l5=+rMlg8)H4`;=Aj{+pS71>Hd_Rp}58I9hG zi4TvAU>amf2of-Uazg)n$Y9YS@_H$k|ZZci;GE% z@P}4Zg z!y#_H_-$r_U%>f2F`ljl_%a*-0BLArYl}qOlb3l^{SvN_(t5V!PN+vVZ1}IgcTF4` z!`f8qF$!kSb~B2T4zZ_tdZ{X2EEG_qAh?LeZE>LC*7 zVX3pt4UrPFfHtx;)*hLK3l+Jr;xab|{F>hpl^alh1oRi6SN=Ny=7^E1jml`|@;>W% zZuX1}yf+x+P@I;=C6j60Kg8P>5f}LU1{)h21UdNrmxA*lHVnJ-mET&FD>qmFTm_;o zK@23NfI{TG)y>V0M>aQdidkr&0^Avrjvq;|Vbf()mmW9NH!+E^erATCjsGsqyr3w- z7-3#dv8V8_fw-vX_VHV0n6|tfMN8#nKMa`5%Zc3nKQ91B^UyP#zejzAa&prxUDfm~ z@e-7AB9Ko)YDC&MYUtuFS$=_a1>A(-xTA^w+SSGLISD%lY4%D@gPqibLWY9s+cG8O zk&4&fAn;I}2_Kz>sT~hacj0-$4NLa&^bC4P8Ru5%SXe6%g+#KzL(RooY)-@dBFQPH zcwK{*2+B~wqHxuQkuz{J>9sGe?cjgWWu?$C0o%T*Op#$2BA$kZrVHvOSlink;**=? zW#?x%+0ijU<3L&6w{(f2ar^j|+cd!SC#6cjO<|9727*>~YSfA-&~I?03o3s=5vRon zqVY@Pq90Fj$xy)6SU7hET4c!+mbTZZYa7*iH2|5G+qM;ggdAU941W8sz zGmff%eN7?}D)0s1DQE)zy*n%-K%??y>XQ<%8960{7OziC=$~zm)@rwER_Xmsn6&-! z#h)-~SwdGk#M#N|zp|I81zg4h{~MJnZ%T!$KQ=|C-+`)lZut&#J`&eL@U6}1dIYobF@ zbfcCBq9fRa^Q{O$c%Zrj?Gdzz`?4naNLC}{m@bbW`S^^Vs`9qlxj4PY zzfrV^-^BZ0UjBJU)c0K8-%pbNzLEyNN`scPt1J0GBv~UPJw({C@=AFiI^9|CBvOx^ zv|_4?KLUrS*gF>b#-{Qj_bg#s2Infcw1*#%$~DU%46j#OTEZ^MY$W(>AnSqJ#juKh z>E3B;tRY>7;Yp}D4by_(mO8_DqH0Z~n+TTic0xLwz(!_)ZV8@9JG=eN)r!-@n=M@bLb9x7-_u)O2M|A`So=KlGb8n>UlQh?xKP z(E`Js#5O8_#W;7sr5Fi|qM9b$#8D^|Tx(z?1qcti>>El2rt$Rgv9$3glWdKxtmKIdza~h<5a%175FM5Lo@=piMGoax+TC9Bl7<9lzO$MO zt^w9lGz_!R)$P{+n4eD#nY5VFT5W+R0oZ0`xyofe7HYj`vK^tf{ zqk-y6IA!N=gcT#e#SDOO!{#LS1}x=28f8{*5MCr?WZ~?};G^by;6)qG9BwWGnbM-U z)%QA_F^IIr_=45E%8mUrb}t#lYxyg)TqsGX_yf`v4B?$#lc)?w#t$X`<Iux z#;zQ`;s=Nv|7JX(5ec<007ws(MVV$3XhN7Cb`olLr^mX)z@RR+HuvH-7K5eZ0)h^s zoO<6?@9<3gc5V1wQBf7B;Oa0z9ULmBn32Z!qJ9#kD0(7?P>yki%5L( zX!AE?4(({8;|s}Qs>D2TACQ&sQ7BHtAIBYKmd8U+ns+wQLr%H*dFKhl%m10GuJj9e zU7Xs~`sp>Bn0hf#!OY{#6$WSRb%}WwxnvXcO6mwF*TNLSR0LHBk z#&r2Bz$-Mjx5tI=E}YuFc2yb!I|M0B@ZUn~Ne7;Km*$WhuMDL)LHOq~!wQp;AGyu> z_<)_tU#f1*d<0!z8;#)k2Tg9-;UeWO&U1Blj=*)jC zRZnmEx`Fme5RSkU@n<>UCkfJr5_>_?p6B-k1h92=M@DDKb&aFvndIvXW&E9Q;Q;v( z$V70{t1uD3!#fp43H}3ofbMBwV{@}$0Us5Mp|hH4Ze5dYTUPhIxz6EW1eo6=nR>7^ z>Jf&&vbuFRP=E+G|EHzN>FU1Kd)oe7VqJx_YznkhyLVo|Nf;G;<8aSYEn=hLRbH-K zNCQ^cUJS{=uC3WS4W9Z=EZgP;hRN#y;P{M*W~aO1O+iv(FfcL7R87!AnbWwe+}p0Sw-e$?}#O@(A;_P zrw3nqym_6cg)V23{$3B@k;i6M#<8B1LJ+aSyN^hdzn2kNT=(H)O(X~nSc91 zj4&KSP5}02AdCnI2;}lI=7ihRFrsQGd?8pA!TPVLAfFoUpkOu5EWR%)8h3Eur4$Yf z8fi)#M7*+*Q&5rn$iH*U<@tHPxbw71PVw%8A>8v840+8*5Kp0rZr|IZMC62j*KmMC zIU*i*f_!|a)EVW2gR0>GhaIZD()bHAktD*4Aw%UB+$ndQPGud+IUl63H{de|k39d6 zNw-W_aZKlPKCujyP@!GEVzY^28x!QGVEI+_@j0?-%Xks7EFzdI2D53_Y^Ap6M*78Z z(PgYzD3Bg4yn=3Uu6aSHOE`0=K08tCe6ksW%g4(*(U}l`V3>V{9A}OyUdgRj#)_W~ z&`=t>Hy~KYKuGL?-mnuo7?|N#W6OTr@qz2d`h&-Ld4lPEWD`k*0B6fz(L_*zGdsMU z8SJ%f!(0|fKERMDXhI$qZWPh>9W_pq=$T-wSVF9jQ&~Zb@oofkC6$V$Jtv)=eW?Fz z0Ew*AxOZb@`hN1-+S0qRGB`r!<3qg<(1)H>art<@ePI-geGj`AMKHVK3P&=p ztK5KE?I!f^KFdqJq~;Ik(r{4jpeMpxVCna}=5{DEQushI z;`@IY12$$f+%z`Cf^w`huVjTj?UJC}Z=@oj5`!3vYOjG(0w4PNU@k<(R%w~A*to?R zuccUI2=vWI+OEh#Hr#Y}jS5|0fF9jGE$Lm+Lkd6mXsGs)gn=H7fX~{hdyg8~D0F&y zI{ZWJePuD+e^UG2w|nI2)#sSR+x(<+z@}0TW4G7g^qQ!TNlGG9B1zOhu+kPk=UvNJ zFun^(4UD3REqs3BRs3w~gkrsv^pzvjc{$wv+m!S7H+Nk#xC9NW@d}l2U z9;07mm>2v8A2e1rgd^ZQFW+(hqainRUt(ZrjUZ^E{c4QvR?rRT9={z3!l)=ta)R2p zY|I|_67XwL6@@KlSW_@Y1zjgK3SQ+`vS4nwP48)2hQ3I$L>h92Sy&xkK;$>d$;H|4 zY;~eJA%XMVPb_^SEAvSSvM29<9rxk>P2HB-Pgrz&8H*pt-*X?5PN0<%;B~~xTL7}K z*BbqSdz|nX`&7k7jW=V@zf|i-Lbs94^XH4Z7S+D$4O+oIby{-<6}l~cNXF0XD#|7l zW(C)I*dsf*!0sob3ntfttOhNt?Eez9vZF_8?u!}8+E`Bc?eE5H3v#3R^KAjtOrX4P z`5+Hdjn8aVO_4m!AYw^E;-QDPs;-29nq?HPDG~KUh{qy_UjP+-V(azQar;7j&(0c zvRbbW5UP&;INMMmtutf*&9&yg&Kof+GWr}`#O2SFH}>~mW)Cdq-&WqU~cNV751w>;iWr4ANm zRL$QzI~OLzl+w|S7^#743V{@EPC=@PF`lwE`Fk7pXVnV<&@DhCltX|Q{wiNGYASy`zxTsh+=IbV2f63;J=@gx2$a-FNVj^bulKZlpjS%c8rx6ZevsIYzmm1iEOEw8{{T3cBVsx0f5=b>No-K}dQPW^_8MlY)QA3iSX??~ov+GDuT|}u{KDd{hxcCpk9M81 zvyU4hrb*qDR;5M?4f=A;bD>&#Aa_WNLz<4BAU>d*dbK44r9cj0X>qC-9a=;BU zd(+BS3V|qE@@iW+R6m1CPXy8#6G(fdphB&|5Ddx zgGDeW5r^`*afON3?dJk{uU^uymsi5pN@uGrc&Uf z0*~*aXn%e0DCza9(eh(kK0beDAZJ-@rw{TuEJ*K#Q@ zn3?aK^TghtU2pKD#@6#t)@ux?V}bkq!aa`hzagz=B^sjoC0KDcg5ku2c9wNO+0@MV z61}uHOQ<8)>3lhhI*ox|4ji6(mR+M~t`4P=CXVTe@=q}!VTJsTBMf^OUHc0|)y%fR|RFoov?sv~w)I0x5zlHXg5!|<9ob=7t zy!}`rcGpdCM-GOhOBA>mfP5zN45zabO_Ff=bnut;G~v-oILoLd+q;^V{&~88yzqu~ zNXnc;tWiMlXtDba783X!tYkwml&8lQWG$Yz9yfx-kLJ9*ykk-S_tFy)`8%N)F6^JqwaEkkCfd)Wr~vyQ+%NXYnBO zc7s;j_n#Y5a-i5(fM|^)SMU?iTXN=sqW`D&Ec5eP(Bm22Bv9U96b$Q<(0!8jo94{= zDG(!c8+o_;8*1zt2({le=N(WA!q6lqs(<|Wj2fcZeDrAXbVoWGmTuc#=de@gd(fxIGY z>xrY~R3P95aD(^Y(bm}+!$P>BZ&2sN?51jy9TWwRYnEJQ~uCmTjAQj5+i387>J{QHnK`HNikrdH0Lj@3;Ab_|dPt{kmU zfXE@B`F?bCb6d2p&*D)*4Qv;i;rU%&UMi5L^jej)k2X9!oFq1n!TlOX&_^2MQz>L>>4`W-we%@==BO3aea&X0CJ)}e84TxVq?hFzkh+GRhH%{xZVeI!*AijdAl_l zL<)31)E=iIrj6BBZz*(iy-iOqs7)!^4Am|~9rUZ5=F~TFUca5pA+)4#X<`1t_DV1D z-9%g-h#t>qaxOU&ffj z^D^77@Fi_IF3zt^d!?8^VxvgZX*|*orhPp>uX^MKJ4eE#0m8i)-q5k-cUAF{{yCM8 z?KX$_VOvIEy_EE}WVA?&(;>}%hgLpM{A;_RmZoBAz?;b*)U0v7&}<_zWH6s0h?ZKB zVDrNF_jc(zN=9pTzs4Hyv?eQdZ&-0(IVe4a4@~DszV>0H+w)5@qqKzrj0YQ5%RQj> zvSe4>Ah?7xQnvd7C628GWL>o>{{(AFN zxiQ#5RlJE5$n(Qw)Cn*!F>8K&lHvcT!HEz-K}zuRQu~Bv+XAw+Zeq<}UdH2i3EbY( zHC@ro$l%rrMX5YXQqJHK5fyGcL)1Hsu}+tz;iPgD8oqc&cvetSMO~pI{e9Yj3h9&5 zH47dB2@4gx@{CP~ENd}hyn=G!C>0@eNykF1-x>0LSrk*X){>vNblCcWRf=^BvYsfE z(RXwqVfCQMYP>^|&?e)|A8j*9Mf;T+iNpO zo6n}XX+-a;xX?M%PonE)C*t9Q${0xV9+!c)_sB~{E8plLWD#?`F`63*F$Djjoxgn( zh_g#lZrksp7^O9d$5Z58M}@_T=H}8iT`smJ$9PHBJ^A!IGD%HceGZ8su0ljI8B;O! z!}`fi3G(vv;*oWK?T`Ro68@KQEi)1hi0^avVn!HDZNpdKdU;hz#{ixyNSAc!>qD2y zx-x5%FI)asrea($#lVP&E9n!hx^314pCsYK@7f`P2S&B@KD^jGuAgffUwO;HlLK;2 ze!Nf$;GROBG&pZ6{C4Cc0%Y!hZi8}a}yM>AL1RWf* z)Btj83(X>o*c{KNtsAPZoc;0PF>vS4_xHYOs&s7wk&7K@C)YzW++u6XIVP!)R`dL#HMDeTbLi`Wgk*pI`>WIQ%5T3rJgqk}wlcPGuGPuQwU5*Y7VmylnFSzN z4LI%AR}I(q!6(=n@F1S7g@=k74zfysCL%%Z+*YVPpbzt)>mmD>wer>a&!2Ly=#mPU zelRG$BJJx}&%1xASvqTBocGuFKx*gAz)2wkaX*DeEyvSfMhe1|eRlq#e`4?Z@cq{# zTh-@5*a$?IJjhr3R>^)tt#OW471A=ku#jL~1i<+*&qu|}iQey@v#1Y4rf;P8&aYhl z;L%p3haBTkFI(#A!Mx5W9!*L~6TmB}7)*;4SGLiCAT^yP-hzM}J_EM2YL6`-QRU*{ zNKkt1VQE(5=PpY5!%ClpOdq+o8aSf+{`4?<4&QAgEcCgnjcJ`rMwvOQ+objdKb4#- zPFu%T%M$@mWx#aHO4yz78~e_BV_%x{$R$b0@Pulv(M7&)w(F03?b<@;>5?>3@^FG0RCx`Tmlv}k?|>IYOJZNo2G+qo zdGdgbr~+Tcj$EY3(9`K1EN-LyrLI3-WVjJbFvx|tfW!V1V{~$h>t8a zSy>O{AEt)6+k6_Tb*PgI6|$biv~tXKmA)+jLI67u7zVNggAV|;^)K05skY0PAlHR0 zjWFIzDqZ`#wWjIL)GcgFX<*uK%gfc1B_uE>ys!Oo0f;q`CYb>#CDG`m$!PVHPWXO) zW~N+)j(pu>&)`RvXYg|Z)B7*8)hVOo)lE$iP2xzYUmvthxV5pThW=eYdU$^!br%9N z47cMR4kQ%*?uzWWHYfO9S7zPE_vN!v#fIHr0hj|-J>d#kOY>;yd#hc59_6u|;NpkX zT}_{5{XPNLdtZMq3rE&&WUSbmNjLq=9>!eRm-^v+=X_f?H!d)(A?e~5eD zCE7~hd5V8<-+J*+f;qQOnPpVMHrD4M@;PC|oz0TZK0gAHHc>h#zjo z*3=Mzc#D9;Tk)T(CxtKKdXCxE(<*9`m%>9sk?*cDZ9ukyinO-8@So8tiXuj=LLkqn zrb!S!XhQ9fbyZdEzG?AaWcn zKm->~*&cU*v*W3B^>?~66qvF8&D7u_cM_Z%I2`(oekJ2q{7R69)4+{ zJ(mxS#X~8q)*Xt{~n1C;k zUhBA3U#Xc-&@vvTMvB8c$SlgCBAYUE)7<5EOfx7^Rwd_gs4b#I4sTR!#O2uIb z+5Kj7<~4>FjxNNn8jK zd0$*@U-7l9>_lI7{OBh^zMOSE*3`Zv2l=fxea@N7u;gR49vgXiJ)1(DpD|%puupwR zp3EaBN3RHkoe?zi!(-JP)Prfwccz8M^7+?s&0H#R)}LdR4hO){va$29N>jj5l62MYO~CrW~<@i*qg{qw(Ly`%9S+)$q+qdEbUR(1r2- zCjy+Q^+ky^M;?YH8>%xG+p|s1Wh3>DfpiB#rQ%l+uxh`_wwN;Q@=3P5pc}hyWnues z{L-Y^6MlaxS>0xZ$+^3*$*_J9sqdvuY$pHuM% z0UAo1IL*(~t$Oz^!N9D5d4h*m^mLoHQPj0>VY-$vILm5VlZUb=l=|X%%61fDBesnZ z!zn9jsCFLI)buT`Zo8YnOv9_IqI`CV_Y!6oWIZtABvYdo!GQJ43P;Z{CmJ?*c)RP3 z7(V}Fix$I`1tWYSKQ=cPJ^W7KvG;COWtWY+gi|fUqLrbcx~&a26#_cb`1G*=b8Ba_ z_78cI#Fh#Zc%PKL0&d?ep~9o6hRNDp;dZP)RQ(|{@yV*|E^_^R4!t7uk zJ8)ji62z0L>2UjY_entwVzjIRz_)e-yIGDAlQ2kw&h*Fk($jT7A_Q389CE`GkyQ6dF0cU4yms+*fyuU;Pk)TmxWSwU!QKR zfKwT6^QC;Fs)A*|rCw=Fn5a zHXig;Xh-yUpM8;mZ21eo<|-PueMX99#0Q=(=@h=BHi}f%B12Xbv`l05o)^D^*xGA9 z%+5Xq8iDzsTPIUW7<|Xo@MT8jx06^~XyJd^Tjr;rm88KuG*jAB6dovB8rec*jc)Zd zdu%PgZ*@Bz76`MVb!j$mtT(>?R>sd_-Jwi{fmc}=tuJf z6d+0G;hMf9YA3U9(nl|78E1*Zey_A!A@$Cu-XPG;%}o++&HH%XOMksgCNC|p;KQz} zG10r>j-H}G3Qjn6u?JKvsTJY)!QVUQUl$ru(jiYQEU1Czk?8P)NsFKdmsi>swRDSi z`6RmVxsC3@k0k~1s(ib;!L@lHRu{&Z6;)^}=xa`l9E=nzGpgOVb{iPPM2Wk)C9f_; zN;ZRw6KBp<$+9oDC<0?Qf4}?B7f^QdAMbu{C}X;A)Fo0UWYNURs0j+)!~ym<)wJw`i1lKFAE}c$@DxNRCQ?-sc zuRX}wOCdD)TgB&7hfkyK-~lhD4YSliO`jBEMbmVjD4Zkw-Z6OFzDE6S+kc6i$?o$; zQv!fIR`6Mk6`1~7Ilm4Prb_66s`#`UqoJzJ?g`Kf3+D!5?0r(su--?MsNX9+NABgJ zJBX2UI}G%;INf{#@gp`}=$E&qP^#Ng^{$&0e1_fAs-7P-*y3r|&{CV)X7Bcif#<-p z#r4tQK-OEA!cc9B>YvSGC*558;B5{Udx1sTft$aO~zsgnx zmg7_O^1_8PKkP`HJJ-ksbMbAD8u(fX1_ z{Jy5SJaDmg|5={*+P_Q>u+6TQyQh{9%F8oM`ul`%sm*nzjR&YZ0>t9M24<3a(xLvZ zR>7O<5^lA%f6aASurd?ygYm`v_RQJWpI{Dxz9*!VQBhX<(z@~fyF2vO=o)QN)>*yI9?Qe{=Q1D6R6iSzP`8->s(rrPn{4Ky`CUodo0b{61}B`s=BNQ4xp*> za^GFCsE^e9%l<#xt@rwY!%5zFpGrX8G1zDHfSR#NCouQe*?BKLxA9;h5Ow-syoyHa zmZhn~ajxYyPsUrFFIyE}rIT>%Gwr{6T3P-4-OhQ^LuA3po} zc8Ae|z}t&f0hh%)mZY}piq2d63BA%!51s>wxi^Wl!b`x+kVpdl$Eim5V~2f(Cdey( zq)d1x7z_DpVh=&>WkL27!Sb0fQH)@Etl7W3A0>qs{K;-Y|{;H#YNf5TPZ zx#oJqEnLQ+_rL=Ch4nXQP2vbWCkq8m6*KBbh$7WC^@D|Cs!^1+j6?lRb~HwRM{N`I zvMlrdiIl@e;@m;HPtv6`TuQ!KE9jlesD#h!=A*OoE3s)OXq^+h()LHunl#7oyzID& zP2Hr3enfBBf`>R#&VrHd+r zFuaK4*lxK_#yj~wy7u}n(ca8&cU+JhyDlEEfg?QSFhEB~RU|CjDh6*|=yd)}K0Kz< zyW<)3Ce?DJ_WNZD1nll4#@F8_1wUqAR%}IIZDt?L?62o6K{@M^3b)Zamo6i%>(0NF zmHO*Ng~J>|oE{fO@kP&X_ZF(1JJ0jP1ynpxRS_QxOt)w4>u-4H8p5H&K-mkzqNAhn z#ZO~(5%Js0p>xjWls7!G;~{~wOkTY{!z<6lgI2Yz#@b^;8!^KR2wrk1z2(lGuuZ>{E7zvSKq5Fqhc_`Ou1*V1T}Ly-xIl;(8m|M4A-d@rRnzbP`$n4> zz!O@W_PEkv+pfWnAxRsQU5xSdaz?x==XR!-?QZMAPJo`u0)=ry1#5=zWKu(I;-&{5a&uhy4l_6+w1B$KO3>{{rKZck|j7OV`I zIeJ6F*CgJkEbg5<-A&kt83bxmo-K;rE;Pt$$!M&z#zjqU_4VUX6YX!?=DZfxKe@dw z@M$BV*+P>Y2fMS(oVOO z+}myD=!lx5W&?DHA}+lFA!YzY<_tL7V^CV4(VxHz$Hj1oFoPUk=+C!>z68;iYP`6`+j$I zeE4{}u;=aRb!wskT|^KY%(Pfx-aR0hk`VqRmnlWo);8NFXI#WfT{+Iuvdson;>wb{|hZrZIfxqEFK{=!MmRU1-n6NR?KfOsZH#gtI z>z3Glsz^Rx$ZGo75nio=gR5MmHBw~A74CiN+9Cp18ws4)alg;8nzg9?YIt>`D`sH~ zKYTxo?YdypPT+=*DIgxalaY`)VhJFffg~jF0%+hpE6WTqD5fMJK=a#lImj`=2j*B* z>6ic6EuF|RJ`Vmha9%d$IU9gT;>8vs$)>&Zw!;^0I6QM&Y}*etFAeeGz=yvw>xmjz zlXABrs`o>7PQnqgVEBcW{9--nd-MoRlGjqv(|+-^-%R3)Dcc8Xrk*}SBV;EL9PyO2 zi&&~}S5`!SQM~$`_nH6*;z%VDeyQuPLFb)Bbk!B<=P*Z&6M_f+fV_Q9qe)ewZZ9UWoa z++u2Q>2}p{pcO>=h~Q_y(KFzYJ2*J>FFDrQ46 zZ#2LID|}##)&u@C@`5rz?;Kb;_NnISoFV8r!2H*kiiRA=$P0>%7MGtwt0uR9bjAEH z3<4S*bRa4azoqpRQOu%oR?SjUtW=cY8BoKG+hS6tV<@Hory-i+>e>3s^^>OxwOA$L z=!dS|C~rzXiF@At#BuoB<}Bi~cOTRlEU#<}sNa+=i3aT$>1JaKxk!?KU7HO}pOVM1 zg+V|Nc_?tR!Nwx+fZqG|Id`tu%l33HO;Xj!-V_QaIR4-2ar=fZ->^-?w?BBB`&g2; z6m<8Vg2f*lK~l=N8PM?+l$YZG$;Zy5;d-U;p>W{pdc3m3eK#%j?2pEB-s4=k_6Lm; z_`OgT3_lS!DYBi8UT%P2LW9glgbv7dY#|_41SJ{)3^Z>lrU>Kvypti@z5)Qqs;I!9QsSKOzBfGa$7B zsjQ`}9K$jgH{tg36tI@*YOLRr%Cv_HgaA2~7rN?3K$(RiNwlm-AvlGM1c2fABcTdVpj<{%MF35|h714L!opio zf9I2Nzam)W4h9`%fGz_eW$b`(iV9cv;b~Ygli)lZ;g{uQLy*V|Rh3RB4XGx=Mkh*; z1NvKyaz5};B#sUl3pS*C5u-^0&djy9@8X)a7CNxy*w&jGfE->_)f!hJ!!a)sngKJr z7qMDwkt)_?0Ak;4NO!E45e^xYZ**MTd5L>JEA_II*&`#xH98wIxCKPm-|VUMD|8r? zvDqfE1xJvp1^`GIIXfbJjVI6zNEA0yhGEa(ukM1lY1GJR_FREhzjch**+VE-Twk?h zYF+4PrTeA4P1|0O(RAnPifHiaO8cB2al3-&<(KE=;pjMRb2wp0u#zpXUPePq{I@^? zC~Zb!JZZvrV_G0Ix;+K8L`@C)b2;F6KMYX#)g4ih zsp*n1fv(@}88Era`m~8KGcyy$%DmwqtI0788>I*-cbTT2zqcalLJFC-X!Slk z6}!5Lw$8ske!H5*vz=0);oLj(^YHxa>_NS8;JSIlXZrc1ff3D8lO4UR25=n3cr$mo z+u*~kK~(s%{Fj$_jC6-+qpiSrVK)QL zrE@>j2GtNV!Q}s1ON~-3LhMK$=sbbIp`6Po)+V`(piu~7c7vpEinG{#x4F7S3F z*WYEn*7ueibAUxIsy{vBBhFuT`>|}627=c{2lS<7clgwsdJM}ppq=zwyZR{>2U|YB zPF7+j!i_NfEClWVu8)|qHKw*0QI*egM?$=k|I2r0DWK0^zC##)P( zfrzY_<1ebKBcZLqpQ-M0Q|sASJyeF=B&m<8a8_!6oWg6*_dadZPe)gs9s}N=DsH5t z>2RI$Ct=kZ99rOCB1bB@Cd#}7Y49VYkb#XM6;if=29$Z8n@j06M?&NUF>Mga$J zsNQ!Hj^41f94xe+Wjhv4_7|*Kp#dFONdp9lr#%gvXws7NUeo)ey?@$wCWjjII0E1e zPTBOhXl;+f!-9Z1oHXU!u`|`jyQOCGE}U606&zX!{E^oj3V0xmv5EyLYQ=Px-;j$% zuOB(OH+Hu9X+-!-jvEoPYp z>D#7H{nTn|EJ@k}az%)wo=LI(E?3e(Abh#&S3BT~GAJ-mVwt^n2Ddj&8SGi}rzlvN zE&n@8Dk?c(VdTn2m5|V|0`*ek9J=fuP{E8lPT)8BUQ*P}4rR^B`HwDCS;1h;>@)-I zI zFvkF$mX_7|U8IN2RF-l2io)V>XaClDD9p~4BVMMEAg32u(zbi+6tMl#!DYdK%d&aa#Rusrv8;dCu7f!}#y*qU7j@9!Fcwbbw3f{fT&0Tl^ z*$$0!2};EuOj#pjTxeRHfpevrBYZYf`PbGdlEM`#vX7`Sh!w9A2+?`lbMogERvefL zDcErQFu)CXP@ABhTr{saNfd3paG7nrWT-cDe0%<{8BwuUFuCF?*5jVoiG&3d`9_H3 zVXI}=rsdO_F-{2`neC{!)3+4k_D?_zcQtapxNCC##C4P2S#B;o)i|S#iY#VNPAGfjpknWrbk{ zV0rMtyap>NTAq~>Tr5Y;?Uc0J^5$Q_a6Po}DO$kmF6_nAi^j((4|UP|pSuRHY&A&9 zaeJ?f1V%l8`vJ^n!QDi&C8Mj0qKu^zj%>KIQ#O0Y9l4>Uuh+;T{!oS73)+#Nw_7sL+RitsgD+UQ)fU)LL86?2YI}6m# z;+oUC{V?zXsju2^UkV6B5At$%gD;_#{@K|DV?MkW%H5gvA}&mPIhp~xTE&zv_rJ^u z*0@kuCTp59lB4&l=Cg{uh1eHa5A<}4rz|Z6MVc=PI)kwq@MieI+40|{V28b%fFYv+ z;(aJ-D5VOLqk-ZZ4;9qLE3TBzjW}h61y$uZz0`8!jz5;&kG?#mf?4h3qxUWuDRO31 zHg4w0EU5+sFE?3H3)r_P4Orxk#KsP*DBE`Lc!n{)_>hpew%YgNr-hrRmlrUBbp22P zOFR`JJi@N7u8pPLKX)je0CeE`zloB$16P!?rG86BjSGHTjlm~~l4%*D{Y~ma$~do| zCT}^&SsUj>`9+}Ei)&J>6QSv2GW^+nu;V99z5)>%tW#^ zGHFH`bk+93nAK9;goCW3Gs{3M-B7<01U0i|!2NdXsnWRDHOi+_w$&t3E%nm(L4lg- z$mMYdM)6jl_C}B)pkAY!v78JqP+BUxSC)Z5H^#gM8~#IsV-s|nUrO09Fy$DOh>;|S zWhbb$WqLHgy9gK&A3RwI4^_YDQ-E>Nil@+ut01Oo-37shQk|Ema1E>!*gk8gcU+|i z-|={&0+dX;l|;H#7lw|GreNR=1Qeej%bsx@C(0Vcl|Z#aAy2-%zyLqSm4TD7$<@8$ z8M2`VG&Es?3b2Swasj|qFF-f-AHbjy{d#)((QWuoiUI3g^=V^6K*zm`YC zGDp-K19!O4xT>Jh8)@YYC3p(jvZD)?#X+aY?H(saJd>i8LsT^F$wfkN7JB!kd+lPG?axSA8ATj>i(&UY!DWr z&YT;#)lkvutN_8-t@EJZGU8sK+4{_ppLBPEb zYNiK@!3klBx)?V6&U~t>0;X z1mgSdO0ZJzs3jc()u!uRo)jKIhu@3}(1t;bw~=YrjwXKVM# zxep(6L&VR_7RKn4tztnCL3_I>Ynl=uV`5>1D=<^6c)A^(1bx-f?eZ4^$dcaPqF>gC zH+<+^CDZ_lK!_`a;DhL zSV+E_h59s7Zzw&npq6`6)yNP_j1?xsl^;627S0+AvUWqu%Dzpq16ESl7`QhmpCa7c z_%UVq%`$<8Nuq+wVlM(IZdT}((5tgL5*BsCM!QaMA9VJvG%Z2#K)k1?H;ZXjhCEr6 zS=Wwhfng;`fu(|#_HGe?7+#<-umG9wAPuesCanXBDU1O2q`=$XpL0kV;$HDPWr2KL zVU6;}Hx3gL2v5%!nXh^H8+PV^6xT3=Ccs;FbkERvnh5bn6g_zJ>D60}~3Qy8U?sgeV=*Dle`W|=9okPlbJ zzX_PGooFrbc%p?%$_NV);-V2@8}r-mY=lnFGoc_n_ya_si^C7b?Hc#xhGPEwxoR54 z_VofL92y7;n-oPG2|{2zLuqiF{e5%a;h+9d`Mtf@M%JPKvhV1iK?OgT;;LMf)$%Di z$OQ*6jLYwj0q{$j`J-H&Ml=T;44aOQL`3KW_!C`vy1J0&56BIo_iR{fcw~Uu#>l#?1pk#q*eo%#HOwrMx!k^qsCN^O@|Kr&X3?##L1x*J#v* z1h?`rP(nM0ED?uE18Xi$4H5TIc0Zv;ETH)=)e4#3192iTaz!BE3ZNzy7K{KKMy8xe ziV*Er99sS;0l}ecg-&E48<6_sx)GDMf51Ulea7fI6_a6<{5Ru=0{atf`Xl4D@5z<8 z@mA)c8RnMY46#8V07-6t7uZ3nYR-d63Z>y4C*6Qs<@6D~!}H zZ>n?wH4vDBX&h;5K7SbGMIR&mPk?3l$^$FnFv{*Ph&311OTYQ!{>s;gUr?d;>`7dq zkWV8RY!n)@_3U_dH>e8I;0i{gW~z{jRS|$LD^2MM_zM6;N|lEi3BM07d_fw|WSfO8 zJNeQ#s`tWa&h=)<&c}ykzKsHudku#(ae5+AO2t#kApr}ZJvIRw$Qs={Xj5fn-XSlP zwp0s#BF+7&Z6Pr%wAFyAJr zVl&jJP4)3YLr�hj#ncf4iHAWm}+WM8-3?!7BvJ5b3I>de~5DXSNLNB#gThL}q~X z23c9f*}H~gG|3riyDamlXn9Euh)ORCyhhJZuWQ!hBVa;u2@n`fj}se!6T(#}cYA-o z@2DDQ+?6CAj$P|Z3*#zSB>h~eHV`;$eJT&wM<(pLN+ur7^Z6rNbrkHAsStMe@3VyS z;|gaR3;z6ZeLbHC_U`ATo&~GkwiW&Y=YyzW)ueN!4!cn{zcY$N2n1^k8rfGY%NmE9 zxCZ*IEGe8g#sY&1iBB?PQ1pCnvSZ4zk28st&UDq;woklTHD8QsLas;8<<1}d&S$mp z474Z72ZRbL;cMzuc z74aegq8JAQm{WYlOoL{T)vs8el<@w|+O1qu-~b#OM3KQn;Th?!Bm-%P)2;uXo!L<> z2hJV8&yyqj{=z*giI0`kH%3tfr;+A#3$a{)!U6nxpx=@!0(n5-(vNV3peTMy8HBBP z3QD|%%E`%B|7Zi!8i`aia&oeWUjLeE9;ahEf^h^Qd}XBqxT{%pagMITUaC%JgY(KL z!(Ln(amiNps)vW;{r)_j25FZ&?(a0lJ7jUG0wm2+DHWKLx z-QC7es@Ga{LHr$n!b=M+ke>B^sDoZnv(Vp~{W6Z65 z!*gTEob4y8bEM+9B)RU#iYAAF&hQgMbZ}aH*Lz!IZg#g;t5G2K>{%5|(PQZ67Fg?Z1~!C!0Y+ zdFX<_YXcm%ECeg*3D|J~d;O#qsWSS+F4I+;>e=~WZ@Oyk_6HKI8z5)6})*@ zjs>6V$|vLI9r<8jm!D%clk_6)40WX2$ntfA^>!4n-4f)Bc->)6w^X>y1fOD*z+V>I z?S2{E>z$dw`1NO_ryjA@n87#(ZTeEKB{6eD=Dtt zg`9%>zGM4%%>Ha0=6{)gY}z3M!r**U)Yf=a=i$L(T!W&o&b_cC(6o2ZdU&sl_|ft0 z*U3Jq>~RZBQri-^e8Cf%x3%)VRfB^Ze9*wD0bDT4?k$oUo-fl3URxUU+v?8$Jdz;s zIA#2;z5J&Q^;(Ju^TH)ybAIAU+(uK#+Acy0*UTp*Saa%@>s*k>lfkqd7>Sb154-QdEynyhy;+hx zqN6+UdfhP7RD_EI=uW8pS6hZv2F!n~$xJUxfM5x^ahK{EH z?$cuaxLC?s#`1Aca+;I$gz4WxXGRU@Egq>NEfA?^RHbby2;Qhw4Ll~7vDq3gw&TnI z?nh*q;?a!{VB}3uTLICVxu+-Eu^t8G6fzvD{{1`0qn97wxi@?HbycpYt|(Mg^mO81 z@lM^O!A3x_K^AvLJkwn5!`~Ix5uhA+wAhHTj89Egx6x706AwN(23=~PGgDgIro5kA z4=uE}ntsB|D&J{tJEotD0#ybdXL1Q`JF@u=%q{R!rHH{dp zySk0Y)T~F2u`Q1X;|Hu14_Z_zd@X`+;e{2_DpYcS{K=;IJiT^}+gqjUzqF29mzcML ziMOH|i1SX{xQ9>9ww-I9Ee$E8eZOi^61_qg6~~|n*5zO|1r`ir_KKj2g(!XjQ(TY; z44@S6W-v_^o3!ureDkAH&L#bipR$B@Ar>G*M2>x zdGgZTVN&%->_gX3e>1b}^u1ttpA5DsM~4PqMusXcv3 z!j4(n32_ZJ3h_7p{bAh{1N$g3q&X4$tf@JlMP(lmV<6@Ss105k(9KBEnkf{DSW<2# zk!NH)=4bJ^o=$NJ3tQW8OO8{%K|{_e6VTEQvZ?vx|BjXN{lQ`@4zP?!D-%}#NdEBl z)AheUe@^)3*!DbIkf`&SvCLT{2|3{IfYAXywz$HF;Qd_R0HY1xtzaARt%G<^uVVlD zr%vf@zZxvV1#oBZh0#)z35gY861E?i_aVIdDp__coT^#L>!|t)u$P>c;e?LF4M^S0 zrjEX86#K27ObdbHw^QOWo4mQBq<=?E_1z9GAN`j$e3!OzPQ^xV{Y^h(pmifBS|K6z znIpp#yAE*}DZc~yJHX{#2jHV&K^rQ=ob+-@hb`shqs3qGIV9HRRF(J})m7=`MCx(% z?$ywURXwV9-DonW{Ts4$r!5Y{ntQWyehZRs>Ek&Aer~wtB(jia6jKed95%biGk*-q zv;O=J8KuRnYm5&N!v1%1jyK2ng-r-*1c;oV8~l$=T#?lE>}bE+)JNUpEqqD*a+SL? zRRNOEMtUm4v#d{hR7WG5N!WK{AI8urDj<-H8*Lw)uF!v42r=S=3Q8pg>oO#TmE8A zzgf!3jaMzF_$m45&x7lc16Ra{!7HiAa*ay_l z_7PrA{_h-q)POqEs?4=j;bCH@qZ24DU$ZN&(iW%6gjJ8v=p{AJ`U=wIfpSB%p~=V0 z`R|Lk?^yU-L`dGDNC1F`g;WR$1KAb~rj$agS%Y;PykCB~e}6M1Usf&!zA9?bBpbE3 zapn>lG_-#TKj4{EfBB{rRmf_SMU~ZFR%v9XPi|hL{|RmdmWM{uM7S6!iWJM|SKwnd}EO7LOH!L8>O-t?0D$u&jZFgy+tXKn}Hx%=$q{aVIZkWue$>vL3^ z4*z>$RlB1ru^c-)n~8HVs6hDhR$E)2J&p-nm7p;J+bCBWJbh!K{?prg0F!T?*G%-* z*5>ocLv^GYw4{o1F0y$`(9a@Q+M)nVA>NBW-G*!g9A_qKS}dI0;G0f}fut%L+GdQiaYKnZ2wKtw_8Su-p@#mN$W zmV!$4)*7;sGbNK&2j1!o{j{F1R~_%qcJAm9&Q?C0#M{rah2Eg&m+bb^x9%NOI=%C5 znewcl7I!=O-0X-?g~Z5r_fob*>%z-bn$wHj?9KEt<4I7=AYypX%wX%08X zbnd@1|FHC<^isNUK0vtDd(^AyF!mdp^uZ%_pWX^YM3$h^G-I+&$Tn2$Usy z94P#FV2qQ2z>6|_rp)Fu65HoP1F_{9O3iWZ;E|VMOmF}^)a5dx>8AJ2ohLI6(Z=`Q zouYWSdF%-ZNos})TewK|eE+gxeV>qPL$_WBgJBg1f4tPQ$M@B5Fcec+Gf2@;o;58P z+m<0CkW@%mN#nt6d*ej0NfcoCATk*>W?!I>Z#{ir<_4Wy8LhG z-%r^zqjTSTqp~tXoA%taTI*p0KuShK5%X!Mv#k5?Td1Y2{Vbnke0~B&mA9Z2z`vv! zpJGZQc!n8UbkuuyJ{3H5=&BKc*}zgpDI`OB#>Q9`K=iqB()Bgv-??{#T5N9@W@g5e zQ-5Nzunf4EzJ8EktYPKK4j&==6p)tht0oXTXQ_A+(d&hTJb|&Lv7g;NSf}slT_tT~ zbe~RL*=hCofGV#38Rq*%kHd%0sC9k}Pg&rsDh=NEYV+t%#1ulLysIUmE}1T%-%zh@f_9TS@QbZo7ipX|Rnp8!iSm zIMFjaS*5ssTpI?dPGa;)-0zV>2y-FH7`3L$zm}$zQ|N1-?&4O3{fer4nk2<%btg zE3Ya%K#2#5*4-Hmx#9@Xmhe*{0{v?^+&|aicUwgmR5jQ-`+0_N5>!>Q6~nMIl&wGj zJ#o!-GbVRLyZHS;J_*NMfMNQExF#t&$H0F}PRVgsL8CW(c>gVxhP(DJLblMWIWSWp zU{P(F$xIm~XJLuUH2}E_l>-FCo?1owg`3KKkDACN@Au!~myYx92R}% z##L3lt6PbIIe70xb%Q%tg&zc;ANMZ3>q10(C z?sm%vCCTCudl}c#Vj#2k{BveLk#p0^U%Ygu1wMYUi;yJ~GCMnG^`U;)Duu-mRJAIV z?E1ZI3PYULCpgnOjxTAvESM;!LI6q6G>aT}A#7mHNGaV^54^dWH30fpK#k^pOcl}N zZ~8ZcHO{qF1c0Z*7)!z8!NTGrYlf1ogF|1+bNOVIub_xfL3AyTNz@nqN`h$)-qpUg zMPemQQ{kZusMKOxv^Gc|*l`W5Y2S7nWi*_Qoe99@(v5K!%-IKtivLsDx&JfW|9{+7 zLJm1zbU7t0DbieyWyx{mSj~Bnn1z}{AryrXG7@I0$;Qx}&l-t2hMbbv%rX1C zuJ3>F-B0fyc6-0~!*0*_^Z9%|9`{F~V$ANGXx50-_Q%^f8ZR*fv}Xtry%b%`lQ6wq z89*<1nWVOntPIwZucN5W{H%gi)$Xn>F>}(Qyk$v^LRG*=G^9Mw7B=thIODZ(!kcQvD&pV2=>Y)w2mVF`$EASotT1E|lwX zQ9l1lSeWR2_nWIoQsX%jldXJj-A}H+;A2@6oQGCC53ANXC;}0^b$1Q&8*vqt0YTZM z&o}A~qxWB!X`PMo!S6G?Csi`E(J({G)vg*&I`O~bxD|bAtD}xV)=g4~gmS%S8d(Db zQl*-!XdU6?*nTMcRc2j8!N~Wb?)m+~{smi&HVLCqSC+pa<#$h10O)}}x@2~?Xxw-I zCd0#Nr~Jb66&I+C3&BmZ>)^uJdM-`s#eP#x#&qF&7?c3N9xY-3#43x-FqYA zR7Of(H6Y5rN;YtI)*z1)SNCp2RMai8=*Dm0sNwwP%Xqf$DD&#^oPRd=zWp`P6nzi& z>?BW(4b7n}2=2sWaKDJBWJfa(~0D@X+JD#5OKl z71P}qm}v5cwQ&L;r{_aY?7+PvIx}}PwbL#YBKP2^C5_1tnt8DRyK|Ps_R>6VHj+au zv4o5oV)_K5kiYjL~2)C&|=W$xgTX{A?ABeii_ui4GLsSNYLD0LVnt(z0&z8dY z1VulbpDvr(iSDbXqjk-48|@{M4xF}j0}+#7;wcnk5Nq%=_IjzU;jTNYK|zc{Ck8zB zd?_r{(y_lkPR8-Oy+7xCzF@9#dVSkC9lB7jqjN8~&d@*6th)RyS59wSk$+DsF1X)l z>otDuxWW}21JXOb_q(={#ccfmQ*w|xef0a9k!-(Pz1+jXY_k*~VS#j22S}CU_?L57 zwSj3Xou@1WT?TirBv6};r;$6qGEWx|pM3VHsI07tHx}n)cFO)kZA82-`tK2+K#>nZ#$|HiG9yNz$Yq{hF@_?>lguA<@iScjU?2?1{ z@bJk+%rWY~06Fp$7}kMh(+&oU_m)rbhX6oH#sYVr+unwXhB~=uhNu#5!0nV;W<$)?r*aS=ps%3w|10+|0~ zcQX!vnfV{%M!|lQEqSZU=#@o6EwS>0(mL**JHG4)WigcN0CE#{ssc_I$eOoT@|oEr z1+P@reotyg^ScpJ<01I{U&T|=?F8<4SPM>|0X;EPzl@iT11LGh{nhDrg1tRfsF;$c zk!!`=ZxJ z;YKCujbX>oVoh608KI((SPwa#oI+C(fFP`PfUT5XU0$gvH`LM7+hs?Sqo%6HxSk}t zpH5z$L{xohJ;7sfCiw?)!pzN$^H_6ITbn{pPY;;1z}sU}iZn3MAiKvh!bDg3pB7pA z1LUYOd2M?BDsVbSY)2~F?Ij_nk7Lg#pSU4J=iJ{M7*E78vgcb^H}(MxORqiPP& z-^?N%GnkvHNuO%63l$|A;AvOr z#^gxG-{4KSMh-tOF8<>zGF(W!IcA;?@^3Y!mQ3~!JgW6?($+%B#ei=7E+^Msd44s0 zkWhYbPSMd@XC@#UAJ{k7(inE3+_=Wq`n;s1Bq;8|d)$G|G+UFD#Pbi+U$tgCnSR;i#mjE7;W*}?=Y2sp3OmV`D<|6?c7#_jhziQ0fEZij~|7r zpK{Q&rWp@Bow3i#1lwEJ%`_GUbRX!P`JFjPSrr5wNFz8 z8f)_IPSemEetV^gr9m&|O7JD8vH$P_+}a07Hc^m2FH@ZrBcJu2u(<+$M|CV4tQS(s zD*56eu`p|a<9g?dl5oQeDr(AT%cc=8V1ZvA9on;Gl*5K_)>0vh1E$Qa0ty4k?ku=< z(p!`NwXMw;RJ0uVknX*pmgzdr`rltv(z<w{hv!UH8tV8$AC|g4TdJvLs5>7@3OZQL z#plC+8Q(Z^IY702m1xDtUT?Ydv*CbkJ7Fo}2P|kx-KpFt%Che_2+?)&aKTgx$P7vJ z5s;Bt1)&AW6---eTZF;ypBn0AUWr#EzotX#rsl)(8u@Lj8$)~^>Tr66McPV z{*?QE%W5zayZ*6sqbKL$Lwu=HHk3AAkGrdgN#IV%rv2KQ+G{5p%C4ExYJ_uhFY9Bu zF21(wDd_XPPA` zV1aWZK7Vf7iQV)eSZTC*tvOf4Jn*%A(%Wx6yY=u?sfTU<8%5s*@q9$UE%do_*%RHG zdD(JrYr}AQ0POK|5|zSczCB2rilznpQM6&Hy}M6_Jb88P?frVyEcL5_J4v2WgvaAM zG7VjV;@^{H)7qoBxh=kp5}^Lc$M`tfL(1OqdEE*%G}O_#tqvFr)d@kU59`Go`G1){ zvZiu+#QPpUjydSMWf-%y-Le?}%4#?6`OB3Pars@!A<&FIU#-^j*Or(wW?C^oOi_|e z`!V9$5OEpgUK?Yfd__0iyU@B;-eIq3^PwUC-5_~KzBG&6oT{*KRaHGk?%K#r^Jn5j z#8T_{xGGnlpzbrVvpN#F#*97-8A`38EZk9^@=fpT*(%G7`?iI4&u)<3OBM_=CtT*> zwk;hxa*M;-t)EZ)HnsQW(B-F&%Q7G1y!hVx1s~OtQfV2>akW)b2%~>ba(G^Nb9>*t zr?2lK3~49U`}NVK2*hY~>-RwlwN(A%x?sxNEAp`Wf66O&shw}e3RF~%L2u*$Uz!hH zTtQLstfApcZT{Krw+>q2g}XDspSr}%ld^n13PEOu9X4MJ?0Er_N3>=^f8UHqX>sv8 z==I@j&Sv|6Y1&papnvG_{xVhY3QO?{4}4$_b5m5mQoNZywsNR>OrktaXS>I5tsTq~ zua%TRq55&@6Am{!?^u9#^gO^CgiqX5ej!r2XDiD_Im@}|4qeF9n@McH-oOH>yd1d7 zQ&^i*B5&I@Vqz|?EG~Xy*ru`ZQ|{$bbGvTtYaL>HuPX+(9;1eluN62aY6t)!udS`^ zfj~;1J9mA=_)kw}BV`EN8sHe`_RN{?Gdz6jus{vO$XM4n!=;K3;NQwIWBR9xnq{{6= zHCqoNeqB&TkF~p?G5@%xu$!LM$Hy%lhu-{=pHi)Ks3h*GKT7P7#vA1271VZmP>*X@ zST(72%3i1rALSY=rORT1@(ft#|Cfc3%4W7CQ4H)0KS!Cl+)bcq_l~I1CpkHQGq0wC z3b{wrNaBm>1)wmv=YkgBAASS;As-FJ5r)O@|T@h z3Bf^K*4ycq?cSd4u^Z!-kGC>NV~G|*(s!+B&K5LnztOJ|3X1JdUyS>GFA5wWO)KOC z*9!+A{?5r+9;DHqAQbrQ#R^c1x$uU~YjDjiv=H-dsbu5O*x2TdKPnRplmK48xX5E> zk2vVPt6|GN8SpwqDyqKJ2CL-Y3VqD`ubssE^;=N)ieq)DBg5u_saK>TO{bfyrNx|X z^Kre4(bm_`BR^MU&&gFFs)DO^f9^n)-FSSoUR4badR`Z6r4~Vq#nUvD&{v=Q2lA*y zbn^avqeF_hwz#_FB+CDFUs;Gp_bh*knLJQi=)(=Ry9Q2VoP7{Q)LzEqFRq!CIAr-g z=KVYI#g}v}J>m$G_GyZ^dMAID8|gL`v0XVe_O~dk%&zbf_>Qu}|L0;q=C_8ycK7=V SHObE$-~% + +#define LOG(str, args...)(fprintf(stdout, str"\n", ## args)) +#define WARN(str, args...)(fprintf(stderr, "[%d] "str"\n", 0, ## args)) + +#ifdef DEBUG +# undef DEBUG +# define DEBUG(str, args...) LOG(str, ## args) +# define DEBUGGING +#else +# define DEBUG(str, args...) do {;} while(0) +#endif + diff --git a/src/main.c b/src/main.c index 139597f..21161c1 100644 --- a/src/main.c +++ b/src/main.c @@ -1,2 +1,95 @@ +#include +#include +#include +#include "def.h" +#include "log.h" +#include "log.h" +#include "physics.h" +#include "opengl.h" +#include "ship.h" +#include "pilot.h" + +int main(int argc, const char** argv) { + int quit = 0; + SDL_Event event; + + gl_screen.w = 800; + gl_screen.h = 640; + gl_screen.fullscreen = 0; + + gl_init(); + + gl_texture* tex; + if((tex = gl_newSprite("../gfx/ship.png", 6, 6)) == NULL) { + WARN("Unable to load image"); + return -1; + } + Ship* ship = MALLOC_L(Ship); + ship->gfx_ship = tex; + ship->mass = 1; + ship->class = SHIP_CLASS_CIVILIAN; + Pilot* player = pilot_create(ship, "player", NULL, NULL, PILOT_PLAYER); + gl_bindCamera(&player->solid->pos); + + int tflag = 0; + unsigned int time = SDL_GetTicks(); + FP dt; + while(!quit) { + while(SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_KEYDOWN: + switch(event.key.keysym.sym) { + case SDLK_q: + quit = 1; + break; + case SDLK_a: + tflag ^= 1; + break; + case SDLK_d: + tflag ^=2; + case SDLK_w: + tflag ^= 8; + break; + default: + break; + } + break; + case SDL_KEYUP: + switch(event.key.keysym.sym) { + case SDLK_a: + tflag ^= 1; + break; + case SDLK_d: + tflag ^= 2; + break; + case SDLK_w: + tflag ^= 8; + break; + default: + break; + } + break; + } + } + dt = (FP)(SDL_GetTicks() - time) / 1000.0; + if(tflag & 1) player->solid->dir += 200.0 / 180.0*M_PI*dt; + if(tflag & 2) player->solid->dir -= 200.0 / 180.0*M_PI*dt; + if(tflag & 8) player->solid->force = 340; + else player->solid->force = 0; + glClear(GL_COLOR_BUFFER_BIT); + player->update(player, dt); + SDL_GL_SwapBuffers(); + time = SDL_GetTicks(); + SDL_Delay(5); + } + + pilot_free(player); + free(ship); + gl_free(tex); + + gl_exit(); + + return 0; +} diff --git a/src/opengl.c b/src/opengl.c new file mode 100644 index 0000000..61cd30f --- /dev/null +++ b/src/opengl.c @@ -0,0 +1,302 @@ +#include +#include +#include "def.h" +#include "log.h" +#include "opengl.h" + +// Recommended for compatibility bullshit. +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +# define RMASK 0xff000000 +# define GMASK 0x00ff0000 +# define BMASK 0x0000ff00 +# define AMASK 0x000000ff +#else +# define RMASK 0x000000ff +# define GMASK 0x0000ff00 +# define BMASK 0x00ff0000 +# define AMASK 0xff000000 +#endif +#define RGBMASK RMASK,GMASK,BMASK,AMASK + +// The screen info, gives data of current opengl settings. +gl_info gl_screen; + +// Our precious camera. +Vec2* gl_camera; + +static int flip_surface(SDL_Surface* surface); + +// Flips the surface vertically. Return 0 on success. +static int flip_surface(SDL_Surface* surface) { + // Flip the image. + Uint8* rowhi, *rowlo, *tmpbuf; + int y; + + tmpbuf = (Uint8*)malloc(surface->pitch); + if(tmpbuf == NULL) { + WARN("Out of memory"); + return -1; + } + + rowhi = (Uint8*)surface->pixels; + rowlo = rowhi + (surface->h * surface->pitch) - surface->pitch; + for(y = 0; y < surface->h / 2; ++y) { + memcpy(tmpbuf, rowhi, surface->pitch); + memcpy(rowhi, rowlo, surface->pitch); + memcpy(rowlo, tmpbuf, surface->pitch); + rowhi += surface->pitch; + rowlo -= surface->pitch; + } + free(tmpbuf); + // Might be obvious, but I'm done flipping. + return 0; +} + +// Load the image directly as an opengl texture. +gl_texture* gl_newImage(const char* path) { + SDL_Surface* tmp, *surface; + Uint32 saved_flags; + Uint8 saved_alpha; + int potw, poth; + + tmp = IMG_Load(path); // Load the surface. + if(tmp == 0) { + WARN("'%s' could not be opened: %s", path, IMG_GetError()); + return 0; + } + + surface = SDL_DisplayFormatAlpha(tmp); // Set the surface to what we use. + if(surface == 0) { + WARN("Error converting image to screen format: %s", SDL_GetError()); + return 0; + } + + SDL_FreeSurface(tmp); // Free the temp surface. + + flip_surface(surface); + + // Set up the texture defaults. + gl_texture* texture = MALLOC_L(gl_texture); + texture->w = (FP)surface->w; + texture->h = (FP)surface->h; + texture->sx = 1.0; + texture->sy = 1.0; + + // Ensure size is power of two. + potw = surface->w; + if((potw &(potw-1)) != 0) { + potw = 1; + while(potw < surface->w) + potw <<= 1; + } + texture->rw = potw; + + poth = surface->h; + if((poth &(poth-1)) != 0) { + poth = 1; + while(poth < surface->h) + poth <<= 1; + } + texture->rh = poth; + + if(surface->w != potw || surface->h != poth) { + // Size isn't original. + SDL_Rect rtemp; + rtemp.x = rtemp.y = 0; + rtemp.w = surface->w; + rtemp.h = surface->h; + + // Save alpha. + saved_flags = surface->flags & (SDL_SRCALPHA | SDL_RLEACCELOK); + saved_alpha = surface->format->alpha; + if((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA) + SDL_SetAlpha(surface, 0, 0); + + // Create the temp POT surface. + tmp = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, + texture->rw, texture->rh, surface->format->BytesPerPixel*8, RGBMASK); + if(tmp == NULL) { + WARN("Unable to create POT surface %s", SDL_GetError()); + return 0; + } + if(SDL_FillRect(tmp, NULL, SDL_MapRGBA(surface->format, 0, 0, 0, SDL_ALPHA_TRANSPARENT))) { + WARN("Unable to fill rect: %s", SDL_GetError()); + return 0; + } + + SDL_BlitSurface(surface, &rtemp, tmp, &rtemp); + SDL_FreeSurface(surface); + + surface = tmp; + + // Set saved alpha. + if((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA) + SDL_SetAlpha(surface, saved_flags, saved_alpha); + } + + glGenTextures(1, &texture->texture); // Create the texure. + glBindTexture(GL_TEXTURE_2D, texture->texture); // Load the texture. + + // Filtering, LINEAR is better for scaling, nearest looks nicer, LINEAR + // also seems to create a bit of artifacts around the edges. + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + SDL_LockSurface(surface); + glTexImage2D(GL_TEXTURE_2D, 0, surface->format->BytesPerPixel, + surface->w, surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels); + + SDL_UnlockSurface(surface); + SDL_FreeSurface(surface); + + return texture; +} + +// Load the texture immediately, but also set is as a sprite. +gl_texture* gl_newSprite(const char* path, const int sx, const int sy) { + gl_texture* texture; + if((texture = gl_newImage(path)) == NULL) + return NULL; + texture->sx = (FP)sx; + texture->sy = (FP)sy; + texture->sw = texture->w/texture->sx; + texture->sh = texture->h/texture->sy; + return texture; +} + +// Free the texture. +void gl_free(gl_texture* texture) { + glDeleteTextures(1, &texture->texture); + free(texture); +} + +// Blit the sprite at given position. +void gl_blitSprite(gl_texture* sprite, Vec2* pos, const int sx, const int sy) { + glMatrixMode(GL_TEXTURE); + glTranslatef(sprite->sw * (FP)(sx)/sprite->rw, + sprite->sh*(sprite->sy-(FP)sy-1)/sprite->rh, 0.0f); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); // Projection translation matrix. + glTranslatef(gl_camera->x - pos->x - sprite->sw / 2.0, + gl_camera->y - pos->y - sprite->sh/2.0, 0.0f); + + // Actual blitting.... + glBindTexture(GL_TEXTURE_2D, sprite->texture); + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(0.0f, 0.0f); + glVertex2f(0.0f, 0.0f); + glTexCoord2f(sprite->sw/sprite->rw, 0.0f); + glVertex2f(sprite->sw, 0.0f); + glTexCoord2f(0.0f, sprite->sh/sprite->rh); + glVertex2f(0.0f, sprite->sh); + glTexCoord2f(sprite->sw/sprite->rw, sprite->sh/sprite->rh); + glVertex2f(sprite->sw, sprite->sh); + glEnd(); + + glPopMatrix(); // Projection translation matrix. + + glMatrixMode(GL_TEXTURE); + glPopMatrix(); // Sprite translation matrix. +} + +// Just straight out blit the thing at position. +void gl_blit(gl_texture* texture, Vec2* pos) { + glMatrixMode(GL_PROJECTION); + glPushMatrix(); // Set up translation matrix. + glTranslatef(pos->x, pos->y, 0); + + // Actual blitting.. + glBindTexture(GL_TEXTURE_2D, texture->texture); + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(0.0f, 0.0f); + glVertex2f(0.0f, 0.0f); + glTexCoord2f(texture->w/texture->rw, 0.0f); + glVertex2f(texture->w, 0.0f); + glTexCoord2f(0.0f, texture->h/texture->rh); + glVertex2f(0.0f, texture->h); + glTexCoord2f(texture->w/texture->rw, texture->h/texture->rh); + glVertex2f(texture->w, texture->h); + glEnd(); + + glPopMatrix(); // Pop the translation matrix. +} + +// Bind our precious camera to a vector. +void gl_bindCamera(Vec2* pos) { + gl_camera = pos; +} + +// Initialize SDL/OpenGL etc. +int gl_init(void) { + int depth; + int flags = SDL_OPENGL; + + // Initializes video. + if(SDL_Init(SDL_INIT_VIDEO) < 0) { + WARN("Unable to initialize SDL: %s", SDL_GetError()); + return -1; + } + + // FFUUUU Ugly cursor thing. + SDL_ShowCursor(SDL_DISABLE); + + flags |= SDL_FULLSCREEN* gl_screen.fullscreen; + depth = SDL_VideoModeOK(gl_screen.w, gl_screen.h, gl_screen.depth, flags); // Test set up. + if(depth != gl_screen.depth) + WARN("Depth: %d bpp unavailable, will use %d bpp", gl_screen.depth, depth); + + gl_screen.depth = depth; + + // Actually creating the screen. + if(SDL_SetVideoMode(gl_screen.w, gl_screen.h, gl_screen.depth, flags) == NULL) { + WARN("Unable to create OpenGL window: %s", SDL_GetError()); + SDL_Quit(); + return -1; + } + + // Grab some info. + SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &gl_screen.r); + SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &gl_screen.g); + SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &gl_screen.b); + SDL_GL_GetAttribute(SDL_GL_ALPHA_SIZE, &gl_screen.a); + SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &gl_screen.doublebuf); + gl_screen.depth = gl_screen.r + gl_screen.g + gl_screen.b + gl_screen.a; + + // Debug heaven. + DEBUG("OpenGL Window Created: %dx%d@%dbpp %s", gl_screen.w, gl_screen.h, gl_screen.depth, + gl_screen.fullscreen ? "fullscreen" : "window"); + DEBUG("r: %d, g: %d, b: %d, a: %d, doublebuffer: %s", gl_screen.r, gl_screen.g, gl_screen.b, gl_screen.a, + gl_screen.doublebuf ? "yes" : "no"); + DEBUG("Renderer: %s", glGetString(GL_RENDERER)); + + // Some openGL options. + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glDisable(GL_DEPTH_TEST); // Set for doing 2D shidazles. + glEnable(GL_TEXTURE_2D); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-gl_screen.w/2, // Left edge. + gl_screen.w/2, // Right edge. + -gl_screen.h/2, // Bottom edge. + gl_screen.h/2, // Top edge. + -1.0f, // Near. + 1.0f); // Far. + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Alpha. + glEnable(GL_BLEND); + + glClear(GL_COLOR_BUFFER_BIT); + + SDL_WM_SetCaption(WINDOW_CAPTION, NULL); + + return 0; +} + +// Clean up our mess. +void gl_exit(void) { + SDL_ShowCursor(SDL_ENABLE); + SDL_Quit(); +} + diff --git a/src/opengl.h b/src/opengl.h new file mode 100644 index 0000000..0a86287 --- /dev/null +++ b/src/opengl.h @@ -0,0 +1,40 @@ +#pragma once +#include "SDL_opengl.h" +#include "physics.h" + +#define WINDOW_CAPTION "Lephisto" + +// Info about opengl screen. +typedef struct { + int w, h; // Window dimensions. + int depth; // Depth in bpp. + int fullscreen; // 1 = fullscreen, 0 = windowed. + int r, g, b, a; // Framebuffer values in bits. + int doublebuf; // Double buffer. +} gl_info; + +extern gl_info gl_screen; // Local structure set with gl_init etc. + +// Spritesheet info. +typedef struct { + FP w, h; // Real size of the image (excluding POT buffer. + FP rw, rh; // Size of POT surface. + FP sx, sy; // Number of sprites on x and y axes. + FP sw, sh; // Size of each sprite. + GLuint texture; // The opengl texture itself. +} gl_texture; + +// gl_texute loading/freeing. +gl_texture* gl_newImage(const char* path); +gl_texture* gl_newSprite(const char* path, const int sx, const int sy); +void gl_free(gl_texture* texture); + +// Rendering. +void gl_blitSprite(gl_texture* sprite, Vec2* pos, const int sx, const int sy); +void gl_blit(gl_texture* texture, Vec2* pos); +void gl_bindCamera(Vec2* pos); + +// Initialize/cleanup. +int gl_init(void); +void gl_exit(void); + diff --git a/src/physics.c b/src/physics.c new file mode 100644 index 0000000..1db4525 --- /dev/null +++ b/src/physics.c @@ -0,0 +1,134 @@ +#include +#include +#include + +#include "physics.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846f +#endif + +// Pretty efficient, no need for sine table!! +#define SIN(dir)(sinf(dir)) +#define COS(dir)(cosf(dir)) + +// ==Update method.======================================== +// d^2 x(t) / d t^2 = a, a = constant (acceleration) +// x'(0) = v, x(0) = p +// +// d x(t) / d t = a*t + v, v = constant (initial velocity) +// x(t) = a/2*t + v*t + p, p = constant (initial position) +// +// Since dt isn't actually differential this gives us an +// error, so watch out with big values for dt. +// ======================================================== + +static void simple_update(Solid* obj, const FP dt) { + if(obj->force) { + Vec2 acc; + acc.x = obj->force / obj->mass * COS(obj->dir); + acc.y = obj->force / obj->mass * SIN(obj->dir); + + obj->pos.x += acc.x * dt; + obj->vel.y += acc.y * dt; + + obj->pos.x += obj->vel.x * dt + 0.5 * acc.x / obj->mass * dt * dt; + obj->pos.y += obj->vel.y * dt + 0.5 * acc.y / obj->mass * dt * dt; + } else { + obj->pos.x += obj->vel.x * dt; + obj->pos.y += obj->vel.y * dt; + } +} + +// ==Runge-Kutta 4th method.=============================== +// d^2 x(t) / d t^2 = a, a = constant(acceleration) +// x'(0) = v, x(0) = p +// x'' = f(t, x, x') = (x', a) +// +// x_ {n+1} = x_n + h/6 (k1 + 2*k2 + 3*k3 + k4) +// h = (b-a)/2 +// k1 = f(t_n, X_n), X_n = (x_n, x'_n) +// k2 = f(t_n + h/2, X_n + h/2*k1) +// k3 = f(t_n + h/2, X_n + h/2*k2) +// k4 = f(t_n + h, X_n + h*k3) +// +// x_{n+1} = x_n + h/6x'_n + 3*h*a, 4*a) +// ======================================================== + +#define RK4_N 4 +static void rk4_update(Solid* obj, const FP dt) { + FP h = dt / RK4_N; // Step. + + if(obj->force) { // Force applied on object. + int i; + Vec2 initial, tmp; + + Vec2 acc; + acc.x = obj->force / obj->mass * COS(obj->dir); + acc.y = obj->force / obj->mass * SIN(obj->dir); + + for(i = 0; i < RK4_N; i++) { + // X component. + tmp.x = initial.x = obj->vel.x; + tmp.x += 2*initial.x + h*tmp.x; + tmp.x += 2*initial.x + h*tmp.x; + tmp.x += initial.x + h*tmp.x; + tmp.x *= h/6; + + obj->pos.x += tmp.x; + obj->vel.x += acc.x*h; + + // Y component. + tmp.y = initial.y = obj->vel.y; + tmp.y += 2*(initial.y + h/2*tmp.y); + tmp.y += 2*(initial.y + h/2*tmp.y); + tmp.y += initial.y + h*tmp.y; + tmp.y *= h/6; + + obj->pos.y += tmp.y; + obj->pos.y += acc.y*h; + } + } else { + obj->pos.x += dt*obj->vel.x; + obj->pos.y += dt*obj->vel.y; + } +} + +// Initialize a new solid. +void solid_init(Solid* dest, const FP mass, const Vec2* vel, const Vec2* pos) { + dest->mass = mass; + + dest->force = 0; + dest->dir = 0; + + if(vel == NULL) + dest->vel.x = dest->vel.y = 0.0; + else { + dest->vel.x = vel->x; + dest->vel.y = vel->y; + } + + if(pos == NULL) + dest->pos.x = dest->pos.y = 0.0; + else { + dest->pos.x = pos->x; + dest->pos.y = pos->y; + } + + dest->update = rk4_update; +} + +// Create a new solid. +Solid* solid_create(const FP mass, const Vec2* vel, const Vec2* pos) { + Solid* dyn = MALLOC_L(Solid); + assert(dyn != NULL); + solid_init(dyn, mass, vel, pos); + return dyn; +} + +// Free an existing solid. +void solid_free(Solid* src) { + free(src); + src = NULL; +} + diff --git a/src/physics.h b/src/physics.h new file mode 100644 index 0000000..5c6b34f --- /dev/null +++ b/src/physics.h @@ -0,0 +1,21 @@ +#pragma once +#include "def.h" + +// Base of 2D vectors. +typedef struct { + FP x, y; // Basic 2D vector components. +} Vec2; + +// Describe any solid in 2D space. +struct Solid { + FP mass, force, dir; // Properties. + Vec2 vel, pos; // Position/velocity vectors. + void(*update)(struct Solid*, const FP); // Update method. +}; + +typedef struct Solid Solid; + +void solid_init(Solid* dest, const FP mass, const Vec2* vel, const Vec2* pos); +Solid* solid_create(const FP mass, const Vec2* vel, const Vec2* pos); +void solid_free(Solid* src); + diff --git a/src/pilot.c b/src/pilot.c new file mode 100644 index 0000000..f4787ae --- /dev/null +++ b/src/pilot.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include "pilot.h" + +// Stack of pilot id's to assure uniqueness. +static unsigned int pilot_id = 0; + +static void pilot_update(Pilot* pilot, const FP dt); +static void pilot_render(Pilot* pilot); + +// Render the pilot. +static void pilot_render(Pilot* pilot) { + int sprite; + Vec2 pos; + gl_texture* texture = pilot->ship->gfx_ship; + + pos.x = pilot->solid->pos.x; + pos.y = pilot->solid->pos.y; + + // Get the sprite corresponding to the direction facing. + sprite = (int)(pilot->solid->dir / (2.0*M_PI / (texture->sy * texture->sx))); + + gl_blitSprite(texture, &pos, sprite % (int)texture->sx, sprite / (int)texture->sy); +} + +// Update the pilot. +static void pilot_update(Pilot* pilot, const FP dt) { + if(pilot->solid->dir > 2*M_PI) pilot->solid->dir -= 2*M_PI; + if(pilot->solid->dir < 0.0) pilot->solid->dir += 2*M_PI; + + // Update the solid. + pilot->solid->update(pilot->solid, dt); + + pilot_render(pilot); +} + +// ==Init pilot.=========================================== +// ship : Ship pilot is flying. +// name : Pilot's name, if NULL, ships name will be used. +// vel : Initial velocity. +// pos : Initial position. +// flags : Tweaking the pilot. +// ======================================================== +void pilot_init(Pilot* pilot, Ship* ship, char* name, const Vec2* vel, const Vec2* pos, const int flags) { + pilot->id = pilot_id++; // New unique pilot id based on pilot_id. + + pilot->ship = ship; + if(name == NULL) + pilot->name = ship->name; + else + pilot->name = name; + + pilot->solid = solid_create(ship->mass, vel, pos); + + pilot->armor = ship->armor; + pilot->shield = ship->shield; + pilot->energy = ship->energy; + + if(flags & PILOT_PLAYER) + pilot->think = NULL; // Players don't need to thing! :P + + pilot->update = pilot_update; +} + +// Create a new pilot - Params are same as pilot_init. +Pilot* pilot_create(Ship* ship, char* name, const Vec2* vel, const Vec2* pos, const int flags) { + Pilot* dyn = MALLOC_L(Pilot); + assert(dyn != NULL); + pilot_init(dyn, ship, name, vel, pos, flags); + return dyn; +} + +// Free the prisoned pilot! +void pilot_free(Pilot* pilot) { + solid_free(pilot->solid); + free(pilot); + pilot = NULL; +} + diff --git a/src/pilot.h b/src/pilot.h new file mode 100644 index 0000000..16c6a14 --- /dev/null +++ b/src/pilot.h @@ -0,0 +1,32 @@ +#pragma once +#include "def.h" +#include "physics.h" +#include "ship.h" + +#define PILOT_PLAYER 1 // Pilot is a player. + +struct Pilot { + int id; // Pilot's id. + char* name; // Pilot's name (if unique). + + Ship* ship; // Pilots ship. + Solid* solid; // Associated solid (physics). + + // Current health. + FP armor, shield, energy; + + void (*update)(struct Pilot*, const FP); // Update the pilot. + void (*think)(struct Pilot*); // AI thinking for the pilot. + + unsigned int flags; // Used for AI etc. +}; +typedef struct Pilot Pilot; + +void pilot_init(Pilot* dest, Ship* ship, char* name, + const Vec2* vel, const Vec2* pos, const int flags); + +Pilot* pilot_create(Ship* ship, char* name, const Vec2* vel, + const Vec2* pos, const int flags); + +void pilot_free(Pilot* src); + diff --git a/src/ship.c b/src/ship.c new file mode 100644 index 0000000..77e2920 --- /dev/null +++ b/src/ship.c @@ -0,0 +1,2 @@ +#include "ship.h" + diff --git a/src/ship.h b/src/ship.h new file mode 100644 index 0000000..ee3db4f --- /dev/null +++ b/src/ship.h @@ -0,0 +1,30 @@ +#pragma once +#include "def.h" +#include "opengl.h" + +enum ship_class { SHIP_CLASS_NULL, SHIP_CLASS_CIVILIAN }; +typedef enum ship_class ship_class; + +typedef struct { + char* name; // Ship name. + ship_class class; // Ship class. + + // Movement. + FP thrust, turn, speed; + + // Graphics. + gl_texture* gfx_ship, *gfx_target; + + // Characteristics. + int crew; + int mass; + + // Health. + FP armor, armor_regen; + FP shield, shield_regen; + FP energy, energy_regen; + + // Capacity. + int cap_cargo, cap_weapon; +} Ship; +