benchmarkmeData/0000755000176200001440000000000013650327712013326 5ustar liggesusersbenchmarkmeData/NAMESPACE0000644000176200001440000000075013650323377014552 0ustar liggesusers# Generated by roxygen2: do not edit by hand export(get_datatable_past) export(is_blas_optimize) export(make_data_set) export(move_files) export(plot_past) export(select_results) export(summarise_results) import(dplyr) importFrom(grDevices,palette) importFrom(grDevices,rgb) importFrom(graphics,abline) importFrom(graphics,grid) importFrom(graphics,legend) importFrom(graphics,par) importFrom(graphics,plot) importFrom(graphics,points) importFrom(stats,aggregate) importFrom(utils,data) benchmarkmeData/data/0000755000176200001440000000000013650265055014240 5ustar liggesusersbenchmarkmeData/data/past_results_v2.RData0000644000176200001440000014235613650321374020324 0ustar liggesusers} UhL& >ɤ'/IX%FQCsSq>EE0**;(s驪;ӷLS5T{==ܓ<՜zR44q2I]J› K"yƋmE;~l3k+64/FYsʺ[oju]3Fe+{뙺0ʚQ62" i̲ [uGFGW[X0Lq lٶ=ӵ4PfY˾㻦yp8|p-L =?EQb㝲ٶ^](8ld"$j-Y׵|h34Ok !6ʖ.r(>E4yƵ\tS@ķʖi떭i\1M;$7t#⿅d  #1]Aԅ fW=w Op~-)TnٶL͈QvQWӲCy8(FW(hzC˶Ӷ3̮yeBKmS"gU\IPuE,*0]C74OeRoi0"58ʮ5dgڍ )=7"A2DUS,6P|*R@o8B& g[gD'YTOo* "A{i[ݛ5Ҡoye `s-w ψ0dg:Q%1 Ioe4ͨ$OInQX<Ƕm;0*OXsm ZDɢᠯasRŹgND'Fyؿv4Q\2 m`uSoUwmAIPW\;Z:(ҰNXשl˳M#OB.< Y>RQ[m{L:kn(fYQ$' Ŭxt|Ea-SˉN T.Ǟ+$ptۋ Js To2oXW]Pk99aqʠrcII7uØ eь5[ŧ8϶FQ5˨8J(@n9*=Ԭj8xc'F v=3dfQ}4mͭ X ?\ۈeQU]o-d( 1a%# ` 6.|Jihk:(i ]U/ Qw˺K3+^%@UE"L߰E Q!T{ucgh `hP(0E f "F(Mۈ ^-a($`x))݋X%3Ȋ|ba#{:Ք(|amQT]ˮGvPdyݡFgK[4L PoG׬G}[oe$(Cqb\H50( ʼn56@19z{eQB;α}]"*cdfD=d(jPYZem]|8@EKBqEi[Jgd#,*]eQʏ2ٲ6~LjVu)7]@UPAV"'j3=|9 B[^u}#!i= ga P\B#iV=Y^¿W&_n3u( 1;fBW"aTk1*3+ ;>*XͲ,=-Gv2ŋ%@1\FYRßL=' (96Jx4$:"p9(;Q~A2=n:T5(:zO![uL0UG9X6 *aTBdy52qibOE@lc&EaNlQ:de'YT`e]tt 6pi1HSTf~ Yᨕ$j( zZbH&Y[ `:laYJѨQŴ6)FQgj85/K &#v*[/K[hl/nxhm>٠EPjPu#j՟C5'.=Hv} :E )[vHb4Ѭs: Qf٤}IP:u DYb QhQ>rk EP-cW*rI %Qlh6;hVtO jh&^#5mCn8Z.*D KkS36F(;{$QՍڦ^vpF0U^BqL?f P<\Q;gPOi|&m4YU6~tivbO!Gwp̳ ,PoYA2Vr#q$([(<ó2C׾M:nSC&m^Zo w$QՈ2ArG0k0hӢ ֢sdQR(6VT ,*CіYd ݊r P\9ٻŗqm8,j_pfifîivbD5ǛV<ZF֑6PQ+Z5/ xIűEqr)Z6x1|_yT`Riam+ z)OEKݛq҆PUsNk2Odi+GR %b0)1MÏT~GbtåFCo:u`UHv)֙Z&\GE -r`P:MӷLۊDLblPkͲpx3_2^YN$*$m^ xRepL(CsLݎ,KkPnkvW NŨ_\18)T7?=͊֠M*V$g]hwJڊyCTэqDy8ζBGeNxmHT:ңnU 'eQpd(41 7"cTZ%i("$QLch[c4lŢ% O|\ P%I4GT#wm4L3[;jEQ%otLtȡ=(cpEp\4cMsNIT ]ic?Z}EN؆4#Up}.&ʛ_D fo!gv䢭9cҺ2 -h $ЪN'E͘$tQCa de*zZ9ˠsTv$3lHb5Z t\7zbbmhXH2qu5]GUI8bJ<.C\ d(1S8)ioLRЏkp.uiӵ'̮jfXGQ8ZtܘeY1QITKCٯѝ)˾\mF#SIP[s}ۍ'A1E@b:KtI>[`H PS - N7$y(NꉠaPU1_DwB+9BUEXIP,kٚ1_R;s(sW4(4WLjײR]:֧P<3Uk: t: '85rpFhbmE(:#8`<*hi>올xT*mlMLdZ9>NqQlQ(H+SȰQT5j>11G&CiDE}YePjPʈ[kkiK [)yN5 h+)RCaGxmrtW"|;7z>CT RsE  46a7cl1U=,Ϗ{ȢH5Eܵ(^4+,K3BRlo[s" V%SC6mӰˢ.yT0m5}񨦐AUP !#fG'?zjI0k0q)Ȯ@ޚJs2e^oj 1|yT`}:È&!Ef[Y\3lʢ%(j ` a͡D@Dޥ* P<&K4YCQi6?o%ZN蜶h |*cDf@iRa9#:[PCOxI0CV_6-@K \Wn&c(*Ti4]ۍlrI=4,={&O Ye-hVKSjNJ>K$2N[WG#453 ՅR(P1g'@Ȇ~p%d(tTΉC Ǻm莦5 lQAߏ&%@CzD'7Juaް-6(4i (xCƕcp<:(aR@3eӡT G+p<* v)zw(*k;8c*u'GC\5*ixaEu($q@QkS +ƕFJsYEЋ_IvԼپ PB6&FˢL^p\(#eQMǸQqsN(*.y(}0 _+44*t=y3C5<a$(3 RktBA!@YcQ;ie|oGߢ= :^?(@IT`&QuPI]lIXa+6w!>ṖE=USʺPUն*pfv Zo D z6HR$(붥Y*Cq6EY eQb2]7R/=T{-6 ֲ .6:,6$FQꜯ9f4AFU5u>h^(v=Co wr=-T5L\-ϏTT9z[aBŌ#9 :s|\L*5CkS;d4eۂZi6,J"L1hm2[w<[E%Q˴b+ˢkP$0CeP>ΆalE[ZQt2"ο(: *`7 1Z>%@2~#B2!ʢM{F%F<7^Z36|#4- BcY c&@y4ƺ Q+F2vPJh囎7@;#&C1q}hv,h^dcF(҄Jjw{ ;;jZpʎZ3Q>bGPoLø#)TDn֢նx !E/ɣۮA7]Im(Ѳ1#]h4i5"V$j(KՏ}04;fo&(Z9:eKwr6(F?$Bvf g%CD˴M=xbkzqY(n&y(lr ׏Eͪ( Ր&6#f tW2<5I)@4;,ۉF cʶ5y>iљLIԬAi'Q}gJi+}4,cb} P,eYFFQUEG&*TCltZ͈w$CX%fvգ@d|0UL&5eDwˢqT2ʼn9lXU'@ŏH U;&Y7:.ZLg9#,~@eQfl(nG0Ğ jV *Hc݈I RIQ=4}wl{Lh"{^q撨!7NgQ~,*pi5Ӱi L@fP: " cH:U(Ԋ..it"O5g YL]LP]\”4mXl D tȄn$OSň-ӴhA)Tm̅+Z`)̐yhi:,YuUxF2eZLi(Go'6 eh./d(۵5#R&OU AO["zcT=CىŌ=kG'GR]6P$Q5( ׁ0UiDy#[]hD( az|d(iNEqFnSfA~Lϡ7QD8x»@9!kiFҘ8$j9EeQϓ y>PJyGUiuNH/y7hۧP'Cq,öhMRjzѪ{MvزǬy'E9>vIQCmW֖}-EQɼ4PZP!;bo$@K[e\-ljUH#'E2-# JĚd}JGk-Ew#6rjQ mF5|‡dr :*,J$F9Y9"1.qiuTmSAXH$fD(vzmΊ;N ,e}#kj8-Z‹nAUI0Dؑ0S3t^uh!J/-\C<Rj), -ӑjhmVBUxS6L+t<3X#xRy(7"$(Vc܎GU} ˳io\èibѭhq3\(650yMl=(ynD(.ZkCMՉGU$ (C%꒡xo13ދˢAVѠ@RC 5MEi G5[^ oF0:޲4éIQt[=P' IHPbELj]rK2]߷yIQ8h6vfh(LK tCVB i4BեjBQq'vIint$ TcoOBG]ϳɢ`OR\ Jar ;"!f4QVG jA_5=g3k1ZrDpXQ9SIؒ f T3d P~4NTiRi3:I_<|/#xx?0>,xxG{o 3!p?HDd}x@<[_<Kɠ/EA苇C<|L</ ށtxU ÿ ;H鋇!/~⡈wB@? R<|xE)wuB>\ 5NE(AIa=) oCxY_<ex\9?,Cʟ/^VJ/taXNB<Y@<%@@}ǥxxu_8 EuT]"='n)z @ٻ"R<l(_u QȮN(ZC4E'x() )(>%ۓ!>@QۥQj >: ًwB '"y*|C>;PGIhEvɕ? CߋD(Q>("%"A]WcuhB>oL3%BrPd78(T^'KI럈{!6;4)L_'@Q\=x(o/_Cz%C>3B/쓃"{A?(^$Z#"S4ID97 E#K0C'C΁x(JP4Iq"~^dg"xB<W{DEPz)CQ;ETJ⡬?7w qR<[X/@<M/h^yѾBQ}%h=2c?EH}`lC<|W_<(/Eq(KN/䠬.ҷIUDhP6^).a\AQކH\m_<Dq*] 0i8(G+ HEw?C aD/]YyQɠ(.+jw%{JPdg(oW!C?Q|Q;#'P/#FP4oDP"hTTxx@<|/ nEr^-n"7ѾeaR{㎾xxDq H^e m\SJnE'')CQ,L?Yt\DqQ>(K$GEyUW2z@<a/EGEhFs5<"ZTEE}Er3%A EqÏCcox${c#(D^dGѼ }hUDA3CQ;D"(7; Ey" CU6_? C]`ҺxۨOChhHeBr?C9C?#&"(O('`R?M(7:l($D/W#@:HoE~YkJ{Y56^t^q#7n߄7^eZ ~NL>^Xڮ' ^| D-p~g)}+JXnO;ܫ:r;/RoX>Wn|5n텕_x;σ^a'{ lY{ l_ gbn/'J>|.`O}y_ mw3߉=[~ (<$;%$(Uz|;=RvGL/>}U~hRy6/T>~MWl_sE{_ %/y8Ӌb7N|K_awle߼:+y5&W[/t~/aW}GW{m?|?t]Ql}'>^x߿>ӄ|O\ m=5ovNJW{On)6X_ބ׽es0!aW ײ 5rK5\֯(/^/Qw] k.[ySo뻰K=?]7+M :lo7W/^lV;aOf}kr- h?+o` o68ɻa;Pªp~' I<\_vǯq"BZ|)ɩmrˤ[u>^؇qp${a=>Xޯ< o{~S f۾r(_%ݨ7}q۰=i \s +|{鳳?|I}0egTy˫?/n-URy+'VDi?yY F %a/,]Nˡano { zQa\3NOe|0L^]'D?L* a{}d`fquT^/KS?ɏ8[ OgX;+K|c܃z'w!, `N ߍ{P{&DZWz~%=ėAgI`* }н' ǹ+?H.ԁ(o_zV-*?9}/30Vԇv]4IW&'v’wr턩̎{3|LA { OXNXIpŠh1}SyDӾ&:XS$q_G>F~6;z@ ~ֿ7rNbzVǣ^H~9 o89@q)~䟩?z"g~;5?i@ ٤XLp~Vl${C0p>f]8'o?̺eW}OAP7+~OwUaXC$1I܉!\?,~KЁ_r+r<5 ב%>/[.z88cYvT'&Xq0 XIH.k%,ޒ/~O<8jX{CPB0bh}6R.U?&x/Oxhm!+ iAln>$OLbupb+0={]07Bݰd?簟-^ƍ$.Lb0Qݰ][m'̻`\8J0_7.Il^^Y6fzmtJ54P@6?aKއt?Ibt4i "õχs# × ɿ#`ٍoƿ\ K!Lari}% ݠ1yr%v@CvY&XHaMg䛅; g[~Ohi<zq ?Iu&р?-Ʒ@ߋ&XDv?J{9*\_$=~~u[^8f7y#wI=x/}^er^ggwͽ ejƗP~ѨG`Ham?+{? G>߿c}'` hכL > G}n>azX [Lp{NXNbi"0ٱ+a'{`R_$ow433Qߡ|< S8% UE4/o6חNd3}8ΤyܖG?ɇ0npPY};bCb"dr*Mԫ@g K~79Z1`Vw h[o< CkxX Ev| x[׎4QNNa{`PTafˇQoF0N7<Kgq;`!_ 2L+c}W~Oq;c_~ &ϰyrzt}σpo#~|19v*}߂^n|W%;i\qQw?~x7I%yshڣv0^ܛ~8LrTG;<;gٺ@/])0Gn7|m`w==&o̮j[a.oD$>X 3A[|#14).k0X<ȧMPyp_O`]>nBKJX-0\/dzn xߠa?b(ѯczīʼnbruJllA xrzۘ __ 3W~LV gF&p?eE(7 +bA<>0^FhǵÊO榢evu Bɡݰfnhg>ڹP #2{;ISop(O/@>:Ty.CR'S3?Zw]u?u[QP(oK?Q)l{֣sf x̦n&#: 袗oq\ B 29Tvb߶L ~]|juȧD^X8+Y_50yݫCW~0{!a/x-t-u #6?׷w@{7W:~,b|{,ezfX]g,"3=Pΐq_  L.v6KPk?Woeׯ$i|@eW4?wq>39Dl}0RW$J'Xذ?{q܎>+7~M1x$ + xɽςv Eeh LN) wpe?ق$oq,ӵ]d]G~ZF`}$$1|N؇ G.v+Ir9ԎXٹS6\gx#, ?zR׾2"f Mfx]G\V^` A\v ^ng}!LfIXDa& '+f0a'.~{.(=:L_mt0/  >Vlw`"7|19_v XBShZ3q}k,>~X01E +/> kn>z}Y8UjCÿ YA|} LԮClTl`n8OꇣvYa'Lʓ_6m'Ld=gWr(ʇ|Wv6y y7bv7Ӝt3~V2;f97p;a} .'&x;tG/X7p[g.,`Ç~ .&z#SDY߿~|=}vq%/{+ϳy[aqԧA ݾ P8ia瞵aI1Wnxh*u>F%ٖqE4.Yl=TWXf1;aI-L+:$6^֟^Gx(F +0y48$?3~ bf܅-pH.ih  ~f ߪ#X[g]LgKGHv{a%㇣`9w=XG՘5t֞*SoSyӿ6= &^E͕Hi3o| 3}1߹ߡ nH xOzt~0/o<WKü]2? DZX%XQCq_稟vQvT']=K`!W(X?V>'P$74dW wMc.'\22{itgWf0f񎽂Cb??ſP߉x [-az`'-v\vl>u9 +,$[B{NR@hھͪ<?篬ΏIl̆}Оe~ͭs z+P3pDO`ޥ1akd0P`|]f6?WyLl>arS<,]핇o.C~םW=XA^s?7~@GkWR{'KXtKϠv-Ck4Mfo_( w( 6M*O6ɗ7Xܪ^ W^8+ou B>>X&nC~Ý}pfؿ`3>`]| ~oy쳝AeK6kq^ V>Vw@`sAצ|#/+E㨇Y~ofk7射c;2yIp DP~+. a?'vCϧ`1o@\ƎpݔUH`/AC_7燮WQĹP>lw,lnfF~y8(~(Of_Q>0{9W 0?KyfK|g"H}fdX\ 9ZF5ѷq?ĖP?C?_?#P w x0#s(qOaHWD=wSM0¢m>C&yPfqXLtL>tܟ[q(W}:ϣ^t:$v} ]Rs7+)2le84 lWThOA'7?tAoP3@{! x^(QF8k_a#:.˥zj N݃q-ޕG,ݬ>?|}2o |ژyغ 귋 C0`|'jx8t6El^=Kacx"14kyI<Vut o ~1aad~ix>X\7T~U*Ov<|y 婖`}яa?L+_3.8Џa!.tb@/?˷ TKǣ?EbG"v-@fbI?m u|>ؗ; _$rz./a||.V2?gtui/ʟS:[iN+x'wursya&wbfw'I|m*'=sQ^sT/_A}) x3|E剣68'yAWE}ʽ,~XyB}aA>bҷ_B<G7 (?&qK{(0/$>?ܯ c7]?φαnЈy{=gp =4Ch>^Z`A{+"O+郵8e75=/pp0}y h/\sQ=P 0|ݡivy T.|Yʧp{3 t|.|r /fI%pn]g ?u>KJ;SЏjyHrQ.PrǵǾƛX/ysi,p+OK(!o'| 4-"}mP 8߂`q`/2 ONCm؞>3y\נ~{bjJP Տף>ߗѮty!Wob~ z^{}|={QO-C;o'_6χ-PiyS7ȃ\!P+^3\W=Ч,wyo~ oF?>w ,a k=`\oQZG s`0a}?->܏-~n\~y>Y;{ig觱u*/Pa{ټؗ遲Ƀv/mn|)OC;)^}_ҍ<9Osnqwک?#,:ƭ0;X-unX΢iz[7X˷҄ZHf7G*6XZng^YA΢iUupT2?>09 `vM`6-oW0 Aʴ`=!_ 3 x3k\?ן8a gyZ>ni|`@*|Tg2_x6k/ CK C)gYWm7YP߿W:ga67폔x;q7,c{,O!1 7/96c`c>qĪL_Mx3O;z%>ةlt uy:XHaoAR گj g(|GzgJ7-O _v~ ;=Lx߷2E?x~^peN%۾z O zX\zfuUn Lv@4wCWwA,f_l?v2>놥l˷A[H >G~vX),dm6LerMiXiuΰ.X1><{azb4FdY7!ZXE?~Al c$(¡zN{Ľ˹ `P^W%?nOuۙ;, U?eyE]Y:\X>!u)_#X`NJ +i)8/i?ҥ覠].htx.3=XEon ~^QS 4\g7`L'b%UiIPYI?di8m , VY0 X#<弄{7h8rpOٻϼ76AW9L?Nl(·ye*lbf30S^z&)l~ }^ &|싆`dPR`FV7k9<:xBoA޴zp?p&]E~|`߯Y<_a!``Rry?91}-h#o?Z;eɨϻq^ u~' =]S\Z3 $_~ɭ%l;gg9lI߼/2|HHaC:Jv|}%,io5ޅvif*&3}LbvD/hLQ~Qѹ*{h[UhB7e\Io|뿰xt"?a0 n/Ktr`i||%̈́hYNЂr^lh7t4A$#.a:Y<{pQyIPPVFe! #M_;x$O&w %֥{:}¡Q;lY֮O)XAꨏx> efqCZ@/|njP~5%t@y~SHmZ~cI`݇( z]0,mÿSu:,%=] O<ȟyU -8',ϡ_x&bYM~o.Nb q61ٺ#3X-BGh}-远EI[FÒ?VLDCaGh:'|M=!CNYKV=|p eHk#vq*1|0߇TOU^$oCoA}<ŷQ 7:{qœ}-L\e9nvx[J9`}ɥWYTy A◣vBWPgcɿ|6Ny*Q;hͽ-[t]R_Lj/vZ&B;k/Qΐ݈c9Kxz|:xJ]3ݽ{hڙY|>8W4!4aMS0GPaiaXK Ѽ~kGQ4+kՅݐ߃:hnK2Lux%,$,i0IR A9\_u^7&au/aA{ؾ}NGʃƿN.뇃 _CyluwrVbN_xߘd׬ß,5Nzsfa0A|?ߊ5#Z`oWCۿ>Sa{/ꗬlaXM@9G}Ο/]Xc g|؇|'xbG/ÉAyx! л qp,du<+ 4V/gTA˱_8V:ؿB,X_[Gvtn ~By4>?= -\nVe!W%MyHOp -Y^I2k0+KI]&Yll_u(O%%`}==+UG>ts`z`e7x}XY;|G ,n(yIxw%T73,̋U^gI秱vos8{sɭ߇\.?7c~j?g~?/`s%p֒ꅣS=;S o]rwW~ww wn/Oe~6a`"G]y0l,YEnTo"wȷeunuo[`tzx8B0D'{NR(OeiȽX9uGD%ƻ.Ŀak=TyI؏n<Ġ~Ri˯h"#>0ilswow:ݬ>NX#|!mt5QMaeLѮ2^X,Y>ٷ>Bcpe7w37x-,8]~*pvԷsp_L޷_A~:|#GQ;*i}cp3y)?Ә_'_?G`b ^jZR._q|VPNvPz6n:n',zGo#\Ws/4y_Px2mp  y=:+Nʕ8u2v;!^C2ſ:a:SWWbfo!W-Nd9tC;gW~pcǪ9gZٰ׻7 VM&c hχCbl\+/hìW!:\gM0oXC>w旯8(.@"*? WMr+`eLJ0ݣzr^_fk^E_#lC;m`GP>7wz,&~ƗBg_.>x2?/O{]|֙юdǩaߟ˳ ֋(8*DŽr&fŽ(o4#|5.}MJw?,/::ӕ0}1PyŨ'Nv"Ɨ?me~vtQAgS/n$X7, e;}q K|yfh-<0#?YHMjN]}|˵w3wXǺ .Xg(m`~Mx`!S'`q=}peh:kҸ N< L'd{a"ݕپϝ,nd v|Vp:ڗ^Т~zO%ZWU}şQ0+ze/Or~ɎT7f0(~#ڂz0(sꫠl< Xo̿. ]4/PnXc ~:+Duڡo ^q$%r~ڋˁ )`|OR1lTCPw{oꢇql=IX 6+뀽?>An w<~QPE#]:| LCL0'|]FB~OV^[]s4 U]!D}rWخ<nY {oy{|N_udqN`O^gk'mLd}S O-0 Uc{_byOJ?sx}EVO,~~?m uL*O-W~_پ~X@f~(#h_;`9o 6h[L D^ ml}RVev?e,.c~4hxݓwy9, ̭0^s: 'M(.BbW$O<֓я}^^ٺ췠a&+> sH 'hװ< `Ǖ0y>\yfr9]!7q=2TanG߹?_ ?G`Uvp ``X3Y508˼^ʟNJ٠n-n:9ӮN;[!Wz.WyrБPT~*|~hN<aUOCn ͔NܐA "h߾,d7`R^!;J@MaX6<^,/ ?{KV-WUY7&sOe=s#P3=!]f=L^bqP\4{ ~X9)lEU%m |+ɡX KuYAŗv6۠_}MI?䣱x#05'go@'u8˓~bNJA l/3džA=ROmoIAGX} K;51t0_ACG}BGۨ܂% A>_?Dy7[X9yAˉAnЯ*TVWWqXIa/ ~/!}X^C7z]Qie2U;]hn?~|n\E_l(zA_+ R)[Чa,aGAߚ|*ꂫN?c2}A?UK!ltJA_зݦЩT) oB.*oo}A_}oVx~ljKk_p~A_ЫϧK5O=fGA_SXiWA8KkPkv],,SзkGA8T|+~XˌøgHUKr|B@}A_~꽱cغ+ uU=kk}A?Q9\Qu~:T/wA>`rʗF_Se)8}V*M?1[.ؾ鼮VtuۦS֯-[z;8:O;طeky[޺Np5Σ6s2=y¶gn袭ۚ@rje۰kz2}ztjڣNo;~7wzܡM_^?a78=ٜly|=L c{3o8R /WOݴ6rmܾwzk>dВCko=¶56՚A/rM=i/b, j&=P*"~#FQ;(-xfp$큂~hҏ2=C)cmni>o%On38U[jmHa (lbM}@Y5=5\ BY2!X?1 <6>ڒH҂>]zArf4rJgNݑ xJTht>vGrAdk$:YC:Rǰ:[zj/5=߳k_G7˦e2bz-y&YLG;zx$kzgIdM/c2bb'"ӳ ΡZn'=reù irS$dK-8P֣ӣ_5x}z.NeK7OsJ\ K'Y=" G" %HbUW^df <ɖl`6hƭῬ芌1[;-cO?zQj+fGӵWKtYSR\'[z5|@eWzp&~dw7wn#dCxh23͘>.ܳsA;,;3h;xR$_ZTDՔjQYo]G555!F1v+Z J4"-ך+G6ZFDe@+Xhlbq\*KzCxhٝ,w7OlHE]:˚^5<!QcUDh7Y=КsUJ+c7GhOW&?ZR > :"W;Ԯ@w`Ȃ2aJyt5j(YC/F,QNTfIrRy[Yj )v䎍&s<4>"J;xiU )5ߕ"rkC]|dr#V4GЛUc9Oo9T7sS-}5||"xsCauV 8OĽY4ͮ̚^:U]S-OXZ̪czqQF;*#ZmɒX)= W?N)>(8uOUG͖ykGn:qPmZ<`!֔gkz/: ay˖ZO&GOX?FI Tb+G?a+$:PDթȅӥ9<*.s}@>U-,dijK[F{7Aі겧ϯ&K }yJW-ےUqϯ6b~GOZ^rbxjn&?30hU6t׉?g&Kyr_Peu۴w^t+-4 g9R_Jhjm,eM˩'W@|A=4)Đ+9ZЏ,=I("gRRz@`(uҏz K*RLm򲶪eµQP5̐J4: %`Ԥ̲3hG], =uJYR>[@|tǯh\\8z#P-_v}Hh)`GZ,mml%Kj 9ϯ0]]wJ+OˑIJ^Zډ2a4:-־۶^M9oЌ'1keol\ЋiltR&sA.LwS z+ݦZL:ȕrZaLC9z.["A 3Z ̩g6>l'(S;i ڂv r;8T>QRIPLZj#,z:-uVIuZ~'3-ȹ_Ǯe]5>ƪh@k8X5UR]*W)c)a5J8_rmʪ^46-|Wb{>WvubKH]:؝]D+AuNk.} *~EX?Kxћ-P3ló:cC~V+Bjh B+*[VaɏdOR˺Â,LD&UՓSmǵyL+8GS|@lgzU8@yxrբ3^)M'W'/ %yLSgD (yx" F u#wle'x4 Qh^HFCݩg , zY/k-PֲkEֲPFPH߫M#}@5%PgOo ˖fVЏzVBN)>T҇jawmuz\Z3z![zՄxW})"ۗmi+X/  3Q'Z#FB;NlYq~C$Mzk ArO`8@QKv]vOd;5"[NV&Ẁ(mvԡ3WLyU'ͻ:k 5Gqv4/ߊ5P^Oj $GςLΚ>R9D1L #חlU;+O &Q~"m+&[%K7U֍ȝi^7=z}*O˭ ~*qZ*l|xNiƎ`vJ`L(êkE'1Ȫ0m zU闐:Ml=mz:Ou:uJuݘ_aNdM4k)OJZ#1 G\YU @;9҆So}"Irim*LZb*~ӫujWyK??~_t\y̤eKz-Pٲ,G[ыZFp3,iVS- zJդKzJleM+,'x֨%R&Vj!xܚLzi AwsG/V3$y^j[^4<]f+n{YϫЗiIm*L<{I#EK*((\^6xf[6eM9!fҫP\iR9(0KzvAoӪ癯(>I䢂zm:j2PYJ Cr+3~T+ԫeٚGy!Lb[d+R2|je?w܂z$j,xm9 -=@GMZfc;_WQ6jK^%<=zm{~j) ClS#&X+@}WM`5~He9x@`+UL֑P*{&?-G[Ǘ ةG˂+hE҉s$-5} rѶgE#J}[}[ȅɂc'4ֹ& >P[a~v,Wn:gcgl>oS1gD2MS;ux(XNW`~K\/bf]&4T2Ö5jя`_hY-Y= PJUm!yC\ (];<Ǥ~s7"}'0 3$s*Iv >u5NNJ糴D[L3-TmAmRTY^2-rՔ!Ռ((((ɛϻxӶNK׭^lJm4, cCsQ vٲ}.-rնS*;~ԜI\jaR ,ZwRg؎mW/*I#uz`t1˺a9ٞu%d(dL?BDZXi mܾwzʒd(Rr2UA_y)pZut;[z5P&*J\N=p KanN^[ZuAZ5 9RS7iRiavlw˝F'8"W-cGnq7^X{Fevl(VЏL_kEA?^[dU \˙&Reɬl8',7~/O} 1IF[k+X$7f0xIu ک-Rj"|ểuqp=ɼlٝ#xUY=Z^xpr9d9WcG\hU8g|>*kLG0@]։'ӫunv\]5=`Z/~$[ܙjhFJK8ʱ"'J V0Tlh 5)܆XzF29(H?s8I3?UR++tXҲ` ΃~c4P-Brko)O\ԔB>nA=Z(vFѷ62!1VG[iTlULȫPyh ؝kvMx+7s36K-afO&<)~G6">~q򟴑CY=/Mݑi &'>cz:rH^}Mz`:ˆ&۩ sO,1G;[*.1}~ ׭ѥiZKko=+ ΂ VՋf57[)AzYUgR&JtPv$lx Qh?4ڮ7)1e[.PXKhamX:J@[Ϫ1:Hz䪹*,mA[ B!ױ%#W-gE]iI+:ۚ#liĤΚ>O4^ajQqAkФjmz ;`{lZfG aR͎WMT)Z{t5aRztˢ ]__mA+a:'KERmjgګcWȣWY%MX5BcԮЌ k}!-Dau&e44kzK.x#%[>y+F4Ỡ. ZL/o ˬ)S2|N~䝃Pp|`cwV(s6-fPiҵ,2~H$>u-|U3=۩vdHZY!TXBDZv֏lVX.TR*} R-j%#kGdC?LCAG}#j,B/3ӣWB .G_Pv0%X]aL臶kJ׸Z&͊V셾̮4hd*Ւ1B,"%uk8`;|h'G.Z T!R*D8y4M/كW}>6\[ܹ= O_8-7[p! !|/|©~٥;u?% K{M5|@KB{,X|=kwi~GǤP{G.I)euyW C6S W'LK~jx]Aq_`°3x>=;5JoB}oP?_;ӻ/N'~5~7Q>\_+@|xz> %7592bߥM <}aVvPsBP:pcK<Zs}A ZDyOОL CO+@{n> fwf$* }10s|9&ðk&Ecbdr)-hz/8E!V^ay)kgmY\-3q] ufv=>Q{Wu{gI;Lny@tAa{W h5[W"m8.jw~zֻaI_~ˣ҂˽KhTp.蓁Q`Z@VN_r_3ü-]aZc qoWs?/7h!3~joG<Jl>y+1'+GGK*\s!t TJnRL_R{/l[}Ϩyef~* "6m&?4'Z~U` 5s> A1]Jgо̋\y7woUZ0VFN(|)a[!{ Ե3zɵwUJ?=]!(ݯxM̛Ồ&^56_P@|$qӷ'Ϫ5/\p&Ļ%'/|a8|Ȼo?BP,מ>}o6 Ck\:??Œ¼ƻa9ۯbk4xn~/P3a=*:\sAۂ~ 5/|%qpUI5/SלsY씀kkwE]Ӂ~7Gՠt!{DR KI{R{~v{0d/RE꿯p(h/| 1PwE|N9+҄yx_/J)/3/~ PoB~9移`|[Dh]Vv|CΊ׼ 8`0t\r֗!.xEp.9!pN%_iqg?Q .X#~Ӣ?&׃mtkör˟.͜sF_,R}oyۅqP=vq0Я9oAafol]wBCBp{. , * /!e|°<M/#ا/DŽ7rp3AA{1 Îu}RО] s_~t1]Pw4(޲G,` X,` X&)w X,` X,` X,` X,` XOPW,` X,` 8nX@ X,` X,` nO X,` X⧍Σ*]'EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\EqQ\Eq1..B:] E!ulÔ}(Ez>WV=ɆPPv.$joe_(~ʪ͜q3Š"_VMmVdp[z(s1Edj}h6yj3K6rv];sWqtPM+.X^4s(s;͜"ʹ,\@IKSs1c"S- Wolo(b(b9s>lWVm5 |4߄iHGf |_!b Eƽ ~6s("zG}1UfvB3PYNhҊuMb"Sy\e$gU&QD *"ޛ)ނoWnicI/ePr1tPQRŘhU)EPxwdQ\wowvmn$*dfZْ`Lٹ͌joKh1uVo&518D rB3eo.]7XB.e(&F09{ q\,&tx2 $0u3o(. e3}ԇ[r1̒{vMXnH`Ai*"-۸نɾ0hj3_N_vDE7x`. Ke֩s"6m4M]43&VRi9|jgm}EJN>r7mI/|7zS5.7ɷ}$7#71F"3ߏ2#N2ټEJ4TBI4ET-ƭJ'WhyFO\9UBJ,/9 hV1MZ;QћQd"(>yXcs+ ׾U KuX匌~}lvqx7#c]BJmovn'Zwnۣ YVnhe,M61YHwz-cy''ovm5-/\E/fS˖VٿO֝a!ּC7tǖ{U}-'{v]Ab ѝ7hd=Ә絛cLuΛ|˚Hk޻ꚭ7VmvsB. )X!wgy7oS{D(iQ|Tй@ԏ8Ú%Kf椤d25+ɖOZ&"kh>,F!'jGǖ}e.0KyDdMT6ì$,tM5:k^$1RΆo fWR2MQ˴t$Փ`gܒ:E_;]zyWdKꏶO+<-; F0 GB to|t%MVdNkP v[ub9 1YcRE]@d^ݠnUzFsaHwYˢȺwnhIGyT ͋)p4of}ZxZ-@Y5۶m`{y5^CiPaQ,!HjlW8(͗OW鮃&eȬL,Z0uhuD┏ږG'kn;gBB5xg8R9˯Qa(sAL!˴ٱ\ SBigGcfvݜ"7LBlhauRܹtQ^+L*TcnL2sЏ FYSsEFGTυJݤӜ)ӹرs+[6ɦ#7 X fP?BMUILVQ>bLWqk9GnV$%B}W[)B"/{,[*~)}nBBD"2VW|rn?xzgnzֳ/ھ6n;+Elwը'/4Y4^YJIh1v3Iyn O}zүfDyvA&b#]I1zTf<sAAKдirJF.5[OIqي<˙˜:a NJMɿF]am7ʦv'Bx~`Mf=R!i 5+ju$Q4}SQX?'O/ 7+)J.}[%RZqkZf|wfqIV1倴2Z8 wi^5>I#׽J:>{8 },ۆM_)" 2FbWI"srV﹄a%"OXܧ[dt=~+Oc$MXSFf] bwc7xѣ&E6{ű7d%3T,>XR%#TYq:4kZq?\@Y?9Yz8^` la')nBf8孛/\9?K}*,6m=ׯyqkN:!DJ [fë4ݿ6)[\X,uNwA汮zy[wlۤߛ>\yJ7vZ1NU iÎNve)y,<39B-q,DR4NYA)֜ԉoRxMj̋ڻAuYFCsD# 5Z8뿫d4.c"ئ>i? }קў4U%~j~)>ŧU?yιb-V>>Y|Z^UJV[zVkX~g,kT'8QъTV~eVg,Ci폊z~kqvX鳱Si|3R&|t9(ahy*{xP|OiO!O+|S_@Wk)FBn|dA`[3Vޣ'+-OZ`)>RӚ+>Y~`)!?[|q3>O+GYP?5?p@<,>ŧ>y8ȟ'u^SCf僷GʗOu/Eg<#xX|O'`IےIiw~dgT5Y{>'|6LE6JSzg٢]*} jFŧ4jqݬ.#ɚUTkO)>gru? ;_Im?b[VV=4-,>r:6a(=ϤtMiڧGwi_h=f7F}7M͘~։u7uH\+߉->B1Fe2,3kTelmz}7wbTRy Te?/M$Rnz|M3KֺNqLM1>-ol[`bQy E6#UOMog⦸7O@FenZG4k7*sf \nrImf'4+סB.[Bͺ%e?ok־Md-E`ɿ*/t}27Ep2I؍<^A团{ʒ"'eih.v B!ڊߦX7&eLO1-Uc?kc Zs+o64SWٿeZrǫ4ƩթXrOt9$IQ}2vU|<Қ?'*v?ZFeY?'**Vܨ/^`rĢ{[Cs7bQT]f3oQ{7*O@跖᪱&]ZFUܨ}ȟtM@aXq<雱6(!-;EMyLq-3ּɟ]Ram_?PɧXs{_;.>B#C=ӣ0~4ݠ@1XcM͘7*0bCDb"-WTVbMS0EqR ۚ,6&m?ڰnEo2M!]TxteH^x3al<ExцfkYgmܾizntٶuDž_&ym.Nz!>7a붚^uo/zE*vy6^m(ܺ ߉̼p[67mh b8||S쁍=go& }m}S`Mn^u benchmarkmeData/data/past_results.RData0000644000176200001440000027004613650321401017702 0ustar liggesusers]U7~!0dh'ɝ9}N(wAБ R(r-bA1 O,(:,5 "^ks}/{&=7;z36637*me7瞴;e鲳_? %9RNgGWTqLRH\ai[ f0eV0˲!YCI*5\J~$q;Jf~,  T,ďZҊ@jD2hqy( ė-C@V0 ZR:xC~_.o@/V.(~T$|I!( @x ,DJW K0 Z+I%N }D%DEIa@ [ˋXQːI K?_h6߫4.QVb"ZvMLM^nGF~\emԡQI(!5S|m "g 2~%ChjUȏB0 Aq*rPR>c8APɒ0 "ߗRPH1 HӴp <2b\[J2kD B%qXKCAAeA,Pm5eo oƏPa;JgA5JehuP(Pfd~ Ht!KCD2 q D2hJI.qA"Ü\( Ml>28ND9zu-CO{"X(lDsV YbW1 FK{!D|$BF@>2 uGIT¸e%$~ks CWI2>2<2|΢u2RhdD_ZɌ/E'u7 4LD 1ą ҼjDm<B POPdD W@HhIHAX\޲JYP#aT&aBCԑ$IC|)Qg@ėD=7H1 M2)?M/sQIS~۠( ecW BDxhR4Ab| ِOFI%Y J b2qu*eA[qdqv H¨ kH) HB22 n?(KBl4ŅsuR$4 . 1Q$raW~ $sXj~ς/ u6Ei Q(.HT8 D!q Z (kjǨ i19 ~A#h( _1S V*FB%=(YBJ! # ,TE+@i3 ǂ\25L" eR:I(E?8@ -ʌ$$n$uJ hj,o,QcPІ|e~2q%b?F͵eaFOᴸ?Kf 6(K|4Z@vlЎ(eH<&A"㸸eTǫPOL 38C\_R9rK57 "A3(3xATrPQqQJ_I|46l96ԠũJ/JVb]^dbs)}= {y`R!Tk'3ˊҐr٢ -C L2)t~pk/"żJ#Rs- úi,q% 5g( BJ|.ĹB03YhPF"@=WX ;-@$y> Rq0teYeuџ\Swb{P%WE2Z (3JAí} UʆO+8(pDdJF8_VjrT;^K:N\YRZMLjXyH9oQID?+8. 5 O6Ef9m˗9@٤RŀoYIKĂم¾RаF WEHf+B?Qˊ\m.D8B w`DSdef\15LwRTb7r ]!wMAt|R u̥fdht/1B\!TfCtۤ4pe49@A{hQѕ8AT视x8߂ "MT$I0|:A*gF,F L&U#)g{]jĽ1, ?P<*ڿ(wTLJ,|0k}$H D!V(PH<&аㄢc֡否\CVQ쇆 ePh/A͠|3’PH\ BX( E jA+YIǗhr"L}~ 9z $ b.(\S0 S}4 )]9(-5͸$1< .LM␬6@JQ4KZVW5% w4l6:S2P63<7R'_ceqP`n./,X%GZ- M@%[R`P!BM)2d gYYxxi4ao/d,rMF(B!TDSpjR92A5_YX :"MYfi,r%~*VQ]/j HJ3ЂeB|2L% tY*Y)5dR?(Ff竗 54 P%WZ$ϊg2+yA$nqA ,,~ic?_^¨T.~uThϊ=JCg4<˫pPYadi R]WV=PCOc^&AYR)P/K-CMc<$͚mD0)82Ζ~f8@P TBMniED5Q7D WE&@B?9`VJg~uy)d^QaFISJ(YK8 q-wJC!24d:sa| 7=>4N3ԤTnR=5s@{&ͷQw$1q ks7 n٥TW(|??"t&Ѭ˖P/5zU( |~j)K(_l2eXjx'A[H XF(k ?Zd0*~^W[O ΢p9,PpTB2Q-7.߯7?KZp3YJ}- 5Q]n@;0Q탆.ҰD$!%&O{RtԖHSyWB?)Ţ^4ܾ!ŶQ!8-6wz5;/WJA#V:X4oG5/v,&KJQgw,EHAm S͐ԥ 0!uH¨e񅣐2Fra H#C/-A# ʣͮZ.N ?;T˒;KBYi@m]lb .x s.u($:A5 #ԷR H|7ݏHGCI^oVŅ}5(H҄*l\&;@ GV^?:aR 2:;Aa(JCYÇ\?PÓIMe>:)IGZFdJb7uG͢AIK G)Tl, ݠTjF"wwWIT^HrKB@0BfYKH-PT혷ڜ W|P劝 тxBP$|9JW(<|B (3-@ T L* F(ARAYQA*uB&cpAU$(EjWNrbyTef/1zXRB=R dЏj_p}"nuϹZ, imр|0 b|Nȏ,_'] VJåeH qϋcWPc"-@{#a7(偑" RcE9h8Ytq5jP FAl9@>Qr?+vT`+!/c~'%['zL"jL-c2'2C\6Y 3R?y ehɼg\4+wt*? JsZ1\ CU>IcJ )ö/⢈w,-SZ8@ 1Q A==+!4:*²ǂYH\j"?45 |Q;ZbK$2O/梘a[JT B|4$uiCF4W5BO)X Pb#hD֒H# -if)'@@'BJCi(mG ߝEKF| U|" rQܠ- [xPF-JS]FLH%sG@- Ö $  jAuɮPC#QlRAX2×.l8!5̸Ivg⢒Y/ X+I@PA eJPВ[YSn a; 5ޏR?ηrM LcP|J 8ad!^ј :$0r-@N$k+ .l[@lj9)נ9@JFe[a^utqMQEyчSRSR!+|Z7H]&4A]8ɐU^ ͌1vBR{ ;BʮcQUWR!5 c~!5x_kX3@҇#?i-@9AӨ8 PL4 ¢mXR ) Ґ#‼Z WP=bJki:Y;A v!.PJ ָA2g($/Y *;JBqӤƒ .^Ѧɲ-iF&4nLfQ 7`.@ #s$7>4'$/}7 ef:5Ѭd?aP;?k% i~s #I6KCX/i]m2u`>$[.cL#?]Ju[d*= ^MH6Vꘛ79b5? BYùjz1QIZȷqtb$.L#/PfODOt8|F,4B;|:@ gD&o"Q~B5K 5^>Ӽ|(@6Bq,0(IVdv@,(K8_0 D ZVȑ iXmIJǡuRU%8LIH- z) S@MNN @TϻYe!:!ᑃ-Cم¥4ĵ2N?ˏ;wD2LAD Ȋ@f!BxҺ|*R2Te|V懹]%V~>M$xV4?ò4 8IB1W لPAeu9U 鴅h-@a&I":Daatxb3q}B22Χ@BsQYTC*3!E/h:G@9dmJ7~G]Ȳ0G T2]\$q{-@ X|N"Ԝ ¥ T'87|Re,43RE3}eQ~YIqGF-Qfd$v2? 4EEiHR@<@TECgd~rQQlR9 jiBd$as rk\4>0 8'\S"~8@*D#hJ~8R_F9 $AB -Xj$@I'j7bmbʙ 8' ( !4\(+ ƟnG2 RR%i( "lfUYEE- F "B lF8ڑi'U| n1]\8p.M C] .hTeqZ[Q%- #$(@4jR="bpOKC,1dJ",uhSWK!*AR %M`w+vTn +1.@J%hK:ҐbAAEa}.orER,V߈LHbTdL5 HPSb<3)$m@YZ3B,bmiH1FJٸIP## ]!rj^]cF#K?o%ze*db2.J IR=@Ă ' ZTdG%*P۠ :ɮxLZb(aB*rE|g~PCDFaKDjme!@{a}+C|9߄ ]iJ}Ҹ\Eu!jRP O&Q \X£T܎PGOQyVP ]ltn6e:-A:HB"?DcoI8(u,2i@rA%ppץH j$!ye}RQ!|ڊgID͂|w( )Lt@)qB; D%lf7( YWܠFH.MuVi}ԬP &giH4P-4tRI3g ] idKpJq3!"2|Sd6@z,)\ U{F$,2֧HԞg ̸C&0NBLj(a\(,qD0,!0UGaI!C,"&$Dgа6PG4E*~t8% 0Obs(ؑfIR\02% b%>|>T,ЖgԜGRVudR]z6'ƾ ⳊSc!YfXݧrBPBRy0? a=&/2_> q TTxViHj APP>etAqR3DS,4(>eb,$}ao)YC~0Nj}IjY1ҍcnP-e%~ ja b _DLݟ+BD.UAI:3;A(P"OQ5I R2r? ]YARFM$*" 9*x ;-@%uX/!u_65) %? ĆLAAi؜F%g\q{ F(mM$T\LvT(ɏ s|u”Z܇.P+z9@6(#|Cb)HZ=Reǩ,pR=& y "X]4ϸAƀOT !q~\S$kjtnHTdZA 1&m QRUjizi L #ݠH]!e T)ZIPk/b)- ȍ&<"_Hr8*zʾUm4rNj^<gsؓIGĊFIA( fsvA$Z%kY-@\s(+@#˧L:@nHO"EILIT07x(N|yJ(}"F1DJp%R$v!НRV i) x[ o4A"bA /q%hALA`;@N!.Q5|haS!h!E4\<5~(FVܠyW E~̟DW>[:G j0Du"*\TRV4wq(> c!֠$>6.%X+Ba'Aɍ jH%,^gqڃ$C=qfkȤHdqVŜ Hp|V8.&iR* 5 JS!Qr5|NHщ)?ͱ(ڂ aT$a eFTBU$h+AĐ#5|p;4f3(킌T#edC/ 8M<j+@x>e Ȱ=4 R= HҜI]"U(ΒQe:͕Df>:@ u,BS/e+PSqYTOA4B0He^;r(C:C:\cj![@&@dSHT+H5/_/!F)/bPӏhԈ/ }_ $5`HAjsFmPǨ^~Ki\Jua% <$VP 6;;@*uPQgUUJu;UiN- 64eT)D\ [PGq(Boo'4Q~(FRK\a# !0o^^!f>!53&-@I _ P:8CDNiK6H'2Ity,X'H;),Qh%/ :@pYߔ>ѭoxP]F}? I'Y|%sv˖CGR=[RlR$a~B1J8T'gI2T4Kb|iH -,$ 7`q.Nu.VH(/C1^p+%QJ3ttO$Ls mPA SwPcyO-^XOPň P} V$NDPr[Fi5038B.PܝGޕMZ{QG ՀZ[zPg|ӒP3G GLrA*ev F-CiOH0?+,42:*Œ4I@;R։nmpSiU/eiф c,858b45dAij(XByHHFq. kBCA2C H͊4u 65c?"tpA1tP5N6V* 5]bS]f6h,Jczi)H֡֐) .LVWZkT0q瑤Ȥ/A٠U !+D@ZRmI%Q\ :C)5p.-H!x5yPY$8: 0ahP]? !ȮAψixL/- 5A-xzv&0YnRFwLiaj𐖂dnLAXoI#bt# J/9T- MphAQ$A 5Hfޠ@-CYzV4B?-AI~.εy"(Z^*ФeQD . 1q>IqMkqݚu(X:@af7iˆGW/QaA(ҰP]a~T)y9)!nz̔|铖!^{EQ+hJu? )3Il|&k% nZ#}QeQA\H٘"Ϗqxy)A{ 5L70R{ۓ1Px6@0΂bQ: J|k7 (n*Q $"gCj\@PTjDB,ܢ~BM^{rh lYA^GuTMgyJ1 ,vtH{(RPs$ ,Ki]:iiēQ|9KhKgH*S.,`$ِ Q=[AF]+2*tt$LY E$~ wz4(fM "g;@ʷOS|<"n7.>jי\Fqhh @l5a%gA",7(ښ/bPj@Q1E- ͵ b3Yue"_mnII%iU* 5-8056+7FY(m4UM0 "cu8 Ui,_x Ϥ HSJB# 81kNh-);͖,IsB#GA{g$4IM,,4%)%̈́v(3)=BTF< uq(6@)4@' RSR2]"QInPsP0? ဨ)f&*Q(E R2T2.PCǔ+C*|UBErF0G@ PKvef/Kb-i*T3@d36%, 5t43zZːdJРR>/Kˢ4$u$ƬrP#'J[0!@yERQ'9%!g'H٭)ɠ,+@@|D[K2P1ڬaH}8RQ&j⛞UEh "q:@Jץih*AEe!Aԧ! Qբ^=ytLƅQVHd>6Al~JELrPӠF:^^27Al4>DҐPRRd|] ~]%(vTcTIVHyq2'?,4ME 8&}Q9C1X^Hy} %#C5xaċ2iy^ExYӿ2 $ >Raxޞ_ rew!iE7H^8@ސ.P,4)9Ie/3PSG-C*$,ps7iB–&+ID- IHrGn)bD`3DI 2$u|X  oq |sT'HEfQWL)hyE[,DdWBᆋ~)hLM PS Bի $$"?;ALeI37(e}*}wRqg`*BzfIdJ |jy_aϏ-CgET_4ķ5DB^>U%T%ϕ D3|YHY>DHV7q"ƳBzwf|"oAZ%C~vQ"$ߒtYda F/nP#NC*dA t 0.%e,gSړEweБB 7OH4.twnJ*O:uO|V. #ARK^d&YYRX~ABI 4}7Œ:: "BV_yo>.H\RWUf_=-+ 5.gBr\ >o8@R2a_Ԍ!%.:* &L/t]{%HuZ/;ABlqA) \g z^ːY2"3$2i`U; FQJHoqO%ʰeq -BgH,) q'nDhJ-Cjb@Z'O?wP@Fye!D0>BZ~D$WyT)|?A_',)f؅v@\G vRquJP#-n YOO]rS!]?#~A ;-,jL q~$W+PNKJBe%3VT0qLP.Ez۹BYik|Vij8oA|%w*(Ӹ@cd>Pf@PDL2IqPœ.dk|A)/-E ģdL8,e!>aOudcGAZ G@JD vR2qhh ѴRjZA# *g? ?+'Cf̠DFa4.=[@| #2GiLdZWQjQ6* uC48pjKDqy@gQ%ܰfE $.~H :&pTz 9 QALҀ hUѓH5 l궓eVC0+-JA#'=|if}]}K"*O‚\oTjQ8zܠX)Ij9zT4jD r9E$i:1Q㡿 -*oVE3>FG(du) jjh#hJjq5I*nzx* XY(iTԡQé 4JCꎟHfՖF9 Rސ8Jb*$mo=LAi:QjI+5L3CmpXS@$SQRy1MS6(I Ǥ]B$!kRy=b(ȏҬe5Wƫg4y yb~F~\RjmRAHR0*eQlHCꯙ (ZALhjlVL:GO?s2]p [*- 5BfumDi M(_'Fas1l 74( ìeH{2Be(AL^l 7(C&czI qk?HEP l为2[@FBE~Q!/ )jLo*m떂:7?i4mI*H PCRSGU?,'Hpg4>ͥA>4%:԰A`0BPB<ȨBP3'QʤeY"E꛼!n;iCdO#7~J| KCMd.aWB  +q<7$̱(,JɲP&H.$hh~rt'a7*d|O- udmi>449UPMTf)Y?mzD?[uu.HA-1C)F*5sH@5ArAFhi$R1zm j&)5+DzvPǍusY«aEG 'A q/02?lȀ Դ2T%|a2ARiufќ }9y4veHj= Y:4 4 Iq^GP8nƼuE,8 6(-C /q}3OtxP^RA!//5txJ#R˨o0ZBL)9G]Qq>CQ%sCMe˥,4d0i/ UR+h,v &!Ѡrm)^z @!d,YH8@MggW. 5=r.8+Hb$tqd( X $1e& 5^^ !0gG oiKCB&yd>\R9p?ƔRE$v%1r,4IZ@F.E>RIN5P#HReJ4);ĎPF67H],LR?0x7Q[2]u (u6/I#XDL 4h2J)즔rPgċ%_ )89ˢmP&L"R?i$J0ijY?M2 QD)7(Qa1QJ۽e>Ɨ/54W̘\j V_::GvmP @@pd8ia߰e!VH}HW9Azmqhy zLQw[s4Ӡ)^)5"+ e!', Y{Vl5sĕ4BcAӒ8ͻ{ %aٲP#&>I %EASR7(D=WX'* yjPadJ;4ye McqەGF4 3hV 5)RP [m7( ,Lt* %: RR&s0ҸPR+(2&ER<NQ`SӺ"ݍOB͓T^|j&u2\QPj d<יDqDfxuPg-AG 2\wdoC cU>$4vFQHC MJ)(^JL0H <ubTJ?wd9Aӂ6 4i5(Ѡ-Cɂ x/6\qMZ{YURaTT(26!z)(/ MDT͊FKP{_o[]@ f~hIY*YeUPGR :9HdwKA 5Pb`,3Y(P#C-ȠeDI#n]`.EQBAdl y$c\Kg82vQ>.q*"5I-CMU3 c7rBLP) |0!hXȥR,H8F)cKBIE URZA9Pe8l&IP&yoN%˲KB#wH^|ӐR("/ 'HJgYIdi' I%K #XJ,A-WE^9@ùqӘT7՗8cɡD#` jǒsAoI&|$ZWl7[.5{Q{ D [/䖠Du@~c'&C7PS&,̝& Kx^3G* %uX ΊH\ I2C#fH "*beGi(nhS'Q8@ uElh iʤ02>Q4HHmB7H8]]{\q=D, >%dxmmhȣE~Y]$<rԜ,4Dd ҉QHA E1OT IZp"Kpq ڞ:GPOŨe]2аq(+xEqݑu*a&2(. 5nc䣅ev@4Ohι@D Ѥ1E$ni-:F8A߇X ;A(9i(DQ]thpF\PNJ{FieIXwdFO'S&qIZy:@6j(]y2nΐĝ vaWt" idД aV ŗG.MA V1K]!2t/J e! ,څ4i%liPX;`@fӽ|~7H[؄((偑|, 8`v]ࣨA';A*#I8r=-ZP 2pg2Y! رl~ZQS"? 37-dsg(lhbpJA#%*Ij׺"#Dc. !, wrT 8ixW!MIhq_ ȤHHƤݲ |)|tfO#W/(3&^!<2kы^R3w53SfFSs,tZBfQ7yE/Ғrl0ӵuԌth)3<3BT+GmF3=nV3HQ7S m[7ӳ-&gOtúZȡ,53V7F7xf:f߷fꁙF%i3C<#u irLӚZt53tBH3ӡ-,c53kGQ3ӭf:Bt ЅX ݛ#,t~L5SpQIzgtn6_3R]MzDWu#Czfaoi18F:TP )mFu3Y3?lyFj=7ԢZZ=u3-CZ kc9:3S6G3Qt_u33! ekeuztW{f:кZhs7BGj,:ZExF:fz7n]7S :ng G?Fj[՞Ƞmmy5#ɣ=3MfxF:xm]3҆U\άMfxfN0ӚWHiya^):k0ҡ-KK=3S۽l OxFjK fC'H&[fj'+z-c;fkKmQrײt㚙Q<3}߽HKgu#!t }WLm~g[\Ѷ_>^cjF:Zu3 -q!_Хm~skfZC:{ꥨ./ItO0St #!mWLO=3_ՍthZ3ffsyLtXN`{bl6=,0ӋF|mz@nFZV/oŏPB-e<3_Gjg2 >Y3R쮚mD~|V7SK6:Lbg6~eԢo m_7 _50gk|Lx0L)L-5_͖7q^}ݨ-鴺:?Q3@9Hid6T=Y3S^Tclt6p ΃Q_tA;6YᇎO{F: FZβ37ɬ7-V}fwبpg}`OC&j׶߷{L-/v?n6Skn˗53kf Hz.thniV?miW^Z Z&Vޖ72lVqXHq} fcPgCSH>v>-jZ_':Z,Wgmf[KCAHmy|fiPf'X}u#[Y%?`oݨ%oTLmjFjo3]Z7Ҷ՚ZLK<3j,9ei\7S[>-ZS}%^)jlZknC;Xh߹ffz[{YazDLзhLmq|ML-jvxFZ:Z{ז_IjγЍ-Ԗ6pg6;53jCsjoR3S[^MϰčmϵM;Fkfj{,P0qu6Fr~7?F53RKU϶1u35moV -}䷍T[73S8^yKZU_-n6{3S[^oV3S;f]u3ImyTj+ RYͫQ[orLm~BmgF:tgՌ+_3A.4F>\k~W6}"gvm,oN,e6H lrt 0Rkd0S[fjfjyn_B)Z3t#+GKW:PMGӋ=3= t1HʹcWC灙53Y[̴_Ò_3`Hly_6?bӧKX.F3]Z7ӽQt~Pkf.-vg6=غZ:kff0R[_FjY՟jYi~6gVU.6?=:VZh7O,vkMZ'e7pgK루s-UY_-?.~Jm}'{fj,A{ⵇLyZTlзZh7[C!nk#[3u#uIڧ6z+mq90Bmh~m}Hm}D-m.0RkntB}4w0S=4nu^G-]x~ktCLmjX6Ғ~F>kɓ?=53-[`|ٕw fzfHuyX Fjlu6nCZ9:n~־힑`Lmyh˃8B罦Ԗ_mʖ_* ta}43L-kv0`1ʼnX&fnjgFj34R5;Zv#|L8BLm3;[R cg6S5#:+GϨI:LlyHlCl[??f6>|L-ziaLmѷX-ΚWyfZZc5#-lu_emfFJ-eEYsZl~'3R[އUmy=3ɳ=38fz03Ƴ~_3!0R_іWknjչ3=fϷA2=B{LmvmpPKǭqK9ly!zo20mjfIHUݸf5Hoxˢ+n &/^5.dXUtg<79K ⿵E,t)-?O~-/u3}KHK'mys<#Ԗc^`CmZtPK~u^Ԛ/S{ejˋ虩-m5xoHU/moWm=3-φrG|n>M&ݰ>ZϹ:ofHy8-b?}U3SdW~'jFjwl,r8nґ-&}n]VjˣԢg8#ˇH_ufj͓ Zt;Fjo/{߷RK~UCYzj50Skvg>J% X|^噩%~gͫM?fӲę/ϟ3SklHml1,͟YlvLm~> }{Lm'#fj{Ǧ[mu3w;5嚑ZwGl|?"3-]l >fg׍]G^sa0S[7ԌtA0Rk6 ՑZ!Kވρ޵ivxu3}:]<3-:[Iu3=L2cFyB6?NYFctqLWxf.􍞙jp6<-VX7ӲQpГ,BL? [EL?m,tg/kfj;gZmxALmkf Lm( `_i#5Om|iLmG%kfj;''[kf~ rQO:S9g+-*0SCuy~j%zmL?[3Ssҫ<3]Z7K=3CLg-亙􊺙-0fjyxFj`I`2>7L♩f6}揰C߲P/[ \l϶=mKy隅ʹd=NY{j(#Fmv>珞~Bmomzu53`LuS+Gmio7~v/>תWYhZS]ϲo7xfj_ 9m[:~nuѥu3M@LmS0SVk.6~f/ٞnj[=3>ܱ}7<3zLZڞk]c?5##v랙~Fmfkfj̴/kfz鵞Ol~u3yw׍^,zCLm~뼴n?Bmͦ?fZ<[Yb?PּD޲@53}[4iYj?m]m:xLo['s_m3sfzѨwSgѯC`6?͞űiM,7RP۾Nl~fs^?u}mGLmqo]_V/;0ӟԶuFLOZ'ԲCL?buL_ZO<3ڨZ\6} u3og[53XLZhY<3;ܴ3Zh= \S+G~P3F]L&mZƚC53şmܞ\7Qh1F8cO>뤥KtF{t)H_ly ~kE\;糖~|nbȍyt? UAp 7Sfvawk{ՇgG{ >)/z/?~ܧ< W._?ː~xwbm @;|b @wI҃q'~r t%0u%;Лa"~=߰xMHB07龵| []㧼s.O'1vAێǏhK+`~uǏ^oSwe0>o `x[{ ye }&㸏}87|ߟ!n}r{ n0/_ <گW@{zK }:y7}N &N ˽&H&//e]]c:shYñmǫ޹ ܠep0ﻫ|{1| ~~`'gAE1;~AҮ~/zy4|1"?]}3=.|/]P9k dO~^ BﯾLۿ~Aϟw줟~ilJ~LOtZW\}Λ;=A_7WW^Ox޷Sq=z 9K7{8mpk5/&Mnu,Bv{+GOsk޶|dْO`+_ݵ6oχ-47zfmL jY__|WC8?: oxN}Cbvb)ݗ~x,/~ ˜.jkpZ~9<׼cy ]x?H:u`_}w>{L\{v\W7l2 'a>#xN.~|Ѓf(~k9V^yg?+|͹|I#  \a3\olS} a7Hg7>wflԮ=dՠo,Q| 7OFG|[k['OO>+o'B/=ȥV}ë>_uVAM:?=0k\{z (L{6.EF9yVM_RV$ϛqFe7/\OL?]0Cv݇YNg]01HfArn߮\Zg{`I}7Y;X| zm?K.-^kMጛg釅kw`߫>6K6ǍswƇto3:A:}o^;^}oc"?+xoVqگ cu }꽴]Ջ-8to{枎zĠpQ,~_^rAw5*y:xquʫ>J|Zk3+r|}(˟u<~eK|]]:X@U0U-{ `=gL Vc u:|g_y/y"]ݯ_{0SW?x~O=9lH#> WqA4ꇫP"S8}ww?}Mt<,oz`.}N̡W3ﺾ}y-]3dܵ3߹ &dx6=O뇈i.L[O'Z s:'r3j 0ugZ`Q?F `3:.ȗ=:fpM_` Շ>o{E$>{tx ˷y mHǓڠ5p_qP/pTmށ(OyXCz ?ﯾt68WϼsGxէq[w ¹)Wͫ')> oSzh0GTP"~u7F |,é?'}OfT_f$Vv)ݻ ^EWwmS︥oﳳ>cIwvx?=zǞv< fp>[=r?މO+QE#Q ! :y!s\7'zpއ>A=?cv߻|j+_MH蛔rb&q8١/L}@@~qC1Ixt&6$A/K s?&!/? ^d@{KLg=s*tDẒl{4 y;=H@rtLx~tedW#H>^=}@6QMu W`;x5&Uy7L֏}?ߗ~\>]z,~ޅc tz汝uluE΅ߢu]Eh,}0Э;ЪvGox0#7S-d_ O/>q C|>(zO;9,$ ;"a[Vg;E蓤*]0+ Jۉ߻fo\}ie}wŃ?qyM t!Sݷ}Sm?7B|0}qC}Yb/#nM9e'`9f{7ٕ3`:_dh˃sv<x;$˃m] ~`Ϗ>/ QZ]/G4yFD4wN5)xY?3}TYϛ [ >0?oT_8xOP>}apKhyuyhgG|} *Mc CxXCJ[ CH{|8tV:w⾑? Bv:0z3^K[aGޞ[`ͧ}h{aGmOg;¥:aƄ~ŭAtO1f!&5q؆Y޿~؆XƳ?*r1{mM~ _-O8.+aKW){+jۏ}klB{^y=Kq9tC3\FrZ·? :YCG/?};]oHX}5+7>sOHv'r^kB9S}=R.i9qfdt*zΫaQUkyU!G;o,8b;A˽렛a>a*w@?\/i̗aY@jP=X;=K`]~_}kx~Y\=ؔU_*WP_Zt Gz'}ߠ}NP}y/_ p̾Q#ھѕ|,;ai#\ @{/+_&8¯磜 h1 {ZIn?y؝aO~]B{avA3{]3tu羿8oa uȫ>іl.(%3w DZ=Wg}OJD u6[ZpE?}/ =؊ᴎWAUKdǤv׺P!hXzB$6۬>|+g%~U컆>5]+`|%|Tx;* u^Xc(yt23>0JÀot<;z-|m >3XOD{ՙ!`?0!"/FMp}O\ ;޶9xtl Icx33?绮_z?[^v;<_o-69 r%ç`J3I+z0= ~Ћ [vwx#q8Ld ?Z[}跣)q_,_xmv矂~:/bWrԢ~Ű)}^t z~n-L"~^aP]A ޗT|&d>}=Fz Ofxޝ/=Dr Y_u|?9~>0w?-e{rc}s|Oo 0yJarHg*{݈?J =%=ҟǝϻD5q)hxwSGz]=l^?.W~~'UtQ> ?|O~@Adg>M6"shXZv&}=7uL%4׃@3폸/|cS17' ' R^Tۃo\Vv}@yI)n>?"#Sa/0Ne96 v>~+h>1z=rquG~F+fLW@Jԗ<ْVClhޠW9`Uy0 ~^bJ;W^Ka_^>_R a!o>vv@<˻WvEvwDטG;-&{ 4:!sOąB B7B0|`U0^w$7G J7?9rL)V}fWs{xަ!yʹh7î_לK|^Ň?¨աT &^9O? x@yԮ~xM?lJ؍Byp>vV >E7<:J{P~}7FK~z {!/}PH #o#u[1Lx.H1t?ۏu^^}y '͙]O~U0gt.Jj׋hn ?DzY0kWW|Q$HW箄 ՗6tnm}e<^ٮ~$˯+}'>K{OWSD?NP9QϨr<{h?\LR{g}|:/Kggt< dt+,b{{/R~[{nnvփ7W*ﱛ;e~,-Oڇ&էavIW~֫><7:|q ~oG{$G="<Dz"-|3z|.z ok`*/rؼws/o\@輍:NIW*NR}Ȁ{"eu>9qvszC}r89<9E=aα*>I-cXnG9~[`^?!ƇEJQv]}_ x] ozCq=ڎZeu vN vK~muK/=HOcf*?VKB":.5򋆠쯾wOE=d @_VCW"?ɧ`U\p7:>vZe~B>0{4FXݣީW|Av9M=fԛފ|+]3n=%}yWXLmLlsʗ#?I i(},ڂ`|Y]}zy(O>N7$҃LǺN̿!E>o<^+Be3WJ a~8~?'S%,?MZ [y7CS9~R[7! K oP~R: /x*vlAa w#i]K OlxQ>L nxw<u,`hfe*tҽEK})+tϾd^;k~|{H:ngiJןUMߠ;>jZ'sQg;_ =@!ʾ] mN.ďӈ:;~}It~8 פk?ֿՇWegHq(#F$(.Y^;՗Y?^,?u\#&x}?:. Z@\Fz[ѱB}b,ǯMro)'ȟWf|*YqCJ JA&JT$vcz0X_`"Nd޶#5yB?fg)y"4۹g؏|k znG}?<=RbMb)6GlOxhrQ^}P~Sȵh rF;狀'LeTx{㼞gqcOqaMp{wc>OV>{<> (p@E]_}Q.Q|_v=o[bY| ߣؘ>KCwstw?UJٌX~IA>FMUΔ"}UgؼZ-ߙOxy;E &9\ %U?^Wu\iGU_`v]V}LUajG>=. R_:}w`% Z~vq^qw/A~Tq=h#d>9j%'8VU0@'۳z߷) 6}?6:o[`IG]z ƭϿ].3Y>ihj3uvߢ*m`sN8`yLauǍ8:eY׾i q]+Ϫ|槫`{owjˇhjsmGa?Rکɠʳۑ)=JsP^ a<9dO;Ljm?~!|i_}Mϫ>o`6^ Ǖ_szkO[_e-y6%A}Hnv⺲t~!RIz-\{9~w_Vygz -{yQ[>`)?wLgda#͢Cy;L?azOޤ*O=vRe'Rzo KQ  F~ӭb، kJq00c;k6:躗kT|b&!}$_f=Ze*Xߟ^Ob] y|7\:_lܜBydݚn,ߦ2>{A `_ym.>7w_|st>E) {S*?2/QE3?~S}w>He+U~ Wm矩;x!<&е뼠{tWq=u<짂> SI.ލ>34wfq65g7/gw~1՗߅ir=P3ĘQy_ds浓@r; }v,g 1$6 aTSU~+Nj8=9Q^oy+~0An̏r{6un{8*U|a5ʟ3asWQк`q\y֟F9t]է'_@6LcYDG@z >Glq[+?tU]Q/OV~!o?7?|́=qW@绾DQޡ+q<>?Wzt AqfS_@{Rؔ&Tþ*[| ^y^`C{(r6b!=Us;ީ{¯к %*_g_ʟqu5-ʭt}G=%{lJ2i ﱏ?}>-OOu>5tWͿٌ}njp>JHDw8q3#n@z0*W/(~p[i뮆*;tf|\s(kB!`52|_)_`MH>()*YNPh*m<7\_ ?</vpt~}dM`,6QL>Xpz>Qi?NʋsyomI_5isK`އտIOnjc9n,ύT)=kb}>[`syk%FoX Ө^aT~d%00FMzdſ ^_C^=Pa>;<l߯=4vgO~"㯁 \@[xO{f ~b4@ٟU=LpLg%vA׷  Maw_/o!Ia6N:Yy$m[麱@;T^9;ϓ}'y 3~Uɿ _s~0]'W~pGWχjfS`ߏ.](W|p֣'y|<7~4-} ctj0Cwo `{K~`S(/6؂K`TlI7 X-Y>޿0흚 iju}λJ+TT.D;/>(_)o䣃-T ݛhom7%n<^ʻ~p7z^􆸊߻k'reGWWzſ 0Kg~T U{3 ~jxS_PNDeÏ)y%l> &{_頷@[3[svpy~S`" @oNVcBq0 `:UwneK/B>(?P\)/T/ ŚOa 8 Ysy l< |g{e Yz G E0GAERuzlrZŻ>s>t器H'puzM|v峽3*7KYy&wStkԐ:_q;l1k@0V鹂7@T`3{/yOyҧ'ioOU3So :AXay3~=y/`"P+=UBA~0ycg'sQoU}.˺^~9r$,&Ö?5qQ㼲_"}hXaP^%(6oBÎ9f\c;x{/nw1ڛOUTn |#(@;q8ovש+rD ?O:W*Ov+̷.Z8C]t}JMX[}BOsLySOWv9JoQ_ɝWTSXhq;v@_߫*.躑YonTF)g In9Sy "ğ(^A>ѧ~/pW [~[`QOf:/:} P!ubgvt4;|Ou= <L{j;UtCxh~ySu|8RXԪOߠ '&|JuU,,Wm t\!8[ӄ{\y~=`#ԗ K{2*V s:CoP:/^·aTWK-V^/.m coT}[d_/HJȯߏ^ZE> VvS?LN7c)OC>zSH^aVn (p߹nC|.zP||s:9G~C$H߀.t~ 1lt]?pN9G$UGs7o|\Y>0lNv6 zyuxShYϿ؎ug5Ӄ/){ IQ;}ǘ_.7ɍcZsU9G.a{OãЧ_zZ;ug=j,D@UWmO:_箂ʅ_H3TD@yu(v[}$gP_:?{7O!PuhP~ ]3eg1UWBIU׃>V}y0/?w` =΃{x?ZixJV~Щ)>k@]޽RG(|{`cj o#%l3,?Mг)扰;sNDy tgUuSY/B*n8JߘLȶۜVcP%* {]zրΧYϼ 3꼞nP~`Ǩצ^z3â)H3p^ͪ`e|ϖ_U /V}\!TTR*e>fCiFK)jE\j=lE_|T+\ U9ằa;6^1l3Ǔgr6m~-o|Vo>s.<[;Qo:xLיZ>#ٚQ]җz4P}rkTt4t՟c7VWB϶[̣ƅ[5>JA!?/VwKr|%\4ᅰ_ o׍. G} f>~swFy^K}gvzrhmẂG#8WЀG}=xﶥׯ!_vȯ(pX}0oyă\h t%=CvJ^- =Q"8 @I?ͿMngHɃ1h'ܡz8pU/RQA"?f}œ,~ %;WdϹ_HV! t<u1N?檴e]C쯫/WAI]sZ9mF}PnoLa? @9 ƪ_}aWU~'=@}Ky 8}fkW߻ 6R\UV`S._cuz?__y2CwPoJkX%Xi/K|~?st}q/S ;;b`K@P~aձ_c(reuj/v3.yOwLy*NXt7$ˉ}6t: XAo~ΪOH/ǁ:Iӓ^t']'#Gq<LukdO6$TuIst܉~GD;{?%~wqX끈M]У3VdzZZ/t^AoU}F[zYOZ}@ />sʋAٗ"}0=Ob])};q; 6Qy6ɭz/$si:0= "%Kr GGdPxƳ3q?'ȷ[3g-9r|׉k02`<2snqKPmR{QUn=нMs<듗@>TvJKt> ǥ݇q` Y?T_R݇UZ{)}}?y#|UWkӆ-U9U f3{Tusjpį7W#k?^s>DyxQ9p?N G>9"Py\L=qCOA=O4G_5*K4:c'I|Os??j{l%lめ;r춪AeOH?Q}ExZ3W^a9v]G1Ⱦ݃փ=nlS=oeI_!lMu-ws^_$} B7a-9ފz_HY3#~%掣5Dž:ns9u t:mp_ޭPt^_xOE!Y1b fB}NSyJTNLq'CG| U0zϾ~o0i> ۰?\HqVt#E:- n=꫰[>{G&w^ Su-ao{~|c7O!&>7x>!;MT{K$ޟꂣK߳O}\wUWS;𽹯,|y@~8!*΃z泳T] Q{qȮDjѯqUsؗl,ZC9x?ӹE>r_CfQ!,k/^ ?}~fW/ޏvӇtߔ}P@秣ګzt_ȹl`y}B94JpCЫժRGB>1^ǿuP¼e(߿0fs?eOj5~UTOC!;rC3WWqwru3<]?뢩Ч=1~evY?TAޤ،ԡ~@yrWf1rq~ tɈ~g.R}2:4e'@RʭL/rk̃W]ȈT y -} 6;|W<ڻl:v-KxOo!GBIzO$7ϯj0g6=/` @9GߟM!IS?G+}R}ܫ,Ma>pV<r<~6hW8$Xb D?{^}z=yTgES<7;Gp tܿik`2ۉ;f]^}ZT2?ـ8sݪҳY_9N]|V}Y#Lm #uI/bԣ=ׁ> t=Z2 ~$w`5|t> 3tyFb#Rj^iz=Q9>򣍨?Q:P.Ѡ8*h7T]*HD>>A7n,s(f~__|HCpMOg/9n|cP56$uۿir]?=*@BCX'۠z|B6 OQ@d2,q=oZE{0aosy_$\~ LcDC#7v *d{uk>ӴNj=JbKhӹ>u[Շ]O真կ98?qٽڐƿOȷwR 9Qx=}:#Ae]ѧ:^2_;K0 s4YAۮ>Ci_c Gq=D6's|+uJ20c9a<5!VoM??Ϳ-WA!p}fu t"\-%0 ~r.~9OzA9HsoeUx}seG '\r d綧1߹ s ;9^ >; $kU^_U_>^ʟЩ :HGo7S|+՗, AO[~9tscT~B!m_ƺ%Շ}a>7D=Q 9e5MOn~CyxfM!izEy`{z`c,ʟ[ [_fHG$ބr"8x/ ]ó>b+ՏBO_Tu^3]s+n |-UE,}d6—Oz֟wp}]O1KU<*oq{G/y'+)ktJA;f6ӽ7~E0yFy`ӣ:y]5CA9ɦ*^7[/:Nrd.>~0Ϥ+O?W؎/Lo{BIC16c95:a&C^ء?;(_UT6Co?%ˁ%HNpGvӹ:c1̽LI_t\o-N>YWìT~ܧ!'!+`ߑz v9FQzTo\gn~C Z6fulk|S`Ϳ{ۧy瓽o|H;bt#}}6yw>~9vB؉P7;SaÕ >u*uJs>[?nG;ZoTnt(K?{WQs9NS4IrubR_k aмg5̡xgS#_ =4W<@v O$ݧOAr=lG?z cp LCɕ.k v07aN]x:=g1k/Q`c?^ݖvx߾Lw򜟟ü_n3W8yIÛuR,kDv?$9JSc|`¯K` U/ 'IէkSV^Hra Pf4t}tm*1N\stzWK` ;Ҷv4EKhiT݇?}k@ot?Q1ܗ 2Q[~/{yk6gO?O'v,yg[{"t\a9J|e//4퇎w|p zlKxnRi5nj^Ls؟~hr[R\߉R4rn ߠ93x?,.߄E<؁+|:m= KW\ }!>,=_s@~B?1~ys fxATߪڇ Q=ΰ>1sH#{p?H6Vw~`KWۂrР~Bi~Q[SUGKWz`r*:bhmMq]FקBk5l}:n>g^z-Tu//G`=^ޚ.k|SÍ a?/+Z7U?Ôނcq=6?!t\8nɏV}?_6 AKўdH. "COk6WQ]RZeRoG?&: \fw5q//7Ohwf4ba35sԐ0̷Ϊ>Gn;`;U ~>g신r*9f\o_H^ }CНCT IZs/Ux.1 T|@r[ߠD+TLjF}]Q/QV{x,Ssdm렶.h#4 /۹~ʇ\c:Nyյ:.?h|)z[܃SƜﲤS|}P$?+W(?[4Cλ,]B.H_Q<!|nD޾+\7S?PJ}zY7?3!&ypB} e>}ʸ#ŕ_x#_jt=2_C9kBJh_y>0YyU!?ΨQ~SplbؒXNzL7z'_ӟBs_;l؂r{b?,s]ς>=r.y@AzTƮd:k!)o9'7%j&x:@u}~~ pOu-1@z8k{NSs55a[ݟ} ꯜ_[r{lꛫ/s;~؊I`o|kaos]IK$({O@*?~/ކٛ`k<߄"G p7̛XK`/?[V}5/_ y,شO)` sAǫߪKyW~o"yhrHt~|'ruWɷtI/}s?oG/92lxK{v'{cOM2tE[{7j.{ҁ\}O)vĚ+>SOaAM~oAߟ?rF95׍_yְ%/*9[ѱvU'C,ÛM}t!T(gtWXqMQ?9h>&o{?Mj֝=*g?h~ؒ{{/1|G#Wsǧ} _"=p*_BkPI{P|\a'ۺmu%_ɴF#½UCt$.9vTs(*0Y_xtM0?xʧ+5gt.˒!RgP\/TI?A._`oQגss0Gŋ3|?8VL5؄ÔO_;uܽߋjؖx7P6//sOeڏVU;|~ ynz?筞~i7zXiy+!Ec-^D>I;{]Eofg1o4[ak&~ƾxYOt*twc??Oy5%wZL}9/?C`+X!==I~`3>^yHnsK`oI? xlCqY 쁔`s<S⟩DuP Q|A羘,t\ugyָ ('j=)`@oO6W繗a8Z p|z8fGhOX;v+Bd܏vTd'II C7.q}Mv3/8 I0=>8_5~?,Fa];K'ߠé9ALoLf.(/0>U_߇Nv9.@tىWC{+ByG`S2@q7T|q}U00.lo;Ug˼j.\rOR#=?"y>׉Uysx_ ǩ@39 6s_7>gl-Fr?lOu&)_t?v-@f_E l Q刯Λoש?ہsg` 5>mnzT? Newj{(rXkaTNkLE,|һ^{`/(-:_o/~$ot'=Ƭ?K2)9"ۅYN'|q[\_;)<7<r.|ph_|?pg?\o,@?5Eo^ʛwϗqjqd2_wG^-S7^y:ώrc;*z0Jܾ * slh0d}oAwu%̲ )a|U"//OyE6Ş~dGy[N>x-;G0SJU!m'5"~q;FcG}6X髿_兿Xp^K7<9aϖ/;-‘ #xgOB^SJ_|&s߂c&8~0}9c6vvg6Ꮜ\g?r/߆W7)\? >3~ `KeTWة=erZ/Nq40LCEձ0,/{ؒzxp_7=Po/VWühCPO{j8}\iyc*O _x88,ݾgT?9C' ^qst?<. qzfU_Ln c]o$+\7`s}=hgqVt+Mq}?9䁟٫WD2yb3ח~-oXVĵ=ɖ.gؑ\b)at[?/ؑ.z(Ыf>\j?fzʓ"nV<&cmsh}2t'̟kX8>̣RA2=̧?B)=_3x-}|鳾~6oG|=Sl}??Ve}}<}_ފs6yx1vVh/.dnvze?Ya}=OaEOoxkWqiH|#ߟq/?̙9ʆ㿲iO_CyO磳ؼocw̚UC~#;_~1j+;y6A~ bG]?/|[<_V,:aˊNz{ Ǿ))K~s׀'|=?}l>7,e tº9 Y>Yz0P;q?<1nf+OЯ0#])z",_ |d#>h'[ ճlvI3}9Lv"ι-z)V\/"+nc!b>$]ϏuP)t\__ysrbz;?sg=b|"9>P#3߸rgV|܀ŧ["~[^n௣{}3Ƿs]?#<;B]{up0<77Z q7Ĺz)N1Vpo߻!~7[btCS ?fˎD|.7s=;׻_¼B#8ە||~&/cU~O8]i;*.N~>ck k[qg}7UaLW|6<g˝?qN눟e|G?bW`/N6$޻[3/g3Yw(_3B{q !oz,+CyJH>Z ~'~VRv7~;eBп0ɕ?#aAv3П!+x2? B9w0Rđ/g ;Bx<ӹ{{W8M> 1 E؛0{g~^4{?ّ\-?dA<>(ϷUe+ >͟'K_GsB70obé^"LvQ/8# 0c0ޑw/1lA_"~ï}ˎ ϋ ig/ /zo +dD\E`§p}ǖˆfv=A:Y}aSxc+.A<|G׸ľ}<-'wy|yaX`oƿ8Z-u'&|-{e~#"Q;9dgmWy~}J9Gʣ]˱7rAaBO=%;9]ežpfIz]"[ =6swZn~[ۺh 42?K>\$Ѕ} S|8W_%gw\1X~ Rʟ(6 ?tʃ,+ Rns>>z\[XyA\8O?NqU|y5+zL>c7ї\Ѓʾr!͊AOAˉОX' ,#R r"il + NK-vE;_&?e}7)w/-r{9zp*Тp-}-<"o뚛f,ˍ)R𛷲y?+;S7o K=>-/7@n3\0#>q"ǽ8!ϊ'3gdOO9ѳ|z{97yqjv汸'<*{KlDHa=ا. ^QNz׿ŎVUϸB=M on fy.ya(\-,ѝ-ο|Eg9?l nho+ȓHCz0^ Ym}|Z؉ Gxg,Aޭ/̺.88-؊\, ^!Oa|?çG܎|hU'83/d_?stOɖqt𬠇|Ѐe_1}>B't:g-q@n`ܩʓ8q'+B||HiVXgDƳbbqwzd,/bC,C aMfo , +¸+fz{?;V,.'˭|ߞ=)6$ؓ)8L!0qBn{684;8>w <mfļALU |Ύ9/AK{0BzN6vB\ƃ]$\SO |~=o(艿Ny |F;w\+wV0>>e{_|f}]/eg-ϭnOxYOj'YWA~6`f~Mw ʃK ~5?9Ǝ bgy"}l}eoǀn.6k %N={ھ50ލy[gl!q>z;^Xsbta-ˉ_osOl麝l&q\vd0uxMgRa.~~s(#b Lq6)^,/гޕbVsCa~_Uq 2|B>?-Xcٕ;EÂ_˂so|ew>Z= iKhςe>=xW>Ga9,bxuOa8 ܟkwVʯع OgG|7T/8U]q[zn8|<ݔ}OcEx`%;[q>?>^bH؁"|$vGļh z_#Ä t˅+YK?9oagxHoYV~kت>0]yꙏ4!p-[*Na Nμ=){X.X"x+/#٪|w6d$g/;/l-W2]rA^Ea O|3C򅛂D|2σN[wv U&+Np{<*p8])*l;3hldţyƹw6;`g^9NʿO{쌗uԜ%gޣGe"e-= 0_T*cPmh>W>h߱3_x\ͼ9/;<]{٪{`ҿ!\ȣ?VãoR ~)vК/?5V.{^٪g=xV,z6 87!ƻD|SoʾΠbSvwt3KW"bņ?//~w3{.s7o1幥"Ռ0LVݷ3oaޛowoc~otzS:yw|xʳYɋüx;8+iXA<_[wV?ߗbWveO&6.6U ~x0PfBt[bT qnB>cm_-̷3S/|CLr6@}?Kd+F~a7˽/X_ q/ϗ9σAs[&؊0@IV׳\</uCȓeG;BaWj0X~o>K;$p?,LOx|8ߺ-l00"; 7ރ!_dyxŁ=]N{C0oJyU`% Jc}"7z׬8n_tB'*c1vBNOa"[_:/|w|\ŹA\/3[_bOqܿvy7z{z>[i[Cy'~#koz~w- IžǗӄXnb<~ASl?jex\wk2VN~n'Gǫ٩aSDސ<[*':_/ǝy,;\/r/`nG>{'K؉&Rr^`? ]!s΄[a^jܰZ§ 谈'nX'm#onva+E~d"WPX  [3+¸+v88p,]0͏8;pO a|D!s KW;@ʣ|=wr`O{P(vdkrg!apQG ƫ6bOus/. q+MdC_ G`wώ{_l4_ J0j:W{E?e)O2^]2qu寂   ܧ ْK\*~"R\_y,72癇t,8)wA\ ?#ُ#)L؏<>]\>.O_trB`r:ľ?C '-|0Oy{  zYQFX~62kb+믧5]IVd׿6!_g+nv!}Ayd0P@OnḨݡ.6_ruR~ na uw D/x-[$gwW1`/;5ԯ bsAB]# ͆EU~OL 'I׍/z{D^Ca>¯~(#lip+W/N? >݁ddb"O_5l^HN U"wyDy?~z)dCD8pwR,ŏIx<.S\|~0Svٗ2,={.ޏlXaR _8bUɢB(V2>vυet?|Wrqٖq3U}o~doc G% 1`O+s}J6GlcS"{/eg2cG.V~ K<Ȳ;vLE6 wrM|K 6rؓ. ?ng .|Fk>_80wA oe^(B{=C ~ZOb'+ru˞;Fӧ\𸝬 awpT3 Ƽxb$^/wĆx+[,P} ~4SeMx|\(Gp? ˇײܷpN;ㅟX](]q8*wu8~,[Jnpt?p|?>K<x__.fAd@#&|}U=?t}+Rl|]x}['o~ v&3N_7L' 2D;|TOewXhP.vֵZEɈdOuuv÷nY%5UԸaiFw %&owMk4Rr_OUHG74PI3n3t=^wd?i-I(Hl?Y )tA/˕ƌt)tF?LwW <2n:|):|O9s-q=n:nL.;;|GFwiۥ;BO oSnO']gt>5uSN$s;WHK)RʑocvGz/'Euy%[V?PqR8^^ 9;΄r7&Jtݍx;A=oq+Knw;wqww:2S/ŧj1#J0"͠0"Sk6tOdZ:|8d;YJ:GC}~BP">ÏB(SnwgS=Ŋ/3 kH3&|~'t;I'mMDDzg٪}-#uO~nbzNdHGB']yƉOm=Ԩ'jS9ۂF{J5_6Rn')9|eԮf>t-߮7=[ }(w=F5G!|,|wi#qt^-~%8bq2;bgW&jn*& ҉r&FuçE5[R| mhwt{wID'f>Sc>q|j<(8nr?'>9f;| ].|w?V3-n$9|rŸnJhAUQw3;|^=Qw˒׌햕_h^-B赭4qmm-ӎe!#,5|_}wDtFԚa:INr;|߫*bZ+ڔ1~7"9=IZ=2͒ ИMˤIw~fG>KlM 'm~I^jC=6ۯNjOB|Nz{_j7-/['ywj U$[ [&PI_AIow~ RܑkIjl5^$aAڲJS_jԾstOOj~V%6Yj&~D ᗢ&a%}vQ.6L,$S略01%GO_Cܭ!YٕTIj՟+1lVXK]tw:D⾷xET/EdOlXzٲYN,|7XJYk,e;%/ LfaP! KJ^&36_ؼIs\&}c 䒏90dїNgZL3/fKWOχ|3.fMwi&FXJXhAULU}]fԻ<>'kRe|-mߟ\-t>Pl>>gG5]2Xze@:>!^-]8x^U[Kc 4~fe B;n _BK+|j]Dm/ѕ.8J٦u^ (zd4AC~bϕcT~bKo\BztKٺyĶm:L@+s;\7UA.' rϕdu|ΖwfKմ?K_t9kjHCؑҵ7x  F/[0ncBQ? -kgZ;<~XiV^|e_~T.e%|<mT=+LU8b- u8=|Vn絉/͜q` '7ؘ.gKށ{VN!y(ñV#[PrqtTA)KZX5C>s` *䫠y5lY|皀ϙՐ!/ Qq'R<|ʚBQ,|rZY|skKVXȏ]Ǐy/>gkLJ9u^q83*gCY7o0>)3rXsņHԹmi|hTskL|6n~}ku>o'o )ۣŲ^áf9&l Jp'Qڝd|rV|)I_Z% }@$u->)}3)!/%җ_Clܲebk:;e֥E8g-j?i::^x'. 3kllN~!|G;%\VKi0e3:j<|yw<= u!,f ]53$~S8+v^ݤm|O`Nkqmf L㯙ش}rF~y \^uIɕz$J9WcFӵId~KǬ.1 LhDϖ[ޘPdMST<&\KgBMNZsN51wumnߦrG_,d2[`1>W K#V%jb:$Tdtu/+c8)vWNhTp5R!N'Lc%Lّ[G*$d# ݹQYY|jCñ9SU(WƧ12R4kºt\[NnRD͊hW'҅:Cf Xr#bЗ7g,p/.jRG<&w`!#^u[1.t:n5JJ,SXs5(_B6U%om Dt 䴅v#31? r+NGfMlz.T_[7} BЏtRƷg;VaKtNHW+&O 9JS׮{1ÄdM>$Kt5p?;\ ԴO*&:dQ:IWTXQӉPZD#S%~;Qɞ=4M+PV0 ./U6 5He=sԴ;Bz>kc̨_7o3 `|С &*h ,s팣h[{Do&'ii.PAG/HH˵^7][rWƗ3݅l^ULܼn] nfcᷠR***H?ATZ°6i { %ŷa|Z*;MkPݵ$ >3\R@jzO!bhUsZ:D'xO|eBr{L|W@,^NPe|D+$f 9}ԼňO!B\J!6bRɈm'‘:$uH<ktz=.Id3"h@:oܲcx϶ty10TO8@ fs%? *\9QFϏKeue⦑=R",9lA^(D{mNeB"U :[6m8$)Yl7L~  8Z-mV9/Jjdrk'o{AmiQ˞l ^r]JP L`jyӖ: LZgfo-AkMU 1Ps|&޽`!oXn^7Ho)VhW4qԐwlX~M;4'^=]e[ Ԛ X\%&0º>ǿn)\js #X! gĭ4#(6}R:NMϰ-eNh[Du4-oy#24>5uGrI!(ry=5÷-*5Rp4>jrFm!=]oXf>_ 9`"2w^OK9CWLs( S Njr4$]Y.WcD ~5_ET(*ڙV%^ȩRDxX UQ[:S7g_i8U։ÃaO''nt 5/u XPiL>؟ Z>퉪@ʠ kqlytgkb)Ki Z%Stz cE FL|Rpy/fkm_ E+Z<|R~ɒ Ҫ۩&"9*< oWo,HP}8dU62|#i-z5i5|jqo;8ھhu5l;:j4 ju>rᓷ\i~kO3w6l- ]o =i/cVF -%d`ǧ PFJj[@DXsĦIңÞ<AbGb@Ig]래'ok8S͆)WΠ3-!SsEM=?1'z\\Ctٮsl/9|_[ \6G{a?1[IuI/26#6 EҕdI٘kPSF%PG'>0VovޭX&ujC 8pY3Y.b'x)q|R1qlnԈ[g +IKp<._]hE@*OSKX^7SI+bXd 4#O/=Y|zB!k'<|:gh% '|>3n?9 SywmEС=ΫLQY \QK?h*R'5'g5 N *󃥫/h `HOH;띧$?Zg3 K nei?W\Tŧe|+K0>,1p`eG;֢TI@Kִ|:4I(O>@ DKkNƈd_*艍 Kb"(+$c2;bQ0~+89k"pͫVIEQ7J[n4dF5,Mцl,yx,\`|]dleҙ,İ@\VbR]*,,Ҫ"?&~b4- q5:dj֑s=@SBM Z.>~i,x pħu:O Z(y9iI5G(FobԶh#EZ2r% 1 e~H+*a|z^u; 1+-W嫋 `&"G:-1MU{Y|jjuwŇts1+è#{ncIa&! XM+`'F]Ưmrbi'~Pӽ>^xrjIUY<*z]sĦn߸,}ud0q1!l+NRBBZ{8A%!/\Hn޿jb1{Κ@WPKyh9|X-zeBz+uia pc-Y>/1~%d&SPu`/no' 03^[k{ϓNq[A.S v^v5Z۰F>]3":W=diDv6u#в[r5"Xcc[2 {5gJ\VA/,ƶ4~1b_tk85 jtfh@?jZQKX~-wn`Zn * u6*eZc6 *\&|4~>-ŧgZj),{ ^j3TjjjdJA ˕B<Ѯ@*?$\mʵwMC+[4IlO[`K5@kȳ%$SƸ+(z 1V^| FDžOڔU+I'1G1 p,R ۥi|s4߫`nffRzőù3`9:)\ji Pԑ?8ux\ rzXǦi|jZ^{ͩ-yvOch+B\W^㗜[a'ѽЩ)~ۏOWTeQH']+1ZAӴr7 -m蓬XQA`h%ݹ #q70tPEfE߷OlNLZa2  Ax640^jr+eK9'2w][%0@gr{`dB:s2Y|G=~V+OT IW+ ɥ@|0GS6M0l^ ٢2R֢Cu[p+uT&ѵ3!m4:p6J@{;خDnWK׊W}iomih *[(:ŪFQQ3TQr%Ym2<|K]UXS JǚƧfo7I<{b[Onޔ>#}m[o\?^?i>u5Ol~|Ƕ5_a'׏oKoڜ8Y!盔+RBlTO<|^jb5:͸rPБp+@we{85o,8MR f z]#!=K89;|CZׁ(f*4%<]=R`IxtrV(]^..WABHfB&90:#Lx Y?Lɴm|l @X=ebVcC_,o3i2xlӁvBNL>`[0CؤbQ2O-N(ԬhF;YX: o̵\knxhrj@ Gn 5]z{ f~!j#_0; *$0>(AGHRu-$/sQ0 Ԩ~D ? o8j7WZ*z"sPrZuTCwrY|zC.o`Yp*@bXI>t?b98-R6P%\h &eM-f Rр)W7ʼnO.Q8f:|&JX6,|B'i_~R .Val* k^Ϋ1jxs9_%LR 2SQ֊w[>XUĉdMi.A M*0(EgJ2瀀i,Uc4q%uP[72i}-\8i,="MJs8rLحvsʅLRs 3b9<ixłԖn4ۉ d}\6=̑9\X԰r6X>_jѓq4N-oA3q`TfJ`\\ډ5Z9=6 ϥ;Ưȗ 'QwHIZ*E H4+ 9f|UmRmj [lʡ![ HYIVy8[ R7dFi+5|(ΰe7:[jO<|Ё% !H&,jtY Q]EOMaęJ_@12,d;xsErCR{T,tjFR_mur[#[D$(8ʹb֫I.siW߲VpGi8]d[p3LB E1|j 5#ӌӢb *LgZz M";0 f/3o4> CCJ}A-R+d4IIg|5$=ND]ɡ%In':#vhfO1THPi&Jk bQ7sl,,/Lx7Mn>}5矝>o'oNd?zJR՞E'"3'$CqHl> 5@/ZK{ "Ȣq&BZ_DlyeQb$(t`V%`|naz I`0l&![m)A U=c.JeElP[nm")gY⪖7X5aN*$BQc06*id՜7 fA\L 5=Rb ԄᚉM'wl5GgqC<TӦ6260mZf=mofrmKYkXZZV4|I#K zRjL5#R`ɜ2-fib @Ȣ(ؙ\ j`Yp8X΢Jк&C/ .-k?A~O鵓7ͩ͠Rhz88vtjkN>Y?O=@wI3)KqTMH*P Z/SL7u3.E `Vo,6APgW̢!\ȳ=/W=I4OSTB{9$Ç)4TU>Z9։u/TUnJvA C^rRQUhap SV3f6 Y;tR]B'(CMK{-ֲvBB,4%'K ڭ*> pWz:<2ARCdy|jK5*C1+$x\Ყ#Ʒ V ٢:];^MלٯDEal!Jf?tlJ!PJ )'oEITQjdI8ִIć7O枆l.lyit1+"lȩ ,9bLLPB n)0O-5,>=BPd "zFDoLވg_esZ7t3sgҩ 1*®Шv2?0]&;7ߒ˖3M":c{zZ0`]WU.xZ~ɝ]61ɟ.̤.ƧPK|<,MJ_(dF$iqLJs@@M WP.]Y -w >D{+ǚBq.L'vR]+m-Ё_ub[LlMg}|]:[G|KxMe1+P3 O\0#!`\W Ȯ%:#UH"أl.oҍ++$'6%qYAno!sOR<؁[X5iK 7L /l2øLNӘ)8%^mpfUm_Mx _5k.ߢOMUHHjk_Gzl$>(P;BޡNqYtףv/!1s^i3NwC_lyr(2R|ܾb;UTTN6Qt)ל>dP)HDqx:s{ ~xυ1WdP+ֵ?4_(x-(] BA.eQR0f xӐC&_Rs4/4Z%:|+oЩY i"g0NU暨 0X*DY"Is ɄjP #@| xfхf-;EooBkUכbT54\ K+uLb{hF͞aT [J;4z>?^9ޢ MbrLV.!J \Q]{_<| V e3NFbEQ0=c4eLq?;}-OsR,`+TibdRR4g+^gw*W8 Rda1.r-Un68+^b\Pd,)[2 8pkMasyOni5LRk9]vʶ7QJSSDxrM~x4k϶\綋YF0@Nri)~iKjki47? &P( 5ИZ9 2- txJL.n74֨T|Lq5RMFtuTú?p^|@vf<|Qcˌ68%E',lKV+@kt6w "H(Z6}ZlfʽLU xtzb|ZMjTtB@FAD ApnMODئh&Uۡjm]8+xkI Bd7 0#ٽU3oϥ/1~@tPֵ=*Mi@F*%XG ":r7!3 u)~BP5Sk^kRLHA5ud&bI^W KVrbbȞ."XAN9]  *ӊ!Vlk N!WU0aRQZЌ_WT:\41_w$Rfw 5RL>"c?1C3pW\XIj\9 ԮA _-́8A,e8TiŬKHj9/jZ0+P;a$&)5P1 k_ĉO$Y6`V:P' fD3WO4kF0+@.Uq'8blWIa_ߞy| sHm4+*sQ].6A)#~kb@Ib &mET؋5i)~ԛbVq2O-5o~j+T {GDFrRL8H amf6}[q!8u3.uIh{ JqbnSrQi8_Զ \߷YEz/(Ń \=HsfII @D|34'lP) P犅S'xЖf19b(ziqQ0;T.[X*VyY U}Y1 rts:O<|&&/SՃ+ T9Mc7 4S_, )؜wjN/#۾E Ubx4~{*SZF%I@S.ߊ>S*aLThRjDa 2hT KzѰGcVT:BuKo\6XL^wA5[7ضmVøzL;~:|eo,։ӅK) d!W*[`,Iw3.)~ء'8jH]7۫ L;9N uI3bj t4|fsÙiB. 1trvQP(iTTBxH~%ݺ5y=}`RC;TbCI u:dGkZK2:.rx-ZYԬ.J2 Qh;}F`UX(j6DBd^S\y󞆴NÐ`:ؖiV=+CС9s׮\9I)Ę" "2Vx*\?_ݿBz5ݚ<ش}rj *AJf ,Zpe ~HƆn'^k"XBLYL6nF{\̼&~=V$xf8v*G{Reuz˴ "q􍅴R$x֥fR5)TFϦi0݌OjRzqq*Plbm z aX)pjgRԦ$ZLIB2FXo {ػ#k>o  ]{twdA 8O8SU /?u G\pΕW O]:/|_#~w)r8A 5Yޮ9/A軞[P~j fO  D~G5BG=tsA?Ow,SrOw_ =c?I'߫\5u7vAPsV͑t}2Cwi‘_| bO~ǿ!~9mSz^9C\1: ez&0t|cr8ӯ~8 ;. ~{kB!]|j;=CG ~GP{Ñ'jif2 41{?+s{!HWr&|?NI`Owgk3:xwNIxG4Ȟ]צ$~ .u lF: .>@=?l.Q?vJ T_b89JߛAU Ggojyi$=a9S2xr#{FϺiχ9wI] KhGgo|=:ꇌ 5X{ |]خ0 @@pϛA=Puz~_|lJ)c^#{ ~RW>91z pd߇w 49>6{!^s4twA:'NM.y֏ ޟ`ޣc@]> ϽfON! }'lAi9 QB knb`ohu_!~.LjntU!vH?NmaJr8w[ept. Tv}Ձ ~ntgW }ϻdzn{*/N8d7tHs nGw ݐ}0A~ >NLyP{4}ϑ~߸~M^${u!z}!)j1ZgOI ]ibP;)Wi+VU @rn?”?ԅ'gWdz@_4}nA b0A4!c>--|!T|U{k6??gJ)~ 9vB-U^q]:k@{"~ ucB4 9 Fl_s BA' ]=\#4!¾@G2?]J0+Bodh<W 4!|Bi{fR}nu钪?SwPv@|yL  A=k?*dP=`JW¾wa9ւcگj ՃT ]P4.9; jg{j0z>]m=~|cj#OͽU^4Bl5kd߅~ %ǾOAawN _PCuj~ BߧoPOuO~W$~'#?28:{ߒACpyON ~m=daeo20OI? d:oPiBC/zx.8OL$_\rˑd0>oS^p  }YRkW^O~y@8uAr}5>@m}P}j6pd%>.j+_n_3%y{W?.oׁ|jc;f_"@m9ߓ )‘D+O3 P{|j?ԞN!{ӭY_PWNhȞgO@2ϥ=/} ϑ@rA;ȾWay ؎]2 w {%7y;7)匓ߎG=z945U<dP{/C@ ^">G AwP~~B $2 K{?) Ƹ:MR7JaY_B>~9w7N-ep&\)/lW/@p\NiGH_IgA7uϱ5d9LAeY(0~#y"v%#2o@|= j4w ^4 uT-;z_)+&qk_B3~ 7/^](@)OZ!l7 gs҅)mȠgnJzv}C}~'W~;o B }~{.`Aeh;; upCw$ԇA<#ȫ/ye[$P/gS?A(п ia[z߾Osq yLJBpN2诛|Ygw/`/ HNZ1 !`%vtI9˧dU{ndpܽ@u_ CBv5rnFwyԍK<#3N#?p @w] i;3$pỂ&zbWN0$+P.?.{ +#QdP=hƁlpz A1OA~_s4ߐ@x_2>Wpth\#W EשO‹' Goߵ+77B]|M8sfKys]oљ_!kJ .^z?ް }_j ڣ;ƅRwAtϟCm CFy˯@n? yk.|h.=h@ qgF]htLi ?ov8z+_B|?@dkZUAhi.ھ #AmJ~ Ӻק yAk0?~yA$z]#{XzU}o#{+H*ԟ';dg^izP`s]c;. vT3=MkAphs?:%}!`?и,P B5W˛e7 ܿ?}6g9Aߠ@ }P=hyf8gk43OWo;Hu{/n@l1FA+3S!$~@ Cܳ~/'% Az䇗3:p;ыuО?i9a@]>dKI 86 Gh(a?|kj0 w+j>#&(ד|edp/U)h=B t;@?]A]bgIeHG{nߓ gOg] ߅Ѧ ~ wѝ[$Ek[ӶcJo}2в@m=]W-z;#}(_0 ˾Og +'?MI7ͩf8S$P[ A` 5B@_KǵA˞+`;yG1mg_; ]+y#t.a_/|`2&^ur ?EȠjpdϖ',CyS0jwetqnպzt^=;%~|G$Ӄ;l~Ӏ~{~3mԕás@Pw_fR`)خ7.^[Ab=0j1.S0ҮT T:mۮaS}`PjCw 8Q)׹erA*"{@$ڿq){Q}zO[5oSՄXwUځuK\&/J\BE}-!Tt RXwuߣ~zn8H} ُn}n{am;.֞v*XIPIӮNۑcAݢǡb]!VmOF-{*A*ow cC1 uK~ot!Tz]!Vjm,|ؐZ{uK\BKEcQ׆˴\oI\ /T=0eigВeU`ngh .~C݂]+RnC][v,|t.lWl` B7G|?I_[tw %4* uK\RH*Lzׅo&E/o9 .}OPߠ{ukВn]{:XE{\~Nb]PծH~P.ۈBkvWv! ӄI) gw+V]q++nat%Zat%O0⊉+&  nW\0M+Jw@'d4x֗JͿ"uHp] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅p] w.܅HRWTPtE)\h_-^آѾ "Z[FZU }"u8'@ Ie-G@ ST"16lΣ8qk'eÒ6LJd>۽a_0DעVQIJ;5 띱h!%_d=4Gпq2cq_Dj[-zŹ 8,BDdFE[DtѾE Սc&Sc5}E$i -D8' I*N..A1ǴcQ~s 8L[шg3!@{n}'ι'&Bha=D'+F5Vp keVOD;OAcD3LDXC-s=ow ,1l.d)[ce%@䖵^ǰ ┛̉Bq9mNVbNhD8]n'CVЈ=hqQ/rq "{ +X3!m,牬ef!qj88ACD&RT+N2|0q75u 18'C)zD8waժ"Z&9Gњes(%agP?t.K) BWsq^/8w"_YVicqrDh/"g3ЃcɊf/PFy,8S"DmUoEW1\o Id;ꎓ %:'_[1s\S.a6Eeό;%Gcqvniq{'"qI*$/&g'춐Dd, /\ox'zOMNqa$%)J_DȂ%rp$+[ԢDR уژ9:)I" A& OP/=-UهDet'$2DlEX˗JRIZhoZh^-Zآ7i[ifDA荏b03wB F8W4TFٴDs㼈scŚ?Dh)sE\Ӎ/Ddt `N@X|:gD `y"躂h-AȊFe 1A=cyt*mkŹ8 "6pі91NJn8ENtoehtdE{щ'YF*vFÅh݂>pDuM!Nj>ЩhsG8-.&I /$q~ -@ƁiɃy#rj'Eju 75E.,).Fg;<$Bc=vhpZDL:|3T'<4wֆ5^dWb;]&AgЙ[ĠշB{كhbM_98wt6ZmD-t޽aV+2N9"bs|a賗 J}8tiN4 a43Bdt b;D_qDK8}O Xhu{A4-]Қ qv1P E85F])G'r>+ɞWODϱhϮ3F.sC'D y%R Wq8{C@VUgt.w^k4,EFE[hD6-DGMDʚ#|Sʋss *eW)T~ }ᣟ$!B1qJy?E9Ot-: f~ƁU(m4hg :E'VDĊ8/q2'g{W.pNm.XiD qJRvh~"\ GшL|*re|K_' ]|6^sM&NDh)XǁSwȜ9Fk]ĩFRHߥDh)N}5K螀1SQmIFZ1\I6D1:@oe+"b ~gFqpTuQ B_)q_qr)DvssO"-6:F_)Ѿ+;,O&"âqZD[^t=y+A8//tuM}(IJ✇Df/z{ z 0'њжE3uMqZ!,YD.<#rCdnDD& B7|)q Y澂C8snc6ѭ׈lD5D8tR@ĂEhٺ,q@_qtAEcJ\KIqFDIZBwCCt5/FJRpؕ|6ۙMnqswh@z֛&7)ܙHgzSݭ9@t[ydo"ߞxGmN1)l|7"S14B?wwݭzŞN Y=~kan)3ktuo$Zd}}1^4-)n _Zn:cEՀoݶM7խoE1[ neQ֕> myhh,Hs賿[ED*ވ48X=V#rk)iͷNo 6YcaWnJzMwSZꉸMV&HS?Rɚ:BDnU,ֺcgH[wkl;6S +ԗұiΎ”vR-(wk,X3dsI58MjNӈ].Ȣ@dCPX7̓(EJ&Av"/j]ɘOM4]A&AgP֩YqfDoN9t"Ea[{DnBH ͋![w.WLFL\IDDЌnXve*q]JGP7ג2u1䩭g؝y:cw&JkK&NљD0dاI޺xDC]ɉM=ˎ-DĤuQ>BdIb0߾)X]-0"goEv2lO8O[߻4$NE}<-#v=,tQ Gs܎|z&jq'QM$SDp>vu%vNB"X 3vm"XL}{X uMH$&qLHW l@,$ev)N@Mѭt1A{Hߺ&uKlyCvlu▶.cu]!'koMBhE&}24VAΨ<c>*"8e= BZo&m~HRZnZ]FE)、L.;aaY_5- 7 N3+{ij>8Q9n))Dk Mvq"NVs1f' JAΣb:jO&Y2 :EiHuZm"2wDޮw HzY@ҟZvE9-bb}fR P]ٰSTj՟+o.- 2lqM['G~pg5nwcC[Q!mv9ńbPQ|wš<>ipݿcp.P1j-tzHQ%Ry^|F7T7່ YU톿ǧStU~ZD]~5kPl?CUv6nBݖлSSy"ss,Ѡ=a]UsB5>b[]^3j2D\&|0 ]5۫ws\U69Ȕ!'kԍbBJt[>3pAu}S+GEݿӘі߫td@,4ީ4FLݏAwfa(fb 7omnܣPk"UOL4!lTl䧺En,5F}EXBvhuwtz?X/ѲA&S^a R3n{yP]=-)!+٫>fnC+R'CMl2[ nqBt8Xbou~}Xd.Fi3qڮ oWݴ u V#dȘ2D J(O`oՄ"Ӑ="J(]=*/D 5A7CZԧWsO0V7{K:E~Z]]}ӕ[Wyh6Њ"Z 8Mr)T2@m7|f2tOSu\e6OvAF;"ҴsLlZCwU+_{ֹ;.!ujڋo tvdM^.)81w1DO%ŝb (OΞǼDuXI}ոEyƪT'KwQD+D䵖9D0R% t"vn+G.~eD~0?wba(Wf#='2Uy1@۞ASgbpjդv_R-35fJQnr~@),Γet7bp$%')uyL&L|*v5Xncf^͘'QVA9i7|Y@V6ɃyѪZ*Ȓp+XB't}ib' @|Ճ#:S4$!\r̋80=wJ}๖ojzPHݖěߊ-{&S%RPMtĜ-:`t%Qe1KOqd)vhWX==#u۽ra^=9fWQ6 d։.{`U"b=:DP. @;{ xv>EP`yN}s#Ozq4xvZ4QAvG۽x?G~6|s ר3{TS5se7ĉy(vO`HX?n7O&o=Hu'V6nW6K;<0 RGW]BUQ OV'F4&P9M%14dL22rәsϔǁY'[2={)_k]~"=BMM!8M}WI:.9C-MuJw}!Bowj>*=~;TeLaRqlSXo`.#np7!t QRޑ#^q)TcchSi5~o4'ÀmtݛKBRAk^ԤG.F+5pٗߍCXmeRiԮqBAyyG}8|13`g5i؀:G=2L4l >SݖvY0܌ytz ,1Ʈq!C6f'mC+S;wgZB$@EpQAe.ZLE5le5b-Y'&0sC^Qjw!u ?ܴj܃NMH`Ǚ($'QB\3 bn(*ft(gjZvX.9y7ya۔(k1쌚ܼpdsa<YF4zfV[M\ Q̞d4 _=RAN= M͢4DWBg
    ,[Rl:ϝD󁺾lX.t;vADmԹxa5-B7F}.CM7X 9(+VN ߱$ߵ<]Ziui,/Q`M*$'uU] JP("jo>D;ByR@s|9d'X(ݶ2ܔ" @*M̋Fӷl89@xp2jA.;8Afˀ jgWI(UFVuQHsQUA ǞM|,SIwowTeЍq',y%iNi}inN3UswIN=$'6~$J2r'TWgBOVϚNy. ʘgjrlo(o:y(U2x= { /DΓP!>juy5Ah~5w3 3c?2z1wa? )s 2S?U[[{8b]fVw"-+0^Dt@[Vjf#;ZM_WC7!jb>,6}y4N2ٴ?-^B*)#dN٨c1o[u^-/k7Gd Q# x8DY(Žۥ -iJh354r^{BwD$M;3>ep̊MDD! 4Hx/M= jY^sj*[X xNZ5WsüIͮl] 讏';1mX& 8T{@¸S= |p;х!\r;Օۤ:4$bA4~leG܅2YALa(9([fLzURޖ\]ˠZ2tgBdb!׼h?DFsoM|aGcćmHYUcF3O歹/`ibOldvڮdhMEMeݵߠl蜤qs ITjnVk>Bo8uJɎVFۊBeh7D<Ms( m6< wpDϦOe67zԏAE#M&>KP.#` WWm9 \Gkr2XA },VXC;򚌑6Cnp,]k!FnR~(*^t=>(}_j \S/aĉ䱧wrd 1SD1P'Pë9֙3AgA_Xrnê69OGyDb7g2f5T~BVGT"~nzH Z }-VfLDdӒiyVD8D[s|QU e?HW{Af6熂`C f'"+n3uF\2:gvH8 u LtT?ٳKH!2iEz(LKҴ^(j$9!=S]ȡ2ܑ^M5eJpqELw*Y~deN0L؏ݩ7Xp(60{ 7jUd@USY>҃HDUǺ~&rHKNѻjۇ9 YlAP{xFGRHrPͿ$nq?WP_q\@eMkz뼓5;TKK3S륗͡qԍNA~tNs;uV1*})=.ιkMit KBI71*I/jJ%P(!aoMzQ>czO\twZ{ݸTQ ,8 ܶ(mfSOKX]$eUZ}ot+־=X>ewZ,2;)ڠBL td?,4.EO4v2gؙ][~9ubA^lI(J,&Aֺ4M#[tDtߏ5XN)o5 ԾZ{ɜ2]ZIJ)N'ePW]~W\qW\qWz>9tŕV쭇,nc*tW\qŕ^*~RCB)++u͗C,|W\q^!WdW\qW\qŕd[.r+-%)t8)tW\qW\qWz`L'++I-- CWh@x'+Ba_mqŕW\qZa'n++/N)N+R_b27]qWQ\W\qW\qŕhŖ?+++`v+ ;\m,ΗR9tŕn.\ŭqW\qW\qW\qW\qW\qW\qW\qW\qW\qW\qW\qŕDTjCRG33Cš ٛʟm|ώC>QpcJa72 Hf%{9m &KO>'SwӳkݸwлSnU HmqQ-Hr9M BC 6Ծ"ԅro?$!7t<q7w7( %{(I8;A;$]63ݸ:ݸ7$&1c٠;:rӶP.dӶ.X2(R #Bе+4)S9n ʢܶ.Ƨw.;n1%ՉɼLMPMQޙ!(Q=& 3Ӷ.X%Gp&KOK 7Gݢ~CyN&lЧibﴭ n`܍-͞vP_nwn܍A1ngEwi~򴤼kZe5q+$w[>O2uB$ޔeWIM(y!q|/ oZLlmn8ZEߺ&Krۺ㓹3v7uXr7I'<(M }2oGnzG ɹC ohwߗRn5̎wtXfJܚscꆞRn[XY?n&h9b{I)cz~Cݗۇk[-.(w|Cs킶Y$(٧n`tDOL9?:g/;WHBk>rĶϿn[¿XeGrr ^}U'_R|o5jolܴzxNl61 ?s77sa8uMT3BC`󯹶]Kv+oB}uMCŻm逸~Q?TbenchmarkmeData/man/0000755000176200001440000000000013417716236014105 5ustar liggesusersbenchmarkmeData/man/past_results_v2.Rd0000644000176200001440000000040113650322055017515 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data_help_files.R \docType{data} \name{past_results_v2} \alias{past_results_v2} \title{Benchmarking results} \format{ A data frame } \description{ A summary of past benchmarks. } benchmarkmeData/man/move_files.Rd0000644000176200001440000000162413650323263016520 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/make_data_set.R, R/move_files.R \name{make_data_set} \alias{make_data_set} \alias{move_files} \title{Functions for manipulating uploaded results} \usage{ make_data_set(from) move_files(from, to) } \arguments{ \item{from}{A directory containing the uploaded results.} \item{to}{Destination directory} } \description{ Functions used for moving and creating the \code{past_results_v2} data set from uploaded data. The \code{move_files} function is used to moved files from the server to another location, whilst removing any empty data sets. } \note{ One of the unit tests uploads an empty results file. Files where the results are \code{NULL} are moved to a sub-directory (called) \code{empty} in the \code{to} directory. If the \code{empty} directory doesn't exist, it is created. Currently these functions are specific to my set-up. } benchmarkmeData/man/select_results.Rd0000644000176200001440000000214013650323263017422 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/make_data_set.R, R/select_results.R \name{summarise_results} \alias{summarise_results} \alias{select_results} \title{Selecting results} \usage{ summarise_results(res) select_results(test_group, results = NULL, blas_optimize = NULL, cores = 0) } \arguments{ \item{res}{A list containing benchmark results and system information.} \item{test_group}{One of "prog", "matrix_fun", "matrix_cal", "read5", "read50", "read200", "write5", "write50" or "write200". Default value \code{prog}.} \item{results}{Default \code{NULL}. If \code{NULL} the \code{past_results_v2} data set is used. Otherwise, the input data set.} \item{blas_optimize}{Default \code{NULL}. The default behaviour is to plot all results. To plot only the BLAS optimized results, set to \code{TRUE}, otherwise \code{FALSE}.} \item{cores}{Default \code{0}, i.e. no parallel.} } \value{ A data frame } \description{ Selects and aggregates over the \code{past_results_v2} data set or the \code{results} input data set.. } \examples{ select_results("prog", blas_optimize = NULL) } benchmarkmeData/man/past_results.Rd0000644000176200001440000000037313650322055017116 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data_help_files.R \docType{data} \name{past_results} \alias{past_results} \title{Benchmarking results} \format{ A data frame } \description{ A summary of past benchmarks. } benchmarkmeData/man/benchmarkmeData-package.Rd0000644000176200001440000000103613650323263021024 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/benchmarkme_data-package.R \docType{package} \name{benchmarkmeData-package} \alias{benchmarkmeData-package} \alias{benchmarkmeData} \title{The benchmarkmeData package} \description{ This package contains the results from users running the \pkg{benchmarkme} package. The key function is \code{plot_past()}. } \examples{ plot_past("prog") } \seealso{ \url{https://github.com/csgillespie/benchmarkme-data} } \author{ \email{csgillespie@gmail.com} } \keyword{package} benchmarkmeData/man/plot_past.Rd0000644000176200001440000000223313650323263016372 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_past.R \name{plot_past} \alias{plot_past} \title{Scatter plot of past benchmarks} \usage{ plot_past(test_group, blas_optimize = NULL, cores = 0, log = "y") } \arguments{ \item{test_group}{One of "prog", "matrix_fun", "matrix_cal", "read5", "read50", "read200", "write5", "write50" or "write200". Default value \code{prog}.} \item{blas_optimize}{Default \code{NULL}. The default behaviour is to plot all results. To plot only the BLAS optimized results, set to \code{TRUE}, otherwise \code{FALSE}.} \item{cores}{Default \code{0}, i.e. no parallel.} \item{log}{By default the y axis is plotted on the log scale. To change, set the the argument equal to the empty parameter string, \code{""}.} } \description{ Plot the previous benchmarks. This function creates two figures. \itemize{ \item Figure 1: Total benchmark time over all benchmarks (in seconds) on the y-axis. \item Figure 2: Relative time (compared to the smallest benchmark). } The data set used is \code{data(past_results_v2)}. } \examples{ ## Plot all past results for the `prog` benchmark plot_past("prog", blas_optimize = NULL) } benchmarkmeData/man/is_blas_optimize.Rd0000644000176200001440000000064713417716236017737 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/make_data_set.R \name{is_blas_optimize} \alias{is_blas_optimize} \title{BLAS optimize} \usage{ is_blas_optimize(results) } \arguments{ \item{results}{The output from a \code{benchmark_*} call.} } \description{ Try to determine parallel BLAS, which implies non-standard R! Compare user with elapsed time. If user >> elapsed, then parallel BLAS } benchmarkmeData/man/get_datatable_past.Rd0000644000176200001440000000142313650323263020174 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/datatable.R \name{get_datatable_past} \alias{get_datatable_past} \title{Interactive table of results} \usage{ get_datatable_past(test_group, blas_optimize = NULL, cores = 0) } \arguments{ \item{test_group}{One of "prog", "matrix_fun", "matrix_cal", "read5", "read50", "read200", "write5", "write50" or "write200". Default value \code{prog}.} \item{blas_optimize}{Default \code{NULL}. The default behaviour is to plot all results. To plot only the BLAS optimized results, set to \code{TRUE}, otherwise \code{FALSE}.} \item{cores}{Default \code{0}, i.e. no parallel.} } \description{ A summary of past results } \examples{ ## Need the DT package ## View all results for prog test get_datatable_past("prog") } benchmarkmeData/DESCRIPTION0000644000176200001440000000165013650327712015036 0ustar liggesusersType: Package Package: benchmarkmeData Title: Data Set for the 'benchmarkme' Package Version: 1.0.4 Authors@R: person(given = "Colin", family = "Gillespie", role = c("aut", "cre"), email = "csgillespie@gmail.com", comment = c(ORCID = "0000-0003-1787-0275")) Maintainer: Colin Gillespie Description: Crowd sourced benchmarks from running the 'benchmarkme' package. License: GPL-2 | GPL-3 URL: https://github.com/csgillespie/benchmarkme-data BugReports: https://github.com/csgillespie/benchmarkme-data/issues Depends: R (>= 3.5.0) Imports: dplyr, graphics, tibble, utils Suggests: benchmarkme, covr, DT, testthat Encoding: UTF-8 LazyData: TRUE RoxygenNote: 7.1.0 NeedsCompilation: no Packaged: 2020-04-23 14:36:15 UTC; ncsg3 Author: Colin Gillespie [aut, cre] () Repository: CRAN Date/Publication: 2020-04-23 15:10:02 UTC benchmarkmeData/tests/0000755000176200001440000000000013417716236014474 5ustar liggesusersbenchmarkmeData/tests/testthat/0000755000176200001440000000000013650327712016330 5ustar liggesusersbenchmarkmeData/tests/testthat/test-plot_past.R0000644000176200001440000000042113650322550021425 0ustar liggesuserstest_that("Test plot_past", { skip_on_cran() expect_true(is.data.frame(plot_past("prog"))) expect_true(is.data.frame(plot_past(test_group = c("matrix_fun")))) expect_true(is.data.frame(plot_past("prog", blas_optimize = NULL))) expect_error(plot_past("Prog")) } ) benchmarkmeData/tests/testthat/test-get_benchmarks.R0000644000176200001440000000023413650323106022374 0ustar liggesuserstest_that("Test datatable_past", { skip_on_cran() expect_gt(length(get_benchmarks()), 1) expect_equal(length(get_benchmarks(collapse = TRUE)), 1) } ) benchmarkmeData/tests/testthat/test-datatable_past.R0000644000176200001440000000057413650322212022374 0ustar liggesuserstest_that("Test datatable_past", { skip_on_cran() # expect_true(is.list(get_datatable_past("prog"))) # # expect_true(is.list(get_datatable_past(test_group="matrix_fun"))) # # expect_true(is.list(get_datatable_past("prog", blas_optimize = TRUE))) # expect_true(is.list(get_datatable_past("prog", blas_optimize = FALSE))) expect_error(get_datatable_past("prog1")) } ) benchmarkmeData/tests/testthat.R0000644000176200001440000000006213417716236016455 0ustar liggesuserslibrary("testthat") test_check("benchmarkmeData") benchmarkmeData/R/0000755000176200001440000000000013650323142013520 5ustar liggesusersbenchmarkmeData/R/make_data_set.R0000644000176200001440000000467313650322643016443 0ustar liggesusers#' BLAS optimize #' #' Try to determine parallel BLAS, which implies non-standard R! #' Compare user with elapsed time. If user >> elapsed, then parallel BLAS #' @param results The output from a \code{benchmark_*} call. #' @export is_blas_optimize = function(results) { user_times = tapply(results$user, results[, 5], sum) elapsed_times = tapply(results$elapsed, results[, 5], sum) * 1.1 blas_optimize = any(user_times > elapsed_times) blas_optimize } #' @rdname select_results #' @param res A list containing benchmark results and system information. #' @export summarise_results = function(res) { id = res$id date = res$date results = res$results if (!is.data.frame(results)) return(NULL) ## Make past versions consistent with current if (!("cores" %in% colnames(results))) results$cores = 0 colnames(results)[5] = "test_group" timings = aggregate(x = results$elapsed, by = list(test_group = results$test_group, cores = results$cores), FUN = "sum") tests = timings$test_group cores = timings$cores no_of_reps = nrow(results) / length(unique(results$test)) values = timings$x / no_of_reps blas_optimize = is_blas_optimize(results) if (length(unique(res$cpu$model_name)) == 0) { cpus = NA_character_ } else { cpus = gsub("(?<=[\\s])\\s*|^\\s+$", "", unique(res$cpu$model_name), perl = TRUE) } ram = res$ram byte_optimize = as.vector(res$byte_compiler) r_major = res$r_version$major r_minor_point = strsplit(res$r_version$minor, "\\.")[[1]] if (length(res$sys_info) == 1 && is.na(res$sys_info)) { release = NA if (length(res$platform_info) == 1 && is.na(res$platform_info)) { sysname = NA } else { sysname = res$platform_info$OS.type } } else{ sysname = res$sys_info$sysname release = res$sys_info$release } if (!is.na(sysname) && sysname == "windows") sysname = "Windows" package_version = package_version(res$package_version) tibble::tibble(id, date, time = values, test_group = tests, cpu = cpus, ram = as.numeric(ram), byte_optimize, r_major, r_minor = r_minor_point[1], r_point = r_minor_point[2], sysname, release, blas_optimize, cores, package_version = package_version) } #' @rdname move_files #' @export make_data_set = function(from) { files = list_files(from) l = lapply(files, function(i) summarise_results(readRDS(i))) all_res = Reduce("rbind", l) all_res } benchmarkmeData/R/get_benchmarks.R0000644000176200001440000000044013650322265016622 0ustar liggesusersget_benchmarks = function(collapse = FALSE) { benchmarks = c("prog", "matrix_fun", "matrix_cal", "read5", "read50", "read200", "write5", "write50", "write200") if (collapse) { benchmarks = paste(benchmarks, collapse = ", ") } benchmarks } benchmarkmeData/R/zzz.R0000644000176200001440000000010013650322543014473 0ustar liggesusers.bme_env = new.env(parent = emptyenv()) .bme_env$results = NULL benchmarkmeData/R/benchmarkme_data-package.R0000644000176200001440000000063413650322155020507 0ustar liggesusers#' The benchmarkmeData package #' #' This package contains the results from users running the #' \pkg{benchmarkme} package. The key function is \code{plot_past()}. #' @name benchmarkmeData-package #' @aliases benchmarkmeData #' @docType package #' @author \email{csgillespie@gmail.com} #' @keywords package #' @seealso \url{https://github.com/csgillespie/benchmarkme-data} #' @examples #' plot_past("prog") NULL benchmarkmeData/R/nice_palette.R0000644000176200001440000000067713650322614016314 0ustar liggesusersnice_palette = function() { alpha = 150 palette(c(rgb(85, 130, 169, alpha = alpha, maxColorValue = 255), rgb(200, 79, 178, alpha = alpha, maxColorValue = 255), rgb(105, 147, 45, alpha = alpha, maxColorValue = 255), rgb(204, 74, 83, alpha = alpha, maxColorValue = 255), rgb(183, 110, 39, alpha = alpha, maxColorValue = 255), rgb(131, 108, 192, alpha = alpha, maxColorValue = 255))) } benchmarkmeData/R/shine.R0000644000176200001440000000403613650322557014765 0ustar liggesusers# tag_results = function(results) { # if(!requireNamespace("benchmarkme", quietly = TRUE)) # stop("Install benchmarkme package to use shine.") # # if(is.null(results)) return(NULL) # # no_of_reps = nrow(results)/length(unique(results$test)) # times = tapply(results[,3], results[5], sum)/no_of_reps # # data.frame(id = -1, data = Sys.Date(), # time = as.vector(times), # test_group = names(times), # cpu = benchmarkme::get_cpu()$model_name, # ram = as.numeric(benchmarkme::get_ram()), # byte_optimize = benchmarkme::get_byte_compiler(), # r_major = R.version$major, r_minor= R.version$minor, # sysname = as.vector(Sys.info()["sysname"]), # release= as.vector(Sys.info()["release"]), # blas_optimize = is_blas_optimize(results), # row.names=1:length(times)) # } # # # #' Shiny interface # # #' # # #' This function uses the shiny package to explore past benchmarks. # # #' The interface is launched via \code{shine()} # # #' If you pass a benchmark, say by running \code{benchmark_std()} your # # #' particular machine will be highlighted with a red dot. # # #' # # #' @param results Benchmark results, probably obtained via the # # #' \code{benchmarkme} package. # # #' @examples # # #' \dontrun{ # # #' shine() # # #' ## Example results # # #' data(sample_results, package="benchmarkme") # # #' shine(sample_results) # # #' } # # #' @export # # shine = function(results = NULL) { # # if(!requireNamespace("shiny", quietly = TRUE)) # # stop("Install shiny package to use shine.") # # if(!requireNamespace("ggplot2", quietly = TRUE)) # # stop("Install ggplot2 package to use shine.") # # if(!is.null(results)) # # .bme_env$results = tag_results(results) # # # # appDir = system.file("shinyExamples", "plotting", package = "benchmarkmeData") # # if(nchar(appDir) == 0) { # # stop("Could not find example directory. Try reinstalling `benchmarkmeData`.", call. = FALSE) # # } # # shiny::runApp(appDir) # # } benchmarkmeData/R/data_help_files.R0000644000176200001440000000053113650322247016752 0ustar liggesusers#' @rdname past_results #' @name past_results #' @title Benchmarking results #' @description A summary of past benchmarks. #' @docType data #' @format A data frame NULL #' @rdname past_results_v2 #' @name past_results_v2 #' @title Benchmarking results #' @description A summary of past benchmarks. #' @docType data #' @format A data frame NULL benchmarkmeData/R/move_files.R0000644000176200001440000000255513650322305016002 0ustar liggesuserslist_files = function(from) { c(list.files(from, full.names = TRUE, pattern = "*.rds"), list.files(from, full.names = TRUE, pattern = "*.RData")) } get_empty_results = function(from) { files = list_files(from) empty_files = rep(NA, length(files)) for (i in seq_along(files)) empty_files[i] = is.null(readRDS(files[i])$results) empty_files } #' Functions for manipulating uploaded results #' #' Functions used for moving and creating the \code{past_results_v2} data set from #' uploaded data. The \code{move_files} function is used to moved files from the server #' to another location, whilst removing any empty data sets. #' @note One of the unit tests uploads an empty results file. #' Files where the results are \code{NULL} are moved to a sub-directory (called) #' \code{empty} in the \code{to} directory. If the \code{empty} directory doesn't #' exist, it is created. #' #' Currently these functions are specific to my set-up. #' @param from A directory containing the uploaded results. #' @param to Destination directory #' @export move_files = function(from, to) { empty_files = get_empty_results(from) dir.create(paste0(to, "/empty/"), showWarnings = FALSE) to = ifelse(empty_files, paste0(to, "/empty/"), to) files = list_files(from) for (i in seq_along(files)) { cmd = paste("mv -v", files[i], to[i]) system(cmd) } invisible(files) } benchmarkmeData/R/select_results.R0000644000176200001440000000232113650322527016707 0ustar liggesusers#' Selecting results #' #' Selects and aggregates over the \code{past_results_v2} data set or the #' \code{results} input data set.. #' @return A data frame #' @param results Default \code{NULL}. If \code{NULL} the \code{past_results_v2} #' data set is used. Otherwise, the input data set. #' @inheritParams plot_past #' @export #' @examples #' select_results("prog", blas_optimize = NULL) select_results = function(test_group, results = NULL, blas_optimize = NULL, cores = 0) { if (is.null(blas_optimize)) blas_optimize = c(FALSE, TRUE) ## Load past data tmp_env = new.env() data(past_results_v2, package = "benchmarkmeData", envir = tmp_env) # Format data results = results %>% bind_rows(tmp_env$past_results_v2) %>% filter(blas_optimize %in% !!blas_optimize) %>% filter(test_group == !!test_group) %>% filter(cores %in% !!cores) %>% filter(!is.na(time)) %>% group_by(id, cpu, date, sysname, blas_optimize, test_group, ram, cores) %>% summarise(time = sum(time)) %>% ungroup() results = results %>% arrange(time) %>% mutate(rank = seq_along(time)) %>% select(rank, everything()) results } benchmarkmeData/R/datatable.R0000644000176200001440000000227413650322262015573 0ustar liggesusers#' Interactive table of results #' #' A summary of past results #' @inheritParams plot_past #' @export #' @examples #' ## Need the DT package #' ## View all results for prog test #' get_datatable_past("prog") get_datatable_past = function(test_group, blas_optimize = NULL, cores = 0) { if (!requireNamespace("DT", quietly = TRUE)) stop("Install DT package to use datatable", call. = FALSE) if (missing(test_group) || !(test_group %in% get_benchmarks())) { stop("test_group should be one of\n\t", get_benchmarks(collapse = TRUE), call. = FALSE) } results = select_results(test_group, blas_optimize = blas_optimize, cores = cores) results$time = signif(results$time, 4) # ## Format # results = results[,c("rank", "time", "cpu", "byte_optimize", "blas_optimize", "sysname", # "test_group")] # colnames(results) = c("Rank", "Time (sec)", "CPU", "Byte Compile", "BLAS Opt", "OS", "Test") # results = results[,c(TRUE, TRUE, TRUE, is.null(byte_optimize), is.null(blas_optimize), # TRUE, length(unique(results$Test)) > 1)] DT::datatable(results, rownames = FALSE) } benchmarkmeData/R/plot_past.R0000644000176200001440000000501513650322626015657 0ustar liggesusersglobalVariables(c("cpu", "n_time", "past_results_v2", "time", "sysname", "ram")) #' Scatter plot of past benchmarks #' #' Plot the previous benchmarks. This function creates two figures. #' \itemize{ #' \item Figure 1: Total benchmark time over all benchmarks (in seconds) on the y-axis. #' \item Figure 2: Relative time (compared to the smallest benchmark). #' } #' The data set used is \code{data(past_results_v2)}. #' @param test_group One of "prog", "matrix_fun", "matrix_cal", "read5", "read50", "read200", #' "write5", "write50" or "write200". Default value \code{prog}. #' @param blas_optimize Default \code{NULL}. The default behaviour is to plot all results. #' To plot only the BLAS optimized results, set to \code{TRUE}, otherwise \code{FALSE}. #' @param cores Default \code{0}, i.e. no parallel. #' @param log By default the y axis is plotted on the log scale. To change, set the #' the argument equal to the empty parameter string, \code{""}. #' @importFrom graphics abline grid par plot points legend #' @importFrom grDevices palette rgb #' @importFrom utils data #' @importFrom stats aggregate #' @import dplyr #' @export #' @examples #' ## Plot all past results for the `prog` benchmark #' plot_past("prog", blas_optimize = NULL) plot_past = function(test_group, blas_optimize = NULL, cores = 0, log = "y") { if (missing(test_group) || !(test_group %in% get_benchmarks())) { stop("test_group should be one of\n\t", get_benchmarks(collapse = TRUE), call. = FALSE) } results = select_results(test_group, blas_optimize = blas_optimize, cores = cores) ## Arrange plot colours and layout op = par(mar = c(3, 3, 2, 1), mgp = c(2, 0.4, 0), tck = -.01, cex.axis = 0.8, las = 1, mfrow = c(1, 2)) old_pal = palette() on.exit({ palette(old_pal) par(op) }) nice_palette() ymin = min(results$time) ymax = max(results$time) plot(results$time, xlab = "Rank", ylab = "Total timing (secs)", ylim = c(ymin, ymax), xlim = c(1, nrow(results) + 1), cex = 0.9, panel.first = grid(), log = log, pch = 21, bg = as.numeric(results$test_group)) ## Relative timings fastest = min(results$time) ymax = ymax / fastest plot(results$time / fastest, xlab = "Rank", ylab = "Relative timing", ylim = c(1, ymax), xlim = c(1, nrow(results) + 1), cex = 0.9, panel.first = grid(), log = log, pch = 21, bg = as.numeric(results$test_group)) abline(h = 1, lty = 3) invisible(results) } benchmarkmeData/NEWS.md0000644000176200001440000000165413650265055014433 0ustar liggesusers# Versin 1.0.4 * Dataset bump # Version 1.0.3 * Dataset bump # Version 1.0.2 * Dataset bump # Version 1.0.1 * Dataset bump # Version 1.0.0 * Matching version with benchmarkme * Moving to new version (unfortunately, we can't use past results) # Version 0.5.1 * Add to CRAN # Version 0.5.0 * Updated data set * Added cores column to data set # Version 0.4.0 * Moved shiny interface to shinyapps.io * Updated data set # Version 0.3.1 * Updated data set # Version 0.3.0 * Updated data set # Version 0.2.2 * Add quotes to `benchmarkme` in DESCRIPTION file. # Version 0.2.1 * Match benchmarkme version. * First version on CRAN # Version 0.1.3 * Updated data set * Include byte-compile flag * Added shiny interface (`shine`) # Version 0.1.2 * Update data set # Version 0.1.1 * Include OS and RAM in data set. * Include read/write benchmarks. # Version 0.1.0 * First public release. benchmarkmeData/MD50000644000176200001440000000345513650327712013645 0ustar liggesusers0d2d1a9a75d09ee303188d45b7c89f8d *DESCRIPTION 6f9559f4a99ce026053d513aa1e611a6 *NAMESPACE 0e20e20580d9130aa24dfc6ff2045eac *NEWS.md 885b3a70acec26f6c5c34f89c8608b04 *R/benchmarkme_data-package.R d2dde79285987395df7d9c758b673d89 *R/data_help_files.R 516837f021edf5b59ed08d198e6a0557 *R/datatable.R 9c46ec18aaa36797e4243712d1edd3ce *R/get_benchmarks.R 09f43f457d94427e056751e3048c0b17 *R/make_data_set.R cc609e4780f6704b0afe034d616543ac *R/move_files.R 37573c2ae3dc61d3b1d462462ded6e78 *R/nice_palette.R 5164909d54ee56ea71aeacfbd076e6e4 *R/plot_past.R 769f1bb4fa2cdf0a356533294ac07b3a *R/select_results.R 8f4715b08fc0f39ba4d3504747ef784a *R/shine.R ab29372bda32e5799d65b4d4faa2df9a *R/zzz.R cf6574c4bd0b4e1ca667cf1c4e02b6be *data/past_results.RData 73daacfadee73e3e72124b6340ecb363 *data/past_results_v2.RData 6c0ae514c5ec95d558d170ea8c67f4fb *inst/shinyapps_io/dashboard.Rmd 0aa3675b23fde0f092a964506601a9d7 *inst/shinyapps_io/favicon.png 3b58e61d7192e4a83ba7063eeb384015 *inst/shinyapps_io/functions.R e809af3e4d743617e951c9ebb8c8dc2c *inst/shinyapps_io/logo.png 5d5ad40b10cf47ba3465e3a905a3da43 *inst/shinyapps_io/style.css b736b2ecd80c99668a35c49f82518aa8 *man/benchmarkmeData-package.Rd 3a422bf19afcd3ecaafd4603b22d4470 *man/get_datatable_past.Rd 62d8cc8e2591f280f004605930ae262d *man/is_blas_optimize.Rd bf76aaab2d87c643e03d93fa4e77f4d2 *man/move_files.Rd 1ed535418d77bf46c838f575656ad135 *man/past_results.Rd 18ac650bc08bf35b96281a8960282cda *man/past_results_v2.Rd 05ec83023e0e7361bdf34a3ceb67732b *man/plot_past.Rd 6ee6a25b81e29dd0b8226409f55008a2 *man/select_results.Rd c6a314df2cd96c6b4d9072394a911e30 *tests/testthat.R 552be81dff121d601a03040e1a19ded3 *tests/testthat/test-datatable_past.R 560c122ce6fda5ec2a25a9abbe9b9493 *tests/testthat/test-get_benchmarks.R c25c85e93b23356d9eba6b7f0747be3d *tests/testthat/test-plot_past.R benchmarkmeData/inst/0000755000176200001440000000000013417716236014307 5ustar liggesusersbenchmarkmeData/inst/shinyapps_io/0000755000176200001440000000000013650323737017013 5ustar liggesusersbenchmarkmeData/inst/shinyapps_io/functions.R0000644000176200001440000000215413650322601021135 0ustar liggesusers pretty_ram = function(x) { # x = x[!is.na(x)] x = x / (1000^3) 2^round(log2(x), 0) } get_test = function(type) { if (type == "Programming") "prog" else if (type == "Matrix functions") "matrix_fun" else if (type == "Matrix calulations") "matrix_cal" else if (type == "Read 5MB") "read5" else if (type == "Read 50MB") "read50" else if (type == "Read 200MB") "read200" else if (type == "Write 5MB") "write5" else if (type == "Write 50MB") "write50" else if (type == "Write 200MB") "write200" } get_option = function(type) { if (type == "All") NULL else if (type == "Standard") FALSE else TRUE } #res_table = res clean_table = function(res_table) { res_table$time = signif(res_table$time, 4) res_table = res_table[, c("id", "rank", "time", "cpu", "byte_optimize", "blas_optimize", "sysname", "ram", "test_group", "cores", "is_user")] res_table$byte_optimize = res_table$byte_optimize > 0 res_table$sysname[res_table$sysname == "Darwin"] = "Apple" res_table$sysname[res_table$sysname == "unix"] = "Unix" res_table$ram = pretty_ram(res_table$ram) res_table } benchmarkmeData/inst/shinyapps_io/logo.png0000644000176200001440000027354213417716236020477 0ustar liggesusersPNG  IHDRbKGD pHYs  tIME 7}7 IDATxw$USuC KΙ%%$gQ@CD̢`ʇ(($I%縀dXº ,iaٝt?ClLwO{}kzsn8B*O+@JzA0!B!TN2Οo} ltD!Bӳuzs!" !%0,ٹ; "" YKd6F!B8%tu+U7>(Mm&X#B!d\ QV4KQuMQ2.&G!B8:oA@̵c޿SXh= |A!B"WGia}cWӞBO !B'mg\\-}@|GF `Z2\BTtQLy@LO|CDkB!20οUC(Z:{mpm!dXB![:mS:u C4v)l di Ll2-K!Bdak7K&,KB Bør[P蒭h]B!B~unU{3ڽi/!dAB!1Nz$W<ە4jr0-L BBPW$Hn9j/B7L BƘ c5\ ̝6{fYT{Fp8-M B*EdB:{4ΙKDukX M BBG-8(\@>! !BH!d!?Y% '˗NDOB("!n|gE䁦Dl.nѳn,| ޯAB("!.#tn?@(_fq+YxVEdPuczBA!t".tv"zF˞ν+AQ:BA!t[حY/#i&""BA!t=+C}O~(&.dqnJ?B("!.![TQ7r;IzBA!tU<QO;){uzBA!tJ!HWo)J/v4P;/B6:"PDB!1 /+9h )_.DoB("!eK, *|NHVwJuZpJ!"B[[5bNI^TE,mLVt!"BX-_>fD!"BE$6He=4a2YAB("!U6|VK^ `V5D9BE!2D*vR=BE!fHu*(h5\M BڍxPUBg p5"Y^$PDB!ЍjHUtV΋1~"!"BiaT`j|vrTWA("!BH{mEIUOi^ +!"Bi"XʲnHֶU]aIE!BZvCG&L>#KnOBA!l "/3nI{Tċ =JE!BZƅ+ɲI{jU&,GBA!"uP< 5Bm!BiMj^u& Z=ȱJE!BZD ՛-Y_ȁUYB("!"DgU}4I+ݘ>S=KE!BZ}oQswe6rLeB!йX𣧻5/U"KX&"B! @gUnK "l3=LE!B."FNJ8;oռ v BH1& V*_<>d B?B/BA!f@2y ꩢNܺt4!Bi Y-_xݞ\13Fv BHsX2Pݪv92!U6"B [ՄPDB! XkWȖL|%ID*\@ס BHlUΓ19kՏEa$zB! g5鱕;yeALpCzB!4̆]1<[Ug,9=NE!BFBT.\KKnVUNE!BF!'*"BU_\&U> h5zB! s4}l1z& "B!! X!T^ijE%HBA!a n-(ס+">!BX"="3DnYUz L`kUթ ^e1`!kbZ_wDvf "2J}L|I}Dd6ŤOBq̢ +_fqΰ=)d"Xp:!x!wXO'XG#DD%c:y*=Y  (Y\<ן\T1; C Z|TW=%d' (Zu-N^Q+zg?# Q)ܷ|/Zx|ۻ%dgK*6 B:6>zxvЎM] Hlj2+B3BgNJ@.~9#だ/}"ۉ~EuDwCQHUkJ_Ji *3˄MȨ7XRsIRS&DB/ق=W6 xvA@&1<ώ('=~FA#tngQY3MM`}$cN~QEu&U^x  rZ|r-xYV!2߈Ȋ@#`\_@dj)Q|0 .!ʗ辰t9 iCe$;4A qDeS}]mXE>Zy;>VMNI!ϳleZ-pqȞ5qϻ) =_U(ץE%ouJ(")n,k^ ֹ̝ })6s2FXxi" c94]3P}a'Qo]T&*Wuy 5lLvv @딝("!Fe)(ٯ.{R>*E OhGZJG?΍xn4iBFTYٷ#S~U=.΃FZFD)e12+~F.(hUl炛iƨ=~&Bp_P%>F.. k)/i@;k93rՇW|^%], "}z*Pzn[V䧨8qW-?HBk" iy[s8/I=_i{O%("~MDV(7SoݖkDdykWu,Eq +%w,V "" hh$}gZ@`><=cdOjmk k@:2=ظx+K\0h)C7l&G-KRkuϥqY " "O j ^8~z6JyP"t ^IhKq@V7D6.:Hs1yr5X?ID0k+ /CAHa|")#\93wHmӳK}wM}M+ХkMUY_ي ܺ jvFyolA(KAqkf> B'NIܯkQiպ$ IDAT`vzܖ -:Oߥm xk g&t 65fke{eUȂ`V퓜AT-y- oyD3xIWkCpqv롏»ZB~@jWTzA!WH@uCc#& -} YVw)J r@o5&Mb%UȐV dZB`E!0a9 o: Dd@KLx("*D*g ]Cb0ف@ NjG9^Wu/R*Cbg8.!ikxG-yDճ'B-/b'"[1{&fYo!ChDWp*z9RC;إ->I(} G ary5]$_HOaq9X&Z5tnEο2~|Vܙ _ Ϣ]J4EѨ_mĸF<rMk+ uwXjxpY͍{cqz0`El4`\ϖ7xԇ78mzCޯN9 ?:0g $7Byy MIsmkLAcmvb2|e{EjXI'X{ wTqsGcR?l3>k7tw}8zmĿXHIʛ{4`"-x" 롮M)LЖL C;؈hU룤6R3.CMWrU*!// ]E.:ӸBc]nd]tc=hᮐܝtnc9ODk}?f ~i\*nj౛|v\8:[ Ӹg#`<)` “:Y_0DʒJZl_Tn;_eIs}x\oЖLvb#z_Ꜫ&].CqrZ Ɛ5Cl)A+i\Z5MJ/gqY{Xzm6@g%OS]SF\/Be4&V;q yʠo Е֯mk51 Wn> # "XLúYnԂB~ 0[?iEЋh靴H|8?svFӌS)CWy'*o gm@=۩xX\l߼uͪ?ο1H _clbk06c;Fοm٪Mο(mcYjIs Y !ע.c\t}lORuiuBV!oCom\B4g X;)tn/Cn7WwUWEMt\%? έ3//VX{Hw.MfI%D@ ?~'1Ν6#Z;v[vp10X.pb:e%M_Шn6lktKќB[3##Fm^";4uE?\C|#qjYnѿN #fEZE?xnկ(Z%yB>H17C1XܘX^ݓswHEeYzI`тec;hጌ[k7>m~O4ο\iaq?Sj}zyi{yJEH^>X)[%>JB"6 c`:&aw4.u-Sݠ"йu>/iJF@+z߀=5 ڑXoMS#M+qTkXxݸ[ `e>I$YfݙHW4av>eYi^{3O:I<ř"Z`'*j+CDSR|n;6rllV}T.Geǘ;=ĚbE.v`R$ɹj9P.nP_Kx||vӱ^m޻Toka>m]7h݌"呍N|`̚kޒ)>* _{(I_8GU_@p+^Y|E~%C;/`_?3[_};D1ōx zA9(e:aZs "ĥmt)g!=9{?9u8dq|Bj8n=ڊk~ Ea`^e-yvZ%e4S N+r7$)6s{@ao e$=7}k nJ * o]4 n]?R_"BeGڤCir|ą峛[W{wkV 4@q}`Vd[mҳ8TZA|"э0<@u(u qsm 5T_ 0/`h2,(P8KJy# Rx0}yF4yDTgVT ҉} 0,%Y\Wh3|r"z8Tg a!zR*_4%I2gPD0%\D@w,D_,Ⱦ@JmX˸蘎IP}Р/'d T74ҨJi٣C|YSV}!!ۅhG{8D?Ӽ:fC2+OYɂ"4\dڲ@&U/gq|0k#*2pa'P {}fj@;uG Tu#TM M!cWlir쓦@;=u,N+ooD@PD#ǶR Dȹ dma%W% F$êzQGsY0mYV<3 .XÏ ,'uڹ8 vZ:|w?`]M=46OzKUT>٠^T ߾7ioʹ"s jhdF8DNlT5dY_z"5x6Ԃ:R{ۃ@U;w/zV,r K8r[7r :F"<;# &L.tQGPXO}[=jV"yf_ZxDLLTA V{+u4H(zRKMZ۴Gdt}]$خ~Doh [pc{7ٟ;r@߳,t k='CkʑغUv-E3F>@ }OG% e[W%8A!0JB=|!O2W5>\?e,&4Y iz_Rŷ 'u_9 @شdP*+Z8;A2iS790U}~sMޅSU^ Wˑ,N[0;%0ӳ@*Dg7xRHo/MF#rl0HtF$kʳ\DP\sq=zukor,wG>Zhߎ wdIY#=|76Ps1p7 A V4T'E4Mg5׋EdAG h7=XIo>zBT@F.lւF[ߨFok6n|( QWGēxuum1fۖ+=Rx}Ms[ﭗ'|]A: thQ\G}( έ;qa[ǸFq%Mjfu~vw[OSYs7hCl؆6[quv|a]v_NFk!ޖYPO ;oH@;81W;msJyչ4,̱=DhiޚMXMw?H],ŌqGÇ\ ٹ✤z]Ry{ ~㢯ղF<_`,~kMzb!2x.NWM]t@!dq\` n>{h2_E$0_1!5!~7 qppAڔ߮> DwY.Y񇍸g! Q0P'4."} Ug"*O4s~xm\ EC*B0Ril'|!.:#%;y6;AGEdsşBd1"[6dvD)tO#IjM}Mާ P4oު=@_29^DjE;ͱ 8Au#o, ?$N`2(M]0 k6j&)xDD> `uZ;1©#[C{ՖO*dD*~7?[۪̈́h r]"D`|.l\v kDY80&*IU8?1bFƘ6#A"p^nE?ݒp#W Ѻ}AA䶣va#/Q"cz(|շuP4gͮbe,]o* y?ۿh{w7zCCGT1ѻ+1mŚ@: k!~hJa1ӆ8Oq HeR[a5Ou/- CkEq6Ol{OZΟ-ܱ#M:{ y8:VʬBy8EXgBxQ ~ k,gC#7Fq}ڻ+s_lY4#r:z5܏o"HK$#Β-~&Tw}R`rwNi{03W܍zsEG摲^nn(vA1]g?a;=X Ȇ5g<_qiyraPŏxPW ~R<`w 0=Ze@&%W>TkxjEJ_QW!W@T[(@ߎIxd3!Tv:@#D*gSͫu0Dl ȩ#{J@AmjZ6VCP<`6$IUk 6xm]ڰ߹(+GZg_}D FN_1&jsгbvM9p܂Jƹow :u:e=;ewiGٶ ћZ??o LhZVn?{aǔԜ|/[ߣ8& b}ٜnI^-ZSkmqQ~br78>|E[4VGj#|3 1t`rF:BuۭMm)lazat8iC,ߚ-"ʣ};o>g xέ-e9m9l;ο3@x_Y:v [`u5Qe7zh^rm;1mHnM}ghTc@]no}yk݄.ms!ݨVW?zдkImWLG_G PаFV'* YzOV*Rϖs> IDATU^;xYe gq~r|*mm  e!I4 6l"8+İ? Ð˽EcTTRi\:dJcTf\!XOD6_!o.#!X2-ka\U}nQ )oT<8;BU_]~6le&5XStz$>q>*AB'T{Oi(/DdP_ޅt/>Ң*5!swέn])$Hy,iۼX+ݝP[{Yk72%(t-vztG豁is>gEk~z`nS8Y[c7{vợŢO9nkM{hV*)u,<"2 Lki`^D@Yvd,Y | EoMM)2 -; mU,N' Wˌ~k g4PDPXAPp~]c+cu1m>װfm]% [Ddgq|U?X'Q[G8T#qR08F 7,!~%"+4neP4$tҖFWٺ_z?ֺ\5*g,* ] OG#Dg1 v.9jpR˄~/܂?.[u B6# }St1YlQwEgڌ6M`6ȕY7̑GPY093ܺӳ?nM]wdE=^Wo$GQ$gDrI ( EQAT$"I$#9IQɠHZٝ~zg7߷;=ޭ[7խsowsCcf'< 4|Z5t.5N7,ޅ~0nR Ct$y.L:m=x+(ڬSCԟ%1f%YAK2u|}p]ז;حtܬfnm54Nq'k`G e$C-쒾ROG{_k{AȒ R?~"%&yr( ѱ#L5C?EZ٫cB8/i`a sQU⎒,Onq "!=h o[O|T!nѥ88ba]eoRNcyj.+xEYf s+j`ă;E>$Q+!T`LL$JQB3uDœk5?olkj3(XwA}2&_ QAţSDtDbga|x=-V'pkEYcJZ/l7ލ[TGdLmFS^p@yL0uU'P%eLt\N>5555 'NYvDM>j6rS{H̎*^O2j h ,DKYO˒eN^]ͲqA'9С$G<߷v3bt2( YH;$Q=BQ3yZe9Py ҃8'g<h9`)>n9^LF]V "Dv5@b+Z4 v%jz HwIQ/e %QHke-U*Vq lm`Ȳlg'ŐN|V98KiEcwa[{&ܖo*Aտ6>~Ǿ邃A.sW|$Ͽv$LV&pyuvQGVGFLՋ {d/z_k;gkamϪ6tϒ3ƋE\#چQ->f7R,NH@C7Rs<U,x-qR44|ʄ Nbc]Gr it$\hYz (H_kc;ku7϶łf^Ԯ12iOO['*NlJ0ϓF8 b|ȒCTp_t]񹮛zGbkt(Cy&<^m oǍmObB3ßY^s\ĕK-Dc$Uf f7ҸMYR`Z9~E+X{P2EP}X&`)e/DrVkӎXܯձq޳6^RW+FǠ($P" \YN ;ِ:C@?Qɋ<$ɈKJ> 0HI` (ҫ98UDڎ"12D/%~6ANnɲ~C?|*Eg4 &rfىw(l "4d K?~re nAQ-:Odhq5YrG&?/U? _@o=\QfO/ vaCh9U%[9oK/K~ Lҷ}T"]t@mԔ"M^(cw#)'xw_}Sϗx|ZԬYrkkAje,еSI^u'-0\Ez7K͑}ș^b]ʲ!$<,5H^$Wlp/ADn6. sD|cPdov߼r{+%~rQ! f :U@s]IM-1VPWSPpZQ$7銾ڲAS47DAB&} r$իC_i6#FH=B62ɷ_SI?>|/?ЃSMK>16xN&{q 7)-9yi'#Nu.=G;Uz tG4=_Cz$%qzHH 7jR;$9Iu5 \FqO$n[ېlsgWnqWu%圁s6|S yݐy=mAwj8q/C'jWlwFN33iȓ∆hހ~XŁFm:%,\`2ivDR2vp,g- V&iFi"/M{/0z'ć\\{B&Ix{?30nѥ9 K%}VρO7Pm*e"w%dž&.!unN':ZT2[ Z've0hERhzyidqVonv_K_B1vu(⟒\&pכǒ\@hs=U-XT2Mu(|VT}DJAQ-Ih"64?p69,S@+ XE^2Y, 0>kW KzDE߯4?nѥ1j~}={O4 E[M}Tv)w08?^t8眅˔$A qHѠqiZ1/,Fwʭp䅶V m*YY;iWm3ͦI}/4=rNEװ]ڐ;:$\UãХr2D4/iVkC>6I,_{Lx9<!W=}njc:uRbTUJ3ERY1B_ wQ_1cf8==@}vOOcH$Y=(ۘ0ZUV׵^7hpR>~1;2C72A6!{7u[aImV,F]ۏq Cs^!|4ŘÊ4c- ^{77Ukpڡ .] \fL8ZlME܀0\V–v`P^HzD4w$#@F o L{Dti >yB܅RmjRKUn0,tN5ϱ]gÕFTcNz{_iՋ?eP-t'67"g (aɌ(+'Wen9@)%ZxXZ4H8A~i4јq C/?˲ʹ-vv[/~Se@C1k0%׋|Ē/am< ,91M0g|**EMnU]j}F?U@al)FݹwK v-FnuwQ'Q|=Fѩpŕ~7[EgζAm[*}%Q;QXϟ UjGZD֡ٽFi]pQ| aQ[xBMȽ]c~2n.5ٞo g'9Cv/Xg=*Jg|>)PD9K7b#huHgR'Jl.DYrmxz^Gsek Ccjd, :TlQf[| K+8vf rZk?7"1? jzS5ׁ/~4mZZXArӚfX+r )#4W-iP;K`%=eQIOGpG­ȲډW?X؊_PɵPHzɗد.u ս^k9yd9` cJ-j{$0O{qSX?ipX2}a GYF4g7 /F?`<%pM+3a潆pwQ|R,X?|핷 y :O8$4 Bwxs.άsD!Ns7h˾ ;M[F5Y3x&֌Az6rM}WK[>8dM8-ZmğY٥.1ڑS/1N(#*pcHJg%V2@9e?;_ *nCSZ+/QtHj,ϲҌI2AbV xGJDȒC <%4X=ŇQ85'..<% Mr@+%R *E:@[=$EPͤjBN kXIyK 5M6*Nۣ's׎<qI}S9+d*B hr@nѥD4B@If+Ctt,oʁ qPOEC"6s(oyk/ x<1 b/izvsU?۝8pqNX+Onh%g@y3Csu{;:&!U~HOLrR] K& w*Pm{}Y?9qsk +t4di4?ƺXe"gݽGQҒk۰Ҟ Fa*) Ҡno/PU%-aTߞ irmKd_@N~lN'Zu >xJ  6tq^RZ5ovW׌FAU|hIKbUUs{NQqg#w 7(!_]\ ;{ѥ J.T{#Ikia>.ݒ$kQBT/y! x)A佐 hǎqHԬ95Ut" fLgYJQ1u/;]^\ T^ nr:ɓ Tl\r Or ptHS-?G&@P cm aI௅vfԒr@K]1` C,hAmArp/bSv'1cH,lͤY[Î>ϲ/ie=cxшN (Sa~pBikщ읥zȕK"~ԡW{I$IA]+O-$atM+"0{Hz?OIXֈk\Lp e$P5ބ<ВUk~(Rr gu=jG|&xu/p-hnѥ,v iPr[a¢ pbyߋgA~A?OM^U3oVMXϢ^I9]FHPy $wrX %Oߩ}_ h:@`1չ>"B˶dD@.Q?pi>dm6e9l& IDAT`Tm`Q$7wD@Z$xmm[ZŮNB^ "4iϕIzH8xc^ A0\$O1a<]ۧJx[,>罎a߯f _Q϶_@.P׵T^j݄qC Ob@{;wxQ4r ؼ|V9"$w|[.&nuQ7=4]a(0~5K?x %{\q'B%{~Mp Tg,Լ/-I ,[n`KZ$7RbT>KrWpNet:XkX/ @u{wU<تEO% ۞ $Mfh{&* /i^9h5?/߈r޻;6 O"9+MșͶ]1V`Jֽʖ9dCHUTXՂ(>cz_%9U#4. e:]64?8sȽ kW>3e;rQm-yZ9S;lRkLjx[-NHbg$?J6WJgمMaUkE^Z -d~&i800 B7@gIr: "4 l}>3-4HSNYyY2&[<]ep+B[[`G`q1bF.C1]cOJzͮ-N60A[xTY`m]A_bLF543pnS@c |gs0; 5g?j[DD Faanѥ!|@I 6?qCm0dm=~a x.޺q~fe#B~@ A~5CjR&[yޚ@b!Aϖݷ n-gɥx@< knW|ʘ<=>ך yZ9":gDN](} ELR{]'-S:٧ڬБo@%OuQEǸsWå g1m_r "4ncSПϪ"I&M"0atS,g 97vrAV&z.~2YsEmSA2Zd]]1p*kk{=2Hzm| /cR]EJ\8/u& qt׃s La0Ed]5 zҞ\ighk04 0N KmGAr KEVD F@2>"Q4dcj?kڨg,cDh)k"MVeU[3yz_"bιErCGe Bw$[#2]A VoհYSMh+׽\&kᶦD_dz]3gj"ogH|M >Kh?$ظSz_M$LABkQ| @AZ+Ov.u$(XKg[-tCrL7R'IA}}дI{Ϳ!9!kF861b(tRc^(tFX;Ѯ3R)g*=]eYY+vs S =~4 nrunв5:6 ꤍ.' xQ{D~}S^uA|#ڒ^YrzFk00Ǘl+yP߀ށiti iʘE/ ǝ^'ADJom?`CFo+?/ QV ?6 mA4z:1ΰʬ!ȴQ- P㳞 h0 gί*Pwtt;f # ڎytB$,+Ym\]ҟ<早8 [) UP_/;^He܈5'g.'0"I %/3~װ6 .Hƌ{G8A;'S%ؠeDtE\$"Ջhy͘A.BL prgmϐnEɆЄHkmϠ-+Aƞ1FػTX+l7AZ+^虚fNJAKin繇U=$?kI=*qWh m7pNi.3I&YjS-4Mj;vE:l~^ħ0"M/סh#H~RU * KxiS݀6˔4?a6nܒ^C^= p|XJK4`!-Zބ#P1G61p qa 3(0L%?\X^Dv?dtu0Q|FHMjk&,jyj\=Bim{|G )E^ֶsܦ$<β[偯٦muA!ܽ] 6r(vDM,H|ö&md:1k9 [ @cj;H##fF=7e;/:3F^^̓J tr3hgF iJ maAc$8텷K^Ah OHDC֧ d~ےXם$gyi%1{!2 x*nh v{{_ gHgڊYQ1ck'A W/8dy $i^\vvnѥA5ʎl4>SHƉ Y^_? x/P8%w# DѦC>2I^<Ws@0ɐ_fEy6 }_YdOQp'O|o0>I`S{oi m?mŏ(I`p@58`p RdϦ3,Ռ}^IĢιEN7V/iخ\J‰y"\{qBn ZdOx9=}5A6t{L`c >˲#{EϪ'T*ƫx 4\~ΟXHrF !=p|!SL1wʁt1N@$7Q|n,KБL|H.@~{Q+`ARs %'gϟQI }d-" v:] (@\ 2F2>ieoTyaAALᔼI2ecֹhI-C"KD`U80_B UKOw d$iBixh|S g @Ӏj'^?9_ e ր pb lKg(kRE (K4d(tq%tX[4Eߘ-tqńn V(~_Q|#0 [؄W{ϧ(ںi5}Я{˃l5a^\{316X:wU}Fߋܘ$ ]5ST}I t>Ln׷ ɣE$gɄvfI4r|S3y=)v2U4Rʁ [y[r ;{3 NͶYo*K*ieZ"U?Hg 󤲬C(chna`R$NaƁfrP$6B:Obubz|`h ֽ+iZ ˘X6%"t!Y{XZ&"n*亶 \7}AIE}\yL%sL$9DPcn7RQ9h 8S;| 69G_*qn+zWCy^ u;*y r.ո;4"I$X?/Ljַ(;AW=0;W;\ ۛ0h |r#ͦ&Pr En#[NM J`0򗎪G-PODžmO}K a.ߖo hUdI^1O:HӧaNc}ԔO橎à}S9?![󛍬+=6`EzETbƛؠfErM@-A=kM!p:O6z Ҙe6FZڄ׻AD&vMu 7yΖNL ^^VA yM4ŌH偛DɉAn5)YH~~滒ޤ kX2|Hm p1b3%`Md'71Ӈq0v*C%*u"/IYd'1?HQIpY5kg%=r2G]n bwͯ71k$)ʮz$5e!l# ]+|큛4=vT2䩳O(ϓSE؀v.M[r!_[l87%lMr;x>O+% v#{CM>2x@]$YC*AA#!vg!v$?A[s&4{ݵ^A{|n#0IqV#v¯&51Aev[{K rex1wF1(߀1 fijWyz<7"Ch$[[w o zj@2tǒ n1ޑO=8*3 @]!l`@!AV L7aSYIoi@C QU0\c޼<@>wpnѥ r |dݛ-Ńuu􊀜䜂h IDAT.HXA[zOҟ:~O*]X%ִ6.LgYG+/y+ [ac[4QFj/kh#w,e y`TN>°i./$=h Qt@e%=D{ n-,K.FP-` fDU?Wntwdu%k*Ff67S$v(0)/v5CQ>#ҘL`~ud6i }VixBE!3[VuAi!6W{Jza]pJ4 ;'/KãicI8eڐҦ|>?}B!MPX; 7d%coti &h;9!$.]7izsS4 _y}>B#e$ D A`@mJU'pS֗`&I *ov.Ҫ:uQ $Q-MJ%Ihe/i>R4?o\cW'a%H fM]av#kwi~ճ %YX+gQ7 gG&-Ac]b%=r{Sr(Ɔ8˽ lJ_"It1<6^]D46-huu"I_[pnSsbJ'DRQpmY@?X{Hk!7L0Hʼnrlwܩn `V~D샾ɒ|> Kr~/3isE00_dI8qGQtrI3(p]c.q$tM^+yaLySDCIT 3ٻAG8SZ7kʨqm$\[ɄemKR^<5Jp /9Ws`l-,R*yN ?gK-p|彎#(a~Wzx'ɉ@?$,Fhιψ:t\;̲qJC4J⅛L2)<ϲVOQ|[) AB傹MD6>4G'l* W*/o@PT@>IQ-IF)Mb_i g)%E҆CU0 u.)* T^lR3HIέjw&l#X~ \ڒpLK.izKK>M +A4q~M|ErIld-:R%M٪A^dp;#|CңEWx2Ń(ڦr%?ҟH,T.}m&KO*FQu,Kd\^>ONPm=O0ޡOV`SmHi=ouBMXr1Wy{\SuA5S}FkX Ұ܃,KJ89T5a7mTIOY9 FфvZ iA莨KQђ(dšWQF37ުI:WNCg~A hȋyj[k'zRmmLK(ɹc9waz?TTrPArAr 9$'%-I$ {Uu~Nn7=~|tzU7[7,m<97$I ב_fW.n+C%OABq 70ƔvHw klZ]% ujLDpUȡ\icj�rګv?LB-p@q ufV@Y٦#YloJ·mƖ ˵(P?%%ܽY(TPX >~VC~4Y$=630둜'\˲_H`cMG6Y Z]r6sl;DMϖm0H:G}9~VԚªS['SKzO ,9$g .979cфOIy8.6or"_pIfkE!ZK,>\zw랕NhVnyr&=>ЩM--;M_ n&Ve#ICt٩Ӏ <V^סL.d랳_\T WIg Mf[D7PV&pY?kZ6p5r a IN%9 qQk\5Q$]B5DyPPf:]5Z;Z4,8.G{n; bZ@=g[ܢ)|qgtYlۻ1*6S-,bT›ŎCyzh9Cs??fJ? .+ "0X,Qc+6XG9<+SBør!&Bߦ鄑x+_7j6g.H@*LO4H<= (o`&x<*ᯄbDG"vtX4`9,?E$8ofb @yeՉ|׃?Uui2eȚcCgHL$ 2p¹EKK1s Hu@8 XRS8t0O}jxcp#ջ k_xn!^0yz5|.tU88g`MxmoX >%euw|$: 1!.#Ƕ+]-+ǐ83< mVn: 1w?f d\x=9VxUkOzw=Lv*8A8UF/hmK ryغMm_50&gc } Q>^ؚ"{_EIP6;6;-ݲ .ީ":zƗ& ZIZ[}lKb՚hm!Msb.'ߺY6i2֦ףh0# @ '=YZ Ex̟(E@;C.:h G\؁W_7 8;;2 3շzI.n$ˀGQe 7%q!?ɿQ&љGX3#(hy<Ց&_|S]{Ӏfo,yx jd(,QT\|N.8Eoy5Ht7d`3kB'4 -U ٸ.05!}ZB:w逈MPMv:q0=Z: Bж*&LvJDӮvydI(p*V GuM\.0Bd>Gd7hqs]GqHAoDbA^φ#p> aZ?5` 67w lV=ωpp3ȲHFxfvWoꐚ g/ دגӼ mn!I y,F] O'֜ڱeE0Q7"62j.M 1pTw X֡T/.€C:"F;Q7pnG?t5 []ծ- d˖0aReսă#wkE\kIүV.Oң r7XxUrFɮ-.eny(o a q>4鈂_o$ z#ͭ}1lEb>@Zkoa8MkVTH|gE3*־&Ⴕ2;/+7S)zjqL_*eT}xϠ=;z ]n$Cm}M5YnM!d1gqJs(h6"F11օβՇ5TܴPؾ<͕}HC8^`cRNnoDt$ha~2`.+'ɷC˲=t::3ã8y,}84L(RM8O盦H~_J INfbL~ɿ 9_gU,HԹaHp3nrn-0 MH q"=5/a\9B Y'g؋G[=碘s.OrɪgH%|Yu5>$0X":4@5n|ap=jtNA) ]I~yz0:Opy 9)%=,<ѡ ]HA|z7+(0,C^UĪu/.ykli~N

    6pϫW7gD< xHMTi% å8a#m4eqire7C(.P%Br< NaeH<\~8ns:#Q MvS$2 :W/%UBH]Z{ZwO3·N. bR!&fvN~? :q UKtYvͪ[K8ʁEaRWU4Y[$xn۰Hй9>}uiZJFPVQ2[}K%-@Ԧ#yiJNHp(`pa<"j]̣AguyZ<6B(l L3'be 0̼iom ίY+XgHx@ˇ":48%F=Wn)n }ۮ-1]_n^q8MKk#9+L8[4ݩC,ix*?h{F [ђ]-]qMi诫ϥ>ϯU9kt} l*hWGϞr1OUl "e>+VZT$yBf܀ƴ6lV=^{`b$(q9#nkhL&/މ0G'`8qUx(a:3m1 SͧKv@DHRNzmeIǍ'|D?f͚³&<^y~p?vQIW?WhO<^@I^^M;9YTu!d@5 2a@ԀC80Npجz W^'kz'R}3+,8$)i˲[|^ի|^EиMNj=˲8yV,K77+4;F@j:A8¸rYk^ N 9&*ZP:? 5Е6ZxC.;s qo<aM.KLp4L1+뀈ц!؂N tG/s8ވ5ˣΥDƟC#׮=;HѴ+ ІK{[=f =ކ2Z;DɱM1Ot#u8) Y$E=lʿ IDAT?d8O/P?]TX%H~ozh6" tu]@4f.#07[`Ǣip)ˈ3 QݒgY@.O%_SD-T&TQƒs<ad7XzK4 g ?6A`qk(1Xy#mVG(F1;إaғ$wANR<nHd-7&GmV`8AwJ粻ь"+GvKQDX $gǪ}:__f %0ټ]b(l6f՝辣r(l bsrc$j{m6tMj%aШZ\PD)(ё '.IcM׸,`P+UV k@Ϳxl$ŀۀGu_ %?xO;J܈$$R^(ٹɏom42ʳς?SH:4)-jZY7+$ڐQ6$vGv40\֐eg|sQ[b}#=KͧvͥW] vFFM^Z_44Ir&[4iy3ϋx0N Zu~E $~cdZq0MdMq;E4?Y^ xP_^bA)hqlB/k zmj/HrdvIX{<)cmJer?rAIƕP66AIv36)2~Vү}^VE3#(,([':^;Ms%jmf-g&Y>Mp7\i}&lkV9Tlnآ;A~(zg2rB5fRuD1|2Y o阄Q@ḥYX.~=0[\|&lI`~OFox|G2K4[ĵ(D[f>%\&r}lGWX$C(o@W.<_P@|N JN)tm k'? y|` }ev50q{\r 4xP'2]݌Mϑnޟ#wYu"[Vҋh*[߼C- ++FIk$wF& ӹKz ޭlj@W$ mkVV['?qYWKt|G2ӫ/AP?O\kݠ8KMp1O#Զ1X%o6d<ݰ&iPn(ekuY&eWnfZHJ~%_ bU/k섎z^Nק^C@Ȳ.CLoz@v?LV~+I,֏aRu$׆I0I(\Ӏp͢\*&Ag.6Q0`ɹ]uuMe7RMP: bnm0|F5B˲ )oiRc5$]/h'U>i#Oh}K{^$Z! u{U@&jK( pK wh$\_O9\4(Ʃz}tA%Hl۾$Z\GmQE֦y<e N %j#.\fuzfiO߈L0)I~,fէcߢ8z]ꄎ\|>y!z O [Z^BYl@kY*rߋ"Ψ>WNPSHޟҭ0i7IУ7JT)pεptyI>hZϣW3iPs #: y ?9Տ ʑ]WcS $oI.Nx` 6IrK$<\ >{7&-lׂ,z[Wߓp˪w$HQRntא`~ 04QmM+2ۼLb4zI-VEb ~0š-hmHO;#K軥 >5[Y97 =׍>m٬U vYv~mBI> x)%0mtG%jMP1֗wm/}R<ϟ8tG vt.7MsYM+YbuyZ]1hQOr).hOz޼eq+w^h}AMd'9c$-/k6#9w=omyn?BXt !9Oݮ}  rrih<ϟs6`QxK4c{ɥ@Z?6Wp$-9rf)fW_(% y^;)k >v- L'4ǍDLAϻs!Z|{ AOkכr0k2]%rV!As(5TbcA#NƔ4SBE {gͲ{֣C$=kEhI+aS?1pmz G xh\ x<.+ŗ[T0 qs["}(NgIjWΎ%nq-3)+X?dq氐y၂ }/ fږ,ƕG#TJ5ķČY >(TOoLÅ ae9kw{ؗ=L6H훅Ž<oEߑl^ڴNt`[5+ɏgtCMG@\h?9EQTي# xr74$tSGQԎaNr1U@+R ˲'Ugx-OfexqruaCϹk'fՓ,]9O5 >bCv4+Kci'O4=7hfA=~ma6O W_VZǍF$,q_}ANA: ~Co*He/s葦-(+#Pgˣ'*4zfCY­\GD0! zCzZV>&gK!^a`˳ڹ/;O<1[_ &ZkuI'nS3pʺgYLC>O/Y/iu< ]?yZ1OY\nmz62PG֡$Z@ y0|ϼtKO>8GP*ő߈/T&x%MTfGE$Q{5#6 N9 øDHoM? _܆$#ڬ*CCu (Vԏ11 ) eQ0\ǔ?)lOD$ϯ@]c3k.wcFȘcH~y\O'N |aϔj0ɚMGZ۫6T俰$; b `G??y جIof V9h|݀g5b^ QSE֎PX!mW &?D-cInbu+vb CnGq0<1/hvQN0~E/B=T~t k*69_ q=ørȑʶPqWv,_R⦿ {9ВbI4JQ^EḎbvmE|UkDQRk< go.t"ƻizQ˂iڗEqw_,aRwgurcT٥a=a[b#KmVa (I u ԳHz…y#cH3yV]cc$k37KG_.4(NkzvwȹMϐ4̷n0H`ǏlZ]oh54kiufH5Q&B6 'Y&I ):4 D_h`d˶\w`8x9&@q`+|}yV7`(9,|=Y5Qz<3|32A]8,08y !dB$\Ck8 / %a.3{PWIOqHxO L*8YB}|]L5#Bk-GG}*XןJ!I[PAk>W3P@fi/>AjP)͋耈(ڮZV4?DWNvͲ+?\M8O_t/Z;Wȥi1 xzԠu. nlaLKEێj$P^C#E!G AҸ? ͦIzAa.=7 `\}I.n@TSs zO3v)ý&aTV`h$ku@q&8o]iԲDr_/\isY!\ o۾$$oZaIoNS @ԁP&@:bsKk29*_ $~ )/0a6ȡ xPQYx#酭MLjoi8z}~E$g "L L͆t=Qe+C.'һ˩4][Vl!|e MϹ16hB~=hR8> 칲7' }d)2OtX|^<)-_nD$7+GkֳHL'vNd$ 4ef:>sb'W`uqJ,^G޻vC&EAADQDc[J٘M〟#.[q0ܪw^9NYfY bW@uh_:\8Iin\/7EɖEjmjK҉85->=pX -lT{]][b'(978EHxC'Ap/l m$ \c'I(w[F⛻,ArVϠyQHjz*3%hr/P*W%9W~ܭC zO$9n;~ `]~7w6p{OIj+W›h>1I($p'|ՀsJJ:Y68`V.m羄0끜~\gٸoꥧ[b gD.eٝS 6 xV!i\7F^[Kҿmt 9AC||-1wJ &I>"YFE~I'NHn)] Hid$ɼXK?4 *lբ׎'rOAzYỲ;u@00,GM GyZmIiLt(OlM7D H%Zd٫mWǖ2^gt89ʲ%xh'.-i^~\vjV%Տ Dq0#v/C&ցZ@QNL݃; ¦+ f鎒>5ྈzT́=H~@K>Ϫ9|"q/0aNfCeڅ~a~֧-;|$%|13zQxpO(=.Ci/a[׼A1-k,7 JiGewtvx!gW-  7&Yy$熴mEq\2R,ţ^(J`0 xdSy?ِFwiz<4l&}IAze#S xH$fu M HV퀈QIU/״@1}}sOħxw7D<>-.ovx u7nܜ!Mx{(j#@~V >A(ӣ~FPӥ3ڌAz8^}D&xeCm.ܪ,`mv)Y<2Z߸,p`veQX$󎴅Iv> <= '5pi<~o|&vKUB|pIo{N~}K({eսa?6M7-⿱LaO2 -j&!#F  S~RRۏ#>OQ Y9!XSCJ IDAT6Q 04]&bHim<%Ǜ"XGC h;IUWлI[^C(DpZnj:9My:U[QIr|d= OV?2e ^%&9#K,PK6VV*eY[h-A!3"֒ͪ' z&psz:^zK5.8H8pZFҜƕZ o-60xe-/°A)j>ElQdןJ/M !ae;5 Of14Jx28X7SR2 Da!,%KM(5?@k: p/`bE"m'aڢBѐ*.p2L6Gs_°r\tT (-\-ͪP$vQe{ l z^Gڴc}_6:.߁Zedh1'8oOh$9D AH<[T7, DsC |+?!99R9p8 @AP@AzT[-A1yn,(*ݶ{tצ(F?%[p6y_ H)Eɱ4=Ԓ>4vJ0\ ]Q!lgW['(ի:*n/ aw]S t{iy2շlVCKzk̆8. q/A03ì^nK_ż ^iyQK# 1dA 奕tGl=qـgEQ4r@c[BKh{58$ BH|9)ѻ^QTa89d K<-ݕ)ãjESU ,(ضBT.L<L U'-&JAi ~<2i{^eZȲW_vү PR_ &aul t[bQ/)E%I&u,{½%?˻yZ_Mp02$%E]C8bO+ГSS@n `rm="su)K-oG}wܻ B SA(D!9s}(P27m%=oq |^^'f@D-°lg:|oӃ \Zm*kIzq`lGq: h!J<e/z УRW]Exw4EgbwA7=0 I$.tμo(" WpՇZ j+6(ו[.N(H t@Dezš:VTK`}6իAa6ocpC\0h2$kحHɿҐZV3֫bL XfHzg˃ 1Oen1aWD)t^zlKQ2R\ q\1_\S^?uizH?h8+X*(.B&$ɚc|#UvAq5.N>at6mĕKۺqr'uͪ'-]pj.D-oF-C. cz'~% x( ֗)P@$7K#:Z=Qrq&R9ğj:I錋NHh-4Fv@D1}'!vd0L&gq 4ݞ48J ՟0JAA{y ;Ӧ_u0D>h^wS"Qv|O "r`y sxiFs(\!.$թru{OHhSH $$kA%HAxRlSe(ɯqrܹp1a glՊ%GQrp/$5zTRN:üژĮ?4GL[:Eђv,~&cgCQ-HzߦܵBBUar"kgjNQ:TD#*JbrD4,; :-2:2Q.@o9CaeYjv&7#9GGʀZ~P}ҧM55cmo]VMSr NA|MKɐ[Wn@1ͣv-y }ø}Hmv+iX _Yv9E2$3A\ڰ G93k6=WcO?tVg% }@{\ۑbf\|)+Gw/EI0yD{nr>ہ &UOlwx]\μl55(W d;BZ$+.}@wRU[uΩ\D%b'J`x CAE$ %D (@ET#( AL vs;3]3wju?mn"x;r#+|i~kM5ЃL]Ƈ x*l|@'׹-LwwxI$93$:&\:p ӫ-v=4g֋$b E{OoIg-0ڥMJx1zo۴q:\6IAWy_% Ww"U7w1a'(.'uԬ#k-xAYNJ(R}E9ޥ V+,:a>ϓwM? s{QzdU Ics}͗IzAiT 53p‘;g >ﷁ$\^@.M]Ϊ/zv$bV۫t,VC$ziu4;ϴrJۦ3UX_FsdcC>ȟ]ܣ,{ ًDw[hpn3 ]UКTeH3@N虦p&%A[ƃ>vrtC ϯ AR7Hh:@7ЍUzF38v{4nARCk nI8Yw1 3X? ;uA oY I|sUk@bqMӝf=NL7 i([{~&f7l</rGHGp\<~J, Q?:6;!=RAWWE!?"OfxđI8 @#4vKL ]z3yh≠?{I4]NafVItikL#>6=lA#\dgC*Ufj<&+=&1҉N 7@EL3_/Otic4ފ.gͲ,y]Wo:s _ѐ s\E |VKèң 9|M-4$׌z|RWY/õj96!-!5ec*|*ZOBHn怓x-_4Mbsx:+\Veٺ]3tW*+N{ G$%5/ό$/X(pn&456?ǯC|7^ :XwM-4;]s/.*J!мNj]Hڦٗ[A2Ϋ`)žTХ__;i@Cѭk oXG(.=߫NkOm*%uDtafQIDwolH"DYEK0Uy!wwi+^jlwUVZ.mdmH-#U?{5~$)s!dcI/ p 䞨#g[7ךf;f \*貪(o< KLE`=CsM/ ˞u]KovY$w s$=mrU&٧&›hOJAT(%CfxUᴪhΚ-'IQy_s5ZF`ufp<"zo,=$#u_Bg RkwO ;fD; ړ Hc.].IBp\U3vh+32wν4}`Jӗn##v] 4U_<`mJcpȬ׽"o C[زL756tvmK>Bs63μ8C~xGI\2k|wo54%sBOEXhmxXԍPn7|d2K4U B]_1QBImr  ~0fl2~VxPEÜx7cU a]YbtvQ>o~}Qi3Cn2>.m|n -.% U~ ^e@z< <{zVK2oF]A^eJKCYλY 6M74|Q}7Q7T)gBίρr+ tYcn/(jX^e,.j/<6I:e!mYU|cۦV~+\ڸ}\R}6%%whU,ݱ W5Iָצُ]h I<LJ<ĴuSZcHOHEm"@7[E E`=lZ}%]u~j G:,Il8ޝu7nDc߭*cAHI8+̛,jO7+pN53 $;@oHmiq,s2v&0}S5UUuE(E^?|IPVLwobs$Zm2IU݀wفؓ}7Y)2W{rYje>u-hm`AaW__:oKӳI^Qחv?( ߬=] =V)ᜪh񍠈"I'x;;ӥ A2`BuWz] ~뽃w˚IQUSg%IhAd]TkF[JPf4Ʈ~M9*}h`Œ+_$"^E 2$2M lV60c^A+˲yN&\/ǎS6x'.H?yy{‘2ܰN˘m2|$ε,Aû/BW[B S8,_௃U'$5vhOZLܡR=(E1[#֭bںC>k%AS=ʲyk$kRz3s*Ed}!_w">Q5$^6UGrv{Af?F `8*GlCCA}c U2OV41nOQuSG~*FFXͣ6}|?!To.4[ֵHZA>uX?E9 %*bMDXT[pD̶A'4ܾYY/7rѦ3 UŒF`yS]yqZ6ߍgt>9 ψA}o p@Mh>}O@N%$A 3ئ L6s| @#jC?ڰǖU --H"H"f&inƜ(aWxW(ˡM4\,UEQQf?latcy!j jC!U9@moȓM 7 ;J]ĕ>o-h7 Warg/xqU(y4h6XOA@.t 5 "k|*T'i4{F;X{9#-x"PUq\$ ! m= IDATr޴<{ @{'J|d(SWE-[D";n3pe~МLiv!_R{B&Zμ(?x_Q8,ܢ‹Ir+k A,<8ͲVQuK -VX:h`S$FD0%!gxJa$\V#>H=UQlN&6 }kv\ ʇ7 Y+,[ۉAŸU/a:I(˾p{hw k/[t v ߢ?U9%Z!dCG5<3kid6кh}h[+NyhSD$YsS%=> 66bqu$ 6maZǃ_Y$Ig%o~T{-X,Nj[Fd*%%'5J* MʓI w|&R(˙J96q Ay|L152;ߐּp7Qh2HS$mLqA|\Qo:5WW.WKB51X.` mک?xP(:tcexH$Ƣ6aKGHY}]j/#1E4Oiz/Kf@, p0<z* +$Ɩ77G3X7jA_,Q%U7&S@6*mByD.#ax"@9:H?̐s}d#(hLv1|n2ϏZ"IKoEnLTK:lN.wgΖ#U>.6 \EJyV[U F1k'$c kՌF_,dt<`Pn&P$bd1 =,l4q{ FA_ eyk 1#(.!;Zl`m_y4]ߥU$>6_*xTYD- LF(@m.mDM4MM%Ju+$m `QQaң;^7fG1$ϣе R7|xEHI<Ğdd:[sjDT,( |?ȍhqKg5{t#!3UU|("}uVZ~!tHs1[6ꖱ1u``?JbHqm oeQ{vC ID$b1ݦJ"c ~><ϑG9 ]1R1D" ! d:9H wiv1Ժ96.ѵR&)P_, Nh>[vyD'I1 '70B#~K8d\k֋q\Ư?_Y#|*.+R$h|J5gi-/.z'f2^E8yaHC .\Ƌ$/ ,A j_?ʶb,3$ b"]Y7uA $Vw>-Ev-n|!JI{&,-:1#OB JL eWģ zBzQ%KӲhXCCLgi`Ls(i!ylG"eQͲ!<ƥs:3bYO%.E;JoR 2\3)ZI7#^LA}Ez//O%zkCϿ5LRm{sa@u]Bk-t][k"@5aK)ڦU}tl^DD1h<Ҝr./"h-~PkNX9?On}4H"F@wwo/VOc=p 9\?j\D/y%=C 0l9o" p6f4E F~_҆5iE'v|$ɸlBչoVU"Q5&y$b$n h/tK~Z0)q9 HGJƮ4] {{s5.b:'+hk]9JWEsS_C.c'L}~aeY ^KӃV8ٗ&=d\y c#Ըt^>1$b%.FwOw\K`}1_3rdQ_#֪_'%3O`E)4ͦ ß`&$i$4E nq"{H$IνM_,d^cѨ"4ȭŽ<' AGTUQYkcú'1S߇/ ޞg,G) S t9ʛ/W~#:`کJ/v qv٬ B{JD&}_H.>&xsH/3uj!$PB˘!|3dC)}Q\ (֌ǂ\˟4A|p&mBbàpGwѾĪ};0P;Eg  I1/FQ t}Q95BFcڎpI$ PQ+#0yKP -5yk3˱`bl<Z<dߦ)(OwOeF p.WXi ?aGe]@28w'*o=!#*ǂإfqn4ˈYD˼'ܖΘ-HAOx"&J;@>O\B9fzkj4" ,GE 0$ZAD RTӜ$oy~j쵔S$f*\9GA7' D&XX \ۋXc(v {<2 *7r;}?2b(+o1l (}lXDR,yƃڹ9:"y"|9_rMӝ|Qyw!2ر] "LBy$XQ/)[s< KLRr10n\nk92,/*IKj2?@1Wq.ۗ_, %pXfX++T.Ir~ AG2?"eDDJVͥ| O | #zA}7۵B-cj<.9ۺͲެ e%כX\=k:MGcI1Ol[7 @e I%cL l}Az4Ɉ>taӅʲ#w;f4EL*> ^Z5B6@6@KO%,kSv['k:myfq>ͬ=jt9!MD?t$FIYOn YUQ;/E7cԈ9 i:! '|Qsڈ3pK9IlnWN Kmݤ >SB\L=]Cm`-Ww4HXa*j%?O|}h(>k}\#LIQ/tcIFD$5UAh.V؂1TwgKYUb"x?{hM {r Pݍ7(!x,ͱ$N##]Cw-Q-ۭC!VF `/tSM^ ܖz*m $i~%.ͮ%vk<όFZ/ԙ=BU#"DL&KF83IbAxIs):=]0'*su3m}ާmd}7g|苫n!6(bRQވS=<3c?=zP0i>ܢ-Jit g`w&v3) (neE!lf-j\D GS'&+aKj%&l}~aw€r` XCnKo o74 z&*l_jݥ[{N[|5&Z!J,_]1P$7I][,֓3 ȟn}5j<9Pc'h}:oז=֑I ֍or<{Ĝ&!2ɭ ¬7.zxWL#] m @XcY+kL$fU1($$-n64)B$x65 ۹Kax:G!,1l |.p|P" ׿Ӎ?0"O_ 8#8Jbu4W|ZȒP>f$"Ncc&$6qw)TG a ) O!aO%Y93I1'CY7Om p:À>.aDD&0˂ N"i5i&"3oGӈ'ZUືsPS;MFl/&YMe~B֓VM)MaEHc V礲,o) W4'$Ic`uSRUPs_23C1_[@Z@.&$i/qB3ՏћjɏCPyI..B~/58H^%< _Sd-F"Z{~{GơV TJ>$y*.m|]G26C'y0&Q9F}U?YZ/(~M0"O?TyDl1%| 5/ |i r #tys-м @Z/EAO,18bz _KHZoͺBxwCl Vy\+$GcC"6T+GnH]BF-ա,Y@K;b0. Il_85-p27֍ZtXYTT8$p6]v̿C%7A$/FW vc^;ګ$V\}D3CJ.k\bȷ)趪_-ogTv/ E~~4> D(oqn(U }tbsܠ%I֔YI AXnt_$$"TX~@R^rI#v2BM),Y!diK[feX([\|ݥ×EXfٱIָf VU~򬳶,{K^җ2}&!$Pf7/&.P󿐠=9b;JKi]~.N P+r)8cyG0]֥TP6IGeYtp,8oZ5'`ؚƭ௞]&QMkn[`t'')oFӇKbQ8֗Vq?p|?"" Z: bH`lZd4vͳ0̰PCё'eT!V[CG Q0-hY<79 Sm@,ٝۊ~SSQ8,fY+'i %B8Uil8&HKj0^DD?X zU@łx;4`}Bٌ=b;;nu*ϧ=&Lj ea,{5@>d:T_4Yu÷c'ѷ %4nAc.J"]/g=Vwiu=#T$&%e{D җ}a=o5&I댽p9wfB-Av 6/R㇏. 7{ | R$IuW@Pe2TUKY礥eL?*|_Q#If@UD1JVe=Nj w\8Ӵڲ.̣/^3IwqKM@H 2?`6 Dd{%iFWy'[DD.u;Xd HGZ!bUHdk693ʢ?XXL:I IDATZ<ʲXic_rA8wGMhm)M|7'FD$].xW@~U,ܤf<F$oL\ @t[ǹ c_[DSi GMsbW>EAe\#C=3MS׫"eYׂAuKsNI{HMU5@oN'm"eȝo<$=J/颵z`uHn&h1: )f DߋA4idC]g(󳢩EXlߡfl?՚Q{J#Ggz]sζs`u2 gBz?M uD,C`vL=A>QVU?O8ۋy㔱S~=C :#dp6J}+6iYDXaIT@I3Atwp>lh.[f}}tN"H.M{w]7&+@)eOuOb*&t#Fw%1(~?PK[XH^MU??0b/F}M+H{ {  `~b1dD}N녯3JZjx5Z32"Wqo׸|%dHp;巃75:ZL67IرP}?MS8TTh ƴ̰5"i4Y3b G;u Eh͙p!> Ŕ)E XQȲ[uxYbBM) j:q1i 0I4`: "{MLtjP_0mDX"FDE*Mtw @.2DK ™fͣ^K؊yذ6LADvy-$Q 9&ɔ Pa!p(P孎L]A.-$8vдjj$e IZ1?>;ok3%.Ig1$ٚC3RL0I& ( DDt: .#Ϧ>!TD)F{),M" ei9*=]ժp;>M`$!aFH!c`Ij,3ȽZ[\kWߪ0oU6mSH۵C֍bqb(eAJ8=/%?RX0V;Н@11=TEmpl1mX8%ZΌ^5$3GQVEISmGu%1QhwO>/O""Z`ˏHnz*G)F,[2^ zHt,M7K %TUa<ڑRB*&_ڳV21_BgK ӑz6|@n&XK<:яLQ@ǃ\($`ԋ/ fHct=k_c\ v( ̹1@p #A_{wwQFp5DD .M&ZK?Q@$".cF|(S'$j͂, [}޾(Jzz2*trrDDC:[zPq\ļGTFa |QLqr˭D欽wUh3IF $co tۇE:r(zewactYuӈ8+8k%kjWE(ňαgZ p@îAx=3>vs96),@:'!PiG0M>D2~؉ݭHźH""&I\{]cdļwy 1試Tm_CDDu k,Y'!i!u˥3Z{ |%@I>w~a@O.m0 HnFM.׊4| z+9N>vcļFnLA3CaʙP`ڹNyBEf,%$1`h(Ve'Id?D_xB7g ?JﰸGvdiC<:4B#(6>mQ4J=U-QA88:Vإ[5bHVla -~Rk2`Y &) 'MO[Ű $ 1$ř<(_š,/LlThvMB1Z})EBK! Kgq^$ "pX:{ @}6 @k1B)aĿ]`dؚ"j"zv .˲y.sjt+kYr x@= +&tl}0?! :!f,j"1Ц]IDڸj],,KfFDc2 gggʸv:`fY}vCMXe!q71_~ ҫٱș%HR3i:[#GY-Buײ(@W814eouMj&aLΠlW!bZsD 6tg \ncFqdml"E { 68PFIF{$IAf\유:1- F<(ι@ "'R=Yށfu`L\UGذ4ɱ2֠qZ5Ch= 2bAAfQㅔ*? Y4/B mȎS)}AYUFF5QO=]H""l 3X{p[Z|j_ tCZDD[<AAxџ $x(I,95ARM=U֚U9ܚ~sjƘk1;4 aXq.m6ApGn#[ )/T.n7?b#/k w}N݂Hd,r덇rDVnJK$*qa`eЪ.P1FD}$2c:zi7"X)|AT4FN(R_Žf<&\HVƍ|dBoj[yc(G[bdmqAiel6R҄ڎO5C Dy_eP( ֽ"Aa:cCj 4\鿶-Oɡ̫:t2'"ӐyDIRu^&ڹ#W,u3PxZF%xA`cֶfMR)Who#!7wWg;*10ƍ`lJl=;%&0>hb4451(DXef͓j56]#+FuD$@cƍdp@Րp#E"D]w!/ر3c~N.޵oHy%3JKm?u]"&/6{x"}2qtD2rjmj 6SA`ѡN)j;;/vPqdc=F~[Pft Ī)]kZ눹}"HU^eُI^c-G婱,l )ǦTL[sX~ =]uRyAcu I;C;(m@ZP B{%vH(%B\*A *}i@Tr"ˏw1L0)js.U%4}< ﳀ$u 1b PF[EH֎14Wc A C-Ց"" J y%wncn&ԯ&y5Y?2ذ ;r͙hiڸLȇ,yJPЦ[?H.D^mxwmSQH(k"XYNtz(]Au^[֍B#X4L]1n*By I恊Gp+'$6:궕PVh}e#gH\mM6AEy;jR|@ ~S sPSRUWERnX-)nWnV|!?M{1{a*?vڰBH#.D_Z7,vֹ sA1Wk6@V`u{Ԏ2(!K6Ä>gpFRͦoDע/EV/^9"(Ӌ {;Unh ^Ptϫ4GlMc]I'N M>`9D_V7ڪ%/'W%s(r$(\ןoX٨1-$4LēLBaeilmWͪ%@(*Mޓbqɡyk5,eY@IsfuoŮʎ'D\%:^iPe ^ɦn%c/ TEeLK/"!P[4 MGDVZߐ\N)~|[b84ue ^Òa pːH$DPi0O靠u >EPL*N'T8"QNFBKZ빱ZMe!@ۿ&L㵌E?I3Kj!TQc}Yԃaw~$ҨF dPi_G#|+|x=cZyf*Me炼e7f|/v8,f軹ɝ%BuRjIPͧS9az:xv:ee$azLq 0Tw "!sӏe?)SƸ$W,2M.Ys; *t3͵"jo'[vPʇ+P?KoScn+.~Y$Bn6RHGCl6Z1(HNwZw*n8b:[|.TJh-x[P H(ZĎn#s "?HϧV>BOmdsIJb7uژo?%NS$9Fn!ȓ79 _A=R[y.)8XiGfZW k(#-FR'=5IU"nSJJߞvmo,K_ApR/W JUꉔ=x=b5I$De"+.ޗ lfhtJCPfm$~5g8G>nYG@^?E(<UVY[2v/03j6}Bbg%֡6 KtZ1\ @&Ƹ07u=lcRIT8:@M+GQXeB|4. w-˦@/JTD~^;F%hjQiǽHdqI AqgMV'>`15FG]͐4؉bԺxon'pofoM`r(~"*C*7߄ΘtR/! IDAT$jLT=pNcJcOTznj='B:I2ˌot1P8M' qʑ]+} wę$o>[i{H?~3C(kˆi5j&TbSΠLjJWǚOiW@ ToKǁD6{#"%=؉d߄IJ_kzS>V$͂yt x6 gywFkb\(HyXyl|cȰ A+LziSGCA,-Pl&1SYJa\%mWRQM S*nJk;2﫵`E`e աrJލ|t;i$؃xOtKMԼqPh7'ʇb"B)bbeY~hXƃp@ T߹ނ6 %3 wq5.ڬ!n> 050162 ae @_YL=P[z2JaPu?oM.> !Ml$mq썠Zӹdj,4ƭMK]K>C;Rj <\l xo!H"`D2;(ookyfY>(^7,Nd@ᛰrcQ26P3 Z'`TA0q5 " #e:n2HvG \ȥ_;/jMvyDPT s'I:WޮDtQq12^a U vYOE4yOx/ vic͊6k: qLeM26J[sl~8l&u$1yW@$2%0ǹ]A4s=}V٨,|R@OT쾀YAOQ%ܵo!b P눾\Dض1H84M" DϤv "f(^3,mTTEjAu#AK!5'ũ,󔛎J?bg Pbе6tCZ6ɿOuK [>,=^;Q"Aܘ,ۻ ,դ)Fe$qomĔrЗaC1By S=;bzkEA5NP<m=6'ut^ҶU0N]kcmwY}ԬIP5HblVf,vZ;j$"&K  dfM+1ǨUo*Rioݜt$T! hX4SÛ͇5Fשm<|{l36Fql4_G-#)rH2 h1F@fk ] 3T=sy`u~aT$YN,*]IQ&$656ж L#鬕"@$] ufVuXI@OJ¬L8*6ɴmd~^Q[#~u@xuEq0 pYs5@9*]{Y5{Al(UB+ HC.3Eipλᶭ2x`BG ӊLeA[0o:h^xGYFhv7hoUyۋzɪc:keiїiMdڈ1Nj!5\lFݫNUS{:/G]73槩?<&u EG$H٨*:V*;l) `S D>;VMḱz#tD6d!n5ï()6`vAyt+nm)&lلqPӫC鹵H+ml^?ٍ_#n{0V쳾Jje쨧tq"SD v*y*0Aդ@@=ƍ?_95Fi3&Խ]6"}=ߜO~ "Vo#U kBԉþ3y mǞyW}}gUVWfrH J7":"/qoMo6blg @f  aiBւ^ ]F {b1Mһr@uS0!qg-v$)igԈQdG$(}`m^Rןs/-- XkHP-ă?qO MqDK"ZEDODm;e{r(8 _gXk/?镺EqIʈc.3s,Sɾ KO{(/;[z[o.c{ b?βJdR[C3&4Ru,_Yڳ}?D !ϧy:\Uc&|_WȿDz| ue/+ DX4E^SG7u[KFZfT2pz_iEވKcP]vp?(5ʔyȩg Er&g4(ΩQ&@{) P=,K R*ky%_y eOPf֓A.` u,u&0f|TϜ]drO|ə||Q~4gh,-IJ1af~t.1e~֪2Hkom~s?693};WO<eE$eOE33sp}EJ3g(S76\ O{~<"_|_}8~kfNjp1ضإAF]Zܔc0ӛBAD.0ey(0PJ!\O?K"sU \k! M;<3?/._f٣93 Hڹڤo`S" >0qjJ9nI4}Q<6ʱte#S$"08Rog~g;~7pYhx-k ϪpьI8hE3^C&nFjH[G?rׂ_ b$ _6\Y`J,;/M>D 5֦Gu Ss6b:N_Nm㳬%y_Xx:OST=ǴHUtyD&ym:w(X/rsp X\2ro9 irξ(OErFJ{Xא^5*WJS9CUZ?%s|oe9%- oWMP_P C~ ձ+Yk_Oy2ԏ2#?bepTWE. ?'"zcUqI9DWpE7J&" ?6%b 6@\; *rh[0,M;W.֨"yYQXʷb{HgٝL}P &|ɲ:1W"ͬM`8dهHi1.IWM}\k}NgkQ+BYs,{羪i ( ^bP=]c_$yBRЦ_V넓R+2ˌEB~a_Gk}hx{ꜽ_9!s &ˠeh??clƹS~ Mʘν /vhM^XPvTe?b{OY@jRw5y $bWs@Ovֹ`"M8I>CCEL8D"R"/ҾkcMXR#Ut;#FK>OzynE.kӘgcnɭd*un'H_h{¢DDTjE;nIlQY&=nx?7dJmK=!"5pUj}-j ?:ڍ`t*(V >UZ mv(kX3u`epA,HE^: jIyJQ$w^QH` tH `AsGmC+`xG HSs>0 j6L[5vJҒr~"K /k|t5ry2ɫ9l?9^K ]gX:Y@}ȷH^cx8J@mt d[4zps'|.UgjmP܅F\ӗ*A~y_W{& Գ@^vA<>s>E;hYZOo3{!AI ~o<Lю!ƿ?"z}OOz@_sW7#g{߽YwNUMR?R/[$ <\%OG:w96b<Tyh*ϲK*;bUU ~nn}=zE?k>l3c-{"N/6o!'ߵ pwE`=PYf[R' s}Y~.5,s"-ċȹ$Qk|j}69g<: }M` 6!N(487#}QE^V jl".z>WTõUP"m<ÐZMJqη" q>ϯS4IzPQEh._[/=Ća݆\ek,g|^S}Q<@wh(-"h@lkzaOvD_ˢNvdwH|R]WB}>{2_CK=lw*(j ƍ ƌiEq')so4%X& GwZ^ X)}u@ .f{^+>P7 IDATx;_g捕Lh/?,2"4)sw;,ˢxhYO [hQ[r}CDe@TCQ<ŕ%E/ NIDh._ )D 6`ւ?Ay-@xPM 7Y |˭uaT&^Z¯z|G}D )"O];B t]qץsQx4=X!}ClNk;Y_mP,rxOƒD(!sKSig Y(!#o#¡쩩LٛFtWBIQ>/PJ [<=~;!T!ŃcH_1 y3顾(ԺhP"/l; Hˍq!n1ʯ?'%pw7p 4*Kx"w@Q'B;|yOEqϢ(>s <<-4BxZ, "ᯝv Տz}=,p:ZBYvڱ,_*1s D)ViG|WBtޣ&lD|'݌9bfv"PT)߯:_KT߾?5!09'cn;Rv\ts& M <ĘM_E8J=u."_"}yNNSPKTlPs; S_[,.< gmʲ|)Dί-:ERƒRQv15||w!aub!<)D RD[zDm8*h.Mxδ {OVZCA iQ(Uhhy?BQ̴1JLʫ?:gk™G ̆5 Dk Y߀=gv-hhqo+Klyg> QeYQ6z8,յu&є3|q 7a pN`hsR<˙dȩ;̟Wh*OL6b} =BRD.ݨ %nwW^Gڀ*Wy<$qUO@SzS{Mm:i'Ab$RɡtE)s)Mrop0I{(njJVw&e0L= ?8wMͽ^; UMڹ4Zg͵R  $buТܰ8F"RCkmˍyJhw5>ØK;6\ /A N'#5'éT@\,ʴGӢ#|4J$쯱9inپ.-m6tuf0a:yJuE,Մܹ"SGq;<+ωgrڹni Q=+hxlO2/L(SZ6B6Dn.gP3 wE9 [=asD 6`-+XSt,:f`KcH^m1g"-,#J(ND~'C_j)Q X Qֳȷ#pO70\:/jپob'%q/L$ Tkx.:!f]uZ7G4_8o>Xi^-|l{"EXXK_K`(>p%,k~OH%@"l0 g ٹpphqsQ[E^iKZ;ʑZ%/+EY VW,yO$/U;Yb2Ԝ^krP y*)rˬA"rJg+uN[_fti/#XҚ@(0f~!OJ `\բ0:PvwP.VI3Ȭ%[O!^H?J[.}q'yovj+-E#_Ʊ4+$K$b:umvZE 眣ϖ*gCIp8Yvzݠ_ yJi`ff: J[g)~>lzH+ E[(;OuKѢ@N#Ɔ?1:Ksu+C+:}DwT$MǛt1~QP aB1'N"Lf}ό $9yˠ9W1`m(z(β[woB8#E B?(SA:OizytX1~) d[Pi}uXٸJA(y v< :==V*w:7AMղ. P9BQYdS [8}j%^WKDŘODU}_-#|jf>8Ӿq`c5zn̹H` QSv2DzG=."UA5{"zW5GN˙/3;f"ı6,~9R]Z|UZ[߳ܒ5|"F> Hx>չ( l;;ȹ _ C6-~gH;4{ P9H ς@_1^r3iN19Cx|e,d˴s?W/od ` 6&I14I /udٔc@U'?&Z8SD(Zcl/%Vbh7D,?6sUo8#{a *g6CYo"N Qo.H/ZeU)ٿ2orb r( ]cbSVwT r)Qras@MP:"!"g76Cnnj)@644+2 $b;| DJXr]搛,.MqiF*KDB~͸QcjM9ɠ]ak'!/$zfʪژ}Lk$ukXAՙ<Wq 'sZ=V쵳XD~ueBx6G|+pY7yɲ=X!ev^`̲*QM\A)ucZCDE %rNY߷]į sۤ+eϞp@ '/:&JN7  i:~[I yVs(A)"wtδ7nz֫dmQiW>l%q+ DAs}AjG@l?94 g7?TO4?bn,H(ݖk<;YC{ Ǹ <>*?;|M` 6X_at1tܠmi0\ye˜A]]V{en<]`ōɮ@LZa2Gn5m9 }x9Dgi+bg*{T ewnȇZߦe;h=6Ϫ!4Aׯџј\վZ RE,]"s}a`2rzT5}HDUO'XPqu|¶?Xk!˲|ɲG8efn.%/xY$@N]>3/E7^.X Ǧ"  $CQ>c&˞FyUƏh[asB?r  621Y*{EHI{)Np).G ՝U xD 6`"̘4 5u!Vw.l/oJ Y3H u sJ@jRo"rP5rmV@OiHcF ϼ+SFLEK_`XS7a w0}_;:H %&1#(>c?++k2l9'{Լ9.e:xC:R$&<}!elD>I Lht-DZ9|s)XyĕWPnEd\}^ˍHVG5=xKu_jS}f{iFI5%*;os&yĜB@*?od/&f=;%*uRqlS7bw͏9n7¨:esRe/C"J]e.kߋRis(թ]9ScYW¯9kJK;h }ӊ猝(²X"-pCeK797g(1 /ߵ[Dk%<ĸQK"W"Bm-5bW #f$5}{cK{c|ڶ~E1%\@`ڕm(mх> D yy.lBxxR Hf# czWlxwUyj-"iѯP&Sc˧(tUB_f޹m(A@U#(roY"US&B 374lX>7bүh"q1(y[ I_)~"482E|QL1tIߛXϦO^l/A䥍Yڹ1`S֌<ׂZGբ{ dӷ"0U ĹER?4PaRNZb?e,Mmd$ȲuL悳+:Y8>Ks f`E-jR5@"?bAu-JlL$TlKjHdlKÚGE.lQSYcE4NRrFK?wPMOWYE>ր[H`5H^S M D$?ң MIOT=,0\( i !IbI:ߕ%bLyU]..;n뿙'.ytCkCvi8o$a쒁f@0 U &n c%Ix٣117kxh |yiIB a\NgX,l%*Z: t~Kcc;Gmɫ$bj(΅H]4䖮09 ǎ#@+bBIUKYTgCMԥIњ^J6"u|4zN@᪇bGT,wꦽ@ L܆uqQ 3e w"B|S-~L"i )fa9N]3"}nVZy?.9i$5Drڪ7M%Ʒu.󝩛6ˣ/cwK 8e  [Qf{F\ ;$[=." .vOʕ3] d\0fYd0AH(M+5ˈ+v)cldENpZWI ndHB]w81c[g7tC1-ߦȖM$nDt7Z<#ʲu$@6aJ8UؚI[9YL_4ƚ5$L~ ZE,\L AEA@xzyoyss>ϳ}w_y}}}_;>>#5\GtvUK*V؁N=ir{Bn$H]7 c`@V֍BE~ jAމ詧j>{v!}]b zЦo,E^ەAS<"[a}h+a5˳t\G3YQG ? ੝=ؘIC(uM(gM@)vse065-QZ(H:jg JArQʲ/9dFܐ~ҁHR>Ys]^ז]Epju=V(sEF O9*)SO=mXsqU"?I@Uc0޴gvDYA XQVD'kBs8F?R"nu m6j0&}8N[<4NQ sP"Qp3H-bׄIWqe2ji˗J"Mồ p?[#lc|#-MF&H^W/D/2To/invJmd#f}9`ýSOSchĮMޖ 4zʿګ[He5D5MDN]>x]L7Vzac4:gTG ι|/sha6g&is%&ێ9qDU2eMxk@lbJ3<Y D~vґ-P,(&w0 ke`m4#)3tָZu(!y(w'=:SO=M_[ƹkI2/  )R; LH~~JǬs|FÓL]'"Oቇo[;zP9"YLx=ə[7,$E<s"$&"nb !aLA Ƹ'0nrP<"K+l+E件rVG=]gADcuo׷ +'{Ͳgh57b| iӖpe1|hPw)8w1D^Rs_EJW=pү 098wv?kO1(*_-jlF 7_09LWsq2 |qoxfU<~KtF's G |zSj{DS{Q9 !ILD A,)a;;{cWn,ma}e șʹw&@$Rǃ|H3ȓgxC ~SXT(`u[Le[W} *ȱ5Dʲy+1/ȷ$h}&x`*_P aE8NMrļ@\|1Y69WJP" E N]qY Dȋwk_,J[#3 2=ʔҍB&"$ V*}Ȟ;3Ƣ {ؘ a\e5{<"f'A|)}Ƙ;DGSJ*s,>JZ{'݊W߀R "^g6B"/.CDzb,kWQú}I$p2LDNz4G&hHFXBrp\"LMZ׆J]  X6Pdf7"k!BHvbu%IRB_uId+nEqZ9g "IOʦ9T@A#C:M9~i@LP!Z"(рQM0܇#40rjNm@RG66/gꩧ7'1wx|N(HY,uΖ$޺5}'D"G IZ(p*7r ˸V,AKHk~YWx#C1ظE{C~rÃvs>h y)Vpg2uG}pF8A~8śˣމ詧m:);W); ӭk( 8/&37xZݑzt6w`8"_H~C⿇8{lvK)@@)R|Cvp{oyFo' k^m}up (t+0\@;(.M ¨k{(NI{@vUzD"?\:Pnm9 㿮ksv^JLYt:r$+cD~5!P !|hAlݝaV%[ݳveF`_^PRRDP)Mʊ? E)wWeZC oL!xabWϝoZ:o2\+}Y+ZDf@"J{.f(kH991G K"(^I1 Ts\;r+7詧6xͲ EXNƬi^F`cz떔RD\ι-$ 0xoߥ5 S"ÉMV ֞z |DnE~7W۴ ' CO|jdj(e/&I~m/Fl.#fn#t[0Ηn0sβROD/GR[|'C "H^D1!o`&k ܉bQ\k՗"s 9wISB Tnz@JTISIFx]=:+gH499HͰFokk(L9h*E(r@o2?5mOÿS||}eOI}kO3䱓<#"qoΪd UJeQW8c̩k qPsޛ}AM3hKxRpBJ_K)cf׏4Ӛ}au+1ll͜\yY9DnXc|x{R `@r}=@AĢq$OD;=BլfFx[ SA)1ϡZ,Ɖ0YV[l=[,jxQP6V-UQ*gU@QL5MfUkDL\ )> I2o>TXGw4c 29k n¶Z5UI==Skj L΍bnb_R1pEs0տH<%olLn>:#Sʥ##1 ig8`HY Ej`p)}J{$G8#@-0YLNoY@sox)0r6~Tײ%kjHd(̒މ詧) B11eMLaQ?#Ll4"+ϰA:b,>RÑ<R{z75ҶDb g\={ZrkGˍab'YRB_",3fm;O͎ieM"-CcLs<́ZgܳcX7%X"Fyu:N7wn>NaE9@ Z7qt=NXb4_7VkPBȩ ŰYYJRnIej9zqe!k~7DNtB^Qܤ_b*kǜw Z<º 1^KiW I0Vk j*G<(1Jdܩ51Bej_aGh~D:ùWOdGE:_R]-H`4Bto7 I)HU2 ΦN/&GBfu3F\<eTΎyj!/C&n]e%xFY%%ίf^dM x48$oRRioɲeL\a=:FQBj\$ #޿H9{e̦i*|Qd3= ʲAޟh%r֌̧71ؐS" ͳ::{QNTh,aN8#3.,hHJBu:]CIEy3( (u9z’9^!E%$o8wD6Qm? N?^2!hB \=(s(71`vóeH@1zXh9xtD"cZ)`pl=ʯ!K[ QJLHm!O3Z!nG6?aܑP$Y9Kf7#<ߐwx{^*!ʲ]\h-Mv~v##44  aXNi%7& , }ODO+b4!'YTw<{A0RBx%HJG6S]F;v$1!9fH_(2,ikI[ڔm?²)#/zzI"m, ps y^~Hʳ[y*aD|J"ȧ<"ǁŇ|ߵQv ܞU1Q)-w.'(*͊)DG " 5i d:҈hv"s -<8_XGSd?cd#/ r@#-⣫6o:qGHfYv L\ct(:V_"XTLtVoV= li > a { color: #ffffff; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { color: #ffffff; background-color: #F7CE3E; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { color: #ffffff; background-color: #F7CE3E; } .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: transparent; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #F7CE3E; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #ffffff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #1a6ecc; } .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { background-color: #F7CE3E; color: #ffffff; } @media (max-width: 767px) { .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #F7CE3E; } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #F7CE3E; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: #ffffff; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #ffffff; background-color: #F7CE3E; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #ffffff; background-color: #F7CE3E; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #ffffff; background-color: transparent; } } .navbar-inverse .navbar-link { color: #ffffff; } .navbar-inverse .navbar-link:hover { color: #ffffff; } .navbar-inverse .btn-link { color: #ffffff; } .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { color: #ffffff; } .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { color: #ffffff; } #section-selections { background-color: #C5C1C0; } /* Font */ .navbar-header { font-size: 24px; } .navbar { font-family: "Georgia", Times, "Times New Roman", serif; font-weight: bold; font-size: 14px; } .div-wrapper { position: relative; height: 300px; width: 300px; } .div-wrapper img { position: absolute; left: 0; bottom: 0; } .chart-title { font-family: "Georgia", Times, "Times New Roman", serif; font-weight: bold; font-size: 16px; color: #1A2930; } h4 { font-family: "Georgia", Times, "Times New Roman", serif; font-weight: bold; font-size: 14px; color: #1A2930; } code { color: #1A2930; } benchmarkmeData/inst/shinyapps_io/dashboard.Rmd0000644000176200001440000002005213417716236021406 0ustar liggesusers--- title: "Benchmarkme" runtime: shiny output: flexdashboard::flex_dashboard: css: style.css favicon: favicon.png --- ```{r include=FALSE, eval=FALSE} drat::addRepo("csgillespie") rsconnect::deployApp(appDir = "~/github/benchmarkme-data/inst/shinyapps_io/", account="jumpingrivers", server = "shinyapps.io", appTitle = "benchmarkme" ) ``` ```{r setup, include=FALSE} library("shiny") library("flexdashboard") library("benchmarkmeData") library("plotly") data("past_results_v2", package="benchmarkmeData") source("functions.R") ``` Selections {.sidebar} =============================== Select the machines you are interested in ```{r} ## The shiny part selectInput("byte", "Byte compiled", c("All", "Standard", "Optimised")) selectInput("blas", "Blas", c("All", "Standard", "Optimised")) selectInput("os", "Operating system", c("All", "Linux", "Apple", "Windows", "Unix")) checkboxInput("is_parallel", "Parallel benchmarks", TRUE) selectInput("test", "Benchmark test", c("Programming", "Matrix functions", "Matrix calulations", "Read 5MB", "Read 50MB","Read 200MB", "Write 5MB", "Write 50MB", "Write 200MB")) fileInput("results", "Upload results file") user_rank = NULL results = reactive({ if(!is.null(input$results)) { user_data = readRDS(file = input$results$datapath) user_results = summarise_results(user_data) all_results = rbind(past_results, user_results) user_id = unique(user_data$id) } else { all_results = past_results user_id = NULL } #res = select_results("prog", all_results) res = select_results("prog", all_results, parallel = TRUE) blas = get_option(input$blas) byte = get_option(input$byte) is_parallel = input$is_parallel res = select_results(get_test(input$test), all_results, byte_optimize = byte, blas_optimize = blas, parallel = is_parallel) res$is_user = FALSE res$is_user[res$id == user_id] = TRUE res = clean_table(res) if(input$os != "All") res = res[res$sysname == input$os,] colnames(res) = c("id", "Rank", "Time", "CPU", "Byte Compile", "BLAS Opt", "OS", "RAM (GB)", "Test", "Cores", "is_user") res = res[,c(TRUE, !is_parallel, TRUE, TRUE, is.null(byte), is.null(blas), input$os == "All", TRUE, input$Test == "All", TRUE, is_parallel, TRUE)] if(nrow(res) > 0) res$Rank = 1:nrow(res) res }) br() renderUI({ ret = NULL user_rank = which(results()$is_user) if(!is.null(input$results)) { ret = paste(ret, "File uploaded.", br(), br()) if(sum(user_rank) > 0) { ret = paste(ret, "Your machine is ranked", user_rank, "out of", nrow(results()), "machines") } else { ret = paste(ret, br(), "For the current selection, your own machine isn't displayed") } } HTML(ret) }) div(class="div-wrapper", a(href="http://www.jumpingrivers.com", img(src = "logo.png", style="width:150px;") ) ) ``` Table ===================================== ### Top machines ```{r} DT::renderDataTable({ r = results() data_table = DT::datatable(results()[,-c(1, ncol(r))], rownames=FALSE) if(sum(r$is_user) > 0) { DT::formatStyle(data_table, "Rank", backgroundColor = DT::styleEqual(which(r$is_user), "orange")) } else { data_table } }) ``` Graphics ===================================== ### Absolute time ```{r} library(plotly) renderPlotly({ res = results() if(nrow(res) > 0) { res$size = res$is_user + 6 res$size[res$is_user] = 16 res$colour = "black" res$colour[res$is_user] = "steelblue" if(!input$is_parallel) { plot_ly(res, x = ~Rank, y = ~`Time`, type="scatter", marker = list(color = ~colour, width=10, size=~size), # color= ~is_user, size=~size, text = ~paste("CPU: ", CPU)) %>% layout(yaxis = list(type = "log", title = "Time (sec)")) } else { saveRDS(res, file = "/tmp/tmp.rds") plot_ly(res, x = ~Cores, y = ~`Time`, type="scatter", marker = list(color = ~colour, width=10, size=~size), # color= ~is_user, size=~size, text = ~paste("CPU: ", CPU)) %>% add_lines(color=~id) %>% layout(yaxis = list(type = "log", title = "Normalised time (to 1 core)"), showlegend = FALSE) } } else { plot_ly() } }) ``` ### Relative time ```{r} library(plotly) renderPlotly({ if(!input$is_parallel && nrow(results()) > 0) { relative = (results()$Time/min(results()$Time)) plot_ly(results(), x = ~Rank, y = ~relative, text = ~paste("CPU: ", CPU)) %>% layout(yaxis = list(type = "log", title = "Relative time")) } else { plot_ly() } }) ``` Machine summary ===================================== Column 1 ------------------------------------ ### CPUs ```{r} total = function(i) sum(i > 0, na.rm = TRUE) renderPlotly({ i3 = total(regexpr("i3", results()$CPU)) i5 = total(regexpr("i5", results()$CPU)) i7 = total(regexpr("i7", results()$CPU)) xeon = total(regexpr("Xeon", results()$CPU)) amd = total(regexpr("AMD", results()$CPU)) plot_ly( x = c(paste("Intel", c("i3", "i5", "i7", "Xeon")), "AMD"), y = c(i3, i5, i7, xeon, amd), name = "CPU distribution", type = "bar" ) }) ``` ### RAM ```{r} renderPlotly({ ram = table(results()$`RAM (GB)`) n = as.numeric(as.character(names(ram))) x_axis = factor(n) plot_ly( x = x_axis, y = ram, name = "CPU distribution",type = "bar" ) }) ``` ### Operating system ```{r} total = function(i) sum(i > 0, na.rm = TRUE) renderPlotly({ OS = sort(table(results()$OS)) nam = as.character(names(OS)) plot_ly( x = nam, y = as.vector(OS), name = "OS distribution", type = "bar" ) }) ``` Benchmark description ===================================== ### Overview There are two main benchmarks in this package: * `benchmark_std()` - This consists of three sub benchmarks: `benchmark_prog`, `benchmark_matrix_cal`, and `benchmark_matrix_fun` * `benchmark_io()` - This consists of two sub benchmarks: `read` and `write`. #### Programming benchmarks The `benchmark_prog` benchmark consists of timing five matrix programming operations: * $3,500,000$ Fibonacci numbers calculation (vector calc) - `bm_prog_fib`. * Creation of a $3500 \times 3500$ Hilbert matrix (matrix calc) - `bm_prog_hilbert`. * Grand common divisors of $1,000,000$ pairs (recursion) - `bm_prog_gcd`. * Creation of a $1600\times 1600$ Toeplitz matrix (loops) - `bm_prog_toeplitz`. * Escoufier's method on a $60\times 60$ matrix (mixed) - `bm_prog_escoufier`. #### Matrix calulations A collection of matrix benchmark functions aimed at assessing the calculation speed. * Creation, transp., deformation of a $2500\times 2500$ matrix - `bm_matrix_cal_manip`. * $2500\times2500$ normal distributed random matrix ^1000 - `bm_matrix_cal_power`. * Sorting of $7,000,000$ random values - `bm_matrix_cal_sort`. * $2500\times 2500$ cross-product matrix ($b = a' \times a$) - `bm_matrix_cal_cross_product` * Linear regression over a $3000 \times 3000$ matrix - `bm_matrix_cal`. #### Matrix functions A collection of matrix benchmark functions * FFT over $2,500,000$ random values - `bm_matrix_fun_fft`. * Eigenvalues of a $640\times 640$ random matrix - `bm_matrix_fun_eigen`. * Determinant of a $2500 \times 2500$ random matrix - `bm_matrix_fun_determinant`. * Cholesky decomposition of a $3000 \times 3000$ matrix - `bm_matrix_fun_cholesky`. * Inverse of a $1600 \times 1600$ random matrix - `bm_matrix_fun_inverse`. #### Input/Output * Reading a $5$, $50$ and $200$MB csv file * Writing a $5$, $50$ and $200$MB csv file The purpose of this benchmark isn't to compare `write.csv` to another package. Instead, we went to assess your machine. --- These benchmarks have been developed by many [authors](http://r.research.att.com/benchmarks/R-benchmark-25.R). benchmarkmeData/inst/shinyapps_io/favicon.png0000644000176200001440000002303113417716236021146 0ustar liggesusersPNG  IHDR``w8gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs%%IR$#IDATx]wTUWx4HbT1 jPq$hLL23iMNM4 7y4HGott̷k9w}Ϸ9{s},""V`JHKKC`` ***F[D޳rrr044MMVkx){@ #Gꊽ{N G[$ 66X|9p3<BpU6^:Z[[www709 /9¼sk2y2!JG[a# 66666077KaٸVqXxǝT̚5 GbRΎppU q;9y^*aaaL=p0mT梣cU2^g'^١555Pɓ'[ xh;d4KO333dggCKA@gg'ݻi'//kkk4KA@uM *++~URp}(**_<=m"BFF>h}5557yԄ`ʔ)`Xp8016FNn.D"h?(^x |ĉQZZVP33}}!cjj Xm MH$B&[[ϧEG M@]]=ziS>E_~ x!&L0X,lmmQZZ~B}==hhh ^ BՍk 6bf?8\._=C/---X,TUU^ IF$O]]ZZWA@jZ66X}hmmEVVTTT`ld4"\.VVV(((`H}p#4/^{Ň} ;@D5F,oFkk3yx!N9֍nhmmž-[p a=ì3IPVV6).8yxG\xcpvr7xс !==^***G@SS~;qrrrx3v,64ӟYffPQVƣQ^^xBx.^̬k踡;7CGG.xM +++ M(u55!''GfC bnϿ۷o r򂉱1p?3E?qU=ML`aaxTVVhÁrrr FLPՅNaǎhhly`ddHINOQ66?iw^z:^_ X:˱c:b`ڴiHJJ7p |7۷cѢEgX7nn p~9@,͛Dpwwe$ 1qm#!! &&& "-elݶ :::_Ԑj|ݻwߕD`ҤI=kLYMM 1|&O sss$HNIAmm_@VVvoo+X,b1._ +++tc%3f =ʜ|455!7/%%%cGBRR ]]]tp\L7nϟ\ݻ׮]C~~>"''gzxc\QQSR[[[%%x! rQ# 8ָ:dT*ţc?9EEEcFZZ4551y$XXX>;Ґ7D`|HOOǙ3g}ǎ>لذ~={]XZZbڶ Q^^ã7oBWGb ;s栭 yC|>4>ŋHMKt !2* <pttd/Kbٳ}}PWSџ~ª+Xzb|}|^>/^dd!!!-s7+{b"9%)WUUŬYp!. ddd (..galdkBAA)+zQQQPRR3%s1eDGG&@*ߗ.!7/Xx1V\ 999\~33z* |𷿡 KKK:7!H0 200)S0m4 *:LIvvx8'NDqq3!"\r9gW^Ek[lmm1-5pqqA[[䞶*+/L:HHH`r*QQĆeiO'NƔ|` Hy0yd򊊊ArJ $ɠ gia3̙30112__p(=pɩ϶aXpvr..]$ӅoBvN<==aY -Xʪ*ܻwBΝo^Ө@tL P]]_~C016'Saaaprtd2\\\ GS 'OfTUU pBzFƈr2srhpv e܏ DhXp!=rŹÒ%KU89%|>˗-Áشy3:-2Vr+) ***2e3f@YY 2_444`4~<޻7.ppp@&7VTT ((&&&Xl;]TTȨ(aY jjjX֬cǠ1c )) 6ֽ<X[ʕ+?) z*WajjOOC(bˑ~~fffAjZJ`حȫ׮4mT:}>}  C&w7oψW^EWW `7v999@kbΜ98xk̙3Q]SpuqT .>*))2/k++ !--M\.C8o`SSS>%c(ӧoooǣ31V[_9Dܵ r<7m¬3qYx<8;9t-hlldMMAw+T7nK=ݒf̟?rٳfAAA)))296)'#+;{ɘ`ٸsE7%^^2 k "cSy| PUUU,R)\۷Q\\bO?EII :U O>AP>iggkkk Acc#*0O>y3B.]&V^-!** fff9s)¢"l+ܿY{uu֪}u/dAAASNŻ#/nL$&&ֆLz9&&cÆ &T*Edd$zF҂#Xa:;;1~xð!'1~x`dX\ƻJ|2l~ڴ~e`=OH&@*"55, ˗/"T>ޛ  Zс<ϟ ğ׮n''#;;^^^PRRB]]Μ= e%%,dT}磴o}s=#C$A(ڊK!!c|AGT4\.p)HЀN`2?311CX 6C@ @[0ׇ5X,`ggyyy!%BHٳgW<._vDFF"!! .WWA?' ? 2* @K!)) W^Н" 3 J{WB\|abb>tgO騪͛1cƌn|>0^{Dee%W=6Nxvuux$ᐉ)%$&o% MM:vXB}Ekx Ύغ*++vJLLNo'NPDD !5JMM 4EEG3嵵N6=zf 96ٙH$Y"3.X@׮]#"ᤫGKP]] `C)77_yyy4yTc;Gwu%cSSWT7;vÇ}HCc#%Pn^^$~/HR:OFl.xJJm2R){7QWX,O?6C##Za 陝tQzÃ:D~+W6_@DDe y={IRڽg) & w[`kk GGGݩZ9s. sss\r)))wv ))!"\ A XdI^![WW uuA `prr0R"o~}"p9H$X,,ǢE}xX`a+puMMMHNN􊉍E|B,. `X w^M=Q\R tttbzz>= ؼi.]rttt<3FfёG?$MNSkC1.[ =<A|)񔔈咚8xuK$:u41$[Z@Ʋh4N_3slwވ;{RР~~r*x$fTXXH99s.***N72f mڼ*''ݹJJJ|v 5v,s8JIg 1T'"JHL$Sssf_㍍m(>>>#˔R#n' aFRUS#s ƫRUS?LDD)))ta@z4w|#|@ DCmW\ @Z\nbi٧=}9i0 BzST$y.l221'Oh~(++7|2.kQmm-utt۷6^2jjjѣtAX.\ ֿo߾!?HZJKKx)fQTV---/7?6K'MӧO{ oo@6K::%i]rH$Qkk+ܹC}= 4dbsaDD`sƹT6}:YsPABD@ZI[Gmmi;Pʝ;ʔ $C##'6yy{SLL љgt!@C {I^uh/1H$[nѢ^#s8MuDҦ&{.SVvvm㠬J۾JCH$$ʆ@ %>>݆ܹѣaɓgsdjnNooD }dmcÔ)(*_>999GACE`P3,B>Ll.TTpDoy">S}MM)>>dVUW%̰4w.[髯&[;;RPT$<'ᐾ!}GTQQ1m9bܽ{ll{7 fVFjD=.Iv~~dR7ngH$/n%EEpH\2"YEEE#k#zEZ[[ZZZ{8ɡ̰pѢa7H$oglMmm N#NGH?$v3Olasrj  (***5OOYXPhXؐߟS\\3#{#)C¼)33s{b1Y?>gtuuѷ;w2^ %__*++hƋpea%շ֭cPEee_{սw͝7i|KLQRb//((0r2 64PVtEXtThumb::URIfile:///mntlog/favicons/2016-12-02/24223e630c17715c41597aef2c8d4ca9.ico.pngIENDB`