From fff07963321a06d9f7159b9990f29663cf386e70 Mon Sep 17 00:00:00 2001 From: oreomaker Date: Fri, 24 Oct 2025 17:52:43 +0800 Subject: [PATCH] docs(qnn): add QNN backend design and setup documentation - Added comprehensive QNN backend architecture documentation - Created QNN environment setup guide with SDK installation steps --- docs/_static/img/arch.png | Bin 0 -> 167690 bytes docs/_static/img/qnn-trace-execute-seq.png | Bin 0 -> 19539 bytes docs/arch/arch.rst | 346 +++++++++ docs/arch/index.rst | 2 + docs/arch/op_plugin_system.rst | 2 + docs/index.rst | 5 + docs/qnn_backend/core_design.rst | 785 +++++++++++++++++++++ docs/qnn_backend/index.rst | 9 + docs/qnn_backend/qnn_model_convert.rst | 2 + docs/qnn_backend/setup_env.rst | 136 ++++ 10 files changed, 1287 insertions(+) create mode 100644 docs/_static/img/arch.png create mode 100644 docs/_static/img/qnn-trace-execute-seq.png create mode 100644 docs/arch/arch.rst create mode 100644 docs/arch/op_plugin_system.rst create mode 100644 docs/qnn_backend/core_design.rst create mode 100644 docs/qnn_backend/index.rst create mode 100644 docs/qnn_backend/qnn_model_convert.rst create mode 100644 docs/qnn_backend/setup_env.rst diff --git a/docs/_static/img/arch.png b/docs/_static/img/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..72a0c42ece3710869dc5a6c3afff0fa1a15e6bae GIT binary patch literal 167690 zcmaI8cR1JWA2x39l})lYA!P4Ova+&CNOlO>dxj*NkV-b$J3GnFULkvv&F`iA`#i_< z*Y7?$?z_72x!%|H8t3ag&+8qbp{9t7MTv!gfPky4B&UUdfC|4w(!@Z5|0Ev7cq1VA zBPh#BYkQ<`UcU6!?l?Y)-I!0Zh21UB0fwUO^`z5wfn&pm0fFk|BUrWmVSUmstfA1Up|NW`OXOcqd-}iY6|9$y7!mVOX(x{_nvVZu@9FSkf zHLpryYM`8v)uZ3>$FLE&!4yN&^lNMq9n+ZLwgrL*SeL`w(w){t zY{sg(8$N4e&aO}EJzuz_UwnOai)Go31NSl^8#SIG`kc3EEc>sK=WBOt!{=MVeo~dx zt}|xG>B)aLYorW|bR%;dW*cgsk8x4Q9;a)g{M)4%jDk^He#)-bcc#jpK8Wi0{adVb z(B@*he#gbd#Y2o*md?^U_1ctN(M~=4`ol(g6;^hU!!yB{0~Cimmir1N;tEeEi_BM! zOjrD9E)Ttgm+u)bX*xYvcfg2v{_u1alUf}2l3U{idE{rJ`%|@{Yf3Aw`@_atGpAd& zjk)z$JYj7Chjs#K-rvaTMq5ax0yrd%YmpXfh{D~1`m8ow>lWI=UT%&LZm*gtA_}DS z8F9TFD>m*;;wFob6Uq45!7lsX`SD_e$Q0@JT2&-*8Lvko;XH%YlX9CF>F7M=A(xsm z4-eh`UK!o)?pK#KJ2RZY;z7kn5$pSKMbByPOi1})B+*@u^N#vVVM~jE=AjN6PP%-+uQk^@BCe|=`HwRA0{#X1zR-JCm4ea0@Wo$`y&7lR+H&jBjAk zO<2?4`6>5*L4)t)*hbEDlY_{SIcCwN&zIZHk#ABkt}~2i0S$iV`O~=^jhw{n-!dp^ z+;si#xk6rc^Wn3%{L5XjM=fVut^qgcu`1<_ZiF0t^Qhf?sC82CiL|d1@0U2Ck;7+}VW%KgVdLHY_w)HB{`*U36tq^En$bmG zONl|;LXY4$v`pu5cmjpcKU~)}GRReBvqn0jhT6%Bf5u zKZ%>hsXe_HQH+GSxw*x~8x5-+kOEpdUP<$M5Xj5R*VfiDC*;dVk-F5T`=TbQbimHx| zj&6ZY$(Wv=-uc-Xd*b)5$9O2tw|SB6j_0~^5ZZd%7M!9Lo_KoJc3A8k9aU~6ttlRQ zHBQ+5IXE@izD~-kTN883{QjJ?#!%|BY^A~7gdS?^rgaQ?O|M21T7tMNPSRd8p50S# zm*A@kUqth7HvCOTzYN3hX=cAZ8%}dhI=M_07gC(LMU8I#K=;ncL0%i)rIEq6+Z|#vAcbh0bUAKU)oNC1P$U;@qX7q7F`;T{AdprxycR4& z$F`U?7}O{Z6EL?Pt#UY}FKZC%^a@&m^^B&CG3wDUf}xpeVY0-~bz<>f;bWmJ;B z4G)sI;8VL6^FDr5OBWin;SXF>%pH_dP`J7{=vT=rr#rt*-%mojAgPH;Zjzaklk+f5 z;Eu2hqoib3pH*0B=xZ8D-}RCFcHd_LX~&xrFSe(Ji*ybD5;U4{C-tTYI$jMu;Krrk zZJ+U!R5H@nPfkuICnO{!B1*`}Fg7tM9<(u={_P}`nVH$t)Z}w^h>4Hy=<3L3SyNMU z@~g-YcC_&RfyOA*x`UPeX7{bh8s|lctCK}VL76eK0kt;?37;OORXNPm1t6mv6#Z&w zXm~dKad~;!=X|UBj;On3nZD@DZKFo7Bgf`TQgZSWp~41Yd5W0M$VjXRIV}y1`R{C{ zjGbmYKhlL?%r*Ha9zTA3`G*FoLT!hg zz*MnX;Y+FSrgg4s6BX9d)9BgXY%3$>=<~I|Xt2uBYu3AO&HA3(OJw<7UtK}~ybwzN z_%JO{d$`VR8m+tZ@RxV=0*A*fZ zMB{g%$x5t6Tkf^YZd&A0#Cu zDJm%Z@*-VYx;Q;>Y}iw9a47Duz{J3?8O#Z(u6}7|Mte^nrSH%By6x^q{uEWKirNn! z+IvC^F!sM9klCDHKek86{h1>lrO)|mZTM5`(zCQ5Tm+71`^&xdQ&r1*9#>aaGxaZH zV`88xSdMX`VdwXMHV;AYdDP6HA^dKQ2NiD*z`TF|8qVyZR+~nm$>T`K4TkHgG zK9rSMg^`eDXg2Rb66H_U9eRzH-@kvauC5LY4BQrU5aLGqz|GDc`TF(W14d11< z0b0W7=xA|+2F893-Ivd?vFb)fMo@TX-aXFZYaxw7{bM%geb86`a_8^bu=Voy#Imw7 z_C(u_Uqz|l)y&-o`Zu7ssilmx|ML?;1zKdjv?{W1b z?oiv^&&m%Tytr4KY{XTq&uLp}kgeh2;UOd(^%aw)AdwuAg<9M-#fS?XoBpEVGRLa`f>+uI2#_z)8G%35<>3wLU+%GRLhiZj^5=ds^LC3}x zVM4ciN21oqK}rh2<8fPFxZqm`BTg~^CHp8<(t()#0a8x8^R4OWRJ*oKFL!2tr0`W5 zY*}adz*fSZzD-CVA|_s1Tx_!_d#l3q`THEy5-+baC^aP}jj3UHoiLcJzY*R zu6K8PIn-~->nuc7YcvacSZrL+PK*^G)v~zP&008W>nUbZVbw=nCKKMSwSgckoN@G*t!Q?p8r*^ydiPq9oRF1>th zw4i_vi$tgviHV*b9^^Qo)6>(;4^xx-tOzvh9Ty@8Yy@9bp-X>WbP~ehcGe&yM|3v3 z98;IPbiKZUV5^1t4Rv}*9nxr#j+68OBO%~ReeC%LwRJsm1p++}8Lol%x9w)?j(%o{ zK1}7GC^bjs6xLuRe(~o=PjBxO6#tiVK7tnQ7}**aC0S~pqN1biCd!$N=y-TaJrDlC zw|GL~_q*8Zf+{5VY^c4+`I{y0nyW~N%-*P;sjwt=-2=t6;g*M6wkiXP1bG0OQIfGNDa#TX>9LIS%Mp^r8Boa0f8K|NiV^Sgeiq5?C(0E9*7 z>pS((cVO_SW14E&(qYo?k|N$I>#anY@iic9PD5ZqbOh zOq!+}1s^dHhZOf-;KQL3JKhvAF)`g@qgt!J)bQ|de2EhT70Wbr@(?=qm;{%>=RsT- zal>1>fkcdi5!&o`+1bAo7h9F-hlGSc4~C8o9dlx00s=Ioo0ca_JvP;fgMZS>{}vN* zr;kfc6y8$RACH=!P?U&or@Nd99xOjN(A11!Z!$j=4^7BrN!f@eZKK-%p-OiwW2>S*6zW;}1-y+cDmkrKD5G|;c@ zTX0&h`Z(F!8`ZX;t)n9?z{|_~t*z}br>==frfvaAR0n`u`uK3UUHaJfA3iJrgy31A zAtSRE^s4BvU}I&)z`~-}oS3iCEkKREKc&L(GC;s-z6G(;;PPyvB;g~{6Et~EgCYS= z&O$&)YMH1Mi{}2-F%dGf%U?c!R(kNDAU{7|i4m$XVMMSAS7_recU74Jc8EZHbr%}5 z-$q>vPTzZb&3|FP=K0%36xD$gAXPG!^zPlavwl2$3W&Q`JB=>^>a@4F!%?(e6h$q5 z1UN~KqoFmBvH4oGT}(wVBVk9)y@al(yrQC_yxc>~1V9p%eH6lerb&sqvU1PQpC4Jj zKzVO%Z9RN7sAGf{y@D#4sKV6V8`op`lZlEK56=Tbc)NQFJMhzVlaFD^7zc4AlrV{` zepWJh&8JVFQsH&AwIOpAYvs2n_sw|l$7!(=dwF=Qx{6d9^jVa_gl}tWYf$Zwk(h{z z=U`h&i9%jSja}XJVnt0&?e(ZF9Ptg`vBgDAEU%-h3%pUDma^WT)~yM5=675hGG0Ng zyHH2~!gEMSWWL2y8(DKz$h~DDF;&-buUJ`=IN7Sks5o~l&hqN&@*KjSG^%56u34u* zm-afL!j{BJ<4AtpKcO*T{So3v*7Yk{MnYxSv*3Z*b1%=;&xvY|^jxQ-6c-C1?dCSMU7Y zoH&3L7U`GeK<_@Bn1{y1-F&e>-x>rcS|PU#V!ov5Y@H>``&+mV`lk;cKXMsXZ36HJ ze67Ps*m(LUEz9?eO`PTVSh2Xr?)>%DaWmc>k(S4dA|s!&d_^D|T7%GK-$8A0-}~LM zF;>#Mynk_Vae026rpmmVwXo*_c;k3?m$q}}`}gmF;y!DC`Tkv{(!icKMIoB}78%)! zlBOj5WHM9l_|()dTKOnQh;N@Sd<)@CiB8WMUSn3z^xj|UG4(yogSA4FKUvB0C^|jjm{lM>;xgo8x7YS0@aDf`SYT zPhbxpeNxL)wE4iQ!bwW>0zqE$2AzBh!ES79gsG1!sds@5U=Ou~w-5sZz%gAtJ?_Wl zC{~|1I5^lMQw8i(XP&vY$=2YP6`^z&wVIvm_i_WNgtgUf zQXkjB^v||(UWmdduEIhNr;=yKJJ&~Jrm?pLx7THVFD@FJF3CHfILI;bF*+_`M+d>v zJ<-zAl97>tx@f+OggOgTPljl9X{pn}pFTNDNMi5Q`;B3v$@SIw z4j_dR<9bqWn}RQ2V7GM*4B)hbWfmfcSoRMN9x^9ru=1z%(b3V#DF^jK-W%7sDnn68 zObkHbefpg^&d=`UgigUIgur;SpP#NSDFzM<{mC%Wh2LUWCDgOEUH`0^i-e4QuMVj<2q+HYq{hV-^*ivaPJL8T`Gw&?bi%dO<*u(PuSR zXz**%6`SyN|+XgJwjkjdWdj%R?OLeOzm%{C+I%w7+)XR2$a&#ehSP`Prx;0gu zCFGnl^AcAVLv%=O;rH>*oatAa!JY&b2xZpD{i7rMxu(lEOb-AGqvLkk@E1R>2<=^l z5Fz?-?00?n5>Rsj^TR-er@Se;MFu3))DrHS`fu$C$ef#SwHi@d1NjwWsgDj1?Iypn z)szO}BYUT+endn@!wC5X)0p&9Hsr*Eydgjg8R>Wwqqdc>#-!e5hY*QCO91CF8mybc zpJF*8U}5T-Z;iN2Ynh6_8S}@Jgyk`4&RF>PKzl-X2chAv59Y#{7p~8F1zl+^WF6>|sE)v7bteJ| zB0@raPExrw|N5XT2q--{x!~$*LC?SeHg3bJXcLs=Bc^vs)Ukq2^HRJx310q%zEBM! z!=kChy#N&vF{|z#91vlkJn4FUpB%?*Hnip`%z?ABvv7_R7T{ zx9)+O00bA*{|C$oY{ZdJ1mo(;4T=nks$Q)8G~znG!CAf+9zgQ4MiNHInV6Wk)Ltwn znKFBR&d*S3?xpCxn z$XKa7c(C~UHxL_;p6XL5PJ8)}KJA}g%+JpQDz#o4%HwX>4V1}_Q(_#zSlEVg3-fT6 z_daI&tIhFy;nHVaG=44dbh4qP`h~fQu@;~2qDW_&cS`{Y2z1TCNub$8ql}7*3LIQ> z^K}R|*=luY0SPIoz$*+^m(DP995kh0C8m-Qa{I&TlC{a!H6Kk%b|5;WXvfQ+MsWyJ z@mb-hiUF(ij_Y>A!B0`(1Lx+hA;2upCT%OXCn~zSx)fQ7|L)BBwFaU>1iTSPkuLwXG?KKE5=Of>z2Nu0K3rT}fP!7I zG-1!FgDM@!$5M-1@}_9zPuIWXHX`~t38#?N?>JUGqe$cPL7QEe>NS)rt$gALIcQ}i`T6GE zYCp3De*$=YT=WZ&Z%bF#3T!409$si@H3%Yr@(!6jZrvbyd3nr`ZxDx^CJi3H3Lg&+ z4${Z73J8!gt0_C+Q;V_2D*~15fPvnc}>EI_PIGzPEuJ_p_)IC_tMNj14-Pf z18RtwFk!;4&4PdGJPxvO$^a?)*CJ~E;$^b&e2CuxCc zvoGz1QN8;^S^}6E5Wk0HR}rwp(dq-|02medAfd=htAC2N)j>f*Lc$dnca{b(3|Z}` zNCuvfa_b%9U$6XcVH7?}!QVSR4y$b4_7ZG;(+g}2c}!<&YU=l!z{wrd*U{-%b^(U& z&(@Z`K$@x7T3$SZB0zJOnL4-Z?Cb;<_0Z$p%j3DRHP=!{BA>ID5F;!7Su{LmEupx# zzkT}#d=j)BtNu(Mzz4tw+>}C2x9+|^pOuW40542D7D7lkbOCf~>*?XsNQeQC!^ZXu zxE;$XT~1Q$5Se8854qax=6U>V+7=eS0bQwQh#d7xUblC4{#_r%_U_GYn8%P?{{s8L z;}9X2Gcqy)4LQOn%z@0ZV&d7eXAj!IiHyxyt_ExX_ma$MfPEP8wD6dDQ{?h--R?v$H=Hq zD<4`hAZoxxK##PVX%vjY*3V=9u&RI%-kox6mY0)bWMT>+yqX1Q4fPc|_+lgp2Q>Pf zl@;_@1nrmH+$A?{y(5yuPT&=65HLBjz^qiy`4;FFP`n;!|C*JQbUX(T4*C*dgyre} zG7sVd-BCPBej8|dOiWB+cy}x+CZJwKBqfo>b`fEP5JU|PzH#A^o;W*b3qClW^J}*5 z&wT&>y<^iU8g(8(8K{y8Z{FyZn25uC0bxlRwY;;#O@I*@6}2!8j13GykvZG5jZ?Xb z_!(-SwDKDo8=WP+pzNS${`$!=zl&*GwAK7x?d0rChCoiFr>6%}ga9i9V8C{#exQ9A zj0Rk$O-4XCJ$m#=Q!{(eCR!m^?FL$HjN}hPA2xrRBI$Pp#3uaJC-p4f)q!kSM`X?o z4-7!Q)~Ly%11otn81aT^1vJytV`KK%&Q?2`IyyS$4q|WtU8a6x~5q(B9&y}i*sH8o{Xrmd@6u3tDkZ4|FW415?IO=M(C z2b5#rj{`gkhu3BSMF3<6E=I=aDG1De(j0+OUH;RT2J9ya6HT!yeU8s=E4t!qD&SH2 zAr|l4xg!oF40L{=K6zb`_^Ry$&H+b3TKw$qcLc@;rd`7-J7qZ|uB3Wkjo}9wc_{(i zYU;U6B9L~M03%q&92y-3b~%PZ?qIPU^6~w&J{q6HL7*$V{%+Pj>B2KLH6@L@4=MnZ zL@28_2o9iLFw-#1gTlhX8p5`fXYet=$ui*sH_Zwl6$3?DT6+Fd3|~ullo%$N&HIlZ zJAqR*M%+Yl#BPWKCY?QzaE^NXmp9PAz@1-T?)V`iAx+1;#n3!@PZTgv4|IX%3A7+6 zkf5iO={Gnp-sm;g2mO)}5fS(9-OCVhOXagxb9Z;2sVz;RtZt zrD0<{_I^YB@`;L`kC#1xc~L|RNl1^DAYH;ogqhiD_~Sz}^;+je1s$D4lM?F_mDVEQ zh$X!aSEHkGpn*Zj^&T%ZxBL-w2)GQk7KkCp9KcSFjYp)M@2bv;F?f*8Zs#E{VP>dR z`<%N&VE&Hc#v|uJFyPGU2N1ddRTy^R5-^t32$9B)d9YcT{#c1=n2Wz zTk>`j7NaW=EKPJ~J5D_bmGiJ*ZQ;3iR%syQ3))mvhZd|aEzJ<5sMOT6F;hRFRT?k< zPR(Ded2!=%*f0|IKpFtleULmDB8+R%0&sl?YEEmBAQzXzVrR^aI^yel1-jpBYVp)} z@2c!3cp>Q_YGJA&L^mUi0wnVhvg;Ou!jCLTn%983Q~0cJMnx7DmizZfh|Rc?pgcpQ zJTKFSE{8_?qF{8g$gmo;v9>ULn2i0S{eeRl$xx#u;Q1iUm4y9<(548)<*BJxkm-;K zaQeBd>oD>AW1^v1nr$5uocQkjmM_wM@R6hE(Y%uos5;P{R$OXx6=K#0vXL=xcvI}4 z;`?15>FMg~y14KPc?5OJYeF#EPLwahY-ZLwt(GBjN5cDLsV4!-${l{2xHS8v>k@=V z#HjZqUc7jbsPYs*BCvdS@1k}&0{U5@!drozfkfZi-AxvB1ddpc9EVuG(stDL2E+XM zAq;a6AYcs*g3lZ5iIII)z-&*~zOaTa4*|eq4|6n3A4SQCx1C|+@qv1a7L*M*8b-ko zr4iRXt9Ds1WTdC3Pd9iTz$S`#p}4l7PW~0*FKveT60|CbK#xK4Pug#lC-q6l9HymgHkm+p%n{!LoIZ4 zzc;T8`>}Xj?^WH3kX8-TqkJb_K4G_to{*3L0xk@aDtUFUj<=zEfbKb4__zW{=US30 zEQA?lfKh8h^4S_nd0OD(Na%qG@b>WmAx|dTKSehA_22z{nCHeIb^6nV`TVXfK;q=H z{&{kKUSisuDMyBI`v8y*0D>EoBw#<;Qt$J-J%Yyf1W{K-HC-saZNXm`dZII+dPod_ zA3=Yyvw1tCDPBNTg#!!?3v0u+;|JPQoT2;{0tp5d3xce%xj7w9@I0Q}W_(pVvNBS# z>C<3Sdg)#+<2o1F01v5I;!bF)-rE z$?cwAK)nD3@Z}0M6JZ4Cbx;!B+}un|sG~ZtFfjbN%HO}20v5H>fF~aM5Aa9JfBr;v zSd=e|i*2{Gv;gh;)XK^PI2qt6!rINu1jupXLv600&3W%UD22kvwC=!of2`*x^ls2+p3 zxHumlk@uQ%A!k$veNrzpCC|&VBS5}N_}k{FsHg@-q*gnk?wiRF4w;#10tN_zZq=Dc z;H7xd9&g=81ll7)+Gz}xFkw4)j6&|%2K0*?Q3@&&>^k7@N$O?#-B#UHWx@~m!}^j!v{{ytFh_Jm+!Wf?yCdl5DzeYxP?pLzvu?S z2Q&d!!sgeE;1z>u9HdAf6KY@yP?L$VI)J7e{P^(pkf;>((C{!FbL$NxN*6wWSrCi` zI(b^4b^ud`MfEhBp$0Ywh@nrPSUBaGH7Uf!#9+DT)x}4sq2+B~=*m0rHdnDTdBJ z`S_gmmfa_mFA_$z<>gu>V`+VVU|s?-7=ygiqRhg=g3F{qsoDz(DPSI+X=LLFsQpjF zURb0eUm#!Cn&IhUQUe^G`TDu7X- z%uRXXf{lVyrvGEXDP2E7xy3#?z`A0>Jw%*9q|-uZ*`OZ2e?Jd% z35*AoMJ7(2C_B$H)X@0^-F%zp+d*lpn4qGf!V#d{Pf}$DHXMKfOmt2>?CcQcU{9#f zFZ}wIzt-pqP!zS06GD3$^gXVm+mw_B)jw$aS$+nYjaDG3zT2PN&IVuAi0yqlJUm4( z7@3s#LCI?Ujd6}}!x2@EnZQqXd*L#$<~nbnnqxb7T{-gz&q^8!qXAUc#ZFv-v>E8K zF!qu(c&;t1^?v^ji38(B6O653wF!_SAR^+k8!yEqVvg&JZ2b|Jn3y+ei;RqHUQc^A zLl-c!HAb!|W%%U8k?28a?u_dulKgvh=7b=xMrzW8lamvkI^k|cih^)IQMs*;h9%~` z=zxa?ZCa|Qk7C@xJq64S42Zy5b8^1zT`nEV(O~`2*LRndl_#yQ)F#+c3b+;`3vwX} zvN0Qe@PPLAVsGXj`p|AVOv-6$KYZACgPET^(JL}Ig3${e4Rmf!`QGv4!8v~=eyPK7bEr4ws77DH$7AB@Vhy|d93Pu$a6-6i8 z!DqPi`1i9~DN#jE(lphNq<0OXsf1mi3c=(%-uS9IEUfD-+aojHmZDo!u;O`H^zY=H zx;ZTV=C6GTnvQ{{5UUumJpzwX3r9@2pqUvkoP-fe882tq?%oY?KFCWlp#;-J9Gxt< zZ=*+??uU00Q&OrNTGxF$jbncmpVdCK0-~)(~6Lz2Sg{tm8e3;KLX+a`B;8Ml;q<$*}pUH zS6}?|9Ra!D%#v!Sn-dklj^7b-qE&4qG^9LK1l!ou)Hz6IKFf)EXMeXI@RQcbV2GlC zmn&3fsA?*NN`}_r4bGwE3if3NXIWK<-NN%%(&0=vk6=L~#G-N|Io(qcbYr=`AWLyv2 zHCdWW7#kV3j^QvTVORw79w6u&jy^8#h7CeRLz}EpkjUaD#(K#7sFAgW>s_x!8EfKq z;44hP;08?=8WA)~X68;%9CLE$85nZkzi+Xv6mXoq7_11U#TbeUpx%GR)?yj>b9+JI~UaP)?%1_qOelvEe}6J1n?3_hcIf$ii+bbC*r4FNHg-r0kh z1qOD^)|Bq|Xcqn*7Wc?;oSmJaO5YLl;0gZ9cub#4a$+5@El0CqE~?;#CS@6T7h$ay zX-BgD3mHnY)0hattyufm0}rvO01_2rO-*S{;t7pNkD@6N;_hV^t|UW{sjA+%7@zMS z9>Rn|LPAoCoY34Xsd|vy_vh=^uR}vx<32%4?{1C6*e!m5GGO|~MAJP6`*r*6iirk* z;S_vUA3l6Ym-LgkfB&crU(yH!-x+tHVQKl5??l>RHyRyow7exx>J8aqX%#fg*Cr(; zh2hcC%Br)oQ$axi^fnlup7W=|F2d*v7MJ%((KR6n6!TstieUMCRHhGJMvQGL%T`8t zO|Xx%b8tW*KYM-NLGm-fxX0{*7qj2wk^LrX3?WBb2`scM}E&NPZOQmn;uc zwKX(&;Dnp6&Z0IK(bu4uYP0LW*bie^rQ60YFtNY#@Q~`q^Zj-h4~_;|Ncoqy56ggE zg);6XBp0s)5T2hBw};Ln8^}*lHf9DavA0o~Eiyr@Ezu0`y=C+R0olZL{N8mmFi7pO z-2eOc@6l0+OZ-C2LhJIv0$oB6d^_i?6Ir;e6Nsm`6e~&FU}vruZ&FLV1c@fT_SpV)ng+g3)RdG4)W3H!Ud8tjP>@M~*pb^@Y8LgXmaTuHB> zQ^02fshF>gMS(Di=S{cP(eUcn0jLaZ_K<1NfIhp|S2O$DEv~E_ciwi?=X?isv_FL} zEax+r((Gm%QU>v|=|Gv)7x^@{L2;zIZ}m|cFV%)1pAAl863yLT&d*o={0VIIxBD6V8}~QXhX034o?_H#eQ2-P<)-LQ>3S1r8OMQYF!RAseFPN%B#QEhP4Jk2yvQ)-Cq8* zw*^Cmo%HY9B$Yg~*s%Avs+!O=rUur5SAas_YBs;;;Ur>7t@aG`Pp}Lc6iN7A2zeF) zGkX)%KIc_RjDaqQdwY8pWhdVgIRL)EL=%b_+O>GYUV@e%5D>7+5KPYFtD`1=eEQ9Mlm?sRljj( z&~1T-K*ys3IWx=W?*#N;kO%G%5I8~4fSDQG5ed_w!NI|yq2GS_^Ard0@n!W(f{qKb z+uW-i@qyQ@k&)5SU;<`iV}l&x3ILMm6UYugloovc>~F_Ie}8G%KQLieGnjF3VW~u z9s@u)K-l=6|FusR3wsCCBwbJ|0U;sMBSojD$^Garf)2_uH&d~7@hc{7Zbacx2@P13 zae{)aR2!Gvzw)Bi2+E5<8g6f&5)+>a`Vr3ftFeXZSrRU_V&dYL(Dy^m zSeA!u_<`*vsKwO{=;-Kp#-9q00m|BV6$3qePI>u0-1i}Pf1A--j~X!$LEQqE=j($M zRRM?{;H6*|fc(e-x(Y350p=oTf-}Ii128vqY?N0ENJ11)F5vdS2PGN=5k=Tf=mzqd zlrey)2*s4QVW9Fp*&QF(7f1tgb1gU+rASxQX5js3fnHjll|)uE5as4=p)SS;CjWl9AGi3J9jePy?d9O z+`Zs5S?#EIV{{9H7 z-&xesYhZI=Nc#cz6yOP=VF0Ft0DcV9vm8Bzq_5bTxsSIu__Ga)LhUD7jIajD%u=}S znbctz35bbJ!xZ7pg0vjdy9}5CFqlq}F0|~H?-XEYUs$;3zBwK%dF27!3-Sy~IG7Va zPK3_`&lu$S#%!Y~=U&LPO5PACNj%dc6xH1_&z-iB(pG_7x^bbwA;#Pm?Cj`(3lu14 z#}LJkhOLX>%mMP#5sbwsTNp6kzcz=AKiOM^gh8$6ZC@vd>Hv21m4gEpihS(r*W2S| zxf6DzSRoKQH{b}&!BDgS8E_It@bdAI!Hu^^kA|VxfJ3C^EfP>RK;_HHwRc33fxZS3 z5GF%#R@U5q7I-+Qowc=yTcvQDhuY%}*8p4;`}&pm8{Umx@*V*uZpqTWC;~%41UU2Y z1;cA_p8@PS(iyA3nLt-(QBBqW*aH_3z}*GLxVfVyN^QIVskqF{n~eHB3T!;;Et(fD zE+^hsw;dZ=R}LoZ+(EYmHKN978;l!J{&U7Q78e(RqXy>b5OxH5{c~7y+&zh`n}`KK z^&EB^G&}Gq;HUNd?CF^RHVa@fSSjEqD+z?+(=r-g4fqEe}{y0h~h zG!8GI;J_A|EcMHVzf=IL{ce#i2LT3bG>BxVp_?F7jt_n7?cIQ>+OXWRM{v%2ac5`l zlR6FD6oDb-CQ(bqUcy3v2mf%@*w_g7fmC10`i74)B=o>M28)6@Yq4$(1*HlMS8w0G zEzm3R^70DgzFl)9qwN&_3i?V_-;4a^5*8|w{J3VX~x+2 z5>)Lrlp1YzriCQ7NLUkiDIPq1%0zz0VXmo2oBhFq2hgF_HhH1kpsAn3x!=$TASGXe zboq|+FEti)iI2aX9kR8(xN9*B$)?PFtt;QOx$(J%T1 zQ3*iw`?3oZ8^8|9b>J!i1qKLp#yoKAvaziV=Av_whhplN>5G9D0K!(=A?Lk$L@3&@ zX^`P?^$K)o=-pr@8CZk+wx7o#e?eS;?$I9xlr!+7ui)R{D)96K_X%urkSLbe1W1H= zT5N<7KwgQsZ<61+b2nb;gVq{c#90f0_{YY<(Pky)F~(W>W=b&iWV*)LL0qNV9$+`z zfCzpAeO2(H(yEV=I+lenA{6hA%JI>c{Co;Q2dehb=!l55f$ShqF_jphT{n22@;16j z56H(WeYNhVRg`0IT#6uK7%fTVlj_d~Ns+MF*aY;#IIr7**j>7SWYawPd>vM)Chl^2j^YHL+Z~(0dMxMdp;YVCaSt4$c zmN<+BP$op-PECh}4_q!NJ|2zR0+Mp?^uj+36dX8+02HJ*$e#&d7K8`^l^@>{VF}j@ z4G4Fz$#tw8NK*%$&cf`bnX3TgAPkkhmuHRp-#O%PRwpYtP@3r9v;?AJn_Yi{J3J7r zU}cz`nlfZ17I-$a1hw5Y#T>vAH8nLDls;m$`qzWT2!TZ%TW#Kk7D`(N&V$cWadB~g zcc5eQ`1$>vuqKF{u&w-=dLP?vn}B=xoNiacY$_W}DRC|UB*si$;kFM#yCn?BhMxr@ zUck8wn#A?R3%sylkmzdQ>LRddU?I#0s~5mA!zUacF2KeLJ}GVX8^eM^ZUAoCWR*Qf zLQlKJ9+;8P*s@QcD%*qZCPlk@eC!A_T$+GAz&Z_9s(ThFg>M+}7C?BJKRAVWD}50; zBY?wp)2RryVAxoVWrpB~I@PuSGF}S_*h#XhAe1M{l=HQ{JUx{e2|dbbUjrUU(4XeH zgBycONf$mrkV(1p1G;#n;~ZSngr{#8Z*OY@M{d*ZH*B~@5MKs^EjAy$Y$#3u14tf_ zxUKlLFLz8DS+U_>G5;GdtiY@SML*!P-IU8Z9|mayju`b0-06G<$^}rEKxPY3soB}t z0YCz0@^s^?m*vMI@|uvQY7ZW4!2HrUeaDIctgv;UQ^B;=BJ*&(7|r#;ge>Ui!I(rX z-DGg3$H)jIOe+|X%1dG=>~3xlXlV@rt%Ey*`1qlS`8Sjl)hY-HP(HzQ?ccwGj*bo{ z)*s3DAVsJTA3i-lT&sW?reETG6M#Fc7bbD8Bz$rnGw?bwD85GFpiI65r_C|&XBHii zK>SK%(U6ebcUkHN2005XSFjN-2t{--$-Xo53)5_ zr{TlE2@He3tN?0QxbOiEkJVj%v$_m^=)W+Fk5+nXriq> z0(|ShHHCDXbtVfH3S4G#gRcGgbGVQv@DPM_gbFC&nA7x@m6Zi`)q*!gYAj?nt#=u` zxBzjBpf16eL%VTlED5y)Ih-3N697 z!Q&o<1Z`o@O^EW4Hv!ryPeGE`>=3eEN3 zDaX?J?xQl2eLmojAzTtw?n9#dyA1*NxWTsh6-Y<8Zik3M&4UY^$N2a-IN*Gt^pSBH zv2t=khm`wOlzQWLfeBC`hZUvY@f!|ufxM3q}$+P2_^x`IRBd)6@FI- zS#ZBfF@hjitXgO?C$ao!6+y2bAUII7tA}gDuiXQkQ9N(QC_K4Q^f3vVe+r~>O)ORU z-lL4+p={lqXDon=j9f{4UIg7N6YTz)`~{<_2?@y0)!3@_B_Cm z@m`H@TYkrOO%w}WR{)m85E=9Oe1r&moOm30`dg2gdOxF(RTI(H_Vx9J#FHR#4_Bbf z(T$))Oe%f?m8+f4+dGa^M^8^S*fK;05xLfW1Fm6#!NZP!2Ze_u0k>}T*hM?WtRndD z{I4q9pS_^<+|VOQV&V5347s8@T;R3^xNP8_bpjC}a#&)xDRk_9fq|nK3cf#3iX_2| z4fhU=ZfU<4ZS=eLg}w?C8uFENY@5aEYPs9&LLfr1iMIsE??ScOAXyJ*uKoQ+g ztj*BlZ%~BhiD}_Jc~|@C(>$5%((@5*b`n`J52`rM8&dAb3oi`Ny816SK3?6&k1;Dm zD+SD8o+XSRe@X_#*i6jQHL3}mWCqK}VHPv#vQIzCCsYe2s@qQkQ~k&I%n zQv!O3rG7){spil85^R}p2OQkKV1IDio}O^`|LnI+qz$9kx5YiPJoJf#PTeFBJz^!O zdHfBBtF=)pm`>H|)FN~2Dorh-zmD1}EwP_{$eGD$B^kF9;Iw6`uA0e6)Fz_}TW;OW zoWjFDJe;3Z<)(eYEp(>fwf9XTs-!fCb$jd&x@uR~-d1mayJ>^n1 zu_+ydHmDwa>dB%7*Ic_Rx`;ORx;@&-wJ82R|NZ63^D(q=JB_gPwxTsGI;w0xLLbad z#rm}0{&NJE+`Oejf`0<&BJK^vF9O2(MjX#jmCF;Z>V!&8FmW9=qfa77OqavZgKYdT zr|T?757mbSPocI2aX?wuyu?89zN4OoD{76XWf0CWqf44`?JasoVfH3_hl~}FLMIIf z!h0EWDWr7mUw#cVc)D38qi&Wa?uDD+(&`$Y>(YAM5*Ei0r@Sj7w$$okIJnEBV^m zXfG?R&uXQ(1KIE3MX>_4@`4Ix zwn)}ZoO!+4ZM2A@#>2VVsm!hR{zrP?-xI`oSO;)Xs^8((pOjxh|3Gk!XX`7^Ad zZUT>5-b`xmqlr_QQ57@3woklbYdli43|wWsf#jIwHN+uL;C(9Xw_XRDWh4E2e~Z%M zqHy}Z_sAHvM_}{+?_Dqa5}7UQrtqa7?#cY_oxCLbzwd<+`uExwq5r*^1;z7Y%l&^Z zVllm(fs$K8jSsD1iqG< zfA6Sq4$h@8+a~JosZh?XlFCK6dBG1qm(y*=n~lU&GkU-A2oa5GKwf9SEoLzB?N1${ zF%mI7t;vT6n`?2Ey003=Rt>m+TXfW2%}@Ji#Y}z;5Mvps)fpRmZo+-XZN{e5XJ>Ik zWZiqY%UCbg*Qb-jwvqPVDTEVI;SwF?BaA(4wb>-7%qqT~`ku5+U40p)U6{-5CaQKx z6YVm3Ms<5F$bIZ-aXcxJG?la;YN;nfOp+pIV92{Zw5VLgC&wqbVqIwCXq1j&7bh-P zBO6Qk)(D<*)aN**Fbs2Xg>vJVA*Ff?rl|h8hIcMlxZ_+rkmw<+;aq&rVcM-;gK?+x zmJ%|m}yx!K{uCDUDWXimyJ3k)iK|#E5J!h!~$s#CDu$a;HG5T!pLdDRRYz5 zOD)xHa`YZ`uA~Q=#KK7kihvQ67(rukDli8dBQ3nt|}Z6v=G^&G7&5Baq1D6xG0 z=sI}ZhKz^n<-8o9P3eh>bf5HE@($K(3{~<<*w;T~nX_*mS*XutIIJG83aZ>9&!G8w zzLR_Xb<2g~`px!a6+Vhx$r^?i@6f?;N!y9Vc}CkpiyQgG$Lp`6;VoofC*RuYTNWYG zoNvwcIKx3W7Z%NuYekO{Gd4?ZaUWmxh`xDGLP(z#+$dyZV^d}&ro=(38+gL8H@=Qj zHJll}^O{iX_YzAkTm5fuo#&~FuAS~1qh4~y@+|7DM+|CQIt4!+&(}V9WvKcO`wcyn z4%P2mIS{7$2?Puf9{4f8l$YVgK3>=h03-04DGp++pjN5vZ{(lsQJ2q-rmL23>1=lu zm5nX#YQ!denfw1(`to=v`}S@7IwZu9JxNj~Bq94+6jI4LBwLaeQp6xC*`<`7kVr~N zBxC2!n#hu}ra~d4vb@JUzxV#*{yb0JW#+oR%XuE#d7yBy=V8;`x38KMW19+#il8|D z5xoA-(fxV*K^+S#SJyAJ>IDwZ#1{R%%)GzE1J4DC8nK=ctSz5<|5sM^XW!|g>mv3w ze;$tiOW|0)V_w{`+hsk z{j}0J4Wgtz+~2(|{PAMI(AxPRj;f2r7wujwSsCY0vL7~SGNz`dqYOe9cES1C)}5{1 z9kp@Krw7J{gqOuv^S3N+Cl_zH z3hSmVsvYMZcx35IU3{i`z~t^hJMm=uecs1EK5a{StiZVXZ8ISPjxW@jm6nF60!Dn` zn1;*=85hv)5BEqs7PNA{GTFL(Q914OONP@g7&>qLEH-xzFp{F~`|e<@;522W`&%#T z@Y#eN>X%&>+>DO55KG(Ijiii%`-P3s#+n7zS!?~|^|CvCMP z0KSdQXWfFHKiC+GZv<*)G>vVA zPNA`}S1l}5Syt?yFd1wp?2N^B{b;a(C?wzTQKlw3G#*Ry$yTWhojRVGFWm!^ujoz6 z!V#~dml`)3v41ZdNaJ)VzPSHT!mHf)camWhrNFk?`NQ#$T;y7LT7c_-ro^NT$K_ta_Ws^aI`i7q40V%< z=QjR5SNUmv-0^Eo>fS?@0v88QG57@!h+S09RC^?w{Bu8Aa&Q)D0pFB5rxpQ`LCXjT zH{#9x=R$)=jrNWsS=zWa#w!0S>>|A*Tj9}n=-2fqv%6lGn5UL4~eA* zoiehidhG1T`rS3){KDNWX&G}vUA&trXL?OauN4peIlrmX>f7v$BoEtHN3X+9E7E6A zfk8td?Rlo>L5i-h!YmUEQ-OdFAO%!>)4e%GTO!l;i5D~D2XzOdx8K?R!ghrW5tZh`^i&c;>FEV zhk93e7pa#S44o^xWeyV{mY30*Z24|JV_bKwW0Etx7Dzx-V!5$aUax#@(#&A16o`VCo;g-pR zU3L$Gnp8x#Z)W?!Z569oq7%l?#)KS`!k&sCvp5CNC0UmT2UhGBmLG5Svo{oS6xr%i zJ0`$yS3rMBw03BIL$Koe8HdGWJ@+2?)PDSkusM3vV4Uta3Mt=@`xZ(?*q@bs{>Ez2 zdbOgjJ&si0rgl+hA%k3W(cqr}^YRJZ|7kZtUI9M5QeB>CX!$dEKX>ZuBeC1J#Xd9s zzERM+M{ZnWCyowk*f$S1rgO2|p0W_HkzUx?$M%*-EHMBSjZ4v?M_OQU23v$1SnT?_ zf;UQoUp?3kEMH(~rK>Dtd1xhf{>o#yQ(;#uW2I(Z`Fd|TT4?ujs^`!B7sA`cHkwnM zP|k=QxX35>uN;ECPVV_!?0kFH1($}J=Kzj=Y}qxcf=N+IIpv4z+Aq2zV8E_ z9)Ccz;Sonc{kXpd5V40Po=56)20aWF&SGk#l(npC>@^aQh%keUze3o-lw^lQ~J(>q2Q@ALVFh+OQ^h? zS>Mrt5=J`LPDZi%W|#|NK8Z73u6VCQA0b43FA~Rc>(;K-uMDfLbcaP4IVHISzIytw zl}mr{h7 zE<2a!(osHvJ6I2%uDTS+-}84_tFp9oPfMN`hosH{HioPZ=EVy#*S;GVSjitZD2K+x zno?-D$trUA=x#Yddd5%+d@iq$s*iMY5=DyR1LtCUuMQ0SOS{~74&x2?3ryKMaR zdh=;NMF^Q%l_pd3Qzwn3d5iXu0|n;9$Q>V;yY2o!fv1$ro&`Tw;G|tBuH&AJf>7&6`2wfVe#_<<5l*zK2*Aa@Rz4UYE+r^`LApL+tRLKZA~x0%<)3E z_dhHd1MYmf!-cG-qNHiIVV%uv`3K+F89(EtzEz@*^8HBgyqj*xr(sF*V=6JuX_8%I zX>&zt3;Qr@?cRFj^EWLZUwrdw>A4{1fM@3_gQ|65bP)&ang8;qu9ff35$W80C|yHHSa<*ik}LTn*p(sW8Jt-{O%|D* zkdW|kP z`JlBt90q%rx7VRRXZB2=J2;{le(;DDDTpf|{^;k+S?z|cn)9#rlpig)L>hawSwBX= z?^Im)fcHy1JLy`z9(PhE-B`a*&~<$&4-V#Jt$8-O%q)=aU=_^Z1xLaSTXs>=GyrY* zu_ab6zIZ+`FaXVZATD-VTnJ@POrA%AG}uNZIN;*qc<$#xOG*>jR`{OY8xsH`3`!k@ zML4OXpt#aPkd%LtW*^-iUZ2T|_YJk%Eeot2KXPIq zfvJPO8tmIU^GM1Z93IRLTe4h4mmgENrw0rcGDzF=pd>I}0|iP4E@ z!r&Ye*ahvR+GRy7H62UF!-pxc!4MgNETMs!kPLXe97JRWydYm7aacyKq)Y68#jly7 zD$2V@g@qpXL4McXjWAL}%nRx+$ovs*AfoPPnq{uKL%ev`n}X0Te9Ofr$OcoElG2q) zgf!(6;CmVn@8jb$99<~f*-*Ph%H&q}OQdCp;kVDe9E=s$dV?1j=jj$+Dc2J>6#xGwc^1M-+^f1~d_4MJZ|!5& zpq5ZdCU^9`7tstPrarw=r70yf3T_`{A(CY!3f=!x=4E_iETI$5dg_G@-b2?UT^ZwA z4U-NMhCoAvwYQQ8#4uHb@H33A9Y+P|zT26b&q8J3=ITo0p&vcs(7Z==k6+eK+~J@( zvV*NTpZ@GRegMSeGKt>+NF)7<#z(>%T0@4UUx$NaoA4)_xz;p6T7LpTOn9;?!f_^L zRykohjVuHrGHp$5&bg1ebkvM32)9!P#PGNa^3#Qp+K7xqn7)8+ySAtP!LEho;{M~l zf9gJhooPMlz4ay>tDx`wA3G(P!Vimw=ZtyS9T7Tmh&K2Xm)m-fWeTwgUceY=$V?f!s|;*6@`%L&!M*w zo5<_AH+3_I)Z;sh9^#)zk31oKfT+l<8*4$@Wa(>HPI)=eW34j=yxcw0JcvYz8d*OD z+A1j{hu{#aBZ2atNE@|_&(T1Tc!D(6>M2E`>VAW|ClEXth&p?7d@sY&VigbcX-U}1 zZ?KVRqlie6l^i(C-!M4tNILM@1jDuiyq( zf}VpE9OK^2IEqWa!qygS=zAP6;SmuCdhC1hVXD%1ie#?}x3i&ungD03WE&gOnOEvu={%g!#{_b0M{~ z_(Yg?BD105D0gW|fCn`TBs9c1F|o1R*rbq917QFpR;XpMB;aiS1##7#UG{1qbHzPA zN?evc6gm;B8gSZs_Ov9Y!18~>j+sB{Ub3uR0|ktF1i2kpd#7Iv;M*o8C1u^&v3Kt! z*mxlUqGjoVaK_K#-m+P?#!ChHQGU4H@zVlu*1z=X4}CpxtZ)$zsPDN4-xU)m_Gm`q zD+{uoDaHb+Wh~sw&>)Ln`I-ft8yMCJ$p5b;{l{d;LTb+O_zSuke^ribWZpM)Nwg|L zQ}azxjLc=K83#v*fR=0M5r$Sq!ppNyts!=WnbYls&8^5th#~PSVu7<4YnWt`4&d4U`5C;vdB0DD6D@lI zM_|d2yYYj4SD2e8aY?`pK;uB6;ps@3uY@(zQv~mO8IslPJh5v+jV}Vj;`OCy=&WoC zzA2nrb`=*3K5Z=+ogfq=e_t$iv@cHjw1+Xte#lWAVNrmgE^SwELLs!ssG*cyipL= z7DN;ToFiC0pCNaNeVDcwQ@H!hO=|0zmt0dLd>qYBT@lpM<2ln)c(>mR4hbw{XcKNm zMm~aDI?Khw;~RA6(5(G!LAD+Ybig*im*byKT3wZnvJNnoy~I-i#h#0!5;##h$*C6lyA8kUzpt9Z zn&$B2ED})5=RYBL1_U^w^4>sYE}`X{yn3Ux)%gea=re{6MnZZIKJNc=Vex1}Q41oc znpMo7N+uzO^efx?Tx@WWedQ8ViGw9hdJuLvT%Jh6nuL_W=K_tskJbG96~%J^qAlS0 z1!oOQhBB)^4ghF;bZa&$o8cS63mBc6xgDwG3DT8AbSdrF&PLI~u#A-j{+Y-3Us)cD zMfIW&=K^FgVq)zig7l#c&4%psT%iZ2=mLh?MkR+O;hKc(t^!{eVHyzPAoeAP9{Hy9;!v*w=<a!&wmUTg@;=1ZKlvsUw0bt4LshB3K3GGTJd(FbtxFIkX_; zM$QBdpABt$ba)U-@fM;9>JOT51eG@}PWJipg~Y>}C-AgjQ=WtVV9P(vYf`ZHKgZ`r zatV^XuFSV=Ljv7Mj6|wWSGEC4ldq6)Lw$5h;f=MOUDSOA^Aep!U-#O#NLBh?kdM#N z3(*luU7DIi>Uh$1vSH;Aciq9#{#H^Hu!&yFEOYHPr!zND+0jItIA`r)(~fni3l$W7 zSmj0@^LiGQf@8{BiCnQ&+4E_?7hLaoG`sFL=I)u~?L~AkqPh&CIT1JJQ^VB56qBV$>1ky(tZ~FBU5#VU_-K zQqq;bTKN`bI+rWP=~$jaxN0P>W55B#Nr=QkFdzc9 zket+ls@{~R9ttGbfe<0|tDf&LoDQ@gCcGMxLx(=SxvG9+>e10cfn9bt8o4;arJy?6 zT8N4PYPV|l#~4G<%}W?7TR=x`24p_doJo~wMP1XM$68jl0CEWM!hXFL%W4B7$5 zq@%IWsi$lfjC4tei)WDH*5G`i%u7hx=qqygba-%7b!hw|cp94|L`6pGmL8{`L--Pz za9vC>YNpRO>_$Dd46HVPa5v$N%CJcx5(WBQT9Jtk<@;69PV+?R6LxkhSl5WDR+E$a zj?_5xx0*?EjXNo<*5eN=Ogyj6Nepk({+s@RK412$E1v3$7ccVEj1!R47Iz>Q7YiC| z6ih>9XKWGEiDNZNNC}s5XZ=%XkTFdG)jpzjLi4_%95cfj$BLl|+unFUM}h0|3qBq6 zKmNni5Ug`tleC(dNyiSK8@mk&jt)prR^Eb2cM>Hxt*6Jmiz^#v;*ji)^daxPDQys_ z!$U|gwNp%K10oz~V>5s*9I>P=MMXtevS2_kk%CK}0&4}NQ;6Wx#X*R_;2(W{mYI)6^k%lHK(X~p=v}^pQw&gO8I8=Y1a0cKKMKe`X zQ-fS3FBO#fZZ0ke*P|t6$Q*ZnF@T~A+C4Z>F&YQ5_ZF9DH1X$i$6U*OIK~l-vD^;a zzQNfk*oyp(wSmH=Wx!*SfabWPql5MCJkC*CA&B-7NQ+2gVEe$9+w6^=FCJOR754l^ zF9FjEBsyzYJt31bOw?LA#cr1WWE)kcm=buIv)Z9y9^Mhg)Q+|VImRN7@!w$x1|o^# zSRrTT0tJC!8XRCKQ95v4Kqv$i>MwK?XfVxX9guL2*O=pBfS@L&Ft*mJRL|L5c+p%> zokFcOKNhQXOqL&VaHJ}}1s0(SshH-~zc=hob45-#?wX~Wit=A&Wu9Uo%HHw-sci6bvE_leEX^K(RB^arX*C!&KDvTH>={~6NnILZ zeHMOx)>2pBEKFb8PdLL+v8#@RFUIntowrW=Ms%C&;M0>vc;&!H(AJeg0QU3EzhWG! z7zwgbsW$BJNi2?^uYVmviV#*dhD6N38bz_YYW{$g7;ut-5r?fK&!qZ1#;9m0E2ApP zMFs9;W)|J$el60#$VeRHHxRf4;s#yNRRq9Kwx#@rZ_jt?KYa#%5t+w0#-Xz{09m(!Pjlz*guCgUsUJKu z=o3;?Q_*5UyE+d@0w34Iy7%h=U@D8OYe-QwWS)J? zv+9{z;L8zqbjM)p><_WNvo!N?acu&TheqUA5+tja%>AAl2!mZp|=X!4!y z!^e-gqK?bZ^>s1yxKGIK@x?~}Uzh#}b<4s3O>nW~XTFR}lEX#u1Tsw|S)<@DmP;&*|u>P#N@&vSIP@^{b_Edqgsid$6`p>6x7_pV6H-0JZ}sX!}Zk&hSvd>7*G>;(X4)W;ZoW9nnof?aT10{OT zsV+sjS;wRU4JR~MiX3M-EJ}DP1nNjgoc)FjGN2?R8XEM3uGa}$ZwD^O*O!%&<&d?3 zZ0uu&TpBwB7sRE0-C}U(F1cR#g&Fm}aRSmx4;dRT11d$+1a$aOkEcljlcP`ok>lhl zbS~yZwot@+kavYpnBjRgmz9`fQ4@^Vd)$wBh{lh`OIlda^9|{6Pn_RZA6@rKVpifLzroYeiJTrgbH3mdtbh?lB?`k zaaYk6O5u|?90z~$GMz&#Bb*$FSr^zdT=IVF^G$&he9kHH41_V0Xv4Zc+DLJS^ALR+ znplLqG?JoBWx{;-I_Wp<;=7yb_?}$hTzS5?(+t!otdm#_kjh&~Xve z+@w?pVYlsNEsCIBVhalw5rcPr;z07YQO=pok*xI`B^jf0($*5I3{w$*6iDChO58v& zJEGCxe8>5Gti<2Y!(+P+4^}a5H>A>kafeO?rNRDLDx*&?&R{MUy(?GLr2k2p%madz zNo2R=3Q33IHDnDIbKkHUiohLd6W#<;Rzsr1qBwCKfIJw9((@DlL3j@A9n^42+tTOt zH9_8megBS)1aNb4;fRHS0wsA5E|8IB=*6)qG^M5M1qVcbL-jtKXBR1G;Bk$yXyk22 z#|91#l<4?`ARb7&5XQo9kaYVt4^tOj5Keq#SHa@`<{4roLz|K%ZomMBQu@ch3(hNw z3DUrVkTFDXwNH?So?4byqA=XooS!*%qrkDPCW`oxuB9PXh^w=NyYh5m%R+4M%1N}< zG>*Z&TI>I!Hyd8FEo|2rLGu6BFJ~U*4_>5p&&H4Mc0kb<<&+Hb4O}&d{sbDeyzGBd zAFK-#hYzlDp$KFfvRLbZLIUzmjJS+=O!iRtYYp(504!N=Wmxbd%K%L zO=X((nG=n$W47LX+i!`fVwmV)k$&N}?&19ImWg?MJB;930hUEKgRwq2F#Rve%v{%3 z#RJ7_3$GnH$!=BPYTL;aqjR$|rNn{wJFNB@0ArS;DEdTr6;G_Ownl|Bx+wP3jx>}t zSfm);Bd4yOk}WG;jID#}MJ>%6yAb&Xj!&Hp(6U$*r{Ylj>Zvm``TUc6<96$Q@;iCk zcF9C7Wp(#>=7-j(k`PB*U}Y{}N5Z^-yu1ieQ^`U`uM2*a_A~{8>ufNkjBwXAWw!5k zQbq<2Zo9)U#`yZ{31v$#T~cc2LShyx$B9TKIuq76%7uLRiw z|9(QYY)Tt##08M4*VxibIzVW}_g}e)s{`}}yc(I|WggvMAhiKSmM{Aq`;8XYF29@g z&|94M2p9W)QH`_%Nwv11$d&J7FEKGQbDmS393H7%cehDP<3>isi6RVrTWsw9C2LwWci;eWzN^u6!gK)pX~R9MoRIgh-J)#F z@BW6Tbo%8Wa4B#aaDb>^{F;gUCa?PGBaB803}Fu-9q>tJVr9k1vYH}|W)39Ub&yQq zodS|X6LsOQ1}K5NG+(%NO-xL{NnFnw!TG9&iDlc;{he{bx|aSyX;1;1l&PsH#Cdoi zFrK-E)s*0yAW$!3-vt?zO6uzBKy#$HcY%LKT>^v;%Q;;4+|u-kWE~zyRs##P&Fj;p z9cZsHZ^B7g7^#;ZCes6oVcSQZAurFtzF;`~o2#*SHyrswuDt*!46W@peH3zKvhZJX zGqKw^E@5oT3{gK^HtE3i8pq)iW(N-jjD!oOBi`Vy!xaxe(y_F{~JRALKi=M5ZZoSd?d-ePhAABXI$RgWPo$8x%i6CNNkzTXRnhhEvq zWK*W?Vt-0|l!eVee){>T*xX(~nThNJvXQS&&~{SCMy99ui(lAa;hyyyaP#?;nak1D zj_;1!70)tf2SB3gii#^Zu@_ZzrUziKgwxn>ghwqsF;NMy608Mnc$*j^0GuFBqEm2S zFX@(lm2fi4@Ov+(N%~{Oc<+2n=a6U6e3+_5pkGfzqNkM{tqZSe`nQpshN%_+_@D()g5xYkF^Jk@n!p)C?z+c~r+7}qgjCqvmI!Bhr)k^RMs&-JA)qixIj!Z7() zbXEZE4xCK@-PoTTU1k}%je6#wbOJC0<^-#{X!#S*Tp(s3ZMoW+sRK|U)a5Kdu%I8W zCWo70af6EhF<&s(!h?h}2e3PTv7@c+Kcw#BxSy4#F?2$ywB*L&a!t38?&BYR=alk7)%hH4w54#6b-H^G(@Y4g4 zMl#aUu%PPPMNkrqrLHdr5xG%?t4AAd6(5Vj9!-ctSB#!ni1~%dQ0cG7UpD z4+4AxUNI{Tne>Qqf;|#3!cviG0_86-w}yv_zB?r+Cr8pOMqlbgb8{B$$pT zVJ-;wpr^kb>T%qkzV7Z{f#fR8OHyy5yoia4qVeceqV$b9nIDF74+=g$_77{*|9JAq zJIrSRB7jigUR>1ZiGy*MaWZzl9|BQOd|_=P z9u23ps8*1Or*ZcJP-qObf-(QhnKL-d&=$j3nKcXOC0gPJ&IbfB;ucd>Q>(zA1}qb9 z8-T|S6CN$+5Ih9H77+W|Qt_{s29OGY`UuYXd4S!tU~Wik6si_zQ4Yve`v6v;_9~LJ zjra}V<;0jqBt^iFd#u0;yVI)m#_qj)X#wy+a8{eN);0C1jd^bYIq#pmihv7dP`B1&gTImv(7u z%K~MpZe~qiDP$I;_eekff=Uqh0qMV%)>i$3KZx+vfaVnyI4(eZWSVHEJ^ZEsob5E8 z%74xoS1qtJtZGc~%SWCU-Q3IS)fxPNZHLq0Iv0Wr zZPfEAbu&mvntU~x9+sJh(j8|HT9Qx+a)Cq1J;YDajJGh4VIe}OgL@;?T3%MCz>0>X zqC9WO z9tDOczK{x|n4!%xV;iMSM*Nn0mlmDEQ;$fOMHCOv@<%wqym=X`8+#4Zcw>D%L0mI6 zP3g1uORe7@FJN$t+J!Gs#|lLueQ9vMr*cNv)EM!xwDyg{Ohhl56)0uyZLXXS^?3H;9*q8w&v)SW1#|I+;D;!K=SA)~DfVH~k(~ z!vD%nOhkkxClf!ht-FePQ9WLaJk7Cmy7Rvkhu?H{mu|#zz6kb*+Y+Df=Dyv3Ac~*!5RdQ9jbbWe_T4CC9a4!)M$Hv~vJ#8upm+$2}O& zhbsipvZc5L@D#9;4j($?08W|eVqbm=XD>4N&=(*}HBnk<cM8kF1Deb+so}#Qj(U0UZ#^OGsS@;bG7s6h9bt* zyJ?3vlvVc7pWNd2moLIe!jOBZQ+c&{OKj$P<9kVSy$C0@4>i>ntEllgQ|{DnYs{*A z`k#dV^9)P4!%XlwO-kgU6Wl?0XQuPF@Q`oj`ZI9}!r{Rl`VKiYHDP-O%OW#q6Y)3h z4_x-KI;1b!?#Xu78=2z=6{_k#Da6qm>4>D+{$2#%6q^f z%@NKZA4VQxOyQQ!ryG;MaSX#pl{z%S+DD}m=#yweyGo2u(r(>aqhdS^1NiVZvu@Gv zlnmkMh#?&xN~~_K<$jy%b%pBc8^3JRTIxGl+r&h4<|h~ZWubGo7kRRSIvbAwciti^ zQnv%L0lt108Kfl3Lpdw7XOhYXg4)tgK+fW zw?IGOZ_AoRpbLl<+8{0f;xrWz#%m#BVKaVHLXni@7CGB#?lGk)=*&O<>zBUF$TP&cnZQzMVjb4v4zDf(J{QAmBPFnm~@a!I*)6PR-VfUj<%xvM@cj0J9BrxndrnfLbJ?X^SNaaviT!3ncw`qvgF1THXqj;BE`cxJATEAhsK0n!>hg*&6 zdap2dI0fu@W-u!K)`NO!#3=Izp@ZIAhFZB4ZY;2DZ2MtkIvLGRb}!@NF-8^wWnGsO zg`v#*kape2#d=MQgFGmb0v5i~50==BARnQBj|0$#Y2=re5HqF3TR$p3uq5ZD;lYth^yWI{x5jxY^^-%+x`PRQA)J}gW*+h=# z(5Bl~Gg|m;W!0JGYpO!%5qaC^!V*1PeA5)Gi)kUpjQB2V_){3IFOdJ8Pc!kYiWd7v z=TsmNw|?cIAN!3uFY3*;TSV5gbO+D>qOa07r&O&Sig&tO#i}wKU=(40k{GJ1S zFDQ3TgnFX&z82#2g8Mvy;jZo9dF`&_=Z8&BL69cT@ogj*TuOgdK` z#GRcg4$3OPX z$+r=`EIX)cY?hRLo+X2ykfMXd(|9*zT-lnwk%?C#dvrgwMEBYC9pN>~%>LXyR7z_0 zr(!miF@EuLMknnWzL~yj6pY?aC5p4^^YeO@EB|G!V%R|?W*EF?i26du>c^%m6UQ?~ zza%QYG0!QprErw%GSQT8%kaLYWmTFAwvsv{*ysi>n=7SuV_d-yDTMxjp!B?d5#7lZ zX8GJUCjM`ctZ~H8*Ob^rAXhJXI9YZHt-*-m4>_K&bAp}zH7ioh?pqzqQw}GPqO?XI zF_>EL-*Gb~QzG^hb8F0MH{_EQ9#76xkV!E*9@N+N8>8O(AE0+t7={!tN`cWt(B9^~ zpnSKr6Lnd>SdI=jzCiJUPZcS-(ekG?U+i86#^%*qpJf`|bU62qc4caf%4cK;KvPM_ zs}fBP6iUwgk-!kOpPEdk2M)XEJDme7u{)4zQo_Lax`NQygo)cEU$(LZX8tazjjTbg&(w*FZw|mY+zsB??URpKXR#pMJSbau1z=QF* z{&Y9zbTZ@P-%hA94IG{;XCR1fO5b^N?u5j3dRgiscgir`J=2K%drpBuM8yha9|9-m zFPCT%@wfRChA7)FRBgE=j2_dV)GsT>Y4H9}&L1(S`0{p)nw)#X$C%`v*&)l@h0H3S z_I~yK>0H;yvzWfs$FY5_hjPS@LCTuUU1BU7S^K~BCz*4Qu?cl!Dii0}+e~VZ(_3!u zR7S=G>8!$rAA6!UFbr)yMp@nHe+g?So<6p??!?P_A>TPxC+-bAVud5|b{8mHET%IU z)^!7@jhMz@#}RVp?F69?KK{7x5xt^e=d`9@hjp$*TCvc;!|y?EmOJw-&iK^bvh`9J z-4)%XcjpN436%%*LkhdJNvOj}DMyLF3E$-h*Y!W_aMZ6GxNy91pm|q;gS{TzL%E{# z;Zmu{jnpF?q-XDS|7{WyGU@GVcHY;i%yl#Go*Gk-Zqv=R2Ku#AF9-X#4b1qZ@C{eb zevnKJetNp$6;n0O^XnHV)QQgf87t>IOBo9H5k#-;P1Q+wKn?CMc`IqcJI@p+jZs+5 z>zvaedyKb7I-jLZ7*A%_{t2Drjr(T=eoM=sz)F#T16M<`hiH0|E`;e)@xiRUJ{$%X zZ)AFYaCOYpfAiK4e%GFeAI~)X-$!Qkcv?)3zA7ZY=AQS_b`h{nb+Te)E&tFi zmB~D}_uAo$EM-6bh)$o|W9#2p$fWf2KyIx`$qIkR6^hQ$xVIDN4k~>{LK~cQf|NR? z_ib(unqP1Da5j8hYO-|JaqW=Xqr6%BN@e8{|I&V~{zuzc`xNXn12$e>yE=EayMO1F zA=~A9v%%R1B~q$NH;=ft^H@t2GAg^6U+R}rRz2&qd3(o7^>hZsZrAlyfZMs27@r58 z<*U2Fmtz*a=f<1kA$Lt_i!eG#{2by$1igt+kzC7f2`ALbV?ski(P%u&z5lC$J*A~D zLd8iWy@#BrA?Bz;IK&##`d=WYe09O4-subN6N5gY-V!I315)hwL(WDby5C2m>#Upk z)OdN%EK8On(D+52LRQ<0X)PsGv9j*)tJYP)`vfOe3>wsmc!SNGwwLZc9QN6H)?UYl zRJmn%1E=T@9Z{wz#;)eL)w|W=A$F=F8#sjbXIn_+Z{u}0q?(Fs+!)f^Rlh7ay(=Pm zGe0@PDYFd;F4oW8K3I_-)}N}(OXDVa&S3YszvsB zTT<<|CKmI9b+fzA&Ei`kr9Nu;Njldh8!2vyr5Mq- z&gxYc1RMAZ8|Gc#i-fr=S>FhzNw6XN1oI~5leY77B(^+F< z#gdg$htZ@uJZMZzF*R}JuDEn43s34SPv5ZeDTZSjOEsxk?2dQ+mb;yfD16+=c5#QtZJ>RENp2P~zP#Opck2BHT9AeLTx)bl-a9l<{k_Ct`lZ1s9o znzSqIiU_y&FS>PFTh*0w9lXx+MbV|;_6pnf;09t+mz~>)>?n&w=aXMf8@N+3sxCF@ zXUR90YUAr?1<$Cz@1Sodz0cC>%{s|?>i)#^B|piv2X-N>%|Aw#!{47?L}aUoEyYv@ z!B`I^yWfWlJcID-R?B@(mFnBK`61-9;P+D`2f`OLfV|I}@t&%gXhDGVfx>+@IOE01 zPkdA)KfLYlTQT8x%3Sf9bZ+0Tmo9z2cgoB^RPW@wu|LgscYKW4OJ;kkWl9yEYJJnX z_cGg{#IhmR5l}n9p-uQenB^FHo^7-^ESkK>LZspy@?T z!{feQ*SXKU*}FL+^lLO@3G1SI`xm)qXT-huSkzVDd#QZr?R^(BY`a(0nel=K{J%Y( z4X?;6+#NDCpk(P)LXri~{{j2eBf-_fN{+~;;osZVEwwA7h+_S^VWYp0u!4b$3I zrqPzE=+=#&xu0FtYOjKF2y@{o_XasCU32Q$pg}G_3DuO`FDWl? zo@3K8Nj})W?tZ`V$zU|)v}lUO5Zk+F^%+vBEBAhiopU@@MX4*-`OOg9d_rNcHGu0) zjGW@&J)=__rdl-_UXRZC`d9Ayq@yZb-=BUZB{hW$(`7BB5|O-F@}M>B90T2@(@wvSdYKN=^Uf41BC zX7BG>WikIOz`_tfAVN((#%n=p^g3s|O@bkJ7n78K!wSFVhyLLGl4m6vf%#}an}9Sv zVUk{JuK%Gq*1glN4H;WCPu`nc2zC=-jrvTVC1h+|e^|)JI4r!aYF=Sp|9BHwYOa8= zE|%+X`QfE6nX|$DHS#|=ylRxUiv6bBD=w_CTDz4}k&=`I5m+P$Td4P$BZN9~H|~_7 z((SKtQG9Io3b%(Qx(j{-C(*v&=axcO78+jJJ7#;_mu`WC6guBi;P?Pe<5#-vDj!t+ z`xdsyVf~MbX!qBJR7<_|6xbw~9RQ}xfm%}v_asOTIw)2?7ak2^eVvaj45v3Po|*4t zl6P3%Hz<8>%WVkraF$LF$(DV53@=;Mp>}YuXvwfEQ`iXIk&TFX%eeBr0KF|SScXUd zkRa}Ec9I}NqR1aW;-%iJ8>D0zmIYgkgMT(N^IaM4mYX%RPDEgJOafaQR8&osSfPs` zXjHQE`Dc!g(`t1VWBQ1romKW}UzmSL?Iv<}O0`U!N3N)??G){UePZ1~4Pq(he{Ii6 zXiW1F@U17Wh!VX+t#ZPrUfXXcuyhw?$sUkP8cpUW7}BBoCJ|#9ZRm@>L>^CUV&cvG ztCHc%6Ugdyno1S{2Qv;~!GmEQchd_j+iK>ups98U5#S?JD}Jde@!)%CCOHvFUn#6a zjN*CCDIb07S2Kpm@VK{6QZ|wC!}KLSE1ouxz1g-+QxWSiWE}&Ma;BnjzV8No z@x7vyn61A=|407bz9gS z7RLMBWSlVmbNpJ=D6`e>wQwuBQ?W;KY3Z*a)3;aZNW^N&mSTwx?5ZsD%(U{y-Umu# zqCCD(D75aU6!P@_x_YcPD0v7($LkX5KVTnf2 zbd^^Y0r~c{T7TT{@!B>OH2w%6EB=8%Yivd&&G;v#c-Ka&$r&~1=xp!Ch zY2QZByOZry$x-g^kJ{qQ_|_ZQ5-XvGN1(>>BI^-(5&nT^U@9<^_2GjDOutu&jx6;_ zPRTSr8IfnW?*G~s_WXBKbSoP;${ZYdfSqd-Kka@)F!lwv0A(LEwrw$|FXBqrGbtHV)FJj~L#tP1y-%QI+)VO4{Uhkb^1 zbFSSkRv}H;sK5haydP>tFq==U0@&RAt`hR@(aoP#yoZBy5yXFHvfF|^Rog-?3FFAF zLQw+c%+fHubl!=OO=NNAD|4ufptJ$tp1B&=LTASTRd9Yr5Y*|gyvlpOCcW8ku@0a5 zXYb=dfZgOf3R>6HbAXLIIeN|%5 z53Dgz^(CMaVR=*b3a!S}Ap9DbAVgc91u60LApO`s?bamA0u0bv$7fVhRAdXyl;t?} z=-S8Qv=M6nJ%NE$**g;Qf-*;DpsN7d4;q@LdHJVP;I(0RL>_k~KPiZQ;Tgb0cZ?@Rs5oq&;CQoypeiNQc|j?z>=K#nV=mAbOH^_N`9ky0 z0O&=yV3Z;}k#!`P1rSYzOk?Vw3~btbpfP@x`z0l_KvaMN)$|#rQy=D2f%D4#*fEuh zU(Kg=YLpM-Emvyu(?DXii(h?~XPt7o9%3%mqX~>C>zZ1G*$Xr-p^iKy+NeP3jF_FB z#oEE7S6Z|t-dbFqWlk3uVh2nC&+i`bm?3I0-2V)*1r1ow%p{|42BMIw2pcXmap2;B zQ?J5L7ZoO~!R0sZOv;?V*2hHefte-5bNb22V@4?Er~UXSgaPuv`_Fy=49MUwB%Oh1 z4NMQf;>8SdB7$XL}TJcQ(vJGzt5E z|6zs#ISF(i%`yp%LuGHs560$#-5=B;v$mZyA(Tox@lRIe2b=7gWn)V zv=AW@vfpt&8RneBJR!ulDR>Ss4Rdb{qtDzRs^n^lGZPb)X&M#W@?Gv&X!p|6hCq#D zSv%P(<@IB;u9NX!;Qio9Sr*`-KF`jk&A`AZ+4xI(_Zr(ndRk_CWTYJO4{Q)({j{Vc zPP)ZN>@riVGk#mS0dP#rty`5)lsY)1!%hQ=6M{5}b*0{*-9*zw`fq8N6bIQdSy>p@ zi!sl&78kX^<&rkn&HK)~`1p{@{&OOEmFQ0BX}j3tuE1^Wsd(>!@B7|f3=9_Ty;&12 z*!YtYL!&G)?iUktEemj-p>0o2X45&*R}_Y4cE$BLLl%gBH+6~-WRc^Kd)o!dmdzim3arf>Mrz)LbQBKslaaTEpweAd;~ z!Df1Gktu3Dl=pSb;r}5>Af`&pgpt5vMVobWAeVQ(t#4)tVlrZWwda*t#wIfP22G3# z@jOa=4>sTg_#=?)_^?T`)X@iTc*88qhzHh-xtf(#d3kv_u4qSWE@jS9VpA_(C73HS znZ!0%Jn<_KPivo<^#ceTK}WBSGZs@J4#U^b;|aa@1ZXp#zdKNJFKCP1gKiDCwRQ>S z8$B*4fI`j)fa`Xv-EBe|tbH5kj!N#{{S*$jVWyzbo7+loiG9$1?QU+~iM3vI?DUy4 zGYF4`7Aow_J7P7Sld3UFn3R5Xz&>&%Nr{n#SA{bAp-9=bDkxnvc6rrS+=jK{IAP$6X)$=N3IGY zeerMNy69|3+C$ueP`6mgC4o+k@a0S)+pjfpI(4Vsno~D-uLD_HirXK}rqf|gY;FM_ zX0wEGnokw;ZH0vXv?_HB7Z@hH#wcC7HONo)*~t;?nxNK6>iX@wxlG}9o=3US^O`>` z9~ec~`1@Mckd1>T8W|DrQM>Dhi*ZiUs|7x44?1uHuup4Z0 zyx{g~?Apeljf?3-Dk?Bg`DZ_5-}G^poR8a7x3wUmmk=BI5m|>RN3IWfpJfO;q(uM4 zhbmG;RM|dt`*;3ntK%9XZ+1lnsl5-FIvO={@xhPmGcnHcG?1m1Als440`HQ=|uYfoQx>UwEg*`0lZ!$0}ooLeC6J4Td_Hg4}9T>Rm5 z`f9UJ-9E7(sTQ5h&bw;%@|x&V1;nlozM)h;5Uy*CZeunitZm*HHbV95VynOZs!-C` zI_Bq%#KJuzAGzh(0!QoFU)Y=}?XMT?TUfQ?v+JsQvMGgkh5zt&YGyudst@EnB@1Op z9ZYFkslKxwa@)GkFhF~7yf9~azlh_G;n^L|Qz4{O1JBKlb9{Z;gYHqc4h$0l_o>OP z=hrbVcO*XU^RW{38S;tY&v{-F%bJvaLCvyaST5D0&iT2-NQB|A|K*>_ZN}>)$SNmH1*?t;MEx zztC%2_%`HgUw4&RI<)Y?`z4auC1hj_9~}AMT8caRVMPT}uho^D%9XVmwg$T0-kyFX zL+<14eAWxz3f1g}8C-90KGO_exaQ71)V)ACxxZdn3>KOhxn(BnVv?8@MJPhj#T}N#fWtk4+?m zB;zP$HEa@PODLmZq>O}&sEkDRXc?K6L=qW=a4FR9dG7D;pZjrN*HxVJ`Mk&L^?W^t zpSn+huc^Qp0fy&-RVVLVz7MIV6FN4?p zR##PZYx57`jG*8@vCrL1JbJDfe4meACme1Jy?SXUlc8CV>z_3Fq2ebg2Uh&}%0;BY zyY9#Dc+j+XsfBvZXIS9Qqju*y*(oQ95{EIrYYSdK%o2VZzv&L9)m>Zpnr&HRD&7Zt z3&oYqBP(605eV#1kDx(JFxa*A0Ch4?)sKqkD(6)3Iz^Iux#W+sXMdW*7eg-aOzh;6 z9z52@A7Hq1UYsqcOYZ$YExGM-E}hWQ*lX}kT<2qr0Vy#_EN-r|GmvKARL-WLr`+c& za|?T1Bj=5%vRz#c@9`dVivOwbJHT>nc7dt?xRhFB)MvF{)xTqzcKn>nZMN3YJr!Hs z^7rL?jvtz>eiA3dw+}o|RGkcV=EDW^0B35Cs`Ca5mi~eUlJ@lU^(i?TAd^8jqG(%{ zX|{Tqdf-NV!{SO4fj&Fc_s+kKdxgAu-h?@k3yo)#`V=U#5zt|uDeyzxi@;}ul%X4n zEgN$FP4(GytjBVUsB)|^@AdnD!f>w$q2coL9f`O2W%GO&1yL^e(B+ah)9IMKyiS+t ztTJ+oHOm^8=jq=`&lP;(_DEzSyno%lMj>qCJYz!X`$2^lrmAWt>V@KW#x?)QtV^=X zba0xiR+$Wp&C*&H^^=J(LE0Y0F?hWF+#M2~<09Cjnw!fg|DEO2b~6%}kN&$VWt5ukb>_IkWo7HxetG+jd&k|Js|b9vB^P-u)rq z(V?%9a{Uhpu-w?Ia0vGu_>mCY9D1`DlAracY?q<3o{gGcoLax?u)y49rr~GN1?#H) z^;!Osf;}R(UyX*w@6dErwNz++Y)q*7eKb(T^EOv5R?S7N<7&lWPb^+ct${+- z_wF6IaczeW!&^(?P;69G9ke{nhRkd87GLPA_A>nSu~+B{QM^N7c5E7d?X$Y|ck{P5 z8=`ZZK0(`DEkt*|-PiSl?t8^(a5Gz8VWAr|;37&V=rjKE9lcIXQUSFYY6{dX+nA#V zILY3p4|jc0Pz#Y4d>(Ri_Q=o6LbVbCkzuUyTShn*T$SV;Y3HXDRK8@&xgJ#P@R={U z>3i#$ZcRggn=)saWP<=5mnqbADBaP+ct=iL4|+xWMj9Fl)F7RoI}c<#{!BF#;AL&T zE?iVheX(m**P{^Paz<4SU-zJcr=O&YT*2g!Z!s???Fmu1dfz-|_g^LSOnF&oF2I80 zYA%XCl!vC`Tod~u4~T<-h64oD(7A6JyM`qS9Y@|eZ%}p9U3xw#$&v45Zr(^_)!PX# zu9$7RS%sVbF!roXuLNJsMN7{M$-uhkF{VA<^m-+vY-TM6$q!7N&U2=Pb9E^jXUDVL zv|iooK3XRb@H1rob^2k<0B$SL__e?2;^V zUiV2S7_3g9i?FnK-L5D znW1_7!Tg#84xL+3or58^K9#cC<5w_OVKE&CXmr;)%z5$VX}Q6sHQvrF*b!kqwbmpU z6y{*ZJnV2#jeZxa5xUQ9#wlP_R8`qvx_y9iDIcj|NPMaG7&utd%d?&1N>dG-E=5-d z0L2CgMmA*+%>q0F`gHW_@ujj0h5kOb^_hBucI8dE4TtF7z8g2C%6a?E+pfQK&y>z6 z9fzb#Y`;&SqU@n?*KOoZtMRgTM80acZ#5Rq&FsBf!cE^Nfn)o=nSR`>S-M+XFh#*C z5H1q}KuNrs?arU!G)K*TrjgbjhR4S#QkVDjPg?FOi#(qQt1F^vfl-^FD#e_!>&6k~ zpkFy|S3=rViS0wAZ!Wg)JM)=p$JX06x!M`1D-_aAIpmlhMx^oZiPONV2p&O?F7gri zVu6Yn1xM*CgoP^~$1lMs_V(+Ffbc~{lAd#WQVZQZq9%KtTx|HAb1bd}63qWu@==RK zRs`;&+V{4`@9G}UsKtvSN8+n9G>NnLQMTD8Uyqe92_EVL7AssP((V-AukBbuWuz$4 znAV7J!gptsT71$*%UI|qsOlZJRGn65P)YL2WJt@EFk8KFJtAePNohv>_iQGEm~g$} zmTl}z@6;_G^N}NJ*KSmi6=DYK{m8yM5KL64s<$7yA{i`}LzD5R; zOZG%s?XS*USCoet$pZKJCA>d$WfS1aR=I)`p}T+fAC(f#Fny6hytP8?6~pVR zhUa7iU68knuv?0A*(kGC3{ST&vzKpq$~q?=9C3Ti-m`BDC%>LK`F`P0hL2b~Bx558 zgU-KlB7>^>C70jPB*ki`Gouilp;n8z2M`#-b%qaJ$huq;?mAHsG_4lZwrAwH%Ca;? z-FM`$2Hp9N<9|($el#z12hje2l*_Uj0aq0eatR?un3b&B|NOGr zJnleoenbC7;hfj42iVV~C7-2R4(QhKb&CRF8w^8H!y(+iF#WK$x5uay$0aOsJ_>&D z(2^7!Z39Gtu-*#q34`;-ifi{O7;4hZZEWb{-IVf6)1Q<`e_#({V-W8ODjZnR8#jlc z?zXhAbvlUesFqIjW??_|?(ADO6&Qis26}vaPeg+kV69)4H0ljzNZ;V0Zr7G zi>gEZQgiFWisA9=GyIHdaqsZV%LB~s~bR2=-mx-r{~^DCwAs60Jhk@XV1?MmBoveZ=b3C zPoF#7p)hI6!B-ppOK)SCvn$0&>Qi`Y{PJV#Vr;n}dkaxm zaR+#P3cPttHx4KL0&)l0%dqe4;Qsr^fCs%M6A4w;?Cm;tkMDXlAFcbEq7y}iemO%gII{_{LY!(L`!EUyO1Mr7;GZf zz)b^B)na@jHpaf_PHeldOfId;P1haoTL*1w>}hQZJs%gnhC7B=DP$4&R4}2=QZP<| z0@Rx6?csnziDq)fW<-xbRQ8eO2>xtS<|{mg4;>^04Qc_>9=Nz#GJo02EH)*%($Qty z+%@&3A4&#LdsR1FqIU3qd^k_MdRJ!P&{zk_qP1s1$8q1HYZD(GH~H`oph|i=I_)83 zYim^6h5q-$A;?BlRP;`*Hf^&LBX|CK1aGU&@K`{Sm(PdovW!=FxY=`mc#L~_IXjP| zd?I}{w>wElQH|AzrV^=uIUNjz7!>Hx+a6Jw%JJ5;?U!EyZHP%>(UhZ#!t4uYGjj0v z_vd<)_xqiR3{oFC?sTIHqcGs%@6qcP0wzBce0@P09S*0>W4rG+N!t{@qbQR=mB+#x z@>KC8jZ>^skf5Z&8H02wKo=j~KJxv%Q7p2>i|V)mjQ}`R&Vqx4RlAx*2+Zmop*;YQ z?WZcFZvpmwrytwFc-U09IVwb_eCp6OBV(`&ANkBomc3mTzk%OTS{~L={M;KNj)$Tb z^|ZB{FxrOX$6iSDXy#jrO%!m>NHJr+$5)ion(ABI+wl;g4s8m)`@c88S4IXHeXxZ^ za?ozBZNM-AY*~y8?&i5`X>822o|9vE_1lWIl@&asj#^t+bmvPP%rS5Dg|iH%9&ca1 zbbqWwC;9Ciu`F)e7)(Ymm#qGXF*hu45NR0rQ<$I{6BDBoYU=Ox;Ki;a8XNqg%*^7U zSqs(e5h4fzTf{)9@fhrxiVp8A?%*j!DCRZEC7|LPkR6!U40!k#p-ABu5-J_=K*=L` zP;mqb**b`aI}=QzVMPvRd2CFKs+6FHLcQa?%*^8!7EOP}#(iTn=p%Eov%@s}dBlK8 z>rCvrc@Rmrj}REEkZ9E+5PtIyrT(B|2nvK3P|m5IdgK~qJbEvDP^rcIdU=uG zJdi1Zk}`1YSi0jQfa_JZQV4$~UOClqs8J;8Cmm*{D*Q5j66Ev~u7A0hK7M_rT&vAu z{Di|vrG<#mEJPg+5Vt+fIPi=0na9tQeBW@oz|RB%CGAzsSZX!)9sIT4Dq(q_n;mvB zY2Q*y9`F>CkfypAM$1&4IOj}y@51bb;TC3^j1irXkQy0vc6T=*YYGNDEifXU+Ppls z8EDIWbbamm&oeTO(*DOX!fYF3uCi6+7IG@yvb9KcOW0kZ&Ywu1*DKauC>zJ$*1^M- zsJTjiqC=W*q(L{Jho8xci1!FRl2-Y-e)hzf)iCj@H<*wljI4w^1)rqgoi@Xw(*e_@|OKo=X^fguEd+}3d~SbI=R7h#|R z85OXQD^% zKWA$@jNEn5?iO3er%_4B*w=_`jl*CDDkdiSdd!RI6%=lm6`dyX0nP#p z`5Bq8+@+Y`Qsfz6N}P$qzof_}DYg;wAE8?Vp!@`WndqllBpPaOj89`&jfV%}C1sF| zDZTeIdwBZ_3Q}m5{ktJ&qIgw8xQ0Um(xXfNHUshMCgNHkqFUj#dJ5-4tV=Jx?|<2Y zq{UOw^VLHu2w$4Yx;lF)p2HYE;-k`pQ&~z#N`8QYmA$<^BqjR#(bd)e;YuGF85xrn zNyITBefuIzmf(9x@%Ds4OmV)6B2_i$mLg?64Od^f=s3%N*GUc2nVg$@<01!p5zNc> zNlJo;sC^86UUOf+5(?lvgaImMlH*t8H&!g3B9<&kYgb6+3V!AhIrPZ-?+>k`(wBn3-{GbmJ_L-ZYaj_}7x z`gUe|I!a+98qk=0=6o1~l-#E}uxVOdT_v9O zgfAqtrk(~KH8XdDmurPR{^DSSfsv7z$ERAw6^YOuFS_m9lJpL8wBmr)(9pnZw~Oy^ zl}m>U9h_*`+1agUdXkePJ-Uf|y_1c;j*T_C$Z78}$*;W~Q>U0%C?g8?P@hL70txHt z?!fY`>|ZX84Z|GGr%qx4)tN)QZh?V;<}Y1No%+4D29w>95&P*j?cvvWubrJWDC)4f zfr|wH_k-e?2f;bzWYSlK7!5u_pFVxUy?XZid2I5(C@Pz~yB{H^6j(%ASsDHd1#H7s zMDL7k0qh3DmS~-vz1r4aYQIXd@sm8g~1A17~(Y~EQ?S*u`L0e0~PZu`jOe*ybkPw z#%`E>(zi~`JZ58V!$}Dr6R&3@7`ST&El~M<1Va+q9VFUdk6?-e2^WHuyR+1eN^t*$ zpCU417#SIlG?wo_e_lV=I`zvqg(3sQ0Xc=|gBU}4 zgOmRI*cHQs1w%X!)$&N~zxDFA=8qpgJSuB3ELT&bnDX}aLYsRu#~i=j)zx)v5N74y zyi_nydjTVcFlt(q@E1X5fvX*T?L5r5MRjBFg1}&W)6p>ntvODhKyUAKMNb=SdUFXF zT#m!MNONtB*41?itcL^v?H)(xa22ba5WE=EN;1JKg0|(|3UgdN?O_) zb{b~r(zhWt`vu81`Z$#X2L^0UVXcSYc+WDUq@Ck>ln6o)DRj_wrMKRmK0jRU3{L@y zZ9D8KPzmB}_z%P0j<&Y#kFJw^e3o!0q?uBzb?{(zc)4OK4e|(#Uj*6r95_Hp|HkPG zL$qJZ%L&)7Bd#87IVgqU=dx$d6vYk#zY$^dU_<@Jhr(ZlY%&nme$zZ;fxvuZ+V*Iyy8Z|3WY!H&2Dx$~i2E9$r|2Qx*cmu2BEZz{VbP zXPjeQWFqQWYI$}_e~n%fm(-yQ1z2c50+9f##)_Kn)dG$j5I;;)zT)!G{&<4U$!(#Z zxHl;_|4Edrno%Jw^{}dNsTT_XukvgpnU8$_+yF;k14?@(c?nbmydN0AQV1Hbf5Do< zegEI=&`)@KkmPCL4?>CXO-e#X|Lx~bEtuzEQ|q2r!6$+n3K^dstf?W7O56pRD&9NY ztiDfY_^Uc#I1b{NgPq;X_wS&fIkAK0^#Lk)M>vxK8ovOHMa}0cV{FTJ$gD9*CCQca zMqrJnB_%bUe)1EB^c);iGzBQM;^SG~DNuh?BscyY~P>tRDM5D0HFm1RJ8-OH}P{}wlrj6*HN*Sip(0U!gf zAon;5=jor>L&CTlu=g~OV>~fmcZ`(d{5dv%oqxwb)&Bd`9+lwu;#te{C19&W43&+$ zGpfJ>R3}2@FI-spyC3aJTEnx!MF+#LKmYwi5A+Aj8);<3iHbIT{3sA}44oUQHDsh? zF}kA{GEM=zV`i{aKn%9YgD70!(v1O1^IeKVoCG(XQ>xfY=$diPB8@cssIYMgo~lNC z+tusWmH+yAxk0Tu#(8xW&g2AodL1SBGof@rIBwXx-+)h|bjGnAJwyD*w);SmkK+@? zKA%OC1T{P6;EO?ZIB&8|a2`yJjV*iy;B;-VwfgKwaSq0~Op z#iemKT0`DAy(HfhF%WB}zkG?f=2+v^G&H1)poPC(P|m_M6Pp7X>h1TsDHJAWEwOWS z@Zf>X8?)2MS}|$Qo4Xo_|AUXl;5)P`f$OVh>$UhF(rYs5ByOr?`Uae@*vhHG#D zMv9n(xQKuM`SWdR3au-}HE3ZQ04(ujBRK6+>jy%<%)u!1?tQs4Elk8Bn5U}UdTIK( z#Eg+X4_9FdX>dVVUcT?sr%+t6?e|#NZ{E6vwmzJTKqak3DRwu6K%OCy8sV%kcHYu5 z1*QmY7KzoO(}S=lp&Y9nT7FDxf8iEtFP>U|;TL@X#QDST-$Qa=*lx)d_j+;(Qhb>6 zxb{m%mO0>YfNzZxnp|L6gbe%dn2(SD#BLluvkEUM^9+zrY-|1Yo-Vu8VJ10{(c%v%CbQIboUw?lTM#9U1 zrsBR>8!%VF(?|KUElzLj5A|Mk9Q{Nhlxr{o@q$yTu&^)+2jz1kBF1vy0HeNm@!|zO z5%wQwy0D|ixgJ5HQhdRcWu^=#15Ctml)}>j#aGtrNnzw^nAO0K5(gH}yy9X{bP~WO zKq*E0<6dQix|)-bfGPpM1sAk<>f-MWSYA@or-~T^V2*ox8imQ<1{k`)=3zT4z27T? zt%jdv6%_hMM@PH65C4JppEx%&*7minr~@ydQu`h97qmpU?R>}2#Ad@*G=f3b6b^o* znS;Xy+XR@bg2?I$zoU^; z6?yQZ@#s3-U_hL-;^DKK4pouwrjAM4W@A3_tfmImmLN>>Y}*Dn3a3TW2vPIimW%>? zHXd$nSYd>KN`jIZc0{=Lan{Dv;l0hG$_F}&mEx|iPuJS><=1br>q)tE$(s++rXmPB zH&>^iFFH2%$$RudE)&maw)Nt8$H#(x{;6H5PL7E2)`+1df_#t(I&pl%q#&Hou>E@@ zpuip?pZ5HOtE-`ZfA~}_U`(6h`OghnrnPs}Q#HC(hZScNDS@Qq+CieBy4fB!LLZLhO-vt@v-An4yY zJ#ylgHtc9BBObhDDH1DQ{#wC7G**<6kx^D2di|P(zJo)P*FJmF=Qjosuot)p<|y$a z#dD0()H5M#5@ia)k*)whmb`fojM_gdo~1S{UA2^`70Kz}VD=Q|qw;qS-#zil0iPB9 z4!o%vE?>?vi@j=d>eM98lX2v=59I2z{13K%YIhb8?%e#m=pw(U@nbwrAY4s-EQU7# zDa_d%q$ z+%T>WRN-I7#**&d1xc19F`$}tt$XS+{Ju?YNx6^K{l<2jpPOqGH~yJ9geZ4-{_F3w zNaUfCG)g~97b_i30;$m)Osn*Ccht` zOPDR_0Tkto~@7tJ#Y_ac573Eaq$3(47jdRdaCLC z@L!zv(%j7R^YfJ53-}=m25K;17Zr7e-&CR1$B!R>qCiE#<53xm)rRvTHg2<0l198` z+-ogFb5$v12bB!{46&WL=K1rZR#q4tV{0k7ziS1m0@N0KegyHp`EPM~SskWW*bvAe zOTTfWA8!T4Sk8A^>@ReYlow-fKZ3p)4fi^%;`lPP+x}ZzJOF24JWjZ2D8XR{%T3dgbuRG~jbgD9*XL@|;B zP<8qDQhsu)Md1z9ca)$jKuI{Sqgqo_Qs4%<%dO|B-8}f>fC%6kB`6?p5sn%t+IYFS z8+|zmi!cpzgd+}YKoG2nDbW}fF3?wUsb>Fxs+!t)95g5>aLIxyh~9lLUA3&&t(>k# z`{d%OBytV8jF9-bv#l*!&mTQ{G>v|4dYZAtp78?=*c2q5Ilrk@@!P{PquY?{Bt@6VpxM11@|W6h_jX^Ee4{w&F#&wMU?kFn>C& z(Br2=6h>#n6K{R;%d{QiJK7%#RI0$~LGIE}S05WR6;JJ$fcVnww!1j{j~g+w&v0d4 zf%|_0^GZGwfyV7F?5JQ-zKP}@?K*0#Jt`_|IF$_#za94y>1VF_v@=#!b-O%^gaqBD zNn_;zGY#>EV4U90t#QEZ@L1F}G;oAW`dskvki6H;uqPKNHA+li@+g`3uCIRYb48K0 zzz@F_kVkQDGCL)~rTZQ1Aqfid8?G#b5MpFqKm5NUMc-_70t z02$B)YL4(gMj3c{N7_Ssj^W>P9LM-@AeB=LA|)i;0H@)K)#khjWCJU=BVqe5BtD@_ zjUHuC7O?;+fd%Ln9+UsOhRzz7i}}Nqj6QsJ%#mvpue$HyV1#tn!*u(o z2R;ZYm8`5R=bMO=I0O*~5Yz0SMicl!^>E`N#V&*QDxT~wyjY6K&Bsblc=4?)jO%hs zgukAoY%uI0V7tKdB5t*MEHT}F9o?N6nkk?$mU43D>Nfw@_wSFD+Dv`>2K(zj>+5O< z4%CPImebO@*FB}{^5RS2+V9^m!Nz#7;{6fs<6W49`Uu#c`Kf)~Hw>tYZL zFZ7zQMlfRZn;YglO?M3$Z3TVURPkn`fR*TInjk%SXfwNpo*$$b2J)njG9o<8^qj#(K`^pccvp) z5KT?mdA*b-=nH(Qo>o^g_)~fxN~?!Vfi3(BMnzW5CKJDY8|`Dri>Bx`LjOEP3IO&g zZs~JC_-5{-@`P9M6ujtocmi-O;J5FRUw^~me`x!@5%!ZpZ=|S>`x$J<(D+% z7HVs2rH@z50qFyM8&v@Xum(dAMnlmjBpIWdQJZe!tD@}03%~St<3Q`Nob+l{%Xojq zB#qXT-+%s{Jbzw>Cmzs*9oq8oanaP5ur)-3f%`rCC_JP>Xso(=hc2(L?k^$4+=_zB zUar|iaYh;qO~sL&S#{peM)>1-e5k_h)5V;${Ue`GuP9{e=RP>*=m=J6;ZF0!I4*+4 zsV`$s*tp!r^I@@I>6Bq4mI0PH%)=0lM*$jf!=PFBhT)%^;$8$TKxvC^?g@~|eKsX3 zzTa5wJYVHDKJj{HUut9GL}gIMR%!dGl!x?(!$*AIJ`?d&>`s)vz(T(Jsd5{!K3xy? z9BNXN+P5$A`)uJH9$@a;fZI1d$(MymeHR4GpC(O-a+d<5*T~}ZsgSpR$wJ38AoP%r z)lO`fsoF;JCbqD7&a{j0$laBLigmXj!s1iSQ^R?)aF=v#KS+og-e2?plHnGj(C!|H zU123K7h!BbfgW*~Od{59sPs4kv)-R>N3|qJrsH9sxw4lc9>4K$!n%xp>4MG~E^mL< z)-WtUg6C;hSKx};bW+mNW&h{X@Z^cSTOx#pl({8on~|9rJR^YKb;ci(zWpmmy?>E^-}X{j-c0*y!rV396uKW`5^pp?WjstZa%PEbpIFg=N07UbY+{I#aSB4?&%u-u zI{-2q?yXyqNplaSr1^N$SXFlR80^-a$mB8H=hHQ&8Jr%1+Xelyd&y?JZnHHEA}r;4 zJAdN@`W^BDjFCr=&cg~5#Y)pInx(v6H`3wjR&$+iCcl1#rU)bcMuUvxWN+*+FB9EB z>U#|3lIoW>_;SDTcMDii(g_-H{vf@ysa;JY7r5$DtASPvEUGre82r zhl8s2T09ac|`qqn({5{!$;!L~GLQia~cK_}hDl7RIGrIt}Fu4fhUqC;-6jyeL z$3?G!SWZ+0gO&xy4qvRQg57_D`0Lvb`RsaOn6F_og)56M%kkXl9d|6x(w=*)X-q@usETgV|r-@8)lM(u@CK6*ew zjf0!;-Oxkb=@Do7wLbt1wPuA-4GFRvil>5YlZ+bU-T_!cFw@a(H`sq2-=)5O6CJX% zX}gOYsyc2s#aM6#6U2rpY^5sgHUYMwvq|f={6wqsW$fwU{dRzAaApI3%@Mz5^J>48 zlEE5Cl_adp!VlD_#ogZFq$KIqmMcaS2Ps?81`?(XbFx@>Nd9~UD5W0F^`LV|)Y zq6MMGfP-+oV;3VLdkpd|MFX!xvC`4nO8WX6M|=r{sc`oyr{@#XfZJ=Pr8`h zP&7%>u6S$6vnI}z(_i43XG!vettt*PL3V}{=UQF{k4obJ$5}(+YABr_6%-b}gjNsJ zVf<^hA{>?T;O|nRhAb>(@!Y9~6eb%zHHk$+Xub8rq@0pdthxB~;$JCm`Y z!sPfu?jsi5U&xN?1|xCJMOPb40WPz4(Z>9Cse1s`VHoA)glYDeyTqR@NxXw-bxzH?jVI!@{ujgsfgK zQF>3K1)4srag;6;6)Zx@cJDrgPL%i%%(U3u?^cYZ;La`~v z6m2IKVZibSk|7LDDC`|oKSswO{6UP;*i3kls^o(*2Wm_#SiEA9q|0cWC`H2J7kvN$ zXcJKz`{FxNOe6$V$;Td`g@-^Iq!BKzR8Sqz`lY07on3xQri!YH)+E-*+Mju^^AtI? z`}glhkATnsD<;&1C;`Vd=)DQ74vWsFb6>v5ksHI%1A_b2(qD-Z{9Mho0C%c2nA#E1)2M(+pNZ;xwuuR!jkx5^z%%S&Ni4Q6HV($~0wZ>3?s zGtB1O72J|OMkvyeF;2uF6=SWXAa!MBWqfz=N?Tj?$}OpS9%joKutmO^^vT&mN0+LT zqZ0T-@QsMB?peNxa3MN{9f9vx{T%kX}YtsCR*OysmIP2ISOBAP*n+XM=OE}1xW@{ zV~1xx`PtcxpFdx2j$$hRd*{iMUm(1V`IuXWVDt`55kxVJ=K(G!Z&N+?)i#Q5%;1Xi zTFD3fa7UoFfOhe6-RMu2u#EM=oM|TtX75r;)ZOy*_|KonD`K5$ydMp~fdAVL>3=At zKodbWCP@Uc!Y~gWA)!MlE&%Z%>%{dBniEV@k$Mtg&XmR6Kh_vjG?PIhY_CgiW7@dLyJFmQ8o^O)2iFw)+oFBEtV zJCbx+Cx-|k$t9}8#3WeOCv{JmuL!ALf2u*JuP9ruA3@B=8?Z{Vx?Xc#(!}3zT4q>;I;3OJOqRKht$@+!i zcRJ=|w_lga{;56|wj4PBVK+B325@wbrV&P$Y$PT@^A(#ICNSvOi}wwH3$wVgvMs(1 z;5MB3ASmiU*T3 z6op;)TXEX#Og0h(l(4z^%>EoYh(`THv6rX?QPl!*Ff{CFY-|KNiwYOQZko|IpdSI1 z!>#%C;LhZb_4#UeXK8Y@eu$o4%$E8LMsj46%7vx-{$IwsGnKbA$M)0-sV|{7Y(3$P z2Z<7LKYzeB$G_Nmc>R=POm-Zjl)xNwM(;7vZph0i#0$k`;fim{{u+yD4nw&;xfdh zYbwQ*>e@~t-6FGt2e&d3Fob<-XR-!gVn#v)KrewfnouN73)0n&)122-R<6d>0+!w? zDtzMB$Cl%>t>xil-GgHcE{9oWfe5Cu6$%7^==A}oDXwV+y8bT=9|7z=GM7Mdw@UvP zbTbjg^ckB#Jf1&)-qOSUL-E{*O0p4QF+Wj3C@JW~iJjLwGLg_^Rgd4VrlJy7Po295 z)0|B(2fU1N`T#p0`Sb}mtj8RO=qBddKnEzv8i%eKnV9H)ZvOaDO-^oWh7BK6q{aRA zZ`@mBtyvMhNUH{<2oM~#a_yx})qC9->?*uDdl!KN3de{qXl_beoxg{2lH5e2l*wi- z5EGAi_l3sx#NVnaDj3j^z%U953Ujpshs^Ar<|jmZ=w|M>eJYMrUucFt{X^j zV_Zw18I06&gu8^Eo}P`(t>@1#y13kLXwb^q&7rNW3D6y5D1eSYUvT(RHcom+)8a|Y z>o8a71by}0{g=410iL(>G@YA$WpwDpuFht|I5q`W{m=jJHfm}p@l zK6aycK&-Q6d1g3W5Q>g56}wYKm|HvtuL#X8Do+g8PRYFotZKeY`3&>(6rce}8B=sK zDnCSzC12aK=P}W#K6u-g`+qfB+N$#b}J*Vsc0!?4WwWvw5hKL!t1wxk>me z&mdf)P9Z`BH#yLGz|5@9)fjv!u;9)HGl*iffN{jr14$Lo*CY2tx9&t*rUtyC@u`5C z*%esjrQ3-+&}}ix8Y7E}Y~n@k787G6&=7xjfsgud6?>r^y%XZ-k<|dOD{^;+r_`{-i9vjM08lqlQzxdUDLE-c zR##u`FJV!I@(>l4cq*X%ZdCZa%Sy4!IOIZ6XJaFsI(_<;%VT)w;K^|Ndcq3>lff&Vbg)~;VzTAD$_>bIMfz6D1)M6_4}piplIU=9)*YE-Gy?PMZs zi9j0lLKTR!4~u>ooDV$F>1VK}r*LavGxqi5XDlVk51l=7&suXfmaAhVgF|Luv2H595cj&(4b!v7)?#~z_auwY0Cypj}DV3q~KY%Qu=415vk zfWoWx`EwwFEeBw10Inf&rfdvC;57tOCG0-j4xV#oow5v~y< z!dPTgi=i`4y8!TQBqXM>T+wUeNCS;QQJj7MJ4`_FaCrCI0kD*`n(!ZH?@jkN&|ILJ zBnBhV6Z40H`}aY7P(${Hh)CnR+0?wXnqis|QpKEVBbgfh@eZ3FhSRg`D>n@K!Rur} zQ9+^XeGN(7YUmt}+*K13uJ|?pWxl0c%74?WM?d()33M>e8oZ;v>jpS2MDyOa+!vkZ z?WdohQL}5<*Dz3PHM@zzTPEnk(9X%3t2}nJ+bJZEbX>JOd6oTHZIL?EZ2Z9IZ4u zCR1%aT3c%UOCf}Lf=Af1>Z^GI@Y9w_pQc{g<6#237rx=!U}gqo9u|03W~OJf z49)j~{Cs$C3k=?*bG?f6m<49)=hL{ofPgz?ZX015}OX0G0mfwn~{5k z`O6hA6~Slr*LWI9#ZvDGTMZ={xb>*34hWigd&`=RhgAj~8gTetx}6ki+S8KrOu=B3 zG{03j#JzvFL~nGzzYMjCp2O#@U5~umOnj-&w~NsUb2IIe`k^1K>PydjU_~)k!p7P$ zUX#O)pWAO{A?1R)aLGDNeyq+jxRc!8_ng+kDt z{@e6F@9?Xq2Ya^2u{x)ESp4*0h}x60lAZh#RWrh#%GBVKU7#$T(AjQmYeMrMK z8ot`m(a}P08oEX(%+BhRMK!2H<*`6*VEBCxdz@)V?6@cf$CE-a z)eq8r)zqGMf7aF@yhoGwPOaxJO#5@5E4aV=iup;dBVBcjCqo@=zCp_U+qZ{6%_vH* z7A%Zydo7}9{_rVP<}s?O)8@?eUBe55ir1``gG0FkwnSMjJTGj^ChR_!=6qux_nz#* zFZUL0?fq{^CW@U~d*?P<{fhU5(0AUw2TdK?+03dQQ=hyuXS+5{s%k zRPT0M)l*5aoyy8QF~fp4b(7^8X{a_go#1BM<3kn99Ly)l_h^^fiul83{=vUvi$Ud* zqJjfQHisCmp1J-`Fa8wPDpriSIo0pj%?DMYZaI4Q)gu-vn*G-nVN#6k~Im* zxeZZ!+wB_(e5v24bmh;Uq8{Gb7#S24bmQjDbY-ud_W?bMl9HdLwDmJ`TdZZ5U-e1M z?&TYPI)3q3@am0xN(VGO&2tc}{Nr!Uu4$7v^;y0R1qKjrMZBJb0pQmN&&u_gxPX|` zqx`#zXJVdbC(tJPmL4CP*~-AHZ*=Fy_|Yv7J>C$bRRb9MkGihexPLHuXw^9IMIfE! zDf{j!DrLQgv)ULDDNl!U^S=cP1%Oslc1J>nu+gj0QA&ckh=Vdss5UK4QTlf$n*3VM zD2=ek)u-R`yATzgGh>})1>Nxo9gBR&9Y(D%RGd>hp1p~q%N|HZujK5vLm^=CQdmT% zZdD9^&S)g1p8gnr{B8{6Qk*W0*F=&udD<;titZ^{Q_96{v{klUTU)lYD6c7v^K~sr zx1u~lv)zZZk2XADzru9*$_UYh_Ci(54Z9;U=Lz+4b{YcBbeYvwc{jHeU6vix&bQ29o zt>bfJ9x_n`o)rBdY(lRucncWhwAeC$+%Zcfm=;6B*a+lG0=sFdu#B{2IL~m)jMFdi z(ML{NCSuo$wg$b#f9AMUk~14GYxQO?6&Jy|GD-4Qd+zlf#?iyN1m-=5=!E^=5YN{1 zPH%V>ohwNbql%rZr-aHepbiycMzl&?HWnxnrvzss6Q<28)PEG$^C&%2%#s)fk zxE&tdwVZKV^0>g$BR>mwpMIYHpXqFY&CmXdhQc39c6;Kb?@LoZ{4f3vcaZvBxI?Gd z?OM0}xgUMW#uNS~!7+oz^#h#>qiGAjL(sz6a*bY1Z?@%m!qkXFn75}{2sDWXU;sHU z-4`xjrQhb#k$o=vY<)xF>6uN%(VP5#6@5B8(_`WUw2qv2aaX64Y@ZeVvE)fzryzaX zDa_=YmWhWfsTo3VNZ86sp7>G zWPX;=#1stV{urBiaC8G^G0>g*_|V7}{9THcl|Q|9%ltT;ZM8X21TctF2k=*&=-03k ztqKt6?@wU;!XEMO`# zxSez;R^$rUu8=~1wxPcy1AYmNC@EsoO@^FbN*^l{yk&Z$eBw383slWW)pR~0li|A%u_8l+NNLz)pT$yR0NlA2lKmK>v8hqr+FYY zU3oR;tVq_`8MB$*8Gh3Vk0Vb!sb?x~ZGV`vV)fGc;Z4P#Juf0_!>hCphDRT_xM-rm z96l&AS~D60L^N^Umdt2)~5-{;c-ux6;JEMZr9+clig(%N#08;%Rb!?6vyO^M2*S zvdxHVT#3C!ABiI0e*LCQR2Uhv<$WT!U;zpIjC7{V(&^;J(3My1_m8@?ZZ?^7MU~~> zJzwMCAX~^evfL+_e6*-B_esavB@O8DNF)+U+V8Jn^a2c~rm%1tU1H~`WxmnL;e?}m z4Mh`fu(kBkpD~ZNe#n=Q{cp(Y_~Dq?v-P}gH4O7ZssB7Rq#v2t8+v?^)bHajZWyKi z;~0F;^5@aR?u7-UsJs|n{=fQDd2AZWW&Db5MyU}BGH#i#C&57m;f7M>e0L)zZsC(! z{2h{Rx{78BlLo*X)1ix!E6)l)@OwAq$zSSu-fG4AeCWejzH6~7Gu)f^3%^n8s)Z*r z6v=u|tS4?Uo8GY5%bguGWbi^U>#)7UWsl*U>{~l7iJm;8q$V$)+C6o0-t=TMD-Dr5 z8L-X_`XIdzPUiGSE*D)!K_ZdBcDQ(v*P%F2W+oB)YToh3hH zGHgosm<{Rho~!d7l5d!1(@mUHP$%pTmki*)rdi~(ci@Yj5UmA+ZZO{gy(t((vAn9| z7s|;=XW6pl9|p-eclZKy6whU1&s0BowanK0y207W%~rGMGTS|i^Vc1P6B;yj+4_Yt z&XVT$t~{jWKL0ev=BCj8O}1Uz4xQJMYIK}99?b>X4hBF4<`UV-IW%l}qrz@JD^eE= z73s+ZqTurfKNz*Pc4XJ#w|XUeDr*<(A9Ahg&|#_j_5O4Ura{k3{~ zd$@!E#z^WIpr8j8x$EQ~>Y13~q~S6C%5{WbInnvn{&J#K$i(lW#XFLQEQ$}vgj8we zOOF>Hyt|)hciCIRTuT~`)F&zm3ig}};Ai{h=X(B%r-=0dvxiIPZ=NigSv|s4aQ;=_ z`aTXuxC0sFX~!l6o$L8mTpe+Tb2iHRXv<8%;OCC}(Z;KU6tTsFMtmPT`YqqO$U)#0 zEpL7CA-8wpztY7JU6uk)U*!)AW@rwR43cMVH2A-F%5(hK z$)p(58RHl>bHOU#z_gpkW5eZ0^&yR8-3pfZ^-;C4-^?OJdc=fUl-`!d760Jy-?`;$ z6~adLb1Nn*i)k`jMe zVoJ8Y#--A4W@lI~y%q@sYuQ&tFwN}b`pniR=Cd95FXucvSXs30e%JkBe%r0gNl8&- zIT@Lsp|&;;+aDZ%M3v^zknesg=K{@xoW@C?kBHU&{ETSee?l@#_rcvG`3%fgCJkQI zaZ(RoiM{e(`C*+5{mIC*BQ+26$}ODIdM~#~1;*M)f%y$|2;JWX6e0eqS;o?N-$Lj8 z1*7{uyJy-e6thih^m9reJ}?+l6?A}T^7GB+nrzc+gZhp!_8BI>X7OKtkgDkZI36@EEu|>Nok31R7SMS#` zwEvVtuW^wj&#HZPGz`ybh#Yb452erT*oLA)nIflS>_=4UIfwG5s5vPrXL zQI=0PTl5cFbY*Z~LBlH%YbHM=urw+$`~P-=kt%9749vxh%c&*|Fp=n21AqU@_3I6x z>q>=pXVujB65fW>kp<{va$?*=$XVhZy!k@69+^&7(uxP z%|6tX5LsbSPIV@ae3IsYg-!}QX``mk@tID9bx%#C&kr)NH1e7HlL*^^0(dghAK7h7 zRb`Rg^kp$sCmdG z(@o@uv-r$s@<>mjCkdt}bwoJIZKb}c&8W%nC2S9i`GA_^SXhNsOcQxVh$lY!<4)Fg z#vncquB4yYKM>YS&^C`GCsSBa6`EW6yk2&9A1xjT(cIw~KxE@h5%X6SQfMQ#Mr|`( zmTHVCRc)^uThyRGB1HUH_`)~5X;>PMnu*m_KSDNKat{X~+&VZdhS4~Mpj`)3Y@l?| zTwzFFckw^zyD_ou*&GB!N)#QEz5QD8&bipB+T;8i!Ln&HRJ_xFy6EUna*drzI>VVn z4e6@_$m9>hd2P-^j<8^o;({qQG_e37V^>cS+2Fbjwjoq|SiLGccI;5U)TW@49r^+) z56Bh`4CpHfgLQ3_%cYAudv0r1z0u!Yd9xQwSXiC1&ciprP+EEIh{aZFu*~fUE;<@ zQw~a4;xE*Qj1g%H?psq|_J8-YwQ3;~2MHepkxcY?J2nfql;MCp(GKH->g(4JgY=GJ ztFxXyo5Vp5J#c1V)C>F*!yCM9o-kQ9PKpuap$iud++rZIaf+uJr?^0-1}e)v^$Qfw zd#e*a^L^Y&}>D16_WQTekx_y;j9n7*63N}n;J z=eytCyPz(uhJcoaDZsc|IEw;-7Z(FyP2>YXzB~MHdmjn^7d+)so7*>UIv1Fm(&{7Q z(6$7$SGUR!7~qmTS+&bao-fHnX~()XJa1%1ce==(`CBQt)^>tOMKIR?*h!c1p*w<$ z$1#FBlDeGA{vU}2@z|sY5%A+#FKbiLJ2-&dhyoUMFh!MIr$T%XPNVJJL}QP>o$SGs z<_kUEFo-{}f`B|IZzV~@N7Oh4EFlrGlls^5o8*Y!G#Kpop4nf*<6yjRcPf)sTbY8s z0#qK6b|zAG1zB&P;P4JGr?GMncp1r}pv^(Nyh~H_1x(E0u7TEy!#V%OlZ2+UupdHT zwxdT;`hmyKz3?9NTG+P3`2$KY5p52XS^%`DHZao1@&e*7B_+kWt_1;oJk92JFox*a z__?{bXxX?0cN%Z4V{F=zUtaD79yF*;)XvE0Nc#`M`m=eY$lW&&V$H&zIuyb53JkU) z96+0qBnk#}qTqqYFMO{y_0ywy4`E>L)J_p&?+SO%Zfx|1b`+CiOezqo&CN*YqzM72 z3}5_(1uqOL=Kh_rSa{w>&gSu(|1j|SHD!K-cC)A2=b62gHc9M-&*VW!iqJqfzlkf} zf=7q@h&rKA6Fe6PG{J5d##wGF^irEL2ZwBu%(AkQgo;wx zSqa(mm?33UqLgEXC?gr!LRJ|mDw)Yn86iYPNCRod?>YB(|GD={=X}TK^LgL*d7tNb z`*{t+2}}VtHe*N#Ku@ZU3f=SY$?41gU7dE4D`;2H5&lJ&4q!SWQj)mS^$mW4cn%R0 zg5{)3&(nVJL@T~2H7~=~I2f{~x@QlMxGjoF))x#R@OR9afYbRPKXyl4;Ght#+cz7$QSGcJQ@Sd_O z#kOILM59GJ={?l?04jbe1E!-Ib>a9yhpct&`3+JF)8IKd>Yn&L3Tnx6;A1d^!qmH4U+O-1V-q`0zv~VovZ4gTmc6hE0BW-(Z+tPBD4muAKF@_ z4Z~^o&7#AH0|Z@N==Z@ujMt$yyTF(WRWp9W*GBfDReFjY2C@}Q(4hedg+rHrJx))E zay$XUJ$2p{pwLE^w;<#n0PQ_8A_Dzbh#7N(8bM>|tH&F}DFL1Wm28?MzQxd4zK(5# z2aA-0kq#-{#g*B3@MSQb7#urvm%xwo`?=kawlHLU4GSHlQjA3en*+a!o~9RCu6S@) zE;t)%(v`?kO~R6sH*Vf6$rXeAz|JmHrvSs>4{v$F%R+K7Asg+?c@FaySy+E4D^PR_ zLSgq{m7>2JdQ=>&sl@ijmS!KeM_kUnPmHF4+dJ;^F}@d_Ml0E26d`oPX0TtDB3SWl z`e&ggz<4{zYZ6jYo_<&XrOe*iS_N@raXrp+4qT3w&Q59QD)Wrt)3E@&8;w7ZGC&GH z5g^Mt%;+Ld7>tC>3bPl0b13q%B2NMMM}|syrj}GZ~lC6V-91+sVOvKqdtqqGfomU}4oswkz2Qb6a4J zHKxp?7YAY^)&~@}7&`z;ZKS<`Ja60(#n=igR%|X1Y{ zH^j@o{B@RJWxqq(^9&a!61-Jb7JZz)cS{LdnMng2;0UuPchc2ZfqrXdcDm+k(1NJ!2y$d)j4AFGT@XS+v`r%NIVN^ zCv#v+i8Qqf@bC;{_ko2DSL3NE!bzUt5hs2r<1=U-ewv=fI62Un(d_Yu;^JbPieV2W0B4W(j2yHgH7Om;?VTU3DZX;08*2;xDD`%7*PdMf6olg&6$|Y{ zm2oAfNzJc?QM!xjr{}v=5tnjkvczVv`I03H_vt<_cpW}@?*?i{<3wez_xAnwOX-ZDc z8!D>CzQu6h?}=WKRO`=?&!TH7vj#Q&xs`IAN#dgwwtHcd!NJjAXt23oQ=l(7cxzOR z#r9v{d|XX$OkVbh$X$Us>3wwDgAcxW{rV9i$xzD4(+v-QEc_dw`+-4PUV@PD?@aE* zA$*vl4ciCgH8l7ptKAHe#QkK=Sx8QMXzGR!7~4OTJ8f_KMU%;kq?;tp=nP^UJZT_x zdOUA@s;s+o_tv~g$IV3|m~;i_D4*lUpM6;QxPRyBhC2u2*-OkY3f{VTe|eDO;7;R5 ziUtPZy90D~Zz()R-*c9Yw6aFv;YQR1RipjcGth9L@54V}h%_xXS`peG`>0(ucRTL1 zg@)Jl{+RuhKb0~NRH}IQ?_CcokY2r;sHxLObC^F#9LT>{kEXc>Y|d`Ch#wWIpvvJ-kJvUF)nHm3mZGo#IpP>8RP0Hu3gc zxMEZc^L`A9$DnjEMvV%KNA>mSuCpWhJbrFvOpss%9!;s!&@LO|-x{}&bCk(oPkGWt z1FB{Pizn@5A6)cSDXSGYl3`gzPu~-`*LxUUn5skqG-j$O0(P){Bo2sN^_y27u&9z1wqn9WtAIQH3G zYWEC=TOzmAI(+zb$8Di!d2LF<5Ke>Ie|YP~d+1YYUv(PvXz;BvnU4&4&G->Rd*L2oGUYl zd-dmp-5KcdVG9J)m3vvm?TV7SSQ(}6z}EwZ_q4AvvL=_tf+s7H&4U6wXF>yfeGyv$ z{jxDK_IuUp20tTm;UiIl%j8`(Apdp-lPNH;PD`{ZF}=yAVh_U9-o2^M-VHhH(*C+T zVRd_0Ov-?z;j8Z*M2H*^HaCPR2mh3JNPnE?GWp!{%AnVW9Vbi+)H$?3?SaO$i2jZdRDds0dy)mMV7%!<)mmP98;TL#F_jxjWl)UZrV@l9iIO8(KKfnHbNQ zzB3=naxqnUG-mI7qu!)wts-k{4yWvn(uPC%xeW~m!kg1Tth=aktLllMz_-ZqNKOjUn{ zODs{=voB}wZhgmzA2*fCa@OL%RgRBjUFt&QE86$<)wXu^imLwY6-$2~Ual!Q`z>=p zV}}J_cp$?G0)ax%(^5AJsv0&f9yAr($?F)<+(G(R;Jd$JF2?s>7g3Kx%i4Mr%y|qQ zK=x;Nt5#{2lVUA;v!Sv{jz>iri!Ik_I1?ZrSAqZ8}ol&~7dhSFX-zym_$ykIwnm z?MHJ}t~}wHx2zAdNqHT$zw8_1ZS8&M1={Hu#Eh+tt5=5I zWW}fMMt0t!e#4E2CKH$52@F16FSYB-okZ;qnyM{4oAe76F1+Q*q&4J-uqdn5D%$nm z8c;ehU`Ro@P%~& zkHaQ9b+~wWPQLg`M>f8mv2FK%3rhZrh_G*1WZO@*u6_5J@70Non0kxIS)NTZ*i1e# zuk;P$P~5vyN|dgjbGWwi@#hEkJ(y;*h8)GFmXBdYoZidL6d5EYY%w22?ISLiT9oys zV7F4Y#}8KD(ECD8YEVCZC54%x;T`AneMuC5XvM&-)8#eUHXCOVxdQ+bZGL-R&I z4$xw<0NedpebQQ>RJP)Oe}(PmnAI`Dp685pU6ivRP6rU~YM`LH1Q#bN3?iFMp3h)z zIevg`s|m?h05frvr`Ad4Lv=5^_Q~uJC%9}ngpWxR^7sT4jn}h$_K5cuW_czZpBsaC zqCugfC$L*V_dBYuk0CK&=%8`%1w-&q1X{`7&}O~Gp;ELZmErCW7A&_6%I};$-3I!F0J*=i zrsnjSGgJdF6tUpLMH&|PQe{{$WeA4I02#>x|ArNXMp71w0ThT zIf%jy0ZLY8=3~@%s5Pw5OdGS1jvbz}rBu)Y+K`~>BmP%ub5emQbD1IBCA^+16wNtq zoicdylyNx5=(4A4Zv8!XpTA|>6J|~Hr|SW0uoAPMum5?oo?lP^qhx^HAlsrU4R7X% z(Sq|&I!5(nm-2oa_NZltNkoJ4s^FkT=oh67TjtYotSiDiS73JlGX9j|;9kpDhx1hd z>>W#8Rfy5yjgp?5+4?;iE?rutCMN2pO)_3A?IaBIGG02Ny77^ki#O|66;Vb}6_sBo zc2RXh&+AqD8~R~@MF%hatt(W_9hmn&eH!|B*^6RgRBu6?h(Gg3d2MOqS$5<-sVXPL z8K{t4jy1JKVDJ?D5WJK!q>mL*O(!|LuJyVDzlqh#@9*yiOEULYRmWK-oeLbhy5%Dj zxXvVIKYFN2S%kWM+Li6{v4T@+3r`|>CI?sMHTe3wty1ndCeZMjg83m+cn14OjMAhh z$rgK-<%ll#GahoBU+y6cIs*eaHYO%$bs(=dJwwe7f}oaYqLr>Jjzd|V zk0{Y_dj0~Dvhmlf!1nDydFvN}J0M3!3r-#BHm0q&s(a(b=8(rBIjIFE!fpbBQSNHItXx`>MYyW<{fq3C)rZNg)jXn4t zR3cL?(B2~44a`qT^)R3laGy5%$+w9v*#q7!=v(ZgxFqTnq$BkOR0!=K6vT=!S}HWH zKQ*y$&J^|mAS+CpyARHy*#WO1ND-jDL2o-_x!Bq+UpNu?KOibtjly#i&T__WueMqD zTp-Fwvc4q7(T+RG?;+}jqi~ChkB7$(8eCH=zj8&QHtHtf8C9}!F2W;^Dzk!*FwoAQ zzkh?F4Fv=h#e5i9=}t!vB_Q4`6&cH#dim;2-XB zt+Fb6GYzwDA0OELyaAI%zO&k@9JxL45|~*M_3rmCR9IEL#fb*z-BT}b#n@CB85*iW zU<3+kxpj>(>C&acP}>1*H0T{c0SNtz!;@etOB*Tx7`}k1j6NC=kmk2XkyeGeW6%#q zGr;YX3e(1Pt^R(B7);A5Ip;C7!~S@lb_-EHiY>Px{_54W4>=)tO2c>ltyi6!bTYB~ z`0mY$Jo@vPkRw^H3c_N-+;`*H5M;+xS4CyKq**MEPT6??K(PP@Y3(Mwt}vi>&_dHn zbAVh_ECtGV?+mLkx!RYonItxzurM8c{%yiVipa5h1hMF2G{+v`EkOr-@6^Qah98qI zpJ?e^WYVYMdjrgg>Le+eNY#|V7T^hB4p4WYW(?mji)jhXKsDs76oXuK}0hWO6JDY=hoWb< z*B~V+{Mg>OAMQ0OAYiBZ2uB}lenbDz*h5Kj?C53sE_Re_T|66E{8Qk!T^}73Y`KJ0M1`<6rmsj7nwS?6fV$M0aR;47(S-;&ffFUs5 zF?8TZ8uL}^X9C#(y_srq;>ttAfQNbkT>%_3O_Misa;W^~>({vhUn22O z4o-IVYn!%P(9zQ;`tdU%S7_4P50|D}r|8r(H*zQk*-*BVxW*n-GlwaQ$wy^l3E-KA zhK9mCb$9oh*!gyrJ9PW9K4UP&2xPjC9{t(><*^tCBkV)!@#GK1hT}7!NJf4!0{X2p_W|o)#!-4yrlWz{_VB ze>~O#ED>P}+JR*pr{m)4DjrvRORT{2JocnbMZio~3W)mQCIQW1^f)Y>ODFRPNQt?% zLk-d@6oeVyvLqNk3?3#}s{MH?N1P^kbs$lI*bI%8RRD4t3sRjK?gl2Sc;el0v>84|0Jp$z9GBrD-B8zQcfIO`+qtCD7=f^1MiK- zpcQv$#a!1$1>hAxeVEABPK{PSt-c4kL0l6MWL0=E!e1Zgyw`BKr$Rb9z!q2y2?@S9 z+)-6va5Xaz6JquW{B7!nrFK7#X2X(b7Vi?312;D}Oo&mTvBy0mhUN|kz+g=UO(o=j zYp{+Fp54MoOh^~#Nc#TC=aUbO#1yty6@*s!Oh8ox$9lkzr~*6WQ#I z8&nNB+91aUCB8P$liYdY3Le8TH2a6cj1P zaUob##!_ZwLpamn{{0*+8r|8-r(}2cB4a58B>A@F(6m6e);Bm4=2w5CK8IEOM%QaN zx6oHmIdH&UiW}s{%iiyfnhc_dh}4*d_?cZ$`71o}4uq`z#SuC^O>OvGzAcy_X}AF; z14`Gz#!cNj1l6rLHqSAYNq(;)Xwo)yZVOXpM=X|0MFRze6;%1$!=IXt=F&!mI1#?D ztR(A-qaO>9%TUj};6+ou7`$;T)^227$M0*2c6M|iD|Wr$ggJ!ad%0Iw24YO$>mL}1 zjyv`+3$`80<=*bomuBG-*Ud0JV z9|+wN!xxk5FHoYXStC3|9q$esslDDK{jXjzEr&qpz zCs}9IPr+;-&d_(T-oQPONzr(Ob17FUwtk9nSX4cN4J2jLaruUaP^Upkd&^7)diZ4& z$7oofY0K5-9}==oEe5}@NZOJx`vcG*n%sE9a*j{zggFoi;k&<2SePR1(yF05Vyj+a zR{gi4@|W;9RCGmG+n*@A3W(3DMauQ#fK@xj&dhvFCIt_V>IfTGJt#od9r(BkVcH6I z5c%OK%w}qBva+++a6^pEOc}GtWdM;#rF5Y?E?WDru8yPFLjn<1*gu>zjc}74`<)WR z6WeT-tjUL53#H-+j!CqNE=NW2$LnBt*!gBGxE)rNYQ+Q1Gh8v^2M?|x{^Dq!M{C`=^ zZ&42jz%16V9li#Jc5vVuxQE3O$e8RUo2VN-b0g3wH2UM0FVFca$)2W8P9ob+^QOYP zYsgl!_c^RPdV4X*!1103_4EdPr4mdVB-?0WXDj z3mF&rwEF}x%Jc1!sBqbqjn&&OU%X(GPpQXaX$arcCV%Vj=1N$7VDt+=|5(W} zNd>8g_4Untq2;Hx$;%s;m|=^z9(BE8jT!}~2ehj=sS}+0l~_A1{&hepJC$HY>$img}S4^cg+6A z8EAcDzbn3cB=C%97OozC6tu|p{j>bKI9UoP6K;rfLSQB$F`kdDnz@=QVz^-lDs0a!tt$2WPbg6`vAFZj5qGh=Jb zD4Y};AWOv-Ma;W{a~n+wL@=0`t|Ki#%!H!b#rP~HLBYG;i;8nSyS6@8aE%}1NB{xh z|0K6<3yo&>lSTOka&{R)5j5#YH6K2D6s{M9!xfzskP2)cp7Dfa2<>mp`@tUIEg}2C zi1UZAc>;zx3~?f+!h?T=Rf?+TH9mXCUOl`fQ$jQ48hxGftiY`+t@W(V%;+$rb_3W0 z>FMQd6S3;4Xm5VH&RnLUa_eKVJkW7$=HY=sT~b3L6>>~Wgf!M`s8pL|%-bS+(iz>?&&bNE?MO`@bRUm%^&WOx36VRg7fpzh z>yO@MtS2feiW~~u2&5knQtP*A+*SmpMWrKaYHCu;x==L~SPVF%lal;#;edmh&cpN5 z9|arI49uRao_S&>6Y0T^;Sp!w04OUl%fRBjdGq6^Pe=OTvVon4by>GN`dN?LL-!h3 zN51-Rbo2gNuc6rJX!x3<$pgEP!j}M8O$u}(FJGo|ndNtJTzN{Jl63UYKXGm*_{S^5 z#tJoX2*v~8@ZiJ)yRpNiJ`Gt)y5WtC45mCaVR44f$+5m_#O8#52{N-!0ya{BQW_rR zr1K+nY$4(AtANS|D>rQuY)V8G9BN=Mi4}Hjm1k(}^Nq+C%u&fAJ z9r)ovp$u-7plaapePuAGn)lMs(12+d$i(ngJAA#%m1b7g0x?#7GU)aX@sct|<9Wa;J&NyhM+M4x;6m{2m<4qJ>NON&c_$S ze3he2jeAaJme^}oMoz^cTD4hxO;Is|WH>8(flk*jlf5~-+kcFK&*ooD?fXuPKJn8Q zd}MF;phGs3(QVc46OneOb|0@xctl_fGn30*c>8X|ZdZJ2o5WK-Hs?(oe_L8x5#^}H za}p8~APsUx>0+b>GFkXBToc&aH!&eZI-F62HTMt-e&ii?FoZxIppi$-kMSdDP_4JljR>UfziafV&&B4w&0yAnDq`*u>=?Km%{1DjC z?_a+-Rjl)j%k3Wx!z>pWGAb8IZ4=1R@D0GmsD5;C6tT9|GBHDmi5E@3UtXQYBZE5J z19dRGYmzfEy2fXzSTRmzobt#O9{bNQ1^NRWq}mI?gF+`{dmGQykDgR0R*i;NJu}&~ z{`%MXi^>Y`d0z*9KM|bdCqDH=@Q)OopTF*#x8fqMd8)T%HI)hJR4*4CigkfYSV%J3 zCg8ux%U2@puiVRZqS*vOXN*)qaRKXnm?Xgn3J`UNA*o;p=`v1zawpdY-BU1-dHfh1 z0U*!JRU&$Q!UA8$>sNrH0S2QS2o+HB;Na!e)n`@-yl~;J?Ssz%0PMxAA`-qTRRRamLOK3F#*RxoV)W{Ty z(IQTiixFk^?_uOwILt|>j#$ht|HqGOK6RdGKT5Bj$EAGVkN8y zzOE8woHHhebTQc)ojAJLqsX5TU#HG-%PheoBRGs~{+^$l`C529A?09svPHb6xW3|# zFfq|Xw)S$aLj@xWS04^#?nqV-ci!;Om3dp)HE-!E#eY@S%vZ~2DZ&&h*{JiMqf4E4 zAKlN`bgP%lAxpg(^)8n6+ufV$NxX&|Z@)cUCta~qJg5Fi1xx*F#-q~tZLZ@RlrL$= zY@XgQ`j63dim6N`ppKPqlP_8AzborWFqSe>C?IcWVhj_Go)CF?cjAJLZ9&Wg9eMDF zFn-2px&=IT!LL;W%UjI%3Vb4j8JCAOZaE%4bN?zAMK90fP%QP=bkj|wxK)2lRHR8? zHk4>3EaPWv+TRW#1e`wZwv~qWRr~)x%?OEX$ED)nm;3iQ+|v?OUq6n!xGd^Sev>IQ zM`UGA%{o3n{O`s}MaeW#tK@NMp-<;X>8+oy&k^GRs3}LU*Ic}C*0|W_UniU2%@~5A zR7f`ULc<;(X!@%T23F6!xWh9;nlu-=Nc{9Vp9t+?*Hb~&c0~E5U`$7Iui+by@D2R` z{hKwBbfLMECYNv_~{^(sBNu8tZg|ZPLAeWw(=TpBDSTyuEDf^votF%|jS9lL{_(rb2{%(fU z@~@qOaGeBpjWTVSld?VcC?%}ZRYB4^IS#AlpYQ3@;l|A7?ezSy`_VU`x^VT$&m3Sg zN%(Noa97&+^&-zQqN1M8^=J3Fu1^=67FHSRb+JfJJI>N57NQ7dZ-1DX68FxrJK17m zg1>^J!V2Y&>WXz*ZP;1I&kWOYdwx`?TzY%3bE!S8l;;#H<9g?bZCk8%IK^z+IW(|z zIbSO6-IK`Q!ji>3nrz1&JGr~9I$li<&~wbrO!uM8T-kPyvTbaaCfWCvYfI9HGw4?{xTtWD%<@=T-fm1-`IbB^84R%-@EHYuLglAT@-3XN6tdW2ME%|*A^{P+I9 zfTp9y-*CXnEfrh+mJN94AjDzx>w^amCO%xgZ&ny^I#g#y$~5L{;&`Bpoz?s=-KhZ1 z7rz|)96LS~*i^4-=o_}4w=7R}H?PV!laY=^_g(PZ`@6d}t*+~zxo2qcHuA61MsS{Qk)#_#E42dnsCbgYmX)Tlz7 zq|Wh(uwV%+>CeIer}jBD8Y?O8eVyfleot>x7$QX8xGGRh)GuGY5ENv7bJJlrG(XoD z3(vaf$V8$dDK(P;P}3!cB^Qs*DrHVHn_a zqoVG1t@ctBwG6YWrfAdOAO9r1Ds3@?@HF&H}|4#g=lmNGO%+t4c zgh*abqhEl=R+M6j{hiX#(|wyyPO}tNR4S-BS{NJmBdtN{038YUheV%Eo4!_TFWjfT zPMz_9AzEJmw*ZFY;0`~UC>!#Wr+I79k;xbT(u}3hQZCc<3B{h}SlrLQ4`#GgRGB8K zK1d>~nN6SGwi$Rn?kXW_2*4!l1P11PU|IB(+E9r zlR8G{w{?z!}Ju_CG6+aED9I&UQ_?`oj2&rS5AjVl4&Dd@X;;A^!PuYQHn6Q`s?d+Gda z0CgG_x60V`5?9 z7Pdcdd~IXzgr0uG zkCz4-|E`efSBeK%7-q(FUx$gClEsz==lxRZ$`)p9i5&GF{idyht{bGM4`D#t*1*=P$)a^7FFkQqw(>IlDPA^QExSRUCKx@c`{VdYvVb7`Z8B zB;`bn(rv)`QbR?CNW2!(u?oB_&Q-j_gm*m~sL?u;;Y{cqg{gobypS>_(;cC)@m*Q5 z3`4BcE7?0ow0EPhCcsm~Z8J3nPKOnFRuT$67!^_!Ce_T$#h7r1zlom=-X*dZ zd}N*c&0cQpJc6Bc?zbz#(G3{n1_sTU*^ve_fqtT$8-cmfs8~~*8_!u$(}er;DSPYd zL0id!w%fUCMo}E@s+N2ESIvG?jIlzg#T5UP3?Wz?J=8>9%%Al&MF@TS9&lVyIQ3~M zOQS(!FU~<%64>Leh{r?74FIX+rbgZfnh*auz3ytaP%mY;-LGD{m0SCT(hhE>7aqn- z4&dC%B-TA~sR{rfSIc6-f00O2y&fRhBRimk6f=bjgV+$J{CguuHTb#Rr{` zM$GSK=nmgrN%0Y@^pRvT>x;3HML!bht#zHRlY;|rw|6K@6|nDdHZ86vc0FCV(|BY3 zr4nd#cGHELiyL%8@90nYUNt+kJeiP`q<}Gq=n~~0=QOS5Xb9b{8MeELyq8>fxTdl| zgw~BuOZxf~8B+B6Us(I2>-Q*ReGRt8z}_Y?rsMm%t{ct$HxT7ehw^NrWscN<^kg!X zTN}oTkZS-raeNZY*JtL{oLC(WUWK|04TnGmiX<57qRooT7=#x7O$T&S2<`^w8!o}_ zjM^g6Wz`B3CCXP3T7wE+CiRu>&;eOVv_}TOqqybCuURCP!k88SZrI&d9|0+7{pR=`LLs0NiGFfcLP9^PSfFDq zryNr318&LY66|&-bh;X*vS53q==;STF5PEbh-w$(e{Pvdvxr+&aeiQU%L!;3qmeOJ z*bAj|kK7p8pz%74Uv*x>_!dQ*OiC9fmY8{smZ^+{nu&D85tj zP81asI*2^Rr?~#j0`rd3c?a&q<*TaZ{C2c<^z!`iz;Y3L;XU*BGo~&A)84I{r#J^A#x}ou_YPzcbwc}Okv>+(2YOXGj9`3? z8$uBb5aT~qN(N?F;adQV=Mmz}JafOpo&^)YmI#$^>zs(2)fh6ZC1$`(R`v=s4-Uvxv0nJ5L7FTF3Hk z-MS9^9N5$zkAA|xoHC_3;-|r;2OF4}mRDC{=x2bmyxMScX!iQ zQf7^)Idhsknrx6v)&h}6<$r4+>LMj(y#}JSkE@`2d|g?gT|Zv_=_>7;lPR=+#~=(@ zS`kTM9BcrD02LWVZm*(AnEQlo7w`LN&=%7Si?Et=3O{R=^6=7ikA}+EVk*nbDy&=C+SKETB4js2GE11jyOg!ZSBzSU;h|4 z1(qz(Hy~$PK9QwHe6I-aSZZ4ctOEenZlWT~z6y7yo zr7yAJ*f|GpXOKiQ4_?gpOSe&C`3vrrmDCC_ch@PVFoJ8Ms`4StN0j*5?Tad-E$Lr z9w;;{Y{46o6W1(dm^wnY{Upb&Qo`!+!~}Swedin2U_|SiJx|=ha|K%i=odfe324*b z6Hw+)8_wO+n@-cahQ)C3&!S>@GokO)6a!53Zc&GB-e%X9p}!qVox(9%J%e!vcpF8g zCBnaDwN227kVr0pSFY8eG8l`I_1w5gRm6Mkh*}`z!rK$xTCw?<1&$-)+D7SH`Yvl* z-#b?rLJT=xb|j=g^pu@S z@Y(>D3oBkcjcW&gM|j+X!!hiJg7#&0deSvr3z0Rh>T` z3-gQ)tdqZXL}KHS0dDPP$EJl{{|*T=%r?Hayh=N3Z*^Sv;H|)Z$(!ptE9b8aNy>1# z&k0{`)G2uJ{P`CumHf+_AFHd>m5mz%mkFJ>(+h*r96fc#``+8uuz6>>X2CI5gE>ud znpZCLX=k}o5A8^oLl5QG_K#f4fCM4ChZ+-^oDYRLop1S=wZSgq$Gg}Mb9*4UW@I$n%+LQDXEA6L^;mFNr{Q;Ms;@)| zyU~zh&~L~&a3KKtaH=+$DN=qn^y;VrF%e=J)N-IGrF6#HZxG-?a9hQi0-p*AZN8Lm z=p?2oA|HbNsT5aC|9ZW%?`>u!bP7>G0!u{V3ucKkVS&BKiaDWv{}0E{(g(}LRhhk? zJ$o=DvNC_$+A~4}3RC3d0Dd7NL_9)L@bu{njxp8VB*AMIV>#ZVS^B|D*^M^>vvq53 za4G+wiS9?ccny-(4%o)et^URVVsvv)Z#BU<9(^6GU9=Wy^0JkY#wQh;JDI<#7LtFZ zS+!OxqxzbwxV};NL7La9WsKI_>FFx3A(z(Yb;$Djrl_(wLQgTngFm7i zm-`+Yq^NjnVT?{C=2#R5@VV*wQRLEtofhQx!6@7!0k!?~A0P_j+=PsX z6dszAQh2-bVWj!S9P>Y0a*{3B^|yyxXG`u0o;@nqvgPkKVwy!+*v?8i^VYcq<7C|!?6^`K~xR@^iuSP3d;<$dW>%n(+qrczk2fcQC(LoLp{4wC;sF~twWF_%96AW*1Bm8u%F8Ii%mPz8J3&6a4WGlt zKZY9oIn}NB$;BjbwUOmVSjn}DwFxe}qb5eVcfNmowR6v&?`TC)huKL%zV#7j47F{C zEwDjIettHL1a(5@Z! zt{O)vt`;ZVwrSiET?bizew`vR1>glHCUD>xeoe8u2>m5=_pz|J5_o_VMp3=)nt9KC<60Y0h1eSKmRcKrhICx%Rwy|99 zE_%RI4o_o<-c?+Bh; zZW?|YQ1)`SwaW9;wW`r1XpD;o@W@$;#$h^v(k-_{I%PPf#K_s?ZHxb~dd#yMT+#+s zk!~NpDsPjMP1P08H4k;6{2Z}$KeZY#Q?3G@6o+v8=Uord^LbVtUu^d*c#)Q!eF|QY zr0}&6XzeO2$}Z4;RC`V-F&BNf&Gw^f+EA)>jLI3AV6&+52gmZyZ47B-``m4PXqUZg z^pnaqck=G5VdhUo4785B(GP7NWARkIk+H?V@=|t)HAAI8r6B8cU6xgEdV0_D#$()t zW-=iA8rVKyMh?ER;$)Ijv1Qz%v4dip+>?iW>SYJAJqK zLBx0}i)Bw}LI~>zUg_rc&+p!W5LkCYfj5?wr0MQ1v7xJ1-*{|zDS+sdgPt{}JAvl% zd1i(x9!CEiOeXM~;SFIPKqI8_%Un|RbS|vJOi>e<8J6hN%|^lM_hZ6JWBQ~+p=W4v3e4m} z1$oSdA-JD!zMGA{%eY9U;G<=D3AN{!RJ3r-A~FmnfCC`Dfd>pa%gKu+o| zfrZtx>$)_YNJ1lj8m`FJHw?YB>Qmk!S#2?4CcD$={(+@#eW|%xCDUq){2N-nEv^cqIOagsYdLN!t(%;f$SEWQ z-kgz!n~i?d`0;Xghp1BLv%}_z$Lks|#ndu}tOhybP9$_Ab;V!TMn0F4ppr1NzJ{l$dIq&iXL+RG&*58}Y=pd5e zPs@%Kvz>E1dBVoUQB8~`^rO1B+TPfg#JAQ^O@m#7WA`Om;81G-4+v%OaZA0kPfhfm z^%~s~mI$V=ZoVF^(*xSCPsB|rE=?r^M&ycd1tkN31k6MF<5TMty8V<-Maw={iuyCg zHDOkNmtHJ+o^{jxkN!c8a;opaeOf(#5t)6}eAOg9CrR1vdiU4lA>-H^!!FBv46e%< zY!6yialCIJyK$uZMb*7()~z%#>y6{|VqKh9^$vBXd3&p9&3WfbK`~t&y{A1M2bG9i7yt)1dLgmdAdC{ z)noRRfEp1h6ij@PNr|-$B`)oN2m#Y4dfaOq?jGOqHmvG$s}R9|yU7mo{O_^P{Ytn} zd2D}kW+w?eKI+RG&T&fV$cGOfHqNJNO2`h$+fXx9Q)N2KzL+QLFd_C4C#F*(!hz30crS3YP8L(qXytZlmU0d#_^>V*5H z1tP@Cg3AU6)Azp)WNo0nA%IVp@Gq$Gas!IqzWBJ>_GjXW%In`(znl0pJ^X+K82RGO z+uqhLH9JCwZ(Q$A3arR}@bD33h_)`aSo4su}KiK7!T3 zoEs}5ryeB_%^Rt#SJPR}3Z4ArZM(X3UvJ7(BhG@#nz66 z4Bcu31hDuME@7&%udn>}^r6pv)vu~q{99knSZ7y7l&4m$mPOF4INHuv+_9}03O!vO z;N-jJ@m-4~9&0~X{rrVR9#Jgcd^O%1Nlnp0_B_^O^U{7|F*3r=GJo#_(Jb`ARiviWy z=Uw4Np3#*Ar`TVNJ>SF7H@u*-Z#`upp_*lt;ZF57!fD+TbQwj3rk>v3iBys0gLDhB`QbNZV`5w}&|%O%8(DcxKi8{9 znEfh5zrtRp7ygFnNr=SPJzfudA zm)@?+karG1iGraldC=lQ)K^*9KYf)sOp}+!A=0S$-A;mK)9Z~fS_h3PXmnn~o&~s2?=+kVC#YI?TF70+vaU)4`gV6XD`w66b4k4j< zrYwKr0QU$(lFPtup31=IdGz5P$LmPEe(r%bl=_KV07pfLzLBf8EsVWi8VR2PCk z<x>wwtSd5(duB7G zdt;Sg$rm(|Ay>~pi6+B7(Lj91ZO z=96vOm&L}qKY(HLi&0L6I8UVvu8o%Y%xBIZR?278L1^QZU9P$= zIx+r1Wjg$aH6=!a>B!X=IKB@B(0!~Cf&>^zq@D4+3Jt}%>rr7y4HUb zTe$^`-u09Vr&kCh3f(kd9^d>umGmq0S_8cn{m5K*I_p?~l5evMW)`z-Js1qBm8zrJ zQ`-FkesxYs?oUI`9_UE6IPJpp;MPIS+aXtfv#coyuJXx7h z;pOB#QR$(LDQPKc!a(1e;T3lYZG>X~v28r$KQePdTj;LLgJfdFI6$Al-cJ@5WG3BL z&*Zs5U)LsVW#}XHf$tXw9h4Ykn%P4~&IRY`OA^B8F!>&wLnJ_O3jq%f%+bvi7MNX= zhe=s^#%W+ZrKckgftOiIYU<&EGh{Lu>}Q<39dWE{RM9ysp8)QadkX%&@PG9TpvUDi zniN-3xD#+G{4t6ZaDD+#3v0KsRgJ#_Fg}f#v^DsvI>Kw#@Q>!JB)JjNTYzB*q<6rf z!bu7|GV5z|jA*L`ag8Xinx#{qr?1b%%DVdf`+dXH>uVR`$_c1U_bsPA4?!ND+4=d-(&vz)Cg~UATWV}_fU!vZM<%r_{S8yzMj*C8j6n55456o^Yq~qm zX*fLwa2j~BH#*+iKIc2ejQBAzg|DGS4K*=_R_y^}5`7zSb~b@2l@`t3X>@jF#~?Cz z`@?jU{@0;|j{GTN#lSrBXFItMqf^bqIO5mW;mL7ye?`=f1m2<1VV2kMEj1FzaPYLx z?W|?nvFR8=&g2<%_5fEeVXzot^^?G*uzY~BGxPJ-R#t&{s&EBpZ)*z%PZd5qhYmRw z4}>=6;3z^$gxlYX$!#EhCuk203;@=b;$Xxn*p`{w8fsC7QcE^^6uHfGjT24uX;@+M z?eR{7rb)jLQ69c-K(Tl+J=3)0Udo0{M?5d26leBL;C2DA%z>HUEhKSWQ9{BUmx1mi zBRl(p?t^UH+Aws5^zFFq9zDwO_x0@ZhYuPzKm&=#3E-M4zWw>t2?L6&Q^Iw{^$iWF z=qg0^Xf&af12)9$^Bfvb*)cM2pts=b)em7ZvB8A&kd1S4qB|w}mY#1L-vXo@uZ=-V%`*EVHauI%nACS(it*xOC4C7Gzw%pN+QJYV^`OOlk0&+065Y!X& zMnC`hnA9#PdRr_oGFQ^llV2|A+j`uV(^5O${y&z!1D?yiZQsh?De zL`FnP$;iwoTQVAEB7}^nlvzj_AxVWqDcME0^gpim`QM-C^M2m@d8FU(y1w6Y9OrQy z=eTH{YN@+N&|i|ZLL1xn*&C-4kLaH6ji_Rgn%@83bT8{cGoFNwB)51C}3YX$R zLotR42<7Br-31Rc__zo~3Fj0kE}MQy;J1h)lUeN6I3mLuc~1yQamWmvc5F1e!C{>cdWZYFcG<$~XH&W1 zqK5+ba5j7z#+@%-7r;P!{Yw8#W#6r{-cjWmzv-!-GD>lpnwSu7!_c#=Yfk5u8g8ABIw949XJ1JmpG}9RqXT2r>{RX4reKiZKc9VxWH*14HgR@fz05 zh(d-HnqIvSkq1g64~ju!z`K{rrC*tPO}OHg0Ef zSeNO>YtCLSc_Tf-x0gS3u02&NzUb`+yNQqmfcB8n>x{OMwQv%J0c9+mHX;E zOwSlu>^qv_e69Oe-&$j@3r+kEt`*d}`L6{YnPa?$d4dxH60qw&F~Vm;$e2&%vEW z6<|0pdJswGf~RI4r*Y?v{2`>%7>==Iok?8hrab-fPhX{oxfxR3tnF_9M9=V93G!i8 zoAAawdj2c+Ruz2v4Z<58NW><|781VHGdhu*JmR>0S|FJg>**{nv+IfZ_J#D72xI)H%H4? zFsEns$LX_OfwwJY%Gjfg9M_~3Lun?LEv$Kgo~}>uK1Y8q3B!YW`4in+_$jdd6>?3G z`gAui;=x)m^Jj%PKbSlNByMWj09WY|MBB&4V^N2OgSVa zBrxs>7(aQ6#^PsdNDyLB*tM*sxTBVq=YLLcGczv%8Hehj^i3s9A8Jp;4|?rV@`d#p z(ld%A2>U~jib2H~^jiD<+aF;Cb#Ge_n=d=64g9~Ddu;!FyqNQ{)v)CQVlUhakdd(z zVzd6J1ieBLxT@NIsqoWaViK=YaEwuY6KOG5=aJk zvL$okjx-I9VS%ftg z90yS0z!?P39{>J&*M{9kQQ&qEkRq~OID7VLQj%4m3jRF;aUSOhlYavD`u;Yx z`4rDgBYJdrgrF0FZ&a-vz1b6xpY};g{+WznvO6R~rM9nC?XR(S9*8k;?!}*Tu664| z6${T5BZ5_0=+^NpZJ)AYni>C3R%|KFI*ejzvob)W$iZ93O6GfAk2_eY2w~qqhS_;M zEdAOwh44RXn7`m@J(#a+bAiJqwFW!ZM#zv#aPRh*4hzPx4$w9OaQvqar8Q6$^^)oEq zD$MuZi<&#j0 z*LMQa$*Oi~Y=s#9)hy0=bQ0}{3JDJZ}RPZzoC7wC*<{WmVQ;@YG?b|<$<4xu} zXd}qH1r~%TXVRuF+@>n6E3ShS4wHWgc7Q-%N2}gLtxx*cO6#>v{&!R`IK!aUNoRwX za(xbEox~iD;rHQkc{F#-LJ1X?x$12$$-)GF@SNsMgE*Y47jI7Z}LGkP+<&pu7s^ z3NDy{>bV4kTFXO<>_L#WvnJ|R*+7f{`XS0PliO;W_>mG}Z7clm|aKRsS zIN-I5$*;+;d4j+J1C7Tp`r&qFp=%1mDh%4oZjkVqZFFC6wS^=8m1obMVLpkIro!6s zx#Z3rLge+~LpU@Y6V^PJ{!Cxp4+$NpuPvbmRA}s5a28RhLqd(*Aa~;xA^^O9j#iAw zsOj|648{-?Np#GC7g5OB+2#D-Y~#_0+}iwzu^{s<^{^bz;u!x6UwS#9azgC_8!#(L zY;@4rn2ff3Io*M!90ZuvrKOFx&$g}IjN{2r%tGOg z)@9r#y3Hwj5qI-;5Q0KNLK;C~fQzk4D!wA~4@s!J4j#Nw{}T>nXz`Oa zlP5EvK*Z6)h?j71_dF2=9zi9XL=Y3is#$3N$LGJ$;P3(Q6!uEN5|Ezn-1!!SQ~W7R zY92s=2t0)FW=O!H4u!{lpjm#(bPRZ<#9;8w_n3$Y=IeQ7ex0)Pnu!xKaR} zPPn;sKQuNnLdo$Hs(<}r*&DA=R=~&*Jz(DflKd0kn9^PrmXl-c4Zx7G!NK(20q>BR zJ7DvMhK6?Jynd$MpCb!5D9B0k5-82{k-7_(U_dr$Li!Ea5NG~But6KZ@s*OQL{S8s zsqv55WFJyQ==%H@_$&)2T1f_-J$q`bMyURHuz1aBxZ%7;VdMw1n-XLf*pr}q^Hg+J zc7_1}JdTbzITfg*DnO}=-!3LDo=M5i$M*s5>gc?{@FF*fG|xxc`P)V%0AkRK2kMx& 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ǢY`k&pz@%m;9Gd2v$9h?r+ewl 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%0AlFr{g}NrG&Fj-=w^$4}#*aX-qS^@vKR2lER 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 Pf7DRbQF*CkdF%fHvpvb3 literal 0 HcmV?d00001 diff --git a/docs/_static/img/qnn-trace-execute-seq.png b/docs/_static/img/qnn-trace-execute-seq.png new file mode 100644 index 0000000000000000000000000000000000000000..784ef2bb04c98d6b4dc22217e4b88730c812fdb2 GIT binary patch literal 19539 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 forward(const std::vector& inputs, + const std::vector& args); + void to(DeviceTypes device_type); + void load(const ParameterFile::ptr_t& param_file); + + // Named module registration (similar to PyTorch's named_modules) + template + auto reg(const std::string& name, Args&&... args); + }; + +**Named Module Registration:** + +The ``reg()`` method provides functionality similar to PyTorch's ``named_modules()``, enabling hierarchical module organization with automatic name management in C++: + +.. code-block:: cpp + + class MyModel : public nn::Module { + public: + MyModel(const std::string& name) : nn::Module(name) { + // Register sub-modules with names + encoder_ = reg("encoder", config); + decoder_ = reg("decoder", config); + + // Register layers with names + linear1_ = reg("fc1", 768, 3072, false); + linear2_ = reg("fc2", 3072, 768, false); + } + + private: + EncoderModule encoder_; // Absolute name: "model.encoder" + DecoderModule decoder_; // Absolute name: "model.decoder" + nn::Linear linear1_; // Absolute name: "model.fc1" + nn::Linear linear2_; // Absolute name: "model.fc2" + }; + +**Key Features:** + +* **Automatic Name Hierarchy**: Constructs fully-qualified names (e.g., ``"model.encoder.layer0.attention"``) +* **Parameter Mapping**: Links module names to parameter files for loading/saving +* **Device Management**: Enables selective device placement by module name +* **Type Safety**: Template-based registration with compile-time type checking + +**Comparison with PyTorch:** + +.. code-block:: python + + # PyTorch + class MyModel(nn.Module): + def __init__(self): + super().__init__() + self.encoder = EncoderModule() # Automatically named "encoder" + self.decoder = DecoderModule() # Automatically named "decoder" + + # Print all named modules + for name, module in model.named_modules(): + print(f"{name}: {module}") + +.. code-block:: cpp + + // MLLM Framework + class MyModel : public nn::Module { + public: + MyModel(const std::string& name) : nn::Module(name) { + encoder_ = reg("encoder"); // Explicitly named "encoder" + decoder_ = reg("decoder"); // Explicitly named "decoder" + } + }; + + // Names are automatically constructed: "model.encoder", "model.decoder" + // Used for parameter loading: params->load("model.encoder.weight") + +The ``reg()`` method bridges the gap between Python's dynamic attribute naming and C++'s static type system, providing a clean API for building hierarchical neural networks. + +Layer Abstraction +~~~~~~~~~~~~~~~~~ + +The ``Layer`` class represents individual operations or layers within a module: + +* **Operation Encapsulation**: Wraps backend-specific operations (BaseOp) +* **Device Abstraction**: Handles operation instantiation for different backends +* **Task Creation**: Creates execution tasks for the dispatcher system + +**Key Methods:** + +.. code-block:: cpp + + class Layer { + std::vector __main(const std::vector& inputs); + Layer& to(DeviceTypes device_type); + OpTypes opType() const; + }; + +Dispatcher System +~~~~~~~~~~~~~~~~~ + +The dispatcher system provides backend-specific execution engines: + +**CPUDispatcher** + Handles CPU-based operation execution with full operation lifecycle: + + * ``reshape()``: Tensor shape computation + * ``setup()``: Operation initialization + * ``forward()``: Actual computation + +**IRTraceDispatcher** + Captures execution traces for IR generation: + + * Records operation calls and tensor flows + * Enables graph optimization and analysis + * Supports compilation workflows + +**QNNDispatcher** + Manages QNN backend execution: + + * Specialized for QNN graph execution + * Handles module-level execution for QNN graphs + * Selective operation execution (X2X, Embedding ops) + +Execution Workflows +------------------- + +Op Execution Workflow +~~~~~~~~~~~~~~~~~~~~~~ + +The standard execution path for neural network inference: + +.. code-block:: text + + Module::forward() + │ + ├─── Module::__main() + │ │ + │ ├─── Task::createExecuteModuleTask() + │ │ + │ └─── DispatcherManager::submit() + │ │ + │ └─── [CPU|QNN]Dispatcher::receive() + │ │ + │ └─── [CPU|QNN]Dispatcher::process() + │ + └─── Layer::__main() + │ + ├─── Task::createExecuteOpTask() + │ + └─── DispatcherManager::submit() + │ + └─── [CPU|QNN]Dispatcher::receive() + │ + └─── [CPU|QNN]Dispatcher::process() + │ + ├─── Op::reshape() + ├─── Op::setup() + └─── Op::forward() + +**Execution Flow Details:** + +1. **Module Entry**: ``Module::forward()`` is called with input tensors +2. **Task Creation**: Creates ``kExecuteModule`` or ``kExecuteOp`` tasks +3. **Dispatcher Selection**: Routes to appropriate backend dispatcher based on device type +4. **Backend Processing**: Dispatcher executes the operation using backend-specific logic +5. **Result Return**: Output tensors are returned through the task system + +IR Execution Workflow +~~~~~~~~~~~~~~~~~~~~~~ + +When trace mode is enabled, the framework captures an intermediate representation: + +.. code-block:: text + + Module::forward() [trace_mode=true] + │ + ├─── Module::__trace() + │ │ + │ ├─── IRContext::create() + │ ├─── IRContext::create() + │ │ + │ ├─── Module::forward() [recursive] + │ │ + │ └─── IRContext::create() + │ + └─── Layer::__main() [trace_mode=true] + │ + ├─── Task::createExecuteOpTask() + │ └─── task->custom_context_ptr = ir_context + │ + └─── IRTraceDispatcher::receive() + │ + └─── IRTraceDispatcher::process() + │ + ├─── Op::reshape() + └─── Op::trace() + +**IR Workflow Details:** + +1. **Trace Initialization**: ``Context::thisThread()->trace_mode`` enables IR capture +2. **Graph Construction**: Creates IR graph nodes (``CallGraphOp``, ``SubGraphOp``) +3. **Operation Tracing**: Each operation call is recorded in the IR graph +4. **Graph Completion**: ``ReturnOp`` finalizes the subgraph structure +5. **IR Output**: Complete computational graph is available for optimization/compilation + +For more details on IR tracing and compilation, refer to the :doc:`MLLM IR <../compile/ir>` section. + +Synchronous vs Asynchronous Execution +-------------------------------------- + +Synchronous Execution +~~~~~~~~~~~~~~~~~~~~~ + +Currently, the primary execution mode uses synchronous task processing: + +.. code-block:: cpp + + // In Dispatcher::receive() + void CPUDispatcher::receive(const Task::ptr_t& task) { + process(task); // Blocks until completion + } + +**Characteristics:** + +* **Blocking Operation**: Each task completes before returning +* **Simple Flow Control**: Sequential execution guarantees +* **Immediate Results**: Output tensors available immediately after task submission + +Asynchronous Execution (Future Enhancement) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The framework includes infrastructure for asynchronous execution: + +.. code-block:: cpp + + // In Dispatcher::asyncReceive() + TaskResult::sender_t CPUDispatcher::asyncReceive(const Task::ptr_t& task) { + auto scheduler = thread_pool_.get_scheduler(); + return stdexec::schedule(scheduler) | + stdexec::then([this, task] { process(task); }); + } + +**Design Features:** + +* **Non-blocking Submission**: Tasks return immediately with a sender/future +* **Thread Pool Integration**: Uses ``exec::static_thread_pool`` for parallel execution +* **Sender/Receiver Pattern**: Based on C++26 sender/receiver async model +* **Pipeline Capability**: Enables operation pipelining and overlapping + +**Current Status:** + +The asynchronous execution path is implemented but not fully integrated: + +* ``IRTraceDispatcher::asyncReceive()`` returns an error +* Most dispatchers have placeholder async implementations +* Synchronization points (``syncWait()``) are not fully implemented + +Task System Architecture +------------------------- + +The task system provides a unified interface for operation execution: + +**Task Types:** + +* ``kExecuteOp``: Single operation execution +* ``kExecuteModule``: Module-level execution (for QNN graphs) + +**Task Structure:** + +.. code-block:: cpp + + struct Task { + TaskTypes type; + BaseOp::ptr_t op; // Operation to execute + std::vector inputs; // Input tensors + std::vector outputs; // Output tensors + std::vector args; // Additional arguments + void* custom_context_ptr; // Backend-specific context + }; + +**Dispatcher Interface:** + +.. code-block:: cpp + + class Dispatcher { + virtual void receive(const Task::ptr_t& task) = 0; + virtual TaskResult::sender_t asyncReceive(const Task::ptr_t& task) = 0; + virtual void process(const Task::ptr_t& task) = 0; + virtual void syncWait() = 0; + }; + +Backend Integration +------------------- + +The framework supports multiple execution backends through the dispatcher pattern: + +**CPU Backend** + * Full operation support with reshape/setup/forward lifecycle + * Direct tensor computation on CPU + * Perfetto tracing integration for performance analysis + +**QNN Backend** + * Optimized execution for Qualcomm Neural Processing Units + * Graph-level execution for improved performance + * Selective operation fallback to CPU when needed + +**IR Tracing Backend** + * Captures computational graphs for analysis and optimization + * Enables ahead-of-time compilation workflows + * Supports graph transformation and optimization passes + +This architecture provides a flexible foundation for deploying neural networks across diverse hardware platforms while maintaining a consistent programming interface. \ No newline at end of file diff --git a/docs/arch/index.rst b/docs/arch/index.rst index 3cea39e0c..619bc019c 100644 --- a/docs/arch/index.rst +++ b/docs/arch/index.rst @@ -4,5 +4,7 @@ Architectures .. toctree:: :maxdepth: 2 + arch tensor support_ops + op_plugin_system diff --git a/docs/arch/op_plugin_system.rst b/docs/arch/op_plugin_system.rst new file mode 100644 index 000000000..fedf53592 --- /dev/null +++ b/docs/arch/op_plugin_system.rst @@ -0,0 +1,2 @@ +Op Plugin System +================= \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 8135b933f..ddbd668a0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -346,6 +346,11 @@ Documents cpu_backend/index +.. toctree:: + :maxdepth: 2 + + qnn_backend/index + .. toctree:: :maxdepth: 2 diff --git a/docs/qnn_backend/core_design.rst b/docs/qnn_backend/core_design.rst new file mode 100644 index 000000000..1822b7d0c --- /dev/null +++ b/docs/qnn_backend/core_design.rst @@ -0,0 +1,785 @@ +QNN Backend Design +==================== + +Overview +-------- + +The QNN (Qualcomm Neural Network) Backend provides optimized execution of neural network models on Qualcomm's AI Engine Direct (formerly SNPE/QNN SDK). This backend enables efficient deployment on Qualcomm-powered devices including smartphones, embedded systems, and edge AI platforms. + +**Key Features:** + +* **Hardware Acceleration**: Leverages Qualcomm's Hexagon DSP and HTP (Hexagon Tensor Processor) +* **Graph-Level Optimization**: Executes entire subgraphs as optimized QNN graphs +* **Mixed Precision Support**: INT8/INT16 quantization with dynamic scale propagation +* **Context Caching**: Serializes compiled graphs to binary format for fast loading +* **Custom Operations**: Extensible custom op support through QNN op packages + +.. figure:: ../_static/img/qnn-trace-execute-seq.png + :width: 90% + :alt: Overview + :align: center + + Figure 1: QNN Backend Execution Sequence. + + +Architecture Components +----------------------- + +The QNN backend architecture consists of several key components working together: + +.. code-block:: text + + ┌─────────────────────────────────────────────────────────────┐ + │ MLLM Framework │ + │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ + │ │ Module │ │ Layer │ │ Dispatcher │ │ + │ └──────┬───────┘ └────-─┬───────┘ └──────┬───────┘ │ + └─────────┼─────────────────┼─────────────────┼───────────────┘ + │ │ │ + └─────────────────┴─────────────────┘ + │ + ┌──────────────────────────────────────────────────────────────┐ + │ QNN Backend Infrastructure │ + │ │ + │ ┌────────────────────────────────────────────────────────┐ │ + │ │ QNNBackend (Core Manager) │ │ + │ │ - Runtime Management - Context Management │ │ + │ │ - Graph Registry - Tensor Management │ │ + │ └─────────┬──────────────────────────────────────────────┘ │ + │ │ │ + │ ┌─────────┴──────────┬──────────────┬─────────────────┐ │ + │ │ │ │ │ │ + │ ▼ ▼ ▼ ▼ │ + │ QNNRuntime QNNModel QNNDispatcher QNNGraphBuildPass + │ (SDK Interface) (Graph Mgmt) (Execution) (Compilation)│ + │ │ + └────────────────────────────┬─────────────────────────────────┘ + │ + ┌────────────────────────────▼──────────────────────────────────┐ + │ Qualcomm QNN SDK │ + │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ + │ │ QNN Interface│ │ QNN Context │ │ QNN Graph │ │ + │ └──────────────┘ └──────────────┘ └──────────────┘ │ + │ │ + │ ┌──────────────────────────────────────────────────────┐ │ + │ │ Hardware Backends (HTP/DSP) │ │ + │ └──────────────────────────────────────────────────────┘ │ + └───────────────────────────────────────────────────────────────┘ + +QNNBackend: Core Manager +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``QNNBackend`` class serves as the central orchestrator for QNN operations: + +**Responsibilities:** + +* **Runtime Initialization**: Manages QNN SDK initialization and device configuration +* **Context Management**: Creates and maintains QNN execution contexts +* **Graph Registry**: Maps graph names to ``QNNModel`` instances +* **Tensor Management**: Handles tensor creation, quantization, and data transfer +* **Performance Tuning**: Configures power profiles and performance settings + +**Key Methods:** + +.. code-block:: cpp + + class QNNBackend : public Backend { + // Graph lifecycle management + std::shared_ptr createQnnGraph(const std::string& graphName); + bool graphFinalize(const std::string& graphName); + void graphExecute(const std::string& graphName, + std::vector& inputs, + std::vector& outputs); + + // Tensor management + bool addTensor(const std::string& graphName, + const std::string& tensorName, + Qnn_TensorType_t type, + const Tensor& tensor, + Qnn_QuantizeParams_t quantize); + + // Component access + const QNN_INTERFACE_VER_TYPE& qnnInterface() const; + Qnn_BackendHandle_t backendHandle() const; + Qnn_ContextHandle_t context() const; + }; + +QNNRuntime: SDK Interface Layer +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Manages low-level QNN SDK initialization and resource lifecycle: + +**Components:** + +* **Interface Loading**: Dynamically loads QNN library symbols +* **Backend Selection**: Initializes appropriate backend (HTP/DSP/GPU) +* **Device Management**: Configures device-specific settings +* **Logging & Profiling**: Optional debug and performance profiling + +**Initialization Flow:** + +.. code-block:: cpp + + // Create runtime with profiling + auto runtime = QNNRuntime::create( + ProfilingLevel::BASIC, // Enable profiling + QNN_LOG_LEVEL_WARN // Set log level + ); + + // Create execution context + Qnn_ContextHandle_t context; + runtime->createContext(context); + +QNNModel: Graph Management +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Represents a single QNN computational graph with complete lifecycle management: + +**Graph Lifecycle:** + +1. **Initialization**: Create graph with name and configuration +2. **Tensor Addition**: Register input/output/intermediate tensors +3. **Node Addition**: Add QNN operations with parameters +4. **Finalization**: Compile and optimize the graph +5. **Execution**: Run inference with input data + +**Key Operations:** + +.. code-block:: cpp + + class QNNModel { + // Initialization + ModelError_t initialize(const Qnn_ContextHandle_t& context, + const char* graphName, + bool debug); + + // Tensor management + ModelError_t addTensor(const std::string& tensorName, + Qnn_TensorType_t type, + const Tensor& tensor, + Qnn_QuantizeParams_t quantize); + + ModelError_t addStaticTensor(const std::string& tensorName, + const Tensor& tensor, + Qnn_QuantizeParams_t quantize); + + std::shared_ptr getTensorWrapper( + const std::string& tensorName); + + // Node management + ModelError_t addNode(Qnn_OpConfigVersion_t version, + const std::string& name, + const std::string& packageName, + const std::string& type, + const std::vector<...>& tensorParams, + const std::vector<...>& scalarParams, + const std::vector& inputNames, + const std::vector& outputNames); + + // Finalization and execution + ModelError_t finalizeGraph(Qnn_ProfileHandle_t profileHandle, + Qnn_SignalHandle_t signalHandle); + + bool isGraphFinalized() const; + }; + +**Tensor Wrappers:** + +The backend uses C++ RAII wrappers to manage QNN's C-style resources: + +* ``QNNTensorWrapper``: Manages tensor metadata and data buffers +* ``QNNParamTensorWrapper``: Wraps constant tensor parameters +* ``QNNParamScalarWrapper``: Wraps scalar parameters + +QNNDispatcher: Execution Engine +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Handles task execution routing between CPU and QNN: + +**Execution Strategy:** + +.. code-block:: cpp + + void QNNDispatcher::process(const Task::ptr_t& task) { + switch (task->type) { + case TaskTypes::kExecuteOp: { + // Selective execution: only X2X and Embedding on QNN + task->op->reshape(task->inputs, task->outputs); + if (task->op->getOpType() == OpTypes::kX2X || + task->op->getOpType() == OpTypes::kEmbedding) { + task->op->setup(task->inputs, task->outputs); + task->op->forward(task->inputs, task->outputs); + } + break; + } + case TaskTypes::kExecuteModule: { + // Full module execution on QNN + auto qnnBackend = getBackend(kQNN); + auto moduleName = getModuleName(task); + + // Forward pass to populate outputs + task->outputs = module->forward(task->inputs, task->args); + + // Execute the QNN graph + qnnBackend->graphExecute(moduleName, + task->inputs, + task->outputs); + break; + } + } + } + +**Execution Modes:** + +* **Op-Level**: Individual operations (X2X, Embedding) executed separately +* **Module-Level**: Entire subgraphs executed as optimized QNN graphs + +QNNGraphBuildPass: Compilation Pipeline +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Transforms MLLM IR into executable QNN graphs through pattern matching: + +**Compilation Flow:** + +1. **IR Traversal**: Iterate through ``SubGraphOp`` nodes marked for QNN +2. **Pattern Matching**: Match MLLM operations to QNN operation patterns +3. **Graph Construction**: Build QNN graph with nodes and tensors +4. **Optimization**: Apply QNN SDK optimizations +5. **Finalization**: Compile graph for target hardware + +**Pattern Registration:** + +.. code-block:: cpp + + class QNNGraphBuildPass : public Pass { + QNNGraphBuildPass() { + // Register operation patterns + regPattern(); + + // Register custom ops + patterns_.emplace( + customOpId("DequantizeAdd"), + std::make_shared() + ); + } + }; + +**Pattern Example:** + +.. code-block:: cpp + + class QNNLinearPattern : public QNNOpPattern { + bool addNode(const std::string& graphName, + const ir::linalg::LinalgIROp::ptr_t& op, + const std::vector& inputs, + const std::vector& outputs) override { + // Add input tensors + addTensor(graphName, inputs[0], QNN_TENSOR_TYPE_NATIVE); + addTensor(graphName, inputs[1], QNN_TENSOR_TYPE_STATIC); + + // Add output tensor + addTensor(graphName, outputs[0], QNN_TENSOR_TYPE_NATIVE); + + // Create QNN FullyConnected node + backend->graphAddNode( + graphName, + op->name(), + "FullyConnected", + {inputs[0]->name(), inputs[1]->name()}, + {outputs[0]->name()}, + {}, // tensor params + {} // scalar params + ); + + return true; + } + }; + +Execution Workflows +------------------- + +Compilation Workflow +~~~~~~~~~~~~~~~~~~~~ + +The QNN backend compilation workflow transforms traced IR into executable graphs: + +.. code-block:: text + + User Model (Python/C++) + │ + ├─── Model::trace() [trace_mode=true] + │ └─── Creates IR representation + │ + ▼ + IR Module (mllm::ir::ModuleOp) + │ + ├─── Contains SubGraphOp(s) marked as DeviceTypes::kQNN + │ + ▼ + QNNGraphBuildPass::run() + │ + ├─── For each QNN SubGraphOp: + │ │ + │ ├─── backend->createQnnGraph(graphName) + │ │ └─── Creates QNNModel instance + │ │ + │ ├─── Add graph input tensors + │ │ └─── qnnModel->addTensor(..., QNN_TENSOR_TYPE_APP_WRITE) + │ │ + │ ├─── Traverse IR operations + │ │ │ + │ │ ├─── Match to QNN patterns + │ │ │ └─── pattern->addNode(graphName, op, inputs, outputs) + │ │ │ + │ │ └─── Create QNN ops with: + │ │ ├─── Tensor parameters (weights, constants) + │ │ ├─── Scalar parameters (hyperparameters) + │ │ ├─── Input tensor names + │ │ └─── Output tensor names + │ │ + │ └─── backend->graphFinalize(graphName) + │ │ + │ ├─── qnnModel->finalizeGraph(...) + │ │ └─── Calls qnnInterface.graphFinalize() + │ │ └─── QNN SDK optimizes and compiles graph + │ │ + │ └─── Graph ready for execution + │ + ▼ + Compiled QNN Graphs (ready for inference) + +**Code Example:** + +.. code-block:: cpp + + // In QNNGraphBuildPass::buildQnnGraph() + void QNNGraphBuildPass::buildQnnGraph( + const ir::graph::SubGraphOp::ptr_t& sub_graph_op) { + + auto qnn_backend = getQNNBackend(); + std::string graph_name = sub_graph_op->getSymbolAttr()->str(); + + // Create QNN model + auto qnn_model = qnn_backend->createQnnGraph(graph_name); + + // Add graph inputs + for (auto& input : sub_graph_op->inputs()) { + auto input_tensor = input->cast_(); + auto quantize_param = createQuantizeParams(input_tensor->tensor_); + qnn_model->addTensor(input_tensor->name(), + QNN_TENSOR_TYPE_APP_WRITE, + input_tensor->tensor_, + quantize_param); + } + + // Process operations + for (auto& region_op : graph_region->ops()) { + if (auto linalg_op = cast(region_op)) { + auto op_types = linalg_op->getAOpTypes(); + if (patterns_.contains(op_types)) { + patterns_[op_types]->addNode( + graph_name, linalg_op, + op_inputs, op_outputs + ); + } + } + } + + // Finalize graph + qnn_backend->graphFinalize(graph_name); + } + +Runtime Execution Workflow +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Standard inference execution through the dispatcher system: + +.. code-block:: text + + Application::forward() + │ + ├─── Module::forward() [DeviceTypes::kQNN] + │ │ + │ ├─── Module::__main() + │ │ │ + │ │ ├─── Task::createExecuteModuleTask() + │ │ │ └─── task->custom_context_ptr = module + │ │ │ + │ │ └─── DispatcherManager::submit(qnn_dispatcher_id, task) + │ │ + │ ▼ + QNNDispatcher::receive(task) + │ │ + │ └─── QNNDispatcher::process(task) + │ │ + │ ├─── case kExecuteModule: + │ │ │ + │ │ ├─── Extract module name + │ │ │ + │ │ ├─── Call module->forward() to setup outputs + │ │ │ └─── Creates output tensor shapes + │ │ │ + │ │ └─── qnnBackend->graphExecute(moduleName, inputs, outputs) + │ │ │ + │ │ ├─── Lookup QNNModel by name + │ │ │ + │ │ ├─── Copy input data to QNN tensors + │ │ │ └─── Handles quantization if needed + │ │ │ + │ │ ├─── qnnInterface.graphExecute() + │ │ │ └─── QNN SDK executes on HTP/DSP + │ │ │ + │ │ └─── Copy output data from QNN tensors + │ │ └─── Handles dequantization if needed + │ │ + │ └─── case kExecuteOp: + │ └─── Execute X2X/Embedding ops individually + │ + ▼ + Output Tensors (returned to application) + + +Quantization Support +-------------------- + +The QNN backend provides comprehensive quantization support for efficient inference: + +Quantization Metadata Management +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Quantization scales are attached to tensors as metadata: + +.. code-block:: cpp + + // Set quantization scale + inline void setQuantScale(Tensor& tensor, float scale) { + auto scale_view = std::make_shared( + Tensor::empty({1}, kFloat32, kCPU).alloc() + ); + scale_view->ptr()[0] = scale; + tensor.attachedViews()[QNN_QUANT_SCALE_NAME] = scale_view; + } + + // Get quantization scale + inline float getQuantScale(Tensor& tensor) { + if (!tensor.attachedViews().contains(QNN_QUANT_SCALE_NAME)) { + return 1.0f; // Default scale + } + return tensor.attachedViews()[QNN_QUANT_SCALE_NAME]->ptr()[0]; + } + +QNN Quantization Parameters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Convert MLLM quantization to QNN format: + +.. code-block:: cpp + + Qnn_QuantizeParams_t createQuantizeParams(const Tensor& tensor) { + if (tensor.dtype() == kInt8 || tensor.dtype() == kInt16) { + float scale = getQuantScale(tensor); + return Qnn_QuantizeParams_t{ + QNN_DEFINITION_DEFINED, + QNN_QUANTIZATION_ENCODING_SCALE_OFFSET, + {.scaleOffsetEncoding = { + .scale = scale, + .offset = 0 // Zero-point offset + }} + }; + } + // Undefined quantization for float tensors + return DEFAULT_QUANTIZE_PARAMS; + } + +Scale Propagation +~~~~~~~~~~~~~~~~~ + +Quantization scales propagate through reshape operations: + +.. code-block:: cpp + + void propagateQuantScale(const Tensor& input, Tensor& output) { + if (input.dtype() == kInt8 || input.dtype() == kInt16) { + float scale = getQuantScale(input); + setQuantScale(output, scale); + } + } + +Custom Operations +----------------- + +The QNN backend supports custom operations through the QNN Op Package mechanism: + +DequantizeAdd Custom Op +~~~~~~~~~~~~~~~~~~~~~~~~ + +A custom fused operation combining dequantization and addition: + +**Purpose:** + +* Fuse int8 dequantization with element-wise addition +* Improve accuracy for quantized models + +**Usage Example:** + +.. code-block:: cpp + + // In QwenAttentionProjNPU + class QwenAttentionProjNPU : public nn::Module { + nn::qnn::DequantizeAdd q_proj_dequantize_add_; + nn::qnn::DequantizeAdd k_proj_dequantize_add_; + nn::qnn::DequantizeAdd v_proj_dequantize_add_; + + QwenAttentionProjNPU(const std::string& name, const QwenNPUConfig& cfg) + : nn::Module(name) { + // Register custom ops + q_proj_dequantize_add_ = reg( + "self_attn.q_proj_dequantize_add" + ); + // ... + } + }; + +**Pattern Registration:** + +.. code-block:: cpp + + // In QNNGraphBuildPass constructor + patterns_.emplace( + Context::instance().lookupCustomizedOpId(kQNN, "DequantizeAdd"), + std::make_shared() + ); + +Performance Optimization +------------------------ + +Power Configuration +~~~~~~~~~~~~~~~~~~~ + +The QNN backend provides power profile management: + +.. code-block:: cpp + + class QNNPerf { + void setPowerConfigBurst() { + // High performance mode + // - Maximum clock frequencies + // - Higher power consumption + // - Lower latency + } + + void setPowerConfigBalanced() { + // Balanced mode + // - Moderate clock frequencies + // - Balanced power/performance + // - Medium latency + } + + void setRpcLatencyAndPolling() { + // Configure RPC latency for HTP communication + } + }; + +Profiling Support(TODO) +~~~~~~~~~~~~~~~~~~~~~~~ + +.. note:: This is not yet implemented. Better profiling info printing should be added. + +Enable detailed profiling for performance analysis: + +.. code-block:: cpp + + enum class ProfilingLevel { + OFF, // No profiling + BASIC, // Basic timing information + DETAILED, // Detailed layer-wise profiling + INVALID + }; + + // Create runtime with profiling + auto runtime = QNNRuntime::create( + ProfilingLevel::DETAILED, + QNN_LOG_LEVEL_INFO + ); + +Context Serialization +~~~~~~~~~~~~~~~~~~~~~ + +.. note:: TODO: Context retrieve should support retrieve by file name and dynamic switching. + +Serialize compiled graphs to avoid recompilation: + +.. code-block:: cpp + + // Save context to binary file + qnn_backend->saveContext("qnn_context.bin"); + + // Load pre-compiled context + Qnn_ContextHandle_t context; + std::vector> models; + runtime->retrieveContext(context, models); + +Best Practices +-------------- + +Graph Partitioning +~~~~~~~~~~~~~~~~~~ + +For optimal performance, partition your model strategically: + +**Guidelines:** + +* **QNN Subgraphs**: Place compute-intensive operations (Linear, Conv, Attention) +* **CPU Operations**: Keep dynamic operations (KVCache, RoPE) on CPU +* **Minimize Data Transfer**: Reduce tensor copies between QNN and CPU + +**Example Partitioning:** + +.. code-block:: cpp + + class QwenDecoder : public Module { + // QNN: Attention projections + QwenAttentionProjNPU self_attn_proj_; // -> kQNN + + // CPU: KV cache and RoPE + QwenAttentionMatmul self_attn_matmul_; // -> kCPU + + // QNN: Output projection and MLP + QwenOutProjAndMLP self_attn_out_mlp_; // -> kQNN + }; + +Quantization Strategy +~~~~~~~~~~~~~~~~~~~~~ + +**Recommendations:** + +1. **Per-Tensor Quantization**: Attach scales to input/output tensors +2. **Scale Initialization**: Set scales during model loading +3. **Dynamic Range**: Use calibration data to determine optimal scales +4. **Precision**: INT8 for most operations, INT16 for critical layers + +.. code-block:: cpp + + // During model loading + void loadQuantizedModel(const ParameterFile::ptr_t& params) { + for (auto& [name, tensor] : *params) { + if (tensor.dtype() == kInt8) { + // Scale stored in parameter file + float scale = params->getScale(name); + setQuantScale(tensor, scale); + } + } + } + +Error Handling +~~~~~~~~~~~~~~ + +Always check return codes from QNN operations: + +.. code-block:: cpp + + #define CALL_QNN(apiCall) do { \ + int errorCode = ((apiCall) & 0xFFFF); \ + if (errorCode != QNN_SUCCESS) { \ + MLLM_ERROR("QNN Error in {}, line {}: error code {}", \ + __FILE__, __LINE__, errorCode); \ + assert(errorCode == QNN_SUCCESS); \ + } \ + } while (0) + + // Usage + CALL_QNN(qnnInterface.graphFinalize(graph, nullptr, nullptr)); + +Troubleshooting +--------------- + +Common Issues +~~~~~~~~~~~~~ + +**Issue: Graph finalization fails** + +* **Cause**: Incompatible tensor dimensions or unsupported operations +* **Solution**: Check QNN SDK documentation for supported ops and constraints + +**Issue: Incorrect output values** + +* **Cause**: Quantization scale mismatch or missing scale propagation +* **Solution**: Verify quantization scales are correctly set and propagated + +**Issue: Performance degradation** + +* **Cause**: Excessive CPU-QNN data transfers or suboptimal partitioning +* **Solution**: Profile with Perfetto, optimize graph boundaries + +Debug Logging +~~~~~~~~~~~~~ + +Enable verbose QNN logging: + +.. code-block:: cpp + + auto runtime = QNNRuntime::create( + ProfilingLevel::DETAILED, + QNN_LOG_LEVEL_VERBOSE // Maximum verbosity + ); + +API Reference +------------- + +QNNBackend API +~~~~~~~~~~~~~~ + +.. code-block:: cpp + + class QNNBackend : public Backend { + public: + // Graph lifecycle + std::shared_ptr createQnnGraph(const std::string& graphName); + bool graphFinalize(const std::string& graphName); + void graphExecute(const std::string& graphName, + std::vector& inputs, + std::vector& outputs); + + // Tensor management + bool addTensor(const std::string& graphName, + const std::string& tensorName, + Qnn_TensorType_t type, + const Tensor& tensor, + Qnn_QuantizeParams_t quantize = DEFAULT_QUANTIZE_PARAMS); + + bool addStaticTensor(const std::string& graphName, + const std::string& tensorName, + const Tensor& tensor, + Qnn_QuantizeParams_t quantize = DEFAULT_QUANTIZE_PARAMS); + + std::shared_ptr getTensorWrapper( + const std::string& graphName, + const std::string& tensorName); + + // Node management + void graphAddNode(const std::string& graphName, + const std::string& nodeName, + const std::string& nodeType, + const std::vector& inputTensorNames, + const std::vector& outputTensorNames, + const std::vector>& tensorParams, + const std::vector>& scalarParams, + const std::string& packageName = "qti.aisw"); + + // Properties + bool isWeightOnDevice() override; + const QNN_INTERFACE_VER_TYPE& qnnInterface() const; + Qnn_BackendHandle_t backendHandle() const; + Qnn_ContextHandle_t context() const; + }; + +For more information on the overall framework architecture, see :doc:`../arch/arch`. + diff --git a/docs/qnn_backend/index.rst b/docs/qnn_backend/index.rst new file mode 100644 index 000000000..b7092f938 --- /dev/null +++ b/docs/qnn_backend/index.rst @@ -0,0 +1,9 @@ +QNN Backend +==================== + +.. toctree:: + :maxdepth: 2 + + setup_env + core_design + qnn_model_convert diff --git a/docs/qnn_backend/qnn_model_convert.rst b/docs/qnn_backend/qnn_model_convert.rst new file mode 100644 index 000000000..f157c7f2a --- /dev/null +++ b/docs/qnn_backend/qnn_model_convert.rst @@ -0,0 +1,2 @@ +QNN Model Conversion +==================== \ No newline at end of file diff --git a/docs/qnn_backend/setup_env.rst b/docs/qnn_backend/setup_env.rst new file mode 100644 index 000000000..8b5554533 --- /dev/null +++ b/docs/qnn_backend/setup_env.rst @@ -0,0 +1,136 @@ +QNN Environment Setup +===================== + +Overview +-------- + +This section describes how to set up the QNN development environment, following the official QNN documentation. For more details, see: `QNN Linux Setup `_. + +Prerequisites +------------- + +The QNN backend relies on two main SDKs: + +- **Qualcomm QNN SDK**: Required for QNN backend compilation +- **Hexagon SDK**: Required for QNN custom operator(LLaMAOpPackage in mllm) compilation + +Version Requirements +~~~~~~~~~~~~~~~~~~~~ + +- **QNN**: Linux v2.34+ +- **Hexagon SDK**: Linux 5.x + +.. warning:: + Some accounts may not have permission to access the Hexagon SDK and may need to contact Qualcomm for support. + +SDK Download and Installation +----------------------------- + +QNN SDK Installation +~~~~~~~~~~~~~~~~~~~~~ + +1. Download the QNN SDK from the `official Qualcomm website `_ +2. Unzip the downloaded file +3. Set the environment variable ``QNN_SDK_ROOT`` to point to the unzipped directory + +Hexagon SDK Installation +~~~~~~~~~~~~~~~~~~~~~~~~ + +The `Hexagon SDK `_ is Qualcomm's official development environment for programming and optimizing applications on the Hexagon DSP — the core processor architecture used in Snapdragon chips for efficient, low-power computation. + +By installing and sourcing the Hexagon SDK, developers can build the `custom op package `_, which is the LLaMAOpPackage in this project, enabling HVX capabilities. + +To install the Hexagon SDK, follow these steps: + +1. Download the Hexagon SDK using `QPM `_ (Qualcomm Package Manager) +2. Install the SDK following the QPM instructions + +Environment Setup +----------------- + +After downloading and installing both SDKs, set up the environment by running the following commands: + +.. code-block:: bash + + # Set up QNN SDK environment + source /bin/envsetup.sh + + # Set up Hexagon SDK environment + source /setup_sdk_env.source + +Environment Variables Verification +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +After setting up the environment, verify that the following environment variables are correctly set: + +.. code-block:: bash + + echo $QNN_SDK_ROOT # Should point to /path/to/your/qnn/sdk + echo $HEXAGON_SDK_ROOT # Should point to /path/to/your/hexagon/sdk + +.. note:: + These environment variables are essential for the QNN op package compilation process. + +Op Package Compilation +----------------------- + +To use QNN offload, both CPU and HTP QNN op packages are required. The following steps will build the QNN op packages needed by the project. + +Prerequisites for Compilation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Ensure the following environment variables are set: + +- ``QNN_SDK_ROOT`` +- ``HEXAGON_SDK_ROOT`` +- ``ANDROID_NDK_ROOT`` + +Compilation Commands +~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + + cd mllm/src/backends/qnn/LLaMAOpPackageHtp/LLaMAPackage/ + make htp_aarch64 && make htp_v75 + +This will build the necessary QNN op packages for both AArch64 and HVX v75 targets. + +Development Tips +---------------- + +LSP Configuration for HVX Development +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To enable Language Server Protocol (LSP) support for HVX development, configure clangd to use the Hexagon toolchain: + +1. Create or edit ``.vscode/settings.json`` in your project root +2. Add the following configuration: + +.. code-block:: json + + { + "clangd.path": "$HEXAGON_SDK_ROOT/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-clangd" + } + +Generating Compilation Database +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To generate the ``compile_commands.json`` file for the Op package: + +.. code-block:: bash + + cd mllm/src/backends/qnn/LLaMAOpPackageHtp/LLaMAPackage/ + compiledb make htp_v75 -C . + +This compilation database is useful for IDE features like code completion and error highlighting. + +Next Steps +---------- + +After completing the environment setup, you can proceed to: + +- Model conversion and quantization +- Building the project with QNN backend +- Running QNN-accelerated models + +For detailed instructions on these steps, refer to the respective documentation sections.