From 4f5380f413a8a5e89ee57f301a9d6010eac92ad4 Mon Sep 17 00:00:00 2001 From: Michal Klocek <michal.klocek@qt.io> Date: Fri, 6 Jul 2018 15:11:49 +0200 Subject: [PATCH] Add PrintMe example This example shows how to do simple printing with print preview. Task-number: QTBUG-53745 Change-Id: I4b1adbb9847b72928a988b5687fb13c84bb987cd Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> --- .../webenginewidgets/printme/data/data.qrc | 7 ++ .../webenginewidgets/printme/data/icon.svg | 24 ++++ .../webenginewidgets/printme/data/index.html | 24 ++++ .../webenginewidgets/printme/data/style.css | 72 +++++++++++ .../printme/doc/images/printme-example.png | Bin 0 -> 42074 bytes .../printme/doc/src/printme.qdoc | 98 +++++++++++++++ examples/webenginewidgets/printme/main.cpp | 76 ++++++++++++ .../webenginewidgets/printme/printhandler.cpp | 115 ++++++++++++++++++ .../webenginewidgets/printme/printhandler.h | 79 ++++++++++++ examples/webenginewidgets/printme/printme.pro | 9 ++ .../webenginewidgets/webenginewidgets.pro | 7 +- 11 files changed, 509 insertions(+), 2 deletions(-) create mode 100644 examples/webenginewidgets/printme/data/data.qrc create mode 100644 examples/webenginewidgets/printme/data/icon.svg create mode 100644 examples/webenginewidgets/printme/data/index.html create mode 100644 examples/webenginewidgets/printme/data/style.css create mode 100644 examples/webenginewidgets/printme/doc/images/printme-example.png create mode 100644 examples/webenginewidgets/printme/doc/src/printme.qdoc create mode 100644 examples/webenginewidgets/printme/main.cpp create mode 100644 examples/webenginewidgets/printme/printhandler.cpp create mode 100644 examples/webenginewidgets/printme/printhandler.h create mode 100644 examples/webenginewidgets/printme/printme.pro diff --git a/examples/webenginewidgets/printme/data/data.qrc b/examples/webenginewidgets/printme/data/data.qrc new file mode 100644 index 000000000..a9c76cc7e --- /dev/null +++ b/examples/webenginewidgets/printme/data/data.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource prefix="/"> + <file>index.html</file> + <file>style.css</file> + <file>icon.svg</file> + </qresource> +</RCC> diff --git a/examples/webenginewidgets/printme/data/icon.svg b/examples/webenginewidgets/printme/data/icon.svg new file mode 100644 index 000000000..b90ff26dd --- /dev/null +++ b/examples/webenginewidgets/printme/data/icon.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="94px" height="94px" viewBox="0 0 94 94" enable-background="new 0 0 94 94" xml:space="preserve"> +<g> + <circle fill="none" cx="47" cy="47" r="47"/> + <g> + <path fill="#46A2DA" d="M47,92.979c-11.779,0-23.559-4.484-32.526-13.451C-3.461,61.591-3.461,32.409,14.472,14.474 + C32.41-3.463,61.592-3.461,79.526,14.473c17.935,17.936,17.935,47.119,0.002,65.054l-0.002,0.001 + C70.559,88.495,58.779,92.979,47,92.979z"/> + </g> + <path fill="#80C342" d="M93,47C93,21.595,72.405,1,47,1C34.297,1,22.797,6.149,14.473,14.473l65.054,65.054 + C87.851,71.203,93,59.703,93,47z"/> + <g> + <path fill="#46A2DA" d="M47,65c-4.808,0-9.328-1.873-12.728-5.272c-7.018-7.019-7.018-18.438,0-25.456 + C37.672,30.873,42.192,29,47,29s9.328,1.873,12.728,5.272c7.018,7.019,7.018,18.438,0,25.456C56.328,63.127,51.808,65,47,65z"/> + <path fill="#FFFFFF" d="M62.248,59.919c6.671-7.858,6.312-19.644-1.105-27.061C57.237,28.953,52.118,27,47,27 + c-5.118,0-10.237,1.953-14.142,5.858c-7.81,7.81-7.81,20.474,0,28.284C36.763,65.047,41.882,67,47,67 + c4.379,0,8.752-1.441,12.372-4.3L77.88,81.209c0.989-0.895,1.935-1.837,2.843-2.814L62.248,59.919z M35.686,58.314 + c-6.238-6.238-6.238-16.389,0-22.627C38.708,32.664,42.726,31,47,31c4.274,0,8.292,1.664,11.314,4.686 + c6.238,6.238,6.238,16.389,0,22.627C55.292,61.336,51.274,63,47,63C42.726,63,38.708,61.336,35.686,58.314z"/> + </g> +</g> +</svg> diff --git a/examples/webenginewidgets/printme/data/index.html b/examples/webenginewidgets/printme/data/index.html new file mode 100644 index 000000000..cf286e85a --- /dev/null +++ b/examples/webenginewidgets/printme/data/index.html @@ -0,0 +1,24 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>PrintMe</title> + <link rel="stylesheet" type="text/css" href="style.css"> + <script> + function printNow() { + window.print(); + } + </script> + </head> + <body> + <form class="form"> + <img class="logo" src="icon.svg" alt="qtwebengine"> + <div class="header"> + <h1>Hello Paper World!</h1> + <h2>Press Ctrl+p to print with print preview</h2> + <h2>Press Ctrl+Shift+p to print without print preview</h2> + <h2>Click the button to print using JavaScript</h2> + <p class="button" onclick="printNow()">Print Now</p> + </form> + </body> +</html> diff --git a/examples/webenginewidgets/printme/data/style.css b/examples/webenginewidgets/printme/data/style.css new file mode 100644 index 000000000..cf6a2b7bf --- /dev/null +++ b/examples/webenginewidgets/printme/data/style.css @@ -0,0 +1,72 @@ +html,body { + height:100%; + width:100%; + margin:0; +} + body { + display:flex; +} + .logo { + width: 75px; + height: 75px; + float: left; + margin: 20px 20px 0px 20px; + -webkit-animation:spin 8s linear infinite; +} + @-webkit-keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + } +} + .header { + display: inline +} + .form { + width: 480px; + height: 170px; + background: -webkit-linear-gradient(bottom, #ddd, #fff); + border: 1px solid #999; + border-radius: 12px; + color: #46a; + font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; + font-size: 14px; + font-style: italic; + font-weight: bold; + margin: auto; + padding: 10px; + position: relative; + line-height: 26px; + text-decoration: none; + -webkit-box-shadow: 0px 0px 5px #444; +} + h1 { + padding-left:40px; + color: #46a2da; +} + h2 { + color: #80c342; + font-size: 13px; + margin-top: -20px; +} + span { + margin-left: 20px; +} + .button{ + display: inline-block; + background: #46a2da; + width: 100px; + height: 30px; + padding: 0px; + text-align: center; + font-weight: bold; + color: #ffffff; + text-decoration: none; + border: 1px solid #999; + margin-left: 190px; +} + .button:hover { + background-color: #46a200 +} + .button:active { + background-color: #3e8e41; +} diff --git a/examples/webenginewidgets/printme/doc/images/printme-example.png b/examples/webenginewidgets/printme/doc/images/printme-example.png new file mode 100644 index 0000000000000000000000000000000000000000..a636972fd5a1539ec41965305420d1810c92b86c GIT binary patch literal 42074 zcmZs?19W9i@GhE6Y}=mLwr%@lVsm0U6Wg|J+n(6A?U(ue?_F=bcW<qA&OWQUYVX!p z^_}kCVG45MaM0M$KtMonk`f|HKtMkTzkk0&{`mgx4Gm@czChVYXgUG`;f4JB07oC( z7=J4voFrvMA@)GPpcvRi6n60bQ;BLg3I296vvmL}t(uVdR>3-bt3-?)4IRwwoXl-) zfKZ@_NWS&Z|MbGPc5V*lre;n+6$let-&*+pv<}7w|4a#;%&m=qSf3D}zDuC~l_=Yq zIJp=&7z63ref=|s`S0fDj)qnS-=+>g%{>j#-)hKzYIOq#8*>{|pdOsV?`nV7_CNpM z4u-}+4_^Ui|JzL1*4o<G#tG<gBB}dZ2ma4Y#oWot7^viOjsgfMpG;CjP{noiywk-= zMLmmdmD#78^=zZ@vW<D3+0pc}eZDnw)p;$&s)wV|`rO$Jca<|>R4^157E=bE7?M=L zFC##SvY6^XMHM>HkuNd+zN^zkRZ-}Nq2w~=m2D>3pEAeCm6P`_{nfYkU41o|_w0wd zuV{kzZ3zD7-e@E)0cyfz{cVCqlKp$}=UxQw>i~jx%vfP#gpVcn6?y^IE`^5ZfPZ2b zxD6%tg+PK?19t`gPoiS|`!RMv`+NThRPcXBD6kO!gd(LEiX1u2wL>rZs3>IV?C#Z5 z&mErc{`PWz`&(M@{1q)5$k2AFBpn+I!thjo-8R=X)#f$TcC_tCbshH|SSD8=WOMtR z?5D!8wP(8g{CCq~Ys3hx{MmFoy6TM+gOEwT{tMI&e+YeOlkyF#+LKB2_(?U|s-;t> z4q;9X4h|cXYh>%?nw@!h{tq)CzR%~qzkgK(5xr~1oPPhtKnnx^C~as^p-PNm=+&4g zDmSKOZr01FKigezxVwAI){gN$90$=fr6LuKRxh4UivZ7Gd0p6?U#s3<Vr4mg2wv;3 zv}FM>rM??ns_boVKfnCA3G#U@_HjR}Z0^GLo#uNxC-}M{Xm4-#sTosIUwU8jdB4h7 zU&ra<_qcqg|N7wn6D}>50<cnZyi~nuKoj3uPI)*?%D255d4J0i_StB(oIbGhpEO{= zoDd7pGJSV?D{bUF`Xen32fk;$xnNrDX}v0KJk~Sms;lHII%l|d_dQN~_`z!zp9|IA z#*JDK9}i32pN%?nUqok)wDec{pBGyW4$%~~<E=iQ2i-eYGteDqy&986^`dc4&G<e( z>WkXk@SU~H7m*w7dh4C$(+lJ9^{UlNI1lcLQ!(!E6N}-dFwml6`8OUL?d<N%Fyzlq zM+BRizjpt7^d@=A*XPw2euC&WZohnHW+uN~;_dC-*GqEu#1xV9#7h0q=Zn6N+h<=8 zQSu`msAE@w&1+J`QTNKj`eEg??b`cpRiyldR_)%cX2@vStXTtgq*A%AJ)_H8<K7FH zsF+~{vj5{$MTFx+q_L&)p*N?GWaN-!o6>xO{jS4cVnnKA^F3x;)CGqHWIjeabF-=X zLMR(e*2lqab)m^J%Z{?Sw9iNOm*e|5!6ldCv16G-R7Ub&bearSN3YcdGg6h5ddI~H z`bYgr>A&@j_kZ89>iP8RR4RVoP>%QZ-eg|8@|>pke+nN^Zv=t%a~ys`5TrE&dOr|& zop$;LcTj&zW26o`)Rnl8t<p|geLe=^r59gpJTHOh^LP84R9O~VgO_Vn&XxS-wOIJm z@v#PjpgT@2ff%8$?E1z3QH`;se}D1VInL+v&>Y?U)A8|DOaAkF1c#}sJ6i!OpH)%P z(I3-_jaglMhND+sH(#l@FY0eiSMRrp!&e@!(%J>hw^FYpKF`hO%!|6TwocSAU(a8k zZyu%EY_@AGJ3IVQIPCU2r<H4Lg`cl32)I;B+j^=;Y!PV;#&1ntI7^;<pD)d8G=iVk zc6N5_*sZOtUr&buP9H}y3_WG6mfknv`ZO|{JQEH!k_;x}l8Oh+>Fk{~cj?LVY#r`) z8)sPM`ePam++QslfQ1t$>^PGmZe_0*m75bww;(A08*|a<kFzWKQNy~=c~gSybVUMH z-H!_&J_Q+xT>6}`^lP8uMUOXkII?du0=im2M7!IZmrq+!UsihVlOA?sbwtA9W$Wv6 zH@}_<QFl1P<nvNUwyD_IlC6vv#RH4jPNV%(p;3ZHC3?ChtJk}5{oL4d|95n<w*>tG zd^QREcKF>8)2Xb^D?bSJN<BCja&C$vc;t!Fxv^wtue;l>YJF+_C$Yma_WGpGG*%aR z!KU$DP#W~`6|2Sa2Hm=;-8qL&q9oD7lh()ez^8<pjnw(WuBU}&u->fj{Os2rk$yUS z<4qAUhSxp{p9dY@@qs(4ug~-4aov*OkI5ta4d+Ujt=9eIEc`cT_ChMj#kpGBNw|4O zW{eJY!;RFgt}M##7lL?ww~s{gc|CXY)w^kVZjG5f0{rh_n+<v?<j?7K2>XixgHEsS z=-uDn=jEW=*w}On%b!tGE;&(NTKh@rb!>?_S$<mU*7>q;DcYyC`8Y+=Q0XVCuC8wA zfP%7^u9{*ZA!c@)-9&ZP&%bp)f|khnYEIIah`E^$gQ96;aUhEz2`tX<wR6uVOAV`? z_UbPVC=o8{*p>ZTIewp~XL{dyT+AjYR!<wHnucI>y$z-*mwc7)eYO;fpjA7NV(!r6 zeMk7`QN#(|L{aD03C;ZoMrQ*6t|JZg*%YFT+sl3b+2-`e>z=YDA9wrhILtVI8-t6_ z4Wo5*Q+|GDVIdexKuU_xtg@0?Zgepvgp;x1*O@wf$J0(*;n`-^<Nk5-Q3{Dy)M~#E z=38*==D>#6P43qX$1jG?Rm*1ugZ!;FBOkZ-uKGGeXpQIB5{RKr_j`v{UFU-^2)&rs zk*h?AuGbCbE9I(_wYNcPTUw4lgafQ{g0Fc)m}H-NlZ!a{ZV7X?Tg>lFHY^Wfg*PEh z-+8|Y)bVnd{&kJ;H8Ved7ob{{mv_7M_2dH|aT;KF?IkF<1Bn7VH(-&jHJyNZu&+Nw z+mfJdM^wE1UfZFZEDg<dpz*Lmk~q4?&84NKg_E9EV-P{tH8Yn#;$uJ7u09U4NUzys zawbTf_@d{vHXE<r@mCbxfwFGiAu<QK8JghU`_+2Jp6E%VIrF*a$LSDUDP;&<BIrgN ziYCUfi`Q#Y9LW*12CcS8a#dn;?ONj@fqs{f=ILCcsnqK8s_eh{16>p6vs9%EgHDse z4Rm)nxz=J&B9lQ-!9<l<R#ap%lT8}emP`Bcof4MuqJo2qhF*)f?7eiYI|K1p9~v9u zv?M!Qs{C-{+&!z%mQ+>LNT^UKQaVcWzZNGmRdK(C-*7$l;&nq8L;T~WRgL{h?;lB! zV<3@YAS(XhO{*R1LjNB(!2IlE{8#i{_RkGB1Mr=#zopmCf9D@N*#5s#3J40!|C`gd z*MIW=b^ZU-k^gc1-w)(h_CF~Mb@=DE?&a(G8HNOFm|(|&3k&|?-93GD=id1ZxbH4& zhl-hqnf4O^s^dZqWANCfBg0hV{EPfsbm79eeb(%+84Gk!UU6}8cwYQJ^0PM#USRLy z!cJN*RXBIzgdRS4;NWKkz>G-HWbOkEu<+9Y6=X=2DRFUhbd;5qwYR@nC|94(<aRln zNS*($CtQH16m&XVYjbjPIyyS4s;ctyh07QE7yvBHo>5qm{(d|D7Mhi6HF+Y$qvPY_ zQ&W7d*W0y*!*z9a*H8b$kv0Np{zODX^oJny!~UeEwzRaIKYOS_0noz68;S)3QnX>a zcsK@D*VaUdkxnDA_dtFk>9=jzTpI-b*94m%zxLVEWlL51{QWdR;(=I5(8F&c=TC6S zha+Hndziu3z(jszFDFu~!{c(qWM?BN2b-SQe|O}&3Q(8%H`6tdH8v*e!|mTsK_bMg zfnh>KBovyY)9-?HHn+0sAUdD^M;7gq1E8#9#==l21emumml>}Ud%y1Ukzg+`>^Sxv zIQ{9&&CQ{lck&0nZEutdu=asS{G)m}J&i+$dj!FRcf|=Y4{?Qe1yxm5-QC?KC810) z{*6~Q*KiMI5XbAw-4T*n2oz&OLER2AEVI4>NI|>b&32_>#eZD&CSGrCYi7nbMqE@B zOl=f)G87BFHwQVi3lkPRg+2rx&%)e%=e+M<JrRKVaCdpx*)hZ-WXOd{!6||Ge}0=v z$PQ6?Rpd`hOa!h){YQC+dHWd`78W!JK$O8Xdvg_zL&z~_(p0E|d|+P;!)QnTo8Xtg z{(c`od%!0~*DAG;BM9OQH7SU`y{pL?8Mx;xJ(K@6!Xpe&1CC<(>(8G*HHD-}M&4T- zUp0{6NZ#xCizv6lHAk5L0U_$!4)NI+Ea2cy12KT(3qh8_Zo(kI&+F}RVR4Zu{XaUs zhYxfNTHucf%Qg^L4U6<dkOqjMj`X7C{0}ti<)Dr`ePC8NcYBDiN$w8+L8wI?3Osde znI!vvGx`6Gy8ngJ-uDqul*4~0ZJ|Ic^l1D)F#A7#6qx@D+)qDyYdS}S{+r%UpfM7` zog@DTWdG;C0}AZ_i}0tPc{>XFwkdee84+C)95>1w6YZx*@G^b_o;~X=A24ruH|2Sr z_#f|(<RdqZqCZic+&`G=#cduXWNpH?huL9w6lV5sM`dg{UlwSee}rXoct<IdVZws? z^QuKpoDWqftaLVW;xWWJ!PBQpWST@TO;gNef{}KtT^xckJEdYmfq9V3ROe!mm8zUO zCU}Pi<~WKAaokX_C5Q3OVnpH1rmJN&uy|`3VakedhMdaeBS>WP(DW;oI_=_k5)h>+ z*m-BU-wU3!IIZANw86>g+wMm>k%P`WkR$Mf)_Kyy6l@kC5iIxTej4K8&!EH>Y=#G3 z0mOGkE#_e431a1WXgqd(ojekA*<UxF`Y9D;`S_|a)9LUW6<$Z(3b)}%tIn1l8H(}b z82GauMM&xMV<bk75U_Q-=)#NT_NXqMb>dg(B`?&C*xm<yZZMs+c*v92F75(sUWxaC zR^CCE$&i(ndCsJq%0*X=gVORN53hlO1J}jXGt6pfsQ*^cE$;Y!AmPP9igDumT+iQ0 z)j;BZB1}=~?C+S)k%D^NwHjukz>kXI9c$>91)R5|`~do0)B2%J1xGEq+Bn!YP+O!C z;=Qb8-a^yZ8`B21^jYBNXE_5+{ing~>Xz6#wJ((?0rNwG!?mEd1J{stu8Mx4{9<z- zWyV9!7NDI7Oa|bSV5vIJBr+Uwd>bfIRKZBiAi}T=?ApBQ!l**F)QM+;q%|PMOGrrp z?_b?CajHg+<?LusP+r{&72_PX^M5fwGJsz<8@YgKz+N|9t8~pc)K~6yY&$y0s4|Tj zDK;8m+#`axaUsrpoyNb&NUBVAq_x!VS2rzKqh7#htEklLj%Jj7rZd5Yg)bNl@K`0- zqVM!^dF#?L+%@m0x)u{M>3wo=Udo>1`fO<48?2}zT0=ix2G3+*RgO9$z^zZ-q(e=H zS(!|#g(#F^NpRu@Uo<jGTgRb0b$EC488&<?G<(Q?Y|4K@xUlvitpurqO=C*As&3Ui zfIi|KWh}@}r$IP3_p!>p&+WuBU9A}Xh?s7)IC^$E$$#UTAyQ^KxK<#0^@IHA8kq%W z_U^Mv^{!hZea?3=O4w~10Xt}M`ZeqAAh&Y^(KYXD(9qC61c~A{XMk0aZPM9;J>tEp zXWZc<|Casq8<1nUP{qwM{4WDz8Cf7xXxJ`eKuWL(r7g4E)tv^><S7WB_O6>m{J3FH z#aE8|lp8z7&8~9&>YFn*Mxdqh_LRI?Ml+s1uX@{cIO=tF<Tb>$Q@f_S%j)e$f&}kw ztH6$zOBm?JJrmi_xApB2$VPQunSG~BK+D;C5)C=l0dP^0a^QPIR&!aO@0eyKajL5v zpWcKR*=C>CLVt4a5Cq7A+PCJagaq>>Qi|h!dbb_L!;B$JQ|V2d1`-<T`<ria&+pxX z=RIX$1hxH~#Qec!dw^!AI3$jnzioQw=M3)-LSEFrC*KlhXVSdzrsRx)A2NznN0kVJ z@RV6@+NtJBRTW+!h|wD9fdn$X=W`YDi^t2VyQAb5EL1khE;Cnj4_@+SK0^AO!lrj! z8&p|WH`4Zp3ksrSU_yX2OjPV0UXz>p!ZdDTbfG)S09^r<$xCH4WvcG;+d?B&IdztX z;^Y2pUD&wPFfAn(Se>RK+i(4kb?67p`kcb4CbO9J>nb3N`8<pn4W53ptM&3z1qMX; z$8x<;F7$0BOj%K6t^%DM-w6B$9F*Z4ApM>o$ZU>zN&fbn`{$A53UWNLr#o@(?+6rf z*;*(hpHJvVw0^MIBY=~+*`0X|t}mA(W8%k7Ba{ZB>Xj%FPS2RYkgGR#dfwzpI3H~H z<agw`#kG~&4l1b*(X57vIoy9c1PYj>$e+RKS~lpH0XX6-VNU-@1#yb#6A^=$6_r=u zzDj4(C3rA^w|278byJ!)g9N`sfiMh~$e;SnT@QbxLYW!QWE7Evc#*HyxGcXwMUk(1 ztNihh%@GV0C=VvM4a!{dx8D(Mj=OUhdlHfTuU;(U$7|^tAGzs0k4J;O;Lck4*sw1k z4!)0taxh;>YRIbUQ(JMGv3(6X4GN;)1*}&@ID~W{%U7UxYu#kL#}pG;^Xj_GJ40gs z=A_PL`scZgKFi;$)<7cATG2h#8xm}22#6hKk(#VLHiE3{54)&g+YkhCoDyT<>@Pvi zh@Zft%{eY7Fc96g@i1J~+J;;Hqj`b}e&7aKY$rMsJcCfxcvo|)ot+7`rJsx=8~wT4 zfCfC741qszTg%L|GqPtgQ_-GJFP{QH`s7n#Go%S;>Tu+t@lYneYteP#bb)Q;gILA# z6z;5Tw%Ut5dZ?{#_cE%bdx?7k&x5y+)gw87_Ina$qCk;bBHW;+6wDHJ?etVq6W~?c zx>A8vf8{%l*}LM;8)u{F4iK~&EW$0SbL3<)d||RsNM-km^f#+wizyEYl~ng*zJ&## zOk^_Z9D_c*eweORxK<G==csK(buwZ0{?wnK(pGxkExWb<fFgJ9DUzhc%2awESX_M? zOEB%^8>#3bSW4*K`*Sb*j5wqud;#`6EOY4>jhnSx&h+L=9*ZDx6Z%NTdt88!KjQ1F zJlm*mC8FVK9P2EciZ7J0k(X^29_*|(oON9)z7HotQCMdGGZcBdPC)i&$iwohqejA* zS^hl5Y135+(>C2q{!-F$9X74h$gl(hYR3jrh>Qp+zfI)mxO){d7Ab1qTS1{p6Y(j! zQFBzxdlYyjb@AxCY--kqmtpGVpTCEXueN3+pB^29aauWou%3>sn+Fe;=lI8TB^Ol4 z>PvZu;oCSW4Lj00@X}G4(ODv=y`$(bn4Qi1(PAWmp;HH<*nf@8{lGJ?ZeQpntw$mR z&apGkub=w@D36Gw3d8Rf7?fv}0?{Vv<`%4+m`-IGWD$u1-i<ST8I3;z9Cbu?sWqau zTAf8~gq9Y<^>$Or6ghXkL~s<T?~(J)D#3xze}gdQ+**Uj8T*pLIH^RgQa*!>B>Qb4 zo0DVetKfr?SHP+4`3|H^q*XLM19^eD7}djD)1TI9gI>Lv8h+MlCaZdn30qOsy#~}O zZ2MbIXdM0RfjW!|Q<w27mDETm_S3<^aDjonNO98mSPgR|j7u~|0Vhid6a?wkl)6a) zfun>@k4R&RC79+%5A6HAkCnTHEk<#}hF*Uj5xi!o9yx9q?}`iViceH4*zH*f636z_ z7a2#w6$1iM2{gsWuL+EbjwcG>8$gkB=Prt`TgxS{98eaw@P}zuJ4MlAHsp}dFd}$o zZN~W(yK!KE9V1?u#ZAS(U?CVo=;ZOq7|{O)-Z(^FFplU&BqK)cXOR~ybNh>2fJgVZ z=GWowB98P!=!;=oj`;|fKpKb=2w|xBMRL);C1De?bs#ERdq?%5^A0ZVane24JdCDp z355j?_oItI`bkquJST~W8#dQN+z&WXZlM`75@{|0eAEGA4JvH@>@fA?6NDK6>kwE} zPV_Y8&`dkwBVTkI7X+DZ0x(^+WGgQ1$8H{SDoqZtQ_IkyAVR)5VppgHqgQwVkV09= zz;p$BK9Sk8KM(69J4q9y!59FDCUj~57r<(&E5Z^6iv>v%!&3drT`bX06+aEG?RXw$ zn-;75{d}CNsFBnO>3KM9w@qTgE-W}EjNvX0IZMXKq6Qbvvu89kozJHtK5c}_sG2l= zWWarjly4IUGVU9(kO91FBkhAIgL#?4MM<E&9bSjqWex+66q|8?6jo*f`x`?`>Y^}r z2QP0QmcMU?FT>YX(M6w(JPrz*qr1KmHCwY7Vgo;r<HK;$RB`85h^}&;FU#1rDU6JE z)JysiOI<rC@W9bxgJ9H+o6h8215XQ58NZeVPYI--_26gIzGI0dmT>j2KFBE-iT&YH zCvvH$(yVEEDnaClzrKS3&<Xb(Hai$nHV%6HmNMBjLo-UK{ucG8xkPre+vAoFYXmMR zilHNHDu$j2{8Z@-X5@d$l(^yxH5Avsf>C0Of@}<+q&YO4jwr_nMi7clwwG28gxVik z^D}*l{(?dLHN{8-G*Xn7qaPVUN#vD1FUfgoipY!0+F>gx_J~E?*)d^_rAx@`z`Oym z@MlrohTjT^22v>i@7ru^?MohxThGfQHW5++U8}|&=nFCsy8|TyJlA$~{sg}_bYiz- zcs_#S;oaj{M9ucfq)41Sl9Kt#h;S3<8u9K0)ZdI9Ipr>kQzrVy3+yB;36Ic(ViBJx zp+d5QD08N0)0B_;TWXGN>DO^F{^Uqy90uj0zQ(%YIR$O!V}Urq?T4zyzZzni(6i~b z^KTW7wLY%A{tZBnisrxT=gx62=WA>66MeS5^BsmAHPNI!1Ivcl+#}$-4Rn1oC51>B zLE4WFYdhCC09lFkbkgL-dN6sM*);&qB-Pn>-P}pQ6peQ;Hg?IhZO#)YN&R`G`70dJ ze?`T61HBjGXT1zX;gmgwBZ^>Kufg*H8CfF<Wr*7^HsDLJY8cX0v$#PDk253rtabR{ z05jiYC}%VrzV)AE`m*~EE-%A24MPd=yDcFo74)De(9+zBgzzO357@{`V$6<dH0|YZ z*9C%o?q2(g{?iC}*{K~fIVf^$$Yo)mOY`pyr3vChj6~HtKLh#^=?IP1nWB32A%BT9 z<?W={QWdZKC=#&(`GBoP)eZ`X=xUZjl9csF#E6IOGAj`}NfEi*D^~g=nn`pJE3Z%3 zOcZ0{;6}oJ0%O<Kd*XFRTD!wwS3(Pe)NA^19xI0k8%mI^Nw)LTG9;Q>>em~!xfOpd zRt>P~3ePsO(EAA~7}6$xemJC!3Yr{k5@A489;YAQP+ypYN5w5mO~`pKbLFDH+}e!^ zGb%PLG~D0ecf*h~8A)hyMCrz%85QA)BvxYU<dsOVmk(eW9u9RzVjA~ACX^)Q&}D1y z!+@Y)em%&ty89h=SI7}x!vZ~5!^*ieEvCAPu?&D<PtxU}f|#8Y``?>S#F)Rv5~9T4 z`76DvhN{kCK61R~FoM5UCG*7#pj`j1>}ClfxML%s|7t|Rn6rV!MZ^(Tti;_-kvQ!l zeE#8H-+vJxU;usFhD^&%z`wGw`80hWL6L>E0()G*N1#JfLH<{n!t|4oLySS}{LQ9b zz*G6}Ni-9q9pDEs)3v3of(>%ct$d!=4>PEPy<%+^EGFovqCi$~0^LB7Z4m5q?(*69 zU(QP$TI?)r@;1UCAd-&Y4sf!<LH03(t)ZZ!M6U+G)Rl;K`#K{|A_zswE0dtdMGl!$ zmj=oChh~S&1*vt<L0NifxPBwR+G;`9J+)$St0I?Zr0ha6zhJFDDUQ(OkkxXn5g;US z)8{Y;o*K^OmT^hd$)s#WFh7biXK>)}HP);5on%RC-A^vD&0q&&w6t=9v2IpxY|6KT z3QR;`hR7bSV9;FFR<zvJ;MQSuL;S>m5FCN{4G5QU2}J}ff4X`hKJA&C@VAItpxRmT zXL7EU-{%{e&&(y)wE+&}{6f{U?(H~$_L!=|otk?1(c9S|!A19BT?Q(in{=X?O4D|S zuMn9rxGQKPpxYq~$H<W_SyPbH#zd3|+{~l#7Oov5a0Qm=lFw#xh57aUbMN?O%3L}f z>mZ`X5+-5|FoYPeHslG+Gu5v@Pj6?p!T}m8Cb`Gc+Ll|Y%WZ_A-U4}W=aq~#N4R;{ zP^USVuB0?PJk84<!oCqOpve0oS$9s9DZ!VFC@A?<<q*`2L~0{kW7viSiLb7I$31>Y zvF~evJIy`!M<e|7yWtfPjvNzI;}%GO00{+(Cf<tYQrUYmyKc*Y1yf;TKM$bT12shH z3IN#UODj?NmcW2%y|4bFwL(Je6N0(!>-=4p&T(8a@rRcam_OeSRQ?z*D|zn+Hqryb zY^C9We*8+x5roL^n1R9ouUvt=K8y4tw9|(l$vrGYW$vVA4(<l2jL5nf#U{-FA4LXc z#^D$z1JxKcaMk*jj)*=AWa*OdW&h4zg>7dv7@i-~u}*e<MJuu<>m>!_e6i<QgrW|> z!N~dj8gL}=`I8rSJN+mu^x<iiy#pmX$cOrqqMV(%BE`8(48IV!4Z=RJe=+(C9x%#8 zxX$>^;A1yV;ZQ|80xoMp;Y~1p&|XLT*$C<axb5)6cl=I!3_5S9K@vm(jP>Un1D!cO zq~4;|(etbwE!Q8+&<cB%#n9jT&_u`Q5*_xlG%_p7B*Szn0@R;zs*Nqr#@GRF4v^wf zqlW2a{3lJ1gy&x%PGDJd$-_^Kk<EMNfdOY$>0s{Eo~TO*t#Gq%4`f`s3t^RQA=ZK& zaEM>wcPzC*f3R*_)m3Q@%*iI>`j~i|o}J!_C|SY$N2Q+PYa1~bGf`OuiO~ms-bE8N zofjbRS5ckS)*DwMVgY`HMjNI2j;H^wGTozgJ=7N+O8!C@0;xlAf4UWt?ehWK8R?t7 zhUsO0XpZN-mL(FIrovs4fUGvVz%MxpMefZVz#eHqL=)Q%WF#Al4hDHfJE&)68Q6q| zh%3$(!DGgn%^M_r7X16@6oyon4wlVGe74IQCiBY(H>a9hx!*>;uO=Kc*H=D5k+sqF zRcLFEG87aEKU?UBMBvfwf%7#cEK;Cd%D!kKTk_e^Or+<w>wr%*OA02ik8WPjh)Kkn z;cvrL2JP>4A!t_w63Nc!DscNQFRG?xNHx4=79lrmK|J(hVs|m#Qcr*YoS>mRz8qJG zY_0@AJ`#8VAi3{G+JSNIBQD?f5W<NSIt@`)@r-d;dc%wDFN8b>_dRMzzmg$Q*@02K ztlF%`LhE33%`4o=o=)fHiq(^%39x&&HFS7R*V3YC{Q2CEyo?b&e^D802;c<&XpnFa ziI39D6R9qQAy1)K6nZyYrj9A;kyjr5M19DuZ>WNJnhQAO%Z*1`%}kmP8X*0d<@%iK z)b04^q=4x=#Fp*Xr7_fwFLog@N=;(u__L^y%i5{*e$46r%n5FtG+|3?Vd$K4wJb#{ z1P4_yAy3oKi8a85)a{7_X+^dO1JAd&$H-$0b`F3k_~8LIgzKy-7=?m8qSmSm)}bwn zGcpE&&^ySoW5?r)e>@#JyKP{BRdc_ULEh3=b2$K`ikDSe+R!un_;e;2Ll7TkMs6>l zSc%gc0B6i4w!k2=YL0*Xonc(}?dVNp``(;XE%1cd%Ub>#6vDW?m%MAZ>+iegDnj-} z=ea@HF$`_!2qw+&1kns75Z%YooUK4XW|5I&;(8gxS&C^quKfwTlHQcsvjbU&?X@)n zS>aOPX&ShP0=svX|HX*zS-IV3Bt^1WFNfnOmnRi^Kq@sf(-Rpc2#PTWmM(Wmum{TA z*95bUT~nGm$GZ!mG*Xn!)fQLbo62G2-`f~25^cgl>*THz3%HkShjy98RXD8VBT(;u z<2(}vPU2vRB|j2qCI74i$h1U6RS))iQ-$&~8)SNJdpr-Dp=Rs+pzs!=2olSP5q~z9 zm!-Llo|A~6K#qX21eJzYHW%8Z{_w;mDvO_LN7wGXqX`pjx1lvvJb!T>Z{Z-iC?o$Y zmx!UOCsVux6!^Tf;GMplBgOTC)dfmJD*|i$9^vtf(nNzOq!vvx<2XbYda;6=G_qL9 zuxTW9p_ICFHKasCDIFczl_Zoan%Yb8&hwbb3VcF1(@jx_Xk;Z1I?gSA1Nl_g_AuA# zb+ld#Jop1mm=D{kU0+>dCPWfe;VB}keb3W}nLZ|g4?#YP)estm-HtcG;q*zm`*|8S zxJNx2JC(_j8}Jy6iYu1%+|x?ox)t`;r643UEx{(zb8kDi$SrNE8<r`&o^BKljHQhv z<9J$yfH?$&CeRaoL&wt)`cCmSOgFm>ONV=3g!_crtD>s9v)M%e?K*+<shd&VDtzvb zS~rSS_B3r<X!#r>%wWVw-jp<Iy#}fn_45kv6fyKi$eOgXkyP|cud130>3;VPi<w)o z*2H<N*wRISPXwfLALFvA3#=oku?rEr{JV+D#D<+hYQS(R$5?DVhH_i<=o;)u8qBj< z%of(u-`WjWU3~iRo21`sD_OQJNW`a#yP&7)?12`@vm|AND6P)*<Paq&{H*$u6}6O% zmJxO!XsqlR5zuc>;c$o*R+e?b$Rt$3cZ{(}a;6qc`&Veh>>w4Mq3vj*DTWFB4qP5I zLM)}y_FDGIky!FSovE7;AmbGlW8G24<A&vfG6#;BUFC<gLmZ&FFK9q8KWnYNClZ(q zK?~&?Bd|-LEL5({?lo2&bWmsXfW*6m8-Q|q8uvsb91&AI2no3FLlGqbDCwjLk_LM4 z-B7MM`D4I$bAENb`oOs!5l;n<yU)-`L)vDB8C(VbD6}mO*Y_TG9eZQ^Il%Z5=}Utn z##20>#AK^RG=Wr4)FWbI*_QxcmnH!?`Y>k1r)QXP&X@SaiOa_sw7+O+ii$TYa1_hM zUzf0wtJvt?)0^z!ttbZ09iX53H||D#UsKQrwC_dk9*XC2M!R@m@ac~boNA-(IXkYa z!b%mVvgB$N3I_NGpOH^2E#<sqV5(KoFJUT`2nl5Ilv?SGX&HF--DQ*#p9r%tKK&Vj za>+_6HI%w^qKrKQ{&=RD<kUtaWp&{t>Jh0dS+--+-vWAS^@}SwZL0c$<U+gh;o62Z z##r$i6+RXT@Z|ToUd6LK)awb8g`!J6N=!+nu$s7VLq>EGuc{Ufv2?U^HFqdfQNw3% zyLtW>%D%94L5VX6Hh~=%14Z!zaF|`S6vCus1eV;NyJgjT?p)4#F<82@Gfyd`-m7iA z3$^Kapc;l6Tp$GIp=y}jZ04CP3$pOG$Q>F0?B~*%ek(JLF94GaZ(p8%-OF~?vu|B0 z2o(M}aQ-9XO~)+b8Qkm6+b==aYqj*=6`cDm1zr|YVe<;VY2|)YukiYH{3}xoRGLEk ziKU8mzTIPjU3zOKiaBbzK7RCKf_(~Yoh-5!Y}bXF8hryKVnO~Rknb&PQki~lvnW?g zjj9VgqLhfs?+CZ@k{t#4op`jE+<y<kSO*u`0row@!cr;|xr$(gHfxW3azv6+bs$x0 z1}#U9gA{{ISp|6}Pzj|g%+V1&i~<H~#rkv+w<MO09gu=Beh(!))sjBi=>`oPpO-D_ zZ*c}YV7BjDl^a`S00@=L=NKwIQ`Ub$EMSf_r9c?Z45QRtp<BF-CY=GNgT}+H^2gYp zNjK1#L+7EN$hTxHt9A-PIxSL^ps4}2-vAwvp^waD;4YlNz#-PY?~Di75TKVDzgQ4` zW`mqzX2(ucm$Q61aqMX=Qd*#W@&|AvwJL*r80aM7;Mv!T;!jUTsPDkuw><7^NybxL z{f9s;N)<jK2jC!?G^}#Xtj0Nvpn|KnAjnt-piFRebA)LlFlY0oG)VcwZ2Cb?g<$DX zk4!*!wzvkV=nctd;qv%ouw8i-_`lNrOtL2coa4aQQRWOU2Q1Q%BLxR8D(DbcMkrY# zo=6+Z+9!lq^jPY}?X~n-dSvYW9UnOSUdq_0nOWHl=5_+4j~_)X&{DY@_OK-j^D9Z= z^Z!jDcIBDb6l;>du2=<~_Avb=Sp_N8pU$XI+@BAb7-O9#By=2iMhvdWZ{BD}@ViF! zJ_a>32RTF@^aY?-It#W0u}(e$oG)ibRV{7Us!FQ6fT-MdldpU2>Dm<XGCVTorh#Uk z3yXjWBPSqdkSR_(s!0Ch2ljE=FF5T^gqI-CVul4fTkFByKvB}L(Bp2%;-$e<D?-9; zusj-SEbW{~Ge{$>3?94C-r@v};p7Fg+h@;bJ_#~HHqda0uLH>Co;}n;2e^cqS{3%F zs-OaG53FOU*t5UkI^4f#iR@pDTryWBjhqs$(Y4%j`~AU$0W)S9F4dzID7)^jH>A8D z&QQVb96O4*I4&3g;@z}M4}-ihqcSqi%5upDWrVdHZov%f*xGUf9X})lNs)Pwf#7-) zxq|5CM5dnBsi{ogwGwn(b*FQtI<E;oYk#~vfXDGby2C^F<PfT+xzX7FXcMh)W;w}7 zNd@R6!S)T2kwrfbBlEyL>4r~*>42LF)i8bUC;MX&sb>CRD<YI{H9YTYYW3tSwlg2C z@0TRPX-S@li=!x8II1E3HSl40z*~C_4yB9%w@Uz{bObwBu7R3Nx@lG|y$|`DU9f9l zX$&bF;Z}18qpuC(XVcTwrGU=xDY1=9Mn!Y`R*uw@MxWTJfX+$qD-<OUr(QgWqy>|G zn5&n*t`bq3oX8_lpf&f-kY-%<&}FxkIx->xY%HN_r0s@L=s8{dwbDBFTf)omJG*f{ z&;xMPpF;TY9cbYQybNFjz6{Z0xTL$s!&3ZZL@gXBLB%g^iu$<TaG6}-2V!dM8`!u# z>6eEZP)&qSKu4d5jl0)(HZfr`{Go23K$wQo-pzvKf*3CRyut=b8kM=RVBS_$ywx>~ zi9yH;u+mX7JWoJpCt=_(e7s0}WxQEXEMfk64NeXa+f0JSn<L2aK|Ettj*2{=k!Il2 z5Mpk@trR$~XV-J!Kf)h{u@i-O9rpK5I-30PaO(=9IVccVk*_hiGM@S=lWgJTE$C-& z00ma#g@QH|GOl!H)^<(+B87ey=mr#w@_kHt+9-W9?8t7HXeAS>b0CTWp<IvO?Ub#l z_1#<CVie`9yvWk(`cPbKhClcSw^wPuJF4gmS~A7Gha@BfOIn6}){eyp*Ud7#Ih!41 z-S;OL2l!|^A{k8(d#oA^{D=+9)7%I!wD=|ZO2irA3MCW!B|*4Ho>NO;Ct|Y0@<ZCT zdh0A$_sgD&)(-CaE>W9_F|jIO6kpT8=a_8(EV2-%mXrM5{CT_%&1SMUPY%bD50p_W zq;rIDDrPbQ^I`w_$!B>1UQ%}cRARu4rqQ*hTBF;48(4&B^YaB@6$|Ia>?GL?2iM_; z1eh$T=)=HBa2m#|Q_0e43~4}p0?Rg-HbEc*A3Bp*5gIic^e-<{P)a#+zEJNbz~+sJ z6Mu|d`*0&r>%d0o>^;Y+z!1a(81d9q8~&~ZUm*aw@}J*M=}SGo$j*_EAi)kN3SI~= zG&x$O!AuL>2tcr)W<ut^ftOXmzsJJdUhn6W3J20MKAOmfNsrspct)e#h@PbsclP9z zK>yJnlDcLjMXSIs6#rqzxib!+>4-+&o)UE>;0YA;Q^Y&~PRR!870Fk;$`tXHt7av3 zr8Oe4s2I_FBwc|H1GgHEt&CKu&RoyZy0x<yO*!ZvC&sDi^SKXO{9piK@Ftm~b#2*B z^tTA(QQ5a4(u2bw2JM9_-XWTZ*CayWFZO^Ga`&f=lkWi|B#Kn^-3}g#oVVMSluO2x zYPaTU7mxrgegO<TZw~;;6IMmR&eFwG3)zOu+C$=7=||(PL{Cv|m%6l$CXc$Dz`ah$ zvGcH9+tg|k)^xXP=~p)F@t7!jnZ_%UYQYhFK$v>)aaX_Z`v0&HZ}4%n0g@681zkj& zU{diIB0I>k@G8#|X;u9DsRhy&<rQ|A<M-@fuSau>kWA8s%0}$ISAPf1Fl-SEo(WYe zN6j;GktfLX^Jr}Z{wvHRukVG4dTjW(Mz7aA5t`dZ7A4uE%1MI(R5%5Q5PVtH=tqWn zjvsjl1tYK>N%T@U2TxLa-;^+GP2$(&EA(Dy&l_tgnj~?>s>WtRs|-Xq#H64;Su{Cx zsp?8BSty_20X>|WTZZx^wrjj&-rqgACz`+E)5lJIM!x8~P9EFn{Xs3zALu!!FqSm$ z@!@;?L^i{)9Q4C@K<k9?A$vzc46fK@7Ig>2I=Cc4v@}&PR}i=)<05S=VFym_d;Wjj zs`}j;Bu8vIoeLhyWm&6fXtBcCyJ)EKu=H2v<{0(WyYgxu0^eg}Pq7dT^hp&2Q-d5w zkG{bZj4~n!cAP`8?EpE+K>H_gQJgv720+6z8-@}meX9^QWFZ6>+k0l$Pus)Al7Ifj z%K0MZx7M;KenN}fP0zOnAjVV<_X@Mv233J#@$F$+!-jD3M|q8_ikyLlu+`iHbToKR z!oFe2Z`mDILL9J}liTO}bs|Y%S8J~a$rX4nz{d^*YO_8%Q~8`Z9^>AT1tWK&7VgEB z+`*B`QJq91@E)Omr|WqYDp|JJK#7%54O+t!^n-EH*F5~*T{wi*9y8m4!+BQBYNMtJ z62;eD#c}Z-!(d~^Xx*60em)t#t59A%zO9EnbmYfZ^L}dD){=BRkF{n@E&BC5_~zdW zlih(l#^piBiyTaKc?|pQA4Oi(d{1s6YY5HEMqAC*!Az>b_ER~{?SrZ$bB5o?3SY6V z7&7z=)BR!Nb;;u@lL{z<R^2<F*tD_3f{mKSNN8cU8MU>zoR?!$X0<Ig8`~yk(qBls z&hV)SW-~GLNT?miXF5Y-<1ii_6^DAE4)Mt_57z~(0P8hRxWZ6&b(tr2fq5V9W9Lvy zW}O(uQz+Jt>uPU_a_a3X^q{W~k{sAHssx&<d|)ihJW+yNE6Wapq7`8`4rJ$aAn(iy z#xXl=v9H63lK#RG2*}^79v(@697T5?y{5mO9Oq1Yy3j!lT6>Z#z@4i34;A#x9d30Y zw7^8wY`OGcy&kE2T*d2(hCk*>o7)zMwe%k_G>H1OP?UL2?dFj!&fZ>ly2^oUF`Z)# z!t6%O+Q=Kfw|D-%m_ZN;prWQGi48rPBHVo<mJOwA#s_c5jWZ}G3%hL7u2{p@(9ZMu zQw35C(>tPcq*3Gm?lIo%Gy!ZR>3mVen$EMd#}Yb5L!VjGV6<*0^l?W0RaQ&2O?GFu zF6+xQUt&+VQ7&Oads0WN9#O*neJZry6gWKU;?W};kOzD<YBK-)EIk|2z{&)*jP3*z zHkMpIl5QzZ5PI?KQJw<#JJHilZq}gHW-OsBnz+#llkp3xlnkXz<z<;PXnL<5+9sOf zoWdEFGt@D{^ZPU()Zr#6<~|v*B>_zEFzoL=qo$XIBq`-QTd4#a*Pfw`rvAta=ZB%N zEIDn$S<iwbT6A8v4E4bbt2N~7;8>T@Vy6GzRw3{MAo|vFtZR_4d6$$wjka6KKVk9` zsaX%G=uP!<k9D!@`Wf=Im&~;r9{kLJv!u?_)8Y~l$7+gPA$ys)tRsTGyUXa(K#MXa zS_gi}WJAk~Sq5f0zVm2d9qffNG4f07#&bU!cUoABc@!m|P0m2)F0ZFR&Ga%3wT<<| z3;1AGOFjmP)oYU?Pn+*T4c7`zsnFp%Og~-v%_a&k>SI{WWCvvg&Bo!qCi?U4$ITDb zsey^nZGOJ!w}u!LnvP>-jW^_84kH*9TXuwJMUPG?_TJe%Tez8<L=YKMsJID?-myiN zvOh!>q{@xl2AOpFHoB^*e@&N9U6FPU^VYXcHVS28=ilqI;Q|!vOCfJ!V9SENT87cm z1Z!Wv*YTI}b7p3XxW7yhZCd!OCee^2HJA2wSe1IbxCzIiM#%HI6ZEEF;lP+}if8%y z;4_$h9_J|YlA~}qy_-kx2@fP9riML_nN`Pn&7sD7=)3%porYsJiHP~6hK?;zbY-(= z8^b*SxR|TcVlM8FCY5+hXxo6i&GZb_-ovx~u<w!!1va#Nkxpv8^1Eb^8g$Th(eG>U zem)_gt?qY#^3o+<94DNZtZ#*B^e=1fGsq6CoKBCYb$<wXmxZ2f9202;;pWaek$#NS z3oLY^^L9;Bl+Ijs%<BG3@Lcs?yISMR&muf<ip7&JhUSCksg>Q%a7c1g=*ag8N5jbU zBePC}5hU;1xM*bF@)~Z;kM}$a$f;WIs5+3jze2hxbon<yy4+`*LG_kqwrw)Bc-mDw zDEDIPmj--_q5GgPY2EKkU(*zY#it3JYt%&(G|zXXRTj5@L<!avT!n#@$OtdN*2k~l zlurm`+Nj@{uuZ{sg6To@eBPzO{bB;Qsm%4;WmrrcFY1^E6VtNdH6NIj!i)4&CEs|e zq$f*T@l0#<le3QtT$3qisC<BMIz5CD^|Uqy4@92`tlC5IRC&UfZoILNYd+G3x=7JN z;}-==DFDq##g)9p29Jq05<7hKmK3cF{%^a;)usT1VW~$1H70A<lt&yJJOTZ%gDp?( zH`VY_-{}fIJ$WDkA(4|uNE=}2mQfYA7H_%QGTu}1{3@5^=mhlKMr1@K*x2+}PzV3y zNSL2ZErus*_EH%Bp5FSkPW?McEX;bC7a(tKQ&O863a>WFyz3apXZ#kD*ufaIaJ7Cz zo$vUI5JC>qA;)a&-!1lAJ)ziF=hf(npqD&){voOE#+w^DtUA-hR!@faCKd8}Q@D-K zfV)}1wcV{zB87cy0C2y>8ltKb<b`6fx^3ZpMl(?pQ?&RhRcvLVa$=h3=C>W6s{ zf2mA`cIaF$a-hamFeiz<KNeT-c_}fyavGD$7p60&A({=-YZl)er@5;KFkva|$&{37 zOro1y7m}?A{+wkZMNvY;*wsW1dW5O#9pQeh%Vi~IbA^Q;e3-*dmw!@fJ@gQ2i7|Y! zkcAbCR^!EM9(+8kHnHy?6>`b=s)G6TJ!c3W6(7*ilZnd7wmfoOgLcI~vQ(oemrxcH zk<WFC+CN!;_d+E*$=5*%+OPGkfFa<Scl$;n<_~lO8=$gisDP&zRhe$Z^=(;|=q?o4 zHgIgvg_QLZF0MIc2H%<pcP`CquQUPVW)mDLv6)zMb=uD_DAJdjQY)c^LFtGEYewKy zEy@K=ZOj*wozvRDTxQm$oo`mpH$<&V>+im5s@?QMYT>HUe0gr$a2<rfw5XVWx2+TD z`$P$j()C8fv8n|ut_Q}oON4-yI^CUA(kdC2&z9NDqB(0N_yaCj)XJ^IBrKu<XTkkr zCN-;Qm9NO9wHt@GuRMJ9jeAOa!_0RCe2cNP?BlpX6Ffkj*ff(DLt^FQLAqR-@T%>( zLgov5bbQS)qQA9S<cbANDrPxx@tgC7Q$K#+fQ(a_E}mMz(N&KtJ;{z5dZatvFJ`ID zz2iTl^0I5$>Qxp>TAVVhHCVsKISY4=5((f22;#|A{#D4YKW(2ya}N`~KCPToQchQf zd>&PeREqz5$uNFzY#q$ix#4%Ao<S#FPHfnC+?BZCNXAvWY4AXP4nQcgx@5_rzUP7o z&KI#cb;zABF;y_MiAgOGlSVL6OcsS(g>>_mif@rrUpH6FvsJXMEX>_lHu?>9jGj$l z*6h-FTpl5pys}8g%C-jJLfR{xHdk*x{i6l<Ta0BOT+OT?m@08nfP1o(VL?Ln!Yq6X zhednMK5bGI*D?c{qt{cv8{#kV^y@CsWllsS%?*3)BU$^PoL)2Qx!1(@PZY{uSksNK z^)-Otrah)4?X0V1xTkPaS5S}--P|!frF#JraXvjZL&hX8<=bLaR_aRltCd%F40QhH zc5-8nN$p}IQNH8{CC9PDvZp2$S!qh|R~=I@;tTKQ@(QoLCFA*~MeiEncN4i`&W_uD zdJSmp<Z5aUxAy1$i$>e5B#c)cB>6c!50zmh7@zLW9iU}0JKfQT9uuXKsA^ig`U0o1 zrqw5xC3^LhfW`~TJ5j^t1)6o`I~#ZDqJ=7c6;?OV1>{cZ^XPG~^H};TNp0nu#4#+H z&pPSU)`H_%xWsyRsYBZ;R}=di<>CY4YWCa)cmFOxrB(m!u6S~CcZ=}5p8Fksdb@lv zy-d0H+1Z#&lX`bsgX^u|VZVtwVXEQC1uBH{AN-FZhbh6)j!86mdOGh{D^p6hfH3K7 z&AYzcIQ7TBbgOE2kBOJTbO*67U<kO$$xq;K_pj3BBGFbAdMS#{W|j{PL3#F^czL1x zD$8xIk~jV3RQel~ZdV%GQ5%!@PPQ{=y!v0wD|t)YG@E?cPrv#hm|-r*6IB5PZHZWv zqVh>*sI-~sCKwT8>Mq)}3u|K(G<0qb<<Fg&aWB^BAq}Rcf6R2WHijnJIMb=J^fcbB zvhrvX_KW&G>^$WL{mP1!rSvu^^qPtfD+>qZt&po#Ie9uiyR=Tq!189b%MLFqy=;Ay z(?-j96*&EV61$3K)N@xljMd#Dz%Nv;YKNEOf2rM8PHvR5qgv4sq$@FnEgC4sj|yC< zubQWrpRON>B6#VtQgqr}9*!NMhZW%_>pnc^@wI!}4(|V*JMpl@u&Q)x7Fa=YN}Xb- zT~~SdY*wYGqx1fBh~_wr)~WcSZp$0|B_6@BJ%?B64L{!lsLw>~uF1I%ki&u9+=M^4 z!Bh3wQoFkxo3r2g>uv2Ip18Um^wK>Ym$Vz1yit}f9q!%PX2Q8Ch3!E3q%O0f(+tyj zu?N}@WdaErU|#>6=5A*BoK3nY<`PYkq}@@Z!oRO`w6DOQ^h#h+Q^!;*zVc^|DA)kd zyWeCJjL*(<FphKcdZ%qNLFc(!aPCy-IUPI~R!(i&l$J?nIXM(3o}}ifQkv9<g65Pa zFI7~W<TGb{1-ELP{^zTu)`lLJJM+&64D@HpN-PG^Cre4{0R7+PR&%*e;bN}xRBdo< zcZU(epD7Ll^M|PN<;)uSpFNSA9wAJfx21`yl<pXA#)Vs@JQ@%8{&5)e&WUa7JE7I` z`Ml{`&jKcIs#aOjytGEcn|wacLLU_3g`$YW1LeY=B-hk#bgbSS@+^$SdljmXIFX{3 zB0d@vdX~3hp7v@(HX~}v4?}Sw&Fm)MXLF*oHWq&8@%!kuBhv#zwohutC7Yo0X&cT2 zd4`oCvrh&EKOKgX6I`_bHAl$#SR2n?ElRTi>M$RY)iC&5${f@(<-*7q6{FvDKJMKH z=htX1y8sOx);sHc;?5FXmvyU7ujSI;s4jkSO<BL+g`N!vS*^~K{=oO~6!8+Q-V^ya zD?P~GIRKJcm{lFzOG@C;E>RW(y~w(i^w5$EUe7XYoTe{*Ryu)va?>?E{c0+?_iCjD z%4ayW&nipjQ~%x%y+f)W-=f>%YrpnWzO}fY{#|tcK*>sx6pp`6s<-g#FNxv4(S~LH zAM)h%1}_^+lgV(HKiPaF^iFO4iZcP^6ouE`P7byu)#91;GEQHoW7TC14%wBa@-NHA zs*bEtX4S*qI`2|aFQ&ZC`>cWS9pQE%FL&wu>D1WS3(j*ipclb&aDzTNdaPULm&&El zMd%yNUF3}m1>%YCbcS*lIMU<%6xGkQEY_&J9fjuE{4?t7_oMG|?AjIZ6Xjz~2`_{6 z>{<X+v}!7MfV`vJ&lw7J6FOS#bZYv3D749X6Exm=fQz$bG%cOyeqA0)rgP2df@q#% zdpdkx!)a5HwA5Cj77tN&^c^roN-iSodqwzNaEl}?a>Dn9zQ02Xx!1#Fdl432Z%xb8 zp_HK&H&BR?@yot(Axf}OFHhEdT@>O30}bZ>O6x^k!yn1ggZa5rKIwAlPO9#*W)H$5 zoP)DNbUypm;#PKnO{dNERzvSzf+yCiD;DX~1T5-s@9uI+h`3tKE;sMqtHq^>>cs}P zb-U6%`$)ClG}+46Z<GHI08&7$zv88Jx-K~7lU-5}=mula+TsVlk$h`)_xf&3H|SNW zPc1Ea5R4TdOBMUn+H*@q52UxA!++toL8ee~>+Cs2&s6JmQ2aIK`bKR*v%aEDePVOj zi>Ku0I}BxwT9Lx4hreF1Hf<~Y^9J!&r?(HSFqn#0iyqk8aKPn_CaMH)SiNlhyuz{h zs*VWKd0ob=n!n61o!(~lMEy|&pe{7NKd0zLiNP51`QuMc#A&Jjw)D|Wb-P@&WSt>@ zrRe@0jTyl}UsXHYcauvr%05tqFY2^NHkUlIxo$V=5F%tbWm(lM1tKEBzB=jJc}3&% z5pxRkmbA{ETl8FwPM2`{vHl2nOh?79d@cUkXj31memApu)B3XMEfz;@N9wZjFEp+` zn@O}v^gvqki9i6KE7uo4yrc23;6*ZCugz2e;>4{TFv5L-D~%t_FMhqrWD8!;W$?h~ zDQcN9x9EAX!2+Qi_Bv12y)m!&wKl8YVk}%KdSEX~j`e)7sQL3bq8G#lb6+4*h|fjO zRqC|xsp@r?R~9{Vp!FP@Z#Ih7h#uP0obB=UdHc<@u-o3gvwY0j+O>G0Hi+D61i?J` zP2Dy`+6tRLnj?BiVlemmqhVjPN&fA;!awY9PVclx8oKu_E4)9g^$awalBO>fl)kTU z^jZv;SBS=(?y5yMie)S27LF^@Xu?iKTE+N9Wp7t%YP*aT$HgztDSord5$I6uT~zc` zjnP!wzGAy%?Y^2fk4W?Emg=>|lP+{Og$dmXoDc40f~lye2nK_~NW<$EoGxMB73I(f z1}S8(;%!j^Ng)eHdS_qNj7uLGg88N*MldQ@^Q!WvhG@YQk2=x1$>#}>;O|i3_x5%w zG8Px!cc|?m(HuRYpcg^iP|#)05x=~+?2}F_LM+JI(q+}Yno|1gp8C)CNIu*x`Cymi zt8z_8z#DQqP36)Zo64Vr7c0B{s+-V>U$ARMZ5!8@jhio;bVgR@1C7P+81P0ryACca zx^G`IG8B6ISH~Ul1PYsHLUPsW5f2Z*3t!wiXO8HZYMmbXFC1DPTUT1e#Ff>lI%hcG z@hXiqV)dmaUFqefufB%UUt8Lsxhhs)?J{eylwR7iZ(-r1r#q|BC?sf!JJ!r8eC&L8 zeb5_@-_VDaX4g(zT>eQn(fWH;nsdvF?t^?pqz4q`wzlmkdjhx9I)aeOu_pL>+q-rz zD17W(cO5M`THU^EcHyYYijJsYO0Sx-ylRow0q3DR;O%Yg+A$wzcGZE0)THqH54Bx| zhb`zd9<6y{NyQfmM<nd*L8Dexuh2WgiMx>6xv`y-`e4;ddzvze+E?wW-`A?jSyS<) zr2Fdn(r5COoe-}z?aSvDO(;@zf*u;>8|M~|zN%<N>>U+rl5d(vYSjv9?zA*+EgkiZ zWUEc+^~Uc&`xCyY32SOr8=QD$XrJ9!y|MV=_2O?_Zj`)aPSK=NjS{gj46DZ`-CZ#b zXPSh*fSr6^TeB9a1iij6%rY7hQ=txG>6*EP;|o-BT$Mbu=!#C|k;R1%<;cq6S&ex6 z>gAi~7XIl>S5wg0v!i_U*WwKpS05~3pHqLNX4(==wz@CKWUKpdmt;nTrmNQ*Eo%I9 zam6gPNu5#k+}4KuE)U#XhNCslE~)qm_O4u!o+^5HQ_Y9_>OR>m!Bu}h(wZR%eT}m9 zsihxQDlTrR{79l{-Cy(i>5if^b#HH}OG7igZh_-Y0G<__&32CyjKd|&zN{QKG=e!S zdo{OPO#||<U>4<T$Bu*rgJm>3s?CYzma8kC8nTNFi}_)}41-`GHau4vKbc)LwL+_b zGRulWyu@rMU03|zj>aQ`r`PKVyDZH+OCMfUv&sxz7`_)0kVm?X56l5Mj(C7kpSPmu z*XzYQ;JOcbBIL^;{2s>_75?|uh76Cp_eO##{KF<#FnD`Cwz?+iLrC}`{2|z+d&(!Q zt6h&k2uby^ckiowlF^BeBpUT9Ri{!5AIxaK>i0&;5EDj(dLF&h@Hw1j2pfd3qp>#% zIR%UOV#D9(6~EqY3802{bM3dKk3fiP9ifB}2ZiYMh0wUuTF#J#6y8XyY}=f|`?96w zkd;wyw4yy_cHv_e2q%RS(<<b4ovVLqe#vy1HH2nbjg^R6t*KdS5&8@)y{+}4&)Z9! zLW1jT-Sh<|Z@0k><d2rM&YM&8bcI$8veD}bR*4==Yd(qlD%8hQiyp#F!31u>b)8^5 z0l&3#f91=Ys=nA%@nN$`kauohUGeU=insSRWqOE7q|dB=Hnn1=(jJMrt=ZyfOUgc1 z+0hUr=^--l*M+4Y$gGG=^tE^ITUhkSnJx*Erjms|ZoQ=F{;UoXpNM+=SDQYWRrsVx zt?U)dhpVP8t(>E_hv2Zoncb@Fl)?v&NkzRRl7Y_;9+MVBDe>8r2PzQ~TdZ^Th6Tfs zn&*~Q%+=v-*IrMu>Jaq!@)|#$Tm081bVabwWp3J5_W1Iu#YPugf5#RTK9nmfN5%>< zsZEVr${t@;y$sWXi~^Z#a7iMQEKu1pe`)#0*^-&7DrYKe0a%=RT^_n|Z_7#ePODp& z&n$c-PocnY<G&H2Fa;u>KyBOdrDbpJsCegyw7_qb?W}lZNA=8g6`!_S1Q>Ii2{^$F zwT1LyU35(~Zm2OByj4sZ-$QI`l?j_y4mSpqL3U+MWTrKn3$d7g`H);>*e&LC`>+TG z53}7;w+Tr{RjEn3Gtzp(RqZJ=@*caU?0_yTz)|Bgo)Et_M>OTE>{6Sy_*&b}ydE(` z*tOOz7o?|KHKN?Qk5fusF4J}gow`fS>o3VKwP^B=)=p0;eN(K{fIO0J8njzl(kh>t zRru!vjr*Fk<qfL5{Pw-MEtw{v*I+7GUijN}HB0NY^)_duM|E_5{%;R=<bh6*ZW{D> zuQq%*qi_l{XyOHiZKl$VrLR@%jiI=_z?ab3cb1P`P(1lqTXuuu%#QM@kWDQHOE9T2 zpdxA4zS#x8+SRbVO^4*Ds9FUF-5*w0FA%HC&Nt3WDH?sG?W{|Pc;bBwy0x3@wwH}r zQ2bPO`|*0k$!%qmmsNbxZgTYbLj_Hr%_w-XT&oFrk-HEv8%x&|{b5txUiioScG=Fd zQA;Zq>kz2$h00pyeVIR6r0ItAm$a>zng7SbEr+EBnO(T9QWJB~+`Ox7+?NFpA8pSA zEtNOVn_ckRm6dZ9HY|k&g`Z6+_|4wtlRjiNn;W*2JepGeewnhy=<u2hMJoz_x3%FA zQS$}+iP~wiM6b6aSAk^KC4@fg#o6<V9@tp3v{qGou3^@~qH!l=q7W(h#G?G)>}xp- zmnKPtaJw(nzdf_)c?mpez5xCF7vj+h^mVDS7v%ruP}>!RKm=p$H^mPvt^BM?CDz%j zaNZ_n8f?M6m6PU)CTF!BX;hrsUGZ#c*$0hAbDz(DzV2^d6-{d}T7x83=OY0a@vC!+ zrk;~uYSW3XwCpVGksv=i><L!4E}d2Qy9J_`D@X!i7zQpl`^$nSid5ZwBmi?XrSOlN z#OoTgm9^bDCtEU<cGzpd(xy2x3VyY!YN6KEXV>Sg6FoFbH0g486Y`ij4RC@PIv_Cp zUiZ48W|6Usufm>K#@8je6T9&bdB@DezL|KVOtZ<y%B<8LPZ?qs8Pb%W$m={3@Pvol zKd?X4+N*oSZ=dfh@p=*un>XOH=C`Hps$ZwDA+Od=rE1V@Za&?(aEJKaJ(3yO&FNCJ z5er!=I(F<5zrR!b;i1MY&3Y9{X>%BhS~u(zzqd>Lac0x*4x_<ODA3jazCoj@`C`lJ zU6S{9OFr5w`6{DfYn7^A@B};#-L=+LaBl2t*sQf<{osym;yEoQV}OVrzsIgVi`Ael zdyGz4A=g`>P@g^0vfJniC1f+aSRLKF7bCpidN8x$vmN5kj<+3ES{*^+w{ays0|A?* z?NsBuo#J<owq{v`P{8ey$Pc7RKG-Sw@Ib@*YIU>69Z7auA%&r}Yx^S6q};ZH84aJJ z<P+`LDyx&2O-|i~<~jSCw(F=r4Gr&BpWadXfk@Sc<wSZ@+5XyhE_9Z|Z1OwJS6UYC zZTLoGCmu+Hp*pMnE99`9kX}Ygv^$B6otC!a4Il4q+@!JxBEDd?Z2k7yPs`OZC;<Ua zptbwp_S!FM^-8R@^to*1((QXB@9wHw(P?q^s84RM{iqaY`XVlCM^636N7}NG>EKCX zFL=Fnl~3F(UU{~4-HzJ7?{8RFqiMrTfOo68Yu|S942eM<fMrQ~UU91N%Y!ZZ&8}#` zp~UC(mV;(j7(Ck0xof-lt9pYDbwFBlX~(y_C4b*tzglXx`r~8<14ypOSRxvIv}s>< z!{^(@pJcaY_E>D_OpmSmMC0d&TMt`YVK#ioaW@;APBtyvDgOIz$?TlwLo$;Ac_OGu zYuCYT;&(1~miRnTvI&l0xzaLsZ^O4*JB(?c&*hNF52s1q-zoX{K>Zp~cO|lvgKlrF z?AxuiAC;)uBY~(^Uz9GMeyly$E=0I<j1$c82u8qaWB2|V{n(+tY7Fs`?KLJ=VY$`+ zV%8A1oJoFV*~jNq*m8!Ic}lj9u7erMLQA}Mthk#jv>fI%fPf}z&~7yT{D{YRk_0O_ z24seikB@wS%=MB82DuhVVptV{Jre?yNRR>*reBiN0>oT!4a#kS*lDCdb~(<3TZvun zC#4DWza()W$?b`I1wHP8tw{coc(Kmby}6+D9eA-2Bp{U`UO3-iS_mXptQDmG?nM1b zqhc%alH9IAx8s!L^@XMHcUqBHm0YrGVD;RjH$t?p1lC=?cpcz&3Xn71F2Us?!F*N+ zzk84Y3MQXPtLKYXo^+Rw^bhO#5bZj;nzG-m$?&l*?H?35y14McTzO3|NnJzD!)PxZ z^VmQP==oR)NuQI?WW9I24v8iphI6Ii-FYQ%wp+ZtNJ_q;(+1S-#>qyA%9WUw$tQba z9qwi|p~bSX0|5u!tY7F=tmknKoqGeP5XU`AF#GrK2f+ja0oO=FaJj-h;Z(D6;!s!e zgAefDFn5r&F4Eh(vRF5I7+x~AF>@kE*%h#C5&vyyFSuM@HhyX8q#9)@1k*4(iAo7! zK-bZ)2m7-B`2)Wh^t3@oCuuScyqtbBuo^chw%?cVV!=1HR`iEW^=S@w)bm}H5nSKh zs6@#|y=ZmO@3+(+bh@MNftA1UDj}%>{Z1ByeoebYk0qZe^egZt|BZcd(_7R3yTRw@ z>!yEI^isXi5@3uq$S4fn^Zh>eAEW+tAi#2GyRildW9uc~T3qoIgIjglEoRZ+vt>YU z4OXRFPI!(H2b3JE)p{=z3=s4RRXvvHj&@GU7~;A}EVnFExmlg-4c=#tc1|4X#>}9r zH%}>y@tw`;jaQbIjvZP6W?AXDRb?->>)ZWqKcC7s&TPSBv2{0U^1IDid>+}7&DO3) zO+mL==NZwGe{ev^+T{AuCLI=vc!WE9C$H6}XwnpPnbq!}cBgT0g6R)z&Cz3YOh3^z zaj32>WR5K<(1v1LAouN)Sdgqdg#9ij9VQVS1aesOgAw1srWwct8{%%tB~NUr{#a)< zd-xMO2%IF6<cY#TgwH>bl79q_@wwqg3JE{q;o#r|^P>_BbThldiA?38Ernql#!NjT zuTaOfK=y~DYfBBI4s?7kpBrNPPaGiG$<cTZ*XYiqmJHE+VL8f&8df`<WK%>wl{q*# zIKlh~1Ox3X;1RZ!V+o6F$}pBjetJO_h{PiE&Ol^gz7~XWn*o39n2AjRHdPpz83Y(T zUEfr{JhbQwOCeh%dg6RXrr#YJL2t4^BN>A0NAOS&;l5rsLbXV^`d&_<<g*cSj|32j z_^vatK`_lhz!CgudhUfgJ$5&>kZ7d+ZtAqVGx~CG#)N(r1OtS;LcY`tgJbeAGK@hd zTdGV6`$Gssw^kXSK0>&M?TI;PNFNM@WtA^xcV;zPgK>88hFk}mW?~h~kl&ZQymZ{s z(y8@o2@+;T#)aW>x&`dVgruV&Jwl)^#KxU>)}i5~UK(<*_<e(ZZ1PB)e&2ClBvh$P zb&c98quuGgji#a4c=;h(zTkG+y7iUK`Ua~rnWUW9`oT-i^b6!OEX1JGZfMmOV!wcT zZME6qasQM=ffIRWKHB6vF_cc~`?|?gfo1LNF;q9{Bo>Eo7xbBvs1%rKg70o})5U7# z74AXj;ax;9<>lpmzu$Rh;1gWk2KyVwyM`Q`XVHEbB54v!G^vkjwVnleTI}Hunn9?B zSt>ZNTxKl&2FV30i}kJXRWJ0Nn2zlBrPxMnXgeq;0x;WZJ~3Lc&!2lly2vAhl<JEI z>pt0A_wgRdM`?9m=CmHe+78HZ=beHBMu=bVD|A)oo4?*G`4sovEt#3soYtySx?OmM z6vUPXrwzOk`__AGJqIc#q*Q#>WA%|oGwH`0?t-_yIBn{Zj_qk;l>gDbx>YsmPOPG^ z7^~Kc?%OEYX?2E@8tL{rt=C!?Z55|>njHam$ZQlJtp3}YiZ^zN-#y%N06U`u2CtQC zsQmyhE;3PkuEAP5OkgJ<o2emF{7z<Dw#69`ZaNUiWe$1BTylKRX%kdxukEUN<6LJM zmYk6n>j-{V?AAetscv)0!)t24Had_rKCFf$mpsH?MmO74ry4%p)38Nn!&?IeEey>U zykt1M&O0z1gVoCGwDsiHf0Wj^+i3R>vzP8RAXyI*{@y1Tf#`A0W%;ThhhY-InDNxp z<qBMHY$)2>p!Xv4IHf@M?it13PWHTYs^|T4O6)6>*=X%B`;(h&_v;Qf&q*o9%E}2t zW*7L!VEvqI-Qg7iF6W3$Ng*J3^O`=NQSkU_>G?+G$z7FGXBIqqLS7NTUiw(>jinf{ z0Af!ac><|H;7@u;@%RStCHY?P#UIYtnbat`@rflXVI0<i*5#?#4PLyeLXj`-IeWZ* z_Hxm)R}>u)m;GGh{9|n=oC4lGMi_;v$=KFE<cF+rhp~bkn|h_UUcf3yS3g17PYglA z;$<ZnHLolwedDtHg1F~QcHPoz-Qtk9uUUqTutr@|wD)2|5v*;bR7&!YZR&H4GY>TH zGPrvC1n*hNTk}f()(#Z`?{aqNPdCgV?;~*cdHS=O2jcZcndPF*$BGTod!+t1vNbB~ z!~Qcx?Q8cpZqwVN0fCBmm{76K40;A9c$6HXC3{)PaXr8xfV16U(oysTm|{9Z*#Yr8 z=j0%OAo)^&W#&%Q#{mMykl9qH8|G!VpK=M<j`@1^XlW648dbC-K1zfRN-Zb~w~#4v zcaSxV(mr2bNB5CElEqC16BgK`8f{%^3kn}T*VVv!IJqq@YFE)VqCT#Em8ZAE(9tP} z+kyI`tzCz9OO~`4t=Our|3q@JMkTt!b7NO{;(Zlxm|Kt4eVEmrYbCj*WN6S8URn(= zRT@Bw0jKF=^Wuz_OdEDZ6NLVQ<zZ*CsUEX&<3!7b<N8#mcCbIz1Sjn=QVmxUWs>oA z2W`fNBa#n}OV8L{L6<XTZ6`*@mE0$6;K&S*4}sh7;so=f6ATdWxUO}WCJ)a`M(r3G zUI{bfvPz=&-q0L$ox>k7dO~I_t%p0Te@{kxBhBW5t>Wp6iXR(}?ZOh2SCl^2q>=cb zn~#v5>#}rUyY=N&3$zZh`%`}Nm$M4T7AU0_tF&2Lt1<O7sxLR`S_M2LE>D-PT&%v< zu9rHTL>v)e;R+}X5{de<ScQEjTkI$jFVS*&dh|8;vQ~AeMc)BWRkBKo$1cBR?wo>$ zkF{TRxq5@{h@U<@dXrjb>Zz9RTvGJg^)<^R>KcR1Ww&%TYb#V{WxJ-JPE!r9XL-xK zIijiM8l@j5M@)_I*)7dE4J(?ACa=Km<?^|G#jOiw6+C`TNhBcg#R=d`pWkW4&Ns^{ zXLab+ZQA@MZLQ8~CmW->JVtYCi?$kX+_Kv>_1zg8N*-NXvrwXuD2?(8+1AB{zu8o~ zrcNU^*z9r1`2V-}-tSQy>DutW@%{K-?{(g@d-m))N3xAEX4hWlY=Z;NfC(aJOpZn* z5ria!1R@FqB1n@*GnyPVIp^46qO!ibXAlUS4aPQG_to~*w7RRSs%z@5C)D$RQK_ru z^_Sg>+>I{+B_89AD$Nl?DDKt=uINKZ+ePI@NSv6mDJp96)Ne#=m5$G(K9M&O!F*R> za_+D~<!{9!p%jz9Rbb*~P)}50ju=C6mo9KwA5unAG)hK+sg%zc5_{u5TZpd;bR;Rp z7gKdb@I?wamWIO095E-7Aw%#gw2Q%H3WX<AKB;5d65d}otG>~qsC2sAE|dm`Y-3P> zT4j;AjEY+kzcgY_)7Vj&_s5j_kS3i@Im0r0+>>E4?ue*bF=aM?@&)GwXWR=puSN6T z66xobu-_8m=|i2NRJz2$_$YmBI@T40*71rtY)R9QC%9dbiIm$A<hkP^e1#01a)hO( zh#^hU?g;;&e9|2LzgnFaxrAvq`j9hRlp1A<T<Z#S@^DwAeWswu7Y}e<5$s6P*+^Vx z4r`N41_?w%F(l2?#Zxg$kf#kwyoqR*^Q8`|9lKZZ{}*3e5s(E_$;@?9WOFnX><Wt9 z@qm{b)mJSMq~j};7O$CLOl1n|f^nDD-)fFpInHJ>_K-*wxN42MphL+rv^Od@hBOJ9 zTN38jLOfy81jLav9gb_w*Yvbm`~>0&yC%@83wCl1Dfz@3gF;UtoW&MfI$;ZmOc4`4 zL7vT{3A&IH>c=~@$|MAHTPh$Xk!EJJc*otI5OY1D3v^$56p8DpVtxd@{Y6_^*4VWa z5iOV8hTUbP|JXsza*EDo?vVZ}pB->{>X-5#sJFBaa?u0ZG3BjQtWBmfXVh;l5Kh_M zxoEfYgEMvkn~F5+Dz?c#+9`i^vEZ50Henv2N0=1fyk?!`CB*;OqndWYa-NIaMMW+d z7Oj)Kx?A-*0)Cve^RlG{+BKzRw$I_IUBdg@9(@hV4vo-pvEBJ0kGE+(mvHRaU8+y3 zv}=6HqRhOY0)kFwMV0d7T2p;I88{?+dQInY#FDu#Nnm|#aqU^#F~^rK4qwDCmOZ1J zHk<cIo%tli4ivf7CAXH0MWma>qqcM|II3B>Tk-Z{{$u+M4Tv2Ad7?%8{%rog4KXGZ zy0E#Fyla;VF=ICHx(;rVj$I~sZnx@_{krw81lG=(vMz{<%eRVO6OUj!_8MnH)_iTh za@l_6`^d+&MY-0S#O%xtkIC*(L{i!D^diwyJ5`_T(=5<M6Kv9UT=T_R$=iFC(^rco zte4L<Mk6Iv;q^JSn@N~=OUENW*nZVgWcperd}5n&qd$cxJ$*{cn)&=Ew#sJjSAJ4$ zI1q?fcS{~$)43+b3}utXO3AoYk`E87R#hpcE)_oVt)?=~47t1wYsI6MiJ#k}`s9Fi zgDb)0O6@9UdX0{~bKCDb>(qjqb@uHQZU1k(c2_z##Kw^&a|{A{27`iC{J-rrp3c$H zCd~(ngpY0NoVHK>*=3K8Nf>rW#%+{;U9b6OpW^)`f=6~~_r{sNo@|f9e{Q$z^-c1R z_H@3vO!)ME{h<g|M4U0HdEu<~(QQ5(<V);kUCaObx4OejI($t1-a^6Sn>s(>N_HtA zq>ktc({Aa6rJ^_XtCm$M-$z$$Rc-L6A$Ik3TFYI5RB4|a)bEKUlgAWO7K%S{rV0qa zT(5Y3vG|Qc>Xipo(^rWeTPt4~rh0w&;^I+D#FKX+e35pgIevYm!a$O<xDPJjKd?bI z=dk)(s<e}~s~JdjbfB*Dp9_UA?Nuz=rTF-gOF^gH$2Bvy$*1p-|9i3UUzgmP-faGq za>_j62i7Ew5CfT%V}Hlf>l7Pe$w-}i;u7ghM3(Ez7B$X;+dJOhrTl2MXv|jSCPd}2 zdJfEM`}--o0-wO_+_Q-He>W&MCh#>=#+~AEyY+Q6+mj&#^Scua0GYE%AN|!aW4;>) z6T4wvZE`QXigjl0x|q^~{8{}-63C<qK?l_-@YhxAXO=_j|GJRL-`&8!RP>b8(++#} zof-yMY+g2eHJ3lS$#Ps^*|}akew}=7R~&0r=_b*`D?2`u`yIs`Vl_sODPLbM{mPvl z>Q33WiSFB^-iPZ}*FNNlIbvz+%MbN%`ZUh!tF~>N+y3BbhXSE+IVBsL8>!VO&<Otj z?|H&kHDQFF%-^K_fode}u9i(g1my^lP349VtLmV9@<P$etxhS!_V(tG^70gyf3xdy zKHHb&6gALSAkS5?S@UUwRWNW(A(Jgn;-0|8ZIUr_`43mBH#=hKJQsPTPh;D<kpJK| z<w|obk&3G}3jcx3E_7~)j;j%Id5gL-#SZo|=@aU=7E3;MC9!8|D3`J$%=0?M+Bkz| zmUS|mdjei(bnMun+QMXqdP~;YGK1Q^;OvKXsyA6;i5`}2(!4gC|4&)S-<`eQUT93{ zX6<_m#Z#>bq)r0|II3ls1m9JL0{w`V-?erQ@2~Y;R|}cG8wSN}zZKlff2dNk)fP{6 zXOfMom%xb1XuO|^A5px-<p;C#XtuXMhX~4t7VsWAWtX9Fi~BG-ZDZ#GO(d92bRkX7 zH;UDWdEA|LAYS!a1xG@?Q2Sh)tyricb=FPu1<!RvW7&kRvg2P1g%fJb=LT~Ft=f-Q z$>zuCA$iwgWWJFEyd?(OG@n2As@Fb{M=a+-qjTS4E{5h(eKf+x4ckQzuT!o^v}s?U zd9~odt*TAIbPrP4H7Z}2EqJ~&7VBfehvm;Mm(BB~@B`{o+crRfdC6-Y$`7fnYb*E@ zcz!oZ9w`E%ldYcWW&8(rYPQ;ANpy0f>czQ&e|5&9eQc~=`NDkBlx91h0juSP!l8?+ z`S%|%o-E|K^L4_9R!Kh+c=ZJ)Rj-(`Nb;F0S?pz^2u+Pp&_Qajx8(eG{WpSsY0*xt z5KcO6y_jbE<H4(Ih5z$S=StY*BB66@gb#cppQ{Obx}iHwc@N8<Un5_P1aZY^=Q{p_ zd(21RuXtHAb)k5=HJKUA^|TviEEK(OOLfP?=a=*EuQ9iPQ}vF@#r*N-U3xTGp!<A| z;3X54>GJMd$a|9K3l>wBy&W$t7K}b%YQT?<r~iC~bS4atg-n+DqvAh{VDcF@kf1&~ z>mFZYfA&sr%%oC0|A+TmYKKF=AohNh7E95O_h>%YEPtuYE3mlS5o#$POGQssDrU#i z={sfK&#*;=Q{3C}^m6HI2emT}YF1u#v`11I%$sW4H(bIox3LeIx3axj`wkFEm40tm zL?(A1z|wWM{y2;@2K)8}yuYpQ{95eQLKTA<3OCCvt18<6ce8Sl+~38mhHthE2gCS% zBH`GM1k-zSGiY#z+jo2!Cr(|-bCKlwy$EkCz>n~JAv*+JN_V!%Gk!f!@K1Rth`7kU zs6y?(qzwx7-o~wxe<LZU2_9emE6#WTN;#VQ?!Do#tWNQ61^<87cdqoNx{-U}nDVv7 zlJ||#3@j^F7qU@3e%c{JhLSGV?ghvngPf1~p=d<3Uijc{-4Qkeop`_9Q@5D^&~cjx z^BS}nP-STSm(+naQ;1)ud~KIzhbbgRO-vCB#pb$MBtbxE`j@qlbYFe|ntg-^t`NOt zh^DU32+%jiqaB-s4}YsY1nH_L+buCK=90>|jj%d&XOTFdaz5{Y<5nU39d68YZ04fw zqYB|``Y4T(i*)3u@}>FW_if4Uc%%)P$M))v<v0@&EDYHe?X>yAHw;l~AeV2^eo!HN zMH5b-$!=d0vIEp(O;A8W(uO7c2OF&dPIEPa=({sTrFj{bk|3VEVwinEwRw;H^^<l* zIB<4_V2UUh?q{NhkoiV7-%s^pYCfuXVX1V6D~TyDUts97ns?@l-qc6ZLtJj@dNATK zTSqSwuai$%DEZJ9M@YAB7%`B46KydhGqG^%D*pY4Oy^MfA{|DK&Lz?>U8(L~I$YN| zWqHS3Z>pHT$tc2gMJpO5dR-r*`;nrQi8Ux+Tqv4`i8~Rwj2Qm=4CSuCnCX#QmX)&R zxQ6nB9hRl@_~Wm5%oya!h!|SXU8U6B!QeThbFM}mGW|DM*fKroxN@8Lab(k>SmX{E z3I$ug5&UDP?hwkCAw?<wX@qm`%R$YH7p<PlyT8U%Yl(KqY|uU4Uu(Gx%Dk-oaIxg8 z5XI#tSSA?X>IQcXip}$oN2enc&nJyYUa(a9afe@O30*zXIc2_hx{vD7y0$D5zMw;< zJmdU5n$7#<Z#6l@(eRbk!pUu32b}Ehjx)l&Krn?uf&MK4!&ouP)TzSbYHl|o@(+bu zmW7%Y@E-=LEESDjE*e|PQ~A`LqLyLt<!OnV2P5#E>Xuxl&+0zBh<9I&`9cxNmymfr z)01Tjc`DMVd~vbl3r7NBstWmZ;Hcu&C6ed&YiI7)d|Glgo7WMraQX@=)?wSXy<<`Z ze^kA>r9>xLIu#UJc5IeDHD55{q?He^FlP9Tu&>%2hZgehJ772s3c2Mg!NzmdFk_zJ zc||B(K)6P>aE(rap(5vNTVNBmD(M91$Aal@=+>YRSNSg)Lz0X7nHxGQ)IkY?|ASy0 zu>f9*35jcCb}*lC9Fk9-C3ry{rs$Z2OLfCB$6z-@H*4O<G-`}71DR5MOq@s4{keXX zb=^Gvn9Cj$I;6l&>(eWQuWBQ4oI~**gRb0vNf#8!ox9daUc2hz8G~&c!GtZ49_YAX zmt@RF)y60dOKg8E46eE#(^H)8%?vjcw4t+aso;&i;L>+z2iZhdRmb?{vN@h4RD6h{ z%vENd;6?O9p3RmY!Je*kO#7{P)MoY87}B(42cp6DwSxPQvl3~wIxWlQ@}Cm;okh+Q z7k6rQh@af7-i9n*aOm1DeqytFN0J%n$>iJg$XonkXE-{L?Y;sc6uhhoM+?JmDSwCp zTM!$*UM`z0vo&n%oZaP9?vcIJVr#3BzjDBM3X5p?S*+wgP;EX}<m7{^-yn;n;W*4= z(1j)<@-3oAw`=yKnZX`5d#TiQhFI1gKrWyAAVwevZ5E$C26^!@2v5j>+<|FYFj*Y% zfaarNly?7KLt`$7sr<q!{sRY%r!#CXGopTo(Lu#D-%8LG+hR1g0*Hp%*9jgN?h2$z zdy4OKb!Q4RlZE3(UFYQGP@krHyXinJM5PXhN<IBqh)SC=ZZCPvL%9KwX~8@`>fnVc zb>yJL8pY(?Q(AebFc^9=y&YVBxhF2VExmN)uzcbQ*}^~ycHTUjavhZabGhWD1DaV? z>QDE<EmJ#R5%l+G@~xVw%jHY_5hzY4f%!7{t)<-1^sbUGflRD-e7i*O=nmx<hqPZn z6Ii90-eftEWd=IBkhgS()YY_2_N6|k1IM4Y@*0(|?bSCx5zW$nXuwlBkx2Zf5KL(@ zrGxSGwA1d}x5V5?7<1HV9Znc?$+M>v8u?C=%FPL29<Nd_NKxGOhC9?HoId-4Zu(qk zLIQ#7zbniU(GVX$*WLP~42uPOk&5egaS6v(A)Db4@{3@Z2_E7slUT71KtmD<UR@>l z?@g**X#`zo;UP1Ki#}h|V&4DTsjJH{y(0*w*X~3{OUO5yp=RmLz&EKk&vK=KKj^r5 zk97P7<)#$p#slffUd5$)Tmd@Cmdq!vl6(XG7|yu{fD1FowbgxI^I3h@Whl@JY!7G2 zXJOR!#L`f1V6Wd$CT^;fj6!-VsNM9O`epQGj}e-aWK_A8%V)fg&LEkia+`?Df{cKS zMLOE3cxkcpQ+ph)J8<>U?v#w)qTY$yatuw;6z9;)_CO6~c6_@{xdFB9$y|Fc8fbIZ zLP2!gCWBUo<1p<9$nh)*cna5NE<Dbu9A8-?`OKZ{@5>EF!fhJ`f7=8;$RP0-R{f33 z`Tu~Donm^~8(r6DaUEL3djOII=bFW&POIOYD|kT`3ir{`TKSY^@Y_zpo)5XL&+Od4 zkoWK@yBu{eyUOP>bOp<qaK<8UF=v=b7%HV>H>$S5X)4Fu#Pl#Dx9LA!BYkU&bm}>` zE*%x`ki5LBbNUAP0#1vS?Gc&gBR>$P<H2mdtZVr^!9<Zi(2vm9nI3}!ve%={PIWh@ zbwpyZQAm-=u$&=h4)1{zRyiu)%jDXPvuAT3!q!a%_am*Gd_{tWM$~so`!N!sw)yOX zxqgXx(LBMk(qIH{M7NKe^ewJ~3waNmvMaf+pwnkG@5~iE-w}-TF|pdt$;&$Ca$Ujs zW%ULF7gh@%IAA(efS3|!StWSjpy_lbGgzSTm0w&e{lb+h7Sdd5yEXC^7?W7Ij98e$ zm6$%KhCue71?lz*L-CMgljx!KiVYx!5a-Rvu`Kv6!*)|)8MMk6y=W{nU8SE1yu-6a zCL_?#T-ou(5#{uColAqMo}S!**LMo3!E3rM_GbqKhIzC2qXfPP1U{&R;q#Jb3*Ags zXqdl3^4_=7cbXiX*_d`m$16MKpTiF1O6Kxxh9(5_hawnGh{-VLO;Ij{W$hgx7;JfY z_cVraU%5pMU5l6es@VHK=RjD@72<#D0t!sucWwj}6H&!x;e9LR%R;3Y{Mza@(+!L3 z%(f@s#ak$?0U^+wQoS`-F!7}2w9a?=qH+6Wr#w$3T8*2|SdMAEtqtmrmWp1N20aD1 z`RcxDww=~^&(|v6Tqc>O3I(tvzwuJ0kct}*$fwNaJzAyRrSi8cJ?C3ZmB$P<5xO7A z?N{>ux=yi3;g`qL-A+#}5{}hz>M~FiTVU7=+7D*(p6v{UAm3bH*T*CLP2xA?H<sb> z>`I?ef3~jU%Qk1L%6+^_{?anZhl)_BmyXuRCqe&UhqqrA#+VJW+8#LTRAWxp+BVK= zyZ@|12^~lvaB+G2e^=`2!LN9=Cv<)p?=PE_E0lgkI7yWSqjI;@b-vMH<$+qRw-2+) zCH+_P1rKdeF6r=GIidM%q2Oucjn0l(gF}zV#`HVIk1vwG$8!n&NeWH@NL@Tn`0q=O zO9IP|Rl?ERRU18U3b?VDK=ZL0_-ujT;ccpAGS8Lc>gfvw&zy70yE(hm$;Ivejm%>i zwvTfVr;{hR3}deuu)Jrf;d4l41MnW6+xFK6s}Rlf2U}M1{(FORi9FC5O{Q7qdIhl> z&orywoz?zdo0MD9nIU)J_;TL=R0v)Y`#qQ(nFQPio?Iqd5J>mJSaC-6`q#Xt&)84d zBmM%NZ0!8kT;aQ2u<7Ue4bEM&+x~Xk)&Ucp)7P|||M#`>3c084l;(>?f(gegm#~(n z!jg@G`&Y`o;@O&xC}u9@|AS-7R5#2jCzUUK%}1KMGxmswy|pVonU4g?$`vxt<tFtf z=!zCcC)X9e6N}savfl`=Yjik7u{_`K^^Ep00>1~_(0GPfGuy`sd~Vby$bIGi*`=?8 zek_d@75~0f@)=UEESOBdHEVcu^`xSTozig&gp(W1wF+0m4#_jCWM6m1(}UR}WWky3 z6U2UB$$uo5NeAi`FU}ME>zut=>uYT`Z0ET(kfeJ+75aIzc>ldf^sYLLL`tv+WFR}v z<UK731P1bhCf9*Qynk$0tylT^65HY9hB{v=+lPBJpUr6huk|GhS;T*Owczh_g;RK5 zTk+26FbKii(Kf@|ouRi$xD;f!Z|#Sj|Er4uL?`27l=bKKYCeW??6)Bp_#=%vZ9b4? zupnmcRBvGD`vRBtt3GORh%z^LE0d?<ZRQnKx=rpRw;#JSR`T(fsoAh}kNV>(&Fm&q zoh=s0)0E7*x3od>(>nbwQ#gRtE1Ql8y0&tu)Ky;`HSV{;35vzCox1tG`Do1CYQp|X zn5;hAubES?uk7^cFmJHwAY6X;sXscX+a5^e_0HY9)eDVLPEEwQcP4%3^mA)W2f`GL zJvUn6@||rkRYjn78vf330oJ=t99GXjZuTnm+%uLYcRT@|Qaq-q*L;G!UJN!vFto_J zcCTi&BhDZhk;uBPbWXuMV09netC}GT+EICi)A;!=nb)9J)%r?bGE-(^$Xn^SzDc*% z6pQ7Cmy>Ks+S@4^w?nnD#k_X6>Z5AiHg&*`?qx@QH~2BrDY<Rm0S$7_uP{WzP~W=) zyaw$oRQP~qS({Ukpz^s9YO9jg3p%B-JJnlS%xh5cVf_wm(3yo+lg%4l)w@++D?;9q zKLtLZ^@MgtLsw&x9bgmJ&JzrDeOYAR+KoLW(I|Fz(kcIC^V%x)hX-|N7n>bHFo<-( zx2)Zxo~sIZdvkrx;0276Gqy`C++{LF_`g-Frnfl7czc$~*}Tm)+AnsizT|njGD*iV z?U%=_Cy|2<-nw$z<~^F_U9mWNGD}lRN9{q)rx-9b`faL!C4-KKS1~tcHdm=Xt2OLZ zxi2?rXPmaTQi$=y<Sd@khczhqE56528c5f=f{LlPNyb)cHlHhXGD<6TMGsW0Mpx}_ z)htEOn@3k*a|<22WSW0aUl~jn^GvLjJKq&d<uS{5d5-T<ecs`Ba=SQ7<F-ok(SF?) zM<SISCKz~FaOQX6_~XXIjk>RPt7e?)I^j>?dN)gjFBs<?((et!-@DXx@Xn7!G$-{7 z_o_dt(#$_)Zg9n7kYLacT1Qo->eH((MUHc)M1;gpi*Zi1p(>otbD97usjyccz^_LA z#bNCxsYgvQd9=2}vT2ukmdx+!&GmbOt<~zOC#~n{5kf5?m_HW5loVx5AfEp6yl3of zE6R{T`5RHB+?;eVR0=OP_O~FIrJ^U0xG<86Wk-ktcSfp%hd<ks`%bYLrcmCrc;gDE zj6%vnSO~iFoPLbu*6=vTM8FoIFUoU;fJj*G2JSZQV(tejT+*$TODhgPUgjYLa=|%D zD3te;<vAq-JCYRf6nkqc@KoXEi%jXx?%Z&NOOrJ<TxXCAr|E(+skC2}x#gVGfN^ci zlpdi<<zK56%iQvo!pQ1D-09*}HxHk2DmfRpYfUSB-=csibrjcE8SbU@$O;#3Zgsh2 zqjT>9-XqN}?TC`|rIN2#m>uTwa`W+Cin?)LYX5MTQa87Y`Mz&d?u6?q!QtCbB=?nb z*S<LJES3uCF7+6ly;dN_jfNXv@Y+)&2Fy*R<*)rIU+RH8^L-^>H(!~Y`{r|9p&$6M zuDITiYh#AG>HOxee4`G9>%$)Wl&4dtRj<Ln*#S2*ZqH+B@Uxi_4ZmsNah=8u`;kAB z@@$(gUC%Q&)v7RD=S-;y-6PsUQ8zw8mcI295Q6z71S641@OtWQ0SjG)C-KrT=lGi2 zA{ZneJE%^Uo8w`$YoyQKL5H!CfniolUeO2C_+k78ol%}bzjL*8{d+IoeE;<;H1!h~ zf9Tae`1tknpR5@51Mm9YYTSI~=bV4HRyUP4;vXzGAF1D*D}3D;O>tWCpXh{J%lx5! z<8)S3qDl42JkdMmXqwZTeP5^jP&4TtYub-|sav0-Z!Q1VzwSr6_eV-DcSVj)K<PJ6 z^u9Sp{ia>PGB8HAe<QeWhxR}Ux<>kEjm95o;Ez80gTIBJ@umKVfFoHv9tXj+w6y$Z z5ez<29$xd>F#L=s{#uVRxT3)Zb745Yi#FDZ=*TPYw1vNvk?dKi=Sqey{%J<me=cY` z9k+)%Od$idsnU12<d`iaHHVFNy5v7!CsXOTEhI6AO>lUjf7{Q=#u83LK!ErHP)(EZ zO$g@aB2yYI>jZ&O)wW+3KL#mYrqnyt;cGEt+Pw#t+-VmwM1@%*9DS~<Hp>*r`2Mp@ zfB0B=ra=EDCBrO{C+m!ISLE+TSEM<UBwQS67U!hj3BmjVWEm=+qQ2qzA&C46IR-w; zFCTaLnVxbeveUM;i|?ol*$N5RWkPdT70dZ0u)qJ>{1?dPze13|9ohfSq&FZSAO!Ot zK`>NFQI<?oTf{*a{Ga}X9D|trpPch$dpH-e{(+u@`mgRtsIg(q*qBAau}#JU$rQKi z<u1}l+0@xvGAD9@LrM!b1~&gpc@f8%rhDPu^Fs?dx^y%9OBiwZkzXUC-OjUr%9VS` z%uC;m)pU9B-pd*JZ~t|rVRHv-K5X&sDcjh8{)2GkD6qXO(FYKMxeG{_<QQP5G>Dxs zPu2bczcPeXUeX>a_ZZuq*sgr@HZoM+Y}FT!!v8PXYZ)pF@g;p%W)qADI26&TL|1?> z_ckkht-6598;hWa*p%<AZpME7Za8-`>6jU@frI)K#eBc&BI#|`eRV*;Cz#5z-zQk0 zISdyL7J;~!G&hUk5ziUz7Y7YhA?}f1M2Cnl>pG?V{E*>bIF)05Ry)(2w-`37l+H_) z$z89^?RO$}`CKpjj<XAsPTGP3O+X$?G4u~s;kqU*eLFS4QX`r4>wT@}u#LK10h(b_ zQA?m*6Hvrbw`n!u8kl3clX0)ccR}VorwypWiR8}|VHt`IM@>rKWp^z6Lpta5uv!c& zsx(oH-5UfW7K?MaT>5uHhE8MD*Q>*mOX-b&z6;r|&P2H_!Hi{H#}qD*{%!AfLA0^8 z(w8OfOIaFW;F-J90V&v|vJ|6n)K$t}-_Y^Fe)Wt>`J0RRPp;{h=ZN=2f)}yLZkO(8 zhQ%(nGmG2*t5SEAqI#&(!`yE$U7oGcjom&!_9Xswx4wa<yXoQUBLRQlSj?{R@tm;$ z<PSXJ^))Z${dK?LBun?u-?^XqzCwmST({eY4TgU`XgvF!XK#9{RLHfr2O>I^PZUVR zIoDu{jYh3%AKw)V(l>gW`o5Q5zw(3i!TjZqXjMLOFp*#=>PJiao|3<N+sHREbRilR zt>gb~Jt82akwxu$>q9fCge@S&v>OKrefLd2+(oz46P6@{WB2T<f2p_daen>!_qK%^ z(S+|dk7c?8flI5fQ&qJcHK&JPG~(tTYWR11kIK+lqq}jt^u-ObX$TtqjqsHQ^F;)) z`|fBQQF8erlcmzl>bGa`CU*t{Ib>uQ(Sai#fOD-^=WDY@-1J@g0p6Q{&s{7QBLq|W z4N!3Xq*_dow@<jBF8fK7OgU(OlbI^F#gyQ!kc?j`o^X36{jqQp*ed^A=}~6r0!2}G zsqx4<OwoMP5~PRPr`zX>CGt!!m5doZ&F8vKCg>iSdC5HfM1j{?V2jDP+Z2>~;$dz< zjVNDqf#n<~uyKq<Njat<HX@+YB(cw3M7%^gn@%TFH@^$ld4@T&d6T4mKXRX7tt~Xp zs}MY|3?;g`4GIY8lNqKxY+Wgq%FkwK&Z2uuy<z6%8)nTHzM>1Ki=3(?k2g}+=6X)} z!+DCEGC*Uw(h@g|y^)QIR~Lvsv_uiw3>*H7m-S!H=KZrX5XNq}5=Z7s)Lwom-p-WE zU?CV#@H<9k6o^@<WbW45(78f7dbIN;?3u8~a@ZkKda976^QHdDm5TlDoKK@<mfH`A zk~5{|=gQTlxqn`}QsP1;nL<huu`BB5Htl>*eNrsb7Y~cq3m)38IhdyV=yd94YR?S! zPYSawTPn8Px(v5RHCJkNh8`x%Xv}I1%1cblayQ?oWWMydQ{^&;$3TwzD`d*=j9a)o z$hua}<v-El)a1EQf%~&eshm=MQrADwHJ(OFms0ucaIMOnK$rT{<2%1b@Zb*hj!+Ux zkDNDbaz;J3j7A*PjlRv6s?C-Zs+1?JG=~g{6wTb!z1dQ&@U5vL)2Fg-ncMz&i_?IB zY=kEW!Q7$lpwbwImOx^4yB`FDcx68l6SI`N%-#{mmfIo?9)khqHhh$yS|WOUwRG}P zeWfGp<tB@}#x7~>Bq-|al?!-?l-xj5gE^Wluj4Se=djT_;W;dyyh2vtL1cYS{WYt` zScC1yd8QbRnp=$<_b5L?#+Mz6FC_tIK7~vzlUB(WMW`Vvs;*T{KWb_WCE4=a!6}fE z{tJc$-ymwI_~|X3@1M5uvdQ2f+2oCil|1W_{i+YK2m6Xs&UyJ^mPsXKwu4p5k9I0Q zK4xwTCFv1jK}owAx9yibyI!&6f~j(^^8MYaxjdH=vnBSHtL>FL6kjQWZs<B95!GSk zd&jL;VsYCs)d#D@V^&E2xkLFS&%wKBSh7YkZkc%E*3PMCZM-5o6b@_78CLC9PODT- zZ!jKqMq`**v*{E<8|>F^5ZF%Csy{`dnp2i@u~e3(uK$*D(Wv^UYU)byn3Y`NpYc4# zZg#*Il%3QqsZ>terTnbPbljIn-NZ3qh*Yq}u;74p{RPvWeX41@R5M%c{A4<tWeQI3 z8AL-kW2!!?{%ntS6Ltslx|U&|xi66~Qi)5ZB?q)ygtlXc)t~HAeSX&3O3}S`@2Q=g zFD?^3u~zo#9`&lOXacDaho!x|-FtGUVp^M9n`ID=({V!kd9`6*2sx+etj&9&R{iBJ zCBEa-3l3S1=}SiS4eHODtmi3aARW~mReyTiTz|D|*B<4xJ?i-)kC96n3ArH|LW+ky z%J+Av=bbYjs#bl_Y!^VD81b1hnS{5t^SMQm>DE{#n+l382M(yd*roaaVFE5Yq#3%W z%hm9$VwwO^0FYpl;j&~_DyB<)HoLF2UQ@A4`N3}0r^if<fh1d`bM3mBvv?1lvMKtq zLl_Sng>d{-h(&Ez%v<-UFd9GDp`6b5+VUyiNeoy0j%LI9ZxtVky-v6P{9e_kBA=y~ z?X!AM?p1!?Y_319owrjttwz7o8ja`aG|#kZgJj|o(fG~sw;Rk2v2>9pTtNutP9e|j z<4!}AncnP1++{eJP5J>BvKNoJoat)`$C@3Rf2|AIQ_IDp7Yj%4Re!GXNmHq8Y1Mx> zX*HLMA#2l^r5#_{<5+hyw<tHDzgi)9;IQdj0m(c{x~#qW<2juBukMhHT_S$(it~yg zz*GB0kyH)}wB`H<8*HLPOt)M5uN~@b&RF8QqL15%NYS#cb&L3q95Ng-U@;z#yM4{8 zg%7Whe%NGgkU48t3;woNu`WXQfp|`-KVB*MSn3v^*M2&iH}0y>1m}Vq`Z1>4;b~ea ze0ZH~W{dTl%6W97=;4KukGi6{9x8;$kMqSJSfgObKAmmz?6wC^JCq0&(4zaaLh#fX z+Zj_(7Kn$XU8@)HA4PC=V^Hjg$6el*O`_53JLfBW(#yt0^La=~P>Trd$*5wR_|f@- z7Y=Ios$I>M(lHgH_e^0fHo&k-hoMrTbD9q;1QXBNn~lMaNRsYy9bGLPwN<%B<C8Y) zzC`k_8dEb%7q62f&V#|WwSxN>i{3h6KB4uT-XR?|Pxz)f6z^km7j&P_Zhvq~=Ss2r ziZN&nggQ0||Gr7JGsO(W!;;OShZhK6tkxY+yH0PDJibse-4W}hqKZATiOZxPN<2bi zP!Ua1!z&f6|CtNgX|woKI)lNU%z(?=gxF;VjA!s!t*#@hgkuir4;TUxjlazq4MK!1 zWgGk7Mys$VgM>GG7xMqUQatsH<+RAYb8-7$zSSO}GJ{mYQLlJok?6%sj;kHE{Tsw% z=I|$6cAIi^Zp0Akf!1`j;J#hjY8w0<>NsQACG$#Twp}aue?e627&V08n21+)+O965 z%$Ru>GL@;eg%i=Xu6<W*7Yx3OyE-P!5xlI3gnQT?ofUag{;^#8W~)O&Q^gX;6oUa_ zrSzG_;x{ikE*JuQwO<fQX58MB%lUs>B7XOb<pe%KC?0LmzV|h9=Y*oYZ05WMndlzd zp<FBTh%e~p&T0GGLDR`hw%6dOS}u67QoBtTlvu(x$lMg+3PLb<5ExL9mP7GWohtOs zNf$(oeRWtI&9Zlby9Rd&?#>e2-Gc=8;Ig<cF2Oap2Zs>cgDeCK?iL6VU~#u^$$RcO z-*fNtN&Po7HC<iRJ>9?R>Z#5=U5`4!{N;W8jo)yO{WsA;CHL5437ZA;TU?V-V<zIp zf~~%DLs{H%I5@x0ZOfH!SqLw$euQ-d&SZ?6vdXVkgfJl~pYNXL;oWyUW*P;T!~9|Y zNSUJAh6z;4W)Jv)7Yl57)MLYi`E^b8?P(>fFn!6M0Mot8(EMFup-%%pCw|$C1Qi~L z@l33kJwz9>dKBJ@2jWE9$DC3Ky(#%}tPF1@W~LuoOy*aMcxva+<izZ?#ddq4M<*(A zB4P5ZhX=C0C1=J#zbK);%$d-MT<4Q*H!tAZ4wAU=3g4e7F<1UEk00!1wrIrUB5}Ec zvu{1_#Sf|>Ac8~7)uVc7W=aw3#|DIF$E()tWgJBBVj~imiZvrqEaWdm7He36RpQ=! zLeE%1Mcy?UZgKz7*sHY}E(IUVjwe#;1^@0y;R3?~+f667KmP#FE@arKsu8w;xiV2) z3UzGu6CS69>|Pwx&6YlCq$ywqY^CBtb!QA(B;L&PQ~*~cYA+Ni@h{IO6U{8~zdy;f zcd=FfJlOQ{^>aO7S{?;EamxzsWW9KaxGVxEF>b6-mf77MjXTBKk>M1}hK_7Dt%z85 zN?4jMCR^t`^f?6{w$uK#x1#ka*a%3i)vtz0?OMpHbyu}xXu-)L#X#F66cUT@oiW`& z9~cAn^<$jF!Vh5Aw4e3oLyXck*ny0ysS*?Q<$hqxI#Af=rePsg3sx9aOc<}3Es2<c zPAP0?QI&|W!S9Rh#kZgRtcJFQJ3^mzW2Oaqt_)@Z+O+P<c@eakAW~|ZYX(1bSo1nG z_$G3K05O)D^5vEXOq+e@aOSqkW%=JNachWgQ&1*HxB~Nai9ZPv7je#)=JBeY04pU^ ztr1ZSzS+<6otkIOE@L-jMteA>ziU+={;fDr=6R>e5(4LBJ7kT04m|LC%1|U{9;CP4 z?baKUJF$M7VUJHV@GQolXE}9c@=MIx`41yMVVIj`jk^-D2UV7@;DS)kCBd1_`-=7F zMN>9<=O+Bg<dJ-uB;{`VO3$!P7P>W_b0Hp_?!ai<$-wZA(08@)Rufsz8Nt-QO%Tn% zY!`2R8<2O!7rE5}!=^)gmYd)^?ho2)EHb+;8nYUJD*<XEmL(Uf=!MppgmKn;RO5aw zn!$QZbB#KHCz62*lO)Z4O-{DZ6WiObCKa_2j0%G06Votx@o@)<>z?&qI8z)nwFv2L zx({)5Zz8H~EY$Cdx8^-+P)e}AR1l(%V0i_?PSH&b!MDO}&p?j8M+=btIt$mfwbNy5 z0rZC<Uhk0zBEm5tvZ|F>@VNez(OC5cteYAM#$S7J!;vXD0-L9O&4`{Uw8L@X0iODg zS1_l(rAW(QYLftTu6SO3ub)fCPQ;RU{!j1wL&1+|tI0)N4&i!kx428f@12>lv18*Z z;D-vW94*T?%chWKw<`}G=D)^e=JRCK?tS@K3p_+wToH2}3a@*3h)~rPI#a?7s8|Gk zlfPuLnIatnYPvuS9uj#!A6Qb^YO!vMy5j72a7m(!EO|fFSF@R?jek1y*2*7=f=T31 zPBKR%Vx#}A3pB)Pwcd*z_69cGl*5Bue0i3u5|JF^B7~ZwDb_2V@ZDUvVnct%J82#( zXbhS47)<$VQ2FWMmYRw8tF;EU`#9l@AgN3VPlWaJ=gJJ79T=0j(q%bI4z%f>Me(Mw zs>M#Ou6$W_9(Ub~yju<X&gfSQdrOR#3mXHkitHzz-tJMpk;xZN#+4?@AZop^VzJ~o z-U7_rnCvUvaUIruy;JU(Rp#9eWYHKhX*GA#X5V-(x0{FuQb=Eio{#e;VJi{Hl`SQ( z&!dYd&o`-FX8(0<G{3jrnu_8U6<``VGR=YQ&z*jMvE;}UW%&bVUuRqwLBxU)wEU`g z*M>&{X$Sl&hTc8~;`~(|_wEjKJs?95N6ax+gjhxLw%%0|$NO03wi|o;cSMQ_Wol}6 zVIYqeeA{Z{)cjTDdykgo$4TemlabQE+8uGXq}XgV<s8;my$dJ_m>MOs0`Sbtzu56t zay8#R>T=IDIby!Sz$BG1;%al2x$h<Ib&Fidl_eAzFGV?!o814XPvuwGs~gyIzFzqo zb@dd@m%F!4YZ4;Trgd_nu1I3tSr&tF%}MK7&TBmS6Y1`tCQ-Cmf{#6c)Va-;fa+sJ zR~z#}`T2RfM9x*6U|R81^P7Rd?F{KxF%pT8w2ZXzP2qsG0`^i6gLO&O_pH5r>$VcQ zNTdw6OX0(y(T)nxGq4>|EBdB!fKB$&?1=_kZI+TCPaX5i4o|lsA~|6>TB}sLud$v6 ztE8}kb%>~FjYRc&d-?)?3@n#df+17eK*q1~g_KE+%1dUWvCny6&>qopf-Nb)F`k+R z$e9;Mq0?nR<tK?7Yr$ZZk&GhpJirTzz#y6cB}XfD&o#j^vXHPIttw%oWZxFf^A<2b z%E~1K7*-hkY|5I5sTF}Y?}lgTXR89@ae2RMc>-LuPNy{X)0+rUiOi(HeRkCDX^M;Y zahyu%7U5{)OvUN7$F{KPb=eN@C}IF?d)>KX_jZl-B@tv(%bwzHUW04MQ&Wo`68Zr1 zh*;i)=s!$v&0Fk+XY#+=T^c-Xjd}1kr2?mg{rXl~LDteDI%#e7N~U|%T2+<#6w~wd zAB(9CzZpC%S*EAO-6v8Ktq+k+m`3yaVANtg9e^%Z9QU_vr*GeJTe$OA;VM^f^3f)F z*Sm;BO6|G-&V-<)vfrXuQHkbgbjI}qe*{t7hU_8@8n}Ew%|1=C6i8N@-1&YYMpE1J z4wfHgFDKF8BzVuzUm&cX%X;>hCCSewT0$qd!#d5MY%9&f??~lB3MRc9`<=d}&2}~| zvNUudjU@S`jt5t@_+rf~1n}*m;<%b_m(#p$1xryORLjKq6>Jz9MG;nkE2AvEfDAic zu({C!_5Dqqhw#Lt8M^*v%S5a6Bb&y^nE9)<VTbT&!47Ded8bQgbi*q7^vmqJDcVxc zYrj5H+Ekp|cmCOIc6?S?^%D_1cw<ZPiDSP*m4k?WP;h00cqnNcA=uF7&WAH3!xC5D z$9ouB%CcBZCh8GKX>?`u<*jU9|B}v#s`-=H;i?d^j>wt-_H-<Hr8hkhG<sNbC;iZU zILj+>I8;I;+d~+-K7ro$9VWH2Fi$YzdVvud*${U!>NE)Axx7y#;lyeS{YK;qygZfC zHCbwVf6;#y$6j4;;K}4%e0~d`^l=Ue8nWqMExfnEc=nd&i2TT$j7Fy2@lN(+0wYf} zPXSq(Iia_14#+p+ELgB>?)~AjDK0jf^0v(H9k~jx5ThykVLVWS`7({(cr~-t`Z{O5 z#6u}vhE;N+;+^36ttyY+4Q1-ZC%QL)(aN3ECv`i(L@A>E8m?U!rh}G!5C`IO<WV6# zpLkAKbMdC4nwlOT<>@c@vYK=<Exoz)@kV$LO8g`TY~d#DPE>U8cI07NT^#LH25B<Q zz>Jn|qvS)s{s4+GPxUt)r$i-P2A?8a`*bv7{~so#>RN6RTOh#)mvn<t^3TH6K6YI< zhLW_a$|b7hYfzMk*|9u!^*KjQ`i_#JHT`J!z-kOXcK0?r(?ZF1wNvF`kN<4I$cr-W zK?$g0qtBBr`X`zoV8dZZIK<B}N=w{ywN2>+3(ePrvgMCnCwMM;<Ja@y``?3Vw)w@l zzE-(56}&(0VADP2z%_~N!SMx?iwkCg1koYvM2+SXD7`ekKzE*5H|^`;`3^+l(ewr_ zPfB|(#A-rA9pKQ?Z3he1kn5BAt&}|7)>ojWWVzgKa}qdRL3BS_Eb<~xL$wl1$<{5) z^fukSI&;i-8#JBJhe;(b0KytIl-e)DV1HGWuaWCKMWzfcw+EG^_BK8KiFU%vgX}$c z$?jfMpJ6r+i!Lq-Rw^`}L^`g1oTdui`npzoDIKz}h2Tasa;x^Fo+hhC-d}h}cS$f3 zx-~bl28~*FRi2-dkr_9)UMj7$$^xuX{XSBL(FT{U;$*X5L$^I-dHS+Dri-*|y=&FD z9dPs>&`u}6t6xo;v;*jbO~V35gAjLP*3}XFSln}@HiuHMJ*)Moz05)mSI<3&@EWK_ zw)t}^3)q-{>g8@82zEqC<S|FQwf^q*{(M$rvfm*Z^O~V+rE<XpLw0dfTkrwQF{z`F zXSB@epa>=r0+dmIbg3?&!;-~MHe+CU#4o_2Wrt|8)o8OCQu*05*RY}Us&GwJJ^3X% zU+jz%NjMQ0)ZCVq#K5UKrgR7P(uFOU0?GC0bL&dC8gtIB=M>k49a@pFU+029MW^q^ zlzrw{cD<@F#Opx(OnDLeGhQ5PlonK`JxzcNw%^ZYyfR}n)Y50xi5aX(?R>0$SiK~p zF!+XA4m=G<8r%oJ<IQ2OP3vmaz8Y*AFF$x&3z>%iU4;yM8negt#cevjzOh$9%Yx&5 zvZLA!OJy#VoF6yMGL6obWId*eB!F)cB~2?(O_QfPe(&^6Hfi*PFeEoR+GBPIx~;~? zs;scksMEG{Z}{>@W5I<OQ`HK+zeACqttI{Zwv`=;GNu#=bO}OC^d&6DLr0lICSR#3 z2a&U+tC-;q8*JMBQTsL|7Utzq<n_S+mH(P?_x+Fc50qXPHuIJqEgvXRrV0PJSZjk@ z-cDsgq?~wIp71B*`!%o1-&3fw>$Cb;RQs9g@VqziVO=waI-`bkIW?&Ct|xy~5LCa2 z>QfSiX^o*THGU|WV8ibo^2`J%F%z81IwW*9e>gp*+i(BmtfoYHU_kyvCsdN0E>=)+ zW0vj*u`COZ>t%zNFvL~B7x%i+wOzhyJ=$Y<dtnZ^ulZf*^5HjyeNtzm;nfbpBK;8? zuf;Ex)Y-)=RsxZx(ydQhhSpo<q}XOiy$@{3T=dgHPHN9mT-e}e4J`p|<UxsGT`WYP z@unB`YYOtc{CdC+kBZzze`fo$S9LGj9t+HlfP_M4w;`;*q}cu^nR;%@#FH#oYN4jA zlEs@wH_WB6a*?S;wSFr!q;CO<G@!?%mPOA;1c3DIcR-Hub`-p<#z#Py*lTRNI>`e9 zXc$e3D^ive+X?!g@;(Z4tT_6G$(#8;mekk}AsW@)h7><Tw@j|FVI)6C(|7CyE#RWJ zNuo4%ui{@x$m-;3oO%TIf4N3==FIG2?uXdaeJhEJ0(Tg`PMllcj0aPS(BV>{UZWH+ z6K^yzl<FB1Vm8@5Y8Y2-y9JlwV1KA9VxECVMtSb1Q<lu<&WKz;V^sHI+2KPB)$c|l zk!5h~qd7wU2z>I$F(&U(fFtjufkZIC77Zx$hVYig6nxR%YG1;01qE+dMwAO;?X2M_ z&?=CasYTTBQZ|ONMv_RqmFU~e_DmM7;)F{numDZlm)ZpOqs5CziV11t=n~fh1#Ec{ zLU$5a6C?Ft&3yZ_RMOY*IQJhMh(&#n{|NA8#`WjObR*>qI)o94uwMqE1s9Hq)3m|l zvB<j1nzPx-Sz_*~RFtyet8&ZaGZia#in|FZPNnpGs{-+tF0xrGR<QaJgc#eP`+l*Q zB2OU>S&~b-|2o-nza+OYWA_CxpII8TK=^YYd1X-7KfjM8rWD6TR;_$XrhEoBEIR4_ zmwXL(!zP0a4Zzp}^L~$~*xAubpfDHsaY4->{m-RAdZ{>ZnYI&KlAjd{e6@Jj96RP< zy*GV2+qEVa1kJ<DZ;3jWr@j{&BsSmssgMQ3S#Km%7xEdkwg1RUvE&(zwI@EMq22j2 zwMq{tTL#@&Dq4O=Xm=$LNIa$cdS%$Tdo#;%<4K?C(@v8fooojkavUS4V^{HU+ifDx z8{o?EJH0M$|D*Aw9-S_~qU^JV4g1oILTpzJ+ZKk%&tAxUAAa!xhC5*_xqbu82YVOV zpHMz$l_iyUi+<<|?&53RV63Bn3>PcDRWqnOU)d_(9utn7T9|6kt2u5#C{c88H(DCH zr_vM~xE@ei^D3Co3u5NIGhKLdozuMXrO$KRsm-lrbH%Dp!@=pPr{q|BP0`D(IlbGw z>w#=!eNVsat!#F>BU@wS^lLyTYs4(GmjU2UT2X~+T9i@CwpIbRqJKt%j|${{M`y!% z5$jh~wgu@0le8}N&M8ku|1OQ%(wc6|{ymBIh0X8{M+mOwJc5#UN}BBI5c^X|k&8vT zgf$6@f!^5j^83p!+B4bdX1|=XklTY!ak*dQRD_9gDZ>^?aB$Dq`Fm0)Ngr=b{Y&_N zr0iUZY9DFFPO#g}jMr)eb{Rija&C#6|Aakb;HSw6Z81^vt+nwZ>(Wj7!1G{gi$VU? zXM$WU@NK`0x-J+gKvAqBPKr7LlY$OTQq1|9zI}zl_U!SkT(PE-ywp%S=J;^H_9&>^ zb-uw;{uERDTuYBmQ9auyD+mki^$SrEN^rovP^bygU+TsBOQ73JxIVL8q8FZC;n!YF z5q+lrgA+srjYLzzNg{;@L1_be_(Xx)5QkFs->ckLrPpc<QvW>r@8Y1+{!7r`GNAG7 z7^LvheZqgsLktoB|Bx3f7Ies?4g)2SFN`xSDjdvz*Mkab7bqcx|6Ab~ZWsxU?nsk_ zCl-m9ht8_6a(@JL=lzETWDIgOa|Y#M+VBn4Q9)G{JDJ{Ew&5uk5<-i{5Ecx$OQ?90 zW0V)~j0QC!3@GoF%zUOMJwc$a*IL)~`E?F0IG*DCDtASrb>56m{E#LjVq=XeLox#6 z^wuvs0vQQHigS81&``D}K<R&G<1EpcPAcjeTYDW>eO<k}zQ;kb@gRwS*?R<ASU0gt z11IUsjyo!ZD24k+c!Jy|VM{hnUX~O$USR&nsSX#~3@=LlRq=0o{$pLxi|Q{op%r{F zrDw27Zh8CV&8ZOm>Y7wwbwb;5s~og>utsa?2?b=sk)W0ORlfiqXVTyO8Oquq>ekPB z8@bi$v%BpB`Ju^s71g+sdfa{frO0ntRb%LS;;b+5vzB$YOCalYpw<QiD|W0n!jqBc z9b7Y}7n5(N5maiZN!PB|UER?D_iOZ7-0_R>#Wk-Q_R%XjvhsP7Bh}e8;I3wbLv3?t zXV{Y#K<Kf>-{44<W6n)hoN(Qe;C`Vf*R2;qx$LGvMy%=3S1j7JbQQ*dXW{$dGSMZ% z;ia*m!x>cz0g}}P)w0>!kl@d97FIm>7`h8*SjPT~_dQ)T^ceb_TcX}S@A|1oRE(T3 za+<l7|16w0dN{*A0j}!&N2ws&Q6YR-IE0p?uSY~x5z&D0G;-a33uj)9{>8LBT}xLg zc2&AQ(mbON_jQ-$0C4hboaUyHLAmYqCxqWYp%o*RuE)~#SQ&J4t~w|4)(3)<w)VW& z^Dev|56IW?02_a3Vg{VQt+1Vp^`MS~py^h9An^?o_VOFc&9!0auF739tfXX!|2dnN zNH_879CnV2pjNpG<N&FAVIzAWrUpOU*ugoryeZIy@tYxjmit<})|=(ZNT*b(HQ^mn z&jpccUf>Tyv0&j_h^?hrK+JCW5=lj!dW3yeyX(ranX^ru?!%vyt>KWST@^$ae@Xwv zm2WaaUS{^yZiBPVsQ|qaC42mcb(;;T?0HrAlQujZ*ks$IEnCutW$K&VY<&Lhin6%2 z_n!UTsi8(y&8k(<E(z^hK^vH292q&rju_xxhE8E_)rF_8^G(Ak1NrX0$xhj4vWl=7 zW7nU}yiIk^I=O@4o`e_fFXit;c-fH09-}k-YI%)L@YMPf>X@$<0!Fy-2Jkp}z93tN zb&a;gtex`CBO$DCboCYuV}SJ8WCd`R)^~iJ^GYOCHVw?9gj*-LezzPe1SLEB4TD4{ z@JJ%-*k^RDn;Ha~@5;ef?wxZuri$)%sc?|x<wm&yc@quuH)G!6axa|{3F!%%FXwR~ zY3lG0WlB@k`}%{RZT{i|7<|YLXp!&EI9PKX;J-?^oP?c&M}ep`Fbh`vIJ*l&>U)et zs3HEPN>NwEVSR$xDEzb?Fw(7pNb`s#dv;7-zhZ1jX6!2|%?E+z;z$($n!eXLs~mB8 zH)R_4PR&xZZy$`%+|))<>4J=#T~nn^kmKBQcDR_IbwB@e$qm9@42<ggeogkRS;{A( zW&Nb*%4#BX>q+ccjcdHaz%ENoQOg4ExfiZ)>vV&Zh?cU&EmFFOU_AGM7pjbIP9^W4 z@@8gkm&LW1rziVF(p}52%d`0I0O5sI2=7A=jrLrW`xU*NVF|P3{j&e{QDYUq)krMY zmDoHDZ%q?i06|E5?RR@~J!pa*)M{3dr;TcvMD>V6AqVe=M)hqHx6$2WibCoOU;0OZ zeN(sE8QnD7R%^qq3kzM(ifVI}8{jJGCss#~38u$#`NK!845o`Kqv$sU;H-cpx1oU? z7AFs3mxlV?2;@O+=tjo$q+Utq`=GL~;H|$S)lRATchlv{-S3PK_&#m(hL@dzbN4$g z^9z#M^3T8BHn%s_0=rI5IhQj&C(%^{t&M9=T#7CW^gR*bf6w;pyr1a1XQ^$LqFlPL zIG-l2!ldvpWKA4v*6A#&a5_WWx-kD_WQb96F$&oCI>|rhBCKp~pZkt1<Eptm+2<%o zkB=VUyNJ3h(qD?X^h+)6(&B3^Y5jX$(^jIYUD<Y5SU-P@S{i<}Q6~*rF&~G|CtpIE z<VELWVxg19%M7rdVY2b4oyOM@d{G>dHW_h*YkQciFrQxDav)><i?PLO)=ej^vX$9K z_F>rH(8(}b0&Q4*vH8Fup0v)tX!pWgf!SKz`v69kPnz!9s1t9L=gj?QyuULqhR6y0 z7slBpFy`WWk`}~i|Lm`Jk}-A)Zj=L2%)-;ELKJIG{#AqCHQV}gg-F8RCcaL5^2Er{ z==A2hw#p%k8($5})pemvv@ou2_*DCN>-giJQ4{N-6i(Bc!oPn^)phH(g~wTPspk^l zsfV&S4+)u`FP=)}gN*lfI;`Da>wD^+Sr!4_CCO5p%6%L^vIkopKi;#PYm-{HJX|Qs zX0!9Q$v|c!0_?ksbOXo?1_rg4OAX`j6uJ{xQvHkO&PFrE>MZ6L=})>BwjIt~0>9l) z)y^!D3t2Ef<FW&2L#fAEH{anpI~`ZJ)qn%TUH{9d?NS^+<2z?@RM62b@uRs_1P13~ z7nHq4vIz;9zTRSzw63P$D(EDwq^^7`ngbsQbNQH<<Oi-wPZVjVd9ulDDkFT{c|;(& z(ATUT+*%D;6@DxL1{gJvv|EJp|5>IZzutEXffZimRuu$GXn~ZwhRep$FwiiNW7Qe@ zDNn1Wf9|jK=H@;D>qU(Zg^NCQYdC?&P69-B**8>VDIZs;Mv^}Tz=t3rewa<1jHpTu zSd>wO&Ux2ty*-|9p|D~%sK1+F{J{(qY=0_IbYIl4cCFf$SJ|LSjQ#8PEdu1umwqK# z@m_}x-Prp&^j=SZlwV+7=pe^qFhn>NHv-kWZ1~b%UOtSuHs>th=V8{`;jQ)KCo}aS zH}vuHv9*t7D-&d`9*>!T-2?j0>2V+9k1X)<<y$}?bm$ELj$aQ8u9JXs)W%ZD`c7^R z=!Jg^wHoru<~ZeTlKXXybJj!BA=}WUOWT>=+Xysr&@v+Fa1Zm}-mya5X!&4ze?xp< zoYxjGg7@>)6S6|ayN5Dl8pnW&o%<O7CXDYttLI1fMGb|1<(_RZG+dPm<*^xdlXsRr zZ1lGoV>7)Vu77<QPnvy~|2LT8TuUYKFZhC`<m)SxP4fuFD;Ot9_Ry39sK|q6KMU7~ zHmF+sdo(lumg)+f^#5O=2ju(NWTX8T4Rn+Y!c`o}#I2=B5%%Wc=~`2aqYxaN^##w| z&qJIJr|f<@S)5?4h-}F1xVA#^#7YC4+g<-@W-3^8VV$q@4~k&G_D##5AF|py{8|wH zKQGV~D*lFO>jQP7QLA&@x=(Ik6sf4cfn%pl<I>;K{xW=|qLVmLd^Iab#P`49>wlr< zb6;$w4<AUfX*&Pn?`ybxM|VKZi}hdV-{|-S*+H@0&NVGzqrRb`q4Hlqy^%|sfl9#U z^)7ck*hHf|<$a|zx){g8S1}Rf7r@^6S|CY~6hrB_y1M#i_gIYMjr9KIU3hr-NIH98 z+1TGAp`aJeoG&Y$R1oI&^^{V9T1zDyHwQ-#2b!((&S<9F?sx&8iQt*`OKl*p#jJwh zxA!KC%<2j86Ce;syE4b3J-!0KX0OLp;2(_b?DT5$?$$5B!J%5CJQlpw+1c5hLgScj z5<Ni8M1>P&Yip~9T=<p->N2z-sx|dyGxb_<P4b{;4H>>Ae3gwLBs$8WtgQS6@d79n z`QjC{Aodg3iw8$=gc6SaX*IyW8Ca#u_?m{+DE?Lr4|+{CsQhA^lQL;N6@h?<n<!j* zN>N&zsNCFKW80usShx_KUjtZXu`*kW4b}w=eaM@HFOGsJd%Fonx7R84j$4!zj5JYk zq%l?3%4-lKD(6Z3ARS?t#OuM3Mha5cQxrHk5xf_B<{|wS_@Pr{Anun|sZ+aT&vz&t z%($%+$?h3$a$-gp$d!p!0gp!{fI#8~004gQ=;AjHS-&WH)AwC-=@LZLURjB{tkT1_ zK?qgI6)o4GTg9)H8%}eFP>uAeKS*Um@qNwua5B9m7ZK8l&uqxwE)htZGVsb7&7O6E z9ka~BrXXP*RS9<9!oKG4`1x|i*&1mF0Ip++AtpgXSa_iNkzeEP?p`-WIVDE&*NdV+ zOVFxIJYA?auWOl^pU)Ew>}qJh%_26{>sIz?O@?zb)Io599^@W610&M^q^gFBR9at; z?b9InFX3WF!A-~=Fkge8hHV?orbTAd7n+|ddCj|#ds74vViCK!yvTyAD90$b=%iQ^ z(9O)K|GXltO#S<IH$Ml7xys-uS~JT6S3X0`fLT61p&=#H12q4tlOhMrM+9PStv5;` z#L&gy92I)xmrnM?5k!v0&F!(@r-=H4UXC>bn%Lg?)&bdyb~?Z2iwng+O5s>)yoN;1 zxL*I`SZ;{o|Bp`wYWM$mrT_6f|K<1nAK1;=FEA1ye_w6U9J)kvh6{Oy0kVe@x+a8> zZc`!(LWVZWe4a6pcAoDCQQ~g9U+xWwW4Nvqz<z^qy?uWD+Nuzh1IEDc6_n(qRitVp HOhEq&SNjX( literal 0 HcmV?d00001 diff --git a/examples/webenginewidgets/printme/doc/src/printme.qdoc b/examples/webenginewidgets/printme/doc/src/printme.qdoc new file mode 100644 index 000000000..d05d5147b --- /dev/null +++ b/examples/webenginewidgets/printme/doc/src/printme.qdoc @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example webenginewidgets/printme + \title WebEngine Widgets PrintMe Example + \ingroup webengine-widgetexamples + \brief Demonstrates how to print web pages using Qt WebEngine Widgets. + + \image printme-example.png + + \e PrintMe demonstrates how to use the \l{QWebEnginePage} and + \l{QPrintDialog} classes to print a web page. Further, it shows how + to implement print preview by using the \l{QPrintPreviewDialog} class. + For completeness, it also illustrates how to trigger a printing request + within JavaScript. + + \include examples-run.qdocinc + + \section1 Simple HTML Page + + In this example, we create an internal HTML page that is added as a resource + collection file (.qrc). The page shows only a small HTML message box that + explains how to trigger printing by using keyboard shortcuts or clicking a + button. The button has the JavaScript \c{onclick} event attribute that calls + the JavaScript \c{window.print()} function. + + \quotefromfile webenginewidgets/printme/data/index.html + \skipto <html + \printuntil html> + + \section1 Main Function + + In the \c main function, we first instantiate a QWebEngineView and set the + URL to our internal HTML page. Next, we create a \c PrintHandler instance + and pass the requested page. For convenience, we also create keyboard + shortcuts that can be used to call a print dialog or print preview dialog. + + \quotefromfile webenginewidgets/printme/main.cpp + \skipto QWebEngineView view + \printto return + + \section1 Print Handler + + In the \c{PrintHandler} function, we first implement \c{printPreview()}, + where we instantiate \l{QPrinter} together with \l{QPrintPreviewDialog}. + We need the \l{QPrintPreviewDialog::paintRequested} handle to generate a + set of preview pages. + + \quotefromfile webenginewidgets/printme/printhandler.cpp + \skipto PrintHandler::printPreview( + \printuntil /^\}/ + + Now we can implement the \c{PrintHandler::printDocument()} slot, which is + called in response to the \l{QPrintPreviewDialog::paintRequested} signal. + + \quotefromfile webenginewidgets/printme/printhandler.cpp + \skipto PrintHandler::printDocument( + \printuntil /^\}/ + + To do actual painting on a printer, we call the \l{QWebEnginePage::print()} + function. Because this call blocks the main event loop, we need to create + a local one. We begin the local event loop by calling + \l{QEventLoop::exec()}. When the local event loop terminates, + we check for \c{result} and report any errors that occurred. + + The last function we implement, \c{PrintHandler::print()}, is trivial, + because it simply opens \l{QPrintDialog} and calls the previously + implemented \c{PrintHandler::printDocument()}. + + \quotefromfile webenginewidgets/printme/printhandler.cpp + \skipto PrintHandler::print( + \printuntil /^\}/ +*/ diff --git a/examples/webenginewidgets/printme/main.cpp b/examples/webenginewidgets/printme/main.cpp new file mode 100644 index 000000000..e4d6d9dc8 --- /dev/null +++ b/examples/webenginewidgets/printme/main.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "printhandler.h" +#include <QApplication> +#include <QShortcut> +#include <QWebEngineView> + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QApplication app(argc, argv); + + QWebEngineView view; + view.setUrl(QUrl(QStringLiteral("qrc:/index.html"))); + view.resize(1024, 750); + view.show(); + + PrintHandler handler; + handler.setPage(view.page()); + + auto printPreviewShortCut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_P), &view); + auto printShortCut = new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_P), &view); + + QObject::connect(printPreviewShortCut, &QShortcut::activated, &handler, &PrintHandler::printPreview); + QObject::connect(printShortCut, &QShortcut::activated, &handler, &PrintHandler::print); + + return app.exec(); +} diff --git a/examples/webenginewidgets/printme/printhandler.cpp b/examples/webenginewidgets/printme/printhandler.cpp new file mode 100644 index 000000000..d8c4fc177 --- /dev/null +++ b/examples/webenginewidgets/printme/printhandler.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "printhandler.h" +#include <QEventLoop> +#include <QPrintDialog> +#include <QPrinter> +#include <QPainter> +#include <QPrintPreviewDialog> +#include <QWebEnginePage> + +PrintHandler::PrintHandler(QObject *parent) + : QObject(parent) +{ + +} + +void PrintHandler::setPage(QWebEnginePage *page) +{ + Q_ASSERT(!m_page); + m_page = page; + connect(m_page, &QWebEnginePage::printRequested, this, &PrintHandler::printPreview); +} + +void PrintHandler::print() +{ + QPrinter printer(QPrinter::HighResolution); + QPrintDialog dialog(&printer, m_page->view()); + if (dialog.exec() != QDialog::Accepted) + return; + printDocument(&printer); +} + +void PrintHandler::printDocument(QPrinter *printer) +{ + QEventLoop loop; + bool result; + auto printPreview = [&](bool success) { result = success; loop.quit(); }; + m_page->print(printer, std::move(printPreview)); + loop.exec(); + if (!result) { + QPainter painter; + if (painter.begin(printer)) { + QFont font = painter.font(); + font.setPixelSize(20); + painter.setFont(font); + painter.drawText(QPointF(10,25), + QStringLiteral("Could not generate print preview.")); + + painter.end(); + } + } +} + +void PrintHandler::printPreview() +{ + if (!m_page) + return; + if (m_inPrintPreview) + return; + m_inPrintPreview = true; + QPrinter printer; + QPrintPreviewDialog preview(&printer, m_page->view()); + connect(&preview, &QPrintPreviewDialog::paintRequested, + this, &PrintHandler::printDocument); + preview.exec(); + m_inPrintPreview = false; +} diff --git a/examples/webenginewidgets/printme/printhandler.h b/examples/webenginewidgets/printme/printhandler.h new file mode 100644 index 000000000..69b71f4a8 --- /dev/null +++ b/examples/webenginewidgets/printme/printhandler.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PRINTHANDLER_H +#define PRINTHANDLER_H + +#include <QObject> + +QT_BEGIN_NAMESPACE +class QPainter; +class QPrinter; +class QWebEnginePage; +QT_END_NAMESPACE + +class PrintHandler : public QObject +{ + Q_OBJECT +public: + PrintHandler(QObject *parent = nullptr); + void setPage(QWebEnginePage *page); + +public slots: + void print(); + void printPreview(); + void printDocument(QPrinter *printer); + +private: + QWebEnginePage *m_page = nullptr; + bool m_inPrintPreview = false; +}; + +#endif // PRINTHANDLER_H diff --git a/examples/webenginewidgets/printme/printme.pro b/examples/webenginewidgets/printme/printme.pro new file mode 100644 index 000000000..15b3959d5 --- /dev/null +++ b/examples/webenginewidgets/printme/printme.pro @@ -0,0 +1,9 @@ +QT += webenginewidgets printsupport + +HEADERS = printhandler.h +SOURCES = main.cpp \ + printhandler.cpp +RESOURCES = data/data.qrc + +target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/printme +INSTALLS += target diff --git a/examples/webenginewidgets/webenginewidgets.pro b/examples/webenginewidgets/webenginewidgets.pro index 20c7ead50..0d47aac80 100644 --- a/examples/webenginewidgets/webenginewidgets.pro +++ b/examples/webenginewidgets/webenginewidgets.pro @@ -1,5 +1,5 @@ include($$QTWEBENGINE_OUT_ROOT/src/core/qtwebenginecore-config.pri) # workaround for QTBUG-68093 -QT_FOR_CONFIG += webenginecore +QT_FOR_CONFIG += webenginecore webenginecore-private TEMPLATE=subdirs @@ -7,7 +7,6 @@ SUBDIRS += \ minimal \ contentmanipulation \ cookiebrowser \ - html2pdf \ simplebrowser \ stylesheetbrowser \ videoplayer \ @@ -16,6 +15,10 @@ SUBDIRS += \ qtConfig(webengine-geolocation): SUBDIRS += maps qtConfig(webengine-webchannel): SUBDIRS += markdowneditor +qtConfig(webengine-printing-and-pdf) { + SUBDIRS += printme html2pdf +} + qtConfig(webengine-spellchecker):!qtConfig(webengine-native-spellchecker):!cross_compile { SUBDIRS += spellchecker } else { -- GitLab