* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ namespace phpbb\db\driver; /** * Abstract MySQL Database Base Abstraction Layer */ abstract class mysql_base extends \phpbb\db\driver\driver { /** * {@inheritDoc} */ public function sql_concatenate($expr1, $expr2) { return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } /** * Build LIMIT query */ function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) { $this->query_result = false; // if $total is set to 0 we do not want to limit the number of rows if ($total == 0) { // MySQL 4.1+ no longer supports -1 in limit queries $total = '18446744073709551615'; } $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total); return $this->sql_query($query, $cache_ttl); } /** * {@inheritDoc} */ function get_estimated_row_count($table_name) { $table_status = $this->get_table_status($table_name); if (isset($table_status['Engine'])) { if ($table_status['Engine'] === 'MyISAM') { return $table_status['Rows']; } else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) { return '~' . $table_status['Rows']; } } return parent::get_row_count($table_name); } /** * {@inheritDoc} */ function get_row_count($table_name) { $table_status = $this->get_table_status($table_name); if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') { return $table_status['Rows']; } return parent::get_row_count($table_name); } /** * Gets some information about the specified table. * * @param string $table_name Table name * * @return array * * @access protected */ function get_table_status($table_name) { $sql = "SHOW TABLE STATUS LIKE '" . $this->sql_escape($table_name) . "'"; $result = $this->sql_query($sql); $table_status = $this->sql_fetchrow($result); $this->sql_freeresult($result); return $table_status; } /** * Build LIKE expression * @access private */ function _sql_like_expression($expression) { return $expression; } /** * Build db-specific query data * @access private */ function _sql_custom_build($stage, $data) { switch ($stage) { case 'FROM': $data = '(' . $data . ')'; break; } return $data; } } (=3(]  =i$JOvbc̹ WW棘8_})XY-i6Aǫ>/QiT.Ñogqdkfflco}:<5A8" H_"-'5!~2Sn!1"Wy~:@|@Tٛ#-CRgEΊ/fu%T'e()FvBBC=29k=o pT)< O2"@yZ06IEWHpH Ȭ6.'iȸ{q+@jg*k`x2f/:Ned<@dϯΠo95y%ʋGyMKOX0j)PeD oV2o d5\^^G CnLfR¤yHX{qw(/[WL|X#,vyZln_ej?5}_\B *0.$,Ii7 Cbr6,!]䲩VA%>X"Ĝ7KZbdFPh#6)gq ?jK^1**NwO%:}xщFǰjE|Dm}~_Xc[2FOO:V vÄix|ݧwxY*;@ ga>)7ra 5F{9hmuy˖-[] IpYln;<m.浯۩($s / _ a\>9@KT=Ԏ[hT7[P,u^nƹ6aL0n?΢@]"LR5t5$[AKr|YD9G˺Ѯ&)9RkHT0/bl(BJ)BTί~O3+}-=_3f*-SWGe͗tftСxUI'-[apĪc&r'ߚcdbXk s 4X\vDf%qd]^kEض j &䧎RrvM>J+*_/+:k=ݷmqewރhoy b:b=ݹ'T$jVRSJA1K;Du 9ն$5;/־!$Ѡ\[ޅkxPy/uP/ "w~iqh8@W &p&ʠ^V`n%sI#QQ.:v#uc)z ;Eܣ8SKҶlZˀ5F'jqa)u&$ a k{mRA}H_$ c @7 1>"H1An]5LMa/2s,4@k(ʛњ+ ]o?(8kc\*U@UX:!sw{^bNr TF(ˌEm5)P6~)/AMwE)/; V7g 1m>|Zr`?o!&]˹+tJWڍ=׈=T2(~4 S'*KHUieXM[xߟJ`Ĉ=\5"SK.O݂V{fYy\]Db @QDCx!nKRwk0WLTk(A3\ο!-c)dqI&x&Y$I6qSG72ZS="qVTrsz1 Īh  @`Թ_/[T@ѹ~厫4?+0 Blin\JV #MH6`vzͣaZWfΖ󕺩ƇYwɸ+9L0e(|s}#q`OJL},<05&( 덗v,zƅWh.(|͛ 'vts)O>};±-4%߈Kt&V~-:Fv{z\ʁd<=-i1$L˰f>~V4(*wyBRUAJ,bOqc#Zpl(L~hsPQR"nf4 *@n\iκ%}lO DQ?ӻզ4%5oU*Z,໻F?BMy]+#FXp}cv@ۚٻw>^U_a)HĪO~}qIx5~3?1BӺc)a QuL? y-i3d=5__9ky2#2}/|Cei7DXqE}DR~Bba N D DI ۵PXȩj\vd#>sdwGjZQ>jikp kK~׶ 0h^NR(҄D /5iq@- z]ɷR `V\*'Y Cb߇K+踜8s|Óv6 }mpϐ@ q/ݗʁF9xyf[ ։N\vP_Gk0 ]:a1ϸ N#H ^'qp]6?AD^mdW4+wÔ^b|F7հ%.6ﰣޒ`tW'H 9ת?8GUtYE X'Labo@3-":~;;َ֬ \~R_x lC/ BM%0" xw*!R03=ln)N[Ä}A<$V)Ie*HS/ŲY4Ax*|KPC=msV'3F^QhIt~&ctZ~JɔJruwF+TPF]} M@570c1n#KB}8LŃ PB:hψ/_fDq"n vνUG'C߮;C~(mb!dqN('+u+׳h}vk }r%$.S]pM52lx :ﭣat mQMHtuFY#-"nu279TN1u{)guQ7 c2q(nb0Zکؔ .˧2C` `5o 0,ȣ"&d'{q U(&0ÊV=}H=Mkf z(iʝWl0 cr?n"NM/(Ɩ'L$qR %38azˊf,"U/pH-,'fO {A0ך._kК. ,h㗡^ Uԉ=N8*bd5_sb]aHwpȤ/beϸ5O;D%\TZ\Q&:ٛ@W49/8R薃7?Nڸkۣ"k)|xA U{ +7JޝpPj6fWOCJM=U[k/e)-[ <{ _ tDߪ fF2ZC0`Pk.8=eY|I+f%&"[+{Œ1acWI AC$&V8B>eV+Rv)JqOgBi,B<8K8Mvb"yU_TwNnS:GQm܋u^20*(G_9\qL*j-k4x_*SR<PAt4)?h)I dYmZ<_3tCk^.fE?pE-s_rBmͶHCg݉i5et1-:|5°qZ4˅vOB#[``kw?GLk^܃E|U]Ş(nhyf4P8>U|O?l%Lk|.V4#T uDErJ,zIT|_l[X 0۸|hl2jb#(Bnb 籡5 3e5SAHtp 827S1TI\bQRvY*UuKŁl#sk!]_8m*v>Zgw3o8+CBbݤ}_`3Çt%< s]7hs B5=Mp Uņ\'cGEvFJ9Biw[d'p^TZ;i#I>>Z𪎻7Jwu\m'F36g錳7@jzDMv{ 0?˜;*Lk.Q(sP(\cA`͙T0ʄ'Qp  ~yF<^V<:k']2`M -BxGOIYEiĤ;}'yz8ʘ7y4lE#t!y9(qۓA8zj7OKՑ R0j /]EFDhhPrx[Xˏ㬑ƙ$ѐT*=d;Y%z~'$KKܩoHT͚Z1n{E Z\70F$5tkvr'"qx't Y $_AcF0!DWYGgD}5ጓf0{gk@BVpFTJ83f+dR7dZ@Z.ԪaN^vAWUaćƗ"ô AAN8JhTvRz! Վ94(Il [ɀ?)n/,6d.zF=r{loLz)rN*ט#:I_Ty~< F,4hNeh^DP5h;\|uK:dClLp?yx ]7iK xwt-WfAv=}~SM1e!ii!dQُ1H3a3tCx&]>!/O+]Ksl%pWOFݶB.+B-9s@j,VSkJ//XK GxxX庉б1$X]$>ݢ ,p)T Rxe댵U/>(ŭ̸cs㱹^Iu?+0l![d$ոKG-H\0&38/DaDi쿟Vt9sd}? _``a2Jr)ʭp`GW.k7 0;$;v'Jә bHTS&<9(PEOżS%F'X5Xv#޸U==͛" R}Mz_,l@|~!d[,w,o gXndtk4J3u,J|֟Fv@x-'V!G7Ioqb4t0)@N2Vө_̲5lġjLX۵z3Yf\ 9`˜HK yz,V\ `.$4ϴ|(ćfM)|hE;SHRQQk*zZH,ۂ?c}&τk?)7I,4!԰8ߨ鉈y@_Bkw*ק :EItSYH籤GDf5wٜPHYvgUCso`3CWh^/á ɀGo`%mt!^a%;HCpᨦX`Oow!l "uVP=(j9FAU͘0KvKqk?ab GUuA.r)LTi}*%Ou7WS#ndB@B`d21Ƴޏ?v2zJJ|U޹bOAdE} d9pHxc|#޴DFe5ڳ u^^\uRڔ W1/0sx9_cO:;V.VS9ޖ738{ٳô'-Qtl 6~xc%C5)9qHJ]QaY ӯ(Hrw('-Wmq<,ZCE@iϳվmdQsߪ1L`O4LEE4<t.K.5^GDɿP CLu.hn@N*Cvo뉓jR!AYD^R zc~[E@ooƦhMumgW_St YXU~1%8w D48Þz|_cE Ȗ>(cT(*(2TH~WV1'yn+[&ڑ#kavQϾk_ܫ}ڂr?ɒ;\ <<ٯ/G b\0>Jh鎇z;A5"0qgW^7͜pHU ҏ iمSUA64MHhK\ŧ}7yY{'g1 tT]dIiPd]\&@ij^B^ hIz&I*I+ܤJ>p4sNȖkƬ׏gI%(aam=۪kzi v!LͦoOj9mvZ,rL/76\q{1,Ʃo %5g'5g@\8_ߕbDyY,;Vװij/u)YRᵐ`y)j-2qV7v@k kَ\6iL<ڛ+LKugAc^(Xk^SqXClB՗} 2.(z Xՙ4 b ؈=9Lh^6g5F @&ڏU]V%An|ѩc x8e܅oJq PNݜ0lk;g$#9S9B'(IbEYbsWM0$vZ`;:%D`\)gH")i6m^>p߳xjǰQ~H [ػa Y ]IcCLe5Eӳʹ]:~f[esRJ 4xywxOCO. L8/n!tc8^NpUkV׋!AA$ީ A$JJ Z=S J/\G>djJ7HھiAՕY0s;"%S\/jot3n@Q]k=+ji,7$۾}/a1E0Jxg:UPDlزHɝuNv TDǂM0l^ 0?M{GtG,r,9# ?6)C)`xfiz$$|~o;v]@I8ֳ1Pk4>QNr cfENBBL*YT#:NP|7) وvĻ[FUyyrۤNJ!nlS bgIZ 1Or<|khȓǤP6KZp ,.]A˲y#`!~ yZ oϸy,!UO$ƌ0 :^Qjsa V]zy) x=%] bPBh*Ǒu+BxmB*ۡ}zF Er_~2?)7uqKs\ RY )|/#S)-4p;P]Kan jlTD$ NCq'I3λ89dU& ' ӣl2RDvX;IQ'Yvoi*WݐZ R$K.f0OmFN$l™v!F!qeUZx"K6Nwrϊ#` F65t?J5FjUU׾CӦ`؄f(`*:樀R#TŚ <;'qK#CLeɘ:ffai[#`0I\E΂s/y$$mzEylu,[_s"^l~dZPQ%? x~t~X7**5s'xEO-\L2~xE(I S2wjh D;_gңe%o?<4_>;w=3֘DN/ۻ}FW[4q ?-]ǡ:y`u'UbgcAj Ԡ}HS2Y:`_9 xPie@e& r ބiz>ե49Ѓ͝ ʨqF]# ‚dj|rƢcʳ_edu[P8w-;Pm$2dZxM9f u0ωiZ&3tzTe F{/lYZ mC+CQ xh=../^L;~tLM);5(x19 odk &MSz$Ezf[&ISHpr1SIGDhf!4:;tRRZ1Q4E͕cͅ0\ y-R?fA_p,|0uX%&s$AwU]\ߩNk)(u(L1[c{oTKMYA;-G>=qE35Lg I4ȃsQu;g'YV_)*H!ylv C#kJ$hHi&*l*aVa@YLJZOR0dPQD[}m&T?-q&"Yml=!LLъz+װH(oCq^Vs6޶A<&=Q(}mKDGBmMmj=Q;ܓ |h_ح QOg̸hQ;ifdǍVGSx:G:}3$7G bC*B)(1X<.VyJ_Ԏ8X9TְA  u@.F4_`2\sXc hoqӉ{4 'iBJGr)s:f9[n/S0-TQGFcc%f|HZFCzVW80֥C6qBX!񩤵{f<^Ikӕ/XЪ/5(=ߞE?|;?Yʦ4;so ?TK/3 BIqxMҜ{ ۜ{0Ӛe۳h8rgfɞi.D-<ޒPKHQɪ0;|: KKWʹyᆋ1X+;,|6 -)ܢ[wlO84E뤊r+3]CjNIj:w|Jj.r( 1Ԡ.V;ci޻Q0gNB Գga /*Qc[*)5o.w]@w[T.#S<.cX*!ďеb#gatrx TC=>,6~VI@~ED2 (5L_Pؤ%UYMJa1&V1u@/N:0VN(݄A=ɓD Rb5KB uN>j;}BP55^*>G0$*Nt#FA:'c wdmn"`N:h_IUV gfu3Ũc~x/yzzT9/[;V"rDцwm/cfILs. Q|9㘉շV-Hq#TYS}yurT*xfwT 47&TGdg8x^Zs?w<>gg7XڏK!!UC]V8)L.Y03Nbq5+*tZ˲6`k;nDKixm{ޚ6]*2hCN\8V*3} j~"k@r+x+9wo׺ 'R'N ƨĎS^q*p`SOfRtLoЫ&>ak/ѧ# ӝ֫@[1K%Iscb#Wl7Y5w=.z}ބfKkѨ™-jQOGB fj۴pt]>3kk$KAP#)#Q`xP 1_ZW/ oB4l7(S~yzOuLA5ͳL&s6x6w ]5*@~/edj&FUN= uYr\ {EXm@)yn)pԤu'͕ᖙ1SHr#CN&=UKR[osoSF#ފBh%JF~(U ,HXh:48~b[667xt3iH/ ^?۽A۾!u8o :4#~4_6rlwVЛ b@;ݖ#0Α˺E~c02E1¶*U.J^Ws1$#Ch+ĎmE9"Dݳ'zaI YWrna(/DB rI`:me4+O-Pô}2͢N}EWVM <<^ .̂15ݦCzx$x I 'LYa Ă&=A,Co(ጌ`>y &Je~Vun.AcIL 듍wɕĄ8J߸5\ВY="x^8VmCs{l=y r&$!W:ɁEij`$Le2J!U7 =@ ]C[tV^9J-Ӹ+$Iv.Fت*+ېVq6+<ѭxLKV6$qޞ;{(7+䊋wHoI%᷏1\EȚ#pI34-?{oZ86)V XgLqi=ިSgucif7ב;6K}R&Pۯyͪ y/سOX(Aã޼,LajK[uRURͱ%c |CmAkצ2['"4JJHm^<̋lOұ#@7']i n@ן.^(WKcbEXSTld8-5j:p 3lkv3oxJaH3p!]FN*q~?1\} nW^[ ڕ(VL`>(0 ^ r*#Z LY6 KwN=fj^"ϋК/^C*wD)Bz hOV1?-_%'uzA+% xWN՝|IMqĮYm 0m$5w6=ZzjoI5ڼV*je+SfF`4h='Х48HoQ2Hu Ѽ5x&(|-+8aM fdrSlCqeG@ķ5D:Lܟ,^{-vty/kb9+OI:T*2.K H?sGoszzĻZ`w̾Gcv[L#i|AWٹ1%˄7@el& ])ܼ\f@KDT"sܘ( V|Ћr UXaw i="nnD Q 4,C+8i([aY<- |!kP YE)aT8Ǚ܂{3n CIm:Fd0v,_.al+Pk=oZ?/;x9@,﵁?1T˳̚,cً5ؓhm)7/ndv"yfZX'F'f+\EDxe(̌;ƋS%>Qx9$ǑK?wׂAV#}ĪZzmxh3[A$w2$"}jsjmQKLX =t‡e+4;(ÉvI3Hv,n*پt8FI]4wV7B*"!WD*dUv,M*Y +<5hm +qno \!}?XA /He*9>jEa|Zn}q|tO*Up"79~E\ɫiT͈g X(F@Gh'Q 9OPMk |0oLs*O,n[)~ K6CkP^gO%t'9~FM_ K[ce،q) xYDWEVZLQ~ Pt5\.~mv9So拄 yL7qYj4u'!u`?J߱Js]Zeԋ#1(VlUs•,sbF|^ .>,}_"Aß1A,,OPѓCx?G5-P6ޭ}Ǭ͋ٔ65m R{BxrbF#*ߑZל#0O Oq$߼Y' 2NHő koKSke ΐWv[IN"}h5 tt۸%s/A5z?IQvo!a?V"8/4:< X\zvU&t"ZkcM6Y-+i|{וB7VdnjQNܘ!)%VZ@L61g1g?Ӎw-h3ϒp"+89qNYo ъ98SSrٚ vtHTdaS ͢(,S~S ^aRwɜ1 lhU~ξK\4&qY- t8tJKvľ[AmlvN8Ҍ;s_}eyd=L?̹߭yp(i0? fi[Cݘ'3<]rl;fr3.܇[@;͒mNʷZHE|ls2ύ2>k ?in͐ &^Aa5WHqLm7/V׬ݢ!~Yzԓd2* !#̺9os.~ >-2~~!uc.mUL 2!Zf!6T ;yU?EάJ2z@U$LCLEZ9dh ;GCEi[S8vG n⦆#ߌ=D2M F#R! gnwHoUHEJ;.PRUZ^iϐi,V`*fRY@3}q]\u.Єwٚ!UY ]of!у> CI;>7ɼ](Z'|@ϟIelz3<5p)A{01CPn{?SƘ}kَ$YTKUYѓ&GK Dr7rh`? /%H=eRr0e»1b W__.4P.؅0I =%j:}hw417RF^3jwap脞ZB"TjxL5u+p(rF)p&/X'GAiͧ[ |9)=jęwͿԒy'gWSg_E)H./PWlw\RQ5 'g 8UI[B}k<˫1. ւ 9Q X&SrJ’Ul_ov[|i0rk@BَLLZ#F0~E yxWQ{+d"t  Eg Wў3%&b^l7dO|W8e.zzǦU஝)6ΌBn 1:4_Ć~{*tv,%9;;J}  pc9#EV-.8vQ:C~)wm5w,|R7 . \0^fY5GwҺd K,EUh[gqBAa&3U<\p 3?HAz j'~/zChzgB [wOM-EM< 3D ;>Ԃh*bxAsݛ5?A 5J'| kHYM-ۀK\w֩M%}8`V:jLl۬chZ-SEzQ r載ś8vK1ׅB>rgQBd NgvQPߝw:<ԎULrq*]FHqo6 /i^7 "Tkn1:7>SJbQ1"`2fvIғ%ĕWRkrt[]D$x)7 -b%|{rTY*/CKXu-$] t8۶+5jW5!BյgKx"x"I@16pAs帛=a/@XnTp2iIVK}HV8 .| ik58a2_E"/+Nb?Wf3_`|gŦr1t+Y= ikvTH'c)> ׾T-)D}$n ->Am g")#f{ZS.r8K蟋tHK_*g$VSͣj ]2|{=%gcoՁ{Sվ^|׀l W5r܇ /Zd|"K-4f9aU6<"ŤQōe K::G"vy) #&*>V)$s"Щd@sٸħf‹%onE\:C17>UvQ|5(5qܨ |0Vڦsmڊ\+D쯁-bGfƣ5%fj#Rs'sIuAyXg\M(E:T4\BY{hR[ćB~s`itZ^H,(CS@?a``Y|<2 *zɢ?T̞^nwW8|]b, W."X8v\lzy渨d8“7*l vqt𳷱|W?fv/hnnF 6 @ϝ__^5q8o{2Sx 4gr^F@٘UȷSZG;̡, (+/| *&H:{x5-b+?O7*<7 "aVqf໥ +t+J\[ FI41tN*dF_Y.#}MxorAUG}Yψ̏PJWExr=TXKb/ J>h*gdc1H0O][D) TG_g>#f锰ԌF|c/J{uXQPp NH)Z $nyrmE)Y;77N !w*Km^ djjfm.HlFsl[E#qm3*];,zI"3Qv8h,@M,~!>^^8.Yg(P&{`.S/EmommR:/ c kwl83]}D`SB3uT_}7WmJ9v ]ꦢC)a QyLp1eP Rgٟ \(o6I|f7$rCR sj%XMa3oU$j{ܸFUZ\IgC۹3ﺖHR&g;:[N-;63(BښqߡЙ9~U leXl]bhCɢZ6nf6`NKe#CtlB/4ee9\ev˴tHzG3 ɞ@FN5il,Aqb]L:!}u)R dX'=sL≽{%31ąўlspTAM~#_k<2[ @Ӆ֤/x_r dLc`.'lo!ëYeT' \tAU1;V\%vemihKsv)0%6/XF`XjOΗ=]RB .tU VѵN<yV!.gMk,Ť@ UK"ѼEP|L3* d`sF3t%,jk= ƉRo|P-lT!kE |ؔ5eyf'A1Leښd)9KwmI M/x(l&Š-`ܢ̋N!%ڤ.뿸U/}UhPOW(tۙg4? <Ò_#T.5YQjrɭ0F!ނA;7`ע4(h&}A|ڔ ]:Lt#:ЊƩ~ @YjQ#~xE ؕXTydwz~0vp5/R\7d28Fz0W?H5G'juZT-B-ܽl笭Lr./zZ;L ޺9f=}ϴFD%̷-XE }be= RK̽7'ԅ ѵ1 T'(~0=tݙC`/e&rMEJ蟿=4- Iު?OA'w[UjXZy60=ԒR' H9B˭7ߔtfϒe_:M|=EziZ?0g_!H5\Lvߣu8 dŊzuʯP{eܐg X~ qഝ (_4!]Ћ5}@Ӎ`LGɷǺQiaOSˀ;Y=<%漻ѩUKkvhѮL Pxfcn:g8=EVU9D2|h6vWܓX_jhAz5},M66Ʈ"=lʀPGs"<|FW.c˖].ۧT(fψ>]5Xs.R "HﲔntTYzOYi:o AKK f2z\Q@gʌRg:nHԴ 4/JO,1N_(8)l/ՍQCH>t@]ժu ப?%>UܮeA\Z(*;<H 2b:\N88W#]R, IU e=u;lW)uf$ַ Fp475m7Lv(A = * tQ5Ha*/Ȣ^Xls/Ҡlw?L0 kcU篟*lϭC ڙ1Ć(b,@>8Q$ !m)n&#f)ȑqwE#X*a IxJo-wv^# >Si1k}S Ns7 kȐd05;eCr5?Ip&f!Sh,Y.Ia"F<A $8?"L! d+_p]y7oYqxݹwef˻2W+TXa^8Ļc ! ațFB%#L&/p:QiN}y_C̵b)PaFcVnX[ʮOB7=zn NI=^Ha!Mǝ .O3JK$P'r:^ˍ(ʅFq"[&s|UvG4= mQ>sĖ3.)T2i&y_j4l>f!#4[Sx]IE(ӬB Z\ݯEnY$^'WўT|(c *Ti6̴4W̵9;P5sr* nv="Xr:# 7jPIՍ:M̝s9 h UT˂xW973((Ŗf+ ˫=d9c!F_<:@h{9Vcu'x!0D]?GmI`;a Ǣ|T{%0I2, "0Vp,kګJѿ{ѼQ{TBXG3>'$=X;4WF^c\: 7 <$B2y kܑz,0>doN0_sIQ\!Y+V_gr_؃Ciha;B ?j Ƿ_iz/dc?]j_HC˟)sT-Q.t 2دf9rkʆ zbXrX7:J%+^Pi|xѕef{~jՀ3:?frHNVu{'Dj[o"c }IbŠ;}y\>|-gMl>W%Ar&PP A RR&.+vg`} O=hSzܻJ/6^0ii$ bQʍK_ DUÍ$(RTӭj&vҽJ7Xuy)K +zF|XS ud51eV"pwՍ9`gj Þ^)WGFkEprxhu)$K~1<1=:'g 8|ȽlFg( PV%7p4| nc!?$?x Tj@䣞'~K_ @s,L]w:Jf I>s[+[1V1nJIWD囅jf-~TO+r#E ?*P$wBU'Ee]eawAN̤]2;g E % DAmh> ʮTWv윈H%Bqգť̰ihpV"!?"[^-3~pOث-Ԯ.]hL2zon1NFӜ1Icdnk c5<1f~5\y!}b(K]PP6]D_l+Ӫ2.>V=aY\S$(Uɶ8"vzY̺?"4-6C1Nv*?'UرEp2-dQwceXa0W?|U&L j~Ho@ovnr%Avcja勦B|z0\=iÒsO冒ѾAL/,./V)ʻ7m/|?QDFL2/j&mҏ9n69%W,-/v}%:(h8;lޛ:[oL+Pz U0Ypdf#K'3>yZ+@<:۾=lDb{c= 7dq F蠃ҋ EN(mv8⯵ Pjfh;UykZIn]7xIt@<8Zd-(+#Fs6hfOBg}ЦAitI%|$cc]9*G숸+D* 'f2oY3!SJJ>/W'\YŽ\م>$yOs43 !Տk3r ? #5f~{J* KUl4\fFj% '65@_U?z'NUX_#ުLKyBJjUsOB >A~+Y9Au6 xDzŃv0YMnG.BJ:ǠpUsLV99]=L;*Z2}je BV)jbJKdaP=;(.]J3}hf-IT [DA]e`AhXA &0^$gЪs6>>8| zl-㿎tWlfg%B؊Zu0UI;Vvki-?aè Sle]ͦ~~bчsZ>6Ix2kn;)tQi-M'u9Y+/݆0+3"L00}rH p!p; %1a7ϩ3kUF!ZQL;£eD7 `dId-RR]tp Homb.I},f 5ʌ>Zf(x^9GEЇ{<ٜi})Tb)UD"mgrvƄI[Qtmkf)PH6+eW Epu8X{91?&1g#S(;MDnz֠C &ܻ4-!0w+9rbR)F <*_ulv&iɒxM$D %n4E2v{_0o)tA^A)9bBuxrH!h:-[{)=9%.RO ,donKth1jaQ@h@K=Ol7D!=D67>chvaPx]237`.ypZ )Vhʫ]B3> :eY*p-$ᝡL+v 6@a H6}Ӓ9=0=n=ѶWSh"i~^1i4PBѬu^22>Zv&ޛ{?j>Rob<' fH ߻M1LVpB=:_yK’ZZ6;Su{bI_bLЙzOĬIEMĵ+ Y0Yi 7?ŢI7qm \\>bk⚋eI8ø>MX+ ~d`YlBVͷX&8س,.|/Mf{℮+C8м0?7.P0f=Ђ*o~X=p,NbAB0chc_@yJ,< <|Xjc3GQ^c q,zIZ\IȢsQ4^|fŸ\˯Wu$g%ʅ@BKm .I27ŞL`v- kSodÝ+F~Y?/,P!ED⮗APPm`stR&؅$^Ě|Rp*+3*5𶘈˅eyw?myb\-.f5Mfʒ{{V@Njd3,' ޿i_2mحW)1Ѩ4RȚ䧠!WOO[ `)q>&w ȃ/oOuS-{61Cn앟Oj>L[505rA&@5\ޖ4RKQUlٛ9c1y_ltXDRg4L(!y6^*vF|4ۈ f5>]OUݡwett\ XX+w.@}-5!sɃ4%m"-`^Džw*0.Aѫi!`?_#k ( f7Qȶqz0F;YBq{>uEA* nS2wGArP۟N7 t`5;E T@ z%W}DZFșSZ0 :>O!V ,+\zR,ћ[#WC? D&h}edew{U:4 ۓz)0}T 3߂%Av o]U`ꚤ-$<Z[iINV"2xx*)m|T$75kt+qvBU,DW윽奞DG4Nʐ0a v5]uX\R\U}߃u` q4jɈcIlVnBgE-]9h90<^R -0 ʓ<Ō"XH2HMd{Zeo(Az D; >C*Mi߭ {*4A71}I`7v+֪RZ<_qp 3r-SQlA1=E"y,%e<֫G03W}mDž_PZb@4΁6fnʕ^2VcR{Nh?x9]D-]PyU oЅkq*Rd#wR>jq8i4@Iֽs`,4eU !ʆp>8.. =`F"q/*h>g0Rd Xk\N?ݙ'v;QPOf3<l7&oɌėM[|{d=OQAU4$yuJ7b,*O!:$>fP 9C\yoм6# KӢ|.XG>x-$a]& x՜t,=$ԒB eXh'ht:Wz:a.'o |]/kT(ؘq:אqw 3'va[w["|Kc+*ND4ߡ/tGnK&ORId0%v( ax2E2M$؍k$:咾D'[[ 1="];J-pU{ D%e5}#lJ0~;E5LmqBY%5wtż6YuaDYF,I/D-SZzuF!~%Y#qҘƸ/*҆[6+xݸcRP,mtzr&J\X 4rh:@`@QKwYX981P LɀȥR%V^mǥ{ Thh@"UIRgƔ>A㽵ԡ J3=gnމE5wZ<^ #h7--(9U3]eE]H&y0/tf[1TȗTxQlX>XsI[taTr[s)m~vcjD#9Xp}|b=8駜e1A](OZ͟J.&tw'?ϊ"*[ţUdn X~hؾ-P$o0 /:?&tY{Ny}<|Wxl]綑iB"f̂*ً,ޱ | ?Y 8/utf#`9FxfSo2y.Czޅs68kX_cl2!fzRP>?.vKqZ"r0/łŵPv#W׾oyӔ=m$epQPݯX Dٻ%]ΔPG7o{ ?jpAK'bL,7\M7FhŐv Yʴ&Dis'UH\ŝYOAl"E)i9yЦ\ ,* :LؕlNWj+ s4,7.JV;sOe\bZ 7s9s UXW'l&{s6\ݥ3]e4%͌1&eIt^n6ȳ`3}Jo9gq>Ēfb6x<3$` Ȍ'GW[tғx ;pa'JnMs /_<##be2M淨ђT7ME@9;Q\^yjU/ty*&c`I{(Q[աEͰƆ61[g&BV#oŦo#<7{Ce >Ĭ6Id7u#nyPe byt g ܞRgU,(@yKV jrP/]I(:!FYȘM$ǜ Uo4E&X9TH5=UWɡ먆h΍HR"&oMKJ\ /1FnKtG 3zN'Oٰ`Z~̀J gHm^K˘:.T Hn2A*ƒSW{' ڏښ#փ]?kCuoF:r̵![R|:Di{5|P|p(osJk2If |D!-94=e329,^=QF('%:oMmf -"n/jdA=yKܑ&b笕tv%S;6S;FC|[>{9Ӭu:@mwAhK7FW#hT 8mݔF}~DF0i[wXR^O'X»keQ1?mVmڟkcrrWє$$oMfvX03x)3x8V"׬/ ɛ>,A37ӄee$VD앦,ͼ}-PGzH 3t2 Ϩ!? 's6NщaɊ Dj2 UT7E|Đgin(/uŞd#JIZ#V#H>ۥU_bV\2X!Y>8ۣ߰tE+KآYIZ7E\R*?R/4E28Oaw!LBKP*'GtDzc$5ڔ Ҏ \ULs0'ɦhEA( `y/jЙ,e> =^. a :`fa'jl{F4yGM2:]qVEԖV~[]ٕ=?Y?d,b b+ :QK^ٻ<N wv*.oiP$C{U\:\_CK}S?)^%y254WJkǰ#g3< /\EsR9 g Ş&!aUTo~lʫ"og$weVƘna U/3 C.w[Hح Gut]83=k5oIp~ZnXa75gZTs@CfVҪnDK@K_K  L?]w:1.4u^ 7sC7ȣO =Jhn?(,{J]q[?QZm;Ͻ]X)YSӠ|̞<3IG iNuӒyؑ]$|ae|hJL 4./[z}LP@!|_qYVGC^\,h4S>?G6 ۃ3Ab{V==#%1NTQ.-B?q0x vCmޟZz|*Y7msҞ[v:R9|MSxҝV3r4ltSp$dxXfzl..=Zڴȿle݃_Lc^ũuEEpɌ*{D*|]ٵj)WhFay/2ᒯ? ?.>q4P Kdt_Ϫt*hbN-.#i0%͒|E9zIh[.'@L7НLT yOIK?L 4-*#'9' vp Sr/`e:)~S%^=YDREs:zR,ގ`?<U ,96hӠȖ l.:Qi ]˛#(~) kaVC:C4] ZPԓKźLG{tyan7mU&P+/aQq*jwQDs4fSF2?uzy>ʐqIF^hK&L7օ_ɧ2G|3Z,Eij^œ##JviF`ByֻZ*xݬq+5,8?L_"(%giocZFG&1LluK%74p o'+*9vM" cUst [Q0\x鉱YiN;6!}G22 sGMJ B7dPE4 sƒ{ɬV $j<4|,˶fjm|DF\@^U P.[/5g#O<zrꐑ# O o u":CL+(; 1UC=2H,k|@E2DnT6 pՕٰ`~>(C oB P'zR5P#IZO^ۗv@ZLn-,ifd-~)dr\{n Jgj@Ch;S = m}t6$qx վ/Ƽ&]\ˎ"Sʗ ˔90!HՌU`4 30ƀsfd@@<` /B_\ʟUwZhĉ+/>c*SpB`+AȠFyᱤJ՞~5 B{5[>(5kd 0֔ojCk)5:թ.U=0Z)X jKH自…&NC`CN* 69^SY=-kJ}썕C@EEo#'Դ&Nc陦˝aIwҖ*#2ե6u6⾾G- ==ׄuF] 5DP]^/n(=2a=o r=KcDZ`41|E꓂b{nI/2(9&_<ܺ8uG$(> <P'ٝ&xZ&Q2 LUhZ7ͮtqyKřդhg ˤ}p?|rGpyO&|d*z=uߚhQ+\ʊjtQ/6Hm.h撘7^m'pkp+CXAbަ016k{"6N)vkT2sAŃ*tAh؞$NEOKWNqv(v|i>kVm]nSKmʗ#S9E`3JdX0Oɼ@CA~Ke-8n0W)Q| /(=Y|^< 0[ < ;nZ6L&tΙ Fr,t(j%9diNl\zlS$u#׹ԴsfWO3ޤ"˻zUx5L!¿Vh9j;:F7[tXJ*~zFL,bѣsP?ŅC zޭ WlRU!|+IKN̟ImJ]ch&;ScV( m||N|~#ԲԛNJ]$4 Vx+mN3S~;F$XjT-l-P|`*WN@$7Pl`TOvlX7xx^tk Jw!/v"/,gquflIҀWz"hB.詋"& )Z]<J 6[  .3&PO V"QP DL.%*4/}a鬀{t*&Fz$p!ەW`Uг, Ǝp5^9]lf%o&`{2؏$̒"&ЫKf f8iI]y '2pGQW'V RSfAA֡ ѥ2E/%ГQ+W{#U8 heZP]ఇ~9#Cn i3D|܎H۷-ipVT^ }496C%3,Kbl^rR9G7Hg,]=) [;a 6aHCڔOGr#M$kU&k~Qm ƺ+4„xjW,Ah]S<!xfWt-tp\?j^DWs[q`Ot˂$OܐvV]/Ҕ3ht.4rͩ_Foj7``-h+W&[N@fo4]T_"r 9ϥo Ӏ8D.RX۩9 tyb 쉹8#eW Pf"|Gk3lK 4!PQTW+𫣐vYͽ&*ιANT_kK+n/xQ#Հ.7+KC7*v=W.|Lm].Ѵs`n- MJX>ҷXVs蛏5r0c #ǤbNA/ц`G<,"R!J֗ӟz'\IUhMc* Y1E> E zE dccJ?sHm6C&uA(mgKH9yxDL2O}1Mk>mTE*槤ʱKVG*Zh/WqGSFv61.:ѫoB-Oh쾟P5w+OK|7H4R}u}XʼnaR /9S:? ]͢AZ[îr DEq|0V@h:Brcuwu[3i-1#Zh4$%9>F#הAwLOJҍ  {Nܟ"#)Kk:WASKB?V )"h{zn8|Uo `ZWv!oR^Ц0TX-@e8nbi|`GNjܞ10ҒbC?tB +S>' x:GO\Y#_ e%CgS?WH7@mh4X,]=jf[ ][XO'}o`. j`>"Le87=u}b|2[1lU֠}vwL_N.T,ikME֍o^FA[.};HX=>uINt09 ,N<Z 09ZުYi1Vbhyz8-xbvDCD6$.X2DP{HO3AiHq3aR LҠ 3I 0Ʈ"կ[;c.[=_sT!\Տ(Cpu51fꄐW;eM:1qf=ZRF])<ߓ0ͷS' TA0!thzg88!0uG[ #5R\%` .?5_eQ8\ᨇVVi{ kc+f#TpAy'Uȿ_m Ws5 >EW>֤e.4qm!c,4E46d{FyŠŊHm62=u_ H?fs3~X~e=cdvZ7yVUU +̯@WxB|%@&^?OOP*Jr#zR_&1oZ` jP<)\|g42ghR|WuQƫA ˎ ^||ۢse2a Z=j<~(u.f)8Q ۀyE$*gmTS1q-zFs#u)$Bkj0Hn]teBV/xuM0!ަoWk"×HnB EJ淃5_"cU{sȕA->F 7LdR 4Y@JeI5m[`+K2j`тF,!R9)83=}jL+@AyQ,EɩV%U˯qݓ݋}] $;x%>j5 lC\@7NPk }a+9} 5^aUH! !r X_PpxXS=݄|en;ǒ^ ĔX- 102PA.. ~OĠYj8_N}ۚ!s l>342" ɘ%!|åGmϤiÇBX%5ǔ4٣$8ԟZG=F&Tpr<j։xt^Ylks!>KˍdMzD%[}5S\n/D`!S*5X H$iOߍ8X1 PN1y E2j!+{qguYvmJ "ƅfn3\MHxONvkUnҡP=qp碔em&j[d2 .-4tZm;0 GPD]!a+o:hM6ô4GDah{~ѼӅ=@1 & ZO~<\?U{f\' >:"*ũD~?*PTZN @ؙ7 ~)<#sgaSbN憵u!ZTT EĶ`3'Uj$FL  sz**gbl;s4cI>TeEnt,䘛Uh?rHRK}\x:ҏ6+O#%}&oN|ٟI>6^GwۭC[_^)7@~{BsR&u|;PDǓת iwG GV {V&4?#߂f sxۭێu…,d0ͭ 0Xvcd져nA׊A=' O[ל?:%L sxx4Gvgل'@}ϓ⒵'ker5rIʚ ?RzT OsS r}er@Me ߇3H3y-1̺^$-'㊒rO(U=K´>:/֣~--;sΊZn˿6/i<*|:BJN!e!0{",W saz,VO| y; V'M^8|nvă"F 9H%Eł4n)Ab>ၰS☮YJHaedps~2ѩVt _!khrjHs0t1K ̈Psut(4UdD+LӇxh-kI-E`j(v|r P[`Rγ?CNihvLO@s:& >?%'bamWYL:}TDeV]KL78LSe gz9h&X^sF&OǬX##/S5*>a%t6 κj&ɒ k6#kۑpܾ3X p%57 z:OdS~/5[X*bsơG!5뢭"v29Ʀ#Z.Gb*`U]UڂԌ撾b& {?G)#I3,=CW:QĨF.oyӗ&)ݧ #Η7eoK-.6/n 4УŊ5N~5=b[Yf&{4~ "!%0Z΋Fڒ])t({8}4T|veXZ*[kFem:Zvafj85 !XX `-Rɽ*9I+|ؽY[1h {PwǚX-SVBO{e7Tb+sn#X[N!WEzI>61*1z:+iMEMq}4M@K+jl+X;a-XaI\ZAsB(5Wn~ۋOĻm) J.HfUgrR՚m}@kPjvQ3yZ>+8s o+yaFRR & -mOr[¼*:Zj_t1sO-U^Ákch?b7^ vEeOQ~qE*.1;CAtJp:M/LZPk{TPnhd+NwMgd5!!4pmݱ(.Y@R)Cq;Ic5*+- =nZdLaR%5VWB?'u7T/t΃k9^Ku^B>kg J])'0xvDflZK&)@q 8>_*r`4~] ,{A=q.Gɏ3KsP64.?!  z𲏖`+t#igΐؠBs&6z\ߟWў1W!e|};\,~T>ICa|uJ4O޿KAיs74V#z(ݎlL(f%%0F9F.y&.o=ฒaQAml)ժ(&1 ׬QAE%'(E˵s+؁Ve !CY|ǪI֋#gH/{`1fr[A&:xQ 0"=iT! r֊F^搸yC'5+|S;rFFsnk}h~X!%Eݙo lCiI4lnʴ"ȍ-]B˗q,#iY_(e^Q&يYPd}'1wи!y=HIm1<!N]-f#SxoF1!fƈ0(BJ?-/!AsxL"uo!=%iImOR#1$<15xR-v]+kcr-TlΒ&0*svo4J 1Cۤ\Eȁ1௴}7%_fPL1`ڞR/^pR93gŤ8іA?AFZmdn <׶d;^?녁h<n L^Gg {bI&uܴ`jv곊w܅iWɢoc4!;'}!ysy u3[܄;Jaۤx휡oL{dd+=k9uc}Q@_;TD>s73#h0@)|}Zr4\hWO1Ĥp2|7vgCY:3 On aNZjy4?C:PŲ'b<=`Cƍ85 =z$h,OE+*q9:O8켼CHEɄKP lkJȞF9-T6E>ݸ-+&rOgR,UY]A] aaI*8c~?m{6IM2PRһZtH.Z?\3FOkE Z@TԾ"(E"Ө#.;R\U483n(~YXKz:\2Lj GzSd-2Ȉ_9Hfo-VЭįmk-(1X+`$jR=IzQu4\ j/zg5N--2+aGh.ǩH϶ f$b zWSw:1S߲^r"ae !]?[ ̧NL6If\V,7y е4MH%4X*˒Q4 s l# evCKnTࣂW8}BS4ܢ7}(n8zqN_XLXRLLY k˙. \ogD҂Ո`}i.HA8;6y- ܣШl.K1 t @ocvb=I' 6⭢^ueW |dkFe${o)BE9BƑڸzG6mŭSF~aRabu~SwK=gLr}4Rfx_BY25 \qlT|i'rLoODʹ.*mSg! fƏ~&CېNJtS:,a@*oGwgG@ &̽_AjQ-1#q;Yޟi0q h:,fȴm#6yA˃Da}巳VΟCf]Oi;(){whv`X0#ҏ奕BQ*R=@qyXfQXav(SFN .ߞ?.ҁU!s }J8U2U6[}ý{h RΎ91|ƵK 䜤=NCՌ03ў]@͑?zi?aHZ2B֣3^^aZ9eZVG|D JǥU)^.F"(BDΫ `/Oɋ[M8)hq{cw m7]i  xӺ nfPJ>% rm̥;A^N~ F\ѽE@hr#Htkh(aZ; n*vJԩl!AI*,T pmSN{Y+?Ao<<uϱ%tԸ\R3N'3[ʟi izIeiˁ;W6Jj/jQ8-y?Kur[d7x&¿158"P`1.ёl1ZiOj&1 փ|US~--T u͠-k-h0kMM(شw=/9k98z*/8?_|yFw%20NhP-o4V ,Ts|FKE؅~rj.DvҝN $,_=cМx&,Ⱥ.$OJ[f\rRogk[.e1>\ ͅç䜂z*40}sj[cU\%oՏHo/ Atέ;\m H 1 jRa#YeNh:-8vRR3..eNξ!RB}5x>A![j5w=g %>ր\ yEKI$6Mǯ09qfL<1Q?3 v4-a(ݥdKүO脵 Pc[h頎g$µU`&/6&H*\>^]cFQV]WV?`Ue;ի'.=/vY=6۪Ņ ]z)Au Gl;Ru LXw@ mQ7~_r=ivVlҴ 0M]?fMgcuzk[Q[D|h]5zZnm9ns|ݲKZFYie PO?Qz/pDpu\,QnC?nRȦͰwf Oc.QuJFj]/ש [s`@6' X6rgC ^48KCPU'|z.SRт߮N v[1bxnN^k1ʑ\Ib~g nBʣ 1wT} t X gjltRc8wE+ۓ(,_ <<8mi5ꖵY0 z~m+ޞE#2z)O`w.9)P}Ӡ\] ,V 1ŗKuejy aNuD_b{҂8eO홖 p.wqje:_)?r}(-~QhqN09Tab){r+P^h=ѨYA1@~~ښ=p5Cnшb&W)1Q%>,6=_1PO1/"a xossv?遝KŹ/œn- w6f+$-n#!*196w(4iDSՖp|(jM5u6W(T\t5 "+c=^G}F@ܤMA@XɞM)`AnE2Z, є$ ~<-)E#sdf tI1 ӕlZ&F YQI-0n1({Z1SԉZ7KL] &S[Rcf18?R=}l-e 0hpʛ 鰳l**|9SJ='iRTbSKV~9(C-SKղѧM׶B0j-TnșLM3sT y}{rA =W6}>9 m]s+WE(~ljZz{ =%͢-9 h@:~p̞0Ek,O?bb ̖m D69pЛĈw_F+5(_IFz7a(n4;~^Ox }c\IQ5Q_) ďnd=33QL#?l/`DvsѶbނ*t: u(F +*QO<eb3hsrgQ1jK[՗8V }ը0ϊ ]TBJ_u/ ~LՀ@Q܅'Duf3Z{ZؔWS,<,axTgz7T,xPY^g{pF35f ӱv/lfX+jL !){wˆ;&ϲg-EFf⤃OkshvŒ_s" Fυo(/TD8T)o L2Y/Y)O'E  cLёJ* W_[yx6o l.h?l9Pz on?~ <ڹ]@2~hfރRNL aj?}UA:AScfJ(j kade=17]=ewhݍř4|* 'ܦ^F Le#׹l΃`+GP4> G$Ɯ\*C}Y0O%j$auxpϛ4 q;vI?W;xuRoc Xof-?>vWpYKOQ<^`mt2O &~阴R`ɟ!.+C߆jm]ƋƮYYn]`țdXr MJȧ2^Äm]TkW48R;]|\$U_ֽ}A|gowK& ;s6 LN!-SnJɕ߹~υ~8$8^w7e p.є$n? TW}5SX'=+ʒ c1H-Rd#uOXpT;3Rٖ< 늋N(