From 46a29f577f39bf2000553e53683b34b7f50f8dbf Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 4 Nov 2015 01:53:01 +0100 Subject: [PATCH] Add a static image input (fixed to 1280x720 for now, and uploaded rather inefficiently). --- Makefile | 4 +- bg.jpeg | Bin 0 -> 95293 bytes image_input.cpp | 92 +++++++++++++++++++++++++++++++ image_input.h | 22 ++++++++ theme.cpp | 59 +++++++++++++------- theme.lua | 140 +++++++++++++++++++++++++++++++++++------------- 6 files changed, 261 insertions(+), 56 deletions(-) create mode 100644 bg.jpeg create mode 100644 image_input.cpp create mode 100644 image_input.h diff --git a/Makefile b/Makefile index 657f7e7..0b88d60 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,14 @@ CXX=g++ PKG_MODULES = Qt5Core Qt5Gui Qt5Widgets Qt5OpenGLExtensions Qt5OpenGL libusb-1.0 movit lua5.2 libmicrohttpd CXXFLAGS := -O2 -march=native -g -std=gnu++11 -Wall -Wno-deprecated-declarations -Werror -fPIC $(shell pkg-config --cflags $(PKG_MODULES)) -pthread -DMOVIT_SHADER_DIR=\"$(shell pkg-config --variable=shaderdir movit)\" -LDFLAGS=$(shell pkg-config --libs $(PKG_MODULES)) -lEGL -lGL -pthread -lva -lva-drm -lva-x11 -lX11 -lavformat -lavcodec -lavutil -lzita-resampler +LDFLAGS=$(shell pkg-config --libs $(PKG_MODULES)) -lEGL -lGL -pthread -lva -lva-drm -lva-x11 -lX11 -lavformat -lavcodec -lavutil -lswscale -lzita-resampler # Qt objects OBJS=glwidget.o main.o mainwindow.o vumeter.o lrameter.o vu_common.o OBJS += glwidget.moc.o mainwindow.moc.o vumeter.moc.o lrameter.moc.o # Mixer objects -OBJS += h264encode.o mixer.o bmusb/bmusb.o pbo_frame_allocator.o context.o ref_counted_frame.o theme.o resampler.o httpd.o ebu_r128_proc.o flags.o +OBJS += h264encode.o mixer.o bmusb/bmusb.o pbo_frame_allocator.o context.o ref_counted_frame.o theme.o resampler.o httpd.o ebu_r128_proc.o flags.o image_input.o %.o: %.cpp $(CXX) -MMD -MP $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $< diff --git a/bg.jpeg b/bg.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fdb51d99bc1c1de522d279b88d71771359b7c94c GIT binary patch literal 95293 zcmb5Vc~nws8#WFI3Ydz5mU=93#JR!r9DOZ7R2)!5aLCLdJZVnV0X^w!;Xpa0;cR*| zBnQAL$+W1nY*HGIs90E3r|BS>O%CU1+Q<7_>-XRH&-d)L_F}Pz``ORF@8`L%>%R7n zr$1f+5P^OHegGg41jy2CfFI8QJ^(Gy|JwidTABvd2LG=?wY4GIFen@jgTi3&O$M9b zy85~>n4Y1Yz5xPZh=6Z0LK-2En%{{3-30i*E49E-&4mbEn6BpE|Ht;@CcqF1nt%Yb zfR+G|AyCT@_~Q=1Leo_MNDHXh|NjjL(gH)Yb)YcK;R6T&Pz&_G?rK3GS`erKOmnuO z76uI2f!8()OVB|c&4*f6wxV|STM=%_KEsTue|<68mAKjZSizL3$IsyrwRHnqeCUw} z8LTS4_|oOkJCnP8X}>YEs@tYD_y0*_7^vyd|HZuKsFxuC1kyY>NJ~fa@S4#B0Dv0n zV9XAP5k4$IV_REeyZ_c_)J_@UuP??{yQn(WCW*%is(#D@HfjBTT{Q&k1#CpB8rAhP zRE%DoCvVOnWU@-A+o2{`QKi5os!D*<9uY}8^J-;4NToL@j*eRuc{Ml$wjy?}c0IKh z55@Qewy12aTWfJeMHWVTg%rJ$1*b=Rvn3oSqbyRyH&HA>VQ{Qqo$kJf<6)wj{kndJ zn=1S^k$g{x4xgDQRtvF?A`NZW?YLP4=Df7n|?rU=eY&vctyt-xnHl(Zofvq-z_W z>nV(gv1688@A57nah+!%V@=_9`qj=KMk&2T9fPbct!hUQ&E-@+GZ+rHw$@?82dU$;)$ z#J-C`Hy0I!DCskkbb_E#Bw1)WX^c4lg<=5P1w*v!odDe}wXV}$qI4z5c_K%UgPz3g z3obW>UY>+rz9W>!zDq7DXq=_{Fc^K*jjpateMpJCfRGjmG|JxG8<_ z`&QyPag$@8cz-O#r@fkN>YIkOBIAjPz>2Q)5kVnCh zDVymf5m`j-J)-rh3_ftq9@?SOO~=3wAQgb3@>@hPaMdAr9}UMIq94o)6eA3d2`muS z8EnH8EI|l`UECZNt*Vqk-PshB-0rue!0_#jtnjP!aGQVNOYFsgppW+OG!a51aOxcv=nM!I?p0h$D}^_MNKrx= zc6_moH(l$um3=$Ca=XB1#Z^6*_u={(;=0wYId}m^9-}K%T>y)He*hYz!!SfxcSoUb zmKL*s10Ycb{7OIa_uYji;uWO%UXHU#^aWC-s*mN872(yI#!GQ1TQEU)pOO$dqSNIJ zPw9OLe>89sQ&reIhKVDa6chSBw9(ytzoXql9F^RzYv>WwT)>pY_EI@qwMP&j zkAAMK)xz&uyRJ2UawSB=dmE8gG(s~tU)t`1>o zH_HO+%er3y`)hy6j^=kH@DT?^V*~#DO7rfiV0mHgT4xHWN#w0v%8gMT;G&-3dY|B2 zEeruT7$*!kl*lWuiK1Yf8l{HfRc-fa4*4dWj677`k}O&RBH9)Ql5pNtR(ufBhtDQ* zk$Fa$NT^K&foS~e-bSzz9?)FiAJdl6D`SA0f-SRQl1CI6VR!J_ytrg*sgsz$b*-D!To(~8BUEDag$jTbzjDBFo)4Ta;pd{^SrP6B8la7On7Q%mrVQ_bt#C`=4vKXW?bjKaEfLj*4!^O#b)7mhBc{FiG&pW8~ zr$ri}07i#fiEdO5i3x4imJ(@wQ!LK4Lv)sIjAMxEBKb01==o^8YVb_`0FT?)9R3f_ z+#a6adgCJ>aR#aMlBV(^#T;u^yGJYFI zPN@0;p!@q8&px3e_{JtzD5!xbXG_zpP|5kbadAn^@0j$%g%o%iKYa%`(gN2_;2aB27C~sj9+QpJgoC z_lJ3d#EH*@l71lIWfXZJV7@zD0@6!NI|WqriB7r8;4$~O9ZiauT(r6I7SdsBrTcs{ zw?RgQN`SeoQ^c}mznd2BAz%1}tiY!*Pbit7hc2>`hXM>f7hMs@NPOp8kApn%G_LPx zlpc~?8|uDYc+}&;h2+jg{z8Jz%z<(9iFHwMlO;6 z+6Ue$aY$>-#{}`PJ0##mv-N3@k9i1#SZb~#qxuRRkTc4@J7F4;mvfkhE^!Z;St>H} z2w14Q$wmgDn)8G16@!<8u+&YaxM=c1YtbYfvQe7N@g`zB(UN(AJZR1g>p2Q~n9(}I z&q;3KvhRyd**81G#+42Q6+Zwh!{~D~ zWb)N;Rz_C142K|Wqg6;joi}QXx@W%%0c+N_`Fqs)CN)zGP4IZgiMS{q(diID!CmgE z?K8V8IB%Cq8;#3=Bkq0S*DKv5#YXT-UF=r1F&vcBu|nqRuVVM8)yRL)hCOmXj^zcu z;E3}T?CwY=G{|ym9c_{NMW!2{CRl{Wg}yGxt3-^&u(ByRj=dso`hr;37>^hrJnZVJ z!5__|Lq?*gHcn7`Rl*jt7vuAVq#!@FwUfCX{c6Z0Z9oKPmWPKK8A1jF!ShXrMf>#< z{9xv@bLI{nn^!Sc34Fhc?bn=YaO98t2MLlEp`b;i<;was@cy8b)28CA6lt&WylXd0 z+ITr>b+F%3@anFuuWctgJCzhJ&&TI-mGypJi&`xpDx%7#(dnW~ixh~vk7w;cUc^}K z4v)oFH zJbB9nU#9`Pw&>6#ob@NUPi~ReI{Fi%xiiLI0T?WO$qT534NF5anP$rocTtGyD_+7S zGEqRS_G(>dySqNoyi75{*g|S{iT{}DC+F7~*@Uq7tExO8v3e6*T9%!2^Pxj#&C}1%A$pta z9kxd!s-IBuH|?_x=LRU_SbBX9hh6F@Nj~zJf>sLR!_MjylF!CrGwTzjx$Cu-<>-6-oOd4CZ$sdzhT-J=QjQ1*u5_NyY8J5_q8 zEdvB(EW=dAkjdQ6>wHA62ws9l@6=)8qe|%1&5S2Usu>Zt+eCYWGHpcx_d&`jVCV>=P!bK81Ma0Q5G{?7$4eIR4wZ_KV%U|U0{2LQk-H~W z_XWaM#?OWqyui4&wXM)d!=-!!#?l0KQ*9;47;QTP4=^YAjWaIBF$YU+W$@_0bn!_% z8lB&^PAPyrx1B|Al=>5m31fTt=VycoJNVbZck{^^#voQL;FF{KKFB6!NYsv1>tKSd zS--jOl;|Xd>v56No)-G9W=Ct7PCUoZ6GF1eT%xKUmNS)9M5kElPW3bf?j~5Sz?*6T zDvl2ALu%{O`;sjjh(RLNh3g*S*gli44S^b}$`N=v4(-sIX( zM|!wOcorUgD`ajQ=uy=S3;M_}xMyt7B2bnj&ATaQu9XB0tT?5Vq^IFAUdg{_MMG5g+B6_Ml#aUyjZan4u;Q$8L-~w}Ft;hFJD9U$|b9onnjOkPXmBWyxNF?H{L81S#V@7;UUtp&oIp@ zC(bFF8KWJX@Ar~Q4T!r&)R%li9+Cz+StJE%Iu=-JA;+>?@?A27AK|7rB$J4Sxo@w3 zwnPLt4N~Wp2w@t)5%O6C?c}HNuVF~d@)6?fh5)=0U`O9gH`JjSHD=V&^xD0ra)qk= z@=wfF$KS-o{{cq|!o^_ka9WY);Z`EY*peACc2m4ft-dewkyD`yosw&69^7QCcU6h^ zbj+(UiSZLjTiWT=pXz39rq#WrTnIcXTpsk3Nm`5AQOzDC)1D~eh>&f*Y5bS~8mB^C zAyrn?DBi4%k2`)>{An5h z;9Kpp5jc(jS+HaPZd&zTRWWljRDpM|85UQIWBB<63s0gxcy(Wp?9XWhl#slswy%;K zw+bk}pF|o@3n$xBV1RUoEjAQ`Zy_6kUog{Y?d)2=O9-kb+B%aJoK|ECv}P?6VF^O= zr=*0SM>VgGW59ah6Dr~6s0MR8h*1KN$<3$#@>5-6Mkz>eV;l!;dQ=s>4|MIO{kFFQ zgw)*ekg@dcE?byH%lrpGbYt?CRo~N&S9J;+3A|qyqg}_%CMQ{5TP!i5gR0WxekutaQ(I#8xyaIv z<|4U$(+7zq>{Al#E1!sMAr=nU1Cly_1MAy)&)e3AQdYon(qu-t=^L$8s3Z zD5p6*7rfAVTq}sTam~6}&Pk4I)j27*TBjn6(4fLwnP5=kVp0DSr8lMUO8859_T`#g z-|4PeWZJSUw(8Za6#OuKGQu`1dQI3NzT~^ZJ1dNVqf`{b1ahAzEE>+GL>a`hADqJ$ z@)5DNb0gn^nh}sBl#SNTkW_nh^#pI{`w%Hi;Xcn6S7lK`)Qd_Qu5^X+@B%1!Ibfmv zy^4L|$$WJ>QW@%ttNG;ce80T}mD|ZDPswng!>!^QGEgg*dp?Q3Wpr4*2EqJVdb;BV z)w6w(ri->5F4fH@b2&?doF?nQ#w~lsbb*!_&@U9S@iw|QH{|w0YjBaDz^PRe94oYR zF^g0_gxg(g6E=XF2&}L5aVg!mJ19joLMOp2rxdRIlmWZTT)n`-rbTM7Z9Xt@w#$m{ z?14YRzO+}>s0@_@gHTCYGVLy-BttFdyZ2>4GXc1!m{us_Z;0X&U?-XVzKBrYbaw~z zRKzu(jX~bvrt$hplv6@pax;?0fzP}r*1tNsxIi!WfBZ9 z-&5qpH;)p=yHVW25E)cZZd-B^r2Iye_GyKc_!u9AUJMuK5^^w*(^Rf|%lJBYE*+I* z88u7wB4i$67Y0b`T1s!u!L-tAuyp)Ee!rNPdSmj1=+WENSfGxKdd$ay88MNdUuCJ@ zr=+0M8b|T4cuP29xIGBT80b8HZVmHaqjkEsQT!OeB?lAc%!A+e^&$)oU|`;e%-?Hf zKKG72jUaa>5sh71iouA}G<2#1fI&oQ5qcIWWy_JFi?|?jn_;24h*T~G80AW%n)4_t zIA^)DmlB_s5dIWxD-k82#6U*L6J~P(t~orOWI;to8-Z;=IS#wYsO4x#zKnd0*Ds^< ztiru)dh1NKw_4ClqVwlZ0fVsYtfFUa9Zw=W#wFq+9Jp<*tDfc*AG|ZZD zrG_3e4TFZoE_A3txi(c!-C*z#5vqZfPzySnFX36V5*4vDpl@0hF}O!xRVi^GJR>SY z?#5>HoU{KZ#wpM#;yN=-(8ndJD_^&4ty7HHmnOogI;8oT-^f%WIEn;MP0A*NYViEz z##!2cinH?r;~i|FjA%RVO%L_u?xx;~A)@3IZxDKEt*v4R7b?d@H?_Az^wsGm5u0rO zf^b*Ji?}{M2cQTSwTSzYNOvszf44u$Ku41MR0Z1O01?%9F+}~R4Ek>^#??LYx}9WL z4YFHe~PDhy`5sk$Y+5um!KZAD)Z{W#B#sf8*dPMs$jyoeH^FBG%m@~HPE z)ykMreeEGn2c2)VuD{73XEH8`HeU_xC`}f6u#?DXd~Ah?>+T-rZhs3eK>}@2%}G=f z4FLGMYM;Pw+cyU5dEDrb;TDn3th9d>RnZf*G%S61*w_V7#RHP*ldD+E#6TV%wpFyO zfa=5$K+wq(!ql5jM11HIUuOg*!-^HGZiANWQ9so>A$1RX;O=1IgkU@G5w6wzMGgJaBL;_iVR6&7>8;z_7HRB_FlG^J z9x?g{8?E$4Ufq742GFxX*yYvL-Gp7wXpD89p@hcL0JmfT^L@e^Y+O7zxq~arPttBu z7j10?faelqag??fW4~-IvDgrr%urX0P|z}tOJOYhBntHElZBBx?LbD}bPEUWrkR6w zi0g{pa@e$s+a852QPTwGtw9zGjjU)MV!o|_MVk0#j4KJUpex9kOs(skiyyq&fpt%afJK5A&!^KDH>3<=N%~vWEh37cB9S0vMOEjb zl7cxtJp~UWWi~rX3OG?)^D#hV>_l_T${HHpDG$nM2k~Ph`-~x0DPb|J`8K^J$_2XH zMLMD=+8{>IByHojP9{0SHFHk?VuW95-eml!AV2DI&7v<(9$V9(KJ^Y^wr2A_!6QI3 z-^~|W^-Lw5>8A0C6Z!GhMh++|cFBR~Y;T&ORAflkFv7s02-M zN&^wvm2t%oYpejexWbofF|pu0F7gVkoU1BaA{WP0^2)=XD9{gE)z+;i;{7YHrX2{7}Th7xxrK*MT$g0J2epT8UH%SF31GAWM2 zX`b!4kW>zr?iqvS!P$#zj^Jm#ZLP z7Vu0Flxh>^lRAn_r@X*eu3`xp&9y^O8-co>44%b6sLX>~rwO34n-R`xuGK$nIU*`E zXi?@YSVy>(Nehn<&Fy>D&Dj{AS?YZ)rbh&n`X$d816C8v4+}3(l9V_nFM9=gH4wkH zP{?&tbtZOa+v^bRciZ#Mz8226|4l98j}{7vGb%tyMag`Nn)qEwhfGJ4yt;-<4OmXV z9{G8G?k(zP0?!MphuCs;XjF>p`Ik%x<=mEW zOQU5hSek3c-_Lt%RJ|Fe$2H#&gjvW3>|g%V1s&YEiI7*jsPyS5Em+woZB$_>iQ`AY zZ=xMu@>@!umo;G#m6KAVp6P|2f~Q5prNLdliH?QY*a@iL^5`a>SiJY-Opp|k)(TDz z4?9u^0bGR7tqPd(*iC4&j?ZaT;j1#Iu)GYmuvOiAtrMNAs?W0$Dz~L$Ur1URg`S^ruF+i z<9khHQx?^g%=jpka8O{gXAH~-3A7W_IQ)>$bu}dsu25`K;LwNVP};Kn!32vcTR-)B zu64BpjsbyEf0x7NtMuM32Z3@#iPY7~h0{t9j+kkWK8y@kc%Gx))tk=meNn=++)Eol zw`qw^%6&dLgxsPa@!u!EOwL_D%+7+R=NXSMjfm})`QYcVUebbJJsmU^8WO9hyfx+- zgJ!wEWll6yhI;X9;F&NNk~p};;e*UTEwE!&zC2L+5atoYv;vijbkx;Aw z?W_Wdt`t%9f?$11LjeS$ebTFGFcH`&TuyeDLkwivRi_iFBomqT&AUVPE97iazKpV| zj8O1JiyrO^SPXfgVpgiE+iS&Pdua|$*_2z9BWNZmRBriJ2~Yqz)(buNlL=MS**2-B zlHyb?4_b;y7XjtgV24x<+tM~OmmaS0uDNLBd6-fz)o%r2tfHdr%^ywk8-#tLv87N3 zrlg`YLs-q&OepUy$q+Ii+_YA-gC=83;Y(Ca4g$Di=Vv0uS#n`9prDw#&j!+~FX`gz zVjz4KtEnT&U9? zKf)hLN(0X98MnAWsWgFk*MQK^JDyOT#N{_j2yGZ&iXVUC%m9AUTOM+Oo=pgYRSE2( z@VTSO+1m>^i|VR08`wasoe0?TSVg`dYT;0(+OUvCG-2yl-71gI4PLb8^VYE5yVU}7 zRT8=xgxeWP-0tEbX6soZVEuBE-t*cdg!ULdpfY#99*6fvJAQ;|wOOBgLWCg?w9NWx(zc6jQGJ*cCT$aX8OrP)nP3w-aY4*>HA2xe_sDgAn2*?C7+&qqt6hVV%wnC|t?zXquS0^E#~)>x+vaW7vzC_D{=c z<&*cmFhNFNSd7v75)7ckY_zl(CW2#-S5&76nWC*TL1;^&s=kP_8tc^EFR4s7KBvL- z$k=M%6MuOJg8b7FQsRCTj^LbxyF9VAIb3OotyEP`V@U*Vq9m!s9Q{&MiH?S*)dU=K1Bwfk0GUP|(p9jQs!!b1)y^&a z*Ivsv{0a_nxKa+?g#{6yp?Su3T*&0yE=jgS4Uw=rTxqJi1e74ky&D8QS$Le1Q z#rEeeg%cWWIRupckh)so%*V~zz;%}3wQvcOrmM;(?J{b)Sdhk!`NvLtu~P(k$*-Rr zZ=cLvU`td^jk&_yTM@*V6LX1WyCgWxOBG|obkZlam#JU)rW>TEST9??G)@uw4hnEs znnk_HiulZK;!VC}d|+i=uDUs)aZk8u$$K*8I%xwfgB%(3qAbKj>jinGK3gN3=PG$Y%;)djyML>Zwj4hs`ctGlJ@ zK=`tgy|u(+=0&mjbaEZ`z^t|3wIaYeYS$-G-MzcRQsR~sP8Qdtz=}M1zqu5=RrK}1 z`|tsM(Vq{}QG+QqZ|@Xr;y|}2z-&FOn`?Kf*i8z+$39j%5)Lx>5~LfCGm#(sPM>%R zNqnNN+eFe(a}tr?H@-t4W~29y8^d!uJ;A&7zGdraMh?^>2=V6^q#1=&isNYgJ~4+| zRJ;;;P3S>*b5g)?W7jbnc$Wl`M{81@dLpCg4hwT%NTId z2W(J1>m?$X*F>fYMaS*qxt{jgF5!7hlA*^6j-;w@*x7C2iM2YyvtJ3bTp@7GqXfb= zzLo{zv1rw1kka-{V%umZ^ZO5?qNKeb2P30G5~m!PRlO@X4KCQpO)@x!D9~%CBNcFv z4dJDGA70@<}otAtSUV_%;)O zaF!08fI3X6DN;~PRy$dcS}1sh<|S(GE#CCjV!jN*SnXn5aJ?AuU~3|i7E=1vkhwz< zl*|>(!}S9edX~as76YNlMt5B?Hh>)>iJnVmqVO3Vpd||R)k!)yA_BWIR_!v1-KvDY zyJiSG*6fej#rH9_nB?6ux9hdIDc@iB(!pK)aev`TD0BGyErM4x6}7+XgSaxat)U3g zJe5ZSKQ1}OmMju?N%U`^AS1-4B?^m>b)DyWJfL|XXp!tL2khDmuTbl`ktcxaj5=iqr3-4*nzb!S`5zt-pJ(3s%$caTRn5_D8`n``m5Nq~X7%e0W9Skj&<+NK*i zG8f1g)ZASHV#Cyx%H2NQt@r{vmB560P_#eFK8f#lX{T{vTi2=pe-1E)+f-=ikix>v zQ}lQOzyge9ImIY^sXzzMIXoo+pIwOzb2#xCL3D5(Sg#RJ%*=w5xlqaA-nRuAKJn$# zmyQ+}ctp;(nuMG`Qse)tHU1n>?*~9etxQULox-+Ub7H!S2Pfgl(AvOaW_XBtmNmsc z7244XcY7(hcgN|nHNo_$ahR#wW>2BC-trC6y&pGZs6ECyC(|!7;*~wV3yo=7Xf9=E zku_FEcvnRgpdFPy%nU5tdQ|hRmfBNYTVc ztW`=Npm0!XI3nqvp%v6nGlUn5381YXY^-xN9!nx^FM=V?({mq}vRxCKf>k_o%z2gu zo!Rlz{%4M^$*klW=?&rzZz(hhQUvuR_@~pg4H*$X07Nd&Mrz8TuJUY$$FH|nGfiBX z3Q#iJpRvec*oy#$al{1*jD$0;0gw1*s?XEtz*ReOT07S`7F9yldk6Gs8+WufbMiLI zCf+rj?|rbpJKyq2#I3qnfu~dl;?Kenxz)?K-Ft4xSMQaQp7Ufx!ZT4O!%z}Ut;@vj zzMkBsj4o&4iv860aVWF>T^K-xPzn4bI^e>#6G1Uy-5kKQAl<8r-*$j*5Bd0=YCBOm zO|%_y0H#KJ6L>61W2>%-mvy?rdulSQfc-1=?Mc)XZuks^e{am6(Xau9gAVLo>jJ+> zq~4ZjUB?nul_UkQ!7Axj+s{H`=ZRvBRdRS$zE}Ig>93#Ey%IH|aAZ(;B47KGJ9%E{ ze^Na7-2OW~+2x24(5o8JK0*BWoj$otc6Qi*m<~91^{UUR$nP(!B&gM*&p}nC9gQ{M ziAhf1+5NNtWhQOKk+f2c6P-7Q=NboKC}4Faa=P$(K909sU#n|6PzvsP7yrOLr3|NOre|@mU!}!j}WgT!RvIZ>aYQq zYb|YOGi9N1Eb1unMS}jzN6}lyk9P9Y{REYYU&!n!0oeu4xBOd%tMphBkLhBCyvQnm`?>0V(0gWI#0Fm-W0%yIT3p>uRyxnh=2s?{mBTf z35lJtRabk~ZejtP4Zww-dDFJ^{;N}RAF~=OjFB6`6|?EFxQ|TPQcTFpHYavT%`JJJ7nBJ~IbI6z0+9o6m??93MMz+>Ft!SdVb-cy6({PSyLYNQ}JY z!3BjZ}zp;})NVIn~(*U=v zccDa((ilxRY>dbBOz$L!4S~BA?zB6+`5Kr}V}sI491T3BUXc@P0b5H%foNEKqLGp9 z81}|=K(ky4^hPS;=xFp->D}IX3eSN>iKVb(dQ1NlXN4<)S$L%eP#H1oL}+95jl|a|>@w>*fUB+%-Ao)wU7C*~#G5Z3 z_=RwxQ{A})6Kppc_st(@%?E|2Vv5%={=MUQR>bQ>qsBW}!cFS4G}hs!l~qUO;{8MkPV5=E4@8z%8kr~&^ovlN_&!4Yt3@mnjRp(bkgfiH z7wop`s&Yp|rdaNj=%8KSoLb)WN31l2C)aF$1Gfr*xi3`jkV7?0T)KifQ5Cwx)JEcu zC0M0+1UZ{9UrIKT(5`z)rWNLH55DMMD7_{B)so|lj^97=)0aO_{c`*F>^u6KAMX5Vd^);#OB%~6q_yLd^p!sE z)~cc4K+??*qSel`BZe*L@BV))LJ_|g9eYzY{&o4?bZp^m`2LUjF2B7z7F2fT=BaXa z^8vKG8;dK5RiA zU!j?Qc%jzn?h97yv2;|O2Tvx&V{FL$+LPzKV7W;T-%Azz#D4m@w# zA}(jAi2|>@+QJ((B|+rPuD*CTgxN zc}WAThk;|3eA*ZOK(x%UvKxY`dy8SP6(6N`V<%UChSU(|O)){n2zt2%C1&Q9m-aN- zV++CQ8qu;pq1e47?ym zFg8*kF+w{Lps_Or&qO~9YRf25z!Q{SBb|p38f3i{)P<63Il{PizIBDA$y1~J~%j3=8cpPI3^);;y^&}sRTq*4cLNC zefe5)Z6CtWb~Id!b`_u8#|u#b){Xu`GC}Lq5REMMc#Sh~Pl@*wpy`;^56L&GGDQaG zYR(d?+BZt9Yas6jOSY3s3i=zAVbjoZuBp})vrKy{VN_GJ^~3cs>b>{=!l3dQhw%x= z{-8E#%5ax?^LS)#t?RMPxl(b+2iW!4q~5uN&EdcdAZDnG{_&4gH-WNZoeVN)8&iO?-7sBTPXm$vL`??t6Xp zEPdOfyhLEOpXlo~e%-zcTJxCL1^3z-1fV$=yO5CBV_&J+R;BDvKy*sywayx&QAhK#rLQ+x+CuuWkKKD=21$Ct)D-?bI zBt6OMhz9Wh(g!+^fG{|owbU=DWd9!J0O zi6qYkL$RE3*tbH%oGSva#>O$r%JvH_WT;rg+>ul7088Y_4OOTN#@L?iV~_ZCoEH*k zN9mLdt8zKepk#_oh42L(;3u#WnX9Vu^^BgO7K(KwX~M~Dsw!Mp8I$UeOs5pGkctDJ zIcRaZ32C5+0PH7%j8uSf8$<627@ULg=9;`H=3k&;LsYpCBHGe%fsfEy=w8HeohU|x z@m{^1IEP%@AuLU|#9H%}!e((6E{@@gFpV-7zN8Vge8ko-`B^w1ZJ%_1S|5qfdR={< zh;ehr+2SYZ=abHUiDWnzRgB+gvu%gMt(g(=$vmi2y)s%H#W$j6nnXx(HQ1p29oM?} zpnaGyhP_I#Rdmug5vdH~SICZ33pIkh!yQUg{{fCRH8@42k$?H~2f>fp0eDCpxu&03 zZ(EN?BIs7{+4PIrx9n6@gGE%aEJV*V0Jk>E)-PdROnPiwSG{@u;;yU9AuBM(1;(>D z5w1LXp(T5obL?0QlDpUA6< z!^@W{nkQDoMaCZvANc_Q@3McmUV9;{dnU>_yJd`muI;P**kk?ZGP(80rTBbe8XDzRp4I74(V45SfT7U z#S_u?2C?sDS!QREFswrGOTy4jR92FYe10u^xX*L+&pV|aKT(^hKi>^` zaL&iItKy!QZatD#b==l$zqe;sLsHbkONi}HXLeuK_2K=zrMdLHxq05uNN3e`Q&etO z(%-jkTTD%Q^<4feKl1pk0NirQ_lcGB=q2Omhi?B~joN=ABP_|LYRBp9{7o5D%GV>G zcsuO3v7RUFbb8zyS@I~RI?*9sNK3aWNj0$A`bj$Z(dOu9Q_7v0t{}rGirdpz{ms^C zSAGD5_pc4>er^(dJ+f&Lnv?7D#IW|AkISv;2j2o4&fM!d|Ie8n7sh6BDf&&)SAUq; z*E~8Db|n62+RDCDzmxZ!tavGCu`3sh5SO$6e6Z*SN>o?GaO$}mRFceZQtE6>#byjO{kxfA0MssO{tadCwv~Jp1?kzoaJ_zxZ`#zaH83?4Qn8hmgM~m1V!) zapk8eXVKp$47L>>ce)dh)fIZzO!pgV*Yg#Npfj~+5Pw2vQtWf(I-fr*bVO2)biS{8 z99^DqdG16>-aUa`BS8LJo6P;cCUE$_`ztIdP`#Zl?1KF1EN z08Jgxr})Uk=!lh@^PmJ9uj*?2lI>Qqj>>M82%o03rgLfEmIRu2*124Jz~J4{$w(7d{-etu z#MLVIu4m-8o40S#w+hhRx$pxJAXx5O*x0Lm?W04nrye(jadn>`&`RM0e%@-m$_J%& z-+_R6FGm=VX$5|UN&4V0H&{%_nlN@@Mi@xgEv4+d>X1f96KZf44tBAr_2OW0&Pnhm z2;k|c0ZaQ@`)X?t#v2p>$6JI|J@8lxz&|4ns9FPF(1U`}D$XmU+%*ZkG~XwOlAYkN z=I{@UeoCvhhKiX|3E`c2a_ZNv=X$)G#Fo-PT^C^=-EP%>Ck>4?Py&Mtuh0OeV>VXHYNi~=86>!o=DQ74qEdq(fm;DL z$MG4Z^%t!m7=C+Ic6blBeT4X8{NqZHImUN_q}VeQGKSd8sHw75X+|XpxtWf0MLMEk z+Amo^S6+lNuSV^$wEy}g`-hjheJ)--px)-1w%*1#O&F(R+;NEJ zeQ-#m@GBHuaWew;dz(lbBB}D(bjCtt@QvP{pHA`(0vuhan-J~yx*~{8)+~j#L`jA7 zvSfIoh7`x!_l~(Fo>2GPEDQDZIo=K0CWdJfIX^?+%cNbAdA9DCO&TA+Gg7@<$Z?9R zdB5p4?fwbV$G0bc?^xx3)ZYb)G=KQ}`kSSgQ+qeR{a5=!`QFcuIz@k-H1;B!m7Ucy zQxbYS(|V}qQXN41LO$QvZ16kl-hU!*AOB>`_{rn!{iHv3lWQ*pC)sNG!^l&Rw+qMj z#|N-O3L?)7%kD&UhSVOe$W5+@0G-6nfEK}bs+@k;d>on@ok=x^cA|H4L zr(Ka-kfu7e+~583dcc!5`^H_;H=p0Xp$^eLo>YG-dshCK^t0naG-zYUi3|40dYHt|5^VN9rV-2UCsAtE)7 zHf0^2U>OH`zq{gr_;vTtsUtssJ2m$0&AFXrfS>u3kVEEUI(WtL`Uuh5FAG*zLrylr zqW(eF`FeN^l?yi_j-3pv`1u{AJoE3|IA_(n)B3+X-1;>Qy>PV?R<{AXES&D$0r}ns z8L`gkJ$dSR(CzPb_oKHN9*xtRdcEnq>%H*4GY=d*O-noUW^>A4J-uUY{Oq46uMPBm z=e#yKbmuwp*6#-l$B$+l6eL9vUbH%1rlK1$eNp z980Jw~-sdu&^6qJl59o>hf4$L9 z6`=34DCGTS0>?sr$>IqA~{<-^R>aC{b{lJG7 zR_}InkG_pR^79`LO#QWr4tXE$tS!JH)sg=>D%Bfuz4mqe;q`{Uw|&fe>3#k83mIE$ zHyyAJWBEku`t6xK_+Xw#on)=dDX2%d=R@`7 z;jQ=KRY9z)kNQHYx6Fza?(fVvwH{MR+h?Xyj_&fT9c2af#vlCSIKIKr#C!fyEK>a7 z-t&}8)o*;I)5-JXpLSo6L1-~<8gH<^WsYf$kIuGH_=I?q@gR{ z(BfI#U8HdtilutBDGJT}pgUrBT#OD&m}BYI#9**bs@fF%*9eGg>bhAw={;8_mTQ<& zruua8wV29`^4tUCnZMyZm7W}lRwwwJxbtF^zwakr)n@Tnnyhme(dCffJ=V-sDpieK zOFuC`yQHqKnc7MEtlL_n0S$GXs?);xOyXIUG||g;60<4O#8v+QcTvT$GY53@#Umq> znr0g!@VG{`KqHuu>Z5A8q!oS~xR6;=-X|`lN;rzV#+z6jtXMAUjZO=93c7`Qc&2Af z#1bk9G|e(Byvv;VV1pG(g=p0Q*w=FTNmr(3A zK<-{yi+iqKS)5gFCY2m^VTz-Lc=D^dgQ3QeHyy`i>+l%w3F+lns#yO3?^j~l3vi~G z029q;I?IZBjYgfm__-~swSK#t*!22+L|1H-dA{fM z#f{~0Z`p4ChYT@8Hbsd^CF=HHUQayM7m`}p@3QZ(Syv6!!{O@I%&PgNq}QX%+-OH- z^sJ*B@X`1T%MqG4J7y}C96l!phHKtgTBx5ggNSW`BIZS%VxBv3x5M`m_?k2S00j6a zFyTHO8GaU@;GXhJ@j<7~smkZSlo<_>^{>ye|?iUQjyDqPdsaRqM;rW0JG>)^lD)9DmmSwq>7vr$is^E=kZp2e-;Jtv! z7G0RU(8YM|$yYw#hd-%f@D$W@Zyo;tx1YwJpUC4>$g?VVV~BPNunizMme>QKTzZ%q z)Y#X6TwEl8B#w*psra4ndl8Lx2Qu(i1&hgC(F`J+UL9dD8y#%CpAh)@!1OcR#=i!5 zUzbtARiQ@>gmq^RGMibva+_=gi~%ydsC7=P=h*ab*87rPHn-&-iqQ1AB_*k^oLhgA z^WgZ0lU2OHu!1%=SekDn{HDv%@h2Qt&+yK|47&?KkHj2Nb15`DIEWw}V@q}mrNd^J zj4fAIrq&lanPKJgVWB6#%bbs4uGTK%l!x{KPt^P$}w!YK#&W;uxF z+tF>p<3%S;dR}WUVs~DVoOOd|1=8UPoHc{0Y2xZ)jx2%Z9%jH~#K6~8GiA??yD|4~ zzUgi2xvf4N858fwqqmga`)#)elLSJ`kcwgEA=4dYbLeMvFu3eCI))B_b{u|EEbmpG zWuLz=tSXEa9)vTNDXz3MtRZYSnn6cZbA%SC zTwP)`(Q|HfHY8v9s%@xH=$E#uX&EfUL0qa>3YGAcac!$e3RN3Sw3sBibowqFLbC$% z^;nXVUv<&AN-6#2XxUbgqfpa%65fVarsCfZb8ZgHGJM|~m}R(}E_sBfjl(+&T)DxH zn>ns)TnHe8VkB6dSCleVPpJ3DJKW&V0Fy8m9HEiQE;6LK+n?}hPa0CV-SNL4xTg$Ycd=`5gnFouUeQKl?Ve!SU#ib9(TBsVP$t-<)qiSED#{m zbp-0PWV&je`y};3g<@0}-6bs&oRKh3qPE#BFl?twp-U+uG*BL>L|pC?flN+{M(F}~ zPU=uXcL)dpHr+x@U0wlWd(N8G{P?5QQ!`KtO&fi%f!rJ0VBY zx{(DHzS|)O(IAqM*)JL)MfQaBOZP+o>*||&p^%dsAOQL#d!is3`V{Dj`xFE*)FP%+ zx&mv_Ev1#+5DRXe;X5J$Zpb~8*#w{#O}0z)L;~9sg!Wh23QwYI(NaI6li3FZRy`AF zMFBTf5j_y5O?eG-1Ve(xJt0M5M3*JIR9K%?w+mchu~e}xqfV%#@c#fVpq9D}!5f9z zWZXAXIm&aa-IEUtIyvh|^!yrAoiTlFg=h?M<`#Q(xc$ySw)yLv$VqZ>+d05vy#l$ph1le`+LD6N+ zAlmDX;ltv5O8eDU?a99Bc6Q#}n8dC4Ja#uPs%zkJRdDqj$5V6ZIJB0L1W4GeY=0wx z<>rp5c_zeYwIrU*MQmkGqnJ5EhO-N0O2(th%v?gjj4n3|yvev9iui*h%{Y%I$gw!A zvn61ukHs_rPY%)ya}s-L+;tPhl5obm=F(oT+~4-C&Wlqgr`0)UL876y=)G=p;hz)m z?*wFAf0@#yPcGsLwW;8l%81T<7RScczIifb3Bf( ziTE7LDarF{Lm1kadUWbnsfRnUj(bNjx8@=w7&bh!i|PtKoP1Jy`KA3f@Ib2zv=@;%@2Xh=Vf= z&gXd!X~TKGFCxw`riMEMRn%+JE(ew3#7MIBoF(E$BL(7y1H>LO#AEY!{{VSY#%7Lf zVk_dQ^Mg^m(jd4<*m^F%#Ej!D;vO*0IFBa4y9a>G@wIU{Y7c)i>C4ouo~~jaDXlO6AwZ zy1OX~hJ3IZ2SB@y3CJ)US;cv04rUxhfyi*Vg>go%V~vqV4AKm_(e~~|#;eelRgMoN z_Db9O9W{@+sIMoSvDB*s*bNtB#5rysC(m*DRueI$m{G!FYEY+&q9K*q*AO1vY<1V_ zyRHH7&x`y_#^bW?5x`Q!*2}O}G5DV{yD2raSpb=N5=n3X3*V%bnQC!k#qsAVja|LJ zQpZn|CQpR~+_>TWD>GAvdQNU$rJJKW-NXx=jnaKN0bVrqU6)bmX# z`Agy^7J?EE;a*1;^N?aTjaqV_GTKcr7>kDTJ!ZT;$iSNR}42%RicR2eQni zCywE>{7pP{F4OM(JMeAB`1)8pUlZ|v3vlii7lo&b2N91ID>0P>xAtNIH*CX*0n;YH z_xX3j4}p0_3?)uK_?_YERb7p%hQ(0JT}|($O|Aj2yNQw{{$0TCes{uExUFlwSDcYd~@Q*RTR&e5OmlPCR*v;9fG#u>3b$FRzHh zW2@p}?V(zcb4xx`4khj7kYjxp%ugRt$&yPxx3jfdjA0w?w^HA_RQ~`}dok2#aA2?L zyPN+2Q?3#{{U@lOs_MH!#59#twNn&F|^+1webPK z8y|JY5URhCXlDPM)a1t9iTEoGBf;$f_Hgq_!V z=;KKCJ{VNRQp|G(<#k$f8u$v-FxYcRuN8}$d56tlLqRjGthpKA2>6r0oGAKv{{ReD z!DU&~snuqS9F#zeQ(Rnh)vg)Pqr3X$u z@q5Wu>xZ|hw0n59STOYW3CAbJx7gH@g*sABE;id&ZAp08;lCSNrXHRWp$45PVn{eJDOK@1~7|NJ>RmB>C{#8LNcn3l{Egqp>S8f$hwc5y?aC39a&X#eSVsjim0*(ru zck?$7MoTG4a4Vccqbpt{-}!qpLT3!j$exXh}x zTG&@Lud7MapCBKV!V2LzvvLfi6z!+MsrGiJxiEqTfeT>$md=7ng$O#z9KW!$cBDbR-qE30`gd3%TEB-wGsQ}1c7yR|YtO*YCc5ZUifL12lTGZ5E_n<)n8p$gS&JjZ!cHMpd4iz{9+p&uH`t(8fkYzvBzh}#4w@7V5*55{^;cyC>VQOzRD(L|sJ6un5G77P zgVi8*O=ikys4N8{(5!U@0qlT~V`PosD|FXn1dl|4*<0$R&=C781E@pR6K&K2FRGBQ zx=*N7ln9QBLcO6)HIyjdWlviqY@va)AQ5zk+#+dh5dr9cNW3H@Zh*x_eGz1$$5jHp zsDOV371=g~1Xs|d{Zi-xYJ~*t>VPJwEQD-;TdHW1b?MnA_dqs@Q2MJOCJ+R&AV3rB zp5JuzKt0hS$bc$rr*z!_({xot1xP{NOGS`TY?e(nO_Z<@+f)f@RHD-fD(ilVC<`!% zo{AKTrr|wM0DB=oOu*ee(4_=~Q7@twfgRJjM^!+T03ymPqjM-afP#tor~0b^p;F6K zP4rjYBIyPa%8(wYPthY&bwH316KF!LS_~*uEl`_xO9GL3loEA9nM8${7N5FP7F?QC zOW-(PWydK|&kTLWrU#G8NSiL_DdPSp$g(`whcc||6@|-lwlSFeH8+sVLs(_J!+0e9 zNZhV9JTZ@%t8d^7$L!ch7dBma<%3K2ZzA$ttYb&QIrE~R5b`LE_7)z^j{osAcCWex=gN~ zZ5BNF;i!Dab@Su&Bw(VQt2I@nOgQ;sM^n1fQKVRz=(!IQaA9evIZOh*2(yMzt<9KW zg=JCrw!E;5@~p833r?UoW;{2LADHgA-0q9&QO`9ZOh)SVySp)Js*d}E_&bPvMB+Rr z3~u5kbkr)Byx;alL#Jn@r0@fR%O9zSmdzk#yv`N3fo4lcb% zR1Bga?FO0hYI8bI?ufm=Fy$G}VUlC1<{54#r3&<%9Lkj5THr>8MaQz_;P|JAaCqvu zmKQk1(63z0N7An5xx#cL86kDEV$@}Fgk+-@wsmbg=bGTt_x{4~J$ zeZ^IHc;=st45iKHwj{bOZi~w|fVkSH3|8Z6d?B4bhj8@;D!H)0RX8?0o>0?Umyi-| z6RPLoGqz^<%tkjbb$nJ~SMr*U=I19~Vs2O8d`bAg<3AI=9{5|~j|ainJf{Pa8dUK$ zaPN0EH_AV2%ZPwmeUoZGKnlYV9G_3rnWQiA98nry3 zMASTh$ZXnI=?@LOH}C@{@Xy40o;7Ef+z%b)*e*^V%PF2y=aC`t%mc}Ar}Nii_L zI758HHX8uD*z?0Xl8S$Jw`*sA`oA^g>PB77q*_h$4Vk@kgx;nkA%JCxN;8@7vE0e=E|rN2%jHe}TLmmSlOyf&5v;v^cK| zhvdcL%iTl@#B#mOA_xQ*2x*R20dq6*560AfE~YaaU5Tqz#q}LgIYWqY?D~!nwlfU1&UPNGfMuoOr+B#370=Q&8WmV@=Xqq)ebU{uq}6vMl_$de zj=r-=s>_Y)o+St-l`WOmrMLAu3_fF14BG6Z%28dMj^}733EQIL7ju~X7p$e>ZyVx# zKg9T>hsf%?hH#js;Hu-x*w*>(kCCk>na1K^7+y`R4!Lk0m$8R79Ij6klkIfr-8JF* zKV!o?;ALQVVWD z6Qz~%%r)I~D>|>KR57l1Fks~!g72$1T{Bg^l;%+X09I5jBLitf{s?_$5O6GRjdWXH z%2?_8E8K-cGUo%;Li>LOibwQSvlM0K9-ZN2*Nq%vR=7)UfpT`Z%q9|!8jWl=V#>~V z`IrP29_z1zd)!%Rn1zse0QXqO7X?k(&7N_~D~x+g&atwcwo{y4P(_O7v~{SbzUv#T ztrMZ$Bt!tM*fF2Bu$S9KVg|^T40Rn9m0$x2VX7h+?{qObtgWmix_clYKdP73>nIme z-Bl?R{;auKeqD~uv24I)xH{OZL+6&2CYL$T2`~n>3qcThNP;@7sYSlq+}p)91(m1T z+ey~VsI~T`C8z$PSLmyq!cvKP5H@3)8 zVbw);^huN>C#d=$R(F)1h*KRcw{>8o3F?Q}?3@B2R2d!AovwrzjZ(w}4m)e5on zQ2>yGy`>J8RVWi=i3)#OEAM0=zS;zop8BE`l4SuBt+fhkH$lLk>QZD%q(PCgMZd`b zBxs$kkcb5CLP{hcB$2ARDG|CQfiiVT+6r4zmmL%!1ZycX3H;Oes!@GVm_U|5K!4R< z+9s%DUWf*|C>02S7<(smW4e&C3+#ysM#xg`os{%cTe=Wxk<=$;JrEX8L_(S&Nv5Gw zeUbuupa?poCg=r|(Gx@h>AI?HfFw?ck=+16euzC#jnD*;ioya$>g<~+W>6M(LAocZ z0U~Uksr(TOU?e0YC=01l>Gw#r?tr7JDRKU)ghjBP$)QWaj0h=ogtTg*M5;TfZ9=-B z7u`v1!zw)it_>uob^WEUv%F3%LSmwYnwaRecH$1RZ4s zwz?SF=upxw(FzNjgo3CMc+%C0oaVxOGH<`_r?zog2%;9g~yIds}%##2@>t>ZB z(bB@%&!wg5DD37 zs^dJfacEvl;rR(Qs?hA<+_jS1`JxMb3*&TBL~SpvO>%7}uiI;jcx> z6R$fp^1;za+-|lw!*qkyW7BTSX`D?_G}UC|NHhjWcHpcx);;uC!6&M;OYJw|F?DcQ zhGJ;Ewxu#0)6lQjS;ve&3IpMXhqCM^0k*G+^(elcVUJ}H+Vrcm$*Ag_!o-G_z&0_g zug1`iwUw*wO1Aj!sG`+O7WppQ+2tGfZYV++0t(;W*rsH@{Vi_16kM5z~C0n}R$`9kiIHwJ7vd=A8EvB;R!)D;tA##~c`;Ic1Del&als>x+JB_Vg^W5pU&T2?SZm-bHnldpsPCvf*Ja|Li&@W#{9%gXtp1ZlOjG&X(0Pe5xjL2LK$rnt z4!2!dbnP^?D^}pXB2|89?nkKVVT1ZrFS&O|qvD=8&-k*ARfNrRY{wUc$uPqUfuoAX zRIJQ3D}0pN;zJu@^0ozn>MLfLs*I^byoOW&ICX`{;oP8c7I%ZmosOY`ZYrRraTSRS zWbR>V&vM#%Ms14AC}UfTW*VcZip&rn2T&HVW5J265LHU+>;6p3K6$5=y`JBf_&d5B zeVNeUEKdQq5sNqsPARyzQWe}ObAc1dp*9Q35=l2pgEOj6(Q{$Jj|X$ctGV0x{{Rt; z`ka~6R!4oRm&g)Mq^bP`7Vl*BE12sr2_NKyoz2jwgzoTiaQKl)%ymX{wT=!Ac7=C5 zX~ftrE6x7^y)YaKe0A5{#S zME?L4?tDGqo)O~e8Kqt#<$I^nhdFibwi4(&|;fNAOdZ2cV2%ct(Rcx)plWo zrC*wvV|nHnPw!iP#@Ae5)Wx|*DYqKEpPxqde?cvs9XM&^E)6`RQZ!Rj22VxV(#{5Rq%RuxVy>;|9!S%94f_3OFh zoK>ja{{WY$bxN7gzMI%#?JY5(2pUL{b?vd-XNu2wa}|^3!vkKqs>+PT)S}-#p{)Ql zt^-H_doLqir6&qvjUi8wu;LHqJype)bJ}sI^S|(6HrD4Gl!CKm3XgXnZTs36+Fe7z zT${n1mx}V5j>U27vGpis8FnV1eF296!`jd+AhzV2%y#)seVJ6vb86VeVd!DJ$o-uQ zFa^VhRV?#qL8Pr)^aduzv@k{2o4kLL`X3%~W@n!8PY2`}?kC1(RPszMT2!#rqszgEKk~P&fa_?!%dzl3 z!VHVWDm+(>;tn*YkWk@_ulvcYG}`y$4?G%e=5XbKB$zR23yTi2ShSB(tMJ{@ezdmd zeZSypej1(PzTLU`A1X`VRp@x*DabO8B*kEOS2Dz7vc?hQR>Uwip#)42EoJBVexJp9 z7;-GIStI3M{G1kdd@sZqUO+Q5nDD*>Ies?-QwfGRvr;gX97pZg7~#zJx0nFwXeMC7 z=`Lp4Bp!>fz-BdYSPXU&n`y=|fsf{BCMIllNa9hOn&tcYexE~&$6rHdRPk;zkSJ(OhKI^Er+9rnH}W1W}hna)!~7lq36 zJXRK#VN1xxGKE($wdu_AJP*v-g9giiCvhsI^)_2r;}+zW?~{UAXE>k)=uj4R>a6TkPgDb45>!Hh%PL5TgcrPh*CM76Q^3*23|$8r)gMgJYssk2 zP~VxtAOp>7{_C_+$tu4kjAbip$NU;56z06j4L{8yH&n=!l6OQxi7}!{j>&GSNA)O6 zEc8=d(l$f-Aw-kJm)dBHE;VkX;ErsXa;`P?qX|lCL(R z=tO9S4fIeZB@nUO@!nWNar`BkP;^XG!n_~Rdaf7oYa`*RO{+_UA6FXMjd-f;c?|hXkCT_v zb=>hc#GZM?wCD^*O+uYo3=9u#R}xPtZ2FK_jgwi{9&X%N7iX(#{*>S5eI6c}_Ivt% z?E0y9`XuY~iSl~c26cy@KPtsji~Q7_E%aP>U~!C)>@8n*8!u6rc#W85E##|)XkdsO z=RhJoH2N-`{6hD*yYS#n+~sJdH-1rbbnRD{I{yZ{aZ@Uk_8=rDOPd z!p4)q^jz_sI7_^dsgIc1Yj$Yk{{Xc~>&#a=o?kIKZw{ONGyIMxky?Mimu;l~eo<`X`qC*nW$Wam49P$NnOr z#yH=UNk8H$sZY?)!^XeVarqsgY5FH4=kgz--}uKJS^ogiC~=3>G0M&N%8fn2MH(gE><#3w?-r})s#raR6f~SWR>9LM&E@R9< zg7eHtlc|UjYyh(8XK%WXXGIm*<$I%dJOCsUuo|rdygZq?wZhwnov$X#FD%b7KSjBk>oL5oxmO1Yg}u%NS{#GsBFl#MJDA9_ z>@jWt%XHf7yyG#HHzMJ0?%%@s{{Y=i7}H2Mm{$B|COpW$KPQ*1`FS>lwUx$Ei(lOT z01d3;mY?EAa!>nJ{P&~A7J+V>!q!E^0rXqm*qJ2XuB%zz+OFznmn3O$6QEeQ6Je+7 zww~v8i4kCR?zWl4%_h;O(K%+rs@WDYHCq_VK^H3bQI!tkjv6LL$`+76$#VRl0p;0g zb4Vu0rD9m?lSl69s+w-LIl92I*LBF5z|jJvN4m%~UQBzc0Mm4^qCn!(Rps348>$(p zH}_P)Qq3s(oQC2k3^OUVlYGXR=Z#k$vyDe{n4Q!!pwUYU5$LlRrMX`Gk|2Aj{)&+| z3SUe8R?IS3iSC<9r+cN9B@o9>$`jFFa)!kTMk<(tC`m<3(Yp;%%;o{nAwndXI^AkO zOvyJ2a2d2Wb(0v^I0q36Q)(T}mcUlIG434O^2kEK6erbRS%p$&S;&kx;CXN77wbDN zI2YCwkpN0wZL%mNS0f^9B;GG|==d*)GR%dUyE6=?jxghJFT>DvO=wgk5cc=7^E21% zfx`DvP*Q_~@@JENGQZ-n4y_g^YpnostQ}Af%d(Aq=5<<0MNmqOk|YGvQ)MJ1&DN|j zZh<$DoApvkq%FB*d!+27ru}^o6p?)b{T31T>t8(V>JS&kDU zbBEz5<~5mD5Z3aE=W`m?pPEgDgb6yXme7J`RJzVMd^jjubgO;e)tk$g;?2#ZuhV7p zE}atEsVOUv<0&B~*N>u>8`&n|2w!a!5gRA-Qe`*=OLb303HzZ-?h{>9le$UvPDohl zR5!YJ*$@N*`u9m7SvJt18fgi)s-DP6Cenk!U~Zuho{1bvk{O*HtuB1ocUqlA5Rq(5t#d(%n@k zluPS3OKB)TZkzfdl7SY=9_imnNkW9u6|#r|X?Rc3C%TkC0*bXQ{7Nh-%@}~E8HT8Ql`BMn;<}46!cE& zjSvVxf&yu4pc`lsCq&f{3r@<+YYJ&=p!7gjX!0( zg<0lt4h5u0by$gwig6Pt)5f)wq>m|+dA}%?({uj-?RNWq?DZjyf76~%{{U+Ik<}-% zd#0N%+2xW|?2>hq@6|&=HAM74tad7uEUE$pe#zMNQ3{Ku={-V`x~dLBzSdLqDv3Q* zDnOD7Z?bEudL@>;h?Si&^MNZ4t0oC?^gmS?M}NcATT>3#I+%HGCBH9QE|(JCSCJwE zh_|ZroH)vj$=zO)T_YIL%@PO8BlKQt65{7Lx@VZljc&SlUFMnVYN6Yt#p=yOUL_*w zB~#YxxOsr-2vFTw`EBf>q5&4Nu&&4fGKHdTeN_TX+7JU1D=uD;rJ6{KE>Sks1j$(q zR$Dbj`Vj*AuEvF82QM<~DLM>a`7V7kVbg0awpC|;O(wWI3T{8*i+t8uKB1mgxLt6~ zN9iUOR376~<~nzeb=7e4ch+6hQOpf~q<~PpwAx%vz|mK8IND=Lg{HF!F?)AhYj?TK z-)gjbY=`S#)-hO9ORiqn$0@6dY z1Zurs3viArjW~l1!?+66aP_fV$IYxrrpC3U&U1(afEo#~IxjVf!?b7zy3 z86Cm~+TWteMuZ(!TeFfergm9x59T?pSD9wmW-+)-t&Daetw)BAXSg+tZ2o7PkkNit zJ=!#p)zqdZ<&Q#T;tP4FnCs<3mhZJy$-hJBxa*E13p*eygzwY;^KReT_k(WEubvbd9uG za)`OI$N>;N0^4R3Ok&12?6Gi(lW?|1lPd!xYG5dtS}_(KijWVYq*_JNeyc`k#^T_F z!#WM&|)&l$s6#see4@g6ewNqX0p&34iV`X%*NL3J6H!Qwivu(!fD^NraxrL^d`}^+|(uFYcBBMRnOp z?w}Wh^;JX#zeI%zJyYLBY^)pmr}YWCUszBApF~c|kcxK-$lW_El%A@>mX&*;3D_yE z$yZGZ0X>wys?5rIpa3X+G*u7?w8BS3Pf~z-l=MmLh*E83VGv$W4O6g7#nWU0B^6WI z0J;SBO^^@kR5~F<2W`T&9ZQICH7US%uDBF4H{ZH$^2~ zlwl1{iovugvLT?J%BX~5J14Tf$@W5ogttN6ETNzYRY?(|Yu!Loe^iaZO_SL|i|kfR z*V$sSZl_HVg~{zWW|4OXV{3}dZzegG(4Ucb`ox)o1DVU$aNS%xI7=H&xjfIsO9s*z zs`3>K>8CMXewO|=U!UxITK1lo1$utwy_Jum4Qz|Pc_CZqrMKB+1l~}o67mWSCRG~P zPpYJLj_Mkr((5MJCa>(RJmrJGk4EIUZw}(nh02 zt%SMKbv8<_&=Uk~QH>zl7Zp-FHru0rAr7CnRmrDK&uJmQDD1nQ1>vmsiL=Z$6C%oS zIQ&R>cb7(=F|z#+p8Pof0Lj;dwJK-srBgf1nTNzxqaYkH1>iBHPdCW+xc9cwye_5I zbp1YY#gYB#G?MebKSX^WN$7d{l5@whN$&lZk6+mQ?ZH{@6NWSA=Ge>|u}u6HGYZ;m ze<|jzhpS1hll~V}4voWMa5$qU;p`?8EyZN{-CTYr7l-q4^xcLu+l8!N;pH{NpD=QU zJDLUFL|RXCo^Ye`b{Ey3+EmnuEdX47PyYZ#d3w~~xu#0*V3adtS@B8x`ZTZfzZLi$ zOy<$*{Z6~c+EIKXXEcc-Le%rnSoT6l0u1^p;Uhw}l^jxbYJ;d2 zR@0)ep%(nhT%1761&1iOAT5MWp<@<>P-Yyih_algd&1cy6pmvcXsIaFZ3kt^#pYRt zKAj49>~(BIaFm4#4XEh>UKg{x@fGaWk>)|qDW9GLhmILeN)*%$&(!$EPw1z8vdw46B?z`P!La|j55T5x`SJw zFj9M=2C3L4*F*?gt`bGAmnw=L%3jK(lhr5$_elsz&>&)aAk{-;9d%N{ zPeK&+R#dlC3?P%LO{D>z$OY5cB_v7#*$CN9jn$rn%1{?3;WW1CGJ2`+ zCv?}c6ABb=qHe69C$dKBpuVUFs%U~XNkBald#89r1=&kzlBpK#fObI&YKRN!h)B^V zWdPAor_nu76+}tspb4gkk_bYLdmsacHvqE~SxaW(hs>_z_o+H2g`A7qZYpeJn+a@oO1M^z)bp(a!UAtPI>Dj*P3m07sD zd!em~9Z-#xK&6600CXzCyV#|bB73A-da9Q7DjEl(5gX{JjTHbMfDVabjBlpvChBhz z6P7hqpk6vC*-|_Fp0galG(7L(|{{{Zld;C2_rPCfh{X@{*>1%apMKAS8a;^wuW zov!KjT`g{}9*YFCWZ@nC29jF5%N$x)~m@Y*F-o70DIUk#yXZ=MD_94WJ&kEy_d`6eXrTx zzl$!h^zA%bkM^hRxqn^R{Bq-NB*teIXwveXLY**Wk*lWiciZ|a%bFm=&(bzuxqczO z9&q{YWy87lQYX23mn^gY0DATLBjc5eT7PCXTw1S_^DX$D z;1hGSE-U$bvJ0+t9T(Q)N5$pyM<{1F>Uk|pl9f(OC0szoRA>-tJ*_Qiao?0V@zb5% zS5r_Jml4r&=+QOnQ=`qx<~TQ)n+ZCV?z~;_*M~eh#ATQam&6>aimPI9!nQ89SSooG zDiVKY*HmLm;jl>pB*d6mdW<+TM+^Sx-E91GZ-wV^}*=akO)odhd zI&CX%GXYxy%romblZm7&HK56BNgz)`Vtoii(sUeKO|B8ebjPZ~3H|LBan%U5!sJH- zHQarAD1NIWebm0oMoe}0RtCs=ZlN93GEU0wHrW&EgyfyRi6o@#E{D3LB1GtksZ|+Z zM#u;~EQe019n~Q{6Ma+FHbMhB9TPmg5~0+X_!zUeTF7ZIRTv?pMN%Nb7VBr-9oqT8%N>avj%%t>EQo()GM1j!)qkxmqHcilS zNuTsj)FfW%-9RJ_kzEwf`XC#n`lW&(1rt>Dx)+fsNKZv9gdWPzbkRK!qI;*d$=*>u zVF=rz7RJa=bkRT}$^fj{CsZjTqJI@reGm`}D-+cx(OKw#gc7E|=(6mmvH=~E4yM5* z-Csp4gyltM>FA}D#y3}GP(Ui!BqE|TOC^Fuv`8l9Swr?x#{`2Kgac?)*l!BKixjYo zV2y$+=&w|=(Ul-P!S1bLp&BVq^Y6N^Hid`%)^aA4Xx00 zq6>R>P5bVy`lN3cQo%Qs4_R5l5gL!88YaDhEPyhk4Z?zmeI*8$g_kJxNQ;3ASx7{g z*&;Ss0oup}>At}%t790{T2&SrD+lbT0ZS@G0N5(sPok%xw&(-{(L$|`eh~8D9MEE1 zbl$;n40&*OJr^Q`94n-5e?`ar&qFJUDw{hpZ?-7ImIwJHcGYA7-DC$)Wp2(SKnd2$ zfG;|$$_$Oag2*&Lk)@QgW+R~z3cR+xyDWh1r$vy1a#cIy3CM6G$@? zLDcHK?rxylUdQ!c&-zqJErV&Y{YmiGgv>JRryW_i+*SpZu-J@UcL-~07BG2I?QDG8 zX?eL{DfX$yCWXPewvVd&JEB^gvcom^Tv}~b$4Jj~hS!PpG#Wm5V+7Q_CFy&1y3< zd0)@J7kE=SujAe>y(%ttU4_6@t&Sz4F#(P)Z7@!xy|n&|JvS7znbu667kAZvlj=Up zYqD$pJ_$Ugy{;Wf8+3+aEM^W8_J<FK2F+n38?Di$R8-uO7CfP z*fmaH3Rl?a{QVCvRie$OQF#?9ZjLV~aEp3E)lr0L)pCANBn5?yr$I2g$)0?n+;I&n z8~s)xgorj=mjGlnw$W=0%LfY)Xj>iy#lprTx&0Q=#Mgvj z5qJ<#^9yV2vL~&UE+Fa-mQ>AACPWYx1Q%`=ZW1O(MT@6Jq+$D-;E5;fp(kBus@W3R z1#+^A_zWg%gT-cB#VemBSI-_vZ$&pMs#i(Rfg*CIGt2I(Mbn(U$6fT@ZRVw!HG6#A+_L!)4TkY-MUxoaSNamj;JCfejqaYh>;~-EgO=(RX+*HR61?hBFQg zz-HBGWcjUnSe$MZkQ-j5FyTzQbIZ)=8eVl=d7f1j@RGY+`dvCfo*R*bab>GBnoJ(cyk(jfFu z?wyc;fV)Xg(HacGIC7swlGCdvx_Tz*>Zy{HCwS3MWe;GUL6VxHn(V0xm)R6l8G5J) zlu&|z%s?8fNs^mrrPZ(%Q3`+sN}i~M0((NpEFh{3n}iI^g9vPfVPiK|$Yp-1H`dD@ zVx;v;D>FTUSY8xq-eplcszEAyqOo~U68a>4)x6zExKsfhKvFKOCDbUoNA(Dk*Bl)t*mx`Vk(1i0BQ7G1VdKI#H{Dm@Yv?uDWcMA=xf9V~<~R?7Mdrm9(Jnrwnd zw#v$CCKAess55n71iDyT6^G{2WPX#Zlw@;VSAI~ZlU$=2FrgroV#*$*A(D^LPepb} z=!Ii`sbyo`2-y1|Cv|m!DHAHe*eFy;A^^ldJHH4f>W_6m`L4GzkaZW1esBr& zZl~2o(m5dqH%QTKB>w=Kpp6cS^0s;)f#{Y>0PISp0k(xgFKd-V3&0^luSQPd=`u`( zzYB$aE})}8uv9xe;h_7QENfxv;p)1DYG$2A7;{`8g*%nklab?+k9}?GYqPfWl}7Qe zREzcQvLBR@{S+cM(mc3$Jx!Lc{jTw1wo|nk1~pp2`3!YfT%50jK_Ax3A|~K!r?sN% zAs{M5hyj~x(PSim2+>m|9Dpt zq?=BkvER?rwHjE)S)kIE==3>VQ^I&$E_e8BJ#51m()=*2(NJOOhZc&whDSLqaBnt% zb3~Rnbol(w9hu_l4-0ZoOsdF>|XqB#o64S~AfV~e7 zwzh>SOTCtl-*SYkAym z17uIz^k1Qw#EzqlJUv4n7$)GWHLNZHyyBbPPi;$sW4W^WFN9wK*~VqSc%KkB{-!Gl zhx{w*;js92O+x7T2?uGJ8*8*LJHy`(yjjFtcZlJfwvU!*2EElQG=Li-1i{ir(R^Q2 z)#>%wf4bBY`FP*xeXmHvlSzVV70OS3DP2F`)5-MjgpMoEhY?~j?AsAirU{(QWioej zp}=+9=vV06qloc2CmlB}emFA^UX=>LlL5h^JuN5dy5A3c3B-7DlRF)V!JJlOO1Z0E zvlt=8(&swb0XFQtK5^kD8;$tehjER>VsMx!4JM3&>S9R*_djLu+NeWUt!_IetLk?r ztk9^q-bcfkZbz5lvh2Q(mqQHD7zvZ^POCi9gwrplL_N*Yc3)ws`y;8vqW-HazWS>3 zwSPYY@@}8k=hF3$CX0uB`gpVO{s-YtD$Mww9hzoYA2nAzR;yB}CA|9(b(z1fpkIi7 zDf|V-@P~*MaC|R=tBJy5NqaEVsgwABnhQW036ecm_H!Llo?Vw##bQ_~2DG{Tzs-L) z{w(}WW*0HV;CM%!*}glShmpL`qfNvT?u{lrVC=jenW)xiwbAT$+TrlNeuwDYE2+=z zBr`2!YaCMEE6=y9d!K+aI@#U|lkzNPD!VD+&m*WBgtf4Ak6*gzDlmTYVR~He4~e0P zc*U{Y<9(RX7b%bX4&CS*vq>Ju`5qP7;aN$H}&%^>UdT*;kgnXG_MZLY8l z1pfdTTMK5u%7Ouhj;nTX_Lv5PB7K$yG&6mrZ7~Fc>k9%&I%rmtGUKtV=^&tF8^<4ek2wv}DSK2V!crjS=%b!)-gJCbb%0v7o?X zT7+Dl!(hFKg&AEebm&z$0nj! zKlMreH~tRpT`aL^VX9y1lV2*Y*3K}ff6-E8O2Fx|&A*V}*>@htl$(1P&qAN7$h3>B z@Xe6V`8oC4b*9YmM|v*yPRhqsHnCjCPuvogPUvD#%LMi} zO=1p-Dk?xeh;MS9>2v`>aGEBXLeerL)jOrSq;x_MjjpRpn(1SRBH)ceNl#?<9!aLE z*(Pj=I4f9Q;MO#`#DD-7C3@cxyeH%T010vVepliL4^_%BS)K`*h8mShjCp+r5(AGR zFk~AW{a2D}+{Xv8#ja_PT400KcRW|dyj{n6qjRn_;%v`6$Fh@XHxZA-zPsB=vO@uJ zFxe!)w32ltb@G2v@u2aw*}rw&-ql_`Zq9sf55tm@efw9Zz5Y~m&~%0NKZRca@}G#` z6i+-LiaIRs)cue~#tHn80 zTy9ZEA40BULXA#JweYQbO5E%nDT!&!XDS3`@o{**s z4(jy?XuCw{xwzu`Z8XG*0zq6EGBqU>dOB?^UMHI(+riYE6!k}IC|5E(=BT0qvaz~d zXvvuMOX{%&R4ICygaYUhUPwXKRqT=7Aq&AGJ=0r+gunVAW44O>>YdZEL1s5rAfiUF zga@%tLax&)Awko+oy4nk6d;hVx`g&r3)=nFK@-ta9a1m)q5>i!6b{7@Z*)4S3GA%y zq#}hXN}jqTsX(D7$|rQ7S-hl$J=6(ADzc!2N(GdVp((0SOr~~FYNf81l%R{*P-oF& z+?799jU5s|^({md8S; zX>3nYllM^skd#DFMb(&C-7o%WMYAa+$`fndOY9O()=DkeL6dc4YbzPO!cFE>qM3~( z8}x;@59GdCRmHB4mD^83v`<2<^_7;b9FTpk=+31#Q*mR(+udbK9QLu_mBuZ%qSjvH z0PUe%?6tIkHQvDIQz7u}2msk;Z?-nhd>GbTsxfqliOTC?UVO(jw9nnn6oRHsev|H$}sSa+Gf_%^kgFpB_AkX}4IU#xn*58x~oVd2LcaV|QJF}a>ZaEzciVx2KkuPgb#;)?;b`i1kB^E#kt zxh4YPhJ1R-&JcCj>HO(SZ)#^gT_$duj~+~^HI+AB$+f?|ucyzAn2Hr})!#zBGRL*h z;A}x!$%_apnjZYZk!4%fpwE%fceHKZ2Azjsu*)*+UTuz{mSCD6h{U{8rqW}X#K0cr z%d)1U7U#8d{!W9y=QSKk?~h-RizCR176)~%L2HiSg}WJ-<1jA_#bN4GGC&S#7X}FS zOhywIf{Iw2JL$RYZAOO(C8S6ru?A5}FNevgVao>8qSbO~8chEHqV>EZ!1&zz4_i0H zVKIj-!!`b6s4`2O))z-Hvp@pwyaFs`c_xQXQ7iUW4?Dxke-3qXDw%Csm~19lO|>v| zYc`we;vRV)RJ^p1<50TS05)$RH^KWs)iQL-LP%gOPs4Di=3;;g3+m|^moROn)H%)wA=@h<#MBB^irC zCH`qHhjLVBH8)1>4w#4w!pRLreO#lc$fE_qZ@KTr+pU+Ee7f~Msu{F;Z470l!`+ec z(oz22ccn?c3cdXguu$Mk*D}H7t<6RshpA!nLth8|*^a4*dn?xz*y_~@aeE8AhB$n{ zhYK>`9?OroV~6v~IZj)P#bxi}Jk^z1ljqomHNzTNP_?*xNaf@;9@kSX#5v1U8w1_MZ)BccBQPu2WYo8m6W-FSag?bXw2Pj!19 zgnEvTCKrX`ee$L2@5-+iPAg`4E;XT@Wf{g{l<_WCLY-_rCHQAK_(svF*Rj_U(9%y? zokwNmF&H;cb6WHA)M$GMHZ3dkPl!1dKgBN%X>k@m3yNnMaFqs8&1qMq$zK_Po?3X4 z(|0ryK_stD6gzPf+H;=Y@u>!X(nPLz|WCB^t_ z+4J>2L#%Y!$1`f$Yq>Yix_;>D7|x_E%xIe*rpZc^>Jk{&IL5+YE_NR)%qvu-MxG9% zpIiY*HH4R52Pod*dXvbb%RF3IB`@t(X<)b)u(I6Re%dc#j_}hNkmQ&g!-#VVIc_&I z4ylB|R;5$SG+Osl^BzNaSPR(j0W#}K1PPV;7vWcj_;!~bWxQF%So}Q< z9$%Qy!?K-9oTSyL%C2M2{2ga7X6y+8Xx>i!Ybx81$3wo_M^fF-vZ4_^%ho{GK1$d{F5*F|M7J z#mPSEm(jNU{XLFf_jUkKb{yg9@;pO_D1sI^Jd-QHknAoFl`__bj#hyHY!-N2HFi*7 z#MS4h2h89iO64*l#eSWl(P{FyWXY$DT3cFHkARj*#^R*f{YrGQ>$4}ag$H7BHT=4C z?o7hZHqP?wmkjJyVTq?kn{_TQ7t6eF@lz?`t_yppR~2!X=6}uD(ahjA=7H_?UU%9~ ztE0z;cstX`meIdHFZ>#x4=db0%<=EG>NBABwZ6 zP$EG)UwG`kOXEj@{008O=6q^!6!KhSu&#HPiN#44COXcx9rRz0^Zq08VwV+H@e>31 z_6!5d&31jUV#_ltiMykWI?U1S zY2PhvUzYy>R({2$=@960gtWO_6nCB5@2?48YF|r8_*aX3cZuUH!k!J8URjpla?t8H zTrOWj%co7VdzpPl7?SFabBqhwe9E&3aOTi-JFh{Tmpc&cG?UsF>Rmq! zG}vQ{8l;by>NzK<%Pf=J;M99`00ZxJgT7$|ZK9+ZGor-2$3b=KqT?xQFoNekVAbD=_r2jKPX7s}-uf%yWyH*t=R9IgZ8b)@|2@-hZfAIFQ)Wva;@V z+UVnpinldpr_5UY7PA1y)ogU$V5}TmZZurz>oXaJ2qoItQ@A~PDKI37m7@&zehRk< zTaR#AekTy@JMqn_g`r)q<#jsFY%osT&W00U1Iac8d%ua_hy35e9M!q+lm7rQ$A(lO zT+w^j9mwvQ+tBo15X-TcjJq2{AB1sjTs=WmgjxtPzeD^{d_iD*X5p?5tjd)C0KPxF zT63mTVQX24V~Yp7n$YtS0C*aUeAc@bw-;B_=hJ^=lZ^eVbpHUJerMQp-CmPX(6i{Z zNn9J8Uk=?Qm#>>YH1f;2L|tr-Pz9~J2-{Ub(2@vWP}%W4sTevn)j_Q4vLu84OOb@Y zVzI=x4@J)966YH=qpOLq9m-pu#<>(Wkm@?m#36z04sR_Mj#2V3=6ooueY>JfRB>Lcdo z$rQ0yLuCx=wMQFb2C|!={S$Zr2}IvS^(m@G@D(KhJEs1KfeBPS(j&SAR0}B|d#f8l z9h3x)>0%X*s7F;u6xlDTw?I3ms)I%BI0wW0Pa0FqvEPVo93EFquc~w}d#90rn+fGN zHW0Wq8jM;@Pc~;!U%ua|+R^DVYx67^70LeF{)bh;oI!};ek#higA4xmFU8WtG*9N` za4>rqk9GC$imoK#Jok#If3w(%73$KbIET@QmtG7FM(g5u<~s?DuZLw5K+}0|DV|{m zLQUuBxW-M&=w<1+^*YR2`=DA2%W-0 z%V>mNvUGgoF}BJTk+_wN^;#n@x+!Fo0Y!SH_d-yQMJ%oKL+XHtZ@Q{_ARg$E)FJ`8 zYMZP51Ox$XW){6b9Li=FFDJ{6I={{N8FSyV@12LGM8kk+BEYVuZBoZB)yeO4-ibYC zFOQMbd>u|xhkg#Y#8+tLf*>rjY;7vUkxa|9otJDWwag+x?cH^_tQdGOC3RzwWXazy zPj5bkdR;HT!1g*5-4^=Tb4|nrqp@C`WTdt}D=s->l}HO%rGi9VJqpppI~Z4*HBh1h zDF@vILdGKLeTudWj7&;tJx~+NWQagIm3@?s>Y@ZoDkR*Y?W&-NG`WOJAqfLzMg5ZL z-9n8}jgz`Yija_&HYvKQ6i0ORM84=KfhI~KSP21HQtE;t8(llBl$)xXp+GfFv{O}k zAORCywL}A55;|Qky1JkxlSBt}?0{Y&B{$JnPz51W(?F;SDxXCFK#6%mi|&CU6V*U1 z2s$Ebq5wjnMQ;ca3Qt9EIwxff2v1o~@Q{T_MafsT$+`i#P;fU$(Jwk8S*k2-o1}db z3WeaZxtJVHMmW-+la<)*~+AJ}Iu; z&jxV3SyK;75kt#=l}4a*s(FFrNO&zEHuBfHc3(X_7m9TU;-5^Eju}&FM)vUK_n(*R>9aAfkY|}~ zW_~9v#bMtbV?4@EY=O9)SJ1pD%5d3d5RB71%V-8-Sn7BhmD?hYBjtE^CjS5|#M|Zt zdAzTRaT#6-l*JLtS@P;`#8zt~scT;b-A09ae5Z=?hE~AW%<$L>6lvEL-}o~)hqhbI zOgPNQX#Cc>z2Rf1fyjPBI6X*0_hsI(L z;Z7GWZ8uTCP@_q-=`pnJ%>ko$F*~kT67fDo#rR+Li-oG!%QIFz%&C}T4O577o610A z*zyE427oDu7MrgW+~YgO=h&Q9EHbmJbDE69k{HK3S2ciw1jgEIye^re$&VZxZY~Mh zdo6sl2U{!(Z) zg~E4>kE;C_lkuKSN5ThC$6+gfaaN^BRm<6iWhde>jHu_AHlvG+Y2TK>m^y-CeET8r zbY|I(8jXD6mD`AOsnTT{Zgc9?YZ~XZq6v;yHVFU{V^Bim@uwGMnU@1IhicJo7c;}- z+R(~$14TSFCOk2OOoz+h?0H1pcY2iYbxGpGir;LLZFpY1dp*|&ozgVA&WDRWr&82Z zqSRB~-={ls!{qW=_Zw$iPl%;U3~696cxMrY%W$j|@VIf+tk9EbbEU+IB$cO#@|?-0 zjx#gjOddNCiKZL{JV~nN{{X`4e57>QT(ITXQo)D8)5T(I27oI$%^b&3%HLaj!_j*@ zMqigP>{9Pek?QR^^WfJO+0DQ#r7yyx^o!5IVcxfdV;*Bl*FV~d4{GM)? zLp^>e%RKH+-O~CkoAg{G%Vhi?QjQk|ndVM&{{S3Is8FR-<_r#xGNb}SY+yu~n+PZL zml|+~3uKPP=NZGPRpD+O!QgNe@UOi}_@>dOT|$I%xwRbrXF0^f0VK59r@-Y#uMod3 z%JF$F3D~@0ZW)!T^0Cfi1Kn1wPzW^XwWN~g00US|#I9!;)ylIxriMkqxIu}^a1{%1 zzH`ks){s2f?&f?ny~TrDH<7=(zGGde&8^g9?`|~R)m1jQeje1HJiiouS5DDk>H1m2 z3bxYcn@fhg-QP9B^JY8+Gw`mjHUl`sdDZCDtbEEpBg3eYU>#o$fKRi4`1ANX8-?NO8L{Ae zbu3#eJDR>9&EyQ3Yl(L=WS(FE*}d1){0_`0W3%j&C9Pi@lHoBGz{EH_KAT>7i(XmD z5hcOXFxex&2T;S0OrEnrCYt{1eaY7Q?%Vb`x?XI#-}K!=DWf&5jzSOfD7KohmrD2R0g5(%|4^o|g;g_zwpBLg4-o%$bX?NO2{0ejfo} z7W!0b)AI;zZ!DJrUCJYw#K3c$IeBH@NTtJLg0l>DW5d+yVlcR-iol0fW*v=tjW+WT zIrnUn%NB_X==3wp9(jxNu?B`?g{s%$N1n=Ni)F6oYh{y6!MOQA26WTqHNR+ex~Zo+ zYiGx%_2+M2UC*Y{bR8~=KlWDC{{Ynd`Cc#F{B4}@4;SG$OD@cK?>EC{8D28AOdEm4 zj7B2?QKkiEnfXC31hgNRG|2p}UpM~h%`mu3%O%J25AM3tYAdMW-TxGJ-Vt+Vzh2U=x@ZKjn&M7jU zWtC=OuA`2i{&u{YjBz&-(>EZ2X}Q$;oiFVSGN%l`b+>6%E>|B${%Vg8UD8~>{xtSY zZ+FA>s)O@DBskIS=4*}G`Eo&vLKFmx{w1K1JuT@Hn)o}Z~jY27I_ zn(@2d{{U0V`&ZEPZ>QzgW!oiM-+!+SpeD98O+^;O+EXsyYQMjDD z4T`HyfqUo7q#i>_b7Ez%WJ2WVxUp%QjCp&XMXrlceY-1f)!XHtImR>0e=LaYb=BhN znE605bqm^O875bU$ne>_bBaeW#9}K7xoc@W96ct68gFx)IY@bPfB=#?2|9)4u^%uk zESp+Q!C!5r%%-j<%j&T>Z6l+8A6OPX>yJ`}K*IKe$_x^@=ABnNm5h>f07+bDw3uP$ z5N;g3SV^8N;JG-Un1eb%?3~2Rg_GJr{Ez{%_k0P~!1!@9Ym$Rb??M0m&k??Vz2g?BZoh56CD{Vj~!D}u4g6CWvNo-;m=ew1FmmMH# zyKW)L>hR@Sd0sCFY2z5i)U02q=V)*MX&j_qdGuY^g*X;tc>5>w+SgO1ilQ)Xga>^LJTT$vfL(Z@`tYFJHe+y3umElBEqf9_2{7(M>6OU57 zRl$|myY~2hHRfDKq^_P^5teA?ljFyY{GP6pQz+@OX`qsFr+#U8`5k#ZO2q!FGB)Y5 zhfP;)9$QvnuE;I!vbnHWncZmOaR=qc1(w$(eVx6w-!u=XdihoZ{K5`v6V*;3UyrILoJ3c*W#6(KcWqI?s` zSy#bcC(HmQt}7fVa_KE)FhQSJyXe0=L0_yqB+H+N@M4Y;uL1b_HL*R&Wgww3uMsj{3FVAn>{Kv!<>sHLF97XEW{hQueL!A~J z!0#6JU2^B=&wKM+SD0K&YB|3(%mZLf{;Po?-F+qnSmM2pmDaZP6Zx`AdX&^8&6g?F zA9aZx7GHT#%*xUuMA=JqRywBYkR*3WO@gEvY>Fo61R}dBC_<>JmeC3lU@HlTUb7*0!Wgyn`0${{Os|wN!9Bdu(yU?hf^m0l+ce(!nJRLq~Ps?B@ zQ>yArNnO@_fRZ} z^g;_>3VJFDDh*;#AaqZ3SJ4V%^^{Rkp#nmRf!zu=)e0xo0Nc?DX=Fe>(?srsP0$4X zD6f4G5ff1e5Ecib9aNQjpc;2iWYrK4R1kqrbpe*@dLk7HU3EaGq97`emq>}S6uKgM zD4|R2s27l+@3MNKS0HM02)LA2sCh|i#kxYzd}Q1s$~nFa;TUGfzUzOX&BoNG zEBQ33!&&l@(aK4aD%7M5RC$uti4!{u72b{o&TDYa6OD4$(Z}H5QPlB%Q^9r)uyKY~ z2JPl(4r{+Dk^z>GI^1p_7grePFakjU3Sw?{uw6)J$3MFXU0Q!Mdb85zQF$^&{pxFN zntU{MguYKXB3wNeZH_oPbSYNA{H~;JI=FQ`*L{%qZ^ilDMq%H>d6O`;fi1+l4Cb+p zAi*wl4p|rNE0ddeS;d$&iNg{p)?tD}MZ}LwFRbJIF~xA!KM8{3CbRp;1%nKuhQe2C-AIy4K_bGS zCC70vy6^55VY5)oyM!s?F?gE4u%(E_hdJfVk@7Xb#pK$1#IGM0R>3Cc3YN{MwSI4k z-ThCY)N~z6#-ow;?yYX$i8JhOal;wrR?HD|e9l)^sOD90B)60_yO^G11}+S2zJ=l5 zV^b%{@fa*-Q(C4W^o1IXrBWG7nWfHeD?n%wNZ1dUyvaI`MZ)=q4^hL@p@^xO)1&_7 zzFQ4C!mBw;T>9++%mlfj7#bkB$-Mjwwb`^9?7E#V-M{|;vh{!EeEkp6GH9^tv>0@H zzr51y4jgQ;CTcUjfyTvkbQ%~#;|_BpzLO48}mSeFZzf9`angL105O)QP|akMIVt!^h3 zM+Zf&q~i`Wxf#vNBte0xB12|-yuZTSi-o9jVfafEiJ@N$_*!_pO#|gsF>Y#npn~Gi zNDUm&00U9;-w3`X^X?tvEM6;*o0!w#tik?O032%7qW=Jx6AvSp5zGw7Z6SS1; z#JMGW`-FcDnB}omp?R4(;ZTPk2 ze9h^#7&Q{^#*=H;pTe)+{QDjwD9=1ccM~&)^J3Z=PBx89wzgkD(flh}TA8Oxvs=nP z-PChQ6Jpl#>jUTf0l<81h|lo!SwWSC8y4Ef9&k+ZDV97-3xi~iR++qBJFl)*;vD9l zdq*yBhxmH5DAgvVYFG;4jBhv`)SXZEVc;?DBbB6r&@atDK;lfIqcBzSe1{8$ZZ985 zKgq;n9YyWtxpgTZmq__!N35(pe6-Q+j1ulk)5n|o{Z3zjkK$aLwEccxBQ7c7muESq zRhb;on0!T6wv}2{s-S#1TuH ztw*rP4Qzaauz||aXk6SjQ<=7>_q{BhrAq9;)21lCr#)(4Dn20bK_cc-i3=S&MZXXAxJ#<8Z@}92k8{LGi3Q8V{w7*Q)S; z#QqQQI~j+`XyyRo>lU`93gm}~01qs>BwogPE^h?*VT;c( z^oA;zlS}~WkL8IH;T)%Xdu|sl80X8VSW~w4NpHX6@7j+7eRoQ<-`01f2E48B&7;Zi zmxg(sIijs9FQrM%<_~jYmM`7`A{F7bP^Tuu`P`jJAlH#(sE574i~{x9a3Ov5t9)_n(6s`f<^G;4!_C(txF zd&>PaB>LNere*okYZb2qo6!6fJxF!81^N81JyFT-9si>J9hs7 zQ}=(enk;&5nGBHr=`H^NU+2jD(Zv{`84hPHNit_^U3}X)r&+YYsm(5eIf1)+gBmZo zabE@V`HpBH4FoTh@fJgh!ZNXT9km0Q$im?7*`0`jFCAoGO&6)4%?PzeV^;}E&zWNb zK4Kju$LhL#Mcpj|HeTzEI6?e3hs!YoH^E}vnBg0W77-hT^}0;($ptt&N6l)nN)qj7GlBTe8R7PCS3b+~th*PE@*hVHQyW9g7+1SW z^xHhXYi?Rx92!i-fJaM`aQ1h{JWGbicz*!=W@VXGzyK0V1(qR= z8i_mlE;SJPPBkgGwcVF?Fi~>Lk7>16&m4Uh(CA7|N;szODcu)}ICl}l8P+c$#bYpd zy0|)qo9f`}wzU^HYsmJ?UMFx!F=AIrTf3Sdh0nxG>X+0cmuok=;na1A0Q8mJ!sMcq zoxdkTI$h1jWNDJpeqVm77m+44*<|osY)4<1tpvf>Z&lbz&YNu*J=17f2(_%XSi0gM zLdEBmvfrZTTWocuzb1!+t;s8XFDu1ia9CW*tFY#dFgVi;#8Z36DTB_&lIC{i0!74y zqM;*BiwQ9VpJmCu)NuXX)R)NjeidcztB$XW=5sl4xT>rpLMTvuWA|egtn&w#W*J^_ znzi*Q)%;5;&}2(o!yL`*e`wM@3iO^9299>#ZqUfxlkWqm$8 zizHN+lkyF2mU=w$!;w>qF*<;P>H*bc7a`MIkk~HE2KsNn8V2<|(I50k{$X{eRoG-e zKQO0A=;v$cb;X6&|Y>8XpS;E(IqXj_ObE{Ke64rs}xFkcNNXxj+d@l^CnBStS zC==|lBcNJ1H$>e%&IMP%p{i``U42U$^N9hARK6(9;v zReM4yu{Qwk(K_{0Z9A_;;r?5~`L7k=a{e&PF*rQ7y;jqyR)bq&Ob%x_fX4N8$P;3* zn<~MMStOfDUfZ*uOM+Ug(Zd##lSS?$E|&<#nkjUH17OG8bm2EVZe-AE3mtt zl+*p;(5_xD1DHP*ivtf-nspp1o>Dn)zeK`t?sbi&=HYVs@1{v_FlmV$*XYokalu@Y zO20$$ZAKaDGtI1Rw&m;Ub$0aZo9U|LV{jO(w-9jH$}Xiuq!mnElj@pkQ+ow83q%%6dMoUr0@+I@skVp* zWKE+~iy#8_m3vBw9grNH1zN1cF_fw~yv_i|_g#0v z7zJ0cW&q(9TBAN;QBb1->3EWmq5_>XMC}S) z0ec|{F}hCZ1SfKdDilSNb!ST^rpQugt%!m7lVra_pd@rE_XRry+TjX>!a*srA$b=~ z5={0>pf6!7Ds1O>EQ#B?#!lL#?<*|YYWFrAJ$BvHUI4Y)R#d1|sA4%sQ(&WUHQ8p? zdqLPZg(3YpOlQ00K!_-nTiTp=zw<)ylB|Hl;Vvb07I)yC>2nLW3&BG!s$O zSOt$Yc7Bs3azEMpYiWwLs!^Z`KkurB8+JEZso?N!E;x*Jm?Zg3=Jt|6TnjC&q@U34 zy){3*2Cvnn`lEJROASvI4$K@0Ylk%|T;KvOPc&#HV^O$#Wqw>e98Fgf4RIn}>Hz*L zDtNp$4w0*b!Unzn04rTs^OD`|0DX$ybDZR1TZO~t7?x8qT}G43DaE#I3HI4>zW(mz z`Tqd2I}up^8iRiOEB#vhk=gK_UNy=y3ZLw~495*w>@2KlbG5FgxPE}Qv9k3a@}0-| ze=Zj;;`;bJE*Xq#Y2e=05dcYZ+Aiq^NdU5Z1St2F>OSUNt2Bt>x-*Vat)rJR>HS`(Nh&0Eqf61oaqj zMml-QDo<;behGgb$161AP9)CRM;QEGD-bHy0sPt#hYA15+!&W_WzQo+`cr3tF@Am}Yrmtza0}xLw77 zNrGHpfiVl%U~!m^5yOrk$gt+MLr7rp4s5;bHE43QzQD8)Pb@};Nj4r%x)8~QLmXAK z`*vPyoBR)<>De;k&hloPrB}Q0Y0_Vhld0j124|XQxZFlBIK$S(VJVzfHCnGNCAC^a zk*Gb6>+6{fZXd0a*32En)bKT1h$gqtk?OiWTy=(!)5^#m)}5p7y_(HG!AJs0aSb4jNsf!#)!2okPr1IK8Bj#T@tLYKb(3!SQP{`V?xH)xqO1EN_}yb52@a%;y+viMb2wJXe}# zc%B2xahV=rlIIzQ9<@q!n@b#U?=6AJP{VsW*cyX9vDDdTf5G#Hk1YR(eAC@>4y~GnW8adw4 zcn<#n6}m38^m+9;V)7>3Ux@cF#v8w@Pw+WmuED0qF3L(v%k6jammh)kZXV&h_c6m^ zPGgqwRuI?oDq;pRDrRMerc4V|3oyQjC!`O0)w~cZq z8Z{gEtSg?}ITZ20WkBy1ILM zf2;LR>d%8<>ej>=s^a47ncaO4!`$OB$TPe)WtU>=Ve3+;3u-XjU-_?{<+9gHL>{Z$ z@Z}I+PSecbdU{Ix-lUgfPlM;Q5^71_=k;I1T*16SkZ|5{hp76;8&Axs%gxHe9IphO zFUsprC zMq#Sqp7snw+$vM~WSB5pr$a09?seuqqroOl(YpO_<9`OX8-yH9TNL)v!UnPQn%O+1 z##}qyerL+^x_QqNQOavkbLc(A^@~gp&-o!3g_jO@Yq(;H1RCta3Wv_10%hF z^gmCr_@Bi*J(52YlVw?JD7*(UyPDwmc9wf&I0lYTK{81?Lj3c@97^hsdvN9lDdlN8 zE-f6To~PTlgXlFej4`JdyYc@32g>uTgto8k29M@`@pb3;%L~JpY{sDBx|oxJ4QD6f zgM7|@LC+vsIk}^>FMEmnW;+P_^{BWB{QS21uOEov>}FwG$iq?ReP5NJZ`}6PeP)YM zQconf{12JbVscd&-To(u{4IP{R#K-;&V5r1XatuT&~;k#9J>>j;;Ue>*m}5pP95&0 zR+UDUxsPdr(lrDT5W8kk&GH<0$7R)PQm==al(959n&yG~?RAK}-E`I5`i~zmmm8OF zJ!O3+Ik`JeW5de`#eLvR;J=Ppz70N zy6TOICO?|*$RgI$Kk(rcQ`MHdNWR)+xYR{|U)0|Zzv82J`$*EX9pH8|s&8?_~9 z>uRviO_Er0Z6(R9!PX2YOt^v}QE+T0x|-PD>#~lU*!yR~uOIMt1@Vq=faAkTo=wDA zE-x#sTB8ev8jf!@CqNecqZlV?ItgBfAn^X55@WMdlxDbkkHFz-*TPo9Vw+TXz_-hS z34lxs=n0sG`OM2ni!Z%=A>n@&#rf45<=$OZ-G-@(WegGKr$vIFH~5X@{YhPWL^uGe z$u2Ik#JUWH=t4b_Q9OM4J}yT#s8s`+Rt@~axmh@vl2mP+2@<&%2Ubt-S~-;}(=3Ah zmkf)S17(pXmy}p)u$_ofG3_;J>6$2c*u(T3{8CnFcJRNU~X;)M9mmqJ?DwWe1|SM5`dVQVPx?LOWm86AmUa z0o^Bbj)7Pkiz>{b1k&LMzKIf+D|4MoJkBWK&H|Qah;AH^e4$YC*pe;kNnX#v4BI!M z;$A_3!RA<+R57`Q8hDy?>lU`PGT|+7m>`Ao{{U!Sq9D4c%@08M?25vKTGu2fTY38(jOAcIWsW$y8 zw>=Mxd1FW5b82mg=AiQ$#licP^B61X-X`Wv#_+B}=D3$s<}aPgS_H3|FSh88YeyK* z!)x$t{NwFX#`=_{kIIYuQZX~`qC^z>uVDG2*rw`9M4(=Y14ShQ0{W_Q{5k=-Q>XEWuG)-4%@xpJaN8K-`s0XP*>Y69A0o?|-Nl2ZL0~)E` zY_Fh1AlhXoqFqaA2vY01dZ?Y@0b*4ag*{LhDuXT5KB+0}hDwD**Im$~)n9cY+9$Qp zA*P6y+$19iLO{|}UsMo{RH0c;eRQ`K8&fF!~p2mrB8 z(wbcm4^o}(uVnivVuxh(Q(r}Xih%&+KpVd*4yvF~ax9&bx@oCVgaqt{+NQ!)LXuH^^guRQG)+C0 z>@y4M0WRJ-MakM0tFHGb!C@;J6){DknPF>T(0s`xPpn6{Tv@U#akh6fI%lcMpp6(4 z=7WZ-CYWoaIkU>`qjjejfvbn8>^`76d4U8wq%FCfd{z?`QwND_TUwioD+q(k(sd(K z-7vN43S6O)&Sj=d0y`UOxKon*>xcZa(VE9U`x3tB`TdMe0q(6!&Mjpq021+_UV{-! zD8gXQE(LlnY*VAmTJB+Qo9Mbq_?nopNIkze{hJ^_H@ULFw!SW_aM)g0l6p)F_gqti zvQv|)J6JN~(|1Q4dz-4hZ{_=Zj%Hnr#A6LC1vUmWROcMCB>w<~px9|Y)Gu$4WLa%2 z#}a7fxNIPP4;723OFY8LZKCH2Z8}VjQtf1j(RiF4Y%US3!TjOD!lg=_yrgw&PNKtK zvgF`%3bnF)eF{8{tjc_?{{RuB=Qo%G*2CDjboF>=l{E+2p5Kq1&r_!AvEXr*Z@neD z_NB(hs_^R-k<`sU9iCuaiNRpvo83@}s34OzF%1rZeWqb@c%L1G;I1ae=NTq(Pc_0< zV`$*21M*^+S__RvG{-A+EjBKVfnGZytyS21cqTGW;t6wx;lZts;qJH?`nBrR6zM(1 ztOKMAY5jFwcc57{QkSl zeTTy@n)@0EY*3FQ2kHcdtNv2uRh@}62NENLrV{qRjgU%;W0H?Pa9dT z=8A%k`_4hj`J4c|Vpq|;8p|-5_Zm}vWB6M5ytcdXSj;Q3(}sNq(qZz0Krme6@{txX zG8XLFE@T0#C*245%|niN;n=U%dn^ChY%ZHlm^xl680W@{`QLG>p6d`h6uy% z!+BD-zl65%o8sEtBd>>|<9cc4l(&}3-pTs5ug||cv*Y{?#ksyrDV(mYL*&$R>r$s< zQk$Sm?FVpV2Wr1UaDNxjr^I=7bHv%3aoIguUS&*0Mmhfg-Ie)GQRa$lH4EHBKzn&h zfxEs}0p++;!0b;2@eNP!>Ucb68O&qwxXd|o=~bmr!)jA`9HbF9H)+&Jh0o6XF3<9u z;-mO$GV-c5fCmHk=1p5J6)Z^Eh}H$>wf+k_4+-JZ=`5C zj*CpPOkbB!M0-V!TcF1r(w3EMmA@V5l$@mOs88G{J0CaWd{vp=`*pFkyLEG}@fAQ_;n?o$bPYtJB>c zXHr=(xXKMzrS0h2;@11G!^!xU#4issUkrG^8N%7KK72djj?g`(;lrRK^<9Sv3U9{Y zskrM=qE6Qfs^k9v5i?&AxThDyImRgBad?N9zO#+oeY-&_387aPU#pTqvs`$zEih02@Z#!Z95)TdkU_&RPbWDwegvO$7xB#700ev5Es$%W*ET zqh0Vc)HvEbVS4`nWA!+2%2*{zTl-%2y!hPs549g>^~+O}SBegJC8P%LWH6jQgYZ5ore(k9~TccPozYln!mg8}G z_BRED!k1U0h98R17rLIzDtA{{YE+YY;HB@j{+0fwaTEXdeFnPxD`)a}E%%Pl+(uM-kw0 zG)Z*6o7j2HrJ^+e*iOL8)1Q1Vc!h|{pP$j;+QSVFdw*t3Ha@Th>*O$JgcV=CpP=fJ zbvel^;@Vg8zE6Q>{6UiA>e9&S(W8LCQw7t8rd~sU`9~=rxWEESwIrF*dA!qzFrSMJ z$Z#Kk!!@2$N15hSdu|+F^AcPM2b45+U6&JZ%krGUz8e$!GepDm4w0~4Uo*<{I#@A^ z{43hWMaa}0C#Smg^!V`YzvJq8`i!~TZns~e@$72iPA10J$lH}x%`m2~o6}f_vO?70H9l#sEYM zl1TtZpk6C8!2%sopj_Mq^u01z@mwS8zs&GDo6DQFbKBtq8icMeb_{{U89 z=$>PH(S=H{ecnmwI;|R+H<4w``~`Ow$Ss+H%DEYKN0?@Hyu33xh#H#@s=pQxjkmEr z25hpVn{4XKG>gcUsOuzKQWwy0ej2*7So+zEL64cNY{%VmYWQuG;b{|7@h>;K$P#^* zP4$f|U0wYS{C>{svMcRN=FgeT&7ppT_(N_Yo@K>Y>NFjQ{4P`GHkh-X;Z=?e2dRkn zUp#jOWda>f35s|hn6<_weuel<$gr6{3yHIu7)q4kv~c{-CDT04AP@SjE5rLs)UeN` z<&0M~`lIXq!*pFnldfXTI{UZB$@_bsmiX6*D)AO$nd9-`GZ~7;)Ww#yu)thQv~<_( zyn!KoSI7Pj!0^`@VzD?5Of?+Bv+)!#e89eqB7Rap{GgeDZval9pOm;2^xY>eEc!@f z!~Lyo?0lcw3_6`BR?CA|yyD*esqUNiX_k8={S*`GQ_*@y%vtoW11jU+$NV}n%3=7N zE^UUyf`2Pm+KqFZ?SonxNjd>5^l!xmQIPQ_SnOjextP`xXw_%}o7#VO=DVY)w95G} z!Icc35#p^{Sp0CIjDA~Qo?lJGG*+tUX>6Ut3&JAZ^8Qa+1h_+Cn>JwD@}VZ=jeV@#$jKDuKF*TVd1nafISi&14NESS(HMw>hD_+kMss zNr9p!NkqZ~#OkjtqDsl4TQm06Nx#ainQ3y#eLF9y{5EB;$9SWH#EN{(z~S*2iic*8 zEVO;z2fF!lM9hsevh}_gx%4ylW5z0_24QHLl^;#Tq%^s$CP!xz?7Z%;2bV#Y99=gS zza5WXpvpMrm8W?!dQ7o%`;e{Qd?w z%*z{&YboNfFMBBy$ijYBPOvsyX&%ZYwqIcwsH#Wjlgm7hx^CaNKE8;vKb9isTL78a zJE)zFn(d-W$hI_CkhOMU>Jb3-L;~6r^i&U2Fq97L!Jdm6IHQEcHnSW{U-Gyta}sG{ z4NysCPnZ$0U8q6ERCF`zmTXVCaQFEdGeSeDQ4S@vnF8MBa1FOy$9~z|#nNGMs#7d^ z1$VJN)!NUT);E(Q%D6S6wohfubctk*r6Y7AVF)am?vbP`wZasLQ6QiIfD>d-ssXg7 z>7rjy5CQ6uJE9>6x^_eZbOZ!~vKLSU9*7ZVp+S4eNeS+#8g7U>#48p+Lvv!AC%V7E z0Y1s@lVp~fMR*9ZxI2Oj;e#?vWL3M`} zB~0eUl31T~O}LyzOig#!s!4rE7ZOa8S8;-M3K$GYsX>*SGBZrI#_Z7+UKQBYTl2+%A}hGC^z*Zn)r~nj3J=)@PeR znRi!m{nzTee2#N5)f(5D%xzY>Kx?G(&qJtQkB9J?E;kI(LlIhzI5+{#2GMc|i%#Et zmyvlbrpD_s?{of(eis*82=-UQ)Gd2Vi0k~8GvIk4P;|~+7PVo@rImLt&**!)xhwG1 zYvVG^C09e-9Zimc!bl*SX(BHCs7Y~F=2j!sO2sb8tu@P+2A;ut$YY|W>TYC zIVmyJgT+8W<{Voeg_p<_-bOSTu7+e^YT>roDY~|mB!$JM_q%+gRoQytxA>}gUw-1y;yX(2M?AB zJ3cT~<=ks=Y4m98nB;g(*t&GU=ILcW@Xx2Xu zUCtb>!?*`K%&f_1<+EMLNpTP)I8U0#c!QkbbJ|&-4PsB>>p8sduExHlTG!{NQLdkn z&T*D#=EU<5SJBy4!hpNGfI7*bwEM*`ZOgj(rbAbRCHN*{U3h^}hyfLWj9%<|moh60Q6T!gi?Ksa~FEOB`x$smYebA-VyuwSBZ?W6tVFgbQ|UyRG@7E-5% zVPz_=Bl5ZC@$%eK9MB`4OfQ(~n!K7$p(=KjQ+}1}@^yUIljwS0o;kEjy;FRut?$#v z7I|L{I0uVy+#Q?b*|rxGfx>ed*e2#&rSx9*mec`(yy2yeYk)Fmkcf--Sbi7C=w>;F zVVvtLLYl zd1U7;yS*#h%RRgp=Z+~x-=$aXZKL6yQ-e8Gejdl=uflNqzZ5A7ZfogOW1n0S<0d)W z*$;Glp!8e3Cg7Zphp?aC)Hq(B;|>bMWY5iVY>yK9ZgCvAn$2r@ zfHy2-2SdL7)_yKn#l^Po<@+g8``vicr_15gqPB4K)LqYy+pnZt3l z*O0-~~J8)hjsly$+H?+zEgwE zC^!~ksIsd_?j?SQ_Cu-9Rj2-+E4Lm#U&=o&`+w5mrPaq-g;L4S{{YE(`mfQP)KOLT zC+FlO07+k#^G^}a3h|a}Qw77>W+uC<)O{+rnq;|zSP(%G{A91xgaROm3*+7+cp7-a zJAP%CzYm0_=6ucN{O;>z@ZW8EcBfkmGt#*eQ1A+729T=_BeAMBiK z&20E}zURpDOg?=}IH%&qcf*X$-Cm=rHI+kwoqWz#jRoUw+Amkf9y8|rU&1)N7E6>= z!_zG^@h)qCrW+RpVK%7DBdY0jkf8F^TdjHtS)Vg7@ALQdhc`-xCc;1vS)plgW?Qc zGZ~Xo!(wwRL8*s#mH2T>m5gLWmrlK+{cOI0;zo6j&N!ByeL|&NJE)fVXA#Lzb2RMU zP~KS@5J23WSI@JI+cW$VvTC@_d^_tLTi9Z1Rw6mv;y!0Y!6fQqQ$Egzx^aY>SN!%p z&3|lXI^q8SJ&zHNrB>e zF~;Tf>NJ*Bq8{cKh>}M;9NTUR^D@YAd#}`8dirdTn(oH!dmdJ!6yx`DDrX7Q8eCc( z&8^8?M)J0>Y37NYMA>#V11VOj>?4ODBni2Kv^s~D-e;A6Ky_Y5&q6H=?Y|8? zPRz$A;#|8a%Zbb>Gx2Sp!Z}?=oC4`5^G!iI0wcQoa%xqeOW9I+wQk+l>|gBqrGTkl zi!l{x1Bs_Y4NZ@DxTNP)4g=JNPyGqr<-iOS6w80hBXO%zhZPxa$+~Sel z3fO7)o{E}La=pIfd}Bv(!1&yLTg91HJ1xh*1&N`Gr&5+7tPeDt42N=?7>x@3CF5Qf zjc~pl<(yf?yh(x2Dd*1R!4X0}KnZii0p++D5DmeCBFn{mAn<1d@n?wjXz{f=l_=n_ zH8C_>=5kUbLk~HLfFI2uh~*`HN5;Mz94*4x&j@ho8Lm#y+;F9cuGdw|s&fyXn71^w z&`V}PxUehWdhWX%y3QO4ZyLKxbp0jDug{K8(*Dh8@~?Dbvffr-eu`PI zxt~R~%y5S^fWvDoPGIK&j^-y`fU2F5uHA#aYmjUd4cZT?$$`SBmf`ao85avOOJ3-2 z%G-2HB9D_tBp90okZ3c?4T8<=2lA3y44%rqoO2ePAv>&g(SrkNwqL*5T5SfPE-=}Z zomY9T0j<~%b)d_Pk_>Cv7UN`Q{!&S3I_|Y~iS$+PCBu{rHCW5HTS&yWdl^^)3AoTB zTVnB`-C`OAhTT?f=HzQ42DUnsC(Os3y1;I}h2cF0^XAp6FgOe_rg?;qn9u(Jg?#mc zl*kZ$SJHeq#No2ss~hJM=i-Y=AV`1=3t#t&^E$(S(n>M&U#dO7v(deDWiJ;003)X3 ztUC@9309Ci)C;K88pQm~KJtEx#+Q=LQgqRKzAw!%%{6G#Yic&NFw=ctT0z`dcq0=l zo2EHD2}vA1c|tm;C_Z^6`dMFfBI?DZdPjt0IxK)1ESd)=J)r>R5IShMn>z_oF=!7W z0iMb{e9_-kx|JsLf=Gp}@K4JYME5I#QQX!=`z%({*ld`*tQ}(-_ghjpB?=)QMJ#nz z(2G}Q8lroog+p66QB){M?o;lXZK`O5Ky^SQ-%_Wd&YkKsbs-+eu~yPOz8ZjbTTYc2 z6(}{Ov(znE%7V2yY2>zq+%9EmUQacAJx4LoaW-8xF0o@?%9atXr1}-}*q3~*AAhKq z!N#KfEAZgx@l`));0%e_?z=1(COZcDPZJ$>T{G-SE4AVG5$1C53)IaX+;+SlGos7i zsO*;x&c73fsfB#smt~>vFZ|by*L|5#1D2#qU1GX?P8`v9R-F%3$%iVMSINPx(#r#C zJRD=%Q2MHUR136ugWV_BqJD{OkcBF3bO?nk*+kJ07U~}9zNxgJ0SG%HAql#vszL%2 zWb`VPE`Xs+M53VqHIvlppK~! zrO>8U(K{$Rs#K#uLZVOs(Gb!soz`?Jnl`tJqKpo@-NxH&bu7xTut&4sk#jxg3 zVQ2@ZGq=A&v;0O7vM{-ACK-VGj&t4WcKa?iP}*3GbsRn*e#!2K#=&x_;k>%FXmXc1 zgtwQ{?)wGSokjM^w$D!rbBf81DJQoZ-Fw?KHm99bxz4aW(se7_aGp(-=h(`5em@_M zVX9kM)hV-`tfm_zJbvtf`K|`*!@Z7nJIkQkypB-a=Rg;x%lL;e$TKSM$?Ewe(>P~C zVp(bVhKJ>{>T6+=c>8d=m2K_%o{vk(iymI>Lb#_--}6V?c(WtP@|-n11wK;BbPZNh z4>cOl0Us#_KyhjLnm|2D`D1viADQ8>*+yfS*P(^Ld5yzSCTTFZ^Et!;GDs5Q9AThr zBf6u;Ikp0ua5!vb3`PTytr$#AQ%KPV<#DF#7R%aZ3>moDT*o8ftR^Cs3m2P;zCm?I zHK0@u=WBjbS)-Vc2##jhf+R1N(c=D*c4{t7?w>E;YT55!x%XQANA>Mw)1?HqYlQEQ zJFTy6{f~gTmu-;K`wnjLurZSlIwb}NbWCYUys9MGVEhA z>Nr|Kjj4ufn^3>y1C`SvB*YRvUW<)^b}gAf;g;~z@HOx?spBx%>?wCWMsg8So1ZY? zd1q1iU1Orgo*St5z@fKOY zd^<}w{^&Go zw(8%fHMj0}Sd6ss4i75AaRvzE@f9AyR~tg-?w4&oZvvz4p%xH4Y`5o9wwVJ4D%C-$K{wtGZB`x*jM7})UQgdO2$iQ zvF(4B_#wc(?TO|2Vkhl6CKn$|4Ta^ch!~&;&i9eap_e(Ja}Mw}kThOCSkD?=ul#O$ zZ!3%%hQ_`e;0*evU5vnS25nn4YehQjtyzZUl^apfc>&zf6Z@bp%M-$UN0acDbB)7S zW-kYWrC%7Qwv)T-!6wc-r~mxM1TO)X|;;;W0Nwn%Jg>Vohbn`(` z-qX$aJ#JZuaQU2c?7g;0ig)r*squB5LC~k(M{Su z!@@YqzHK4S8zw|A>OaHYGcd+@S(HC9B)N>`VL#y-FXgWU(Wv^=hb;WU-PiSZ!HOS- z@Y5ru5g1^*{{Umx{{UsR@A@7m+xaEaV4B~#evJ02qT^$8EDl`HGaZVjMZI3=U!_V> zg1I_JMGgEP}=KW8x@Ae(QYRRUY%-B64$Z7f)vHq7;&yibq*^UIpSiX_r5E+Bu=A_RK$jn~Ndjw`p@{@BaX2dKRCjVveI6o9>F)wBzCJ_5T24 z^WPR=vlrs3*QJE0$5$o6^&84ZU53SZtae3568d%VxSD5`uBI9v^GLXWbk%)Ji8Div z$2NoUb!xSshKJN7G?8eZL3Q(-_b_X+v4s2$F^a8fG9R<^H8e}VIQjV_lw+fVNv8$V_-*lHMjOYu%LsWzKwIqrC9 z1HO`U8ZLsSS{q4~phM1wP`%b?mSp&LRmEgk^;+IVYL2GD(@vqJ(s^7&KqNtc$E$ z0FJl*wOXmusQN~!qB$E4Jl$8Pqk*DuwA$({H5v1e`;tF&7_k=?TXNj1&ZHSr4N=F; z7j^cYi?a2KF?M-xODE!wJNPR2$|94R$$4u9SCTnD$!^SW6*Br%aCqv}>N}J^ zn^_Nrn~ggCSFvtYTAfB=F|>_L1X`O~3&3pX;3rvKRwpi{OEER6;M#D_A=KIlJmTB# zZzdN6HL7y29RC0r%h~YNd3$|5*Pm_9j;3D9g_T@GdD>4UHb4M&C1H)qDblRUj;dTa z0R^T*hQNK7qB&W_*Tn|m9_Gv z&m-NfEAyT+B+O1=+Qyq+>J4>FM30t8k-QUo1H2B)^^d}hOddhu7aZfTky{mp!_%)& zK?IRXql-xgu?8a2EWB^E8qV&P;T`*&SLTmr?9?l%Mg;&+AcceuFT@@{&r?~F5?ZhyoW?9U$aQnh;TsP`BW zNhF&tkchF-eV0hl$3vvYg>shv06#yT=gM{Mbh?JOCP&5X^6~i^hNa%iV{d)oU>XI* z#_MAM)UQpm#7fW9UjmqHn*+sMN5uK_;|qeyjuVg$VqaOp{G$B4tbCmTBdA_?$4q@Z zpNjDOUBJ1HA^9G2PN~DW)5v_fuBP@u)u)xO4LS$5!WPd5a~AN|fn0Z+<8sPRp_x9O zT}Hcr4;Ys<&R}WQ8rHnH3DvV@=JI;9_{V^%@Rlm8X=3nLr{gm6;SF<~0DB3WNDcP^ zd<^lo)w64|Zv^88xmDY{`Zm5w&(pM0u91sJi)pmxyl$S~ioeMDo^6e8CbO|3lUV0T zb6O#z)1X*kvj)E@Zd~?~S%`H;I&9ED1bvmwFgVP1s9)%x7-PxWwawaKC}W z$z;o&v0Yo*Lu8AdiC+~U_p5_bo`lQy;}Nv0|WYEFS-`Y}oMK?H(1yGYS;u=q+Z zqctixIFNp;P@r9ij#n1U6R9vXT2ofegN&(cb>AsJGk`q`-%g2pTH2BejDy*27$*sN zq~QiGH(MTQxQ5eXofZd6E=f&2k;51`zr1LuUK(gL4px#u-WD`ywyq_HL>CRc7c4WC zt}+QMfg;1*X<&-9n$BSmTy~z`(6Xhoqf&};PDRGi@^N(w4>P>SMdZLbt}~wQXBSvO zKBaQ1^Hi-;zc(p+i2zywD@9x@7~naaM)z8S*(O}e?>7!C!i^4gON=!5p(qQt%hsxkL3yY0snGdA$U8F{W5lPBM94aP|A5FevOaW>2T8r4?L~3Pj z9wpc1C|U6_EPsEjjJ$eA)}OBZoO9v znz;NU@;Wr#NseKyQoZ?wPu&7GAOY@Ik^uf<>5hx&d<%ws3@u#E)a_ReX;Q!MHeGSt zfIh3E)TXiEZ_kgJ>vTvwnv|CnzsU03M+~CIJ;c>*SJEf`h!gieW#`95*k?Gu#o~il zeo8D9+a13#_cB)nrU)kMy{3zXB%ddjugM(Rme&T{b_%WrxuI4G0&KKfb=_xArI=Es zjc+q+fEiJzcEBw^MbhiC))~3MIdXAo@W&2Tq5ZxMq=QUHsg!8cPol<~L#LRL0?RfY zQ!^%dD)uB@q)||^qhiXq^D{v@EnpHPXtO2FXlNgpsYcW0%s)5Fq^w>quVt_TL5Wl~ zt+f2}s;SY&~s6{4|-1T1hh+O2#{^qo++#l0hEo z*^b`^HkBsVRNLJLRjV;pML{5fEJ07;r&}v_I6Yqv(8N0e{AFi4r#ZJVkRf$h&1tGw z(`D(hGS+bQK5-DzLH8@h<}YjUPvz2Am8Smyxt?vV8TH*!EjLfa70XNWIK|sSEPixCVQPvG;?Y3&K_3(05eKQ*%g4h$Ik^7^-Cd06|#`7 zn<@xp2VSU~palX&?3pdxOr$#_DN-4e;B>0|&Dw8DC(hzDgiSy@1Y3PD#? zgaq9Vs+5ESZ4jXwr?M2bg*Q(`KoJoDL@7JM0XI)X{wn$)03>u*vU?ygO%?Y@*j)h- zYPXCzEt$Ajx{H92vELgxehkvOHQ3q^Mv5MZGu3F~;J4E0bo4-!Q5{OU>2*HnCs|Md z2rRCO6g5;3`X-1_%N^{9hzGj1>Y63Gp-2_znj#evb_$?Cp-`KdR9#3``hOHE2Idt6 zYNVYZCuI#;M`0@}~6oY9T&Yq|W$T{}QozLS{2 zA_~E+=5!Ms(KX3jWStwZ)m=%X(lJr?4jO^kb1>E1+&x!EGmJEK19Cq@>bUgj7Bm84 zq=FmNALuUIFUzpljJFkxr(5U3)o7@~;r{K~ICZ|h%dMJminr`~x-3~`B^bXC^xx`s zSZ*D~Vsg4!?gtS=5l)RKRK$ue=BY$5z!e#*L6(4YJi_{}l8z$1M~V#(aevBKCSBUg z&~S!u%%d_ng$z9kl(5vxu`Q?w73sJZIiv%j=ZN=ShdsvSc@A96R|DlPp@hXlzr8C< z@h*T1>9NooOO%-TM>VEMFub{HGGfZ{IQL% z-rZlG4zKXI44l%%@dYDa6woSu3DVNj%>S*>Uy@Z+lawL0E*E`}!=SPE{b4gkq(LAm>%QohZd@Xrx{vlw3x zcql&$mE$VA4M@|j&%{$?lGCp^qlTBB5)9GJ{g+3_9@ZJ`MTs>@6JVSskK44+>jfwkri9VZ$@mxKQ#bxg~BWMs> z>Yhn7OX-&fJ+CtmNp-*{m3b}=sg2B;Lu=b zoybAvflxz;E&QWfFR$>Y4q++qZcR%F#$&Lei2OKxdX!q~Y;*`Q&H#`kv~1`AkiJWr zaR(FP@Ohqnh|QgY#$u>d#2ifwL8n%mUCi2T1*e;obDd6&Xt*4s=-w7_#$BG}8EzLb z#<*rVEn!d>)%okSz!#Axdjbx_sT1)U)tfdyiGFvkIR1Zw=^&ilt4h8tj;0)1-~$?dW`m%2%@_8zuNSz+pAUF-m}Xf8V@EZqQPilt)Wt@M zWx9d{HPc`Ti<7eE@TCqI!&9w{$Nn=h{B35sjT#iDlbY9p=Df_d8_WY^e#9?=d_j2H zcqbU%2*cwmV{n;uBbtU)WYVEjxO|>ln+8E?yp5vfe2pfWdd*B>hBq#Lb^N2PoBDN? zZuYk?%5u!QojR2s4Lmbl zQlqMVV&ZMJfB+4bOH0KrAbmP?GddVNeHtt@*-ou4K+s%WGfcJ9%;I%lp+oFWOqmv; z#YcPXyYu*dXUJ+k&~%@Q`(xby0QRci*Pqzvvn*M~W9wp_0nd3PuG=D+61(K9VC-H!on}m<1sD8VyaiCL9`oD+}>Mm8#@WSENQwX z<$j3psYX64{CPehY9GXxoAP#)9wub!yG$iQOH6uBtEHn*8%U9-qU^Ab`Gxd@V!FAb zvES3r!Rm7AjW2D8C4CEp>9(atH=1O1i!YkxbsQeRTy+t;`iBIT`P8|Ft^mli{{T?F zQ>w1mv+8kLRuNpHdIpYLkEWehlbs#bk^MXzrp5JOMqlVKC2m|rx<3e|DAoK`y#NtMM% z2l9gV0RVE?`u_lu{g=dE3h@h{gUz^G3C`SGocaR{9pzO#t~CuZ*mp1@4d5GUME-fi zcx#!^;s;U9n)1<5980RP;oOt+6HvF7b<~49uWv)tu}*SUuD++*ym)isU(?IFx!;c) z`CF&;v*fs!R(Ql#uY{$ErVAL_Z=~jyJNIuJ!GImI>V_LHtSU9_tx5GNHfhwnf!}YZ zO;_o>7Xjgi4^pXz!&0M&{CLMW5ZaX9(9$V_!(st*gkM)$>#gFi3^17b&Chcj9u~eU z8Bx`|ye1e^Z30OyhPD7`k@BHJD0nW2-bt=X?osulcQ@*>dQ3eL|iJi)cF!IL5if&3Pr2SY)zdCLA}2 za9?)IxI-^)FA&Q3YL%N>oO1>`o0u(m`G&GDC%W~RPYE!1ytDhi2aPyKREn>4M!C-C z)<)O3l0@4`0b?)P31eNc*?&KB&!fhkNhIWccOD$p#8Pd1c4o%&SEo!dpcVo~rZh7H z*slKo0l}CYywIT5F|~<@RI30TtVyW`V_?#m#uA^C$U**(eo5&t4=DDPcmrPvsT}?g*^J!7TSHnJzHMNWBQu4&T zgh>rL0(~O;XuZa3#u;m~EM^!mwyq(?o@0R^0O6>KfIz=%F4r!@G1S{ez8Zx$7dDG4 zmKO@LY(s>TbL(KctElR*VqN=R^Z36*#m}VEN`0_L%(I+69*z;%Orr%`2a93yDn0Gy zHBFA1MaYdt@>f}kKZnY>GWt~9aSUs50}&kbYKK7-&BH;~bshCTYQ$w3RSXj=V_QoN zO0t^o3Rp}{8f^iT!&}TlrMdw>mrvlm-+wnzaEB<{ZQ{gUx6=FVj|R`h6T;T63=)T^|jb zPp8kU$t+f}-=2SC#AX;Hg2W0W{J=?CSS8ESc!y4gABbzvp(D$2WyBjUw}q=UxwSc< zD^wxEn@aYCR zaNN-6S9TtsBc1*lZDl9?+mc4h!e@9qzlXSY5183lz{o^ZZnjivbdjHSdFC*_#TD~B+s>a67D03BH82R0;*UXl;lu|5oV zb(e4l5Z3VXh_P9%IxQdGlpRs8eLAg>=?x7dNAl_p#EY-ZwH-xh^-`8eIYx3#CH=ed zo7>CV)~NkQrr=ubEHUFsGK70u^X%6={$3BnIreFoW*C6{(zBmdlX(M70?|5l-F28y z;(W)p0VXEaT>RdM7~0@5&1iY$onm)d-G>dr;e%t$s0p)y+=wG(`aU-pV@f+8ooaq0 zwGGYPGev$t^X2|srpu333Fx_arn#;SA{;DFRicI$5sIuS(x&1Lt^z=f{{U6X7LvAg zbEn+mk+qa@PN7c_N669u1={!YvgI0Xq~^HcOKCosEdxgbeq^uZ&}%7CrBKx5faktI zzerpE02zm^MT~nK>g=6~6_vM+i*=eUnm;kih zg5>p69g3*x<=#&*Y;vBb_^vpwh-^9Mkn?o0h07Sp#NwMuM*cxcqnb}Kjh4oSastxO zcN6`0Svkz3R62u$!-)BVY;@~&u;uk!z~d*Kyv9iRy&+-Ac`PG$+K#Ezs(H@kX&`=! zD(~_wQk0T6U5zRMgOpKoocD5%ng9b`y%!r3hh;~aY=6xlK@z!EMBOuw;I$Uf#${tv z9#;@xY1>7u%&cAm7-kElc6G4s!g+1vXUf}vBfOa2>rNk*qxo7KORPGovMTP1*gQ=& z7s=N&J|*sn(sWrDz5f6!tkKbeIjwQ|0JgpEwN`VV431bI zbPf$94fTaXn|PS?RVpKQvB!HrKP=l>>b<`N)2)xf;~2p2`L#AVjpjO%L9+49YhL3% zt7R9yiRNWzH?JuoR~D-u$H&;6Gqs@9e@U5Tt4C=59$~~+r-yN<81T|JX)}L83!}wh zjux}2xxki~kiMtz@tEaUZxS$=Y~u$<7lp^usfKeg6vNsaT1!kiMxcF4Or9%x}&Ma*y&Bu| zqmEbvwqSyTkTgf;TY#cz@`>gLU6zM1$4=|kPWe7}x3_aYFu9zd37I8pJlb<;7Db$} z0luXJ3z~k2sTpmvTVCU7^;s4;7zTPm*+f%o;I?MaPU|-cZ9K9Ag^BKtTkInXR@tmk zfB0hdSO8jVHCvkJ7sbIAGyGI8Y&G29mu{(V$)y$G(%}vwMb#{G3uj1KJ;2=htesHQ zY@f~9TVzpBlUvy&TV;W4I1OcH90{2^LOvuw_fyi_A3Z;+;yeI&%SJ5_96VVlqs$BsP*;KHOhzV&{-4YQ25X!TCkqApd4_#3E zAP5HOWKTeVM|4a3A`}~<9*GD*6Wul0Uf~K$C%UoGPhX+{C+diZ0v`IHDY^j(+7eF5 zHb7qJA|*tW1)Y*pRS+3!wo+(6F}l($w=vMcto2-T_BpVm<+;2V-&7}`NzrN!5VH$3lW=L7OHQQ#g2t1@LR`E{U!scu`tK|YgYkpbO>YeDn4YNX$wmGGy+7*an zjP2cO%(%Y>F*_$^uu^epFrHKAmOsr-v=G6=s_rq+eA zl(~TtL#+ZeSdveZn;VjM6PJX+yBx}|^BCVONDinPPo$gsE+t57`C3WkF)NZo89|iA zKpiBQ+p^QhOTgt2cPox9+i!!nmMgX?E&Q`8m7eZW=Mq{q+@o<7S_^4Bv^YTk>aZ*` z7LLnxBS;YFB_HU_*acxlTfdd=2%wa@{Dl(z8axF zBlfD!juY-ISDtL&lO_RakhJoePA$E}TtQuIxN&M=;Wcad$H?zu)ao>u7D&2l z`MUQ#mTkbeCSfS%`BxF(F&KK_^3!vRYB2P3e?q>8z*#pC@h%H4$?}{-+;Ej~9#tV$ zX>z@Rh5!Ty0Y5jVOZiuz zi=65_e~QQBGREaOo+4elAL`R536{{R_avr$inxRV)$#bRl{5As(m4r7Je zKe`AD*nCTI1}iz@j1D@JD}QvFMxI?&&2epdO)zQ)I`t*o!<^l~1@dkg$6|0e@r=R` zos=;xE+7%gX*fGx&LMqwNYX6bEl)gCl#_gI=V$WapAXjhgtYxz;pybmRdC<7>b-3H z&jk_dIQ1UDW2sJZ@JP^?dsBXb$Z z^jw-aTD56;tuh75_axMLK6e_F-6dvBn2;w~Tbk{Tq}Wc2jLu+41b{UQXfA0GeS5As zBc2aqok`b^TMd_Cg{V631$7ka0(JFV+7&}VGw!;XVQBO)&ZzX+b|AF2YzdiO{{V$^ zU&7UEtRgkjRr1UxCJ1nKhRf0AIhm(+k{!_KydI&Y__1jET?VaVl4tLqg?}3;a9516D2caacEncTt)f@h!Cv0Y~eiNr&i+Zna zX!E+4Na>v)OxBMSWs*MczPpvlZ+maQ(}VNB9(d!FlU~}Ci*YP2XlQpcNCch4dUgx*PsRTLgZx?H z_Z#9ftYsJe3l#6oOp?aA+s{Ww@L!#>s+pBc#*xeGVp~~`4r}Qb2LcSpBTMvNY&tjn zr&DS9+s~t3$J9$E47k)V#^CA2r_YrC0G}iEuZVvh`R@kin2e8yGAt%Go*CX#adn<~ zogSNN14+^kW%9h^HnDEX*aHE-(D7Ks0Uc!II9n2jQaT>3g`0>NpPY&nU zJi9B#d6<{ru=tF?5aH!wDpL=00d>qytL63aETe~J9fX$?aisqMP`$33(X=`A(8!@} z`rr9HT}K81R0V! zO|)FTA!av;Gpd|H#W?0;vDktf_qPlvlMMg@1+N2XKd*}TPQyPe@QVwJtBD4VGZ$YF z)^bBx1TrLnGv!XZ^gj!Y%yTf103u_-${(bwZWvchY(yWU^+QqlMXSZ^k?`?W>=15v6ze% zcj9TW)fq%++mw> zE)}?p&j*LXHw#dCR3*Iba1dHZ15nUF1ZWA6Z`sF>CQrS>TYrPg%d4keyd5@a!`1No zNrs_;!r>}m-%_A4e6B(IO=oNa~99CEB54cB#NpDnL-IeUmOAm2-UXy}pa2Gj-M#sB zP|ubNCRpv=A7A~wKAYLv&`%7tDmdlB_TTIJABw{ZvlmJI@^zapwQw~q9<7vfW>s5& z#9`=`inPZos)XY>XukT7CXOV<2r9{EOVYpru?5O<7$tqpI38?xBwj>4Z3W&Tr^rU z>=&5mXPVIC8VOtYp~d;mCB?k0FP4BK2s`Jwa5G#W68oea3#x*MXs@;BR zA7RtFl(c%tN>X&1*?IAQgFM$AWzWkvmmh&FAhxr?9WJ`>?tDfLl~-bDnlQF;ufoO1VB5-L+iy^Ld1Sg`y8~;jkfmgYXq` znSL`o&M`w7kIgE!tE(~2bEyWjg2xFOmo&^D%Wc=K)4HGaI!t*N6qn9hTKO&Q`tWh} ztpqgM>8rPQ?33ZYcKBYLo=X`9q24Czzu`;bAW$99ANy%I;!Zz%`I9dDpVA$p=2!O6&C|OjGRcf~)-w6&%kB z`i#SzI25VNxtiH=x9FJM+K)9SQXeQ18s|(9FQC$NU43k#y%#y7mEaHo2FJSRGb;0G z6Nu(MTSIvoK49awdz}|;#|&DPojA)h(}PrNz~aoly?6YANW4isJ1q{!(Zkbtrq43F zpU%ph(i+${jrIF3J!~athf~%#~EXJM?zK-xf~SM=TT&M<+kTJ;5Zj@>0ukJ ze7A-Nn1i4@g~q2|r4k&|q0p{;-%#i+P$0oY)5AMfMC< zV^fMe5@B^v>e)3@gm^ldU;@MRxBXS~{a+7ew@s^$`eoYwQseXePqX_qoo3K$I(+{C z)ehzJkMjP96Tp5W{1!*W`4vJrF*rJSmip6iAO1hG`9@__V)I({L9^<)-qO8)g><>= z@dJfY#M}={+xi|~QPfW-MbYAy3D5Qa0COj~ zpgDs<`Yc)xFEvpNB3ek=R>B(7tdp$$md3ogjW$1*m4wGoC3<&A`Q;nr*N1f$dDR_E zKjkeFG$dJQ4lQhI952~yb9rC#fErD$s-~M+%g+)_fz&N*w=mP;csQlRTa?Pqn;JoL z$q{lw*krhXBm>jTIM8 zhDo;n0Mso9m=0^%BDNECBWZ0g?~vFDxz%9b&1f>U-&>UlcSWw#4*yiC}C|u$JTk7C^wVYiKg0AAajRnpYkQNgApgB+2X)Hyf$8 zo{CYf=8T;OLPCH*Njl1*-DkWjz`GXeJz%;b|k>E^k!5zyIBmTqsdM7Ci1 zpts=7wY4xp$<>qfG%&kU*Wgt!<*mQ7kQMPc#Yq!?)dF z&oQo-Ka@D?s~Bp*=K}B?bd{Q|?A_kf4g#Q~=SUzwkla|T9ffm4U9-3Dwz7?42reyW zFy?lkcRy8=O-KI8@M1tc74Ckd>|TbJ;VQl%rPtYI_!^FZ%gS`Q-gH|}GkE~{c~3Ai zs^^N74K7g)dAp^uP4-xpNkrwxiW1sKT-+UMoQ$HtTup-1DAa3*$p-rRF2VI5R}|{> z>GHYN3x}3DMC$+zJ1#)2hsARW>~kPEvILnr0&TYIKNeB&X=8(Y{En5)G~792S1OH9 zDz}{4ZFm6K>`49vbE?q7K9D|CJm}>xrwd8N&Sxub9lDPylz2I@;`nn-OWf;UNXa~+ z3!+WXu#y_aIJ-!N+R~+lbzmD1>w;F=m9W&CK19@Pwt9f0%bbP*QLD)6!kKej`CMQUJy$CWo8U!y zjl|KXMx8^WNVBarTvE+6zU+5LJYk8yzb%>5ni%{5Efmk0R6%pC%hU~*BLRzZABU@l zswmZ<EIwge)27Ef(|d^&3D=TIAZhxqtax|h zUJEA4KiP^HJRD{?SK(^E7lvblOWIf(9%40<%;Imo ztiK7C;j1#V&?1=*b1FCxM=-G#oeJ^wnk_E38iq*w?dp9FkF4snSsbA+$J5yQ)@#9> zW#di)j#ZWyW8K48cY%+@;_1}=lX-(_H_9#o8$`G?{KS%O2wxJ$aDI7_=D4h*IKkDy z;%L^XhI?KN3V<19yT{dc88;DeFAPz|W!VQ2SHod52>e?pVtE@`qU{cYvFo@U7pKB; z&LsmCKq1M~INdlg#*$ zFbpoMjJz-7egw;~Se_{1+;(3}8t3^BuR+wsPFR?cd#`)IoJW`B6mfO&t;E)$TuW); zag`{$m*)kb&nSmEj+j60<3|BD zNz}Sz%FaHg)W5EV7ZmZiRnt_dzgNHHS#++CEe!I;PB{|d?|;Df6-KnYL66|O9KD#V zP;Om?W8YG}MzyR1^Alh`tFCb7cq4PN_nscJ1%acP=D6Iq@lU0M=b|c4BYt+Yn-P1P z&6m*YGkgp^^>4!WK4+$BrKry0wn;YrNp5*;d%puz;OTP*3sfW#C#BaFu9!3Y70hv! zaoD=Js^{mZ={<(PdI;R=5o!wg@^!N1@5<|s2O*Z9wU;4|Bo>fBTsFAR z^{Uz*%41&35{b!=B^{kAt!!Qay~^xxxWK?j&|h6wLf5)tVizivV%^tQCNAW6@ah~{ z>acmmT0|C+V<5O_SJWu{M0k?yrw_yRv;KSr9fFk_Muj-0$(RS0MdbBg4Q4Fcn{~*i zjdM)Qf%>l}Q_}G2YvMsV;?eABx~^P5*(Q(akHSZayc@#&Uzc$&5;?eh9%Y3tb|uX& z^6C-N35nmT{Xybq#4p3{KP-JbR)0?uUH5HFJ4vX)5hJ+P7xKfxY|}E&_)7^&l~#F~ zU02ej4&`&3&CWq5{+Iv_fnKjX$@5zHesPSaPZL$_YX{{3MTVCok#iQGRq?qxg3@E3 zOUqSn($|FdPN{kDdz!wNrRsUH^*KsPX)YZvU!O13{T1RzjPCJMg>udb$IzowBY&BK zIgMIx=K<3Wbb?+3gG7QkM$#dDSHZ7@zYY98z+iZx*vzjv&BI$#g$LqVX!DD-lJC!Z z+TN@32McE$Ns{o^GlersIC|JzMNc?X@Ji9fwJ+E>r&wOMk;Sm5u%sa5(r<8CSKN2{yTteRNELp6(= zRpIW{@~yjd`1m}(#b<;^G2)z06Xf`cEq!;m*I;lAk-Jau`>)PiFX6sFh%=UqTj^o2 z6r9sn6H(C8*@y<*$G7OeL}%PnnCFeA?0gJJX`lteTuY~&(js|c^E1(Oc)T`8LoY7O ztNt$+<#J(Y(s%o)XxI&a+>O0QdqLIpIz2!1{P<3{Mzz@VS#rj5-m3gvBh=$K{{VnE zV}`J~7F~_Se>f z6+kw8fY>lVCI*^pynZ(m!+7l4jux#t_&Rt;ww@jC1=@*mE`UpmyY>bwy1XX@WpwCc z@%TLAy(}XGn@XeM&__;J51W)5{gz>%(mZYId%K^P?)|^ZI5nMLK3}AcbZtNLB&>eQ0h)$EF8qR0s$|P z%t5pmHeNdq!WF^e>UI|!>0=8IN7CY&ahIn*=g{k}p{;$fSvEbzKNa$f-!gU!4VlxYTC0s}Ppedx z)@joA21EgFmYXc|zBs{PnD=6F?R^;@VWb2ysRmoA=tOVRW#n-f{vE*KsNrg5^>OBn zM>drBfy72CLG{Qn}7!LHM51XqQ+ut;p$SsI2=YHm5Z4Y2!PXI2+-g2TXog` zhf5Zu)RcaX{{TZzUzTaEq8Xg6jZFn>vvNd67>q;;dCnem<23&!5RorCwe}HKUcL>~o`?qQdZWy5-XJ)UPf` zxWjt&{l2Fbexjol3~f1Wzm9)H*h0yD%<1Pm#n<^sBpy&M1QU1{^10R<5tn9_uo*rbwcPiLETkRs zJd!~-CT?B4UuDx}IGpvE>bTrqMT@CV&Z|_^!GhX#1uxD6nj!}?B#jz-h4dP3mewZW zmDbg|Pt@{q^(Q=?vxfWIt&gZ?Tt`oV^PDz5u2)8-N*IsERU(W$H!Z-`qMwV9B(ei?gQDV$;E7%@^L6 zzVF80Uk3(VQ&l6er>L(ZHF^!_Y3^CP+kkCfIC?w2DC#avV z{5x>Xd>;^Fu$a1)Jj~}N$KdgF-05d4s28v|ZCSqIdCWe0%TE=I{1r!6hyCeo_+g6P$xZ@uH)eM=L@G>r#R%c&ec zl;17Ep}dY`K;$webiecmxz_RLd83OP;VWm6)3rEr<8qp%Zjs}BWXW5B%rdOjpD!+J zmr}&QZz&F!FoHc;x(*G%(!|!pKCOQvl9P=$kVxn0YYp}NVS3*f^PImk$hbC(GbUm& z_baJUh%Vu$hz~LW*!_jRzm50vexv)X80BzIj)qO93JS*Xx z@wsml@kV)4hFOTkR=}Jd5}SV!QPh|o2bkuTu)N6-*Fb4Ekv}@eWEe_S>vL5YFlmRE z5dv)j`d{o9W5St^U7h5Z-U7wun4wD(%ZbB00nJAc%X0!wg^~#EW#VfiESMa$({cX* z+10v!ew?14P3(rEG1Ns#cwBGceNL<5Kg1e*U&Zt=xjh^66r0)_>QdhC9!znn&A0A!*06&&^8cj=Ta?8(+zK1fF2QkOd!cw75 zmK}sieR{&1CB_LZbO^DxW!3&W@B+OjR|cLTrjwj6ZeVTF;9PnwEzTZAY87zr{i6VT zNCfgoBnw+jM%|F$YhxQ%6^6q;js}HD9%H$=B-y0eOb&zDamN#b{{XvH{Qe_f70R9) zzvquiIdp5|F=3cYx{HW&$PaUj0c-kRS8ssf%-a!*#DLf445ABPS)9yeIS1!1A_Htq z;zHu%u^4O>Zzn9SDl-nzOxOIZd5_JYHY;8Wk1;q3^-X+LY+XEM5r@Y$?FH3of)6WR zWV7;%h%s#}dh?EKk-Q7>=lNeR@!Q0-__HOcZm-AfvKBzDs*Yn!__9SbA?8= zgbHIp4x62Ark>g|(U?`Gh-qxoV?|DPf?d!-+f~8NGaMycTc4LrJ6tiUr1hM|R~eDTcsuOvi%=oXpQeU}3t#JQF;4@(Nb%r+jFA0-x+hqz2V(=zBJ zO6p%x^$gT|oO+VCi%mZDl1{6^oZ8%Rgt5o(UzUxJq{iFLVI!oOTF;gu?muNVSkBVB z=`?w6OTs;GhddpOTG!d+w@!T^&DvOb2$F@ zZvOzP;gCX-V#ig9K{c_<9IZXhaH<&SbxSeQKr84z8fKL7cn%`rk^p8iE;XsP{{Wtw zzgThlFPIBDP2qMKCU=X-vA>SO5*}%~nE}x)aDo?0U8DY|1fd>wYv!G=%=NlAQ;vgK z4AcJI)A=<|@@IL&Iq2aE*|^1FpHuPJD!3*9V22k19D5E`<~hrpc`ePY(-(@VjIQeS zAUW5z%T&hev5QWjCz1aEbgKS`UsJAmV;m8Gat+tjoR+jT!i|M=wvh+vPQ_yNEG9=+Z|TlWL5`K-NIJ zuQytYr1Ln>WN-n*2NeriZ8O~xNQ2CVfY5ik$_FG(#;UNhkhReRNGZ=uf((PzK0>`o z&KLj^KZ@4(39$=db5E$#vesLE-Bm^Vb$ za|=(p#E>Q|f&8liXHr#4*&9h22gF6Kbp&6VbO0Nfg_F5txJg%nZr0{Jq7AlH#6TiM zSy|9R#DOz9CD|1sl49dqtX572CMRWy5MfkFCV>!orkg9Ml?>wx#nyd9vE|w@;LXq7Cld_;{ z6ja-LC)_9o>K@9SIw=Z}C$cN(fS!rmqM-^zgV9vF08$bW0F+TDp;={2q>U9SNbIeT zWesu?CtXxMQglEr6&j>`p&-QB2IVmlpo;>8KuC`27lPQhrtz{wtY9Su%!gv3)dEG( z4ao~2(*;8iY_jI;qcoB+m_60GC($+aMmRLg2S&(LWZ4?esu|{pLTQ*Foj&RviiYZk z%ttDG#7|oxmY5FN8byJ)LVFo-qXqyYIwBFL!Q)rnIMWJzE?m!*N2f2n@U_^DYIN4T8c5<6WpDSI=4BjVR z%Ds#Y6&mJApO>K8R~Qqsg_dn#fO*8aeU@7FW}_wH8|t;MYh21?(fI(9H~zn?2Se5xwuzlKpEw7z=s{&c2<*_$ppAN)AUiUp!t^$U}SC9 z$~L|n(`!jQ(j{@%gpOCuwkj96*uc`|N6;-CgxHH6zs+-Sbud)}sJ@+9b5AK~1eZaJ z9`Lxe3%R_YNdR)``E0WpJELwXN4Yz&!OU7@HNxD^T&h**wZe@~L(hI-2_W=bR{=~p zt$#2sg6OeXdH8lQoZP{~o0tP*F#vtklzWZFZX0*VCyV|kRj!21=}pNxh6MJqe-{HuvUHL?UhCZ>*ed+pLXF21EjxW-ENJv|0lLKz$-TONFpOxkx@wBFOz zX)cEtvdyj+5%*n&k2y%>HPaL6VRf)PiIY37KR-bpt03}k%^_jL=8VouDve2yR@T%L z^Eq)m%LhlI&5yQ=jlkxPMvi}&WQSodc!~`Ll$=Xi_=&OCL3677 z(s3`Q@7cM{=vr1^-c{+b?PKH2fZ}5PzpjhH)%~2qtIYGdx9ocQZngb96dmpF{>SLt z4~p3Lw6`(xYgKJS<~6k%ZxREXE@MdSrg`J$UzXwC>^@yWwkWhPQe&JchXEYUE8WA;ZyES=L^dM%C5?G{A} zhcDFqJHQ?;;&`hq{j;#RJjV-&<~~&-8d)XGcD92e0qNFPWZ|4*@FJ!rh;YLn+SjV? zU@lA&2|5WTWXaSo%$zly;&Oc6m3%c)&U59s1E?fK`@!~KTfp%T5#n%F=;lqVFkWDN zN}$06NDO*!#%sB&Y5xE=Hnq}&=B*yLHP3UrP94-g1xBq3PIFmG zl^_GTzk8|QQvx)F;`3bFFsEIuqk+VhP-{=h(je|cb%?ZDS80aNX;7n4?{*{0A}N6L zE*%7F37cuEuHu{>H_~%xx~r;@6cE8Vq4mk1M&CU4UzazcKaQS6=rk)oxr(d1i@8*$lCP2_M1NO4u}AG@AC$al>S~ugLz*Y8Llf6 zS^ofwE+U))$RgeC+;_U|aa=`-ua%q?TvOjm5+CPNcg)s&^ZU~Tjl^rc*IWLTlNP5Q zbuJ$3!~8#t?&0dNdVIKCcao(1{{TNj=UEOg<++n<)TRiBG8{frZ4B#m^?U~r)~k^_ z376n$)%+bdRy6}bYh?2{H0%kE@jcg*c2R^lY(ud0>5;%*WxkxmI9q> z7*}~zgAF$^hR)c`YAim>-__&C)LLn7y?>tPiK2Nre)76!MZ|fPOy4!DjCb!lNzh97 zIaXnYW?6^Bx}{1YoiWK$onA+=;8>2*K|QzKcnbM;E`!|av`8W%4)H3wmOhgOM+XZ7 zeW$YYGwHGC#~g8Vmj|1VQ#@H`mn3bzPjQLEVzGFWUm2LS^s5eUIJgoCGaWbmG+mY> zC$Gb`aMhoU!#@vEjbLySSDEr{+6nbvJj3EKMo_Bt8m-CJ&Ru$Wf4 z&#r3G9L;lD1IICeYitgat(MHoA72T8Z<&gzP=^pHJOa>cCT8{vrlLh$Nv6h^HKydA zi#%(cRj!~I4=$0RT)zh9yNA#eZr%dF9Ce0J+(@t~|_hb+|L33nw;{Oj8Zqtez149fa;_P; zxz$?^arZ`0W11aN#2085u5l-6TRH46DZ1Gjk8GXGa|gG}cPVICa}aD6b)H^C^jg;A zy4>r{r7DOd!bbWiE`OS&>2*w9ixG6NGqRVq>J1g5S!C!el17Sdsc8lwHX^sUBrKTM zR4~zP&qU=Ky1`dfC7xSs+0(D8pCf81ZzBQ%S|q9NuPKX=sgEPjAQPfmZ7J9)K?8l2 z_EHbkL>6riV?~?pRy^;SE+gFoV1G49p8(SaY3JlVb_nW4T1jm~zR~DCdov z8z~@}gn$x>Z^0*WkTp^#WqEBot?+TZ%OMMgy2dSKkR3|R8&YK?CN?0`fhC-tgNs?C;# zv_T(5JI$3nlqwUdNkgK5^;Eo+5)eB}B=t)R!h+f|lmzZH(N99G+DepdZUl``f&v#I zdHQ!yn<5bIiry!54|cbYR4(kU;xr)rRd9$m?_}m6T>2@_Vm|6_U5O@D6M5YUf=BV) zFEI*`p`?%_-7Y3jILIANipe0hR5!7V?<&D0ZJ<%Jxe~HGrQe!w?1blX+Tg4r0fm@j zK_*NOx{}x+sEs}d*8!@`o@a9w#OhWs(FdBxSkx@R024ADauj8a`7miCZ$y_)i)iH_ z65T(Nh1A?!K;^uECKAnd?a7ZZ4wL#T&hlnW^;z;#Ai798!72u}Bzq}nyRD2%&F)~V zm;o&WfM&)Pxr1>cS1a}|V0$b~TcVP5ST62J=MvJ#3FOnLTHnsX0I=0;3}`KJcCLfg zHdr~Xd$k0#Yo>}La!-;|sP^-9@6l|13a)4^VIa4g+I9M^ZD5c|ByV-G@aKNa5F!MW zeC#5vZelStLqL0-@{UkCDl1jjnDUKIt6f6iL>O4IA}3o)y{e3_r-sU=}z=9pz&zeUPjmHB zik%w)j>sHITK$q;vD2bauH$r0>c|9+n=L@bf<4uebXlWOX3=W_C1wF63A)hN5^p^g z`am#;y|OgbW?LMQeaspabuExBWwq7nwuqr4lw1x`A#bgkIrN)Nw1DLw(Od^UNgzVR zZhzd4c}h6{0I}I*a)|Uujy~!)HT`Wm*l`@l}qUlALeNrH4e zmLc|n0hN${nGLn9fHw9nF}|uA?tG&X^*N+Rvb>?w7TrfO1(j4{+g6IohMU^(ZVZU( zzLkXH>Y1Jy&10ItX@gOv$L4}AEdcuTUonHG%b$d+h@!&IXF(PK?JK9O(nC^{mn(z0 zqSa3WYCJRFj8;#KuIIzp?=zT|kMV5)M*iIvyk0vF{#+IWlEyi~{PzCs#Uq_^U-5Vxf%%N01yO8kG}JM>&%{!Vt00WG1WYX!rWNB@G&ymUTG4tfL=)IU>TPl5QO?q!6uv0vwMdz-7mDDpEpFPAs1z2){ z%sFA`J6%Z*5F-e%{Yyx z3>lR$fcR^nk)VxapIA3OfqA^w8(z7l;P&&sQqust`48r?j|}s*+^K$lQ9QB4n}fIf z;O}u+tqjtutFkFFWVD$E!%?Xug~q~Ra@y6Mho?>S>%OFiwh1o3$_J^_{TD}s7@Dqp z)djS`xjp{?(Qai-W*Vq#q&lHt=Chgs5(wx3KC89;H)8CAqpr0b{{Vh*{(i@H+%+r{ z9LKTMD!!W@@@{`DndxKwS!=B4;&F!$g2S<`duE?7k^zoT+4d84q1l^RRJ$;%%);A% z=qLI5tVU~;ivDA2hLH^iSP*~7aV&G?t7kN)iPE%}xyU%7g!3Chkf;C*bxAz3MgFHt zY_wyuN*Fgjl}1#i*APW2hDkHIi-`UUr_8J3u`D=>bsNg^Kx=G37r*tg;Zee4adgF6 z`vb@x>-#R&JuF)8n>u+ll25Z5-^Zcvak=&bH_31;W9YXR&rnruEIVn3Q-DDwx8^Q$ zhSm-C>JC$hr;DXS5W^J%Y8HlaesRnqbP*TyTwESsQwdmkPb_{K#Qy-rA2rWK+Gd%% zFqNH{JmOc%w?Qn@qtXYz3}YBN2_OOddy&T>zi!*>g`vDL=g~ zNsp+)AK4v|>2aBmbrVjFS5=2Gpwwh?$U8~sS06DLsu-6F?55hqtf|V*Qs0@NjV+-B zjiiOqQLNI|7u1(>^BFtn&_7kHG|j3yv^C_l!{#IRk5yr%YDzINo2e%oW;m*qDpZQ3 zlJgA!Ywz?`zHJ{eol0eur2ROhcc{_dWFq<|N#m zNj=wlv8q&g-yKTiowKoJHaWCuGL*idxna4I1bzPNR&?rkEXx&z!a2teMx*Jlok#{Q zeU}Be*Wt@cDm$H<&YtU5BNlNEH7Xf%iF1t1nOTMzDcj(a)J9OHvnV2{m@_1SvX$vl zr9<|We`xY$t!#mQvb6c-lM^Ltdw~rXHovT{%7e3|EU{{g2qB=I4b;)gu`yA5^&ttsGBSbN;^OTNl#V_8j= zbzzzQk}ZiW@( zgEwz-Nh-mO3YwZR>#r~&Gyvd9_KC(G0Bg1rf; zl6CBxD{YOCS|JA{jg^Q{>a3sMZ`}&Xd9qEe6}Y%m!95fdMw7OSBHL;dn7+tMjmJ%t zHj=Hx5;c_zZOj%zNrAc&;V?Z_O`PKb>-*#NZ3k<=>dlk;CilrY>n6*S|TTrJZ@EWM_&GXTlaG%-JA zL@spyB3trLG&qQ85HI}Jeqk;x zkU?78Oplq`K|mU0Odr)L8cs;dnXM805Im2{Y%~jAhtWBVtJ+61Gf>UQJpov`^BqFQ zNjjAFx>1hi%1>R?NILXINLcC;B^BsUtrFuzl}DG?&<$QMW;!pX>ujAgX?tepN)1g&Atp1a*nXBm&G%~{BrirBos^wk6d zCvRnmE*caDH&%&e&3F4G>b2cu3DE4N8t&Z6XZ(;IwOE^*AELb4O^>RDvni1>+31bEYP4Qa+5yibqZ__i~Ux{yuftFeb%c;n=OO`E@N)6&Pd6l zXFVdx{or(kwUpact>uF~c3f{I@yr3*>C0M+$r1n%PO`Gq@Xf51$~i)=6_|$k)O^Mb zS{=(hrWOt?d&6jkfe~{9)=JS)fHVezbs|>GJuE|<0Aq_MSW~qnc5l7CsN}aWsq*<$ zTTFljv^`4SOCO4BOmhz~@|ftjj|4|40&FElzY!vkEfRX#R~v+1gG(%v+~>O!i+L0S zoLNxAfpiBQF0%Oxd7kf#qH{rYW+er0LhOTH8jmW$vwEayh=sKM8u5<3CF| z!yAVs;eZC7gMO}Yrd4?0Wo4Um zZ^h?$nq{u?+QtV-Xcj)(E!49{V;li#5Fw%j1;fTM&v9i=U|Km_eJ-@p!cb)=R&`S# z$1Z|8sIlX5<8bojjJdRT_*_}TRp+27{F8ZWfibU5KZfgzR~jn`Z6`V8z~#7HY6A}D zw6UUNmRwG~S7U{w+BjPHs&8+}69n@+`qgksF@v|s*jXIcZR~LI7;4z63}-M9WXKXH zzxBH7D&_8NdV-6I3_pF>HSectyzV8&;!XN2Jd9;_`R%GavS3LvdoIQ~I4*WN`BZW> zO4-6=u~bNTbGdZaUeLR2CTWQ!wFNN3)|T@K5;ldVv8W3${!<;wN6iEm5(SnIFWrp} z+zZ$w>nhz6DdM_jSiEjx=hdkEQ`}s6oJ*$XU+cQnLWVCJLZw=`fY#AxI1hfHkkA0! z$8$t@()Z+GtZDpfo#~(NB`;uK~u;_}(vg2b4j&MIP9LHg@)Z?KZ>oQ$Y;zUQZtO&m3mCF-? zPRa9Y(FrnTX6~G@28sdAcB^J7kUACT0@0yafZlFX1Pw~T>>>ai%9~iGksAc_SV!Gi zX=%E|wj^qeX)P`q1z8g*WJT11-9k&WPnesO6p*-^XolfAj98dSfy#o%%K#MlVA{yy zG$CR|?5ZQL22vntWn_2$Ya0lJxf&%0F9N|N>W0@M$prdtfD5Q(YpOO*iy?cJcqb+u z%1Y0a6Z(>cpct8ivD(psUh8KtZQByDkq6~V4SSf`QFK146-+Xa6pGHA5xAA|$K0EL~I>BT-d56K##pW1a z#!(n-NUYOOoy@r!8ELWu!TP9?^j+oyfw{MTRq0MeiGZ{jchK=B{`YOntQ=}H!P*|c>@Td}w-Zdr<} zfy^+K@VJ^MmZcih%PKJRb4ZX@fiRRTwn^X( zvM4*NsnsY8p}9@cJF7q;L_jp?n<3RB?1)f3At%u$cSEd=5`$$BbP}fN7eH;Sg*YwP zkQB752?1S+M09pfe^o%W&cg&9`_2Kp?Fw$>o5VPs9Y zO`&C$FJgyD79B3ABpZp5qSmf}bw-UTwq*?i{vc*{S#pOSZ3!V@;zhxk)j8aCDpNIR z&ct$%ExN;&IxNG%X#{-0>Zvkr2y%(hrj(VMr_mNp03N9qv0Af@#h8LxW>#&g;0$h| z5Jc{UplYVfvF<`-EM_-Z5I=Rwa-OKDJ2D1h_bSsQOi8w@5JYLN%JUFyWep}~*0sbr z<{C}lEDJOu=xRD-eUq4<^-a-Ri`cWuVX^dB^O^3Zz0wt;TkvJhXZ+L;J8Gd9PqI=o z-6CsZQej?L8mbxz);(3UO5Ddwt7T+J-3XfvdMI8AH`xigL5NqB=z`fNbw-y+GN`ub zSd(RY?wfQ{=R`C;m9+XNq8QmgHCOM^Ktw7uMpGapZP7m{3Ud=TNh%w(Qba>kxSb_S zgc@{87iLz_m2Ih5!9CRuP^p)gc0y+AX=y-Y$GTBejQN~YGGbKG0TDB*lv}eQZAtnl zEvW9Lfc00|3YnKN);2(9ObaQ^CJxDQZoSkrnUH<27T>Da*E^I#z*utXvTJQ;kL0rG zs?EZAE?KuCWXy!cL1lk!HK(wnr#psk!{lVC5SDs^rqF z`lrclW>cq98eaVxCtjd>F2BilDS$~IWIVzfGw4=aBKS89vQKkuMmmt5VBs@66&uZ2 z%>aPWtDuF)^PU)K=r&tv5x#`LJ4(}wNXnmcq;oM;XfmS)2NvqYuov@FY z4rtM`Z_O86Xy%K0#_KwCxu0T3Ey#@(?1Dx^Y7|)D-r`f4o3R1soVbE|ESrw1#)dJ_C+fJPSpjUOWzb-H zh0NfN6*)c`xA8cNkB)dc%tn_{xSGy+cRboXmdZ_n=NK-BHpbl+SZWli;wjQDw% zie>g@$>f%_ILPZeE?Dvy16o}pabun@+;h{1MRyy?r1Y7q6a!{Z$-;~35^oR^H1eEt?t3K zu4`Ue)-+k;L)5K2kumV4dz=<9k^%g)_Efi)9%+ImJ1y^Z0PaS#lW2C5vZ+#wzh>5u zL4hiFJK!jzrWlvB6cM0ot!to-(MBe zMYD*DN=HqU9cJpu9?Fn&S~XXeM1$;%xe_FF2`(ZEjH_~5IaQG#mg8F^d3k|!$8Au^ zGXx3hhL+ocZ2+kt>VC^75OfO*lMslEp}Wd}p@@Mpkpj}H+{@SiBm9$J^g%OZzbvXj zVs=)9Z;)q8X{DViz8?N>v=}cM7BFu1TBFj2=rM+`CYQb#x+FCD5QyP5M3j# zsiM+2!BYDx9nvhQ8VQ6_B`*pA>aO=qQ*}VGPzd)|XkS?PW5f7CiSb6AKO4>syfgR= zL3iTnRb@Xvq{{U&1{q(q3{{WCb{KZxJ7s33u z;EIQcnN@EG>SQO2K(GDYFu1H+>i+<^spi0_;?w&tGG}Sscm6-%z7%m>MV7zE`k6a( zcHpB0_}oS!o4*a_J3&dn5zo!7(3XED1=sasz+Nc-0F!@${FjY!7z2zM7Y^d{Ps4eh zSDYC7wF5bz^7B|s9ds-3hr~Azcw?OS&4S_2hdd@58RVTsCeYVXC2b#fnH5b7qWbtgQsc^vTpq6!rJUcaPxUIO4> z4gLiw=X^=QnHD=TrNXbq)5K%4>NTn}7mb%uJkMz|+L(%9UfiGs{N>BAHS;{f3zp&U zTNhcBDbM(v;L-Oh`dRV!j-kR|4H#}1!5&&T{Le4SnBV>mlV4bW>h1d=XY(l)U!w4z z0KXAf>?I6s45KA9u@u`?gyyut<#3VqC=bqXzeIckf8j5YfBhCe{{UBd<$v7#_>cbp z+uMVk2%xpAV+=LCC55~V8 z=H3~6TkwA#1yUk^4?<17$6&rQ%kNcmW5&r=Djgo)oT4+Pk{AGCE;J=PM6~VdB4Q4f+##kmb z_`EZ4l>;#JYf}!ZLG@e!bD2@C<>lrVev-c=?Pbf&^2}aIn&Wb8ds^I10})dTST)?h zRAY-=0o+J8Tu8p?RDQPjX7Iz|CyP8XZg1l^7G*hq5gdJbW{xL_h6(;a<>WqDc(Ids zy86fbg@0#{{`ed{{{W_K{{XaK&k{C-2oLCY{DpsKm;U%1KmP!xZT|qYPx%V|&mBMI z1Bd?r^v%Eai|{86@W&AGeshN5-WJKRnWklnetnc*HVjQmTofr$*k;hHbaimxC(H)}{`uIGaY520|+!H>cp8fC{f;Tlyl ztPeS*_?!lRR=qB9t9jVsByJbO{xyCZd>imn!`z!X;4Cd{9&e7$S%rNn`IGBDrW?qt z=Q*r-m=A3*Tm`v+-Ft5uzCQR@gRm~(e}}xM2aA3ZpW&IBI}Rz}Fs&91!_feFk+C2! zK!EU9;f^ljE-K^9^1l-CmVJ!P^E^-c%tk7qbE9UoXx53dS^ygWgjRI+>YC`25|D<1 zX|jlbv$})T2JleZbpce;$!Li{lm(S4X{wi08D4CFq=h$GDMb1qH}pv`g%BLyUZ z-D7JCEOZInDJNoq)+4A>a_m?_2+|N-%19fkLSA+3sf|jLH(5ti2*<1?_8zL(8|bM^ z1c^GQ@Kyp_=%HzWGKzYvr`Z9ClC8Zvq+alZ$^ePJi38CKW9XVGAgTaEKx(YpP=-ax z*Sdx`g#s+Xvwc=GWp>pIbX}oIlM#K9EP*k59*Zf~`rTtXDuu8NUQinpo5rx7kf2O^ ztfUyZy2sHisv0tqf5|2yH7ZQr$c1dno^7ggL=mTSX$tdRETL0uyu)J(b02?2S{m)( z1(6L0m9CRIs8xKJ^BI}bMUbfG*tMkg3CZ%Cj-$H59sX);%G*qN&lAe?1zvFT&AOq5 z(9#K&xs*U)4``Qr6m25KN=FJ-fL0|!yR zb)NHU9d2=jE_TctYNsiueIat`noS=wz=LMWl?6J3 zW5W$XK-dnedl<(9&0sYe%K3Jju1mp@5A%lgqy z^!Y2tCAu}ybvj_waRJ*$RmX8@dF9ZR94`&(plhIzBn?Phiat&UC&7?>Q6jwl@;y zG`5|mQm_x?Zz!>Lr+8R^34s71&xWvu#Gb)#ej0@qOMxZ2g@=+U(aN#Ptl_obG&QGP)D>Ma zBHAuZ55pd3a?6Q{;`X>wt9{J`E;Y%k_7kV(0aun<2sinQ`Wq|VD`45_uo zL2wN^tc5Vw2_Slnd#oH>`-9k}SGmEXmhG`qc2!YUWFN@>YdSS3D%343mk@4lw23y~ zWnAdrvc075GcPs~D;Jj=H`Pfl7e<%!9#IyHB2;GV&9t56nt{M_xHk5ZXZa{!%+Lm) zM63ZOK{nJX8sR2%O7$NjCp(%iVYfu6Tw%ve1S~^OFHP1>V~J}3nKn)et(bsF>@A|$ zz#sr3C1733PRJi7!V&HhNtsoW*0+_SM#EJ3c?^(0ijRDdcUW_4bV!bqvpA>92Pdgg z8L(LP?1n*BjJAx34I%)Z>IZ8ANfxri5jXoRn&ZlJm_piSCVFXQd5144Xg$_XaDV{y zl{NW8W)&y0W(@$J;Ib}kXccon-s=#;cTJg{*1~ntP&b%Hs`3z|5U(uPOTQ)>uI?e#!~9?KIGC1i9^-(^xGVFC@|G(rtiYXm?QKnd0r zFlNdRRP|7#fx5QntVZaTN+c&~L+TUgt%L6W00TexQSfJ`W&Z%(_?7g(?J@rVzLyIB z0R6sy^_r{Z-veLxQSfJ`W&Z%(_=Wc0kIxP`@5Fx?xKk_OZWGM&yg`L7pYaoF1UXA0S#U_mI02Ut-IG>0PGNLl7b+DW(l5^9_@bzr^&T$<0ii2l58UufIpbbl>^nVI` zJ^U(gHw0unE%6JF%5ttWW*hN&mJ1QZ6{!Z)sNw^|8CWvxYZ^;L9$ic>fBcgF0B0Be zQgGk?mf}C{kcacO7waGF{qb|d{{Rd)my2+Gd&GEbm6_HT2ynQJRJN0yN%c9HUl7w3 z0TTkneTV)@KeLPf04X?c{{TyIANI-r03^TJ#s2`5yfyy-rMQp#WCwG_+#&D_#++e| zQ0-VVw4Ul)5FtcCKl46Ot=nlF6Jeo2P0saAbrn;z7ReRxZ5ci_XzO)EZ;75M^kPq2cP3A zQZH}j0m7^p-G4LqqYIbdxSKb@Dr_ra_Kb8i?p z8!UJnn9d~2C_B;Es$l-B_Rsd4<_@R8+!d8i%ZSaf7=!Chh-m)+?MnP}@aopP$G;B) z&A-}gwEK)h2>Y+rf7*QK{{VJ)cER~ge9)gz+%$fr3VsOoUw^{EXQ#x>$NOo4{{YPRU;8!oFND8}?;Ctp@v|!6 z&Nkv)E;A{`VR3aT(q>(UqD!gKbDDXWz(v5_ei=Ti^iRMrpNU+IkN*II$NvE8??NAU z_|o{C@r%K~74SSQz#Kz{z~!~_JU%(}>R>2VCbO$oYmYP9PL$hiEWQW-0JGELW?*rq z2mb&w;eYJcr~c9s5080Zoj79%KmPz@62B^YAx>6nnPT&-(;1v*6$9~D{6$PncZPfksZD$KaM6-(u9 zN<;8?IU9ME0eSYOLD-d^_lo$EwJsP^#YMZ;Mg0)9xt)Wp^UyWajo{{YMj#n$-h_@Jp%ot`67q$YV8lHeoL z=AuvC2}ch(_$m0A$!NO~Tf;ionr*o_Jbo7t?`ATodHOGq@dpiY7YXJs$@rro%rbm+ zJHHK%!oG!2I`X^&9oOj&6aLX39&$WYGsJAjxQ`47^J&+?3_Vic_+LkqH1{oV?7v=c zXBT)W@w?%kD+!zM`yF2i6!EwWM=8c-b)F9`S~WnJJg1f71Gz|W)u=4~Q2Qsc_dYfF zRhoD);#P6t{%KqB0|8J!3yJ0B7@RZ5H7b#@Eg%uIgNDn)M#yL$=t@LcE`Se3Zgfvn z>J$XfSq7@bl$5YO=@x}e)Y9buF=cF~>2*PEuuo)wqLc-+0bb|<7rKg3Y`56}=#kwJ zP#SAw^i+2#6EJS2mVvTH=XE6mj3(vV$zl)*us~#ukchGZZ=$wRN<^UxKFS$7Xqs!X zw>qIo*$>@Y5Ssd>ilKd!7vDv9)e^-Nf(@Zf^5s-Y}S=_Mw}g%(tvyC@9V zCvb&KqTwg1mX7H?$^^=qXoBael4S~AB$z}75_dwPgV#=p?xxYvG~GhkX8NRnRM|a{ z8BAJIcUbzuqB@~dFVR^B#QhdJ*$%x>S)H~bI;SZ%H}0|8{;Km47xhrmqb@==_geuG z6ZvOlubxk2E^J6PS$54TM%I>-rn{`kAjYEMYUa2A#^D`Qz`cUcX};ubZC14Nkzr_B zYF01&-rFpiSQ!-z&Y=sblLBB5sw9&VZK^eMIA~xMiPv(sHKdRMoAg-w; zebi^Mvs)bDA;WD6S-8lw4xQEyYli*SGERc$MJo3t*2d~3?L5Gk^;w)jgUnBBEiJ5C zNm%)xFy#@ljyCO;PPi+pR1PE`RZb=D)-SS;kINU`V8-(}4fI;1%r_+VX7Px4AX`4su%AG0W1+2Ope{UTEE7_XjxjSxd>u-0GPc2)|Xlj#?p~EsUGo*(ipVhg&&Vh0N-gVHHo6R%}OMsrARnq6q)ZCL<+Fa$#7Q^WH!lb7b| zusHWUu50O2ad`)tE+b*IY4lkBHO&yheO4Nq@N!4t$IYCohMfvNLtvBniEY-0KA5H& z(erg8>p`gMwpVC z*K#m00FX4%RtX(Cl#7mGqNUKnz<)K$5<4>x8$87C(PVi^lIQ?^Rve|)2So^V!8$8J zx&p#i9WqSR+e@W-@+-nrCT~bu7bpoz?+` z(nf)0$lwc($*|{oF>#Vyb(t!(NY)XoE)$~2HM9A&>Wz^`-LeLfKp&#X%>u$CbV+MZ zFx@AZm{QGBqY%&q?pDCd6FV(a8-lVgIsdy;mH-%vTkjn*W^j=HQngLOm=M6FdA?y<~vDa{JHC!kokiL$G6F3Zex*#Q?i z!UoOfR4y6;rIX}0@&N!I=y_zp(PN;pN&2fsY{r(0nPL5MpHt*7QQFWp+&VG^GpYF4q^b2CU2&Ne7Fb;lYq=K46eW8vfO?r z2Va%U^JrCdH}becgtUVM7$bEBAJnf2z8yXqd=cZ!uAWJqvm3`zS-1h1=PiCV^k3$d zVd<7OJijtYVSzVVzA8Q~-SG8~%lK<6;NhHR*{%rVDOSW{e5^GF^SOhWtp(3A(_mX| z*W#~%vR&~>!LDS}@UtZ2--p}| zRYw<=<>A?N484t~M>E0Q-bvCcH1k1q`HPzS!Ef`J1^3T|&x+n5@C!Bm=FM4OHQ?NJ zUVL5wt_G$V=Ek-jY#k9TBnL*u93ffooMsalm*VSSGYldf!pGBlOgXM; zxFCWEH(vL^&jom+$4)xJ@Q)8teLOHNtC?m6gwnv_rtfye#^J5i#xxQ~^asUHhMxz% zEV4|u#SRb7f4XxV&Ye1}&TyD+X5%P>1-0nAl$U@DL#3_+0Av6aY)i<$nNXL2Y)hQ?e(WFS-{`yEHRDbt@ehh~4l&~F&Za*!%&MBT zs=U~28quR#&;Sh<006o(WkN@{@GBO~2aTQ|<0=?s9w^G*^UQ8$_P(r%aFj%&)<`J(_=U=lN!K&}T2kP{jZ>K3l`B^k31>?HJ02ao{dj zo?!^6+`B%*VhhE=rBaP%PrIK@13#Kwr6paiq1$9A215Ne{hm2(On1aPF-&ZXza+-u zUU~v)(*0_M`H;`D{(ygG_l3EhN0advi+S!1*jgFACT00s>W))W4#yYQswejg#V`+A zZbCi}jQ;>=ZeYx3#6?UyT_*#Q;IQr;3FoOFN`vaZGRT$me~7+6!}y=$XBP3E2C%Dw z#$(MK9YAdSH5RswCy)9}rq_F~oFD^OvhBD}inG25;#{+fxNjJ6xt>vpW-AR;2?6ag z0UNaFL9qmbs_Ibz>ik3TPsAS;vy+~2_Y`Aud`TzDWmm--0RHVNO@>n)ng@0E4-7s8 zd~)#@FQJ{|@R%MJ%j>jMr0m`AWqOP{I8b9;;r{?%k#G0};4FuZJa}#+h%nT#RJe01 zt(;-#Q~P{{RX&?}#y6MVDt(aRUj6#=FeK;cHT&`m^SrneB6FxuiIlC8QB~4bR1O z82V3jDy(xJ!dm9IK?G_DU#9;6v%fgUW#14ZEyGlI;qy$J7e^A$-65Qn8c6CK!G7ne z>%Km?KPllqh+JiSo`pIM&+^d_odY2Qr`tSB|_&J+l@%gun z8P*B(FjX+F%CdhkvG{`LwbiROe|5Z#U~sW6s6TZB;PRi^U4+8Y@oR>0l-dR&zYjH) zV|KR_Ta=&vbH0o636=N1jqegLUL*MXn!72)HojlOv?=6tDzwX9>P~a2k=xCwQK0S` z3iuiXJ0htTo2bnpak?pGK-mEF3VWogqXGd)NmT_BE{U>`bW0RoqXKq` zNk~9DAR?)t(OHn8Q7yiyx}p*~p=g`JN20JbQX^zcG&VzPrs~GX*sX@zf0~_L@Yr=dvQHbT)zwU7&31v{nWSq9cGuBjH8`lonE zv?@i&_Ux~vlsyw=D5XA^LlGOO3b)^)6*2CjNYkQvB19^QVRd%UqXh1+st>g4lcfUaGJ+g9xl_Hal1+(0$_yLyL1U;A zLPnC7nF>jpsz%MNEodd$=p#_4;t3{6g{YL!Xs2o~#Aw<%fh3(4e9U!$zRO3t$a283 zo~kreKL+O(wV|;9>*}#%Tg?JQ0#*)!U__OWacF^ZM!l4+i`<(sXa+#Nx-6O)0U+2d zeAoGj4I^c&xXCm1O0xG>?BsmzCZ|=1Yf0wi*=zG&Km_`%nEp@+>#9>jx-7}S(~<}Z z4>y}xI>%L8h-)ggsB9LQ9Kbr`OK7rvN(HTVGrYqg*0gPPHwi9mw4bj(r1e>vtz|ay zpP9qv^jud!Bb4iXR1f)Jv=i5&c3$CR?MED7CQz4XR@6=>lX8X^8x2e$V}br^hsV)gVWBG9B_>D^u`M$IcUiQ~ zkWe&|2UJXs7Hbj}1`M4RPGf_JBkZ82Nw(_RB2rF_n^03c&9UmTbJ|z{zfz&2^2<%e zvalmtL@Bd1_mQyGE*1g?iw8IcKyBtrx~ygZ8>n1PsG>)azD$~5qh)MsNfJ$@0<|^7 zXjL@{26Z~4Pr!>ylW=Gx@&VcvhX%cz_7F&$6a5vaR3k$OYIV~^nr9+$qhvTXeqOqx zoHZsRWvQ+)B-m{V6WZ$bkxOGQFoXGK^09I3sBm}8@xH1PH;5rrVYbi!Ioj*8x(-lA zzeH&Q=jx7g3%Q%8-2$WoB_wHLXVr+6pPM*u&9$DGEf(o2M$)uv|G0NjNOV8_*DH8=kNH8pk4 zs)xBY+Ujnz4G$n}6oLH&Ov{UA7MLq2Rn~OuppWxb?3G-Gi8}7G+77A%7YF>3Ch{z@ z`8Kv&0z`KuPr5?M;h~@iRGYI2Gjt^mx+-GOshV$a2}KjCsD+zYDX54`rkZM?8re`H zFB_m1pV2msh!(;OuIq!iGl{%F;w&!-@OD*GGtKedXW{U)-qyOOB{x)j7Z5DQIP0?M zb#0?n>O3&<7eDZuj1ve3??y^s8*}W=W>A}pfJ}TnS({a-qG;2Q&#tpZ(Zs9I;s%Ko2mfF3k_1v?!__PCdDrXL*Q+mndEa=xe?%kcFZ z?+f{Yy>?&X?}}MZ3)A4Nr^Fs0%kmmcs>bE`Onpi;d1^V%drMeEhZi`IY-FM%JdDck z{667Ie0RqA9|ly;C}m&YcG>??LfH`C|8Rj32_>+sc ztBi5q-h5lcnWl4#{{Y8h@pUl|6RWcLf2vCr2h*8qWsIr=Bfcihf_l#Ko z00TTv%Xsq*g?29r#=i-e;acDgd?iTdYf1g!LtfdpGX&aK@7^%r4~E~3yrT!iSvM6i zx$YMa<b6j=UkzE6@YSD6turirHx{|4 zs3PGBN9~N)`!RTqoo9b>__LPcDNoDzyso7e0pFIR!un^!7r{1X;E#xh#11OroVz!z zg~8Rs;3(kfRBx45q&3wXU;hBX^R@^0&qeq*F7d<0jG~aEmUy+sIBHE0Dbvp}A%p&} zJT17-9=veODVjLX7S~Z;Y_&#gqrcf%Q1wM9w?PS; zqI=y1k40o|vE0I^te~)Zph-_yL15V>0)B`F>9U~qQ0jmJbxG`rc)3slZirK4p<-3l z1;U=vg)gdmC$@>`p+>1NlW6Lus4TxlM1>Mz3SOefrPJ98nLtwg6`!(C{3;EE$XB{+ zvJo4?6t>+gR1!oLU=45RhL++9ydbda(6 z@MRo52GOaQ*RLP9bTy3!{u!0k;%HzESAGi=O*#2|)^d_N#g_~-ES?(qqp_1qEMMx2 z`7@8MlMtjx{Z=k%VS?%I3Y^9va?#dreayK@yF$m5+VGsj6=aeD3X@|KGiNGbcUPAG z04|Dh5=e~|Gffbas;z=#=@(fVWHXv=>ao*RISmolI!CIdqzjEzJfhx&s^}UNB^U`h zrSBUnF=bi-mlFX}(TGxQs?0XP3#TE1Vqq;3n1K^F=(6%lo6bKjp6Uny8_Icr>HzHv zJNP%Zl7q|YgP0i>D-i_zyKYLx^D5ChsTmJ3&LfnQsS7VU+@-oG+NHW`e?_dBB$TV< zoz!eKb{|!Vf7A6)#2~pARUqWqL`Ij@L({64>X&KJRE*jwY+tH^$8-kq60*4+lX6nz zk<4OJ0*BF3M#2zLkr2*dKQWHW4a5~>*hzt)Nd_Q7h`fj0&@>yYK)ey6%((vGg^X*W zshNATA|L>LRyqlvM3PO_Er=w0l?%xL{{S?)$dRUjS!uLw9ndsj;#_4-)^H+B{Sb!E zx^`C4DYFtFT>v)pD zh)pfg5TZm9t%dunL9}kE>V&eBC;2FJo~fdwSRro7Y1KtQ=o7J2f>c0nqOs8t3GAsI z5G24?fQ7eEDxpAKlvD{*L_oT!**8T%^h8&`LVW^*9+{=$ literal 0 HcmV?d00001 diff --git a/image_input.cpp b/image_input.cpp new file mode 100644 index 0000000..b4fc657 --- /dev/null +++ b/image_input.cpp @@ -0,0 +1,92 @@ +#include "image_input.h" + +#include + +extern "C" { +#include +#include +#include +#include +#include +} + +using namespace std; + +ImageInput::ImageInput(const std::string &filename) + : movit::FlatInput({movit::COLORSPACE_sRGB, movit::GAMMA_sRGB}, movit::FORMAT_RGBA_POSTMULTIPLIED_ALPHA, + GL_UNSIGNED_BYTE, 1280, 720) // FIXME +{ + AVFormatContext *format_ctx = nullptr; + if (avformat_open_input(&format_ctx, filename.c_str(), nullptr, nullptr) != 0) { + fprintf(stderr, "%s: Error opening file\n", filename.c_str()); + exit(1); + } + + if (avformat_find_stream_info(format_ctx, nullptr) < 0) { + fprintf(stderr, "%s: Error finding stream info\n", filename.c_str()); + exit(1); + } + + int stream_index = -1; + for (unsigned i = 0; i < format_ctx->nb_streams; ++i) { + if (format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + stream_index = i; + break; + } + } + if (stream_index == -1) { + fprintf(stderr, "%s: No video stream found\n", filename.c_str()); + exit(1); + } + + AVCodecContext *codec_ctx = format_ctx->streams[stream_index]->codec; + AVCodec *codec = avcodec_find_decoder(codec_ctx->codec_id); + if (codec == nullptr) { + fprintf(stderr, "%s: Cannot find decoder\n", filename.c_str()); + exit(1); + } + if (avcodec_open2(codec_ctx, codec, nullptr) < 0) { + fprintf(stderr, "%s: Cannot open decoder\n", filename.c_str()); + exit(1); + } + + // Read packets until we have a frame. + int frame_finished = 0; + AVFrame *frame = av_frame_alloc(); + do { + AVPacket pkt; + av_init_packet(&pkt); + pkt.data = nullptr; + pkt.size = 0; + if (av_read_frame(format_ctx, &pkt) < 0) { + fprintf(stderr, "%s: Cannot read frame\n", filename.c_str()); + exit(1); + } + if (pkt.stream_index != stream_index) { + continue; + } + + if (avcodec_decode_video2(codec_ctx, frame, &frame_finished, &pkt) < 0) { + fprintf(stderr, "%s: Cannot decode frame\n", filename.c_str()); + exit(1); + } + } while (!frame_finished); + + // TODO: Scale down if needed! + AVPicture pic; + avpicture_alloc(&pic, PIX_FMT_RGBA, frame->width, frame->height); + SwsContext *sws_ctx = sws_getContext(frame->width, frame->height, + (PixelFormat)frame->format, frame->width, frame->height, + PIX_FMT_RGBA, SWS_BICUBIC, nullptr, nullptr, nullptr); + if (sws_ctx == nullptr) { + fprintf(stderr, "%s: Could not create scaler context\n", filename.c_str()); + exit(1); + } + sws_scale(sws_ctx, frame->data, frame->linesize, 0, frame->height, pic.data, pic.linesize); + sws_freeContext(sws_ctx); + + size_t len = frame->width * frame->height * 4; + image_data.reset(new uint8_t[len]); + av_image_copy_to_buffer(image_data.get(), len, pic.data, pic.linesize, PIX_FMT_RGBA, frame->width, frame->height, 1); + set_pixel_data(image_data.get()); +} diff --git a/image_input.h b/image_input.h new file mode 100644 index 0000000..edc86c8 --- /dev/null +++ b/image_input.h @@ -0,0 +1,22 @@ +#ifndef _IMAGE_INPUT_H +#define _IMAGE_INPUT_H 1 + +#include +#include + +#include + + +// An output that takes its input from a static image, loaded with ffmpeg. +// comes from a single 2D array with chunky pixels. +class ImageInput : public movit::FlatInput { +public: + ImageInput(const std::string &filename); + + std::string effect_type_id() const override { return "ImageInput"; } + +private: + std::unique_ptr image_data; +}; + +#endif // !defined(_IMAGE_INPUT_H) diff --git a/theme.cpp b/theme.cpp index 4ea8cd7..bd12590 100644 --- a/theme.cpp +++ b/theme.cpp @@ -21,6 +21,8 @@ #include #include +#include "image_input.h" + namespace movit { class ResourcePool; } // namespace movit @@ -63,7 +65,8 @@ Effect *get_effect(lua_State *L, int idx) luaL_testudata(L, idx, "IntegralPaddingEffect") || luaL_testudata(L, idx, "OverlayEffect") || luaL_testudata(L, idx, "ResizeEffect") || - luaL_testudata(L, idx, "MixEffect")) { + luaL_testudata(L, idx, "MixEffect") || + luaL_testudata(L, idx, "ImageInput")) { return (Effect *)lua_touserdata(L, idx); } luaL_error(L, "Error: Index #%d was not an Effect type\n", idx); @@ -76,6 +79,13 @@ bool checkbool(lua_State* L, int idx) return lua_toboolean(L, idx); } +std::string checkstdstring(lua_State *L, int index) +{ + size_t len; + const char* cstr = lua_tolstring(L, index, &len); + return std::string(cstr, len); +} + int EffectChain_new(lua_State* L) { assert(lua_gettop(L) == 2); @@ -102,7 +112,11 @@ int EffectChain_add_effect(lua_State* L) // TODO: Better error reporting. Effect *effect = get_effect(L, 2); if (lua_gettop(L) == 2) { - chain->add_effect(effect); + if (effect->num_inputs() == 0) { + chain->add_input((Input *)effect); + } else { + chain->add_effect(effect); + } } else { vector inputs; for (int idx = 3; idx <= lua_gettop(L); ++idx) { @@ -179,6 +193,13 @@ int LiveInputWrapper_connect_signal(lua_State* L) return 0; } +int ImageInput_new(lua_State* L) +{ + assert(lua_gettop(L) == 1); + std::string filename = checkstdstring(L, 1); + return wrap_lua_object(L, "ImageInput", filename); +} + int WhiteBalanceEffect_new(lua_State* L) { assert(lua_gettop(L) == 0); @@ -225,12 +246,10 @@ int Effect_set_float(lua_State *L) { assert(lua_gettop(L) == 3); Effect *effect = (Effect *)get_effect(L, 1); - size_t len; - const char* cstr = lua_tolstring(L, 2, &len); - std::string key(cstr, len); + std::string key = checkstdstring(L, 2); float value = luaL_checknumber(L, 3); if (!effect->set_float(key, value)) { - luaL_error(L, "Effect refused set_float(\"%s\", %d) (invalid key?)", cstr, int(value)); + luaL_error(L, "Effect refused set_float(\"%s\", %d) (invalid key?)", key.c_str(), int(value)); } return 0; } @@ -239,12 +258,10 @@ int Effect_set_int(lua_State *L) { assert(lua_gettop(L) == 3); Effect *effect = (Effect *)get_effect(L, 1); - size_t len; - const char* cstr = lua_tolstring(L, 2, &len); - std::string key(cstr, len); + std::string key = checkstdstring(L, 2); float value = luaL_checknumber(L, 3); if (!effect->set_int(key, value)) { - luaL_error(L, "Effect refused set_int(\"%s\", %d) (invalid key?)", cstr, int(value)); + luaL_error(L, "Effect refused set_int(\"%s\", %d) (invalid key?)", key.c_str(), int(value)); } return 0; } @@ -253,15 +270,13 @@ int Effect_set_vec3(lua_State *L) { assert(lua_gettop(L) == 5); Effect *effect = (Effect *)get_effect(L, 1); - size_t len; - const char* cstr = lua_tolstring(L, 2, &len); - std::string key(cstr, len); + std::string key = checkstdstring(L, 2); float v[3]; v[0] = luaL_checknumber(L, 3); v[1] = luaL_checknumber(L, 4); v[2] = luaL_checknumber(L, 5); if (!effect->set_vec3(key, v)) { - luaL_error(L, "Effect refused set_vec3(\"%s\", %f, %f, %f) (invalid key?)", cstr, + luaL_error(L, "Effect refused set_vec3(\"%s\", %f, %f, %f) (invalid key?)", key.c_str(), v[0], v[1], v[2]); } return 0; @@ -271,16 +286,14 @@ int Effect_set_vec4(lua_State *L) { assert(lua_gettop(L) == 6); Effect *effect = (Effect *)get_effect(L, 1); - size_t len; - const char* cstr = lua_tolstring(L, 2, &len); - std::string key(cstr, len); + std::string key = checkstdstring(L, 2); float v[4]; v[0] = luaL_checknumber(L, 3); v[1] = luaL_checknumber(L, 4); v[2] = luaL_checknumber(L, 5); v[3] = luaL_checknumber(L, 6); if (!effect->set_vec4(key, v)) { - luaL_error(L, "Effect refused set_vec4(\"%s\", %f, %f, %f, %f) (invalid key?)", cstr, + luaL_error(L, "Effect refused set_vec4(\"%s\", %f, %f, %f, %f) (invalid key?)", key.c_str(), v[0], v[1], v[2], v[3]); } return 0; @@ -299,6 +312,15 @@ const luaL_Reg LiveInputWrapper_funcs[] = { { NULL, NULL } }; +const luaL_Reg ImageInput_funcs[] = { + { "new", ImageInput_new }, + { "set_float", Effect_set_float }, + { "set_int", Effect_set_int }, + { "set_vec3", Effect_set_vec3 }, + { "set_vec4", Effect_set_vec4 }, + { NULL, NULL } +}; + const luaL_Reg WhiteBalanceEffect_funcs[] = { { "new", WhiteBalanceEffect_new }, { "set_float", Effect_set_float }, @@ -414,6 +436,7 @@ Theme::Theme(const char *filename, ResourcePool *resource_pool, unsigned num_car register_class("EffectChain", EffectChain_funcs); register_class("LiveInputWrapper", LiveInputWrapper_funcs); + register_class("ImageInput", ImageInput_funcs); register_class("WhiteBalanceEffect", WhiteBalanceEffect_funcs); register_class("ResampleEffect", ResampleEffect_funcs); register_class("PaddingEffect", PaddingEffect_funcs); diff --git a/theme.lua b/theme.lua index 93f79ff..abba220 100644 --- a/theme.lua +++ b/theme.lua @@ -25,10 +25,12 @@ local preview_signal_num = 1 local INPUT0_SIGNAL_NUM = 0 local INPUT1_SIGNAL_NUM = 1 local SBS_SIGNAL_NUM = 2 +local STATIC_SIGNAL_NUM = 3 --- A “fake” signal number that signifies that we are fading from one input +-- “fake” signal numbers that signifies that we are fading from one input -- to the next. -local FADE_SIGNAL_NUM = 3 +local FADE_VTV_SIGNAL_NUM = 4 -- Video to/from video. +local FADE_VTP_SIGNAL_NUM = 5 -- Video to/from static picture. -- The main live chain. function make_sbs_chain(hq) @@ -86,15 +88,24 @@ local main_chain_hq = make_sbs_chain(true) local main_chain_lq = make_sbs_chain(false) -- A chain to fade between two inputs (live chain only) -local fade_chain_hq = EffectChain.new(16, 9) -local fade_chain_hq_input0 = fade_chain_hq:add_live_input(true) -local fade_chain_hq_wb0_effect = fade_chain_hq:add_effect(WhiteBalanceEffect.new()) -local fade_chain_hq_input1 = fade_chain_hq:add_live_input(true) -local fade_chain_hq_wb1_effect = fade_chain_hq:add_effect(WhiteBalanceEffect.new()) -fade_chain_hq_input0:connect_signal(0) -fade_chain_hq_input1:connect_signal(1) -local fade_chain_mix_effect = fade_chain_hq:add_effect(MixEffect.new(), fade_chain_hq_wb0_effect, fade_chain_hq_wb1_effect) -fade_chain_hq:finalize(true) +local fade_vtv_chain_hq = EffectChain.new(16, 9) +local fade_vtv_chain_hq_input0 = fade_vtv_chain_hq:add_live_input(true) +local fade_vtv_chain_hq_wb0_effect = fade_vtv_chain_hq:add_effect(WhiteBalanceEffect.new()) +local fade_vtv_chain_hq_input1 = fade_vtv_chain_hq:add_live_input(true) +local fade_vtv_chain_hq_wb1_effect = fade_vtv_chain_hq:add_effect(WhiteBalanceEffect.new()) +fade_vtv_chain_hq_input0:connect_signal(0) +fade_vtv_chain_hq_input1:connect_signal(1) +local fade_vtv_chain_mix_effect = fade_vtv_chain_hq:add_effect(MixEffect.new(), fade_vtv_chain_hq_wb0_effect, fade_vtv_chain_hq_wb1_effect) +fade_vtv_chain_hq:finalize(true) + +-- A chain to fade between an inputs and a picture (live chain only) +local fade_vtp_chain_hq = EffectChain.new(16, 9) +local fade_vtp_chain_hq_input0 = fade_vtp_chain_hq:add_live_input(true) +local fade_vtp_chain_hq_wb0_effect = fade_vtp_chain_hq:add_effect(WhiteBalanceEffect.new()) +local fade_vtp_chain_hq_input1 = fade_vtp_chain_hq:add_effect(ImageInput.new("bg.jpeg")) +fade_vtp_chain_hq_input0:connect_signal(0) +local fade_vtp_chain_mix_effect = fade_vtp_chain_hq:add_effect(MixEffect.new(), fade_vtp_chain_hq_wb0_effect, fade_vtp_chain_hq_input1) +fade_vtp_chain_hq:finalize(true) -- A chain to show a single input on screen (HQ version). local simple_chain_hq = EffectChain.new(16, 9) @@ -110,10 +121,20 @@ simple_chain_lq_input:connect_signal(0) -- First input card. Can be changed whe local simple_chain_lq_wb_effect = simple_chain_lq:add_effect(WhiteBalanceEffect.new()) simple_chain_lq:finalize(false) +-- A chain to show a single static picture on screen (HQ version). +local static_chain_hq = EffectChain.new(16, 9) +local static_chain_hq_input = static_chain_hq:add_effect(ImageInput.new("bg.jpeg")) +static_chain_hq:finalize(true) + +-- A chain to show a single static picture on screen (LQ version). +local static_chain_lq = EffectChain.new(16, 9) +local static_chain_lq_input = static_chain_lq:add_effect(ImageInput.new("bg.jpeg")) +static_chain_lq:finalize(false) + -- Returns the number of outputs in addition to the live (0) and preview (1). -- Called only once, at the start of the program. function num_channels() - return 3 + return 4 end -- Returns the name for each additional channel (starting from 2). @@ -125,6 +146,8 @@ function channel_name(channel) return "Input 2" elseif channel == 4 then return "Side-by-side" + elseif channel == 5 then + return "Static picture" end end @@ -151,7 +174,7 @@ function finish_transitions(t) end -- If live is fade but de-facto single, make it so. - if live_signal_num == FADE_SIGNAL_NUM and t >= transition_end then + if (live_signal_num == FADE_VTV_SIGNAL_NUM or live_signal_num == FADE_VTP_SIGNAL_NUM) and t >= transition_end then live_signal_num = fade_dst_signal end end @@ -169,8 +192,12 @@ function get_transitions(t) return {"Cut"} end - if (live_signal_num == INPUT0_SIGNAL_NUM and preview_signal_num == INPUT1_SIGNAL_NUM) or - (live_signal_num == INPUT1_SIGNAL_NUM and preview_signal_num == INPUT0_SIGNAL_NUM) then + if (live_signal_num == INPUT0_SIGNAL_NUM or + live_signal_num == INPUT1_SIGNAL_NUM or + live_signal_num == STATIC_SIGNAL_NUM) and + (preview_signal_num == INPUT0_SIGNAL_NUM or + preview_signal_num == INPUT1_SIGNAL_NUM or + preview_signal_num == STATIC_SIGNAL_NUM) then return {"Cut", "", "Fade"} end @@ -189,7 +216,7 @@ end function transition_clicked(num, t) if num == 0 then -- Cut. - if live_signal_num == FADE_SIGNAL_NUM then + if live_signal_num == FADE_VTV_SIGNAL_NUM or live_signal_num == FADE_VTP_SIGNAL_NUM then -- Ongoing fade; finish it immediately. finish_transitions(transition_end) end @@ -256,7 +283,17 @@ function transition_clicked(num, t) fade_src_signal = live_signal_num fade_dst_signal = preview_signal_num preview_signal_num = live_signal_num - live_signal_num = FADE_SIGNAL_NUM + live_signal_num = FADE_VTV_SIGNAL_NUM + elseif ((live_signal_num == INPUT0_SIGNAL_NUM or live_signal_num == INPUT1_SIGNAL_NUM) and + preview_signal_num == STATIC_SIGNAL_NUM) or + ((preview_signal_num == INPUT0_SIGNAL_NUM or preview_signal_num == INPUT1_SIGNAL_NUM) and + live_signal_num == STATIC_SIGNAL_NUM) then + transition_start = t + transition_end = t + 1.0 + fade_src_signal = live_signal_num + fade_dst_signal = preview_signal_num + preview_signal_num = live_signal_num + live_signal_num = FADE_VTP_SIGNAL_NUM else -- Fades involving SBS are ignored (we have no chain for it). end @@ -293,28 +330,38 @@ function get_chain(num, t, width, height) set_neutral_color_from_signal(simple_chain_hq_wb_effect, live_signal_num) end return simple_chain_hq, prepare - elseif live_signal_num == FADE_SIGNAL_NUM then -- Fade. + elseif live_signal_num == STATIC_SIGNAL_NUM then -- Static picture. prepare = function() - fade_chain_hq_input0:connect_signal(fade_src_signal) - set_neutral_color_from_signal(fade_chain_hq_wb0_effect, fade_src_signal) - fade_chain_hq_input1:connect_signal(fade_dst_signal) - set_neutral_color_from_signal(fade_chain_hq_wb1_effect, fade_dst_signal) - local tt = (t - transition_start) / (transition_end - transition_start) - if tt < 0.0 then - tt = 0.0 - elseif tt > 1.0 then - tt = 1.0 + end + return static_chain_hq, prepare + elseif live_signal_num == FADE_VTV_SIGNAL_NUM then -- Fade video-to-video. + prepare = function() + fade_vtv_chain_hq_input0:connect_signal(fade_src_signal) + set_neutral_color_from_signal(fade_vtv_chain_hq_wb0_effect, fade_src_signal) + fade_vtv_chain_hq_input1:connect_signal(fade_dst_signal) + set_neutral_color_from_signal(fade_vtv_chain_hq_wb1_effect, fade_dst_signal) + local tt = calc_fade_progress(t, transition_start, transition_end) + + fade_vtv_chain_mix_effect:set_float("strength_first", 1.0 - tt) + fade_vtv_chain_mix_effect:set_float("strength_second", tt) + end + return fade_vtv_chain_hq, prepare + elseif live_signal_num == FADE_VTP_SIGNAL_NUM then -- Fade video-to-picture (or picture-to-video). + prepare = function() + local tt + if fade_src_signal == STATIC_SIGNAL_NUM then + fade_vtp_chain_hq_input0:connect_signal(fade_dst_signal) + set_neutral_color_from_signal(fade_vtp_chain_hq_wb0_effect, fade_dst_signal) + tt = 1.0 - calc_fade_progress(t, transition_start, transition_end) + else + fade_vtp_chain_hq_input0:connect_signal(fade_src_signal) + set_neutral_color_from_signal(fade_vtp_chain_hq_wb0_effect, fade_src_signal) + tt = calc_fade_progress(t, transition_start, transition_end) end - - -- Make the fade look maybe a tad more natural, by pumping it - -- through a sigmoid function. - tt = 10.0 * tt - 5.0 - tt = 1.0 / (1.0 + math.exp(-tt)) - - fade_chain_mix_effect:set_float("strength_first", 1.0 - tt) - fade_chain_mix_effect:set_float("strength_second", tt) + fade_vtp_chain_mix_effect:set_float("strength_first", 1.0 - tt) + fade_vtp_chain_mix_effect:set_float("strength_second", tt) end - return fade_chain_hq, prepare + return fade_vtp_chain_hq, prepare end -- SBS code (live_signal_num == SBS_SIGNAL_NUM). @@ -363,6 +410,11 @@ function get_chain(num, t, width, height) end return main_chain_lq.chain, prepare end + if num == STATIC_SIGNAL_NUM + 2 then + prepare = function() + end + return static_chain_lq, prepare + end end function place_rectangle(resample_effect, resize_effect, padding_effect, x0, y0, x1, y1, screen_width, screen_height, input_width, input_height) @@ -526,3 +578,19 @@ function set_neutral_color_from_signal(effect, signal) set_neutral_color(effect, input1_neutral_color) end end + +function calc_fade_progress(t, transition_start, transition_end) + local tt = (t - transition_start) / (transition_end - transition_start) + if tt < 0.0 then + tt = 0.0 + elseif tt > 1.0 then + tt = 1.0 + end + + -- Make the fade look maybe a tad more natural, by pumping it + -- through a sigmoid function. + tt = 10.0 * tt - 5.0 + tt = 1.0 / (1.0 + math.exp(-tt)) + + return tt +end -- 2.39.2