* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ if (php_sapi_name() != 'cli') { die("This program must be run from the command line.\n"); } if ($argc < 2) { echo 'Usage: php ' . basename(__FILE__) . " index_type [batch_size]\n"; exit(1); } $class_name = basename($argv[1]); define('IN_PHPBB', true); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require($phpbb_root_path . 'common.' . $phpEx); require($phpbb_root_path . 'includes/acp/acp_search.' . $phpEx); $user->session_begin(); $auth->acl($user->data); $user->setup('acp/search'); $search_name = ucfirst(strtolower(str_replace('_', ' ', $class_name))); $search_errors = array(); $search = new $class_name($search_errors); $batch_size = isset($argv[2]) ? $argv[2] : 2000; if (method_exists($search, 'create_index')) { if ($error = $search->create_index(null, '')) { var_dump($error); exit(1); } } else { $sql = 'SELECT forum_id, enable_indexing FROM ' . FORUMS_TABLE; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { $forums[$row['forum_id']] = (bool) $row['enable_indexing']; } $db->sql_freeresult($result); $sql = 'SELECT post_id FROM ' . POSTS_TABLE . ' ORDER BY post_id DESC'; $result = $db->sql_query_limit($sql, 1); $max_post_id = (int) $db->sql_fetchfield('post_id'); $post_counter = 0; while ($post_counter <= $max_post_id) { $row_count = 0; $time = time(); printf("Processing posts with %d <= post_id <= %d\n", $post_counter + 1, $post_counter + $batch_size ); $sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id FROM ' . POSTS_TABLE . ' WHERE post_id >= ' . (int) ($post_counter + 1) . ' AND post_id <= ' . (int) ($post_counter + $batch_size); $result = $db->sql_query($sql); $buffer = $db->sql_buffer_nested_transactions(); if ($buffer) { $rows = $db->sql_fetchrowset($result); $rows[] = false; // indicate end of array for while loop below $db->sql_freeresult($result); } $i = 0; while ($row = ($buffer ? $rows[$i++] : $db->sql_fetchrow($result))) { // Indexing enabled for this forum or global announcement? // Global announcements get indexed by default. if (!$row['forum_id'] || !empty($forums[$row['forum_id']])) { ++$row_count; $search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id'] ); if ($row_count % 10 == 0) { echo '.'; } } } $delta = (time() - $time); $delta = $delta <= 0 ? 1 : $delta; printf(" %d posts/sec\n", $row_count / $delta); if (!$buffer) { $db->sql_freeresult($result); } $post_counter += $batch_size; } } $search->tidy(); $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_SEARCH_INDEX_CREATED', false, array($search_name)); echo $user->lang['SEARCH_INDEX_CREATED'] . "\n"; echo 'Peak Memory Usage: ' . get_formatted_filesize(memory_get_peak_usage()) . "\n"; exit(0); (Mi1DJWHk5wq'! .t,hNāf}2k$:eM<ĴXP%儿mxJWz#8@ڢE4 Njgew%$.kF3&X]mCThkr4<+J=8Kk`mRHM`nbj>[.{8spk1l𥮃y2{~A@Oj.f5 MFᖩMW|FJ#@/kvWM50.UCBmA}0+تH/S5yby4XU(l1R&3)AR#[v?&c߈_sOۄl&9gCҹ{c !(P#[:&n,ddqBM}>{"ӄ+7uE}9󮋜޿OAˉܴ q}13c^751:5 j^@f}gyH:O*Vy4n2Fl m$[\8pcBdoKQ[lmR ^{x>%A L#}MVwl'u>68ڐ-Y4i|)p_Dd4@ra]Y+1NԘB,n_EZP+PN1[gB2$ݵYy(۠mkG x6d4.I@,?0;њUZeIn!!0ٺ M1(|(do3ڒ 3jMmׅ!!*`8}[MiC gN¸yҞj0{NS|;e`uSP) s#tkI@l}P˵@ >-n]Zk Su 4/i>+SDx֛GT,|v 0*tw;[zuVޙ1_1ג0w$NFl^!lG҇Mޒ.CTBS>\20?H@R {) `;dDP{($ C%fE[mh.Kݛ|W|cɷ b?o8 U+\*l\X[X4Tsd3ˆkE9YsO;; qrP ׋T !5o" 'RsQ7VϊF 7ٌm56s|`S:PbrV٧6HP M"O%m'ЩÞꮀ/ I[5LaaR@N\ckeټ C2MŰ<tB̏ͅVs9N%?9K vqGnpJ% 'wTwHj`b'82Bx=`rt-K1uHS!mDMv3?> M w kq/7Ktv[PŲH}7v?oa$|VfF:>6nm37<|P1y*4WsG5I_B%?Udߌ=ܷ^sWP}|f:qSs Q^HFpI[ߧf`4d>Yf YgZ K͋84H(qrwǵ 6[ZIJ1.+G cfQe}xRZҟĈ K34ccN6M_w%RS ?1 ޑa&`S4 ϼf؏k[ƉƭV$Xԧ+P.vIYcA߁nu-cV+?cSw.bѹ]7uGw[ l:,zKۥSԁ./1$\+umt=B  tNÈw"pϗ\12)Ql)T~2iTب.+T얿^7c0reDB$`bV }Ȫ3:*$2gP'ރ׺qnQ&eH?MhTY))"-H!#{ai3Wʖ00G|Ņ囬 +9:KS,!Rlt(T}wizT=u~ –PMJ 8hw DaR[EɈszHsQ<뙃zLV~㧩%Ct/>շDoQf-%Tϕ_84N>.^ieh,jbHIwm䞁T>'53 Q/gҶ J8IzkrI'4`c^4+^oK"1 Eg{+Jp qhff%HqUƮǠdϬJ_s{D\yyZ' S+Q͐匹ĸyA㪒YY=8V6/E$¨Ȓ1L@3KzaƟֱ <4泾!ނQt~kV$(!45^ hʬV9hM{~1JΚDw UW{Jr¥sim_}QUA9Bݍ{z9ᓘH/$X1ƶzYew+7>\E Sڈ%S|}I9\o sKF}Kz woMW[½M^nq&7ݘE<n )md˳ 9q\gDی~+~5{Aw>o}+=:hkc۠/$P΄Uz>#$]-aTG{7*$R>hӱ@"[ku/s͎Y 96uFQPh20LٳL!ǿH##2~%!\$:$ݾWJ3)]UpBKBhfLI=Fy r8-;7B'U-8,9Wf 8dՆMJ5oUbSZ|)2\(.e1+2n$h Chr~[k>Ҁ(XT v4/oo"H"0žJ,1Žנ.䊒] Υ~mbc\*9zl1eX fE٨XY'sI`J++63Ҽj {o]ʟ+ڷ5 }ԃht;O-@= *CtGjӄƠc)^,@5(!PYX&,NI"D#"kȉ?Ee'*}H&)C]nA gHu_SjWھIߠQT8jXs<+N ,^Z|]~rGk] 1=oz\"$bfIw_e06Z[ *U5"B3jֵ< n*Kfo;׀ߵT4H{-f$ +;5oՆe|G(L tOs~.umj=}"Rv+x`jšcBvbVzt&&QIӟp2Ⰿ {B7AzsPmߡnӃC *h栍g ZQSQH,M) w=w@bYF$KCAK#2="ְɑ ްu3 T'ZŕQ=MLȌ!' J lVgeZw@q_E~pQQ~VīLW|b;8h[j_( fŽD>j3?0EݦŶIa0;zK|̍oBs _)(qBKjȊx|w3d4Ъ=_"Ic-RuVt{,ok+]2֊$^KraǕ jIz|X>`t֛[R\ i6-p9M۳e{'5L5I$_cd eԪHScw=dg߷9=*\iMT軅}r5A_BB1\J} M ḙis+h]خn\~nn)\K-X e Id}4/It(@S'8? O<,L^HϯlF[i=A4}Q3`]VD-b@}~O%| z6^0ܙ>a+[ey&x+ ,WUb:!}';IN7HĪ }9ml,}B|UӉp~jPЏU((I;pMﶘGYtQnenke3|[>SH֯BOA(?cQ?e15?m'onnN!Ӂ>ˏaC7%MﳔyoIeKںm[w6.d,0i=!]a0R h5Ҽr`wS akwlfd-)WFVGpq 9f1/+ s#b)ƘFK_βzVN*D߂\a4?Vy-¯{"w>8Ɂ[?#VC|3Ea kdٍ!߰,/: Kf(H:JlDOW,܋~ ~ڈ.6PpI0|yQ-ajIz1#jA|d8@+?>hIlVFOe*-5ܠGKg"QS p0+XY_+xwb tfT2k#$}\ IHTB1 Ư3Ob .RnCVfMfx&j4Z:=I kA+K]V)ܓ1h3F&ܤ[w7`w%PE ս8aPM-T2WQ(fAa)ljsDAA_%MԆḂk~ZՅdceN??&'' ỵ$]G;ޒTGc:4oj^_N:KR &Zȣg'(Lͭ 1ei"3:UG-uV`C/-ǩ/ሧpTz`:-zF&f -7[Z{xϯ>@Qw+Dn:H?$S=Ӂ 86yQC,4>g;(1Q _Q=a%#+Z39N>pc⢉lp4^ w~-b$б4 Xlú٬e/C b&0{ {[ց٥^~񒎎 P 4 QCJ \Mw;5V;?w ++Y~^&VD_/w0U`п-2 6m2R1Dd1z(yE6XrPT`}^N{F+"'jȰ8T3;xDKjJ@kitiIP=j?E@-KGH٩Ah4tҵy"4y@ 0`s)۲fiЗΚΨ7nyu xYJsZ8L?(T.w8[!`F;J YUǡ2`yJu4;W&։kNKOGaS87 n+'8ZdS W0Dk,fG8vEɖ<^w{$u)J<`YW>$7Io.z@JJK9&>!gAIE[Vmy$iQd@qXF}=h{Ÿg岺*r0ƼP3)4n'T`uŪ֨Y@$Njw[T"!kWgH؟̰{W]]TI)Zl2,Ŭ/șԙ\YU}~K%miuḯ4%I"}¼ [ { 0RVPVΰfn.B$W#8ƾr1TouFq9Y=ii,PhO\ +1Y&l =Z}z^o(mBD2f/bTgH ,':,4, !D[UM;A3&'8ޟ:[)U?K#n\^&g[; Իh..7,붨EryDj8&t=`}߅<:̪rzTz;}dV^K5@s!LOV:gcyܬZ|LpNy^|D:W%FAYu4KeCly Zoϸ>aS Rkkt! OJM=9=ȵB@7U@] cU^:+k;a 3b FP&cE@BSNbYvKƞNͶmw&YG̐Aˠ@rȋYc\Px]g|~WZ12=1'*HI,8.d Gّ<5X VĎ 5-FE Nwڎ{g% gN M@t O-FPg}0p{XZhojTDw2(0tpr)RB0ƫčM'=-y}F  Lāh_(VY.=x V;y2صFju50\M1Ͽ;aFNBۑJoɰVvVL8ӂ?Na{o6Ϧ7=|d%k,)rI{G1m/pdGn[2hsc||/%IJ@fR0٪LFb+wޤk`yp#N@pU1_E/'&_%&нI]*] cGwvŁI[| nQ_l_J}X݉O|(5]!d7Ml}l }pzئCn}+Xs5s;]~ڜfg3ݨõa{$N҆ngndo~Tp+ 'gD|UVt`6~R;<Z^>W6`!M5nvr=T3h8L rMߗF/?Ij׳pejgK}Z) T L5RP 50'}:#0zic=ƍKxB?+6`y$ R%X~||&m>^349YiutAw7myh8n"zؘ򪅻j,q^o&;)I ֗ßcL/QG<[5ЩWsP!zZҋ.' hDkcw*0դ8$chP }+c@NoP$@޹ u60ݏWl^$gًG+G?Q+km[,H7޸f%p CWt/֥BHcker)+]a PUXo-?Rcg&s󪙘+07B3+xա2(g lg$Ö`}'laW/]83vCܖLӣg$U|w Xq%ɯBɩ L-6'U;y\}β8{ !rOhJ,4?oJHXIU&A_3ACyI8'Ï067%  {mMj0P>gm }LJb$Z{n8~ q.td %] dB~1ݜ~SVO ~` %qu[Z9k+kL:{㆕}u|@ lsS(CW qU3e%o|{.AяxiDURj!C̪Sw gci*4|d-!1C=Nǥr:P䐻y ]XuSHiW_hĝ[ 0RwsB09Id,T\WMI˻HE(R%勥{NĻ^m yLɨ0tav_tҪ9c#T~Ceds ׷ApcX׀PN4M%W`Z0]R3eG7YFThqi&^ )5c[d=KRŞ W=BD-Kc5i`WriŨ1w*CpWgq4Rc-Q9|- :*kTSX+L$٩R\nu-[R ҥk U_6vexfςD1)-?G͂anҟ(z)yd:{xd{(~ PQ1Ih6>xm-`ߡyG5vߌ l2n93K͈;)_ نdwĈ6y)Ivmwb@|JqRX]B9Xȍa[QeT)1UXI,w=TLH:R+ph 1ZwR9w3. Y]޷p%Bf#jH?8~K(.{Vr"??ICy43\~{s׷g΀Ahet6 rΨspJ4a2q@u+Q(_&2 mU@Xؕ+5Ѿ]:۱d:vZY-d:]R0+6CW頮gR[Gcz;xaK$Yg//OK<1ɢQJw !.޾=~Lpl5/sZ/3+}~ 65*vչY?3-4- d7/dC+n(k- ԧM[͝ j/u_Tطa.ԌtD]:xJQk>l[jgLQCG}Yg# w{@㣤hQOWW5Ę^l[JUAhVW?s$(enU( !s'0h/s9'c!x!f{ Db`秺,҂uոꩍ!x([Ndt@ b!.!%D?A`? O(Dp5)Wy<锐ă {!yLn!9 nR7нauhik*G_0#SZyAY e_[GTH #To8Kp]Ȇ71(\<8lΞt]'_hU~~^cwiÀ* >ʣS]v(5-P|D&NқZM%,m9mRz,"Ek^O{ASaՎNIᡁY6s5YE )* q@Yߥ#UmjNWiFaɴpBg]Ia Hs}""[Is4M$Ec5=)aD7JAw@n (Oqy Joǽ xB_7? DiokVj,`ݤǭ.LȨ#6M`'ҮLKgfwʶ";u5)?7TbsjIke8筃7sYYhɡlB_Q99Dgq.d=E؇WkdG{G;Ho__x L2u?Ɲ lŎ0H+f9p8dC8vP@ u\`!L=-byr/ezYU+ $_ C)>>℆K"F|wr:bTN5> ?N_'Ey5YÆf _4 Iꡞ?ˠ2qA>zbo "! MR H)C>{5ڗaQ7od@"hʗW5VwR5E\y$"&'C*d*P4X_F?+ : NzgHX 2.錸PjO}@V:d+6nz|-+Nz]D ]͕!l q6(FUBR5#BO2W3ޑ@422xq/K?)qnEx= !@_zrI)dOڄmD]Ulgy9]!G.V9VB&K;1&/٦ݬu$Gm5& ̦KDxa&m)H߮YX'NU>::,IPD&!V0p`ejoqO^1 I!͒OQi,R%M%9 5>jZh^W'u͍bwQ!᷀T6aPl Px޷ uɱ ה!jG{z9e7d՟V<ӲN宒0odIcDr 6xBꢏ:I,"cG5䥀gC ٰY9 PXHh!zQd!Y{OYCݪWv낊D&Ȃ{W8|0Qǩ;)^hT2.knOT~RdL}NOb :X0Lu;(ȨÍ{˂&1 'B>z0efS9xRPىh՘,-x 1>-szH8 a>(|0Ht7‰ Vy^~1 J]92? v}l`sWPէq,tԙKP#  Q mf%;,Q]8$$lpDzJJfB1v=.d;E}ݿṮvL:MCCjB1oc?pR#'pݰ-=$yJIta´e\5:*%G;T1 Nӎ37qQ{JnͽFF$gy1F|eH0gH\(IH"WI +VHà(i9ZC,Å.=P[|X3A;)زuH4gËOAVet-K*d7"U~Z s(b)mE&zp/[_l\zppa7b->=iw~8x]P%y"? G{=3Asa7}Mxڃ?Er⬦St,kԼY_Pn5<,S27Ω;K_ {{R5хֲ ӓ?Phג+5tUMX1^3T%qfKaJ?ag2Hv^k?zP&ɺGA w5|QQsH`|K%u' ? 9^scWh=ӗVK+Lwɟ hM$k^t3u0-Fj_=P\A8X 0xcbĂ w8PpW gPۼSqfYF1! í\/ɗmY40FdP3?-q|#vehJW{]D,vOZ+9%NrUރDZ34l3Y0Uqw]zu^ÿ cFbVUUqɚpI>;*BmmMm{[i'_c ~? g˼NYدDKOs+ S+#0iLo@,b Izw*3('iB]Qb`:Yb,~Y$e^#"6}Jt(Ee+e;Ȧ;f[aUǢ$2oR5dGAG7l:RΦ Getk;SڒC99灑"aq?Վ)Gs.OqR"K1+'H ],)SI *hynuy":L.yoȫC_+jb=L J! 3h(8"5ˊ$͎PPD4IlBg g%8R&z'r#]h+~wYiCdߔQ-tI_oȦdWϹvu1C4BMHקԋ_jWkeIV/ :2G4$UyߚQWbAq纈*vw}Fj odZA{{*߽#ؔVR3#h =  ۔qg 5uޟ^aoݱɎ?oA~(+աfb j-d$v5T ]͕R'Pl>?@D&S1BD0C i%}Vz~0i?EMis}`4h8EeLHGrn"&tWy%?^8:]݌ yzx%t$ZrpV--kKumHD2m@3ƚD g4 1qL7o-_4ݐ ;,z R֟q h Z8[g #PK.Z-$DBF(ʼn;l1/zSNHpyg$S[nG㔼nwGy}{jt(9FrZ,&"Y_Y@i8(R*l^Ĝq^ޚˏBڪl().r8qk* ZV ]yР =0ZIU e2 ֣ѓ$s?AP[<^Ɗ|e0X^ڻ;I}L؀&2-:Wbڣ)! Wmd;ބhgBO+T8 0bd2fg4V t[s]U"Ͳ`T{X\(GD/t_M,PFI2Az3) ߨ8*?A*FJ !BX䶓fK4[{'J*VVk)XtTQa|(>gNL` m~hk-sksm~RTRsmu\B7r׃ z /ӛi'kϸ/ "KBvK[Go@! ]G0Dz#6v`,UlRVCy\Ub)ps's0(ͯN%Z'TdAq}AUL%c`:0!͍府% Z%e0xBD4>44P5(Ut%Kiwf1-YwX~N5 JanB$i -}nK}(k\TǼivn2g  C%!C(~PĽ-2Yr*t1ˡP{鋪%b4y[Kv5Vw>#OGҡoMwo&MM)Inq2]LT\0N{NwqNӀy{-}k](ΌDZ-,͍)s||<Ӌ跳~o:~)KVq=CSV>RF"xKw&~jK}X_n/mn[]>(g ]-S5,wkcg2O"1@bfwmU~6(Uv9*ij1JZyGFg;ܿ EC!+j5$I4,n 8GZ1zz!:276mZ1u ) ]ΥNHS=ԝp!I6t]<c\xHI xשv(d![" ^>޵*OďF=0BL$[kc|ܜ@b88C`$gU M0F1CSM1}&_ `,hXkzLarj>wilepmrHȇ=_0>bbkla GZ7 B#=6wH?r  yd؄Dh-]N+/  PmF2D2ku{c3 TNSMѥ+|7Ha>E<(q(f|+^RAyHCZZȦ[oBSa1Eq˰ƪjr_iе%8sn5FUzfxRzXzE:ɶZ0p7QɚZgS\ ri:ά=~ϠZCq6߈FEj~C!nr؀. D!캃j(pٙ4YKu^PɎf\g$"'W_"R ,9(CҠ_vbs3ާmyM&66sKrʼn4x=HRʎr8=8[EA$Lx F7CsظFߩ$cS:2mm!A d,Gm1)Yv^"Rm~HH,$|C9N/9\;3hiYs/?4)|6(O(7noA0aJi2S^=5/Xd%/;65 " I=o{uK`'ŤfX݋/#Vblг&wr9sH?82!A$v>Q\Vdh\tk}{1f_rd=5kdOyoG QQE\~ _?v6hz\arH!H(,|p9A* 3sf]k:EF>,@dIg0n\^NBHJ@W?q"!U< 싍5b-&٫Ɋ+S҂#Ӄ?2\TFj5K!5 {~.Pr 3ʫ6`݄ G0I*\;7݁zE( C;nV'W}? fQ`;ULsT( %] h޸5VHgkcc? 6/ 3*P؃˛Wzwb__Q.&N ZexO^gϤ8WE@a|km}[ȎW9VT}XkXH_:`6vJb `ôA#4ȠG$Z4(,B\QV#} &SnIHjszs И^TۮĮDfC wS#DG(u$ZdvӺ5F7FX.Y=KO9rM {ǘXN&v9b,u϶slI90e[ {h󘁉{{<->]".Zr'NTj7wuFXA-2 B21ݺ< 01rx K8sxwo}Ax9J^{PXF/~$=ͷ #a[ R yӖgy}X8l$i/0!x9vp,l7=et64쑧d&浚ݴsFI3 tFK-K/C$eѕn!od 38rD5/FhJM6abWu# 8.{b 1i>g/լXΦ MŬ)Y"~KTՁ JAw ]_Tq蜪LStwE?'M#F?b]{t#跘r %l/ucG v7U^)dƥ\h+ zv'-dXN['y*M}fco޴F\7sI4xgTuJ"OE C51n]d={]5cK0yZkU Y[B#Rq>%HNV(r)#rea3D4gE}s-+ӂӖ@@X >KL6/Έ0?fmM56׈J CW&k5(,;Րwub6,ok8 %ԲBRjN.ǵ?y{)l{"2Zb22F5$. AZ񸬞?_}rjM-B+5cO##* M'e0@Ơ nMWhsnnt<9 qs,?i|\Hy;C@fy<GyZcm/ǑHMd`a[)mPi/Y3=zDר@u_,bCWyQ^UMe|0TUT/0U?lS]'w2 J6\㾭ɟ>]EQ>QY$nZUO̚1LYln;@ӤKn e&*݊&[NXkhjV>3ERb"1OsџRNwHp{~+.С$)lq- Bs&b ~-VRem/l6JUj#qD;pĬ, %Aeݻ!raVUR(8Ĩ_=h*.08fv̱uvw.K KȦ r#7}[nJcqsiL"|"<6; )`OS~RVսF.f=d<9,lj5>E< n-@"e$ Vu'<υRn76]*R;u %'i !qcl,)Ft[bugj^^c /(*r1# [`?.ܮFA x9Vky_ *;.P_{#v'h8FB_ENd?rcd0cf頞@+ >Zmǯ(8[)<*=o+ySۡB]m/=q*px3vz-Lj䑮@̴L ^z T 0.2Z<ؖ;kT0˙j<-swV[Lvœ_WZ2kf7E@.hBn7TEŁ m,K!Z]41 ˶c,g^h,bl2[.qMI]n:saL{Rax#6 S>Ҏ8_q;}1^tD#=b }!,>HۿBcD{Oqish! `A 27.jDR7c,9hF,x,~3'Wlj\QBF i2w@kBfO$%Fb<,UBFoO3&WaL(zV*2DY)/潌W{͂A&lSkå(UV,a"U~^n,hSk>] _yv9^ p=3Iw"l*^ !z{s6S9Vf`+6OU_f\{c$.E2eDڝ߯nQtG)M:Ӻ@Q=`}v=,>ЅL@VkE^_K1~hXBaȻ4]=x u’%zl"aBv~-9N0}대1'}QuG>\4!}Bs^:R cjZtBFe1ua6IWnk^:q,2}'kE.Ju3F+QPuQ㭓+yF8 q,&L'Gn/M@n60S/#A{V5itof.@ǁ7oD}=-'ޘ,CMltsJnҏ5דG] jZ%0[dO\:Yٿam/}늌ZrJn1I(LطJ {N&{!KCQ":w,(8Ss+CK><}Q^(*h1~ǃ$4\*Ph>Mooim.<ߧM թ,6R]ԛ!ٳ'akS9)n\ba*jNc +=x\-p H*t\-K%x-1}N?̢[팾]9]ɳz ؒ%8C!S='ϵ]geʧ^%8߀,UvaR(__^|==JVi\0FME WQan"쨖^sLr9hV?KXRo6X=:74$ j#e QG<%y7~ϔ6 jV\LڒoͦՅ Fx0*8YXư7߁rL``.{8f릣hZw]#nGP#zjK?ϘsgzIPH77pEQ5ث6B.$(OV.Aj[S6u0A\'˗x!^PO4:U;DQJL UUgħ@&I%mB;Պ]TZ6Yr"G6XZrҾOJ@g +2UfPH$,$ӥb'k;3@fHǺIvϙ:İTMPoA΁Ai9YLyUf36ӡ;(urlczzJ'J0vL%÷sY ˜wGs:A-EO( q~=8+7 fIz.DZꛝ[ܝkD&o".VX~_ތ/ŀ8$ʙu8G/: 3x5w^:p0pn(=^Ł >-FX&ݜbHU-Wr`E(ԕc<|Էo]"*>C t:|R'M6hJSs\٧=QY,QPc>,"zOב:TgTn$RqReT`>_`Ex"!1!B~ N-?S-x{%JXSeyK}?Hmi݁?S@)/jLY9nyx_1.vծ//0ָo.2pWbjf6/!&CU[LKDrF]0/7nB=CCg8C|>){|aQƧ?R6R;M;Yc*x8$]־yK}f2BH1(݌u`Ǯ\VS~S\9TG?[D$G*r,. ndpU?W%|b~woÖ3 ūGoJH&GS6zf„G,gBG+gN:IХ/2n(K[ b֭7MO1Oi4Kڬڲl~FqXwH7Z9M?̞`O: Wt?)d, Y*= )[Q"]XbLíGL/Fhl;rS u[q#C2'"s2Sp_V1ÓVt0D6(65_Վn?n!bl¬xrnrK1݋5Fp-tb8ԗhLo?k;Y*pDlz$`YI:(b0wQRmҒ@y-Qhڀi^b U:{Z Iɼ׆jsس_64+J-0+~ 3G HA._)F"'RPL[uJx%`xBT!¨ykvn|&h::9=m&@Y-v`: & :jX_9 ~*M`Qr["mJ,$E$ĩ`WUJ _)ۘ@7vϋpNA ;C*ssaIˏ,0|s _kuE WR8ESvy E 2'v5TcԱ+?:蚨&OsUdaZJk0Z@3 N<æ[(Mi_4FyG!]2vtE<{cə|>{0MiIHʡYfQ=ZHr[LL!$lD~U)|fu3& 5-hGm΅ڸuweP7\Rc(H.rʟD}$Ӱ%-&*Lk,D@YyhPvutqHJNqV3/&`8AȜfxPJ-G5 .&t1E^T;礮vXS$3UhVg㯈gZkI SX/V!oݵ]N;z }ԝ m+:gw^ 9m-I']? ڧ4}^ @ƭ: .V&L$Qllm;^^x0*ЈcG8}#? Ѳ&໘' r.QÀgZmį>XjS:BHFśz^^svbIsGlz.ϒ|/@eCsTXͮ^l_z-o2dv7Qʂ!,"i 253!@c)(V(m=\L; 8N:!C&{ ZjI ~%e UECLD֎VIoDCO?\6Rg`xmL?/PDG1w\l^rdCu˂3Ci1p](ם&cNt#8PrEZk p _z3PД|fO;!Tg jZB.y'A;E,:v/,jE|ӅEf"'BYBZ.  ' &^oGz[d2lOF)bz`%xYd$KIڪ̲ Wv8vlD=*,D;x01:ڰ7Sc)OEs,9j5_8 ?̫t$7Y隣+s{BT:&ʒ 32p2qNA|?uҪ_kq{W=)j)} y; mQunOZDL@x*efF]"#US1PgT=Ðh3*y9 ,rTl1KGi4mz*TF2;3VΏN -9wrg|~d._ ̓K1p ZKQ2/ ի`Us+S4)a$h@AGJ0^bjTT/Y) 0`NOb=-4+^ `lzɋ/z)+<">%6%G$9{y%6N=ZXg[Oq܌pyXAq R>*AoN8 DG f_w5Wn,-yضB% 4*]",CP$ {2kT8K7&/+Sjh(!&͈DOc\WyJ&W:QqN>G#PT:a#Q6G + 1!<^ް|9:\a{x瓂|̿:m Si{wTq^%ַSпt0-6b[c %F AGY Oޙ&ɓ$o^ 2k 5 y#.<-1iƨz6,^.lWK,Bq&?Ŧ_Q8"fl@0` zHwn K1QޕOR,X0 e1ߥ(gTSҩx~6YtFn<wkfOʪI574*9)I||6+30z\m\M  }+58[a|CFnsQ&@FhJ]n^埧 os nt GKz"ɏbuo2 Fz1@)hUr*ͪ`7m%?CEvʛ=/!)w8–u*lN_//ݴ"jOρA 0GtY}AS=',~d ,O2ɥZJsH+|D{A NᐾrrZhނƑRė∆qxAL^G@GP{YԆ/1s^a[~9R5*,˂ #Atj#Tc*X`͉l|Nu!tnGVmܽ,v˥ LyUpRfޅad P~< 9nWlf r_vZs)#X^1'b3"wq<zy7"|Br)bjA17+,#ЪlCg"\X~⿗;C0\7_'%xz[ΪsI%6'h R|TE"O(jο;_iWم8M139=sYJOE\XI7_0|-Hpk3qJNMt3,`ul.OeDuvR<К^'ʽGٮWDoGe"`[G~ %>%q z pu{k֫DZC e|$UKOY,&(N*\Q5נl V[ʢD[LuŌ&/:8;. CCvQ)yF9Pi!/t LvI2ܢT}-99B/r^4#Z@tQ{ A8K76we[>T鯡Y,)CVkRkMR+ȣ`>zS1+n;'n PȶU4LS:4!HA`U!LCտZPϏmV9XǬˑu]p=^I$L婈'9U$fzCm!<[\X=.XNMEU ,>^m^{ ya ȁDK196@#Tuo5=v #[Ð'#+s[R/J'fȮ>DH.֪*8wf#tE1Wd_ܒMp#}eme]`dF@c RcPx"WZ LҖl.e)Vٸ>dsϚ|R5g;]XYm1+ 5o'h\9wEGxÂ#aw@Q/^6%K%U"^z%=>)B.8ҼoD#8)ONW\Sdyb% kOTކI.Gr|vCfn79<}nosnhF%O!@ˇS&RX޶h@ۇg\o;"i-$b:|G,⍪7V\.mU@Dp A;"gr[GťxTAĊ6w]ML.[c~1E=3ߩM p9(Z,i7|hVGXMu:5(uK0rQxuB*,-tj!;8{NrR`锛D8>?Ȉ Q{Z-C6tO>Axޑ`>]5[[ȜV-zI֟H~"ď]dLkG}VcC>bf,D*ց!j; He&eʻT吧.[c&R/{M`X(0l_Nytiiޜ_3O'p od^k \1.c/#p04VYi?7 5L|]H߳Y⟑YeDBLpBiM4w)ALj(,l_A \ k %A~(Q2Pt䑝b=kiQ^n|2 2C!A"i`0T-]!"\8#C?eѠ:Y44^Il׼Wdr1{c:uݭJ,_fj'TcOkmּey.B5j#+JֵB' C6rRjw;凩.,nE)> Ѯ`Ltua8Ѧh-/߲F`w! 74"W /qZ9|:t|0,{WbI{?\;?y_(XZ3*lπEx |<;E )- v{ﻟWփ bONۃ(g`'VdV~S-exoOo8ˬ;!cd-ԩj'P;'U Kݱ]/B:.ӧB'*qo'[=%;/;Ap39I֎/{J.l5/~cYil:r++\/M=͆ΖA}`tj:M;.+3s~c['+;*ˋ״"B>j, L,.jMP.1Vx#ah.8^܋4zתx}U,>m4;ܝt̿;<fE צ|5u%jmE Ozm ie7Lͮ(-k_m=lj$U ٬pV;0Ûn7e4 |o-@"Kz$?rp}"s?Rx"K~}ICRi7C *]m|e>B gvIA;-|f EQe_~ Iv<" =ApuZ;d'qOyO~zf]v׬d]9uv|ߖWwI9{ 'ˇxk4#2q.@r@79יB s3O2eb5:yޭShIA.ɎN+1ϝ>H~" C9EVPJ>('OP&~Ӫ9. ݆g:`B./kb8`\m$[Fz/5@$U:=CbIBE:8>Ϩ:/fNTŭCtJc\l\fa~_:DT MGT_-g\d>w 0q!Іʼn;d qsEI RTI5֘p=`(k4yܬz8Xk$XaM9c;g{B}KQ&ު )1c2F'S4lŋS"+] +6kd4Tm .P;^[גM0Gl2d00Ơ`W]7$4F>+=>MRy&.LGjz`U7+aU[pP q|N_K~= &\x!n*@ݷ>bͬM"J2GF~[lĄMGO+IؼĂϗ qqU *_Q^"- t7ݣisIO >ejW!0K Ss}%`7B=XIx@54 9*!cF/:EEMvtRe3ut3wB!QBHXQsWiL-S8E,ɿa/4ʀ^q͍:Fգ0GJ$[PUf,jXD𴓡|iqXq|QH\ƢR7GW1@ީ#Nb+ "|)kA2lPJZzFdS5{1* C_(ЛށݴƂhIĤmhFC+p[0FF*SrHs妌6iTL9uLilauaIڈ7Zj_t3y;]* Yoa93+>q1o|UϾ#n$:ۮf(pisf,h) @P 9cmc-@@(՝/͔^EG8_TUkq[&C%ڣ#4,SíTB%|"Ãw*86pEXh T3PɃn?IwʙkDQt^`~Hk 2 NQe)ͱߢdlO CtN1ExöHMTlVNMꜥk<A|sv͊N*b?%ILw~ǖ~C#>W)-@"LʡM*zIbB]r#2or=A96Ž H<<6iS4i>wE~CÇ4/a]LGnΓ1i8&]H3A;("z|R%bCUX%-Y6%\phh ˮmZY&b%/J[֒oxXn!v=vr<Óc5^#xXڄ45n D9 pK>zƫE'V:?=rTǟ(Ե:W0GkVsu%v_E i5"i)\QRsr0PD(HhSSҵǜ~sAr/ify3`> P(/@~KS% 4UHyON#T["b,$n+Rԯk]]LH7S~GE NC 'G;q2?bNMq_\MX.ƨ*Tro"]pն~n9k!'!B%X.F n@p(f>5a73;XrM&i#v;D<)SǯeM|}Ln=]~A(E L[sz52psksʜ9},`^ ZR/9Bꦆ}-h)`+>c?5mOiQݥ~EHA?[e\d=ɐRZm7YW />WR\d PmP5&`+yUxF*= ̾&'jr![Gq}3ž]lc7\MJۄΖwxRncta*5@*ՓsT\Td8~6Gj2k>ڃS_ n8F"fu9/uCK߳* pY| Q(t> g0H/}2 w05 V8rp,$d#}1=)sd0#|֧7U) 0jtp 5FT+ yDֳoE140Á aX vOmh<,EGѢK蝑AZEUM>ڮ]s TG!,o4E*F20< }aW^qt`&N^į-nĪOZ8ȑ"_6M(Wqڡ6? _'q_F@` ZŰXuH+9/jԸ#kRW|Vwp`|y[߫1PklRxiV;n^H;¨I-B9E1S+ϕtg$dA$4|8X@5ALOxu:F"(]4 <(.UӍW=ξkm;8X]$* yYE:#Ebi^I J0wEcp'/&d}8Kޞr*˿; ]Vo2eVYU ;/܌>V7UMO+` y.;QaZ7cJ7Kq^V(1M #K{^>_GaT=G4ʄ0<\61STR,\c@IQ0/.|D b0/qB,~ؓ/lόC+_P3\6+6_)z:aZkGS#jfڦgaM&Z~"^ #_.M&DGJs6W+6L !h7$Mdl:^Te9ut5uizL[O+M;,67~%;-K"(rkJ{؀@zWk>-~% s s Hki+>c 9\-e ]7M=3I<ҚthlҘ[UɯR,Ѵ޿}pEWP!axJRV\9)A>͹|5o<$2! GmGI\ܴ'MضIѮmmH7 _ P`jDf,Z1~h5b`BPq^+u79AGcMO5 pf~=xq߶WvIgmaˢǛ(4?T39Sd^+[wi|{=?f E()NM80^C‹|]r<_MzR(a 1׼4i z&M:5tf9'1!%?C$҉'hW8\|3:z6Ea-7R*Dr5oR'̺ mHܼ)Hɢx}qGl6CګFI+x}cަ5fWIyo{|џ[>as^LS9`kTSiv]N6Hj`ݣ1qoɐg@w?uX$|U,U>Xvrb+0y^~GucI!b]ÛI#5 XE6<5K(vi1ZjTx!҂RPɔPY"~)5gk(6AU(g?nc:.yߥ"\d8ش?{wr(i~ݘB-`9EHq |n\1>EiR BᩙՈY $Dw%,uWM'Bxi+jW4LT7<\o!npeڒQee|vj;ӐeEQhFͺc4xtZH!wqlD쵗폃?0Z*7eKɎG#{%|ӝשB7ɛ٩݆8_AJc99)$WCIwJymՉd۱+sH<; =. J2s TbxɨVדZ|[Ρګ=Ũ?Ƈʿ$bJu7AݠbB FePAo/_0 8 g#w>E02. vz7 M&_z27NR}PۋCPYZX(3xw;/%mq~"vjA+,e< :pΒh%/ Ӑ#l%-Ldi4e]te? Մ 4\dVEkw #DX_;"r)u"7kOƔ,p`6ؗ,a͘5E؄ᖆPt۞ta~\E#`IzRcN+qmB3#,$}f, %B e 2UnoF袈e`([qN8d:6t5vs0${.0Q%l"$s[[\6n1TDu^C ֆFK4 ZXzJRڷjE?O3pb3sd)f9k$^^Ùћl#% %g#hedX{#GJmjKNa/"b ୖYۇլ]8yg[P=./E{ͻyѣLyCy40ju.(Ɉ[_oHj7e*t`d!r;uXYD,-V0z9_{fqܢzm黏v `tĬc>t=Kit1q#u\1ʴv1uӲQ)q)9|R#865 (Sl CJCx0!@{<7ZN7UG Qk[] |vg?, pk~WF ŵ[]+_!oO^D\TS=> }{g?x jz޹\Hh#Bn T]s6{zYN԰!/*qv/g{UKWA$|TG$ߓoy{OҪ|g)h Fb0jrX)ZKK{-YiJ Fw$ճ@0#=AvVƤ;Q3D%-s|pU1֦L45ع CQ(2(5ĺ^/@D^emQU*2 |D{˴wX3vx,7 f "u < ~61_]bDdFUAZ!;׌"4,BiVB"/͕:6LR{Ҍ?o"Et&DG)1ОlVզ1s]4g-ᖆB 9Y3l{yض,OBd∻+}CuJ` r$2)@h1Svzu{ӬUa{|賀I]0i i)"* yzy1щE.׵E` 輭h+@0u>W  / 掊K~S]'{V1nYdZއmb(tbo\gxUM7Bk,qu&/BŨa4 Q{,91q/q,[W.=^nHC. acNCp*J0$o+7S,Y,"qTRF@]eO&tGQXWuHTfH'SoJ7 crb? BdE;9Y[F!\RWp?R1BWw?X$*3ă;}^rpth˴OKD; uDÿYidNjuXHaB{YKrhg0 EeJ#S-pbU0ong>cAa0i ('!l3tCsyAփtSrH6~1Ly24?C+14هLaT)+Do>d)4hp`֪i8d*$>M<99) -G=pqCdSR1=PF ܡUH 2:;XSA=?ׄb彑A2VV$@@$ӿ9y?}'(pDho<$.i LqDVJbB5?'P uӟI#m?+pBWҦ!aC{9/-i@jIUZA'F qofB0w:s_fS^ONwV`U"wi3nR{r#6$b)1uZTZ3qaPٲ+Mk=ڕ<H7QE=kX f ݀S{704}FDatP2ڀ9ÅxfY[ԕH\d#`;Uw<5T;%&KKjS`dKLC\aUÎm|w5^5vh֛K{8 -5r'i7N1yN5Lpۚ#!v'+ % \&=tL1&.=+ 5RXy b`tVd1YHbG@Wt5D܄,[e:sVU%c6x_ k zjs٨Q KyMz>,o i±IDWx/Mþ m+c}?H nRI~=) /  \]\oMOCK1G 6R`+F5W3t>.~u sB'ЛCk\S~"+HڲwgbO8zU@ O*B(jK1 uQ4E֝ @HX2yhQUP'%'ZH}$X^I,WAxXaֵ%,؜+n/I)) 5Y]鶭tHLblk%غ ^tx"!&t cg )!BȹJ)j#cױ<^JƞWQ ƍd̊d0O yj]٩W/EnV!t$ɒ<':gPD݋N4X6oᘽEz#iI9f.wըU[92A}z\<ӄu l{e(1we $CW;um>0v9hQ&)x"p),Y6'   l0.Yp(* Eo k o* `[OP6wlZx5?mWM =P4PZWNdd)k;+J, z.5J eGswG& #tu/(af Uk̛C^t;hF@wu`'Qo B+{F!t +Nꡍ;OyeŴSˠT?:^6CxQҌ|VW拦LP&ѩW nŁwÇ5W 5"X~Ej9%uL;TWw gy!C!9cҌ^1>wKՖ,ya2(U@bi2c3hP8LSDMb^b'|?NE(Q$fk@6ɸf5g5j-p_؋qR.ih`R={O/#}Ъ x)0T4i- y(L@Nd*%S PpZrIDIX_>hW&vc5\jMg) as}wy8*eVkcU4< pLёyW nTxS8`Zi?H\Ċu al/ lAAY\1Ane jWJ}"+u^0xM[zXAzh5LLy9M_6#,( ,:?eeZ!jc<싗B.Ln,\j=8PtgK diOGߢnr z8 JA& ڌ a$ae (xzɥJ2bV;1v*G8BK&(6eb"aou.4-]NM{5ӑ5g8PaJEj9 t ƴÇ{p1-}5\oLz+EYrs8v)O yy*},ɿ8햜\Ї"TwXsRR"D Cw4|%V2[Cvxus*3-W̿'j ,eLƄ[ :D0BL^Sr9X:b*FfۆJ 8y3d;*W(uGS oڍp.N w.954<($oj&};QfZAvHf\kԙ;% b-ƚ4@Kv%F@a(+5>xh9yh۠/eL¥^#sL&3y|E`%{ i0 ns*pVbC"bd'F'$̝,0.mUy5Ӡ~N!L@.(Ȫ=!!Ԥ l^ص7ٽv;y-IZA]CV1i#-QۧvDݪ*J F}n@d{7)}IO $ׅ8^fnuЗ%'*+5'y.C6qkjGG0nOZM| kdi* cG#$־oCy* brfuzaSsxA3'&iE -WFDo\3*]wb8̴3l du#Ԩ3meIK$ KdeEfQծؙYE'o4mi;`#>=}4_C=̲b{<mK{E7u 2~rq3_dj-by(RCʓҶt|R--7M'vI̎xs殼b"{[\jwZ #ѪƏk8) *qHvE' ;cڿӦ: d[iuE~QO!m/FL1C]FΤP#YAMI6"?oM@eUCMP,:P~# U1Z6o{kfc6l,O}lQHd[%Cӹ\,2| =FdpQN7-y.XǴy]|!.:rUh Z,kg1~Nx6{ILz1އn$͡,09'ȈF;2oƚ+t^}C'C*tUeRbT. lqQP-b6J+j|{EJ>CLڗ@]O9yVD8[ =+Wނ'p /gJ˯]Q֐( w @S!6.p -;@)#f.[:pRʟ%s^:FyG}N9FzQF%@#RDc+#ԫ)8ewxE5؆YQ)\x u|V%= QYW*)VGtdreOTe:3T,c@Mf&QC| ³ـhtކRv}hc5 X9E"EKk6&0Ue5$To ,#:u " +N8{48}[Zw,DsrP|;7e 3Kcjk :ʈp}fAj&hW;Q\~YbttdfO~ܜL+1?N|Cf[gatQ/ܺH r\s˩B>ÒX;'Az|1#mWvV \u*p0o<ӏ*ЮBqQ>\Q'V4M Qx:(CI Dl u @1Ԁv8t#ᣡԬ|eg!b Qd(QZ%y9P)garHo^TW3v3h_AK%ha{m-]^bVeH TCifmׂ) I _YEp׈Pچijp(`Ua<_ҠSF Qy7&J;l](ܹO{e,hPK <De}tL{ t~w%L:'(.U[?,l݊p>ZSo=Np/n^Bo2fpB{PXFD*--Q!ŘL[._\/W4G҂54ȆMf@ ?a \/ު[A^ɇvVuOMN|d(oe^* u4feIFBPk5}:w]!x`# 2KC+/% !4!=(nuwL#ˁ}.!AWP cz)P\O ohHYdϋ U`tv[~'< oo;;WאZs>*W3^w:L0z;ޢXn\w@/H3dGȯlr}_ygkfs#{>p$F'[iAm=r4e]?Wpv ek#؃qA,ݷo^8pth sA).ɌLϡ]IP$Zd2/եxJzm@eJ Q3`>Vܳ(/djGun7_dw(bi$&H,uGW5yɻȩ.{TX7%_.r{Sـ^ cALp-V鬪&^b'fv` @ҭX"DO;Tk@ug㈋B:Ny_YNeYPQQ ĉek1x˜xSrIr3 Qi-dn]e婄8B * >LZu